
8 Nov
2016
8 Nov
'16
5:36 p.m.
On 11/08/2016 03:32 AM, Cédric Schieli wrote:
2016-11-08 4:14 GMT+01:00 Stephen Warren <swarren@wwwdotorg.org mailto:swarren@wwwdotorg.org>:
Please note that for this to work the U-Boot binary must be tagged with a recent version of the mkknlimg script found in the Rasperry Fundation's kernel tree: <kernel>/scripts/mkknlimg --dtok <uboot>/u-boot.bin /boot/u-boot.bin [1] https://www.raspberrypi.org/forums//viewtopic.php?f=107&t=134018 <https://www.raspberrypi.org/forums//viewtopic.php?f=107&t=134018>
diff --git a/board/raspberrypi/rpi/rpi.c b/board/raspberrypi/rpi/rpi.c +#ifdef CONFIG_ARM64 +void save_boot_params(unsigned long dtb) +#else +void save_boot_params(unsigned long r0, unsigned long r1, unsigned long dtb) +#endif +{ + fw_dtb_pointer = dtb; + save_boot_params_ret(); +} I think you need to write that function in assembly. This "function" is called very early during U-Boot startup, before any stack pointer is set up. You can't guarantee that a function written in C won't attempt to use the stack, although admittedly with the current code, Makefile, and the Ubuntu compilers, it just happens not to.
Is inline assembly enough to guarantee that, or is it mandatory to revert to an assembly file ?
The entire function needs to be in assembly, since the compiler is free to touch the stack during function prologue/epilogue too.