spl: mmc: Factor out eMMC boot partition selection code
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> Reviewed-by: Jaehoon Chung <jh80.chung@samsung.com>
This commit is contained in:
parent
d107235a38
commit
9b19159174
2 changed files with 47 additions and 13 deletions
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in a new issue