/** @file RISC-V package definitions. Copyright (c) 2019, Hewlett Packard Enterprise Development LP. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef RISCV_INDUSTRY_STANDARD_H_ #define RISCV_INDUSTRY_STANDARD_H_ #if defined (MDE_CPU_RISCV64) #define RISC_V_XLEN_BITS 64 #else #endif #define RISC_V_ISA_ATOMIC_EXTENSION (0x00000001 << 0) #define RISC_V_ISA_BIT_OPERATION_EXTENSION (0x00000001 << 1) #define RISC_V_ISA_COMPRESSED_EXTENSION (0x00000001 << 2) #define RISC_V_ISA_DOUBLE_PRECISION_FP_EXTENSION (0x00000001 << 3) #define RISC_V_ISA_RV32E_ISA (0x00000001 << 4) #define RISC_V_ISA_SINGLE_PRECISION_FP_EXTENSION (0x00000001 << 5) #define RISC_V_ISA_ADDITIONAL_STANDARD_EXTENSION (0x00000001 << 6) #define RISC_V_ISA_RESERVED_1 (0x00000001 << 7) #define RISC_V_ISA_INTEGER_ISA_EXTENSION (0x00000001 << 8) #define RISC_V_ISA_DYNAMICALLY_TRANSLATED_LANGUAGE_EXTENSION (0x00000001 << 9) #define RISC_V_ISA_RESERVED_2 (0x00000001 << 10) #define RISC_V_ISA_DECIMAL_FP_EXTENSION (0x00000001 << 11) #define RISC_V_ISA_INTEGER_MUL_DIV_EXTENSION (0x00000001 << 12) #define RISC_V_ISA_USER_LEVEL_INTERRUPT_SUPPORTED (0x00000001 << 13) #define RISC_V_ISA_RESERVED_3 (0x00000001 << 14) #define RISC_V_ISA_PACKED_SIMD_EXTENSION (0x00000001 << 15) #define RISC_V_ISA_QUAD_PRECISION_FP_EXTENSION (0x00000001 << 16) #define RISC_V_ISA_RESERVED_4 (0x00000001 << 17) #define RISC_V_ISA_SUPERVISOR_MODE_IMPLEMENTED (0x00000001 << 18) #define RISC_V_ISA_TRANSATIONAL_MEMORY_EXTENSION (0x00000001 << 19) #define RISC_V_ISA_USER_MODE_IMPLEMENTED (0x00000001 << 20) #define RISC_V_ISA_VECTOR_EXTENSION (0x00000001 << 21) #define RISC_V_ISA_RESERVED_5 (0x00000001 << 22) #define RISC_V_ISA_NON_STANDARD_EXTENSION (0x00000001 << 23) #define RISC_V_ISA_RESERVED_6 (0x00000001 << 24) #define RISC_V_ISA_RESERVED_7 (0x00000001 << 25) // // RISC-V CSR definitions. // // // Machine information // #define RISCV_CSR_MACHINE_MVENDORID 0xF11 #define RISCV_CSR_MACHINE_MARCHID 0xF12 #define RISCV_CSR_MACHINE_MIMPID 0xF13 #define RISCV_CSR_MACHINE_HARRID 0xF14 // // Machine Trap Setup. // #define RISCV_CSR_MACHINE_MSTATUS 0x300 #define RISCV_CSR_MACHINE_MISA 0x301 #define RISCV_CSR_MACHINE_MEDELEG 0x302 #define RISCV_CSR_MACHINE_MIDELEG 0x303 #define RISCV_CSR_MACHINE_MIE 0x304 #define RISCV_CSR_MACHINE_MTVEC 0x305 #define RISCV_TIMER_COMPARE_BITS 32 // // Machine Timer and Counter. // //#define RISCV_CSR_MACHINE_MTIME 0x701 //#define RISCV_CSR_MACHINE_MTIMEH 0x741 // // Machine Trap Handling. // #define RISCV_CSR_MACHINE_MSCRATCH 0x340 #define RISCV_CSR_MACHINE_MEPC 0x341 #define RISCV_CSR_MACHINE_MCAUSE 0x342 #define MACHINE_MCAUSE_EXCEPTION_ MASK 0x0f #define MACHINE_MCAUSE_INTERRUPT (RISC_V_XLEN_BITS - 1) #define RISCV_CSR_MACHINE_MBADADDR 0x343 #define RISCV_CSR_MACHINE_MIP 0x344 // // Machine Protection and Translation. // #define RISCV_CSR_MACHINE_MBASE 0x380 #define RISCV_CSR_MACHINE_MBOUND 0x381 #define RISCV_CSR_MACHINE_MIBASE 0x382 #define RISCV_CSR_MACHINE_MIBOUND 0x383 #define RISCV_CSR_MACHINE_MDBASE 0x384 #define RISCV_CSR_MACHINE_MDBOUND 0x385 // // Supervisor mode CSR. // #define RISCV_CSR_SUPERVISOR_SSTATUS 0x100 #define SSTATUS_SIE_BIT_POSITION 1 #define SSTATUS_SPP_BIT_POSITION 8 #define RISCV_CSR_SUPERVISOR_SIE 0x104 #define RISCV_CSR_SUPERVISOR_SSCRATCH 0x140 #define RISCV_CSR_SUPERVISOR_SEPC 0x141 #define RISCV_CSR_SUPERVISOR_SCAUSE 0x142 #define SCAUSE_USER_SOFTWARE_INT 0 #define SCAUSE_SUPERVISOR_SOFTWARE_INT 1 #define SCAUSE_USER_TIMER_INT 4 #define SCAUSE_SUPERVISOR_TIMER_INT 5 #define SCAUSE_USER_EXTERNAL_INT 8 #define SCAUSE_SUPERVISOR_EXTERNAL_INT 9 #define RISCV_CSR_SUPERVISOR_STVAL 0x143 #define RISCV_CSR_SUPERVISOR_SIP 0x144 #define RISCV_CSR_SUPERVISOR_SATP 0x180 #if defined (MDE_CPU_RISCV64) #define RISCV_SATP_MODE_MASK 0xF000000000000000 #define RISCV_SATP_MODE_BIT_POSITION 60 #endif #define RISCV_SATP_MODE_OFF 0 #define RISCV_SATP_MODE_SV32 1 #define RISCV_SATP_MODE_SV39 8 #define RISCV_SATP_MODE_SV48 9 #define RISCV_SATP_MODE_SV57 10 #define RISCV_SATP_MODE_SV64 11 #define SATP64_ASID_MASK 0x0FFFF00000000000 #define SATP64_PPN_MASK 0x00000FFFFFFFFFFF #define RISCV_CAUSE_MISALIGNED_FETCH 0x0 #define RISCV_CAUSE_FETCH_ACCESS 0x1 #define RISCV_CAUSE_ILLEGAL_INSTRUCTION 0x2 #define RISCV_CAUSE_BREAKPOINT 0x3 #define RISCV_CAUSE_MISALIGNED_LOAD 0x4 #define RISCV_CAUSE_LOAD_ACCESS 0x5 #define RISCV_CAUSE_MISALIGNED_STORE 0x6 #define RISCV_CAUSE_STORE_ACCESS 0x7 #define RISCV_CAUSE_USER_ECALL 0x8 #define RISCV_CAUSE_HYPERVISOR_ECALL 0x9 #define RISCV_CAUSE_SUPERVISOR_ECALL 0xa #define RISCV_CAUSE_MACHINE_ECALL 0xb #define RISCV_CAUSE_FETCH_PAGE_FAULT 0xc #define RISCV_CAUSE_LOAD_PAGE_FAULT 0xd #define RISCV_CAUSE_STORE_PAGE_FAULT 0xf #define RISCV_CAUSE_FETCH_GUEST_PAGE_FAULT 0x14 #define RISCV_CAUSE_LOAD_GUEST_PAGE_FAULT 0x15 #define RISCV_CAUSE_STORE_GUEST_PAGE_FAULT 0x17 // // Machine Read-Write Shadow of Hypervisor Read-Only Registers // #define RISCV_CSR_HTIMEW 0xB01 #define RISCV_CSR_HTIMEHW 0xB81 // // Machine Host-Target Interface (Non-Standard Berkeley Extension) // #define RISCV_CSR_MTOHOST 0x780 #define RISCV_CSR_MFROMHOST 0x781 #endif