From: Anup Patel Date: Sat, 21 Nov 2020 05:58:39 +0000 (+0530) Subject: lib: sbi: Fix sbi_hart_switch_mode() for u-mode X-Git-Tag: v1.3~614 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8d2edc4fc957588e23d09c8f567a94cd737405d3;p=platform%2Fkernel%2Fopensbi-spacemit.git lib: sbi: Fix sbi_hart_switch_mode() for u-mode We should check and access N-extension CSRs in sbi_hart_switch_mode() when next_mode is u-mode because N-extension is optional. Signed-off-by: Anup Patel Reviewed-by: Alistair Francis Reviewed-by: Atish Patra --- diff --git a/lib/sbi/sbi_hart.c b/lib/sbi/sbi_hart.c index 30d8aef..fc86e9f 100644 --- a/lib/sbi/sbi_hart.c +++ b/lib/sbi/sbi_hart.c @@ -522,9 +522,11 @@ sbi_hart_switch_mode(unsigned long arg0, unsigned long arg1, csr_write(CSR_SIE, 0); csr_write(CSR_SATP, 0); } else if (next_mode == PRV_U) { - csr_write(CSR_UTVEC, next_addr); - csr_write(CSR_USCRATCH, 0); - csr_write(CSR_UIE, 0); + if (misa_extension('N')) { + csr_write(CSR_UTVEC, next_addr); + csr_write(CSR_USCRATCH, 0); + csr_write(CSR_UIE, 0); + } } register unsigned long a0 asm("a0") = arg0;