
On 3/23/21 4:35 AM, Green Wan wrote:
Add a callback riscv_hart_early_init() to ./arch/riscv/cpu/start.S to allow different riscv hart perform setup code for each hart as early as possible. Since all the harts enter the calback, they must be able
nit: callback
to run the same setup.
Signed-off-by: Green Wan green.wan@sifive.com
arch/riscv/cpu/start.S | 5 +++++ arch/riscv/lib/spl.c | 4 ++++ 2 files changed, 9 insertions(+)
diff --git a/arch/riscv/cpu/start.S b/arch/riscv/cpu/start.S index 8589509e01..5c7d4da9e2 100644 --- a/arch/riscv/cpu/start.S +++ b/arch/riscv/cpu/start.S @@ -117,6 +117,11 @@ call_board_init_f_0: mv sp, a0 #endif
+#if CONFIG_IS_ENABLED(RISCV_MMODE) +call_riscv_hart_early_init:
- jal riscv_hart_early_init
+#endif
- #ifndef CONFIG_XIP /*
- Pick hart to initialize global data and run U-Boot. The other harts
diff --git a/arch/riscv/lib/spl.c b/arch/riscv/lib/spl.c index 8baee07bea..e5b1affbfc 100644 --- a/arch/riscv/lib/spl.c +++ b/arch/riscv/lib/spl.c @@ -14,6 +14,10 @@
DECLARE_GLOBAL_DATA_PTR;
+__weak void riscv_hart_early_init(void) +{ +}
Can you add some documentation for what the purpose of this function is and what the limitations are? In particular, this function cannot access gd.
--Sean
__weak int spl_board_init_f(void) { return 0;