public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Andre Przywara <andre.przywara@arm.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 5/5] sunxi: use boot source for determining environment location
Date: Sat,  8 Jun 2019 02:26:58 +0100	[thread overview]
Message-ID: <20190608012658.5369-6-andre.przywara@arm.com> (raw)
In-Reply-To: <20190608012658.5369-1-andre.przywara@arm.com>

Currently we only support to load the environment from raw MMC or FAT
locations on Allwinner boards. With the advent of SPI flash we probably
also want to support using the environment there, so we need to become
a bit more flexible.

Change the environment priority function to take the boot source into
account. When booted from eMMC or SD card, we use FAT or MMC, if
configured, as before.
If we are booted from SPI flash, we try to use the environment from
there, if possible. The same is true for NAND flash booting, although
this is somewhat theoretical right now (as untested).

This way we can use the same image for SD and SPI flash booting, which
allows us to simply copy a booted image from SD card to the SPI flash,
for instance.

Signed-off-by: Andre Przywara <andre.przywara@arm.com>
---
 board/sunxi/board.c | 39 +++++++++++++++++++++++++++++++--------
 1 file changed, 31 insertions(+), 8 deletions(-)

diff --git a/board/sunxi/board.c b/board/sunxi/board.c
index 5802b079b6..b95a1a0feb 100644
--- a/board/sunxi/board.c
+++ b/board/sunxi/board.c
@@ -192,21 +192,44 @@ void i2c_init_board(void)
 #endif
 }
 
-#if defined(CONFIG_ENV_IS_IN_MMC) && defined(CONFIG_ENV_IS_IN_FAT)
 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_UNKNOWN;
 
-	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:
+#ifdef CONFIG_ENV_IS_IN_NAND
+		boot_loc = ENVL_NAND;
+#endif
+		break;
+	case BOOT_DEVICE_SPI:
+#ifdef CONFIG_ENV_IS_IN_SPI_FLASH
+		boot_loc = ENVL_SPI_FLASH;
+#endif
+		break;
+	case BOOT_DEVICE_BOARD:
+		boot_loc = ENVL_FAT;	/* dummy to prevent crash */
+		break;
 	default:
-		return ENVL_UNKNOWN;
+		break;
 	}
-}
+
+	/* Always try to access the environment on the boot device first. */
+	if (prio == 0)
+		return boot_loc;
+
+#ifdef CONFIG_ENV_IS_IN_MMC
+	if (prio == 1 && boot_loc == ENVL_FAT)
+		return ENVL_MMC;
 #endif
+	return ENVL_UNKNOWN;
+}
 
 /* Determine whether to use the environment from SD card or eMMC. */
 int mmc_get_env_dev(void)
-- 
2.14.5

  parent reply	other threads:[~2019-06-08  1:26 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-06-08  1:26 [U-Boot] [PATCH 0/5] sunxi: env: Load environment from boot media Andre Przywara
2019-06-08  1:26 ` [U-Boot] [PATCH 1/5] env: allow undefined CONFIG_SYS_MMC_ENV_DEV Andre Przywara
2019-06-08 13:13   ` Tom Rini
2019-06-10  9:35     ` Andre Przywara
2019-06-10 21:53       ` Tom Rini
2019-06-08  1:26 ` [U-Boot] [PATCH 2/5] sunxi: autodetect SD/eMMC device for environment Andre Przywara
2019-06-08  1:26 ` [U-Boot] [PATCH 3/5] env: allow runtime determination of FAT environment partition Andre Przywara
2019-06-08 13:13   ` Tom Rini
2019-06-08  1:26 ` [U-Boot] [PATCH 4/5] sunxi: use FAT environment from boot source Andre Przywara
2019-06-08  1:26 ` Andre Przywara [this message]
2019-06-10  8:30 ` [U-Boot] [PATCH 0/5] sunxi: env: Load environment from boot media Maxime Ripard
2019-06-10  9:11   ` Andre Przywara
2019-06-11  9:37     ` Maxime Ripard
2019-06-11 14:28       ` Tom Rini
2019-06-11 14:53         ` Maxime Ripard
2019-06-11 15:20           ` Tom Rini
2019-06-11 15:34           ` Andre Przywara
2019-06-11 16:10             ` Tom Rini
2019-06-12 13:08             ` Maxime Ripard

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190608012658.5369-6-andre.przywara@arm.com \
    --to=andre.przywara@arm.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox