]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
spl: mmc: extend spl_mmc_boot_mode() to take mmc argument
authorAndre Przywara <andre.przywara@arm.com>
Mon, 12 Jul 2021 10:06:49 +0000 (11:06 +0100)
committerAndre Przywara <andre.przywara@arm.com>
Mon, 4 Apr 2022 22:24:17 +0000 (23:24 +0100)
Platforms can overwrite the weak definition of spl_mmc_boot_mode() to
determine where to load U-Boot proper from.
For most of them this is a trivial decision based on Kconfig variables,
but it might be desirable the probe the actual device to answer this
question.

Pass the pointer to the mmc struct to that function, so implementations
can make use of that.

Compile-tested for all users changed.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Reviewed-by: Stefano Babic <sbabic@denx.de>
Reviewed-by: Ley Foon Tan <ley.foon.tan@inte.com> (for SoCFPGA)
Acked-by: Lokesh Vutla <lokeshvutla@ti.com> (for OMAP and K3)
Reviewed-by: Simon Glass <sjg@chromium.org>
14 files changed:
arch/arm/mach-imx/spl.c
arch/arm/mach-k3/am642_init.c
arch/arm/mach-k3/am6_init.c
arch/arm/mach-k3/j721e_init.c
arch/arm/mach-k3/j721s2_init.c
arch/arm/mach-mvebu/spl.c
arch/arm/mach-omap2/boot-common.c
arch/arm/mach-rockchip/spl.c
arch/arm/mach-socfpga/spl_a10.c
arch/arm/mach-socfpga/spl_gen5.c
arch/arm/mach-stm32mp/spl.c
arch/arm/mach-uniphier/mmc-boot-mode.c
common/spl/spl_mmc.c
include/spl.h

index 2832b7350964bc1b0b4591fafe245779db10f60d..64ca296772127292faf69d86c24536dd351d1a93 100644 (file)
@@ -201,7 +201,7 @@ int g_dnl_get_board_bcd_device_number(int gcnum)
 
 #if defined(CONFIG_SPL_MMC)
 /* called from spl_mmc to see type of boot mode for storage (RAW or FAT) */
-u32 spl_mmc_boot_mode(const u32 boot_device)
+u32 spl_mmc_boot_mode(struct mmc *mmc, const u32 boot_device)
 {
 #if defined(CONFIG_MX7) || defined(CONFIG_IMX8M) || defined(CONFIG_IMX8)
        switch (get_boot_device()) {
index 543dea02bca95d2811607b461515165a493e09a0..eabfd570a6bbbb884dc9cf755c23ae05fc8dbfa5 100644 (file)
@@ -208,7 +208,7 @@ void board_init_f(ulong dummy)
        }
 }
 
