aboutsummaryrefslogtreecommitdiff
path: root/board
diff options
context:
space:
mode:
authorTom Rini <trini@konsulko.com>2022-03-12 07:20:29 -0500
committerTom Rini <trini@konsulko.com>2022-03-12 07:20:29 -0500
commit6d35c24892c9d2f3eb03bee57c77cc9a3560c134 (patch)
tree396170b7e892b0351bba96de513048a9b92c33bb /board
parent589c659035a44a683b087fd75fe0b7667f7be7f5 (diff)
parent228173d8556ee3209c3c8ea6a296b355b28c7e15 (diff)
downloadu-boot-6d35c24892c9d2f3eb03bee57c77cc9a3560c134.zip
u-boot-6d35c24892c9d2f3eb03bee57c77cc9a3560c134.tar.gz
u-boot-6d35c24892c9d2f3eb03bee57c77cc9a3560c134.tar.bz2
Merge branch 'master' of https://source.denx.de/u-boot/custodians/u-boot-spiWIP/12Mar2022
- sunXi SPI fixups (Andre) - bcm iproc qspi (Rayagonda)
Diffstat (limited to 'board')
-rw-r--r--board/sunxi/board.c51
1 files changed, 43 insertions, 8 deletions
diff --git a/board/sunxi/board.c b/board/sunxi/board.c
index 82c52b2..a096159 100644
--- a/board/sunxi/board.c
+++ b/board/sunxi/board.c
@@ -171,21 +171,56 @@ void i2c_init_board(void)
#endif
}
-#if defined(CONFIG_ENV_IS_IN_MMC) && defined(CONFIG_ENV_IS_IN_FAT)
+/*
+ * Try to use the environment from the boot source first.
+ * For MMC, this means a FAT partition on the boot device (SD or eMMC).
+ * If the raw MMC environment is also enabled, this is tried next.
+ * SPI flash falls back to FAT (on SD card).
+ */
enum env_location env_get_location(enum env_operation op, int prio)
{
- switch (prio) {
- case 0:
- return ENVL_FAT;
+ enum env_location boot_loc = ENVL_FAT;
- case 1:
- return ENVL_MMC;
+ gd->env_load_prio = prio;
+ switch (sunxi_get_boot_device()) {
+ case BOOT_DEVICE_MMC1:
+ case BOOT_DEVICE_MMC2:
+ boot_loc = ENVL_FAT;
+ break;
+ case BOOT_DEVICE_NAND:
+ if (IS_ENABLED(CONFIG_ENV_IS_IN_NAND))
+ boot_loc = ENVL_NAND;
+ break;
+ case BOOT_DEVICE_SPI:
+ if (IS_ENABLED(CONFIG_ENV_IS_IN_SPI_FLASH))
+ boot_loc = ENVL_SPI_FLASH;
+ break;
+ case BOOT_DEVICE_BOARD:
+ break;
default:
- return ENVL_UNKNOWN;
+ break;
+ }
+
+ /* Always try to access the environment on the boot device first. */
+ if (prio == 0)
+ return boot_loc;
+
+ if (prio == 1) {
+ switch (boot_loc) {
+ case ENVL_SPI_FLASH:
+ return ENVL_FAT;
+ case ENVL_FAT:
+ if (IS_ENABLED(CONFIG_ENV_IS_IN_MMC))
+ return ENVL_MMC;
+ break;
+ default:
+ break;
+ }
}
+
+ return ENVL_UNKNOWN;
}
-#endif
#ifdef CONFIG_DM_MMC
static void mmc_pinmux_setup(int sdc);