summaryrefslogtreecommitdiff
path: root/include/sbi/sbi_unpriv.h
diff options
context:
space:
mode:
authorAlistair Francis <alistair.francis@wdc.com>2019-01-23 20:29:55 +0300
committerAnup Patel <anup@brainfault.org>2019-02-08 06:48:46 +0300
commit4f32b13802c118c381a562747467b829f7a14e78 (patch)
tree07654457fdbd1b922bb9eb520b5d4fdba41b5fd5 /include/sbi/sbi_unpriv.h
parentf9b033e57769bf24fc13293afdd43c1979527615 (diff)
downloadopensbi-4f32b13802c118c381a562747467b829f7a14e78.tar.xz
firmware: Use lw instead of lwu for 32-bit architectures
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
Diffstat (limited to 'include/sbi/sbi_unpriv.h')
-rw-r--r--include/sbi/sbi_unpriv.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/include/sbi/sbi_unpriv.h b/include/sbi/sbi_unpriv.h
index 2da5785..11ece0d 100644
--- a/include/sbi/sbi_unpriv.h
+++ b/include/sbi/sbi_unpriv.h
@@ -77,7 +77,11 @@ static inline ulong get_insn(ulong mepc, ulong *mstatus)
ulong val;
#ifndef __riscv_compressed
asm ("csrrs %[mstatus], mstatus, %[mprv]\n"
+#if __riscv_xlen == 64
STR(LWU) " %[insn], (%[addr])\n"
+#else
+ STR(LW) " %[insn], (%[addr])\n"
+#endif
"csrw mstatus, %[mstatus]"
: [mstatus] "+&r" (__mstatus), [insn] "=&r" (val)
: [mprv] "r" (MSTATUS_MPRV | MSTATUS_MXR), [addr] "r" (__mepc));
@@ -86,7 +90,11 @@ static inline ulong get_insn(ulong mepc, ulong *mstatus)
asm ("csrrs %[mstatus], mstatus, %[mprv]\n"
"and %[tmp], %[addr], 2\n"
"bnez %[tmp], 1f\n"
+#if __riscv_xlen == 64
STR(LWU) " %[insn], (%[addr])\n"
+#else
+ STR(LW) " %[insn], (%[addr])\n"
+#endif
"and %[tmp], %[insn], %[rvc_mask]\n"
"beq %[tmp], %[rvc_mask], 2f\n"
"sll %[insn], %[insn], %[xlen_minus_16]\n"