From a4d61dea80ccb8c170a5911530ac3009aeea45f5 Mon Sep 17 00:00:00 2001 From: Yanfeng Liu Date: Sun, 3 Mar 2024 13:28:31 +0800 Subject: [PATCH] risc-v/k230: improvements to support K230 vendor u-boot Previously we need turn off the PMP locks in K230 vendor u-boot to use NuttX, this complicates the setup process. This patch supports running NuttX with original vendor u-boot so that to reduce setup complexity. It also enables empty NSH prompt string in AMP master config as the apps side support is ready. Signed-off-by: Yanfeng Liu --- arch/risc-v/src/k230/k230_hart.c | 13 ++++++++----- arch/risc-v/src/k230/k230_hart.h | 13 ++++++++++++- arch/risc-v/src/k230/k230_userspace.c | 5 +++-- .../risc-v/k230/canmv230/configs/master/defconfig | 2 +- 4 files changed, 24 insertions(+), 9 deletions(-) diff --git a/arch/risc-v/src/k230/k230_hart.c b/arch/risc-v/src/k230/k230_hart.c index b45dd6f454..73cbce2f23 100644 --- a/arch/risc-v/src/k230/k230_hart.c +++ b/arch/risc-v/src/k230/k230_hart.c @@ -127,12 +127,9 @@ static void k230_hart_cleanup(void) void k230_hart_init(void) { - #define MISA_VECTOR_BIT ('V'-'A') - #define MISA_VECTOR_MASK (1 << MISA_VECTOR_BIT) + /* TODO: when called from sbi_start(), MISA is 0 somehow. */ - /* When called from sbi_start(), MISA is 0 somehow. */ - - g_big = (READ_CSR(CSR_MISA) & MISA_VECTOR_MASK); + g_big = (READ_CSR(CSR_MISA) & (1 << 21)); k230_hart_cleanup(); @@ -146,6 +143,12 @@ void k230_hart_init(void) #ifdef RISCV_PBMT SET_CSR(CSR_MENVCFG, MENVCFG_PBMT); #endif + +#ifdef CONFIG_NUTTSBI + /* Some PMP entries might have been locked */ + + k230_add_pmp(PMPCFG_A_NAPOT | PMPCFG_RWX_MASK, 0, 1024ul << 30); +#endif } /**************************************************************************** diff --git a/arch/risc-v/src/k230/k230_hart.h b/arch/risc-v/src/k230/k230_hart.h index 76e0950c55..6fca55b0e8 100644 --- a/arch/risc-v/src/k230/k230_hart.h +++ b/arch/risc-v/src/k230/k230_hart.h @@ -22,9 +22,20 @@ #define __ARCH_RISCV_SRC_K230_K230_HART_H /**************************************************************************** - * Included Files + * Preprocessor Macros ****************************************************************************/ +/* add PMP entry with (attr, base, size) */ + +#define k230_add_pmp(a, b, s) riscv_config_pmp_region( \ + riscv_next_free_pmp_region(), a, b, s) + +#define CSR_MSECCFG 0x747 +#define CSR_MSECCFGH 0x757 + +#define MSECCFG_MML (1 << 0) +#define MSECCFG_RLB (1 << 2) + /**************************************************************************** * Public functions ****************************************************************************/ diff --git a/arch/risc-v/src/k230/k230_userspace.c b/arch/risc-v/src/k230/k230_userspace.c index 22ccb74610..e6b7641cb4 100644 --- a/arch/risc-v/src/k230/k230_userspace.c +++ b/arch/risc-v/src/k230/k230_userspace.c @@ -34,6 +34,7 @@ #include "k230_userspace.h" #include "riscv_internal.h" +#include "k230_hart.h" #ifdef CONFIG_BUILD_PROTECTED @@ -127,8 +128,8 @@ void k230_userspace(void) static void configure_mpu(void) { - riscv_config_pmp_region(0, UFLASH_F, UFLASH_START, UFLASH_SIZE); - riscv_config_pmp_region(1, USRAM_F, USRAM_START, USRAM_SIZE); + k230_add_pmp(UFLASH_F, UFLASH_START, UFLASH_SIZE); + k230_add_pmp(USRAM_F, USRAM_START, USRAM_SIZE); } #endif /* CONFIG_BUILD_PROTECTED */ diff --git a/boards/risc-v/k230/canmv230/configs/master/defconfig b/boards/risc-v/k230/canmv230/configs/master/defconfig index 371278b007..2b7250a461 100644 --- a/boards/risc-v/k230/canmv230/configs/master/defconfig +++ b/boards/risc-v/k230/canmv230/configs/master/defconfig @@ -76,7 +76,7 @@ CONFIG_NFILE_DESCRIPTORS_PER_BLOCK=6 CONFIG_NSH_ARCHINIT=y CONFIG_NSH_FILEIOSIZE=512 CONFIG_NSH_FILE_APPS=y -CONFIG_NSH_PROMPT_STRING="master> " +CONFIG_NSH_PROMPT_STRING="" CONFIG_NSH_READLINE=y CONFIG_NUTTSBI=y CONFIG_NUTTSBI_MTIMECMP_BASE=0xf04004000