]> git.sur5r.net Git - u-boot/blobdiff - arch/arm/mach-sunxi/board.c
Merge branch 'master' of git://git.denx.de/u-boot-tegra
[u-boot] / arch / arm / mach-sunxi / board.c
index 01bfc93cbb8fb95ac099b4ffee711e675dc7b679..7713813a68a8e6ee99beafaff1ce358973b197b3 100644 (file)
@@ -133,13 +133,17 @@ static int gpio_init(void)
        return 0;
 }
 
-int spl_board_load_image(void)
+#ifdef CONFIG_SPL_BUILD
+static int spl_board_load_image(struct spl_image_info *spl_image,
+                               struct spl_boot_device *bootdev)
 {
        debug("Returning to FEL sp=%x, lr=%x\n", fel_stash.sp, fel_stash.lr);
        return_to_fel(fel_stash.sp, fel_stash.lr);
 
        return 0;
 }
+SPL_LOAD_IMAGE_METHOD(0, BOOT_DEVICE_BOARD, spl_board_load_image);
+#endif
 
 void s_init(void)
 {
@@ -205,7 +209,8 @@ DECLARE_GLOBAL_DATA_PTR;
  */
 u32 spl_boot_device(void)
 {
-       __maybe_unused struct mmc *mmc0, *mmc1;
+       int boot_source;
+
        /*
         * When booting from the SD card or NAND memory, the "eGON.BT0"
         * signature is expected to be found in memory at the address 0x0004
@@ -225,27 +230,19 @@ u32 spl_boot_device(void)
        if (!is_boot0_magic(SPL_ADDR + 4)) /* eGON.BT0 */
                return BOOT_DEVICE_BOARD;
 
-       /* The BROM will try to boot from mmc0 first, so try that first. */
-#ifdef CONFIG_MMC
-       mmc_initialize(gd->bd);
-       mmc0 = find_mmc_device(0);
-       if (sunxi_mmc_has_egon_boot_signature(mmc0))
+       boot_source = readb(SPL_ADDR + 0x28);
+       switch (boot_source) {
+       case SUNXI_BOOTED_FROM_MMC0:
                return BOOT_DEVICE_MMC1;
-#endif
-
-       /* Fallback to booting NAND if enabled. */
-       if (IS_ENABLED(CONFIG_SPL_NAND_SUPPORT))
+       case SUNXI_BOOTED_FROM_NAND:
                return BOOT_DEVICE_NAND;
-
-#ifdef CONFIG_MMC
-       if (CONFIG_MMC_SUNXI_SLOT_EXTRA == 2) {
-               mmc1 = find_mmc_device(1);
-               if (sunxi_mmc_has_egon_boot_signature(mmc1))
-                       return BOOT_DEVICE_MMC2;
+       case SUNXI_BOOTED_FROM_MMC2:
+               return BOOT_DEVICE_MMC2;
+       case SUNXI_BOOTED_FROM_SPI:
+               return BOOT_DEVICE_SPI;
        }
-#endif
 
-       panic("Could not determine boot source\n");
+       panic("Unknown boot source %d\n", boot_source);
        return -1;              /* Never reached */
 }