All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ludger Dreier <Ludger.Dreier@keymile.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v2] Revert "env_eeprom: Assign default environment during board_init_f"
Date: Tue, 29 Sep 2015 09:31:32 +0200	[thread overview]
Message-ID: <560A3E54.6000000@keymile.com> (raw)

The crc-check and decision on which environment to use is now moved to
env_relocate_spec. This is done for both the "redundant env" and the
"single env" case.
This also solves problems introduced from the commit "env_eeprom: Assign
default environment during board_init_f"
(ed6a5d4f880ac248530dbf64683b2257dbe54b64) due to the use of
ENV_IS_EMBEDDED.

Signed-off-by: Ludger Dreier <ludger.dreier@keymile.com>
---
Changes for v2:
  -instead of reverting the patch, the disabled, but needed code
   was moved from env_init to env_relocate_spec
---
 common/env_eeprom.c |  166 ++++++++++++++++++++++++---------------------------
 1 files changed, 77 insertions(+), 89 deletions(-)

diff --git a/common/env_eeprom.c b/common/env_eeprom.c
index 905d39a..eea169d 100644
--- a/common/env_eeprom.c
+++ b/common/env_eeprom.c
@@ -82,75 +82,13 @@ uchar env_get_char_spec(int index)
  void env_relocate_spec(void)
 {
-	char buf[CONFIG_ENV_SIZE];
+	char buf_env[CONFIG_ENV_SIZE];
 	unsigned int off = CONFIG_ENV_OFFSET;
  #ifdef CONFIG_ENV_OFFSET_REDUND
-	if (gd->env_valid == 2)
-		off = CONFIG_ENV_OFFSET_REDUND;
-#endif
-	eeprom_bus_read(CONFIG_SYS_DEF_EEPROM_ADDR,
-			off, (uchar *)buf, CONFIG_ENV_SIZE);
-
-	env_import(buf, 1);
-}
-
-int saveenv(void)
-{
-	env_t	env_new;
-	int	rc;
-	unsigned int off	= CONFIG_ENV_OFFSET;
-#ifdef CONFIG_ENV_OFFSET_REDUND
-	unsigned int off_red	= CONFIG_ENV_OFFSET_REDUND;
-	char flag_obsolete	= OBSOLETE_FLAG;
-#endif
-
-	BUG_ON(env_ptr != NULL);
-
-	rc = env_export(&env_new);
-	if (rc)
-		return rc;
-
-#ifdef CONFIG_ENV_OFFSET_REDUND
-	if (gd->env_valid == 1) {
-		off	= CONFIG_ENV_OFFSET_REDUND;
-		off_red	= CONFIG_ENV_OFFSET;
-	}
-
-	env_new.flags = ACTIVE_FLAG;
-#endif
-
-	rc = eeprom_bus_write(CONFIG_SYS_DEF_EEPROM_ADDR,
-			      off, (uchar *)&env_new, CONFIG_ENV_SIZE);
-
-#ifdef CONFIG_ENV_OFFSET_REDUND
-	if (rc == 0) {
-		eeprom_bus_write(CONFIG_SYS_DEF_EEPROM_ADDR,
-				 off_red + offsetof(env_t, flags),
-				 (uchar *)&flag_obsolete, 1);
-
-		if (gd->env_valid == 1)
-			gd->env_valid = 2;
-		else
-			gd->env_valid = 1;
-	}
-#endif
-	return rc;
-}
-
-/*
- * Initialize Environment use
- *
- * We are still running from ROM, so data use is limited.
- * Use a (moderately small) buffer on the stack
- */
-#ifdef CONFIG_ENV_OFFSET_REDUND
-int env_init(void)
-{
-#ifdef ENV_IS_EMBEDDED
 	ulong len, crc[2], crc_tmp;
-	unsigned int off, off_env[2];
-	uchar buf[64], flags[2];
+	unsigned int off_env[2];
+	uchar rdbuf[64], flags[2];
 	int i, crc_ok[2] = {0, 0};
  	eeprom_init();	/* prepare for EEPROM read/write */
@@ -172,12 +110,12 @@ int env_init(void)
 		len = ENV_SIZE;
 		off = off_env[i] + offsetof(env_t, data);
 		while (len > 0) {
-			int n = (len > sizeof(buf)) ? sizeof(buf) : len;
+			int n = (len > sizeof(rdbuf)) ? sizeof(rdbuf) : len;
  			eeprom_bus_read(CONFIG_SYS_DEF_EEPROM_ADDR, off,
-					buf, n);
+					rdbuf, n);
 -			crc_tmp = crc32(crc_tmp, buf, n);
+			crc_tmp = crc32(crc_tmp, rdbuf, n);
 			len -= n;
 			off += n;
 		}
