[PATCH V2 1/2] spl: mmc: Factor out eMMC boot partition selection code

Jaehoon Chung jh80.chung at samsung.com
Mon Jul 5 09:44:17 CEST 2021


On 7/3/21 11:55 AM, Marek Vasut wrote:
> Factor out eMMC boot partition selection code into
> default_spl_mmc_emmc_boot_partition() function and implement
> weak spl_mmc_emmc_boot_partition(), so that architecture or
> board code can override the eMMC boot partition selection.
> 
> Signed-off-by: Marek Vasut <marex at denx.de>
> Cc: Faiz Abbas <faiz_abbas at ti.com>
> Cc: Harald Seiler <hws at denx.de>
> Cc: Lokesh Vutla <lokeshvutla at ti.com>
> Cc: Simon Glass <sjg at chromium.org>
> Cc: Fabio Estevam <festevam at gmail.com>
> Cc: Peng Fan <peng.fan at nxp.com>
> Cc: Stefano Babic <sbabic at denx.de>
> Cc: Ye Li <ye.li at nxp.com>

Reviewed-by: Jaehoon Chung <jh80.chung at samsung.com>

Best Regards,
Jaehoon Chung


> ---
> V2: Update comments
> ---
>  common/spl/spl_mmc.c | 37 ++++++++++++++++++++++++-------------
>  include/spl.h        | 23 +++++++++++++++++++++++
>  2 files changed, 47 insertions(+), 13 deletions(-)
> 
> diff --git a/common/spl/spl_mmc.c b/common/spl/spl_mmc.c
> index add2785b4e3..2377d0937d1 100644
> --- a/common/spl/spl_mmc.c
> +++ b/common/spl/spl_mmc.c
> @@ -324,6 +324,29 @@ unsigned long __weak spl_mmc_get_uboot_raw_sector(struct mmc *mmc,
>  	return raw_sect;
>  }
>  
> +int default_spl_mmc_emmc_boot_partition(struct mmc *mmc)
> +{
> +	int part;
> +#ifdef CONFIG_SYS_MMCSD_RAW_MODE_EMMC_BOOT_PARTITION
> +	part = CONFIG_SYS_MMCSD_RAW_MODE_EMMC_BOOT_PARTITION;
> +#else
> +	/*
> +	 * We need to check what the partition is configured to.
> +	 * 1 and 2 match up to boot0 / boot1 and 7 is user data
> +	 * which is the first physical partition (0).
> +	 */
> +	part = (mmc->part_config >> 3) & PART_ACCESS_MASK;
> +	if (part == 7)
> +		part = 0;
> +#endif
> +	return part;
> +}
> +
> +int __weak spl_mmc_emmc_boot_partition(struct mmc *mmc)
> +{
> +	return default_spl_mmc_emmc_boot_partition(mmc);
> +}
> +
>  int spl_mmc_load(struct spl_image_info *spl_image,
>  		 struct spl_boot_device *bootdev,
>  		 const char *filename,
> @@ -355,19 +378,7 @@ int spl_mmc_load(struct spl_image_info *spl_image,
>  	err = -EINVAL;
>  	switch (boot_mode) {
>  	case MMCSD_MODE_EMMCBOOT:
> -#ifdef CONFIG_SYS_MMCSD_RAW_MODE_EMMC_BOOT_PARTITION
> -		part = CONFIG_SYS_MMCSD_RAW_MODE_EMMC_BOOT_PARTITION;
> -#else
> -		/*
> -		 * We need to check what the partition is configured to.
> -		 * 1 and 2 match up to boot0 / boot1 and 7 is user data
> -		 * which is the first physical partition (0).
> -		 */
> -		part = (mmc->part_config >> 3) & PART_ACCESS_MASK;
> -
> -		if (part == 7)
> -			part = 0;
> -#endif
> +		part = spl_mmc_emmc_boot_partition(mmc);
>  
>  		if (CONFIG_IS_ENABLED(MMC_TINY))
>  			err = mmc_switch_part(mmc, part);
> diff --git a/include/spl.h b/include/spl.h
> index cee9a42ddb5..c643943482d 100644
> --- a/include/spl.h
> +++ b/include/spl.h
> @@ -357,6 +357,29 @@ u32 spl_mmc_boot_mode(const u32 boot_device);
>   * If not overridden, it is weakly defined in common/spl/spl_mmc.c.
>   */
>  int spl_mmc_boot_partition(const u32 boot_device);
> +
> +struct mmc;
> +/**
> + * default_spl_mmc_emmc_boot_partition() - eMMC boot partition to load U-Boot from.
> + * mmc:			Pointer for the mmc device structure
> + *
> + * This function should return the eMMC boot partition number which
> + * the SPL should load U-Boot from (on the given boot_device).
> + */
> +int default_spl_mmc_emmc_boot_partition(struct mmc *mmc);
> +
> +/**
> + * spl_mmc_emmc_boot_partition() - eMMC boot partition to load U-Boot from.
> + * mmc:			Pointer for the mmc device structure
> + *
> + * This function should return the eMMC boot partition number which
> + * the SPL should load U-Boot from (on the given boot_device).
> + *
> + * If not overridden, it is weakly defined in common/spl/spl_mmc.c
> + * and calls default_spl_mmc_emmc_boot_partition();
> + */
> +int spl_mmc_emmc_boot_partition(struct mmc *mmc);
> +
>  void spl_set_bd(void);
>  
>  /**
> 



More information about the U-Boot mailing list