common: android: only adjust load address for ARM64 compressed kernel

If there is not "kernel_addr_c", using "kernel_addr_r" for Image/zImage
on 32-bit platform.

If there is not "kernel_addr_c", adjust load address to promise compressed
kernel can normal boot on 64-bit platform.

Change-Id: I42cc3c9074eb8f1caaa44d9256d2abdae6cd97b8
Signed-off-by: Joseph Chen <chenjh@rock-chips.com>
This commit is contained in:
Joseph Chen 2019-03-26 15:50:10 +08:00 committed by Jianhong Chen
parent 5a54baa793
commit 8d681e4412
1 changed files with 23 additions and 7 deletions

View File

@ -413,15 +413,31 @@ long android_image_load(struct blk_desc *dev_desc,
part_info->blksz - 1) / part_info->blksz;
comp = android_image_parse_kernel_comp(hdr);
/*
* We should load a compressed kernel Image
* to high memory
* We should load compressed kernel Image to high memory at
* address "kernel_addr_c".
*/
if (comp != IH_COMP_NONE) {
load_address += android_image_get_ksize(hdr) * 3;
load_address = env_get_ulong("kernel_addr_c", 16, load_address);
load_address -= hdr->page_size;
unmap_sysmem(buf);
buf = map_sysmem(load_address, 0 /* size */);
ulong kernel_addr_c;
kernel_addr_c = env_get_ulong("kernel_addr_c", 16, 0);
if (kernel_addr_c) {
load_address = kernel_addr_c - hdr->page_size;
unmap_sysmem(buf);
buf = map_sysmem(load_address, 0 /* size */);
}
#ifdef CONFIG_ARM64
else {
printf("Warn: \"kernel_addr_c\" is not defined "
"for compressed kernel Image!\n");
load_address += android_image_get_ksize(hdr) * 3;
load_address = ALIGN(load_address, ARCH_DMA_MINALIGN);
env_set_ulong("kernel_addr_c", load_address);
load_address -= hdr->page_size;
unmap_sysmem(buf);
buf = map_sysmem(load_address, 0 /* size */);
}
#endif
}
if (blk_cnt * part_info->blksz > max_size) {