summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common/image-android.c44
1 files changed, 33 insertions, 11 deletions
diff --git a/common/image-android.c b/common/image-android.c
index 264bf90007..3564a64221 100644
--- a/common/image-android.c
+++ b/common/image-android.c
@@ -120,6 +120,7 @@ int android_image_check_header(const struct andr_img_hdr *hdr)
ulong android_image_get_end(const struct andr_img_hdr *hdr)
{
ulong end;
+
/*
* The header takes a full page, the remaining components are aligned
* on page boundary
@@ -130,6 +131,12 @@ ulong android_image_get_end(const struct andr_img_hdr *hdr)
end += ALIGN(hdr->ramdisk_size, hdr->page_size);
end += ALIGN(hdr->second_size, hdr->page_size);
+ if (hdr->header_version >= 1)
+ end += ALIGN(hdr->recovery_dtbo_size, hdr->page_size);
+
+ if (hdr->header_version >= 2)
+ end += ALIGN(hdr->dtb_size, hdr->page_size);
+
return end;
}
@@ -207,21 +214,36 @@ void android_print_contents(const struct andr_img_hdr *hdr)
u32 os_ver = hdr->os_version >> 11;
u32 os_lvl = hdr->os_version & ((1U << 11) - 1);
- printf("%skernel size: %x\n", p, hdr->kernel_size);
- printf("%skernel address: %x\n", p, hdr->kernel_addr);
- printf("%sramdisk size: %x\n", p, hdr->ramdisk_size);
- printf("%sramdisk address: %x\n", p, hdr->ramdisk_addr);
- printf("%ssecond size: %x\n", p, hdr->second_size);
- printf("%ssecond address: %x\n", p, hdr->second_addr);
- printf("%stags address: %x\n", p, hdr->tags_addr);
- printf("%spage size: %x\n", p, hdr->page_size);
+ printf("%skernel size: %x\n", p, hdr->kernel_size);
+ printf("%skernel address: %x\n", p, hdr->kernel_addr);
+ printf("%sramdisk size: %x\n", p, hdr->ramdisk_size);
+ printf("%sramdisk address: %x\n", p, hdr->ramdisk_addr);
+ printf("%ssecond size: %x\n", p, hdr->second_size);
+ printf("%ssecond address: %x\n", p, hdr->second_addr);
+ printf("%stags address: %x\n", p, hdr->tags_addr);
+ printf("%spage size: %x\n", p, hdr->page_size);
/* ver = A << 14 | B << 7 | C (7 bits for each of A, B, C)
* lvl = ((Y - 2000) & 127) << 4 | M (7 bits for Y, 4 bits for M) */
- printf("%sos_version: %x (ver: %u.%u.%u, level: %u.%u)\n",
+ printf("%sos_version: %x (ver: %u.%u.%u, level: %u.%u)\n",
p, hdr->os_version,
(os_ver >> 7) & 0x7F, (os_ver >> 14) & 0x7F, os_ver & 0x7F,
(os_lvl >> 4) + 2000, os_lvl & 0x0F);
- printf("%sname: %s\n", p, hdr->name);
- printf("%scmdline: %s\n", p, hdr->cmdline);
+ printf("%sname: %s\n", p, hdr->name);
+ printf("%scmdline: %s\n", p, hdr->cmdline);
+ printf("%sheader_version: %d\n", p, hdr->header_version);
+
+ if (hdr->header_version >= 1) {
+ printf("%srecovery dtbo size: %x\n", p,
+ hdr->recovery_dtbo_size);
+ printf("%srecovery dtbo offset: %llx\n", p,
+ hdr->recovery_dtbo_offset);
+ printf("%sheader size: %x\n", p,
+ hdr->header_size);
+ }
+
+ if (hdr->header_version >= 2) {
+ printf("%sdtb size: %x\n", p, hdr->dtb_size);
+ printf("%sdtb addr: %llx\n", p, hdr->dtb_addr);
+ }
}
#endif