Hi Marek, On 7/1/21 8:08 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]> > --- > common/spl/spl_mmc.c | 37 ++++++++++++++++++++++++------------- > include/spl.h | 25 +++++++++++++++++++++++++ > 2 files changed, 49 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..b6698a686a7 100644 > --- a/include/spl.h > +++ b/include/spl.h > @@ -357,6 +357,31 @@ 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. > + * @boot_device: ID of the device which the MMC driver wants to load > + * U-Boot from.
Is "@boot_device" right? Argument is mmc. > + * > + * 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. > + * @boot_device: ID of the device which the MMC driver wants to load > + * U-Boot from. Ditto. Best Regards, Jaehoon Chung > + * > + * 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); > > /** >

