diff options
author | Atish Patra <atish.patra@wdc.com> | 2019-02-13 05:32:06 +0300 |
---|---|---|
committer | Anup Patel <anup@brainfault.org> | 2019-02-14 07:01:18 +0300 |
commit | 70a474d2c24dc3e0c8841e6ef5cc96797deadbf5 (patch) | |
tree | 0c1456134e4815aadea0f523d7fb570454e23d0d /include/sbi | |
parent | 4cb4d46875dd0f0dd01d3ff1fee4f0d6cefb857a (diff) | |
download | opensbi-70a474d2c24dc3e0c8841e6ef5cc96797deadbf5.tar.xz |
lib: Use CSR_<FOO> instead of <foo> for csr_*()
Some older toolchains may not have all the csr's defined. Update all
the csr functions to use the CSR_ #define values instead of the
toolchain defined values.
Suggested-by: Olof Johansson <olof@lixom.net>
Signed-off-by: Atish Patra <atish.patra@wdc.com>
Diffstat (limited to 'include/sbi')
-rw-r--r-- | include/sbi/riscv_encoding.h | 8 | ||||
-rw-r--r-- | include/sbi/riscv_fp.h | 12 | ||||
-rw-r--r-- | include/sbi/sbi_scratch.h | 2 | ||||
-rw-r--r-- | include/sbi/sbi_unpriv.h | 16 |
4 files changed, 23 insertions, 15 deletions
diff --git a/include/sbi/riscv_encoding.h b/include/sbi/riscv_encoding.h index b441c8e..3f1676c 100644 --- a/include/sbi/riscv_encoding.h +++ b/include/sbi/riscv_encoding.h @@ -195,10 +195,18 @@ #define RISCV_PGSHIFT 12 #define RISCV_PGSIZE (1 << RISCV_PGSHIFT) +#define CSR_USTATUS 0x0 #define CSR_FFLAGS 0x1 #define CSR_FRM 0x2 #define CSR_FCSR 0x3 #define CSR_CYCLE 0xc00 +#define CSR_UIE 0x4 +#define CSR_UTVEC 0x5 +#define CSR_USCRATCH 0x40 +#define CSR_UEPC 0x41 +#define CSR_UCAUSE 0x42 +#define CSR_UTVAL 0x43 +#define CSR_UIP 0x44 #define CSR_TIME 0xc01 #define CSR_INSTRET 0xc02 #define CSR_HPMCOUNTER3 0xc03 diff --git a/include/sbi/riscv_fp.h b/include/sbi/riscv_fp.h index 7143023..9e2e082 100644 --- a/include/sbi/riscv_fp.h +++ b/include/sbi/riscv_fp.h @@ -43,12 +43,12 @@ ulong offset = SHIFT_RIGHT(insn, (pos)-3) & 0xf8; \ ulong tmp; \ asm volatile ("1: auipc %0, %%pcrel_hi(put_f64_reg); add %0, %0, %2; jalr t0, %0, %%pcrel_lo(1b)" : "=&r"(tmp) : "r"(value), "r"(offset) : "t0"); }) -#define GET_FCSR() csr_read(fcsr) -#define SET_FCSR(value) csr_write(fcsr, (value)) -#define GET_FRM() csr_read(frm) -#define SET_FRM(value) csr_write(frm, (value)) -#define GET_FFLAGS() csr_read(fflags) -#define SET_FFLAGS(value) csr_write(fflags, (value)) +#define GET_FCSR() csr_read(CSR_FCSR) +#define SET_FCSR(value) csr_write(CSR_FCSR, (value)) +#define GET_FRM() csr_read(CSR_FRM) +#define SET_FRM(value) csr_write(CSR_FRM, (value)) +#define GET_FFLAGS() csr_read(CSR_FFLAGS) +#define SET_FFLAGS(value) csr_write(CSR_FFLAGS, (value)) #define SET_FS_DIRTY() ((void) 0) diff --git a/include/sbi/sbi_scratch.h b/include/sbi/sbi_scratch.h index e4c648c..ff6aed0 100644 --- a/include/sbi/sbi_scratch.h +++ b/include/sbi/sbi_scratch.h @@ -61,7 +61,7 @@ struct sbi_scratch { /** Get pointer to sbi_scratch for current HART */ #define sbi_scratch_thishart_ptr() \ -((struct sbi_scratch *)csr_read(mscratch)) +((struct sbi_scratch *)csr_read(CSR_MSCRATCH)) /** Get Arg1 of next booting stage for current HART */ #define sbi_scratch_thishart_arg1_ptr() \ diff --git a/include/sbi/sbi_unpriv.h b/include/sbi/sbi_unpriv.h index 11ece0d..930babd 100644 --- a/include/sbi/sbi_unpriv.h +++ b/include/sbi/sbi_unpriv.h @@ -20,9 +20,9 @@ static inline type load_##type(const type *addr, ulong mepc) \ register ulong __mepc asm ("a2") = mepc; \ register ulong __mstatus asm ("a3"); \ type val; \ - asm ("csrrs %0, mstatus, %3\n" \ + asm ("csrrs %0, "STR(CSR_MSTATUS)", %3\n" \ #insn " %1, %2\n" \ - "csrw mstatus, %0" \ + "csrw "STR(CSR_MSTATUS)", %0" \ : "+&r" (__mstatus), "=&r" (val) \ : "m" (*addr), "r" (MSTATUS_MPRV), "r" (__mepc)); \ return val; \ @@ -33,9 +33,9 @@ static inline void store_##type(type *addr, type val, ulong mepc) \ { \ register ulong __mepc asm ("a2") = mepc; \ register ulong __mstatus asm ("a3"); \ - asm volatile ("csrrs %0, mstatus, %3\n" \ + asm volatile ("csrrs %0, "STR(CSR_MSTATUS)", %3\n" \ #insn " %1, %2\n" \ - "csrw mstatus, %0" \ + "csrw "STR(CSR_MSTATUS)", %0" \ : "+&r" (__mstatus) \ : "r" (val), "m" (*addr), "r" (MSTATUS_MPRV), "r" (__mepc)); \ } @@ -76,18 +76,18 @@ static inline ulong get_insn(ulong mepc, ulong *mstatus) register ulong __mstatus asm ("a3"); ulong val; #ifndef __riscv_compressed - asm ("csrrs %[mstatus], mstatus, %[mprv]\n" + asm ("csrrs %[mstatus], "STR(CSR_MSTATUS)", %[mprv]\n" #if __riscv_xlen == 64 STR(LWU) " %[insn], (%[addr])\n" #else STR(LW) " %[insn], (%[addr])\n" #endif - "csrw mstatus, %[mstatus]" + "csrw "STR(CSR_MSTATUS)", %[mstatus]" : [mstatus] "+&r" (__mstatus), [insn] "=&r" (val) : [mprv] "r" (MSTATUS_MPRV | MSTATUS_MXR), [addr] "r" (__mepc)); #else ulong rvc_mask = 3, tmp; - asm ("csrrs %[mstatus], mstatus, %[mprv]\n" + asm ("csrrs %[mstatus], "STR(CSR_MSTATUS)", %[mprv]\n" "and %[tmp], %[addr], 2\n" "bnez %[tmp], 1f\n" #if __riscv_xlen == 64 @@ -107,7 +107,7 @@ static inline ulong get_insn(ulong mepc, ulong *mstatus) "lhu %[tmp], 2(%[addr])\n" "sll %[tmp], %[tmp], 16\n" "add %[insn], %[insn], %[tmp]\n" - "2: csrw mstatus, %[mstatus]" + "2: csrw "STR(CSR_MSTATUS)", %[mstatus]" : [mstatus] "+&r" (__mstatus), [insn] "=&r" (val), [tmp] "=&r" (tmp) : [mprv] "r" (MSTATUS_MPRV | MSTATUS_MXR), [addr] "r" (__mepc), [rvc_mask] "r" (rvc_mask), [xlen_minus_16] "i" (__riscv_xlen - 16)); |