[U-Boot] [PATCH v2 0/5] rockchip: back-to-bootrom: replace assembly-implementation with C-code
Andy Yan
andy.yan at rock-chips.com
Tue Sep 19 02:06:20 UTC 2017
Hi Philipp:
On 2017年09月19日 02:18, Philipp Tomsich wrote:
> Recent discussions confirmed (what the code always assumed): the
> Rockchip BROM always enters U-Boot with the stack-pointer valid
> (i.e. the U-Boot startup code is running off the BROM stack).
>
> We can thus replace the back-to-bootrom code (i.e. both the
> save_boot_params and back_to_bootrom implementations) using C-code
> based on setjmp/longjmp. The new implementation is already structured
> to allow an easy drop-in of Andy's changes to enter download-mode when
> returning to the BROM.
>
> This entails one minor tweak to asm/system.h, which only exported
> the save_boot_params_ret prototype for ARMv7, but not for AArch64.
>
> For v2, we force bootrom.o to alway be emitted as A32 (not T32), so we
> can safely call save_boot_params_ret().
This still have a problem, because the setjmp implementation for
ARM32 platform has humb code when CONFIG_SYS_THUMB_BUILD is
enabled, this is a default setting for most ARMv7 boards.
#if CONFIG_IS_ENABLED(SYS_THUMB_BUILD)
".align 2\n"
"adr r0, jmp_target\n"
"add r0, r0, $1\n" // r0 stored the jump target address and with
bit[0] = 1, this will trigger a thumb switch in longjmp with code "bx r0"
#endif
When I force the setjmp code go arm code path, I can back to bootrom
successfully, But I got a data abort exception in later. it seems it
happens when bootrom finished the uboot code
copy, when jump to sdram, I need a further debug.
>
> It also turned out that I had not caught the RK3188 in my earlier
> series... and my luck being what it is, the RK3188 needed some extra
> handholding to adapt to the new regime: instead of passing the context
> address (for returning to the BROM) from the TPL to the SPL, the SPL
> now returns to the TPL and the TPL then returns to the BROM.
>
> Changes in v2:
> - [added in v2] chain back_to_bootrom calls for SPL, first returning
> to the TPL (using the same mechanism) and further calling through
> to the BROM from the TPL by invoking back_to_bootrom again
> - adapt the RK3188 spl support file (that I had originally missed)
>
> Philipp Tomsich (5):
> arm: make save_boot_params_ret prototype visible for AArch64
> rockchip: back-to-bootrom: replace assembly-implementation with C-code
> rockchip: back-to-bootrom: rk3188: chain from SPL via TPL to the BROM
> rockchip: back-to-bootrom: allow passing a cmd to the bootrom
> rockchip: back-to-bootrom: do not compile bootrom.o in thumb mode
>
> arch/arm/include/asm/arch-rockchip/bootrom.h | 30 +++++++++---
> arch/arm/include/asm/system.h | 62 ++++++++++++-------------
> arch/arm/mach-rockchip/Makefile | 10 +++-
> arch/arm/mach-rockchip/bootrom.c | 54 +++++++++++++++++++++-
> arch/arm/mach-rockchip/rk3036-board-spl.c | 2 +-
> arch/arm/mach-rockchip/rk3188-board-spl.c | 14 +-----
> arch/arm/mach-rockchip/rk3188-board-tpl.c | 19 ++++----
> arch/arm/mach-rockchip/rk322x-board-spl.c | 2 +-
> arch/arm/mach-rockchip/rk3288-board-spl.c | 4 +-
> arch/arm/mach-rockchip/rk3368-board-tpl.c | 2 +-
> arch/arm/mach-rockchip/rk3399-board-spl.c | 2 +-
> arch/arm/mach-rockchip/save_boot_param.S | 69 ----------------------------
> 12 files changed, 133 insertions(+), 137 deletions(-)
> delete mode 100644 arch/arm/mach-rockchip/save_boot_param.S
>
More information about the U-Boot
mailing list