[PATCH 2/3] bsps/riscv: Fix riscv_get_hart_index_by_phandle()

Sebastian Huber sebastian.huber at embedded-brains.de
Thu Mar 16 08:59:42 UTC 2023


Take a non-zero RISCV_BOOT_HARTID into account.
---
 bsps/riscv/riscv/start/bspsmp.c   |  2 +-
 bsps/riscv/riscv/start/bspstart.c | 10 +++++++++-
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/bsps/riscv/riscv/start/bspsmp.c b/bsps/riscv/riscv/start/bspsmp.c
index ce5792f5b8..34796a5120 100644
--- a/bsps/riscv/riscv/start/bspsmp.c
+++ b/bsps/riscv/riscv/start/bspsmp.c
@@ -46,7 +46,7 @@ void bsp_start_on_secondary_processor(Per_CPU_Control *cpu_self)
 
 uint32_t _CPU_SMP_Initialize(void)
 {
-  return riscv_hart_count - RISCV_BOOT_HARTID;
+  return riscv_hart_count;
 }
 
 bool _CPU_SMP_Start_processor(uint32_t cpu_index)
diff --git a/bsps/riscv/riscv/start/bspstart.c b/bsps/riscv/riscv/start/bspstart.c
index 30d479ce88..f27713b5bf 100644
--- a/bsps/riscv/riscv/start/bspstart.c
+++ b/bsps/riscv/riscv/start/bspstart.c
@@ -111,6 +111,14 @@ static void riscv_find_harts(void)
 
     hart_index = fdt32_to_cpu(val[0]);
 
+#if RISCV_BOOT_HARTID != 0
+    if (hart_index < RISCV_BOOT_HARTID) {
+      continue;
+    }
+
+    hart_index -= RISCV_BOOT_HARTID;
+#endif
+
     if (hart_index >= RTEMS_ARRAY_SIZE(riscv_hart_phandles)) {
       continue;
     }
@@ -166,7 +174,7 @@ uint32_t riscv_get_hart_index_by_phandle(uint32_t phandle)
 
   for (hart_index = 0; hart_index < riscv_hart_count; ++hart_index) {
     if (riscv_hart_phandles[hart_index] == phandle) {
-      return hart_index;
+      return hart_index + RISCV_BOOT_HARTID;
     }
   }
 
-- 
2.35.3



More information about the devel mailing list