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 sp, sp, r0
|
||||||
add r6, r6, 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
|
get_inflated_image_size r9, r10, lr
|
||||||
|
|
||||||
#ifndef CONFIG_ZBOOT_ROM
|
#ifndef CONFIG_ZBOOT_ROM
|
||||||
@ -320,9 +316,6 @@ restart: adr r0, LC1
|
|||||||
mov r5, #0 @ init dtb size to 0
|
mov r5, #0 @ init dtb size to 0
|
||||||
#ifdef CONFIG_ARM_APPENDED_DTB
|
#ifdef CONFIG_ARM_APPENDED_DTB
|
||||||
/*
|
/*
|
||||||
* r0 = delta
|
|
||||||
* r2 = BSS start
|
|
||||||
* r3 = BSS end
|
|
||||||
* r4 = final kernel address (possibly with LSB set)
|
* r4 = final kernel address (possibly with LSB set)
|
||||||
* r5 = appended dtb size (still unknown)
|
* r5 = appended dtb size (still unknown)
|
||||||
* r6 = _edata
|
* r6 = _edata
|
||||||
@ -330,8 +323,6 @@ restart: adr r0, LC1
|
|||||||
* r8 = atags/device tree pointer
|
* r8 = atags/device tree pointer
|
||||||
* r9 = size of decompressed image
|
* r9 = size of decompressed image
|
||||||
* r10 = end of this image, including bss/stack/malloc space if non XIP
|
* r10 = end of this image, including bss/stack/malloc space if non XIP
|
||||||
* r11 = GOT start
|
|
||||||
* r12 = GOT end
|
|
||||||
* sp = stack pointer
|
* sp = stack pointer
|
||||||
*
|
*
|
||||||
* if there are device trees (dtb) appended to zImage, advance r10 so that the
|
* 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 */
|
/* temporarily relocate the stack past the DTB work space */
|
||||||
add sp, sp, r5
|
add sp, sp, r5
|
||||||
|
|
||||||
stmfd sp!, {r0-r3, ip, lr}
|
|
||||||
mov r0, r8
|
mov r0, r8
|
||||||
mov r1, r6
|
mov r1, r6
|
||||||
mov r2, r5
|
mov r2, r5
|
||||||
@ -398,7 +388,6 @@ restart: adr r0, LC1
|
|||||||
mov r2, r5
|
mov r2, r5
|
||||||
bleq atags_to_fdt
|
bleq atags_to_fdt
|
||||||
|
|
||||||
ldmfd sp!, {r0-r3, ip, lr}
|
|
||||||
sub sp, sp, r5
|
sub sp, sp, r5
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -535,6 +524,10 @@ dtb_check_done:
|
|||||||
mov pc, r0
|
mov pc, r0
|
||||||
|
|
||||||
wont_overwrite:
|
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.
|
* If delta is zero, we are running at the address we were linked at.
|
||||||
* r0 = delta
|
* r0 = delta
|
||||||
|
Loading…
Reference in New Issue
Block a user