OpenSBI starts the BeagleV image below the 512M at 0x84000000 that
barebox gets. Instead of relocating in place and having
barebox_pbl_start() copy the PBL again, the stage names the region as
relocaddr, so the PBL is relocated once, directly into it.

DEBUG_LL init and nmon go into the CPU init callback, which runs before
relocation like the old entry point did. The '>' is now printed by the
stage dispatch.

Assisted-by: Claude:opus-5.5
Signed-off-by: Ahmad Fatoum <[email protected]>
---
 arch/riscv/boards/beaglev/lowlevel.c | 30 +++++++++++++++++++---------
 1 file changed, 21 insertions(+), 9 deletions(-)

diff --git a/arch/riscv/boards/beaglev/lowlevel.c 
b/arch/riscv/boards/beaglev/lowlevel.c
index db884dc762ce..b2eab26c3ca5 100644
--- a/arch/riscv/boards/beaglev/lowlevel.c
+++ b/arch/riscv/boards/beaglev/lowlevel.c
@@ -2,19 +2,31 @@
 
 #include <common.h>
 #include <debug_ll.h>
+#include <pbl/entry.h>
 #include <asm/barebox-riscv.h>
 #include <asm/riscv_nmon.h>
 
-ENTRY_FUNCTION(start_beaglev_starlight, a0, a1, a2)
-{
-       extern char __dtb_z_jh7100_beaglev_starlight_start[];
-       void *fdt;
+#define BEAGLEV_MEM_BASE       0x84000000
 
+extern char __dtb_z_jh7100_beaglev_starlight_start[];
+
+static void __prereloc beaglev_cpu_init(void)
+{
        debug_ll_init();
        barebox_nmon_entry();
-       putc_ll('>');
-
-       fdt = __dtb_z_jh7100_beaglev_starlight_start + get_runtime_offset();
-
-       barebox_riscv_supervisor_entry(0x84000000, SZ_512M, a0, fdt);
 }
+
+/*
+ * OpenSBI starts its payload below the memory handed to barebox, so the
+ * PBL relocates there first.
+ */
+ENTRY_POINT_HEAD(start_beaglev_starlight, __barebox_pbl_head_v1_supervisor)
+       .soc_type = SOC_TYPE_JH7100,
+       .second_stage.stacktop = BEAGLEV_MEM_BASE + SZ_512M,
+       .second_stage.relocaddr = BEAGLEV_MEM_BASE,
+       .second_stage.mem_start = BEAGLEV_MEM_BASE,
+       .second_stage.mem_minsz = SZ_512M,
+       .second_stage.board_data = __dtb_z_jh7100_beaglev_starlight_start,
+       .second_stage.prereloc_cpu_init = beaglev_cpu_init,
+       .second_stage.soc_chainload = pbl_stage_barebox_entry,
+ENTRY_POINT_END
-- 
2.47.3


Reply via email to