[U-Boot] [PATCH] imx: imx8: fix loading container image from eMMC boot partitions

Peng Fan
2019-10-22T02:43:31Z

Hi Anatolij,

> -----Original Message-----
> From: Anatolij Gustschin <agust@denx.de>
> Sent: 2019年10月21日 23:22
> To: u-boot at lists.denx.de
> Cc: sbabic at denx.de; festevam at gmail.com; dl-uboot-imx
> <uboot-imx@nxp.com>; Ye Li <ye.li@nxp.com>
> Subject: [PATCH] imx: imx8: fix loading container image from eMMC boot
> partitions
>
> Booting with images in eMMC hardware boot partition doesn't work because
> the container header is loaded from user partition, thus the loaded data
> doesn't have a valid header. Add partition switching to support booting from
> eMMC boot partitions.

get_boot_device_offset already switched partition, there is no need to add
partition switch logic in get_container_size.

Regards,
Peng.

>
> Signed-off-by: Anatolij Gustschin <agust@denx.de>
> ---
> arch/arm/mach-imx/imx8/image.c | 15 ++++++++++++++-
> 1 file changed, 14 insertions(+), 1 deletion(-)
>
> diff --git a/arch/arm/mach-imx/imx8/image.c
> b/arch/arm/mach-imx/imx8/image.c index 58a29e8..b0e9494 100644
> --- a/arch/arm/mach-imx/imx8/image.c
> +++ b/arch/arm/mach-imx/imx8/image.c
> @@ -72,7 +72,20 @@ static int get_container_size(void *dev, int dev_type,
> unsigned long offset)
> if (dev_type == MMC_DEV) {
> unsigned long count = 0;
> struct mmc *mmc = (struct mmc *)dev;
> -
> + u8 part;
> +
> + part = EXT_CSD_EXTRACT_BOOT_PART(mmc->part_config);
> + if (part == 7)
> + part = 0;
> + if (part == 1 || part == 2) {
> + if (CONFIG_IS_ENABLED(MMC_TINY))
> + ret = mmc_switch_part(mmc, part);
> + else
> + ret = blk_dselect_hwpart(mmc_get_blk_desc(mmc),
> + part);
> + if (ret)
> + return ret;
> + }
> count = blk_dread(mmc_get_blk_desc(mmc),
> offset / mmc->read_bl_len,
> CONTAINER_HDR_ALIGNMENT / mmc->read_bl_len,
> --
> 2.7.4