Pass both eMMC HW partition and software partition numbers to
spl_mmc_get_uboot_raw_sector() so the function can better decide
which offset within the partition to load payload from.

Signed-off-by: Fedor Ross <[email protected]>
Signed-off-by: Marek Vasut <[email protected]>
---
Cc: Jaehoon Chung <[email protected]>
Cc: Peng Fan <[email protected]>
---
 arch/arm/mach-imx/image-container.c |  2 ++
 arch/arm/mach-sunxi/board.c         |  2 ++
 common/spl/spl_mmc.c                | 15 +++++++++------
 3 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/arch/arm/mach-imx/image-container.c 
b/arch/arm/mach-imx/image-container.c
index 0e767864822..4518ea1f479 100644
--- a/arch/arm/mach-imx/image-container.c
+++ b/arch/arm/mach-imx/image-container.c
@@ -215,6 +215,8 @@ unsigned long spl_spi_get_uboot_offs(struct spi_flash 
*flash)
 
 #ifdef CONFIG_SPL_MMC
 unsigned long spl_mmc_get_uboot_raw_sector(struct mmc *mmc,
+                                          unsigned long hw_part,
+                                          unsigned long raw_part,
                                           unsigned long raw_sect)
 {
        int end;
diff --git a/arch/arm/mach-sunxi/board.c b/arch/arm/mach-sunxi/board.c
index 0c4b6dd1ca3..5a79e14535a 100644
--- a/arch/arm/mach-sunxi/board.c
+++ b/arch/arm/mach-sunxi/board.c
@@ -325,6 +325,8 @@ uint32_t sunxi_get_spl_size(void)
  * immediately follow the SPL if that is bigger than that.
  */
 unsigned long spl_mmc_get_uboot_raw_sector(struct mmc *mmc,
+                                          unsigned long hw_part,
+                                          unsigned long raw_part,
                                           unsigned long raw_sect)
 {
        unsigned long spl_size = sunxi_get_spl_size();
diff --git a/common/spl/spl_mmc.c b/common/spl/spl_mmc.c
index e4135b20487..8a0c7331267 100644
--- a/common/spl/spl_mmc.c
+++ b/common/spl/spl_mmc.c
@@ -370,6 +370,8 @@ int __weak spl_mmc_boot_partition(const u32 boot_device)
 #endif
 
 unsigned long __weak spl_mmc_get_uboot_raw_sector(struct mmc *mmc,
+                                                 unsigned long hw_part,
+                                                 unsigned long raw_part,
                                                  unsigned long raw_sect)
 {
        return raw_sect;
@@ -418,7 +420,7 @@ int spl_mmc_load(struct spl_image_info *spl_image,
        static struct mmc *mmc;
        u32 boot_mode;
        int err = 0;
-       __maybe_unused int part = 0;
+       __maybe_unused int hw_part = 0;
        int mmc_dev;
 
        /* Perform peripheral init only once for an mmc device */
@@ -442,12 +444,12 @@ int spl_mmc_load(struct spl_image_info *spl_image,
        err = -EINVAL;
        switch (boot_mode) {
        case MMCSD_MODE_EMMCBOOT:
-               part = spl_mmc_emmc_boot_partition(mmc);
+               hw_part = spl_mmc_emmc_boot_partition(mmc);
 
                if (CONFIG_IS_ENABLED(MMC_TINY))
-                       err = mmc_switch_part(mmc, part);
+                       err = mmc_switch_part(mmc, hw_part);
                else
-                       err = blk_dselect_hwpart(mmc_get_blk_desc(mmc), part);
+                       err = blk_dselect_hwpart(mmc_get_blk_desc(mmc), 
hw_part);
 
                if (err) {
 #ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
@@ -465,7 +467,8 @@ int spl_mmc_load(struct spl_image_info *spl_image,
                                return err;
                }
 
-               raw_sect = spl_mmc_get_uboot_raw_sector(mmc, raw_sect);
+               raw_sect = spl_mmc_get_uboot_raw_sector(mmc, hw_part,
+                                                       raw_part, raw_sect);
 
 #ifdef CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION
                err = mmc_load_image_raw_partition(spl_image, bootdev,
@@ -476,7 +479,7 @@ int spl_mmc_load(struct spl_image_info *spl_image,
 #endif
 #ifdef CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR
                err = mmc_load_image_raw_sector(spl_image, bootdev, mmc,
-                               raw_sect + spl_mmc_raw_uboot_offset(part));
+                               raw_sect + spl_mmc_raw_uboot_offset(hw_part));
                if (!err)
                        return err;
 #endif
-- 
2.39.0

Reply via email to