@@ -397,11 +397,27 @@ pub const csr = struct {
397397 pub const Csr = riscv32_common .csr .Csr ;
398398
399399 /// Architecture Number Register
400+ /// Fields correspond to individual letters. 1=A, 2=B, etc.
400401 /// Examples:
401402 /// - 0xDC68D841 - WCH-V2A
402403 /// - 0xDC68D886 - WCH-V4F
403- pub const marchid = riscv32_common .csr .marchid ;
404- pub const mimpid = riscv32_common .csr .mimpid ;
404+ pub const marchid = Csr (0xF12 , packed struct (u32 ) {
405+ version : u4 = 0 ,
406+ serial : u5 = 0 ,
407+ arch : u5 = 0 ,
408+ reserved15 : u1 = 0 ,
409+ vendor2 : u5 = 0 , // 'H'
410+ vendor1 : u5 = 0 , // 'C'
411+ vendor0 : u5 = 0 , // 'W'
412+ reserved : u1 = 0 ,
413+ });
414+ pub const mimpid = Csr (0xF13 , packed struct (u32 ) {
415+ reserved0 : u16 = 0 ,
416+ vendor2 : u5 = 0 , // 'H'
417+ vendor1 : u5 = 0 , // 'C'
418+ vendor0 : u5 = 0 , // 'W'
419+ reserved31 : u1 = 0 ,
420+ });
405421
406422 /// Machine Mode Status Register
407423 pub const mstatus = Csr (0x300 , packed struct (u32 ) {
@@ -414,26 +430,29 @@ pub const csr = struct {
414430 };
415431
416432 /// [2:0] Reserved
417- reserved4 : u3 = 0 ,
433+ reserved0 : u3 = 0 ,
418434 /// [3] Machine mode interrupt enable
419435 mie : u1 ,
420436 /// [6:4] Reserved
421- reserved3 : u3 = 0 ,
437+ reserved4 : u3 = 0 ,
422438 /// [7] Interrupt enable state before entering interrupt
423439 mpie : u1 ,
424440 /// [10:8] Reserved
425- reserved2 : u3 = 0 ,
441+ reserved8 : u3 = 0 ,
426442 /// [12:11] Privileged mode before entering break
427443 mpp : u2 = 0 ,
428- /// [14:13] Reserved
429- reserved1 : u2 = 0 ,
430444 /// [14:13] Floating-point unit status
431445 /// Valid only for WCH-V4F
446+ /// NOTE: reserved on other chips
432447 fs : Fs = .off ,
433448 /// [31:15] Reserved
434- reserved0 : u15 = 0 ,
449+ reserved15 : u17 = 0 ,
450+ });
451+ pub const misa = Csr (0x301 , packed struct (u32 ) {
452+ extensions : u26 = 0 ,
453+ reserved26 : u4 = 0 ,
454+ mxl : u2 = 0 ,
435455 });
436- pub const misa = riscv32_common .csr .misa ;
437456 /// Machine Mode Exception Base Address Register
438457 pub const mtvec = Csr (0x305 , packed struct (u32 ) {
439458 /// [0] Mode 0
@@ -463,7 +482,15 @@ pub const csr = struct {
463482 pub const pmpaddr2 = riscv32_common .csr .pmpaddr2 ;
464483 pub const pmpaddr3 = riscv32_common .csr .pmpaddr3 ;
465484
466- pub const fcsr = riscv32_common .csr .fcsr ;
485+ pub const fcsr = Csr (0x003 , packed struct (u32 ) {
486+ nx : u1 = 0 ,
487+ uf : u1 = 0 ,
488+ of : u1 = 0 ,
489+ dz : u1 = 0 ,
490+ nv : u1 = 0 ,
491+ frm : u3 = 0 ,
492+ reserved8 : u24 = 0 ,
493+ });
467494 pub const fflags = riscv32_common .csr .fflags ;
468495 pub const frm = riscv32_common .csr .frm ;
469496
@@ -475,8 +502,25 @@ pub const csr = struct {
475502 pub const gintenr = Csr (0x800 , u32 );
476503 pub const intsyscr = Csr (0x804 , cpu_impl .csr_types .intsyscr );
477504 pub const corecfgr = Csr (0xBC0 , u32 );
478- pub const cstrcr = Csr (0xBC2 , u32 );
505+ pub const cstrcr = Csr (0xBC2 , packed struct (u32 ) {
506+ reserved0 : u1 = 0 ,
507+ icddisable : u1 = 0 ,
508+ reserved2 : u22 = 0 ,
509+ iccodestren : u1 = 0 ,
510+ icsramstren : u1 = 0 ,
511+ reserved26 : u6 = 0 ,
512+ });
479513 pub const cpmpocr = Csr (0xBC3 , u32 );
480- pub const cmcr = Csr (0xBD0 , u32 );
481- pub const cinfor = Csr (0xFC0 , u32 );
514+ pub const cmcr = Csr (0xBD0 , packed struct (u32 ) {
515+ opcode : u2 = 0 ,
516+ idxmode : u1 = 0 ,
517+ reserved3 : u2 = 0 ,
518+ vaddr : u27 = 0 ,
519+ });
520+ pub const cinfor = Csr (0xFC0 , packed struct (u32 ) {
521+ iclinesize : u2 = 0 ,
522+ icszie : u3 = 0 ,
523+ icway : u2 = 0 ,
524+ reserved7 : u25 = 0 ,
525+ });
482526};
0 commit comments