[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 07:19:45 UTC 2017


Hi Philipp:


On 2017年09月19日 10:06, Andy Yan wrote:
> 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.

I found that r9 also need to be preserved, it seems that it hold the 
sdram base.
>>
>> 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