-u32 spl_mmc_boot_mode(const u32 boot_device)
+u32 spl_mmc_boot_mode(struct mmc *mmc, const u32 boot_device)
 {
        switch (boot_device) {
        case BOOT_DEVICE_MMC1:
index 8a6b1de76410d604237d45960dbcdee9da4327fd..86c1a349f1fc6d49d78a641a21f43a08bc44ae53 100644 (file)
@@ -269,7 +269,7 @@ void board_init_f(ulong dummy)
        spl_enable_dcache();
 }
 
-u32 spl_mmc_boot_mode(const u32 boot_device)
+u32 spl_mmc_boot_mode(struct mmc *mmc, const u32 boot_device)
 {
 #if defined(CONFIG_SUPPORT_EMMC_BOOT)
        u32 devstat = readl(CTRLMMR_MAIN_DEVSTAT);
index c4b6b180505d5a8e90d6102107cedbbb9b9c278d..f503f15f192ac83b9e1d09d52c2e9c3b3bc843c4 100644 (file)
@@ -291,7 +291,7 @@ void board_init_f(ulong dummy)
        spl_enable_dcache();
 }
 
-u32 spl_mmc_boot_mode(const u32 boot_device)
+u32 spl_mmc_boot_mode(struct mmc *mmc, const u32 boot_device)
 {
        switch (boot_device) {
        case BOOT_DEVICE_MMC1:
index 58a86541b79ff34dee11c4457ddf11ff0d08da7e..2e64e44a80ea68dd25579391651feb5f6c011111 100644 (file)
@@ -173,7 +173,7 @@ void board_init_f(ulong dummy)
        spl_enable_dcache();
 }
 
-u32 spl_mmc_boot_mode(const u32 boot_device)
+u32 spl_mmc_boot_mode(struct mmc *mmc, const u32 boot_device)
 {
        switch (boot_device) {
        case BOOT_DEVICE_MMC1:
index 5ad323f9d9d19d4f20dcfe39c760845a9d93678a..fa9a1d7ab65e1a0ad042e2e726d61dee86b41205 100644 (file)
@@ -96,7 +96,7 @@ struct kwbimage_main_hdr_v1 {
 } __packed;
 
 #ifdef CONFIG_SPL_MMC
-u32 spl_mmc_boot_mode(const u32 boot_device)
+u32 spl_mmc_boot_mode(struct mmc *mmc, const u32 boot_device)
 {
        return MMCSD_MODE_RAW;
 }
index afc358564191d9adfbbcb475135dc33b7587b151..c463c96c74c8e18acd77a2719233b7142114d8be 100644 (file)
@@ -196,7 +196,7 @@ u32 spl_boot_device(void)
        return gd->arch.omap_boot_device;
 }
 
-u32 spl_mmc_boot_mode(const u32 boot_device)
+u32 spl_mmc_boot_mode(struct mmc *mmc, const u32 boot_device)
 {
        return gd->arch.omap_boot_mode;
 }
index 7a8db632b80cdcbf9dccfb521bf571f59a663aa4..d51a0727b472aa7983b547d4c645cf0b0a1a931d 100644 (file)
@@ -66,7 +66,7 @@ u32 spl_boot_device(void)
        return boot_device;
 }
 
-u32 spl_mmc_boot_mode(const u32 boot_device)
+u32 spl_mmc_boot_mode(struct mmc *mmc, const u32 boot_device)
 {
        return MMCSD_MODE_RAW;
 }
index d2f454cd24635424d409cd4f19bba91a365d650c..ec67a5b0eb7902dad2c5a2a33b20c565f1c008cc 100644 (file)
@@ -99,7 +99,7 @@ u32 spl_boot_device(void)
 }
 
 #ifdef CONFIG_SPL_MMC
-u32 spl_mmc_boot_mode(const u32 boot_device)
+u32 spl_mmc_boot_mode(struct mmc *mmc, const u32 boot_device)
 {
 #if defined(CONFIG_SPL_FS_FAT) || defined(CONFIG_SPL_FS_EXT4)
        return MMCSD_MODE_FS;
index 441d893333c7df236b169df1215a9f3f2fb3d4ea..287fbd1713c63e44dd9b3a89e0aa95947afe075a 100644 (file)
@@ -53,7 +53,7 @@ u32 spl_boot_device(void)
 }
 
 #ifdef CONFIG_SPL_MMC
-u32 spl_mmc_boot_mode(const u32 boot_device)
+u32 spl_mmc_boot_mode(struct mmc *mmc, const u32 boot_device)
 {
 #if defined(CONFIG_SPL_FS_FAT) || defined(CONFIG_SPL_FS_EXT4)
        return MMCSD_MODE_FS;
index 51fe0698fabeff1e1d240a5e1509a27d04c09eec..78fa9d7edd29def94471a65ba1bbe401b95734b4 100644 (file)
@@ -55,7 +55,7 @@ u32 spl_boot_device(void)
        return BOOT_DEVICE_MMC1;
 }
 
-u32 spl_mmc_boot_mode(const u32 boot_device)
+u32 spl_mmc_boot_mode(struct mmc *mmc, const u32 boot_device)
 {
        return MMCSD_MODE_RAW;
 }
index e47e5df6480aa56ab8d0f711bcec9ea28c09466a..09cad743c550fe428db31fe960ac1d105f351017 100644 (file)
@@ -7,10 +7,8 @@
 #include <mmc.h>
 #include <spl.h>
 
-u32 spl_mmc_boot_mode(const u32 boot_device)
+u32 spl_mmc_boot_mode(struct mmc *mmc, const u32 boot_device)
 {
-       struct mmc *mmc;
-
        /*
         * work around a bug in the Boot ROM of LD4, Pro4, and sLD8:
         *
@@ -24,7 +22,6 @@ u32 spl_mmc_boot_mode(const u32 boot_device)
         * Fixup mmc->part_config here because it is used to determine the
         * partition which the U-Boot image is read from.
         */
-       mmc = find_mmc_device(0);
        mmc->part_config &= ~EXT_CSD_BOOT_PART_NUM(PART_ACCESS_MASK);
        mmc->part_config |= EXT_CSD_BOOT_PARTITION_ENABLE;
 
index 1c41d24ff45b3101613ae281e15fd3d9a3922bcf..1bb785a80f080d9a1be2b6946fe826c46711dd03 100644 (file)
@@ -327,7 +327,7 @@ static int spl_mmc_do_fs_boot(struct spl_image_info *spl_image,
 }
 #endif
 
-u32 __weak spl_mmc_boot_mode(const u32 boot_device)
+u32 __weak spl_mmc_boot_mode(struct mmc *mmc, const u32 boot_device)
 {
 #if defined(CONFIG_SPL_FS_FAT) || defined(CONFIG_SPL_FS_EXT4)
        return MMCSD_MODE_FS;
@@ -401,7 +401,7 @@ int spl_mmc_load(struct spl_image_info *spl_image,
                }
        }
 
-       boot_mode = spl_mmc_boot_mode(bootdev->boot_device);
+       boot_mode = spl_mmc_boot_mode(mmc, bootdev->boot_device);
        err = -EINVAL;
        switch (boot_mode) {
        case MMCSD_MODE_EMMCBOOT:
index 8ceb3c0f095e4e5f4232f0649317d93e0e82c213..6134aba85717ad0eed613a85fb391004359e95a4 100644 (file)
@@ -14,6 +14,7 @@
 #include <asm/global_data.h>
 #include <asm/spl.h>
 #include <handoff.h>
+#include <mmc.h>
 
 struct blk_desc;
 struct image_header;
@@ -375,7 +376,7 @@ u32 spl_boot_device(void);
  * Note:  It is important to use the boot_device parameter instead of e.g.
  * spl_boot_device() as U-Boot is not always loaded from the same device as SPL.
  */
-u32 spl_mmc_boot_mode(const u32 boot_device);
+u32 spl_mmc_boot_mode(struct mmc *mmc, const u32 boot_device);
 
 /**
  * spl_mmc_boot_partition() - MMC partition to load U-Boot from.