diff options
author | Roy Franz <roy.franz@linaro.org> | 2013-09-22 15:45:32 -0700 |
---|---|---|
committer | Matt Fleming <matt.fleming@intel.com> | 2013-09-25 12:34:38 +0100 |
commit | 4a9f3a7c336a6b0ffeef2523bef93e67b0921163 (patch) | |
tree | 49717fdb090563dc4b10b056f40f0d49d9fe033b /arch/x86/boot | |
parent | c6866d7238d4f26055de8db9c1d5a700e554b2d4 (diff) | |
download | op-kernel-dev-4a9f3a7c336a6b0ffeef2523bef93e67b0921163.zip op-kernel-dev-4a9f3a7c336a6b0ffeef2523bef93e67b0921163.tar.gz |
efi: Generalize relocate_kernel() for use by other architectures.
Rename relocate_kernel() to efi_relocate_kernel(), and take
parameters rather than x86 specific structure. Add max_addr
argument as for ARM we have some address constraints that we
need to enforce when relocating the kernel. Add alloc_size
parameter for use by ARM64 which uses an uncompressed kernel,
and needs to allocate space for BSS.
Signed-off-by: Roy Franz <roy.franz@linaro.org>
Signed-off-by: Matt Fleming <matt.fleming@intel.com>
Diffstat (limited to 'arch/x86/boot')
-rw-r--r-- | arch/x86/boot/compressed/eboot.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c index 5bbba86..2e997b6 100644 --- a/arch/x86/boot/compressed/eboot.c +++ b/arch/x86/boot/compressed/eboot.c @@ -733,10 +733,16 @@ struct boot_params *efi_main(void *handle, efi_system_table_t *_table, * address, relocate it. */ if (hdr->pref_address != hdr->code32_start) { - status = relocate_kernel(hdr); - + unsigned long bzimage_addr = hdr->code32_start; + status = efi_relocate_kernel(sys_table, &bzimage_addr, + hdr->init_size, hdr->init_size, + hdr->pref_address, + hdr->kernel_alignment); if (status != EFI_SUCCESS) goto fail; + + hdr->pref_address = hdr->code32_start; + hdr->code32_start = bzimage_addr; } status = exit_boot(boot_params, handle); |