|
7 | 7 | #define _ASM_RISCV_CSR_H |
8 | 8 |
|
9 | 9 | #include <asm/asm.h> |
10 | | -#include <linux/const.h> |
| 10 | +#include <linux/bits.h> |
11 | 11 |
|
12 | 12 | /* Status register flags */ |
13 | 13 | #define SR_SIE _AC(0x00000002, UL) /* Supervisor Interrupt Enable */ |
|
73 | 73 | #define IRQ_S_EXT 9 |
74 | 74 | #define IRQ_VS_EXT 10 |
75 | 75 | #define IRQ_M_EXT 11 |
| 76 | +#define IRQ_S_GEXT 12 |
76 | 77 | #define IRQ_PMU_OVF 13 |
| 78 | +#define IRQ_LOCAL_MAX (IRQ_PMU_OVF + 1) |
| 79 | +#define IRQ_LOCAL_MASK GENMASK((IRQ_LOCAL_MAX - 1), 0) |
77 | 80 |
|
78 | 81 | /* Exception causes */ |
79 | 82 | #define EXC_INST_MISALIGNED 0 |
|
156 | 159 | (_AC(1, UL) << IRQ_S_TIMER) | \ |
157 | 160 | (_AC(1, UL) << IRQ_S_EXT)) |
158 | 161 |
|
| 162 | +/* AIA CSR bits */ |
| 163 | +#define TOPI_IID_SHIFT 16 |
| 164 | +#define TOPI_IID_MASK GENMASK(11, 0) |
| 165 | +#define TOPI_IPRIO_MASK GENMASK(7, 0) |
| 166 | +#define TOPI_IPRIO_BITS 8 |
| 167 | + |
| 168 | +#define TOPEI_ID_SHIFT 16 |
| 169 | +#define TOPEI_ID_MASK GENMASK(10, 0) |
| 170 | +#define TOPEI_PRIO_MASK GENMASK(10, 0) |
| 171 | + |
| 172 | +#define ISELECT_IPRIO0 0x30 |
| 173 | +#define ISELECT_IPRIO15 0x3f |
| 174 | +#define ISELECT_MASK GENMASK(8, 0) |
| 175 | + |
| 176 | +#define HVICTL_VTI BIT(30) |
| 177 | +#define HVICTL_IID GENMASK(27, 16) |
| 178 | +#define HVICTL_IID_SHIFT 16 |
| 179 | +#define HVICTL_DPR BIT(9) |
| 180 | +#define HVICTL_IPRIOM BIT(8) |
| 181 | +#define HVICTL_IPRIO GENMASK(7, 0) |
| 182 | + |
159 | 183 | /* xENVCFG flags */ |
160 | 184 | #define ENVCFG_STCE (_AC(1, ULL) << 63) |
161 | 185 | #define ENVCFG_PBMTE (_AC(1, ULL) << 62) |
|
250 | 274 | #define CSR_STIMECMP 0x14D |
251 | 275 | #define CSR_STIMECMPH 0x15D |
252 | 276 |
|
| 277 | +/* Supervisor-Level Window to Indirectly Accessed Registers (AIA) */ |
| 278 | +#define CSR_SISELECT 0x150 |
| 279 | +#define CSR_SIREG 0x151 |
| 280 | + |
| 281 | +/* Supervisor-Level Interrupts (AIA) */ |
| 282 | +#define CSR_STOPEI 0x15c |
| 283 | +#define CSR_STOPI 0xdb0 |
| 284 | + |
| 285 | +/* Supervisor-Level High-Half CSRs (AIA) */ |
| 286 | +#define CSR_SIEH 0x114 |
| 287 | +#define CSR_SIPH 0x154 |
| 288 | + |
253 | 289 | #define CSR_VSSTATUS 0x200 |
254 | 290 | #define CSR_VSIE 0x204 |
255 | 291 | #define CSR_VSTVEC 0x205 |
|
279 | 315 | #define CSR_HGATP 0x680 |
280 | 316 | #define CSR_HGEIP 0xe12 |
281 | 317 |
|
| 318 | +/* Virtual Interrupts and Interrupt Priorities (H-extension with AIA) */ |
| 319 | +#define CSR_HVIEN 0x608 |
| 320 | +#define CSR_HVICTL 0x609 |
| 321 | +#define CSR_HVIPRIO1 0x646 |
| 322 | +#define CSR_HVIPRIO2 0x647 |
| 323 | + |
| 324 | +/* VS-Level Window to Indirectly Accessed Registers (H-extension with AIA) */ |
| 325 | +#define CSR_VSISELECT 0x250 |
| 326 | +#define CSR_VSIREG 0x251 |
| 327 | + |
| 328 | +/* VS-Level Interrupts (H-extension with AIA) */ |
| 329 | +#define CSR_VSTOPEI 0x25c |
| 330 | +#define CSR_VSTOPI 0xeb0 |
| 331 | + |
| 332 | +/* Hypervisor and VS-Level High-Half CSRs (H-extension with AIA) */ |
| 333 | +#define CSR_HIDELEGH 0x613 |
| 334 | +#define CSR_HVIENH 0x618 |
| 335 | +#define CSR_HVIPH 0x655 |
| 336 | +#define CSR_HVIPRIO1H 0x656 |
| 337 | +#define CSR_HVIPRIO2H 0x657 |
| 338 | +#define CSR_VSIEH 0x214 |
| 339 | +#define CSR_VSIPH 0x254 |
| 340 | + |
282 | 341 | #define CSR_MSTATUS 0x300 |
283 | 342 | #define CSR_MISA 0x301 |
| 343 | +#define CSR_MIDELEG 0x303 |
284 | 344 | #define CSR_MIE 0x304 |
285 | 345 | #define CSR_MTVEC 0x305 |
286 | 346 | #define CSR_MENVCFG 0x30a |
|
297 | 357 | #define CSR_MIMPID 0xf13 |
298 | 358 | #define CSR_MHARTID 0xf14 |
299 | 359 |
|
| 360 | +/* Machine-Level Window to Indirectly Accessed Registers (AIA) */ |
| 361 | +#define CSR_MISELECT 0x350 |
| 362 | +#define CSR_MIREG 0x351 |
| 363 | + |
| 364 | +/* Machine-Level Interrupts (AIA) */ |
| 365 | +#define CSR_MTOPEI 0x35c |
| 366 | +#define CSR_MTOPI 0xfb0 |
| 367 | + |
| 368 | +/* Virtual Interrupts for Supervisor Level (AIA) */ |
| 369 | +#define CSR_MVIEN 0x308 |
| 370 | +#define CSR_MVIP 0x309 |
| 371 | + |
| 372 | +/* Machine-Level High-Half CSRs (AIA) */ |
| 373 | +#define CSR_MIDELEGH 0x313 |
| 374 | +#define CSR_MIEH 0x314 |
| 375 | +#define CSR_MVIENH 0x318 |
| 376 | +#define CSR_MVIPH 0x319 |
| 377 | +#define CSR_MIPH 0x354 |
| 378 | + |
300 | 379 | #ifdef CONFIG_RISCV_M_MODE |
301 | 380 | # define CSR_STATUS CSR_MSTATUS |
302 | 381 | # define CSR_IE CSR_MIE |
|
307 | 386 | # define CSR_TVAL CSR_MTVAL |
308 | 387 | # define CSR_IP CSR_MIP |
309 | 388 |
|
| 389 | +# define CSR_IEH CSR_MIEH |
| 390 | +# define CSR_ISELECT CSR_MISELECT |
| 391 | +# define CSR_IREG CSR_MIREG |
| 392 | +# define CSR_IPH CSR_MIPH |
| 393 | +# define CSR_TOPEI CSR_MTOPEI |
| 394 | +# define CSR_TOPI CSR_MTOPI |
| 395 | + |
310 | 396 | # define SR_IE SR_MIE |
311 | 397 | # define SR_PIE SR_MPIE |
312 | 398 | # define SR_PP SR_MPP |
|
324 | 410 | # define CSR_TVAL CSR_STVAL |
325 | 411 | # define CSR_IP CSR_SIP |
326 | 412 |
|
| 413 | +# define CSR_IEH CSR_SIEH |
| 414 | +# define CSR_ISELECT CSR_SISELECT |
| 415 | +# define CSR_IREG CSR_SIREG |
| 416 | +# define CSR_IPH CSR_SIPH |
| 417 | +# define CSR_TOPEI CSR_STOPEI |
| 418 | +# define CSR_TOPI CSR_STOPI |
| 419 | + |
327 | 420 | # define SR_IE SR_SIE |
328 | 421 | # define SR_PIE SR_SPIE |
329 | 422 | # define SR_PP SR_SPP |
|
0 commit comments