
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 marex@denx.de Cc: Faiz Abbas faiz_abbas@ti.com Cc: Harald Seiler hws@denx.de Cc: Lokesh Vutla lokeshvutla@ti.com Cc: Simon Glass sjg@chromium.org Cc: Fabio Estevam festevam@gmail.com Cc: Peng Fan peng.fan@nxp.com Cc: Stefano Babic sbabic@denx.de Cc: Ye Li ye.li@nxp.com
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);
/**