
Hi,
arch/arm/cpu/armv7/lowlevel_init.S:.pushsection .text.s_init, "ax" arch/arm/cpu/armv7/lowlevel_init.S:WEAK(s_init) arch/arm/cpu/armv7/lowlevel_init.S:ENDPROC(s_init) arch/arm/cpu/armv7/lowlevel_init.S: bl s_init
Maybe such a default lowlevel_init for armv8 could also have an s_init ?
What's concern with lowlevel_init()? It's also wired into existing early hook function which's located inside start.S
I would like to avoid duplicating lowlevel_init functionality as much as possible , common lowlevel_init would be very welcome .
Sure, I can add the s_init to common lowlevel_init and moving the codes to
s_init. Thanks. Then the question is, how much of this stuff can be removed because it is part of generic lowlevel_init, I hope a lot.
I'm not sure I completely understand your question, but I can share what
we're going to do.
I am wondering if some of the code here can be deduplicated by using the generic lowlevel_init.S , i.e. if some of the code in lowlevel_init.S is duplicate of the code in this custom lowlevel_init.S implementation.
No duplicate codes in both common lowlevel_init.S and custom lowlevel_init.S.
Declaring a weak s_init function at lowlevel_init.S
.pushsection .text.s_init, "ax" WEAK(s_init) bx lr ENDPROC(s_init) .popsection
Calling s_init before lowlevel_init returned to parent call [...] bl s_init move lr, x29 ret
We will move the codes to s_init which is declared in our platform driver,
arch/arm/mach-socfpga .
The codes is needed to backup the data section as earlier as possible to support warm reset / watchdog due to warm reset use case, where
reloading SPL would be skipped after reset. If you need to run code very early and back up critical data, look at save_boot_params .
Thanks for suggesting this, we will try this out.
Regards, Tien Fong