Setting fat device, partition using CONFIG_ENV_FAT_DEVICE_AND_PART
via Kconfig option is difficult to maintain since Allwinner
support more than one mmc controllers with SD and eMMC.

So, add dynamic function to get the device based on the
boot device source with 'auto' partition.

Signed-off-by: Jagan Teki <ja...@amarulasolutions.com>
---
 arch/arm/mach-sunxi/board.c | 50 +++++++++++++++++++++++++++++++++++++
 1 file changed, 50 insertions(+)

diff --git a/arch/arm/mach-sunxi/board.c b/arch/arm/mach-sunxi/board.c
index d22a84ea6b..cf174bd0a3 100644
--- a/arch/arm/mach-sunxi/board.c
+++ b/arch/arm/mach-sunxi/board.c
@@ -10,6 +10,7 @@
  */
 
 #include <common.h>
+#include <fat.h>
 #include <mmc.h>
 #include <i2c.h>
 #include <serial.h>
@@ -253,6 +254,55 @@ uint32_t sunxi_get_boot_device(void)
        return -1;              /* Never reached */
 }
 
+#if CONFIG_IS_ENABLED(ENV_IS_IN_FAT)
+static int find_first_sd_device(void)
+{
+       struct mmc *mmc;
+       int i;
+
+       for (i = 0; (mmc = find_mmc_device(i)); i++) {
+               if (!mmc_init(mmc) && IS_SD(mmc))
+                       return i;
+       }
+
+       return -ENODEV;
+}
+
+static int find_first_mmc_device(void)
+{
+       struct mmc *mmc;
+       int i;
+
+       for (i = 0; (mmc = find_mmc_device(i)); i++) {
+               if (!mmc_init(mmc) && IS_MMC(mmc))
+                       return i;
+       }
+
+       return -ENODEV;
+}
+
+char *get_env_fat_dev_part(void)
+{
+       int devno, boot_source;
+       static char dev_part[10];
+
+       boot_source = readb(SPL_ADDR + 0x28);
+       switch (boot_source) {
+       case SUNXI_BOOTED_FROM_MMC0:
+               devno = find_first_sd_device();
+               break;
+       case SUNXI_BOOTED_FROM_MMC2:
+               devno = find_first_mmc_device();
+               break;
+       default:
+               return CONFIG_ENV_FAT_DEVICE_AND_PART;
+        }
+
+       snprintf(dev_part, sizeof(dev_part), "%d:auto", devno);
+       return dev_part;
+}
+#endif
+
 #ifdef CONFIG_SPL_BUILD
 u32 spl_boot_device(void)
 {
-- 
2.18.0.321.gffc6fa0e3

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to