summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Chen <chenjh@rock-chips.com>2019-03-26 20:01:49 +0800
committerJianhong Chen <chenjh@rock-chips.com>2019-04-09 10:54:14 +0800
commit6115fdb3c07a7c9989f25099bc9b0f18c2b255df (patch)
tree6d9a43690d0a43ee40ffd18dca2370f28beaa708
parent8d681e4412b383ac32a7768921524eec37f99994 (diff)
common: android: improve os image information
android_image_parse_kernel_comp() doesn't return valid os compressed type after android_image_set_kload(), so we add the env "os_comp" to record compressed type. Change-Id: Ie175649d348c0578ce78e139bdbbf4b6f9ea1101 Signed-off-by: Joseph Chen <chenjh@rock-chips.com>
-rw-r--r--common/android_bootloader.c32
-rw-r--r--common/image-android.c1
2 files changed, 21 insertions, 12 deletions
diff --git a/common/android_bootloader.c b/common/android_bootloader.c
index 68535abbc8..e6da05a098 100644
--- a/common/android_bootloader.c
+++ b/common/android_bootloader.c
@@ -308,14 +308,14 @@ static int android_bootloader_get_fdt(const char *part_name,
int android_bootloader_boot_kernel(unsigned long kernel_address)
{
- ulong comp;
- char kernel_addr_str[12];
- char *fdt_addr = env_get("fdt_addr");
char *kernel_addr_r = env_get("kernel_addr_r");
char *kernel_addr_c = env_get("kernel_addr_c");
-
+ char *fdt_addr = env_get("fdt_addr");
+ char kernel_addr_str[12];
+ char comp_str[32] = {0};
+ ulong comp_type;
const char *comp_name[] = {
- [IH_COMP_NONE] = "",
+ [IH_COMP_NONE] = "IMAGE",
[IH_COMP_GZIP] = "GZIP",
[IH_COMP_BZIP2] = "BZIP2",
[IH_COMP_LZMA] = "LZMA",
@@ -326,15 +326,23 @@ int android_bootloader_boot_kernel(unsigned long kernel_address)
char *bootm_args[] = {
"bootm", kernel_addr_str, kernel_addr_str, fdt_addr, NULL };
- comp = android_image_get_comp((struct andr_img_hdr *)kernel_address);
+ comp_type = env_get_ulong("os_comp", 10, 0);
sprintf(kernel_addr_str, "0x%lx", kernel_address);
- if (comp != IH_COMP_NONE)
- printf("Booting %s kernel at %s(Uncompress to %s) with fdt at %s...\n\n\n",
- comp_name[comp], kernel_addr_c, kernel_addr_r, fdt_addr);
- else
- printf("Booting kernel at %s with fdt at %s...\n\n\n",
- kernel_addr_r, fdt_addr);
+ if (comp_type != IH_COMP_NONE) {
+ if (comp_type == IH_COMP_ZIMAGE &&
+ kernel_addr_r && !kernel_addr_c) {
+ kernel_addr_c = kernel_addr_r;
+ kernel_addr_r = __stringify(CONFIG_SYS_SDRAM_BASE);
+ }
+ snprintf(comp_str, 32, "%s%s%s",
+ "(Uncompress to ", kernel_addr_r, ")");
+ }
+
+ printf("Booting %s kernel at %s%s with fdt at %s...\n\n\n",
+ comp_name[comp_type],
+ comp_type != IH_COMP_NONE ? kernel_addr_c : kernel_addr_r,
+ comp_str, fdt_addr);
if (gd->console_evt == CONSOLE_EVT_CTRL_M) {
bidram_dump();
diff --git a/common/image-android.c b/common/image-android.c
index cf436da62c..048de0f7ea 100644
--- a/common/image-android.c
+++ b/common/image-android.c
@@ -419,6 +419,7 @@ long android_image_load(struct blk_desc *dev_desc,
if (comp != IH_COMP_NONE) {
ulong kernel_addr_c;
+ env_set_ulong("os_comp", comp);
kernel_addr_c = env_get_ulong("kernel_addr_c", 16, 0);
if (kernel_addr_c) {
load_address = kernel_addr_c - hdr->page_size;