[RFC PATCH v7 1/2] riscv: cpu: Add callback to init each core

Green Wan green.wan at sifive.com
Thu Apr 22 11:18:01 CEST 2021


Add a callback harts_early_init() to start.S to allow different riscv
hart perform setup code for each hart as early as possible. Since all
the harts enter the callback, they must be able to run the same
setup.

Signed-off-by: Green Wan <green.wan at sifive.com>
Reviewed-by: Rick Chen <rick at andestech.com>
---
 arch/riscv/cpu/cpu.c   | 11 +++++++++++
 arch/riscv/cpu/start.S |  6 ++++++
 2 files changed, 17 insertions(+)

diff --git a/arch/riscv/cpu/cpu.c b/arch/riscv/cpu/cpu.c
index 85592f5bee..43c086ca19 100644
--- a/arch/riscv/cpu/cpu.c
+++ b/arch/riscv/cpu/cpu.c
@@ -140,3 +140,14 @@ int arch_early_init_r(void)
 {
 	return riscv_cpu_probe();
 }
+
+/**
+ * harts_early_init() - A callback function called by start.S to configure
+ * feature settings of each hart.
+ *
+ * In a multi-core system, memory access shall be careful here, it shall
+ * take care race conditions.
+ */
+__weak void harts_early_init(void)
+{
+}
diff --git a/arch/riscv/cpu/start.S b/arch/riscv/cpu/start.S
index 8589509e01..bdd5517bca 100644
--- a/arch/riscv/cpu/start.S
+++ b/arch/riscv/cpu/start.S
@@ -117,6 +117,12 @@ call_board_init_f_0:
 	mv	sp, a0
 #endif
 
+	/*
+	 * Configure proprietary settings and customized CRSs of harts
+	 */
+call_harts_early_init:
+	jal	harts_early_init
+
 #ifndef CONFIG_XIP
 	/*
 	 * Pick hart to initialize global data and run U-Boot. The other harts
-- 
2.31.0



More information about the U-Boot mailing list