@@ -83,9 +83,11 @@ package riscv;
8383
8484 typedef struct packed {
8585 logic sd; // signal dirty state - read-only
86- logic [62 : 34 ] wpri6 ; // writes preserved reads ignored
86+ logic [62 : 34 ] wpri7 ; // writes preserved reads ignored
8787 xlen_e uxl; // variable user mode xlen - hardwired to zero
88- logic [11 : 0 ] wpri5; // writes preserved reads ignored
88+ logic [7 : 0 ] wpri6; // writes preserved reads ignored
89+ logic spelp; // hold previous ELP in S-mode
90+ logic [2 : 0 ] wpri5; // writes preserved reads ignored
8991 logic mxr; // make executable readable
9092 logic sum; // permit supervisor user memory access
9193 logic wpri4; // writes preserved reads ignored
@@ -123,14 +125,17 @@ package riscv;
123125
124126 typedef struct packed {
125127 logic sd; // signal dirty state - read-only
126- logic [62 : 40 ] wpri4; // writes preserved reads ignored
128+ logic [62 : 42 ] wpri5; // writes preserved reads ignored
129+ logic mpelp; // hold previous ELP in M-mode
130+ logic wpri4; // writes preserved reads ignored
127131 logic mpv; // machine previous virtualization mode
128132 logic gva; // variable set when trap writes to stval
129133 logic mbe; // endianness memory accesses made from M-mode
130134 logic sbe; // endianness memory accesses made from S-mode
131135 xlen_e sxl; // variable supervisor mode xlen - hardwired to zero
132136 xlen_e uxl; // variable user mode xlen - hardwired to zero
133- logic [8 : 0 ] wpri3; // writes preserved reads ignored
137+ logic [7 : 0 ] wpri3; // writes preserved reads ignored
138+ logic spelp; // hold previous ELP in S-mode
134139 logic tsr; // trap sret
135140 logic tw; // time wait
136141 logic tvm; // trap virtual memory
@@ -152,14 +157,27 @@ package riscv;
152157 logic wpri0; // writes preserved reads ignored
153158 } mstatus_rv_t ;
154159
160+ typedef struct packed {
161+ logic [63 : 11 ] wpri1; // writes preserved reads ignored
162+ logic mlpe; // enable Zicfilp in M-mode
163+ logic sseed; // not implemented - requires Zkr extension
164+ logic useed; // not implemented - requires Zkr extension
165+ logic [7 : 3 ] wpri0; // writes preserved reads ignored
166+ logic rlb; // not implemented - requires Smepmp extension
167+ logic mmwp; // not implemented - requires Smepmp extension
168+ logic mml; // not implemented - requires Smepmp extension
169+ } mseccfg_t ;
170+
155171 typedef struct packed {
156172 logic stce; // not implemented - requires Sctc extension
157173 logic pbmte; // not implemented - requires Svpbmt extension
158174 logic [61 : 8 ] wpri1; // writes preserved reads ignored
159175 logic cbze; // not implemented - requires Zicboz extension
160176 logic cbcfe; // not implemented - requires Zicbom extension
161177 logic [1 : 0 ] cbie; // not implemented - requires Zicbom extension
162- logic [2 : 0 ] wpri0; // writes preserved reads ignored
178+ logic sse; // enable Zicfiss in less priviledged modes
179+ logic lpe; // enable Zicfilp in less priviledged modes
180+ logic wpri0; // writes preserved reads ignored
163181 logic fiom; // fence of I/O implies memory
164182 } envcfg_rv_t ;
165183
@@ -581,6 +599,8 @@ package riscv;
581599 CSR_MCYCLEH = 12'hB80 ,
582600 CSR_MINSTRET = 12'hB02 ,
583601 CSR_MINSTRETH = 12'hB82 ,
602+ CSR_MSECCFG = 12'h747 ,
603+ CSR_MSECCFGH = 12'h757 ,
584604 // Performance Counters
585605 CSR_MHPM_COUNTER_3 = 12'hB03 ,
586606 CSR_MHPM_COUNTER_4 = 12'hB04 ,
@@ -658,6 +678,8 @@ package riscv;
658678 CSR_DPC = 12'h7b1 ,
659679 CSR_DSCRATCH0 = 12'h7b2 , // optional
660680 CSR_DSCRATCH1 = 12'h7b3 , // optional
681+ // Control-Flow Integrity - Zicfiss
682+ CSR_SSP = 12'h011 ,
661683 // Counters and Timers (User Mode - R/O Shadows)
662684 CSR_CYCLE = 12'hC00 ,
663685 CSR_CYCLEH = 12'hC80 ,
@@ -736,6 +758,7 @@ package riscv;
736758 localparam logic [63 : 0 ] SSTATUS_XS = 'h00018000 ;
737759 localparam logic [63 : 0 ] SSTATUS_SUM = 'h00040000 ;
738760 localparam logic [63 : 0 ] SSTATUS_MXR = 'h00080000 ;
761+ localparam logic [63 : 0 ] SSTATUS_SPELP = 'h00800000 ;
739762 localparam logic [63 : 0 ] SSTATUS_UPIE = 'h00000010 ;
740763 localparam logic [63 : 0 ] SSTATUS_UXL = 64'h0000000300000000 ;
741764 localparam logic [63 : 0 ] SSTATUS_SD = { IS_XLEN64 , 31'h00000000 , ~ IS_XLEN64 , 31'h00000000 } ;
@@ -767,14 +790,18 @@ package riscv;
767790 localparam logic [63 : 0 ] MSTATUS_MPRV = 'h00020000 ;
768791 localparam logic [63 : 0 ] MSTATUS_SUM = 'h00040000 ;
769792 localparam logic [63 : 0 ] MSTATUS_MXR = 'h00080000 ;
793+ localparam logic [63 : 0 ] MSTATUS_SPELP = 'h00800000 ;
770794 localparam logic [63 : 0 ] MSTATUS_TVM = 'h00100000 ;
771795 localparam logic [63 : 0 ] MSTATUS_TW = 'h00200000 ;
772796 localparam logic [63 : 0 ] MSTATUS_TSR = 'h00400000 ;
773797 localparam logic [63 : 0 ] MSTATUS_UXL = { 30'h0000000 , IS_XLEN64 , IS_XLEN64 , 32'h00000000 } ;
774798 localparam logic [63 : 0 ] MSTATUS_SXL = { 28'h0000000 , IS_XLEN64 , IS_XLEN64 , 34'h00000000 } ;
799+ localparam logic [63 : 0 ] MSTATUS_MPELP = 'h0000020000000000 ;
775800 localparam logic [63 : 0 ] MSTATUS_SD = { IS_XLEN64 , 31'h00000000 , ~ IS_XLEN64 , 31'h00000000 } ;
776801
777802 localparam logic [63 : 0 ] MENVCFG_FIOM = 'h00000001 ;
803+ localparam logic [63 : 0 ] MENVCFG_LPE = 'h00000004 ;
804+ localparam logic [63 : 0 ] MENVCFG_SSE = 'h00000008 ;
778805 localparam logic [63 : 0 ] MENVCFG_CBIE = 'h00000030 ;
779806 localparam logic [63 : 0 ] MENVCFG_CBFE = 'h00000040 ;
780807 localparam logic [63 : 0 ] MENVCFG_CBZE = 'h00000080 ;
@@ -847,7 +874,8 @@ package riscv;
847874 // -----
848875 typedef struct packed {
849876 logic [31 : 28 ] xdebugver;
850- logic [27 : 18 ] zero2;
877+ logic [27 : 19 ] zero2;
878+ logic pelp;
851879 logic ebreakvs;
852880 logic ebreakvu;
853881 logic ebreakm;
0 commit comments