Skip to content

Commit eda1b97

Browse files
author
Emanuele Parisi [email protected]
committed
Add Zicfiss and Zicfilp CSRs
1 parent ed868dc commit eda1b97

File tree

1 file changed

+34
-6
lines changed

1 file changed

+34
-6
lines changed

core/include/riscv_pkg.sv

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)