From: Simon Glass Date: Mon, 4 May 2015 17:31:03 +0000 (-0600) Subject: arm: Add a prototype for save_boot_params_ret() X-Git-Url: http://git.dujemihanovic.xyz/?a=commitdiff_plain;h=5519912164698b634893913b4408fee736d01d06;p=u-boot.git arm: Add a prototype for save_boot_params_ret() It is convenient for some boards to implement save_boot_params() in C rather than assembler. Provide a way to return in this case. Signed-off-by: Simon Glass Reviewed-by: Joe Hershberger --- diff --git a/arch/arm/include/asm/system.h b/arch/arm/include/asm/system.h index fe103352fc..760e8ab1c8 100644 --- a/arch/arm/include/asm/system.h +++ b/arch/arm/include/asm/system.h @@ -159,6 +159,22 @@ void flush_l3_cache(void); * void save_boot_params(u32 r0, u32 r1, u32 r2, u32 r3); */ +/** + * save_boot_params_ret() - Return from save_boot_params() + * + * If you provide save_boot_params(), then you should jump back to this + * function when done. Try to preserve all registers. + * + * If your implementation of save_boot_params() is in C then it is acceptable + * to simply call save_boot_params_ret() at the end of your function. Since + * there is no link register set up, you cannot just exit the function. U-Boot + * will return to the (initialised) value of lr, and likely crash/hang. + * + * If your implementation of save_boot_params() is in assembler then you + * should use 'b' or 'bx' to return to save_boot_params_ret. + */ +void save_boot_params_ret(void); + #define isb() __asm__ __volatile__ ("" : : : "memory") #define nop() __asm__ __volatile__("mov\tr0,r0\t@ nop\n\t");