All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC PATCH v2 1/2] arch: riscv: cpu: Add callback to init each core
@ 2021-03-23  8:35 Green Wan
  2021-03-23  8:35 ` [RFC PATCH v2 2/2] board: sifive: unmatched: clear feature disable CSR Green Wan
                   ` (2 more replies)
  0 siblings, 3 replies; 12+ messages in thread
From: Green Wan @ 2021-03-23  8:35 UTC (permalink / raw)
  To: u-boot

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
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)
+{
+}
+
 __weak int spl_board_init_f(void)
 {
 	return 0;
-- 
2.31.0

^ permalink raw reply related	[flat|nested] 12+ messages in thread
* [RFC PATCH v3 0/2] arch: riscv: cpu: Add callback to init each core
@ 2021-03-27  2:18 Green Wan
  2021-03-27  2:18 ` [RFC PATCH v3 1/2] " Green Wan
  0 siblings, 1 reply; 12+ messages in thread
From: Green Wan @ 2021-03-27  2:18 UTC (permalink / raw)
  To: u-boot

Add a callback interface, riscv_hart_early_init() to perform riscv CPU 
hart-dependent configuration for each hart. riscv_hart_early_init() is
placed after stack of harts are initialized and before main boot hart is
picked up. Several conditions should be aware of or avoided are listed:

  - cannot access gd
    At the moment, gd hasn't initialized yet.

  - all operations in riscv_hart_early_init() should only affect core itself
    For example, the operations for board level should be moved to mach_xxx()
    or board_init_xxx() functions instead.

  - Common resource need protection if multicore
    Since all harts might enter riscv_hart_early_init() in parallel, common
    resource need a mechanism to handle race condition.

  - A dummy implementation is added in ./arch/riscv/cpu/cpu.c
    The implementation is declared with '__weak' and can be overridden.

Green Wan (2):
  arch: riscv: cpu: Add callback to init each core
  board: sifive: unmatched: clear feature disable CSR

 arch/riscv/cpu/cpu.c         | 15 +++++++++++++++
 arch/riscv/cpu/start.S       | 14 ++++++++++++++
 board/sifive/unmatched/spl.c | 16 ++++++++++++++++
 3 files changed, 45 insertions(+)

-- 
2.31.0

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2021-03-29  3:04 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-03-23  8:35 [RFC PATCH v2 1/2] arch: riscv: cpu: Add callback to init each core Green Wan
2021-03-23  8:35 ` [RFC PATCH v2 2/2] board: sifive: unmatched: clear feature disable CSR Green Wan
2021-03-24  0:32   ` Sean Anderson
2021-03-24  0:27 ` [RFC PATCH v2 1/2] arch: riscv: cpu: Add callback to init each core Sean Anderson
2021-03-26  1:22 ` Leo Liang
2021-03-26  1:34   ` Sean Anderson
2021-03-26  9:03     ` Green Wan
2021-03-29  2:23       ` [RFC PATCH v3 " Leo Liang
2021-03-29  2:32         ` Green Wan
  -- strict thread matches above, loose matches on Subject: below --
2021-03-27  2:18 [RFC PATCH v3 0/2] " Green Wan
2021-03-27  2:18 ` [RFC PATCH v3 1/2] " Green Wan
2021-03-29  2:26   ` Sean Anderson
2021-03-29  3:04     ` Green Wan

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.