You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2024/03/09 03:52:18 UTC

(nuttx) branch master updated: riscv/k230: minor revision on PMP settings

This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git


The following commit(s) were added to refs/heads/master by this push:
     new 02d097ac4d riscv/k230: minor revision on PMP settings
02d097ac4d is described below

commit 02d097ac4d57746d27d8dbebeeae8958b766e041
Author: Yanfeng Liu <yf...@qq.com>
AuthorDate: Fri Mar 8 15:01:28 2024 +0800

    riscv/k230: minor revision on PMP settings
    
    This patch simplifies PMP handling for K230 using common APIs.
    It also uses `g_misa` variable to expose the MISA issue.
    
    Signed-off-by: Yanfeng Liu <yf...@qq.com>
---
 arch/risc-v/src/k230/k230_hart.c      | 20 +++++++-------------
 arch/risc-v/src/k230/k230_hart.h      |  5 -----
 arch/risc-v/src/k230/k230_userspace.c |  5 ++---
 3 files changed, 9 insertions(+), 21 deletions(-)

diff --git a/arch/risc-v/src/k230/k230_hart.c b/arch/risc-v/src/k230/k230_hart.c
index 73cbce2f23..8fc69a2bb1 100644
--- a/arch/risc-v/src/k230/k230_hart.c
+++ b/arch/risc-v/src/k230/k230_hart.c
@@ -87,7 +87,7 @@
 
 #if !defined(CONFIG_BUILD_KERNEL) || defined(CONFIG_NUTTSBI)
 
-static bool g_big = false;    /* true if running on big core */
+static volatile uint64_t g_misa = 0;
 
 /****************************************************************************
  * Private Functions
@@ -127,28 +127,21 @@ static void k230_hart_cleanup(void)
 
 void k230_hart_init(void)
 {
-  /* TODO: when called from sbi_start(), MISA is 0 somehow. */
-
-  g_big = (READ_CSR(CSR_MISA) & (1 << 21));
-
   k230_hart_cleanup();
 
   WRITE_CSR(CSR_MXSTATUS, XSTATUS);
   WRITE_CSR(CSR_MHCR,  MHCR);
   WRITE_CSR(CSR_MCOR,  MCOR);
   WRITE_CSR(CSR_MSMPR, MSMPR);
-  WRITE_CSR(CSR_MCCR2, g_big ? MCCR2_BIG : MCCR2);
-  WRITE_CSR(CSR_MHINT, g_big ? MHINT_BIG : MHINT);
+  WRITE_CSR(CSR_MCCR2, MCCR2);
+  WRITE_CSR(CSR_MHINT, MHINT);
 
 #ifdef RISCV_PBMT
   SET_CSR(CSR_MENVCFG, MENVCFG_PBMT);
 #endif
+  /* TODO: why 0 when reading from NuttSBI S-mode? */
 
-#ifdef CONFIG_NUTTSBI
-  /* Some PMP entries might have been locked */
-
-  k230_add_pmp(PMPCFG_A_NAPOT | PMPCFG_RWX_MASK, 0, 1024ul << 30);
-#endif
+  while (!(g_misa = READ_CSR(CSR_MISA)));
 }
 
 /****************************************************************************
@@ -158,7 +151,8 @@ void k230_hart_init(void)
 
 bool k230_hart_is_big(void)
 {
-  return g_big;
+  sinfo("g_misa=%lx\n", g_misa);
+  return g_misa & (1 << 21);
 }
 
 /****************************************************************************
diff --git a/arch/risc-v/src/k230/k230_hart.h b/arch/risc-v/src/k230/k230_hart.h
index 6fca55b0e8..cd5a5cf9a1 100644
--- a/arch/risc-v/src/k230/k230_hart.h
+++ b/arch/risc-v/src/k230/k230_hart.h
@@ -25,11 +25,6 @@
  * 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
 
diff --git a/arch/risc-v/src/k230/k230_userspace.c b/arch/risc-v/src/k230/k230_userspace.c
index e6b7641cb4..c1e1135a90 100644
--- a/arch/risc-v/src/k230/k230_userspace.c
+++ b/arch/risc-v/src/k230/k230_userspace.c
@@ -34,7 +34,6 @@
 
 #include "k230_userspace.h"
 #include "riscv_internal.h"
-#include "k230_hart.h"
 
 #ifdef CONFIG_BUILD_PROTECTED
 
@@ -128,8 +127,8 @@ void k230_userspace(void)
 
 static void configure_mpu(void)
 {
-  k230_add_pmp(UFLASH_F, UFLASH_START, UFLASH_SIZE);
-  k230_add_pmp(USRAM_F, USRAM_START, USRAM_SIZE);
+  riscv_append_pmp_region(UFLASH_F, UFLASH_START, UFLASH_SIZE);
+  riscv_append_pmp_region(USRAM_F, USRAM_START, USRAM_SIZE);
 }
 
 #endif /* CONFIG_BUILD_PROTECTED */