mirror of
https://github.com/torvalds/linux.git
synced 2024-11-24 21:21:41 +00:00
ARM: decompressor: defer loading of the contents of the LC0 structure
The remaining contents of LC0 are only used after the point in the decompressor startup code where we enter via 'wont_overwrite'. So move the loading of the LC0 structure after it. This will allow us to jump to wont_overwrite directly from the EFI stub, and execute the decompressor in place at the offset it was loaded by the UEFI firmware. Signed-off-by: Ard Biesheuvel <ardb@kernel.org> Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be> Reviewed-by: Nicolas Pitre <nico@fluxnic.net>
This commit is contained in:
parent
161e04a5ba
commit
f1f012b033
@ -299,10 +299,6 @@ restart: adr r0, LC1
|
||||
add sp, sp, r0
|
||||
add r6, r6, r0
|
||||
|
||||
adr r0, LC0
|
||||
ldmia r0, {r1, r2, r3, r11, r12}
|
||||
sub r0, r0, r1 @ calculate the delta offset
|
||||
|
||||
get_inflated_image_size r9, r10, lr
|
||||
|
||||
#ifndef CONFIG_ZBOOT_ROM
|
||||
@ -320,9 +316,6 @@ restart: adr r0, LC1
|
||||
mov r5, #0 @ init dtb size to 0
|
||||
#ifdef CONFIG_ARM_APPENDED_DTB
|
||||
/*
|
||||
* r0 = delta
|
||||
* r2 = BSS start
|
||||
* r3 = BSS end
|
||||
* r4 = final kernel address (possibly with LSB set)
|
||||
* r5 = appended dtb size (still unknown)
|
||||
* r6 = _edata
|
||||
@ -330,8 +323,6 @@ restart: adr r0, LC1
|
||||
* r8 = atags/device tree pointer
|
||||
* r9 = size of decompressed image
|
||||
* r10 = end of this image, including bss/stack/malloc space if non XIP
|
||||
* r11 = GOT start
|
||||
* r12 = GOT end
|
||||
* sp = stack pointer
|
||||
*
|
||||
* if there are device trees (dtb) appended to zImage, advance r10 so that the
|
||||
@ -379,7 +370,6 @@ restart: adr r0, LC1
|
||||
/* temporarily relocate the stack past the DTB work space */
|
||||
add sp, sp, r5
|
||||
|
||||
stmfd sp!, {r0-r3, ip, lr}
|
||||
mov r0, r8
|
||||
mov r1, r6
|
||||
mov r2, r5
|
||||
@ -398,7 +388,6 @@ restart: adr r0, LC1
|
||||
mov r2, r5
|
||||
bleq atags_to_fdt
|
||||
|
||||
ldmfd sp!, {r0-r3, ip, lr}
|
||||
sub sp, sp, r5
|
||||
#endif
|
||||
|
||||
@ -535,6 +524,10 @@ dtb_check_done:
|
||||
mov pc, r0
|
||||
|
||||
wont_overwrite:
|
||||
adr r0, LC0
|
||||
ldmia r0, {r1, r2, r3, r11, r12}
|
||||
sub r0, r0, r1 @ calculate the delta offset
|
||||
|
||||
/*
|
||||
* If delta is zero, we are running at the address we were linked at.
|
||||
* r0 = delta
|
||||
|
Loading…
Reference in New Issue
Block a user