MA-12337-1 Including DTBO in Recovery for Non-A/B Devices in Pie 9.0
Non-A/B devices should include dtbo in recovery.img to prevent mismatch with recovery if OTA failure. Load dtbo from recovery.img for Non-A/B devices in recovery mode. Change-Id: Ie8b12aeb562b80a172769af0b163df3c672c9af0 Signed-off-by: Ji Luo <ji.luo@nxp.com>
This commit is contained in:
parent
0377dc881a
commit
77542218ab
|
|
@ -2051,6 +2051,12 @@ int do_boota(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) {
|
|||
requested_partitions_boot[1] = NULL;
|
||||
requested_partitions_recovery[1] = NULL;
|
||||
}
|
||||
#ifndef CONFIG_ANDROID_AB_SUPPORT
|
||||
else if (is_recovery_mode){
|
||||
requested_partitions_recovery[1] = NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* if in lock state, do avb verify */
|
||||
#ifndef CONFIG_DUAL_BOOTLOADER
|
||||
/* For imx6 on Android, we don't have a/b slot and we want to verify
|
||||
|
|
@ -2185,21 +2191,41 @@ int do_boota(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) {
|
|||
#endif
|
||||
#ifdef CONFIG_OF_LIBFDT
|
||||
/* load the dtb file */
|
||||
u32 fdt_size = 0;
|
||||
u32 fdt_size = 0;
|
||||
struct dt_table_header *dt_img = NULL;
|
||||
|
||||
if (is_load_fdt_from_part()) {
|
||||
#ifdef CONFIG_ANDROID_THINGS_SUPPORT
|
||||
if (find_partition_data_by_name("oem_bootloader",
|
||||
avb_out_data, &avb_loadpart)) {
|
||||
goto fail;
|
||||
}
|
||||
#else
|
||||
} else
|
||||
dt_img = (struct dt_table_header *)avb_loadpart->data;
|
||||
#elif defined(CONFIG_ANDROID_AB_SUPPORT)
|
||||
if (find_partition_data_by_name("dtbo",
|
||||
avb_out_data, &avb_loadpart)) {
|
||||
goto fail;
|
||||
}
|
||||
} else
|
||||
dt_img = (struct dt_table_header *)avb_loadpart->data;
|
||||
#else
|
||||
if (is_recovery_mode) {
|
||||
if (hdr->header_version != 1) {
|
||||
printf("boota: boot image header version error!\n");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
dt_img = (struct dt_table_header *)((void *)(ulong)hdr +
|
||||
hdr->page_size +
|
||||
ALIGN(hdr->kernel_size, hdr->page_size) +
|
||||
ALIGN(hdr->ramdisk_size, hdr->page_size) +
|
||||
ALIGN(hdr->second_size, hdr->page_size));
|
||||
} else if (find_partition_data_by_name("dtbo",
|
||||
avb_out_data, &avb_loadpart)) {
|
||||
goto fail;
|
||||
} else
|
||||
dt_img = (struct dt_table_header *)avb_loadpart->data;
|
||||
#endif
|
||||
struct dt_table_header *dt_img;
|
||||
dt_img = (struct dt_table_header *)avb_loadpart->data;
|
||||
|
||||
if (be32_to_cpu(dt_img->magic) != DT_TABLE_MAGIC) {
|
||||
printf("boota: bad dt table magic %08x\n",
|
||||
be32_to_cpu(dt_img->magic));
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ struct andr_img_hdr {
|
|||
|
||||
u32 tags_addr; /* physical addr for kernel tags */
|
||||
u32 page_size; /* flash page size we assume */
|
||||
u32 unused; /* reserved for future expansion: MUST be 0 */
|
||||
u32 header_version;
|
||||
|
||||
/* operating system version and security patch level; for
|
||||
* version "A.B.C" and patch level "Y-M-D":
|
||||
|
|
@ -65,22 +65,28 @@ struct andr_img_hdr {
|
|||
/* Supplemental command line data; kept here to maintain
|
||||
* binary compatibility with older versions of mkbootimg */
|
||||
char extra_cmdline[ANDR_BOOT_EXTRA_ARGS_SIZE];
|
||||
uint32_t recovery_dtbo_size; /* size of recovery dtbo image */
|
||||
uint64_t recovery_dtbo_offset; /* offset in boot image */
|
||||
uint32_t header_size; /* size of boot image header in bytes */
|
||||
} __attribute__((packed));
|
||||
|
||||
/*
|
||||
* +-----------------+
|
||||
* | boot header | 1 page
|
||||
* +-----------------+
|
||||
* | kernel | n pages
|
||||
* | kernel | i pages
|
||||
* +-----------------+
|
||||
* | ramdisk | m pages
|
||||
* +-----------------+
|
||||
* | second stage | o pages
|
||||
* | second stage | n pages
|
||||
* +-----------------+
|
||||
* | recovery dtbo | o pages
|
||||
* +-----------------+
|
||||
*
|
||||
* n = (kernel_size + page_size - 1) / page_size
|
||||
* i = (kernel_size + page_size - 1) / page_size
|
||||
* m = (ramdisk_size + page_size - 1) / page_size
|
||||
* o = (second_size + page_size - 1) / page_size
|
||||
* n = (second_size + page_size - 1) / page_size
|
||||
* o = (recovery_dtbo_size + page_size - 1) / page_size
|
||||
*
|
||||
* 0. all entities are page_size aligned in flash
|
||||
* 1. kernel and ramdisk are required (size != 0)
|
||||
|
|
|
|||
Loading…
Reference in New Issue