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 <[email protected]> > Cc: Faiz Abbas <[email protected]> > Cc: Harald Seiler <[email protected]> > Cc: Lokesh Vutla <[email protected]> > Cc: Simon Glass <[email protected]> > Cc: Fabio Estevam <[email protected]> > Cc: Peng Fan <[email protected]> > Cc: Stefano Babic <[email protected]> > Cc: Ye Li <[email protected]>
Reviewed-by: Jaehoon Chung <[email protected]> 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); > > /** >

