[U-Boot] [RFC, PATCH v4 04/16] env: flash: add U-Boot environment context support

AKASHI Takahiro takahiro.akashi at linaro.org
Wed Jul 17 08:25:13 UTC 2019


This patch shows how environment storage drivers should be modified
at the minimum to support contexts.

Signed-off-by: AKASHI Takahiro <takahiro.akashi at linaro.org>
---
 env/flash.c | 28 ++++++++++++++++------------
 1 file changed, 16 insertions(+), 12 deletions(-)

diff --git a/env/flash.c b/env/flash.c
index dca6567a097d..e1afd8358f30 100644
--- a/env/flash.c
+++ b/env/flash.c
@@ -47,13 +47,13 @@ DECLARE_GLOBAL_DATA_PTR;
 #if defined(CONFIG_ENV_ADDR_REDUND) && defined(CMD_SAVEENV) || \
 	!defined(CONFIG_ENV_ADDR_REDUND) && defined(INITENV)
 #ifdef ENV_IS_EMBEDDED
-static env_t *env_ptr = &environment;
+static env_hdr_t *env_ptr = &environment;
 #else /* ! ENV_IS_EMBEDDED */
 
-static env_t *env_ptr = (env_t *)CONFIG_ENV_ADDR;
+static env_hdr_t *env_ptr = (env_hdr_t *)CONFIG_ENV_ADDR;
 #endif /* ENV_IS_EMBEDDED */
 #endif
-static __maybe_unused env_t *flash_addr = (env_t *)CONFIG_ENV_ADDR;
+static __maybe_unused env_hdr_t *flash_addr = (env_hdr_t *)CONFIG_ENV_ADDR;
 
 /* CONFIG_ENV_ADDR is supposed to be on sector boundary */
 static ulong __maybe_unused end_addr =
@@ -61,7 +61,8 @@ static ulong __maybe_unused end_addr =
 
 #ifdef CONFIG_ENV_ADDR_REDUND
 
-static env_t __maybe_unused *flash_addr_new = (env_t *)CONFIG_ENV_ADDR_REDUND;
+static env_hdr_t __maybe_unused *flash_addr_new =
+		(env_hdr_t *)CONFIG_ENV_ADDR_REDUND;
 
 /* CONFIG_ENV_ADDR_REDUND is supposed to be on sector boundary */
 static ulong __maybe_unused end_addr_new =
@@ -81,9 +82,10 @@ static int env_flash_init(void)
 	ulong addr1 = (ulong)&(flash_addr->data);
 	ulong addr2 = (ulong)&(flash_addr_new->data);
 
-	crc1_ok = crc32(0, flash_addr->data, ENV_SIZE) == flash_addr->crc;
-	crc2_ok =
-		crc32(0, flash_addr_new->data, ENV_SIZE) == flash_addr_new->crc;
+	crc1_ok = crc32(0, flash_addr->data, flash_addr->data_size)
+			== flash_addr->crc;
+	crc2_ok = crc32(0, flash_addr_new->data, flash_addr->data_size)
+			== flash_addr_new->crc;
 
 	if (crc1_ok && !crc2_ok) {
 		gd->env_addr	= addr1;
@@ -118,7 +120,7 @@ static int env_flash_init(void)
 #ifdef CMD_SAVEENV
 static int env_flash_save(void)
 {
-	env_t	env_new;
+	env_hdr_t	env_new;
 	char	*saved_data = NULL;
 	char	flag = OBSOLETE_FLAG, new_flag = ACTIVE_FLAG;
 	int	rc = 1;
@@ -193,7 +195,7 @@ static int env_flash_save(void)
 	puts("done\n");
 
 	{
-		env_t *etmp = flash_addr;
+		env_hdr_t *etmp = flash_addr;
 		ulong ltmp = end_addr;
 
 		flash_addr = flash_addr_new;
@@ -223,7 +225,7 @@ done:
 #ifdef INITENV
 static int env_flash_init(void)
 {
-	if (crc32(0, env_ptr->data, ENV_SIZE) == env_ptr->crc) {
+	if (crc32(0, env_ptr->data, env_ptr->data_size) == env_ptr->crc) {
 		gd->env_addr	= (ulong)&(env_ptr->data);
 		gd->env_valid	= ENV_VALID;
 		return 0;
@@ -267,6 +269,7 @@ static int env_flash_save(void)
 	if (flash_sect_protect(0, (long)flash_addr, end_addr))
 		goto done;
 
+	env_new.data_size = ENV_SIZE;
 	rc = env_export(&env_new);
 	if (rc)
 		goto done;
@@ -311,7 +314,7 @@ static int env_flash_load(void)
 {
 #ifdef CONFIG_ENV_ADDR_REDUND
 	if (gd->env_addr != (ulong)&(flash_addr->data)) {
-		env_t *etmp = flash_addr;
+		env_hdr_t *etmp = flash_addr;
 		ulong ltmp = end_addr;
 
 		flash_addr = flash_addr_new;
@@ -322,7 +325,8 @@ static int env_flash_load(void)
 	}
 
 	if (flash_addr_new->flags != OBSOLETE_FLAG &&
-	    crc32(0, flash_addr_new->data, ENV_SIZE) == flash_addr_new->crc) {
+	    crc32(0, flash_addr_new->data, flash_addr_new->data_size)
+				== flash_addr_new->crc) {
 		char flag = OBSOLETE_FLAG;
 
 		gd->env_valid = ENV_REDUND;
-- 
2.21.0



More information about the U-Boot mailing list