]> Git Repo - J-u-boot.git/commitdiff
riscv: cpu: make riscv_cpu_probe to EVT_DM_POST_INIT_R callback
authorChanho Park <[email protected]>
Fri, 18 Aug 2023 05:11:03 +0000 (14:11 +0900)
committerSimon Glass <[email protected]>
Tue, 22 Aug 2023 14:07:54 +0000 (08:07 -0600)
Since the Patch 55171aedda88, VisionFive2 booting has been broken [1].
VisionFive2 board requires to enable CONFIG_TIMER_EARLY but booting went
to panic from initr_dm_devices due to lack of a timer device.

- Error logs
initcall sequence 00000000fffd8d38 failed at call 00000000402185e4
(err=-19)

Thus, we need to move riscv_cpu_probe function in order to register
the timer earlier than initr_dm_devices.

Fixes: 7fe32b3442f0 ("event: Convert arch_cpu_init_dm() to use events")
Cc: Simon Glass <[email protected]>
Cc: Bin Meng <[email protected]>
Signed-off-by: Chanho Park <[email protected]>
Tested-by: Milan P. Stanić <[email protected]>
Tested-by: Roland Ruckerbauer <[email protected]>
Tested-by: Roland Ruckerbauer <[email protected]>
arch/riscv/cpu/cpu.c

index ecfb1fb08c4b15099211774314a7f890ef41289f..0b4208e721996655acbbddb80eb176cb65b30755 100644 (file)
@@ -66,7 +66,7 @@ static inline bool supports_extension(char ext)
 #endif /* CONFIG_CPU */
 }
 
-static int riscv_cpu_probe(void)
+static int riscv_cpu_probe(void *ctx, struct event *event)
 {
 #ifdef CONFIG_CPU
        int ret;
@@ -79,6 +79,7 @@ static int riscv_cpu_probe(void)
 
        return 0;
 }
+EVENT_SPY(EVT_DM_POST_INIT_R, riscv_cpu_probe);
 
 /*
  * This is called on secondary harts just after the IPI is init'd. Currently
@@ -95,7 +96,7 @@ int riscv_cpu_setup(void *ctx, struct event *event)
 {
        int ret;
 
-       ret = riscv_cpu_probe();
+       ret = riscv_cpu_probe(ctx, event);
        if (ret)
                return ret;
 
@@ -149,12 +150,6 @@ EVENT_SPY(EVT_DM_POST_INIT_F, riscv_cpu_setup);
 
 int arch_early_init_r(void)
 {
-       int ret;
-
-       ret = riscv_cpu_probe();
-       if (ret)
-               return ret;
-
        if (IS_ENABLED(CONFIG_SYSRESET_SBI))
                device_bind_driver(gd->dm_root, "sbi-sysreset",
                                   "sbi-sysreset", NULL);
This page took 0.033678 seconds and 4 git commands to generate.