From cc389b198424d3cdcf609b7289c1c6ae10232ff9 Mon Sep 17 00:00:00 2001 From: Yanfeng Liu Date: Thu, 7 Mar 2024 17:49:30 +0800 Subject: [PATCH] riscv/nuttsbi: revise PMP manipulation in NuttX SBI Current NuttX SBI assumes empty PMP settings but that is not always true, for example some bootloaders may have PMP entries locked before handling over to NuttX. This patch revises it by not using hardcoded PMP region number. Signed-off-by: Yanfeng Liu --- arch/risc-v/src/common/riscv_internal.h | 3 +++ arch/risc-v/src/nuttsbi/sbi_start.c | 3 +-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/arch/risc-v/src/common/riscv_internal.h b/arch/risc-v/src/common/riscv_internal.h index 100bcb79d69..68149aeb924 100644 --- a/arch/risc-v/src/common/riscv_internal.h +++ b/arch/risc-v/src/common/riscv_internal.h @@ -160,6 +160,9 @@ __asm__ __volatile__("csrc " __STR(reg) ", %0" :: "rK"(bits)); \ }) +#define riscv_append_pmp_region(a, b, s) \ + riscv_config_pmp_region(riscv_next_free_pmp_region(), a, b, s) + #endif /**************************************************************************** diff --git a/arch/risc-v/src/nuttsbi/sbi_start.c b/arch/risc-v/src/nuttsbi/sbi_start.c index e2433a1b397..9919bd03a54 100644 --- a/arch/risc-v/src/nuttsbi/sbi_start.c +++ b/arch/risc-v/src/nuttsbi/sbi_start.c @@ -119,8 +119,7 @@ void sbi_start(void) /* Open everything for PMP */ - WRITE_CSR(pmpaddr0, -1); - WRITE_CSR(pmpcfg0, (PMPCFG_A_NAPOT | PMPCFG_R | PMPCFG_W | PMPCFG_X)); + riscv_append_pmp_region(PMPCFG_A_NAPOT | PMPCFG_RWX_MASK, 0, -1); /* Then jump to the S-mode start function */