@@ -189,8 +127,6 @@ int env_init(void)
 	if (!crc_ok[0] && !crc_ok[1]) {
 		gd->env_addr	= 0;
 		gd->env_valid	= 0;
-
-		return 0;
 	} else if (crc_ok[0] && !crc_ok[1]) {
 		gd->env_valid = 1;
 	} else if (!crc_ok[0] && crc_ok[1]) {
@@ -213,19 +149,10 @@ int env_init(void)
 		gd->env_addr = off_env[1] + offsetof(env_t, data);
 	else if (gd->env_valid == 1)
 		gd->env_addr = off_env[0] + offsetof(env_t, data);
-#else
-	gd->env_addr = (ulong)&default_environment[0];
-	gd->env_valid = 1;
-#endif
-	return 0;
-}
-#else
-int env_init(void)
-{
-#ifdef ENV_IS_EMBEDDED
+
+#else /* CONFIG_ENV_OFFSET_REDUND */
 	ulong crc, len, new;
-	unsigned off;
-	uchar buf[64];
+	uchar rdbuf[64];
  	eeprom_init();	/* prepare for EEPROM read/write */
 @@ -237,13 +164,12 @@ int env_init(void)
 	new = 0;
 	len = ENV_SIZE;
 	off = offsetof(env_t, data);
-
 	while (len > 0) {
-		int n = (len > sizeof(buf)) ? sizeof(buf) : len;
+		int n = (len > sizeof(rdbuf)) ? sizeof(rdbuf) : len;
  		eeprom_bus_read(CONFIG_SYS_DEF_EEPROM_ADDR,
-				CONFIG_ENV_OFFSET + off, buf, n);
-		new = crc32(new, buf, n);
+				CONFIG_ENV_OFFSET + off, rdbuf, n);
+		new = crc32(new, rdbuf, n);
 		len -= n;
 		off += n;
 	}
@@ -255,10 +181,72 @@ int env_init(void)
 		gd->env_addr	= 0;
 		gd->env_valid	= 0;
 	}
-#else
+#endif /* CONFIG_ENV_OFFSET_REDUND */
+
+	off = CONFIG_ENV_OFFSET;
+#ifdef CONFIG_ENV_OFFSET_REDUND
+	if (gd->env_valid == 2)
+		off = CONFIG_ENV_OFFSET_REDUND;
+#endif
+
+	eeprom_bus_read(CONFIG_SYS_DEF_EEPROM_ADDR,
+		off, (uchar *)buf_env, CONFIG_ENV_SIZE);
+
+	env_import(buf_env, 1);
+}
+
+int saveenv(void)
+{
+	env_t	env_new;
+	int	rc;
+	unsigned int off	= CONFIG_ENV_OFFSET;
+#ifdef CONFIG_ENV_OFFSET_REDUND
+	unsigned int off_red	= CONFIG_ENV_OFFSET_REDUND;
+	char flag_obsolete	= OBSOLETE_FLAG;
+#endif
+
+	BUG_ON(env_ptr != NULL);
+
+	rc = env_export(&env_new);
+	if (rc)
+		return rc;
+
+#ifdef CONFIG_ENV_OFFSET_REDUND
+	if (gd->env_valid == 1) {
+		off	= CONFIG_ENV_OFFSET_REDUND;
+		off_red	= CONFIG_ENV_OFFSET;
+	}
+
+	env_new.flags = ACTIVE_FLAG;
+#endif
+
+	rc = eeprom_bus_write(CONFIG_SYS_DEF_EEPROM_ADDR,
+			      off, (uchar *)&env_new, CONFIG_ENV_SIZE);
+
+#ifdef CONFIG_ENV_OFFSET_REDUND
+	if (rc == 0) {
+		eeprom_bus_write(CONFIG_SYS_DEF_EEPROM_ADDR,
+				 off_red + offsetof(env_t, flags),
+				 (uchar *)&flag_obsolete, 1);
+
+		if (gd->env_valid == 1)
+			gd->env_valid = 2;
+		else
+			gd->env_valid = 1;
+	}
+#endif
+	return rc;
+}
+
+/*
+ * Initialize Environment use
+ *
+ * We are still running from ROM, so data use is limited.
+ * Use a (moderately small) buffer on the stack
+ */
+int env_init(void)
+{
 	gd->env_addr = (ulong)&default_environment[0];
 	gd->env_valid = 1;
-#endif
 	return 0;
 }
-#endif
-- 
1.7.0.5

             reply	other threads:[~2015-09-29  7:31 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-29  7:31 Ludger Dreier [this message]
2015-10-11 12:39 ` [U-Boot] [PATCH v2] Revert "env_eeprom: Assign default environment during board_init_f" Tom Rini
2015-10-12 11:34 ` [U-Boot] [PATCH v3] " Ludger Dreier
2015-10-12 15:18   ` Tom Rini

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=560A3E54.6000000@keymile.com \
    --to=ludger.dreier@keymile.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.