]> Git Repo - qemu.git/blame - target/riscv/cpu_bits.h
target/riscv: rvk: add support for zkne/zknd extension in RV64
[qemu.git] / target / riscv / cpu_bits.h
CommitLineData
dc5bd18f
MC
1/* RISC-V ISA constants */
2
f91005e1
MA
3#ifndef TARGET_RISCV_CPU_BITS_H
4#define TARGET_RISCV_CPU_BITS_H
5
dc5bd18f 6#define get_field(reg, mask) (((reg) & \
284d697c
YJ
7 (uint64_t)(mask)) / ((mask) & ~((mask) << 1)))
8#define set_field(reg, mask, val) (((reg) & ~(uint64_t)(mask)) | \
9 (((uint64_t)(val) * ((mask) & ~((mask) << 1))) & \
10 (uint64_t)(mask)))
dc5bd18f 11
426f0348
MC
12/* Floating point round mode */
13#define FSR_RD_SHIFT 5
14#define FSR_RD (0x7 << FSR_RD_SHIFT)
15
16/* Floating point accrued exception flags */
17#define FPEXC_NX 0x01
18#define FPEXC_UF 0x02
19#define FPEXC_OF 0x04
20#define FPEXC_DZ 0x08
21#define FPEXC_NV 0x10
22
23/* Floating point status register bits */
24#define FSR_AEXC_SHIFT 0
25#define FSR_NVA (FPEXC_NV << FSR_AEXC_SHIFT)
26#define FSR_OFA (FPEXC_OF << FSR_AEXC_SHIFT)
27#define FSR_UFA (FPEXC_UF << FSR_AEXC_SHIFT)
28#define FSR_DZA (FPEXC_DZ << FSR_AEXC_SHIFT)
29#define FSR_NXA (FPEXC_NX << FSR_AEXC_SHIFT)
30#define FSR_AEXC (FSR_NVA | FSR_OFA | FSR_UFA | FSR_DZA | FSR_NXA)
31
8e3a1f18
LZ
32/* Vector Fixed-Point round model */
33#define FSR_VXRM_SHIFT 9
34#define FSR_VXRM (0x3 << FSR_VXRM_SHIFT)
35
36/* Vector Fixed-Point saturation flag */
37#define FSR_VXSAT_SHIFT 8
38#define FSR_VXSAT (0x1 << FSR_VXSAT_SHIFT)
39
426f0348
MC
40/* Control and Status Registers */
41
42/* User Trap Setup */
43#define CSR_USTATUS 0x000
44#define CSR_UIE 0x004
45#define CSR_UTVEC 0x005
46
47/* User Trap Handling */
48#define CSR_USCRATCH 0x040
49#define CSR_UEPC 0x041
50#define CSR_UCAUSE 0x042
51#define CSR_UTVAL 0x043
52#define CSR_UIP 0x044
53
54/* User Floating-Point CSRs */
55#define CSR_FFLAGS 0x001
56#define CSR_FRM 0x002
57#define CSR_FCSR 0x003
58
8e3a1f18
LZ
59/* User Vector CSRs */
60#define CSR_VSTART 0x008
61#define CSR_VXSAT 0x009
62#define CSR_VXRM 0x00a
4594fa5a 63#define CSR_VCSR 0x00f
8e3a1f18
LZ
64#define CSR_VL 0xc20
65#define CSR_VTYPE 0xc21
2e565054 66#define CSR_VLENB 0xc22
8e3a1f18 67
4594fa5a
LZ
68/* VCSR fields */
69#define VCSR_VXSAT_SHIFT 0
70#define VCSR_VXSAT (0x1 << VCSR_VXSAT_SHIFT)
71#define VCSR_VXRM_SHIFT 1
72#define VCSR_VXRM (0x3 << VCSR_VXRM_SHIFT)
73
426f0348
MC
74/* User Timers and Counters */
75#define CSR_CYCLE 0xc00
76#define CSR_TIME 0xc01
77#define CSR_INSTRET 0xc02
78#define CSR_HPMCOUNTER3 0xc03
79#define CSR_HPMCOUNTER4 0xc04
80#define CSR_HPMCOUNTER5 0xc05
81#define CSR_HPMCOUNTER6 0xc06
82#define CSR_HPMCOUNTER7 0xc07
83#define CSR_HPMCOUNTER8 0xc08
84#define CSR_HPMCOUNTER9 0xc09
85#define CSR_HPMCOUNTER10 0xc0a
86#define CSR_HPMCOUNTER11 0xc0b
87#define CSR_HPMCOUNTER12 0xc0c
88#define CSR_HPMCOUNTER13 0xc0d
89#define CSR_HPMCOUNTER14 0xc0e
90#define CSR_HPMCOUNTER15 0xc0f
91#define CSR_HPMCOUNTER16 0xc10
92#define CSR_HPMCOUNTER17 0xc11
93#define CSR_HPMCOUNTER18 0xc12
94#define CSR_HPMCOUNTER19 0xc13
95#define CSR_HPMCOUNTER20 0xc14
96#define CSR_HPMCOUNTER21 0xc15
97#define CSR_HPMCOUNTER22 0xc16
98#define CSR_HPMCOUNTER23 0xc17
99#define CSR_HPMCOUNTER24 0xc18
100#define CSR_HPMCOUNTER25 0xc19
101#define CSR_HPMCOUNTER26 0xc1a
102#define CSR_HPMCOUNTER27 0xc1b
103#define CSR_HPMCOUNTER28 0xc1c
104#define CSR_HPMCOUNTER29 0xc1d
105#define CSR_HPMCOUNTER30 0xc1e
106#define CSR_HPMCOUNTER31 0xc1f
107#define CSR_CYCLEH 0xc80
108#define CSR_TIMEH 0xc81
109#define CSR_INSTRETH 0xc82
110#define CSR_HPMCOUNTER3H 0xc83
111#define CSR_HPMCOUNTER4H 0xc84
112#define CSR_HPMCOUNTER5H 0xc85
113#define CSR_HPMCOUNTER6H 0xc86
114#define CSR_HPMCOUNTER7H 0xc87
115#define CSR_HPMCOUNTER8H 0xc88
116#define CSR_HPMCOUNTER9H 0xc89
117#define CSR_HPMCOUNTER10H 0xc8a
118#define CSR_HPMCOUNTER11H 0xc8b
119#define CSR_HPMCOUNTER12H 0xc8c
120#define CSR_HPMCOUNTER13H 0xc8d
121#define CSR_HPMCOUNTER14H 0xc8e
122#define CSR_HPMCOUNTER15H 0xc8f
123#define CSR_HPMCOUNTER16H 0xc90
124#define CSR_HPMCOUNTER17H 0xc91
125#define CSR_HPMCOUNTER18H 0xc92
126#define CSR_HPMCOUNTER19H 0xc93
127#define CSR_HPMCOUNTER20H 0xc94
128#define CSR_HPMCOUNTER21H 0xc95
129#define CSR_HPMCOUNTER22H 0xc96
130#define CSR_HPMCOUNTER23H 0xc97
131#define CSR_HPMCOUNTER24H 0xc98
132#define CSR_HPMCOUNTER25H 0xc99
133#define CSR_HPMCOUNTER26H 0xc9a
134#define CSR_HPMCOUNTER27H 0xc9b
135#define CSR_HPMCOUNTER28H 0xc9c
136#define CSR_HPMCOUNTER29H 0xc9d
137#define CSR_HPMCOUNTER30H 0xc9e
138#define CSR_HPMCOUNTER31H 0xc9f
139
140/* Machine Timers and Counters */
141#define CSR_MCYCLE 0xb00
142#define CSR_MINSTRET 0xb02
143#define CSR_MCYCLEH 0xb80
144#define CSR_MINSTRETH 0xb82
145
146/* Machine Information Registers */
147#define CSR_MVENDORID 0xf11
148#define CSR_MARCHID 0xf12
149#define CSR_MIMPID 0xf13
150#define CSR_MHARTID 0xf14
3e6a417c 151#define CSR_MCONFIGPTR 0xf15
426f0348
MC
152
153/* Machine Trap Setup */
154#define CSR_MSTATUS 0x300
155#define CSR_MISA 0x301
156#define CSR_MEDELEG 0x302
157#define CSR_MIDELEG 0x303
158#define CSR_MIE 0x304
159#define CSR_MTVEC 0x305
160#define CSR_MCOUNTEREN 0x306
161
551fa7e8
AF
162/* 32-bit only */
163#define CSR_MSTATUSH 0x310
164
426f0348
MC
165/* Machine Trap Handling */
166#define CSR_MSCRATCH 0x340
167#define CSR_MEPC 0x341
168#define CSR_MCAUSE 0x342
8e73df6a 169#define CSR_MTVAL 0x343
426f0348
MC
170#define CSR_MIP 0x344
171
aa7508bb
AP
172/* Machine-Level Window to Indirectly Accessed Registers (AIA) */
173#define CSR_MISELECT 0x350
174#define CSR_MIREG 0x351
175
176/* Machine-Level Interrupts (AIA) */
177#define CSR_MTOPI 0xfb0
178
179/* Machine-Level IMSIC Interface (AIA) */
180#define CSR_MSETEIPNUM 0x358
181#define CSR_MCLREIPNUM 0x359
182#define CSR_MSETEIENUM 0x35a
183#define CSR_MCLREIENUM 0x35b
184#define CSR_MTOPEI 0x35c
185
186/* Virtual Interrupts for Supervisor Level (AIA) */
187#define CSR_MVIEN 0x308
188#define CSR_MVIP 0x309
189
190/* Machine-Level High-Half CSRs (AIA) */
191#define CSR_MIDELEGH 0x313
192#define CSR_MIEH 0x314
193#define CSR_MVIENH 0x318
194#define CSR_MVIPH 0x319
195#define CSR_MIPH 0x354
196
426f0348
MC
197/* Supervisor Trap Setup */
198#define CSR_SSTATUS 0x100
8e73df6a
JW
199#define CSR_SEDELEG 0x102
200#define CSR_SIDELEG 0x103
426f0348
MC
201#define CSR_SIE 0x104
202#define CSR_STVEC 0x105
203#define CSR_SCOUNTEREN 0x106
204
29a9ec9b
AP
205/* Supervisor Configuration CSRs */
206#define CSR_SENVCFG 0x10A
207
426f0348
MC
208/* Supervisor Trap Handling */
209#define CSR_SSCRATCH 0x140
210#define CSR_SEPC 0x141
211#define CSR_SCAUSE 0x142
8e73df6a 212#define CSR_STVAL 0x143
426f0348
MC
213#define CSR_SIP 0x144
214
215/* Supervisor Protection and Translation */
216#define CSR_SPTBR 0x180
217#define CSR_SATP 0x180
218
aa7508bb
AP
219/* Supervisor-Level Window to Indirectly Accessed Registers (AIA) */
220#define CSR_SISELECT 0x150
221#define CSR_SIREG 0x151
222
223/* Supervisor-Level Interrupts (AIA) */
224#define CSR_STOPI 0xdb0
225
226/* Supervisor-Level IMSIC Interface (AIA) */
227#define CSR_SSETEIPNUM 0x158
228#define CSR_SCLREIPNUM 0x159
229#define CSR_SSETEIENUM 0x15a
230#define CSR_SCLREIENUM 0x15b
231#define CSR_STOPEI 0x15c
232
233/* Supervisor-Level High-Half CSRs (AIA) */
234#define CSR_SIEH 0x114
235#define CSR_SIPH 0x154
236
7f8dcfeb
AF
237/* Hpervisor CSRs */
238#define CSR_HSTATUS 0x600
239#define CSR_HEDELEG 0x602
240#define CSR_HIDELEG 0x603
bd023ce3
AF
241#define CSR_HIE 0x604
242#define CSR_HCOUNTEREN 0x606
83028098 243#define CSR_HGEIE 0x607
bd023ce3 244#define CSR_HTVAL 0x643
83028098 245#define CSR_HVIP 0x645
bd023ce3
AF
246#define CSR_HIP 0x644
247#define CSR_HTINST 0x64A
83028098 248#define CSR_HGEIP 0xE12
7f8dcfeb 249#define CSR_HGATP 0x680
bd023ce3
AF
250#define CSR_HTIMEDELTA 0x605
251#define CSR_HTIMEDELTAH 0x615
7f8dcfeb 252
29a9ec9b
AP
253/* Hypervisor Configuration CSRs */
254#define CSR_HENVCFG 0x60A
255#define CSR_HENVCFGH 0x61A
256
bd023ce3
AF
257/* Virtual CSRs */
258#define CSR_VSSTATUS 0x200
259#define CSR_VSIE 0x204
260#define CSR_VSTVEC 0x205
261#define CSR_VSSCRATCH 0x240
262#define CSR_VSEPC 0x241
263#define CSR_VSCAUSE 0x242
264#define CSR_VSTVAL 0x243
265#define CSR_VSIP 0x244
266#define CSR_VSATP 0x280
267
268#define CSR_MTINST 0x34a
269#define CSR_MTVAL2 0x34b
270
aa7508bb
AP
271/* Virtual Interrupts and Interrupt Priorities (H-extension with AIA) */
272#define CSR_HVIEN 0x608
273#define CSR_HVICTL 0x609
274#define CSR_HVIPRIO1 0x646
275#define CSR_HVIPRIO2 0x647
276
277/* VS-Level Window to Indirectly Accessed Registers (H-extension with AIA) */
278#define CSR_VSISELECT 0x250
279#define CSR_VSIREG 0x251
280
281/* VS-Level Interrupts (H-extension with AIA) */
282#define CSR_VSTOPI 0xeb0
283
284/* VS-Level IMSIC Interface (H-extension with AIA) */
285#define CSR_VSSETEIPNUM 0x258
286#define CSR_VSCLREIPNUM 0x259
287#define CSR_VSSETEIENUM 0x25a
288#define CSR_VSCLREIENUM 0x25b
289#define CSR_VSTOPEI 0x25c
290
291/* Hypervisor and VS-Level High-Half CSRs (H-extension with AIA) */
292#define CSR_HIDELEGH 0x613
293#define CSR_HVIENH 0x618
294#define CSR_HVIPH 0x655
295#define CSR_HVIPRIO1H 0x656
296#define CSR_HVIPRIO2H 0x657
297#define CSR_VSIEH 0x214
298#define CSR_VSIPH 0x254
299
29a9ec9b
AP
300/* Machine Configuration CSRs */
301#define CSR_MENVCFG 0x30A
302#define CSR_MENVCFGH 0x31A
303
db9f1dac 304/* Enhanced Physical Memory Protection (ePMP) */
a44da25a
AF
305#define CSR_MSECCFG 0x747
306#define CSR_MSECCFGH 0x757
426f0348
MC
307/* Physical Memory Protection */
308#define CSR_PMPCFG0 0x3a0
309#define CSR_PMPCFG1 0x3a1
310#define CSR_PMPCFG2 0x3a2
311#define CSR_PMPCFG3 0x3a3
312#define CSR_PMPADDR0 0x3b0
313#define CSR_PMPADDR1 0x3b1
314#define CSR_PMPADDR2 0x3b2
315#define CSR_PMPADDR3 0x3b3
316#define CSR_PMPADDR4 0x3b4
317#define CSR_PMPADDR5 0x3b5
318#define CSR_PMPADDR6 0x3b6
319#define CSR_PMPADDR7 0x3b7
320#define CSR_PMPADDR8 0x3b8
321#define CSR_PMPADDR9 0x3b9
322#define CSR_PMPADDR10 0x3ba
323#define CSR_PMPADDR11 0x3bb
324#define CSR_PMPADDR12 0x3bc
325#define CSR_PMPADDR13 0x3bd
326#define CSR_PMPADDR14 0x3be
327#define CSR_PMPADDR15 0x3bf
328
329/* Debug/Trace Registers (shared with Debug Mode) */
330#define CSR_TSELECT 0x7a0
331#define CSR_TDATA1 0x7a1
332#define CSR_TDATA2 0x7a2
333#define CSR_TDATA3 0x7a3
334
335/* Debug Mode Registers */
336#define CSR_DCSR 0x7b0
337#define CSR_DPC 0x7b1
338#define CSR_DSCRATCH 0x7b2
339
340/* Performance Counters */
341#define CSR_MHPMCOUNTER3 0xb03
342#define CSR_MHPMCOUNTER4 0xb04
343#define CSR_MHPMCOUNTER5 0xb05
344#define CSR_MHPMCOUNTER6 0xb06
345#define CSR_MHPMCOUNTER7 0xb07
346#define CSR_MHPMCOUNTER8 0xb08
347#define CSR_MHPMCOUNTER9 0xb09
348#define CSR_MHPMCOUNTER10 0xb0a
349#define CSR_MHPMCOUNTER11 0xb0b
350#define CSR_MHPMCOUNTER12 0xb0c
351#define CSR_MHPMCOUNTER13 0xb0d
352#define CSR_MHPMCOUNTER14 0xb0e
353#define CSR_MHPMCOUNTER15 0xb0f
354#define CSR_MHPMCOUNTER16 0xb10
355#define CSR_MHPMCOUNTER17 0xb11
356#define CSR_MHPMCOUNTER18 0xb12
357#define CSR_MHPMCOUNTER19 0xb13
358#define CSR_MHPMCOUNTER20 0xb14
359#define CSR_MHPMCOUNTER21 0xb15
360#define CSR_MHPMCOUNTER22 0xb16
361#define CSR_MHPMCOUNTER23 0xb17
362#define CSR_MHPMCOUNTER24 0xb18
363#define CSR_MHPMCOUNTER25 0xb19
364#define CSR_MHPMCOUNTER26 0xb1a
365#define CSR_MHPMCOUNTER27 0xb1b
366#define CSR_MHPMCOUNTER28 0xb1c
367#define CSR_MHPMCOUNTER29 0xb1d
368#define CSR_MHPMCOUNTER30 0xb1e
369#define CSR_MHPMCOUNTER31 0xb1f
370#define CSR_MHPMEVENT3 0x323
371#define CSR_MHPMEVENT4 0x324
372#define CSR_MHPMEVENT5 0x325
373#define CSR_MHPMEVENT6 0x326
374#define CSR_MHPMEVENT7 0x327
375#define CSR_MHPMEVENT8 0x328
376#define CSR_MHPMEVENT9 0x329
377#define CSR_MHPMEVENT10 0x32a
378#define CSR_MHPMEVENT11 0x32b
379#define CSR_MHPMEVENT12 0x32c
380#define CSR_MHPMEVENT13 0x32d
381#define CSR_MHPMEVENT14 0x32e
382#define CSR_MHPMEVENT15 0x32f
383#define CSR_MHPMEVENT16 0x330
384#define CSR_MHPMEVENT17 0x331
385#define CSR_MHPMEVENT18 0x332
386#define CSR_MHPMEVENT19 0x333
387#define CSR_MHPMEVENT20 0x334
388#define CSR_MHPMEVENT21 0x335
389#define CSR_MHPMEVENT22 0x336
390#define CSR_MHPMEVENT23 0x337
391#define CSR_MHPMEVENT24 0x338
392#define CSR_MHPMEVENT25 0x339
393#define CSR_MHPMEVENT26 0x33a
394#define CSR_MHPMEVENT27 0x33b
395#define CSR_MHPMEVENT28 0x33c
396#define CSR_MHPMEVENT29 0x33d
397#define CSR_MHPMEVENT30 0x33e
398#define CSR_MHPMEVENT31 0x33f
399#define CSR_MHPMCOUNTER3H 0xb83
400#define CSR_MHPMCOUNTER4H 0xb84
401#define CSR_MHPMCOUNTER5H 0xb85
402#define CSR_MHPMCOUNTER6H 0xb86
403#define CSR_MHPMCOUNTER7H 0xb87
404#define CSR_MHPMCOUNTER8H 0xb88
405#define CSR_MHPMCOUNTER9H 0xb89
406#define CSR_MHPMCOUNTER10H 0xb8a
407#define CSR_MHPMCOUNTER11H 0xb8b
408#define CSR_MHPMCOUNTER12H 0xb8c
409#define CSR_MHPMCOUNTER13H 0xb8d
410#define CSR_MHPMCOUNTER14H 0xb8e
411#define CSR_MHPMCOUNTER15H 0xb8f
412#define CSR_MHPMCOUNTER16H 0xb90
413#define CSR_MHPMCOUNTER17H 0xb91
414#define CSR_MHPMCOUNTER18H 0xb92
415#define CSR_MHPMCOUNTER19H 0xb93
416#define CSR_MHPMCOUNTER20H 0xb94
417#define CSR_MHPMCOUNTER21H 0xb95
418#define CSR_MHPMCOUNTER22H 0xb96
419#define CSR_MHPMCOUNTER23H 0xb97
420#define CSR_MHPMCOUNTER24H 0xb98
421#define CSR_MHPMCOUNTER25H 0xb99
422#define CSR_MHPMCOUNTER26H 0xb9a
423#define CSR_MHPMCOUNTER27H 0xb9b
424#define CSR_MHPMCOUNTER28H 0xb9c
425#define CSR_MHPMCOUNTER29H 0xb9d
426#define CSR_MHPMCOUNTER30H 0xb9e
427#define CSR_MHPMCOUNTER31H 0xb9f
428
138b5c5f
AB
429/*
430 * User PointerMasking registers
431 * NB: actual CSR numbers might be changed in future
432 */
433#define CSR_UMTE 0x4c0
434#define CSR_UPMMASK 0x4c1
435#define CSR_UPMBASE 0x4c2
436
437/*
438 * Machine PointerMasking registers
439 * NB: actual CSR numbers might be changed in future
440 */
441#define CSR_MMTE 0x3c0
442#define CSR_MPMMASK 0x3c1
443#define CSR_MPMBASE 0x3c2
444
445/*
446 * Supervisor PointerMaster registers
447 * NB: actual CSR numbers might be changed in future
448 */
449#define CSR_SMTE 0x1c0
450#define CSR_SPMMASK 0x1c1
451#define CSR_SPMBASE 0x1c2
452
453/*
454 * Hypervisor PointerMaster registers
455 * NB: actual CSR numbers might be changed in future
456 */
457#define CSR_VSMTE 0x2c0
458#define CSR_VSPMMASK 0x2c1
459#define CSR_VSPMBASE 0x2c2
460
426f0348 461/* mstatus CSR bits */
dc5bd18f
MC
462#define MSTATUS_UIE 0x00000001
463#define MSTATUS_SIE 0x00000002
dc5bd18f
MC
464#define MSTATUS_MIE 0x00000008
465#define MSTATUS_UPIE 0x00000010
466#define MSTATUS_SPIE 0x00000020
43a96588 467#define MSTATUS_UBE 0x00000040
dc5bd18f
MC
468#define MSTATUS_MPIE 0x00000080
469#define MSTATUS_SPP 0x00000100
61b4b69d 470#define MSTATUS_VS 0x00000600
dc5bd18f
MC
471#define MSTATUS_MPP 0x00001800
472#define MSTATUS_FS 0x00006000
473#define MSTATUS_XS 0x00018000
474#define MSTATUS_MPRV 0x00020000
dc5bd18f
MC
475#define MSTATUS_SUM 0x00040000 /* since: priv-1.10 */
476#define MSTATUS_MXR 0x00080000
dc5bd18f 477#define MSTATUS_TVM 0x00100000 /* since: priv-1.10 */
52957745
AR
478#define MSTATUS_TW 0x00200000 /* since: priv-1.10 */
479#define MSTATUS_TSR 0x00400000 /* since: priv-1.10 */
9034e90a 480#define MSTATUS_GVA 0x4000000000ULL
49aaa3e5 481#define MSTATUS_MPV 0x8000000000ULL
dc5bd18f
MC
482
483#define MSTATUS64_UXL 0x0000000300000000ULL
484#define MSTATUS64_SXL 0x0000000C00000000ULL
485
486#define MSTATUS32_SD 0x80000000
487#define MSTATUS64_SD 0x8000000000000000ULL
457c360f 488#define MSTATUSH128_SD 0x8000000000000000ULL
dc5bd18f 489
f18637cd
MC
490#define MISA32_MXL 0xC0000000
491#define MISA64_MXL 0xC000000000000000ULL
492
99bc874f
RH
493typedef enum {
494 MXL_RV32 = 1,
495 MXL_RV64 = 2,
496 MXL_RV128 = 3,
497} RISCVMXL;
f18637cd 498
426f0348 499/* sstatus CSR bits */
dc5bd18f
MC
500#define SSTATUS_UIE 0x00000001
501#define SSTATUS_SIE 0x00000002
502#define SSTATUS_UPIE 0x00000010
503#define SSTATUS_SPIE 0x00000020
504#define SSTATUS_SPP 0x00000100
89a81e37 505#define SSTATUS_VS 0x00000600
dc5bd18f
MC
506#define SSTATUS_FS 0x00006000
507#define SSTATUS_XS 0x00018000
dc5bd18f
MC
508#define SSTATUS_SUM 0x00040000 /* since: priv-1.10 */
509#define SSTATUS_MXR 0x00080000
510
457c360f
FP
511#define SSTATUS64_UXL 0x0000000300000000ULL
512
dc5bd18f
MC
513#define SSTATUS32_SD 0x80000000
514#define SSTATUS64_SD 0x8000000000000000ULL
515
d28b15a4 516/* hstatus CSR bits */
543ba531
AF
517#define HSTATUS_VSBE 0x00000020
518#define HSTATUS_GVA 0x00000040
d28b15a4 519#define HSTATUS_SPV 0x00000080
543ba531
AF
520#define HSTATUS_SPVP 0x00000100
521#define HSTATUS_HU 0x00000200
522#define HSTATUS_VGEIN 0x0003F000
d28b15a4 523#define HSTATUS_VTVM 0x00100000
719f0f60 524#define HSTATUS_VTW 0x00200000
d28b15a4 525#define HSTATUS_VTSR 0x00400000
8987cdc4 526#define HSTATUS_VSXL 0x300000000
d28b15a4
AF
527
528#define HSTATUS32_WPRI 0xFF8FF87E
529#define HSTATUS64_WPRI 0xFFFFFFFFFF8FF87EULL
530
db70794e
BM
531#define COUNTEREN_CY (1 << 0)
532#define COUNTEREN_TM (1 << 1)
533#define COUNTEREN_IR (1 << 2)
534#define COUNTEREN_HPM3 (1 << 3)
e39a8320 535
f310df58
LZ
536/* vsstatus CSR bits */
537#define VSSTATUS64_UXL 0x0000000300000000ULL
538
426f0348 539/* Privilege modes */
dc5bd18f
MC
540#define PRV_U 0
541#define PRV_S 1
356d7419 542#define PRV_H 2 /* Reserved */
dc5bd18f
MC
543#define PRV_M 3
544
ef6bb7b6
AF
545/* Virtulisation Register Fields */
546#define VIRT_ONOFF 1
547
426f0348
MC
548/* RV32 satp CSR field masks */
549#define SATP32_MODE 0x80000000
550#define SATP32_ASID 0x7fc00000
551#define SATP32_PPN 0x003fffff
552
553/* RV64 satp CSR field masks */
554#define SATP64_MODE 0xF000000000000000ULL
555#define SATP64_ASID 0x0FFFF00000000000ULL
556#define SATP64_PPN 0x00000FFFFFFFFFFFULL
dc5bd18f 557
426f0348
MC
558/* VM modes (satp.mode) privileged ISA 1.10 */
559#define VM_1_10_MBARE 0
560#define VM_1_10_SV32 1
561#define VM_1_10_SV39 8
562#define VM_1_10_SV48 9
563#define VM_1_10_SV57 10
564#define VM_1_10_SV64 11
565
566/* Page table entry (PTE) fields */
567#define PTE_V 0x001 /* Valid */
568#define PTE_R 0x002 /* Read */
569#define PTE_W 0x004 /* Write */
570#define PTE_X 0x008 /* Execute */
571#define PTE_U 0x010 /* User */
572#define PTE_G 0x020 /* Global */
573#define PTE_A 0x040 /* Accessed */
574#define PTE_D 0x080 /* Dirty */
575#define PTE_SOFT 0x300 /* Reserved for Software */
bbce8ba8 576#define PTE_PBMT 0x6000000000000000ULL /* Page-based memory types */
2bacb224 577#define PTE_N 0x8000000000000000ULL /* NAPOT translation */
bbce8ba8 578#define PTE_ATTR (PTE_N | PTE_PBMT) /* All attributes bits */
426f0348
MC
579
580/* Page table PPN shift amount */
581#define PTE_PPN_SHIFT 10
582
05e6ca5e
GR
583/* Page table PPN mask */
584#define PTE_PPN_MASK 0x3FFFFFFFFFFC00ULL
585
426f0348
MC
586/* Leaf page shift amount */
587#define PGSHIFT 12
588
589/* Default Reset Vector adress */
590#define DEFAULT_RSTVEC 0x1000
591
592/* Exception causes */
330d2ae3
AF
593typedef enum RISCVException {
594 RISCV_EXCP_NONE = -1, /* sentinel value */
595 RISCV_EXCP_INST_ADDR_MIS = 0x0,
596 RISCV_EXCP_INST_ACCESS_FAULT = 0x1,
597 RISCV_EXCP_ILLEGAL_INST = 0x2,
598 RISCV_EXCP_BREAKPOINT = 0x3,
599 RISCV_EXCP_LOAD_ADDR_MIS = 0x4,
600 RISCV_EXCP_LOAD_ACCESS_FAULT = 0x5,
601 RISCV_EXCP_STORE_AMO_ADDR_MIS = 0x6,
602 RISCV_EXCP_STORE_AMO_ACCESS_FAULT = 0x7,
603 RISCV_EXCP_U_ECALL = 0x8,
604 RISCV_EXCP_S_ECALL = 0x9,
605 RISCV_EXCP_VS_ECALL = 0xa,
606 RISCV_EXCP_M_ECALL = 0xb,
607 RISCV_EXCP_INST_PAGE_FAULT = 0xc, /* since: priv-1.10.0 */
608 RISCV_EXCP_LOAD_PAGE_FAULT = 0xd, /* since: priv-1.10.0 */
609 RISCV_EXCP_STORE_PAGE_FAULT = 0xf, /* since: priv-1.10.0 */
610 RISCV_EXCP_SEMIHOST = 0x10,
611 RISCV_EXCP_INST_GUEST_PAGE_FAULT = 0x14,
612 RISCV_EXCP_LOAD_GUEST_ACCESS_FAULT = 0x15,
613 RISCV_EXCP_VIRT_INSTRUCTION_FAULT = 0x16,
614 RISCV_EXCP_STORE_GUEST_AMO_ACCESS_FAULT = 0x17,
615} RISCVException;
dc5bd18f
MC
616
617#define RISCV_EXCP_INT_FLAG 0x80000000
618#define RISCV_EXCP_INT_MASK 0x7fffffff
619
426f0348
MC
620/* Interrupt causes */
621#define IRQ_U_SOFT 0
622#define IRQ_S_SOFT 1
205377f8 623#define IRQ_VS_SOFT 2
426f0348
MC
624#define IRQ_M_SOFT 3
625#define IRQ_U_TIMER 4
626#define IRQ_S_TIMER 5
205377f8 627#define IRQ_VS_TIMER 6
426f0348
MC
628#define IRQ_M_TIMER 7
629#define IRQ_U_EXT 8
630#define IRQ_S_EXT 9
205377f8 631#define IRQ_VS_EXT 10
426f0348 632#define IRQ_M_EXT 11
881df35d
AP
633#define IRQ_S_GEXT 12
634#define IRQ_LOCAL_MAX 16
cd032fe7 635#define IRQ_LOCAL_GUEST_MAX (TARGET_LONG_BITS - 1)
426f0348
MC
636
637/* mip masks */
638#define MIP_USIP (1 << IRQ_U_SOFT)
639#define MIP_SSIP (1 << IRQ_S_SOFT)
205377f8 640#define MIP_VSSIP (1 << IRQ_VS_SOFT)
426f0348
MC
641#define MIP_MSIP (1 << IRQ_M_SOFT)
642#define MIP_UTIP (1 << IRQ_U_TIMER)
643#define MIP_STIP (1 << IRQ_S_TIMER)
205377f8 644#define MIP_VSTIP (1 << IRQ_VS_TIMER)
426f0348
MC
645#define MIP_MTIP (1 << IRQ_M_TIMER)
646#define MIP_UEIP (1 << IRQ_U_EXT)
647#define MIP_SEIP (1 << IRQ_S_EXT)
205377f8 648#define MIP_VSEIP (1 << IRQ_VS_EXT)
426f0348 649#define MIP_MEIP (1 << IRQ_M_EXT)
881df35d 650#define MIP_SGEIP (1 << IRQ_S_GEXT)
426f0348
MC
651
652/* sip masks */
653#define SIP_SSIP MIP_SSIP
654#define SIP_STIP MIP_STIP
655#define SIP_SEIP MIP_SEIP
f91005e1 656
66e594f2
AF
657/* MIE masks */
658#define MIE_SEIE (1 << IRQ_S_EXT)
659#define MIE_UEIE (1 << IRQ_U_EXT)
660#define MIE_STIE (1 << IRQ_S_TIMER)
661#define MIE_UTIE (1 << IRQ_U_TIMER)
662#define MIE_SSIE (1 << IRQ_S_SOFT)
663#define MIE_USIE (1 << IRQ_U_SOFT)
138b5c5f
AB
664
665/* General PointerMasking CSR bits*/
666#define PM_ENABLE 0x00000001ULL
667#define PM_CURRENT 0x00000002ULL
668#define PM_INSN 0x00000004ULL
669#define PM_XS_MASK 0x00000003ULL
670
671/* PointerMasking XS bits values */
672#define PM_EXT_DISABLE 0x00000000ULL
673#define PM_EXT_INITIAL 0x00000001ULL
674#define PM_EXT_CLEAN 0x00000002ULL
675#define PM_EXT_DIRTY 0x00000003ULL
676
29a9ec9b
AP
677/* Execution enviornment configuration bits */
678#define MENVCFG_FIOM BIT(0)
679#define MENVCFG_CBIE (3UL << 4)
680#define MENVCFG_CBCFE BIT(6)
681#define MENVCFG_CBZE BIT(7)
682#define MENVCFG_PBMTE (1ULL << 62)
683#define MENVCFG_STCE (1ULL << 63)
684
685/* For RV32 */
686#define MENVCFGH_PBMTE BIT(30)
687#define MENVCFGH_STCE BIT(31)
688
689#define SENVCFG_FIOM MENVCFG_FIOM
690#define SENVCFG_CBIE MENVCFG_CBIE
691#define SENVCFG_CBCFE MENVCFG_CBCFE
692#define SENVCFG_CBZE MENVCFG_CBZE
693
694#define HENVCFG_FIOM MENVCFG_FIOM
695#define HENVCFG_CBIE MENVCFG_CBIE
696#define HENVCFG_CBCFE MENVCFG_CBCFE
697#define HENVCFG_CBZE MENVCFG_CBZE
698#define HENVCFG_PBMTE MENVCFG_PBMTE
699#define HENVCFG_STCE MENVCFG_STCE
700
701/* For RV32 */
702#define HENVCFGH_PBMTE MENVCFGH_PBMTE
703#define HENVCFGH_STCE MENVCFGH_STCE
704
138b5c5f
AB
705/* Offsets for every pair of control bits per each priv level */
706#define XS_OFFSET 0ULL
707#define U_OFFSET 2ULL
708#define S_OFFSET 5ULL
709#define M_OFFSET 8ULL
710
711#define PM_XS_BITS (PM_XS_MASK << XS_OFFSET)
712#define U_PM_ENABLE (PM_ENABLE << U_OFFSET)
713#define U_PM_CURRENT (PM_CURRENT << U_OFFSET)
714#define U_PM_INSN (PM_INSN << U_OFFSET)
715#define S_PM_ENABLE (PM_ENABLE << S_OFFSET)
716#define S_PM_CURRENT (PM_CURRENT << S_OFFSET)
717#define S_PM_INSN (PM_INSN << S_OFFSET)
718#define M_PM_ENABLE (PM_ENABLE << M_OFFSET)
719#define M_PM_CURRENT (PM_CURRENT << M_OFFSET)
720#define M_PM_INSN (PM_INSN << M_OFFSET)
721
722/* mmte CSR bits */
723#define MMTE_PM_XS_BITS PM_XS_BITS
724#define MMTE_U_PM_ENABLE U_PM_ENABLE
725#define MMTE_U_PM_CURRENT U_PM_CURRENT
726#define MMTE_U_PM_INSN U_PM_INSN
727#define MMTE_S_PM_ENABLE S_PM_ENABLE
728#define MMTE_S_PM_CURRENT S_PM_CURRENT
729#define MMTE_S_PM_INSN S_PM_INSN
730#define MMTE_M_PM_ENABLE M_PM_ENABLE
731#define MMTE_M_PM_CURRENT M_PM_CURRENT
732#define MMTE_M_PM_INSN M_PM_INSN
733#define MMTE_MASK (MMTE_U_PM_ENABLE | MMTE_U_PM_CURRENT | MMTE_U_PM_INSN | \
734 MMTE_S_PM_ENABLE | MMTE_S_PM_CURRENT | MMTE_S_PM_INSN | \
735 MMTE_M_PM_ENABLE | MMTE_M_PM_CURRENT | MMTE_M_PM_INSN | \
736 MMTE_PM_XS_BITS)
737
738/* (v)smte CSR bits */
739#define SMTE_PM_XS_BITS PM_XS_BITS
740#define SMTE_U_PM_ENABLE U_PM_ENABLE
741#define SMTE_U_PM_CURRENT U_PM_CURRENT
742#define SMTE_U_PM_INSN U_PM_INSN
743#define SMTE_S_PM_ENABLE S_PM_ENABLE
744#define SMTE_S_PM_CURRENT S_PM_CURRENT
745#define SMTE_S_PM_INSN S_PM_INSN
746#define SMTE_MASK (SMTE_U_PM_ENABLE | SMTE_U_PM_CURRENT | SMTE_U_PM_INSN | \
747 SMTE_S_PM_ENABLE | SMTE_S_PM_CURRENT | SMTE_S_PM_INSN | \
748 SMTE_PM_XS_BITS)
749
750/* umte CSR bits */
751#define UMTE_U_PM_ENABLE U_PM_ENABLE
752#define UMTE_U_PM_CURRENT U_PM_CURRENT
753#define UMTE_U_PM_INSN U_PM_INSN
754#define UMTE_MASK (UMTE_U_PM_ENABLE | MMTE_U_PM_CURRENT | UMTE_U_PM_INSN)
755
aa7508bb
AP
756/* MISELECT, SISELECT, and VSISELECT bits (AIA) */
757#define ISELECT_IPRIO0 0x30
758#define ISELECT_IPRIO15 0x3f
759#define ISELECT_IMSIC_EIDELIVERY 0x70
760#define ISELECT_IMSIC_EITHRESHOLD 0x72
761#define ISELECT_IMSIC_EIP0 0x80
762#define ISELECT_IMSIC_EIP63 0xbf
763#define ISELECT_IMSIC_EIE0 0xc0
764#define ISELECT_IMSIC_EIE63 0xff
765#define ISELECT_IMSIC_FIRST ISELECT_IMSIC_EIDELIVERY
766#define ISELECT_IMSIC_LAST ISELECT_IMSIC_EIE63
767#define ISELECT_MASK 0x1ff
768
769/* Dummy [M|S|VS]ISELECT value for emulating [M|S|VS]TOPEI CSRs */
770#define ISELECT_IMSIC_TOPEI (ISELECT_MASK + 1)
771
772/* IMSIC bits (AIA) */
773#define IMSIC_TOPEI_IID_SHIFT 16
774#define IMSIC_TOPEI_IID_MASK 0x7ff
775#define IMSIC_TOPEI_IPRIO_MASK 0x7ff
776#define IMSIC_EIPx_BITS 32
777#define IMSIC_EIEx_BITS 32
778
779/* MTOPI and STOPI bits (AIA) */
780#define TOPI_IID_SHIFT 16
781#define TOPI_IID_MASK 0xfff
782#define TOPI_IPRIO_MASK 0xff
783
784/* Interrupt priority bits (AIA) */
785#define IPRIO_IRQ_BITS 8
786#define IPRIO_MMAXIPRIO 255
787#define IPRIO_DEFAULT_UPPER 4
788#define IPRIO_DEFAULT_MIDDLE (IPRIO_DEFAULT_UPPER + 24)
789#define IPRIO_DEFAULT_M IPRIO_DEFAULT_MIDDLE
790#define IPRIO_DEFAULT_S (IPRIO_DEFAULT_M + 3)
791#define IPRIO_DEFAULT_SGEXT (IPRIO_DEFAULT_S + 3)
792#define IPRIO_DEFAULT_VS (IPRIO_DEFAULT_SGEXT + 1)
793#define IPRIO_DEFAULT_LOWER (IPRIO_DEFAULT_VS + 3)
794
795/* HVICTL bits (AIA) */
796#define HVICTL_VTI 0x40000000
797#define HVICTL_IID 0x0fff0000
798#define HVICTL_IPRIOM 0x00000100
799#define HVICTL_IPRIO 0x000000ff
800#define HVICTL_VALID_MASK \
801 (HVICTL_VTI | HVICTL_IID | HVICTL_IPRIOM | HVICTL_IPRIO)
802
f91005e1 803#endif
This page took 0.33158 seconds and 4 git commands to generate.