
Hi Tom,
On 1/1/25 18:55, Tom Rini wrote:
On Wed, Dec 18, 2024 at 04:53:53PM +0100, Jerome Forissier wrote:
This series replaces the dynamic initcalls (with function pointers) with static calls, and gets rid of initcall_run_list(), init_sequence_f, init_sequence_f_r and init_sequence_r. This makes the code simpler and the binary slighlty smaller: -2507 bytes/-0.23 % with LTO enabled and -1232 bytes/-0.11 % with LTO disabled (xilinx_zynqmp_kria_defconfig).
Execution time doesn't seem to change noticeably. There is no impact on the SPL.
This leads to run-time failures on SH: https://source.denx.de/u-boot/u-boot/-/jobs/986701
Fixed as follows:
diff --git a/arch/sh/lib/board.c b/arch/sh/lib/board.c index 53b1c147c2e..2daf54e7c33 100644 --- a/arch/sh/lib/board.c +++ b/arch/sh/lib/board.c @@ -19,18 +19,13 @@ int dram_init(void)
void relocate_code(ulong start_addr_sp, gd_t *new_gd, ulong relocaddr) { - void (*reloc_board_init_r)(gd_t *gd, ulong dest) = board_init_r; - - if (new_gd->reloc_off) { + if (new_gd->reloc_off) memcpy((void *)new_gd->relocaddr, (void *)(new_gd->relocaddr - new_gd->reloc_off), new_gd->mon_len);
- reloc_board_init_r += new_gd->reloc_off; - } - __asm__ __volatile__("mov.l %0, r15\n" : : "m" (new_gd->start_addr_sp));
while (1) - reloc_board_init_r(new_gd, 0x0); + board_init_r(new_gd, 0x0); }
...which kind of makes sense to me but I must say I don't fully grasp what is happening with this relocation step.
If this is indeed the right fix I will fold it into "board_init_r(): use static calls" which is the commit that breaks the test.
Thanks,