* [RESEND PATCH 00/10] env: ext4: add test for env in ext4
@ 2020-02-12 18:44 Patrick Delaunay
2020-02-12 18:44 ` [RESEND PATCH 01/10] env: add absolute path at CONFIG_ENV_EXT4_FILE Patrick Delaunay
` (9 more replies)
0 siblings, 10 replies; 16+ messages in thread
From: Patrick Delaunay @ 2020-02-12 18:44 UTC (permalink / raw)
To: u-boot
Hi,
[RESEND] with correct serie title (sorry)
In this serie, I add sandbox test with CONFIG_ENV_IS_NOWHERE
activated with other location: at least one CONFIG_ENV_IS_IN_...
is defined and ENV_IS_IN_DEVICE is automatically defined.
To test this feature, I activate and test ENV_IS_IN_EXT4
in sandbox; I add a new command "env_loc" to change this
ENV location.
This serie depends on previous env test introduced in:
"cmd: env: add option for quiet output on env info"
http://patchwork.ozlabs.org/project/uboot/list/?series=158105
To be able to test invalid file (bad CRC), I also add the support of
the command "env erase" for EXT4 env location.
Regards
Patrick
Patrick Delaunay (10):
env: add absolute path at CONFIG_ENV_EXT4_FILE
env: ext4: set gd->env_valid
env: correctly handle result in env_init
sandbox: activate env in ext4 support
sandbox: support the change of env location
test: environment in ext4
env: ext4: fix possible compilation issue
env: ext4: introduce new function env_ext4_save_buffer
env: ext4: add support of command env erase
test: sandbox: add test for erase command
board/sandbox/sandbox.c | 50 ++++++++++++++
configs/sandbox64_defconfig | 5 ++
configs/sandbox_defconfig | 5 ++
configs/sandbox_flattree_defconfig | 5 ++
configs/sandbox_spl_defconfig | 5 ++
env/Kconfig | 2 +-
env/env.c | 5 +-
env/ext4.c | 63 +++++++++++++++---
test/py/tests/test_env.py | 103 +++++++++++++++++++++++++++++
9 files changed, 232 insertions(+), 11 deletions(-)
--
2.17.1
^ permalink raw reply [flat|nested] 16+ messages in thread
* [RESEND PATCH 01/10] env: add absolute path at CONFIG_ENV_EXT4_FILE
2020-02-12 18:44 [RESEND PATCH 00/10] env: ext4: add test for env in ext4 Patrick Delaunay
@ 2020-02-12 18:44 ` Patrick Delaunay
2020-02-12 18:44 ` [RESEND PATCH 02/10] env: ext4: set gd->env_valid Patrick Delaunay
` (8 subsequent siblings)
9 siblings, 0 replies; 16+ messages in thread
From: Patrick Delaunay @ 2020-02-12 18:44 UTC (permalink / raw)
To: u-boot
Add the absolute path to the default value of
CONFIG_ENV_EXT4_FILE = "/uboot.env".
This patch avoid the error :
Saving Environment to EXT4... File System is consistent
Please supply Absolute path
Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
---
For information, it is the value used today by all the boards:
dragonboard820c_defconfig:29:CONFIG_ENV_EXT4_FILE="/uboot.env"
hikey960_defconfig:25:CONFIG_ENV_EXT4_FILE="/uboot.env"
stm32mp15_basic_defconfig:64:CONFIG_ENV_EXT4_FILE="/uboot.env"
stm32mp15_optee_defconfig:51:CONFIG_ENV_EXT4_FILE="/uboot.env"
stm32mp15_trusted_defconfig:50:CONFIG_ENV_EXT4_FILE="/uboot.env"
env/Kconfig | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/env/Kconfig b/env/Kconfig
index 0d6f559b39..8059749701 100644
--- a/env/Kconfig
+++ b/env/Kconfig
@@ -467,7 +467,7 @@ config ENV_EXT4_DEVICE_AND_PART
config ENV_EXT4_FILE
string "Name of the EXT4 file to use for the environment"
depends on ENV_IS_IN_EXT4
- default "uboot.env"
+ default "/uboot.env"
help
It's a string of the EXT4 file name. This file use to store the
environment (explicit path to the file)
--
2.17.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [RESEND PATCH 02/10] env: ext4: set gd->env_valid
2020-02-12 18:44 [RESEND PATCH 00/10] env: ext4: add test for env in ext4 Patrick Delaunay
2020-02-12 18:44 ` [RESEND PATCH 01/10] env: add absolute path at CONFIG_ENV_EXT4_FILE Patrick Delaunay
@ 2020-02-12 18:44 ` Patrick Delaunay
2020-02-12 18:44 ` [RESEND PATCH 03/10] env: correctly handle result in env_init Patrick Delaunay
` (7 subsequent siblings)
9 siblings, 0 replies; 16+ messages in thread
From: Patrick Delaunay @ 2020-02-12 18:44 UTC (permalink / raw)
To: u-boot
Add a missing initialization of gd->env_valid in env_ext4_load
as it is already done in some other env device.
Set gd->env_valid = ENV_VALID in env_ext4_save() and env_ext4_load().
This patch allows to have a correct information in 'env info' command.
Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
---
env/ext4.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/env/ext4.c b/env/ext4.c
index 1f6b1b5bd8..e3bbf4a4e0 100644
--- a/env/ext4.c
+++ b/env/ext4.c
@@ -31,6 +31,8 @@
#include <ext4fs.h>
#include <mmc.h>
+DECLARE_GLOBAL_DATA_PTR;
+
__weak const char *env_ext4_get_intf(void)
{
return (const char *)CONFIG_ENV_EXT4_INTERFACE;
@@ -79,6 +81,7 @@ static int env_ext4_save(void)
CONFIG_ENV_EXT4_FILE, ifname, dev, part);
return 1;
}
+ gd->env_valid = ENV_VALID;
puts("done\n");
return 0;
@@ -125,7 +128,11 @@ static int env_ext4_load(void)
goto err_env_relocate;
}
- return env_import(buf, 1);
+ err = env_import(buf, 1);
+ if (!err)
+ gd->env_valid = ENV_VALID;
+
+ return err;
err_env_relocate:
env_set_default(NULL, 0);
--
2.17.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [RESEND PATCH 03/10] env: correctly handle result in env_init
2020-02-12 18:44 [RESEND PATCH 00/10] env: ext4: add test for env in ext4 Patrick Delaunay
2020-02-12 18:44 ` [RESEND PATCH 01/10] env: add absolute path at CONFIG_ENV_EXT4_FILE Patrick Delaunay
2020-02-12 18:44 ` [RESEND PATCH 02/10] env: ext4: set gd->env_valid Patrick Delaunay
@ 2020-02-12 18:44 ` Patrick Delaunay
2020-02-12 18:44 ` [RESEND PATCH 04/10] sandbox: activate env in ext4 support Patrick Delaunay
` (6 subsequent siblings)
9 siblings, 0 replies; 16+ messages in thread
From: Patrick Delaunay @ 2020-02-12 18:44 UTC (permalink / raw)
To: u-boot
Don't return error with ret=-ENOENT when the optional ops drv->init
is absent but only if env_driver_lookup don't found driver.
This patch correct an issue for the code
if (!env_init())
env_load()
When only ext4 is supported (CONFIG_ENV_IS_IN_EXT4),
as the backend env/ext4.c doesn't define an ops .init
Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
---
env/env.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/env/env.c b/env/env.c
index 9237bb9c74..e4df1715e4 100644
--- a/env/env.c
+++ b/env/env.c
@@ -292,7 +292,10 @@ int env_init(void)
int prio;
for (prio = 0; (drv = env_driver_lookup(ENVOP_INIT, prio)); prio++) {
- if (!drv->init || !(ret = drv->init()))
+ ret = 0;
+ if (drv->init)
+ ret = drv->init();
+ if (!ret)
env_set_inited(drv->location);
debug("%s: Environment %s init done (ret=%d)\n", __func__,
--
2.17.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [RESEND PATCH 04/10] sandbox: activate env in ext4 support
2020-02-12 18:44 [RESEND PATCH 00/10] env: ext4: add test for env in ext4 Patrick Delaunay
` (2 preceding siblings ...)
2020-02-12 18:44 ` [RESEND PATCH 03/10] env: correctly handle result in env_init Patrick Delaunay
@ 2020-02-12 18:44 ` Patrick Delaunay
2020-02-16 19:02 ` Simon Glass
2020-02-12 18:44 ` [RESEND PATCH 05/10] sandbox: support the change of env location Patrick Delaunay
` (5 subsequent siblings)
9 siblings, 1 reply; 16+ messages in thread
From: Patrick Delaunay @ 2020-02-12 18:44 UTC (permalink / raw)
To: u-boot
The default environment is still used with "ENVL_NOWHERE"
indicated by the weak function env_get_location() and
activated by CONFIG_ENV_IS_NOWHERE.
Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
---
board/sandbox/sandbox.c | 12 ++++++++++++
configs/sandbox64_defconfig | 4 ++++
configs/sandbox_defconfig | 4 ++++
configs/sandbox_flattree_defconfig | 4 ++++
configs/sandbox_spl_defconfig | 4 ++++
5 files changed, 28 insertions(+)
diff --git a/board/sandbox/sandbox.c b/board/sandbox/sandbox.c
index 0c3d245dff..01f356be31 100644
--- a/board/sandbox/sandbox.c
+++ b/board/sandbox/sandbox.c
@@ -7,6 +7,7 @@
#include <cpu_func.h>
#include <cros_ec.h>
#include <dm.h>
+#include <env_internal.h>
#include <init.h>
#include <led.h>
#include <os.h>
@@ -44,6 +45,17 @@ unsigned long timer_read_counter(void)
}
#endif
+enum env_location env_get_location(enum env_operation op, int prio)
+{
+ /* only one location supported */
+ if (prio != 0)
+ return ENVL_UNKNOWN;
+
+ gd->env_load_prio = 0;
+
+ return ENVL_NOWHERE;
+}
+
int dram_init(void)
{
gd->ram_size = CONFIG_SYS_SDRAM_SIZE;
diff --git a/configs/sandbox64_defconfig b/configs/sandbox64_defconfig
index cdcb0acbdc..6172259924 100644
--- a/configs/sandbox64_defconfig
+++ b/configs/sandbox64_defconfig
@@ -75,6 +75,10 @@ CONFIG_OF_CONTROL=y
CONFIG_OF_LIVE=y
CONFIG_OF_HOSTFILE=y
CONFIG_DEFAULT_DEVICE_TREE="sandbox64"
+CONFIG_ENV_IS_NOWHERE=y
+CONFIG_ENV_IS_IN_EXT4=y
+CONFIG_ENV_EXT4_INTERFACE="host"
+CONFIG_ENV_EXT4_DEVICE_AND_PART="0:0"
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
CONFIG_NETCONSOLE=y
CONFIG_IP_DEFRAG=y
diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig
index 33a103edab..28a6211189 100644
--- a/configs/sandbox_defconfig
+++ b/configs/sandbox_defconfig
@@ -84,6 +84,10 @@ CONFIG_OF_CONTROL=y
CONFIG_OF_LIVE=y
CONFIG_OF_HOSTFILE=y
CONFIG_DEFAULT_DEVICE_TREE="sandbox"
+CONFIG_ENV_IS_NOWHERE=y
+CONFIG_ENV_IS_IN_EXT4=y
+CONFIG_ENV_EXT4_INTERFACE="host"
+CONFIG_ENV_EXT4_DEVICE_AND_PART="0:0"
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
CONFIG_NETCONSOLE=y
CONFIG_IP_DEFRAG=y
diff --git a/configs/sandbox_flattree_defconfig b/configs/sandbox_flattree_defconfig
index 2bfbb66453..1324aaca37 100644
--- a/configs/sandbox_flattree_defconfig
+++ b/configs/sandbox_flattree_defconfig
@@ -59,6 +59,10 @@ CONFIG_AMIGA_PARTITION=y
CONFIG_OF_CONTROL=y
CONFIG_OF_HOSTFILE=y
CONFIG_DEFAULT_DEVICE_TREE="sandbox"
+CONFIG_ENV_IS_NOWHERE=y
+CONFIG_ENV_IS_IN_EXT4=y
+CONFIG_ENV_EXT4_INTERFACE="host"
+CONFIG_ENV_EXT4_DEVICE_AND_PART="0:0"
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
CONFIG_NETCONSOLE=y
CONFIG_IP_DEFRAG=y
diff --git a/configs/sandbox_spl_defconfig b/configs/sandbox_spl_defconfig
index 3bf27c974a..eadcdb9f43 100644
--- a/configs/sandbox_spl_defconfig
+++ b/configs/sandbox_spl_defconfig
@@ -76,6 +76,10 @@ CONFIG_SPL_OF_CONTROL=y
CONFIG_OF_HOSTFILE=y
CONFIG_DEFAULT_DEVICE_TREE="sandbox"
CONFIG_SPL_OF_PLATDATA=y
+CONFIG_ENV_IS_NOWHERE=y
+CONFIG_ENV_IS_IN_EXT4=y
+CONFIG_ENV_EXT4_INTERFACE="host"
+CONFIG_ENV_EXT4_DEVICE_AND_PART="0:0"
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
CONFIG_NETCONSOLE=y
CONFIG_IP_DEFRAG=y
--
2.17.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [RESEND PATCH 05/10] sandbox: support the change of env location
2020-02-12 18:44 [RESEND PATCH 00/10] env: ext4: add test for env in ext4 Patrick Delaunay
` (3 preceding siblings ...)
2020-02-12 18:44 ` [RESEND PATCH 04/10] sandbox: activate env in ext4 support Patrick Delaunay
@ 2020-02-12 18:44 ` Patrick Delaunay
2020-02-16 19:02 ` Simon Glass
2020-02-12 18:44 ` [RESEND PATCH 06/10] test: environment in ext4 Patrick Delaunay
` (4 subsequent siblings)
9 siblings, 1 reply; 16+ messages in thread
From: Patrick Delaunay @ 2020-02-12 18:44 UTC (permalink / raw)
To: u-boot
Add support of environment location with a new sandbox command
'env_loc'.
When the user change the environment location with the command
'env_loc <location>' the env is reinitialized and saved;
the GD_FLG_ENV_DEFAULT flag is also updated.
When the user set the same env location, the environment is
re-loaded.
Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
---
board/sandbox/sandbox.c | 40 +++++++++++++++++++++++++++++++++++++++-
1 file changed, 39 insertions(+), 1 deletion(-)
diff --git a/board/sandbox/sandbox.c b/board/sandbox/sandbox.c
index 01f356be31..023a71d5f0 100644
--- a/board/sandbox/sandbox.c
+++ b/board/sandbox/sandbox.c
@@ -21,6 +21,9 @@
*/
gd_t *gd;
+/* env location: current location used during test */
+static enum env_location sandbox_env_location = ENVL_NOWHERE;
+
/* Add a simple GPIO device */
U_BOOT_DEVICE(gpio_sandbox) = {
.name = "gpio_sandbox",
@@ -53,9 +56,44 @@ enum env_location env_get_location(enum env_operation op, int prio)
gd->env_load_prio = 0;
- return ENVL_NOWHERE;
+ return sandbox_env_location;
}
+static int do_env_loc(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ enum env_location loc;
+
+ if (argc < 2)
+ return CMD_RET_USAGE;
+
+ loc = (enum env_location)simple_strtoul(argv[1], NULL, 10);
+ if (loc >= ENVL_COUNT)
+ return CMD_RET_FAILURE;
+
+ if (sandbox_env_location != loc) {
+ sandbox_env_location = loc;
+ if (loc == ENVL_NOWHERE) {
+ gd->flags |= GD_FLG_ENV_DEFAULT;
+ gd->env_valid = ENV_VALID;
+ } else {
+ if (gd->flags & GD_FLG_ENV_DEFAULT) {
+ gd->flags &= ~GD_FLG_ENV_DEFAULT;
+ if (!env_init())
+ env_save();
+ }
+ }
+ } else {
+ if (!env_init())
+ env_load();
+ }
+
+ return CMD_RET_SUCCESS;
+}
+
+U_BOOT_CMD(env_loc, 2, 1, do_env_loc,
+ "set the environment location", "[loc]"
+);
+
int dram_init(void)
{
gd->ram_size = CONFIG_SYS_SDRAM_SIZE;
--
2.17.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [RESEND PATCH 06/10] test: environment in ext4
2020-02-12 18:44 [RESEND PATCH 00/10] env: ext4: add test for env in ext4 Patrick Delaunay
` (4 preceding siblings ...)
2020-02-12 18:44 ` [RESEND PATCH 05/10] sandbox: support the change of env location Patrick Delaunay
@ 2020-02-12 18:44 ` Patrick Delaunay
2020-02-19 21:45 ` Stephen Warren
2020-02-12 18:44 ` [RESEND PATCH 07/10] env: ext4: fix possible compilation issue Patrick Delaunay
` (3 subsequent siblings)
9 siblings, 1 reply; 16+ messages in thread
From: Patrick Delaunay @ 2020-02-12 18:44 UTC (permalink / raw)
To: u-boot
Add basic test to persistent environment in ext4:
save and load in host ext4 file 'uboot.env'.
On first execution a empty EXT4 file system is created in
persistent data dir: env.ext4.img.
Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
---
test/py/tests/test_env.py | 87 +++++++++++++++++++++++++++++++++++++++
1 file changed, 87 insertions(+)
diff --git a/test/py/tests/test_env.py b/test/py/tests/test_env.py
index cbdb41031c..d35ad888a7 100644
--- a/test/py/tests/test_env.py
+++ b/test/py/tests/test_env.py
@@ -4,6 +4,10 @@
# Test operation of shell commands relating to environment variables.
+import os
+import os.path
+from subprocess import call, check_call
+
import pytest
import u_boot_utils
@@ -380,3 +384,86 @@ def test_env_info_quiet(state_test_env):
assert response == ""
response = c.run_command('echo $?')
assert response == "1"
+
+def mk_env_ext4(state_test_env):
+ c = state_test_env.u_boot_console
+
+ """Create a empty ext4 file system volume.
+ """
+ filename = 'env.ext4.img'
+ persistent = c.config.persistent_data_dir + '/' + filename
+ fs_img = c.config.result_dir + '/' + filename
+
+ if os.path.exists(persistent):
+ c.log.action('Disk image file ' + persistent + ' already exists')
+ else:
+ try:
+ check_call('rm -f %s' % persistent, shell=True)
+ check_call('dd if=/dev/zero of=%s bs=1M count=16'
+ % persistent, shell=True)
+ check_call('mkfs.ext4 -O ^metadata_csum %s' % persistent, shell=True)
+ except CalledProcessError:
+ call('rm -f %s' % persistent, shell=True)
+ raise
+
+ call('cp -f %s %s' % (persistent, fs_img), shell=True)
+ return fs_img
+
+ at pytest.mark.boardspec('sandbox')
+ at pytest.mark.buildconfigspec('cmd_nvedit_info')
+ at pytest.mark.buildconfigspec('cmd_echo')
+ at pytest.mark.buildconfigspec('env_is_in_ext4')
+def test_env_ext4(state_test_env):
+
+ c = state_test_env.u_boot_console
+
+ fs_img = mk_env_ext4(state_test_env)
+ c.run_command('host bind 0 %s' % fs_img)
+
+ response = c.run_command('ext4ls host 0:0')
+ assert 'uboot.env' not in response
+
+ """ env_location: ENVL_EXT4 (2)
+ """
+ response = c.run_command('env_loc 2')
+ assert 'Saving Environment to EXT4' in response
+
+ response = c.run_command('env_loc 2')
+ assert 'Loading Environment from EXT4... OK' in response
+
+ response = c.run_command('ext4ls host 0:0')
+ assert '8192 uboot.env' in response
+
+ response = c.run_command('env info')
+ assert 'env_valid = valid' in response
+ assert 'env_ready = true' in response
+ assert 'env_use_default = false' in response
+
+ response = c.run_command('env info -p -d')
+ assert 'Environment was loaded from persistent storage' in response
+ assert 'Environment can be persisted' in response
+
+ response = c.run_command('env info -d -q')
+ assert response == ""
+ response = c.run_command('echo $?')
+ assert response == "1"
+
+ response = c.run_command('env info -p -q')
+ assert response == ""
+ response = c.run_command('echo $?')
+ assert response == "0"
+
+ """ restore env_location: ENVL_NOWHERE (12)
+ """
+ c.run_command('env_loc 12')
+
+ response = c.run_command('env info')
+ assert 'env_valid = valid' in response
+ assert 'env_ready = true' in response
+ assert 'env_use_default = true' in response
+
+ response = c.run_command('env info -p -d')
+ assert 'Default environment is used' in response
+ assert 'Environment cannot be persisted' in response
+
+ call('rm -f %s' % fs_img, shell=True)
--
2.17.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [RESEND PATCH 07/10] env: ext4: fix possible compilation issue
2020-02-12 18:44 [RESEND PATCH 00/10] env: ext4: add test for env in ext4 Patrick Delaunay
` (5 preceding siblings ...)
2020-02-12 18:44 ` [RESEND PATCH 06/10] test: environment in ext4 Patrick Delaunay
@ 2020-02-12 18:44 ` Patrick Delaunay
2020-02-12 18:44 ` [RESEND PATCH 08/10] env: ext4: introduce new function env_ext4_save_buffer Patrick Delaunay
` (2 subsequent siblings)
9 siblings, 0 replies; 16+ messages in thread
From: Patrick Delaunay @ 2020-02-12 18:44 UTC (permalink / raw)
To: u-boot
Fix possible compilation issue in env ext4 support when
CONFIG_CMD_SAVEENV is not activated.
Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
---
env/ext4.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/env/ext4.c b/env/ext4.c
index e3bbf4a4e0..aa77261649 100644
--- a/env/ext4.c
+++ b/env/ext4.c
@@ -144,5 +144,7 @@ U_BOOT_ENV_LOCATION(ext4) = {
.location = ENVL_EXT4,
ENV_NAME("EXT4")
.load = env_ext4_load,
+#ifdef CONFIG_CMD_SAVEENV
.save = env_save_ptr(env_ext4_save),
+#endif
};
--
2.17.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [RESEND PATCH 08/10] env: ext4: introduce new function env_ext4_save_buffer
2020-02-12 18:44 [RESEND PATCH 00/10] env: ext4: add test for env in ext4 Patrick Delaunay
` (6 preceding siblings ...)
2020-02-12 18:44 ` [RESEND PATCH 07/10] env: ext4: fix possible compilation issue Patrick Delaunay
@ 2020-02-12 18:44 ` Patrick Delaunay
2020-02-12 18:45 ` [RESEND PATCH 09/10] env: ext4: add support of command env erase Patrick Delaunay
2020-02-12 18:45 ` [RESEND PATCH 10/10] test: sandbox: add test for erase command Patrick Delaunay
9 siblings, 0 replies; 16+ messages in thread
From: Patrick Delaunay @ 2020-02-12 18:44 UTC (permalink / raw)
To: u-boot
Split the function env_ext4_save to prepare the erase support
Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
---
env/ext4.c | 32 +++++++++++++++++++++++---------
1 file changed, 23 insertions(+), 9 deletions(-)
diff --git a/env/ext4.c b/env/ext4.c
index aa77261649..49ed06659f 100644
--- a/env/ext4.c
+++ b/env/ext4.c
@@ -43,10 +43,9 @@ __weak const char *env_ext4_get_dev_part(void)
return (const char *)CONFIG_ENV_EXT4_DEVICE_AND_PART;
}
-#ifdef CONFIG_CMD_SAVEENV
-static int env_ext4_save(void)
+#if defined(CONFIG_CMD_SAVEENV)
+static int env_ext4_save_buffer(env_t *env_new)
{
- env_t env_new;
struct blk_desc *dev_desc = NULL;
disk_partition_t info;
int dev, part;
@@ -54,10 +53,6 @@ static int env_ext4_save(void)
const char *ifname = env_ext4_get_intf();
const char *dev_and_part = env_ext4_get_dev_part();
- err = env_export(&env_new);
- if (err)
- return err;
-
part = blk_get_device_part_str(ifname, dev_and_part,
&dev_desc, &info, 1);
if (part < 0)
@@ -72,7 +67,7 @@ static int env_ext4_save(void)
return 1;
}
- err = ext4fs_write(CONFIG_ENV_EXT4_FILE, (void *)&env_new,
+ err = ext4fs_write(CONFIG_ENV_EXT4_FILE, (void *)env_new,
sizeof(env_t), FILETYPE_REG);
ext4fs_close();
@@ -81,9 +76,28 @@ static int env_ext4_save(void)
CONFIG_ENV_EXT4_FILE, ifname, dev, part);
return 1;
}
- gd->env_valid = ENV_VALID;
+ return 0;
+}
+#endif
+
+#ifdef CONFIG_CMD_SAVEENV
+static int env_ext4_save(void)
+{
+ env_t env_new;
+ int err;
+
+ err = env_export(&env_new);
+ if (err)
+ return err;
+
+ err = env_ext4_save_buffer(&env_new);
+ if (err)
+ return err;
+
+ gd->env_valid = ENV_VALID;
puts("done\n");
+
return 0;
}
#endif /* CONFIG_CMD_SAVEENV */
--
2.17.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [RESEND PATCH 09/10] env: ext4: add support of command env erase
2020-02-12 18:44 [RESEND PATCH 00/10] env: ext4: add test for env in ext4 Patrick Delaunay
` (7 preceding siblings ...)
2020-02-12 18:44 ` [RESEND PATCH 08/10] env: ext4: introduce new function env_ext4_save_buffer Patrick Delaunay
@ 2020-02-12 18:45 ` Patrick Delaunay
2020-02-12 18:45 ` [RESEND PATCH 10/10] test: sandbox: add test for erase command Patrick Delaunay
9 siblings, 0 replies; 16+ messages in thread
From: Patrick Delaunay @ 2020-02-12 18:45 UTC (permalink / raw)
To: u-boot
Add support of opts erase for env in ext4,
this opts is used by command 'env erase'.
This command only fill the env file (CONFIG_ENV_EXT4_FILE)
with 0, the CRC and the saved environment becomes invalid.
Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
---
env/ext4.c | 24 +++++++++++++++++++++++-
1 file changed, 23 insertions(+), 1 deletion(-)
diff --git a/env/ext4.c b/env/ext4.c
index 49ed06659f..aec2a33fad 100644
--- a/env/ext4.c
+++ b/env/ext4.c
@@ -43,7 +43,7 @@ __weak const char *env_ext4_get_dev_part(void)
return (const char *)CONFIG_ENV_EXT4_DEVICE_AND_PART;
}
-#if defined(CONFIG_CMD_SAVEENV)
+#if defined(CONFIG_CMD_SAVEENV) || defined(CONFIG_CMD_ERASEENV)
static int env_ext4_save_buffer(env_t *env_new)
{
struct blk_desc *dev_desc = NULL;
@@ -102,6 +102,25 @@ static int env_ext4_save(void)
}
#endif /* CONFIG_CMD_SAVEENV */
+#if defined(CONFIG_CMD_ERASEENV)
+static int env_ext4_erase(void)
+{
+ env_t env_new;
+ int err;
+
+ memset(&env_new, 0, sizeof(env_t));
+
+ err = env_ext4_save_buffer(&env_new);
+ if (err)
+ return err;
+
+ gd->env_valid = ENV_INVALID;
+ puts("done\n");
+
+ return 0;
+}
+#endif
+
static int env_ext4_load(void)
{
ALLOC_CACHE_ALIGN_BUFFER(char, buf, CONFIG_ENV_SIZE);
@@ -161,4 +180,7 @@ U_BOOT_ENV_LOCATION(ext4) = {
#ifdef CONFIG_CMD_SAVEENV
.save = env_save_ptr(env_ext4_save),
#endif
+#if defined(CONFIG_CMD_ERASEENV)
+ .erase = env_ext4_erase,
+#endif
};
--
2.17.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [RESEND PATCH 10/10] test: sandbox: add test for erase command
2020-02-12 18:44 [RESEND PATCH 00/10] env: ext4: add test for env in ext4 Patrick Delaunay
` (8 preceding siblings ...)
2020-02-12 18:45 ` [RESEND PATCH 09/10] env: ext4: add support of command env erase Patrick Delaunay
@ 2020-02-12 18:45 ` Patrick Delaunay
2020-02-16 19:02 ` Simon Glass
2020-02-19 21:46 ` Stephen Warren
9 siblings, 2 replies; 16+ messages in thread
From: Patrick Delaunay @ 2020-02-12 18:45 UTC (permalink / raw)
To: u-boot
Add test for the erase command tested on ENV in EXT4.
Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
---
configs/sandbox64_defconfig | 1 +
configs/sandbox_defconfig | 1 +
configs/sandbox_flattree_defconfig | 1 +
configs/sandbox_spl_defconfig | 1 +
test/py/tests/test_env.py | 20 ++++++++++++++++++--
5 files changed, 22 insertions(+), 2 deletions(-)
diff --git a/configs/sandbox64_defconfig b/configs/sandbox64_defconfig
index 6172259924..a92dc957e8 100644
--- a/configs/sandbox64_defconfig
+++ b/configs/sandbox64_defconfig
@@ -25,6 +25,7 @@ CONFIG_CMD_BOOTZ=y
# CONFIG_CMD_ELF is not set
CONFIG_CMD_ASKENV=y
CONFIG_CMD_GREPENV=y
+CONFIG_CMD_ERASEENV=y
CONFIG_CMD_ENV_CALLBACK=y
CONFIG_CMD_ENV_FLAGS=y
CONFIG_CMD_NVEDIT_INFO=y
diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig
index 28a6211189..82a980e652 100644
--- a/configs/sandbox_defconfig
+++ b/configs/sandbox_defconfig
@@ -29,6 +29,7 @@ CONFIG_CMD_ABOOTIMG=y
# CONFIG_CMD_ELF is not set
CONFIG_CMD_ASKENV=y
CONFIG_CMD_GREPENV=y
+CONFIG_CMD_ERASEENV=y
CONFIG_CMD_ENV_CALLBACK=y
CONFIG_CMD_ENV_FLAGS=y
CONFIG_CMD_NVEDIT_INFO=y
diff --git a/configs/sandbox_flattree_defconfig b/configs/sandbox_flattree_defconfig
index 1324aaca37..93d587fe38 100644
--- a/configs/sandbox_flattree_defconfig
+++ b/configs/sandbox_flattree_defconfig
@@ -22,6 +22,7 @@ CONFIG_CMD_BOOTZ=y
# CONFIG_CMD_ELF is not set
CONFIG_CMD_ASKENV=y
CONFIG_CMD_GREPENV=y
+CONFIG_CMD_ERASEENV=y
CONFIG_CMD_NVEDIT_INFO=y
CONFIG_LOOPW=y
CONFIG_CMD_MD5SUM=y
diff --git a/configs/sandbox_spl_defconfig b/configs/sandbox_spl_defconfig
index eadcdb9f43..2337eade06 100644
--- a/configs/sandbox_spl_defconfig
+++ b/configs/sandbox_spl_defconfig
@@ -31,6 +31,7 @@ CONFIG_CMD_BOOTZ=y
# CONFIG_CMD_ELF is not set
CONFIG_CMD_ASKENV=y
CONFIG_CMD_GREPENV=y
+CONFIG_CMD_ERASEENV=y
CONFIG_CMD_ENV_CALLBACK=y
CONFIG_CMD_ENV_FLAGS=y
CONFIG_CMD_NVEDIT_INFO=y
diff --git a/test/py/tests/test_env.py b/test/py/tests/test_env.py
index d35ad888a7..a71b4c2571 100644
--- a/test/py/tests/test_env.py
+++ b/test/py/tests/test_env.py
@@ -423,7 +423,7 @@ def test_env_ext4(state_test_env):
response = c.run_command('ext4ls host 0:0')
assert 'uboot.env' not in response
- """ env_location: ENVL_EXT4 (2)
+ """ env location: ENVL_EXT4 (2)
"""
response = c.run_command('env_loc 2')
assert 'Saving Environment to EXT4' in response
@@ -453,7 +453,23 @@ def test_env_ext4(state_test_env):
response = c.run_command('echo $?')
assert response == "0"
- """ restore env_location: ENVL_NOWHERE (12)
+ response = c.run_command('env erase')
+ assert 'OK' in response
+
+ response = c.run_command('env_loc 2')
+ assert 'Loading Environment from EXT4... ' in response
+ assert 'bad CRC, using default environment' in response
+
+ response = c.run_command('env info')
+ assert 'env_valid = invalid' in response
+ assert 'env_ready = true' in response
+ assert 'env_use_default = true' in response
+
+ response = c.run_command('env info -p -d')
+ assert 'Default environment is used' in response
+ assert 'Environment can be persisted' in response
+
+ """ restore env location: ENVL_NOWHERE (12)
"""
c.run_command('env_loc 12')
--
2.17.1
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [RESEND PATCH 04/10] sandbox: activate env in ext4 support
2020-02-12 18:44 ` [RESEND PATCH 04/10] sandbox: activate env in ext4 support Patrick Delaunay
@ 2020-02-16 19:02 ` Simon Glass
0 siblings, 0 replies; 16+ messages in thread
From: Simon Glass @ 2020-02-16 19:02 UTC (permalink / raw)
To: u-boot
On Wed, 12 Feb 2020 at 11:45, Patrick Delaunay <patrick.delaunay@st.com> wrote:
>
> The default environment is still used with "ENVL_NOWHERE"
> indicated by the weak function env_get_location() and
> activated by CONFIG_ENV_IS_NOWHERE.
>
> Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
> ---
>
> board/sandbox/sandbox.c | 12 ++++++++++++
> configs/sandbox64_defconfig | 4 ++++
> configs/sandbox_defconfig | 4 ++++
> configs/sandbox_flattree_defconfig | 4 ++++
> configs/sandbox_spl_defconfig | 4 ++++
> 5 files changed, 28 insertions(+)
Reviewed-by: Simon Glass <sjg@chromium.org>
At some point I'd really like the environment device/info to be in the
device tree.
^ permalink raw reply [flat|nested] 16+ messages in thread
* [RESEND PATCH 05/10] sandbox: support the change of env location
2020-02-12 18:44 ` [RESEND PATCH 05/10] sandbox: support the change of env location Patrick Delaunay
@ 2020-02-16 19:02 ` Simon Glass
0 siblings, 0 replies; 16+ messages in thread
From: Simon Glass @ 2020-02-16 19:02 UTC (permalink / raw)
To: u-boot
Hi Patrick,
On Wed, 12 Feb 2020 at 11:45, Patrick Delaunay <patrick.delaunay@st.com> wrote:
>
> Add support of environment location with a new sandbox command
> 'env_loc'.
>
> When the user change the environment location with the command
> 'env_loc <location>' the env is reinitialized and saved;
> the GD_FLG_ENV_DEFAULT flag is also updated.
>
> When the user set the same env location, the environment is
> re-loaded.
>
> Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
> ---
>
> board/sandbox/sandbox.c | 40 +++++++++++++++++++++++++++++++++++++++-
> 1 file changed, 39 insertions(+), 1 deletion(-)
>
> diff --git a/board/sandbox/sandbox.c b/board/sandbox/sandbox.c
> index 01f356be31..023a71d5f0 100644
> --- a/board/sandbox/sandbox.c
> +++ b/board/sandbox/sandbox.c
> @@ -21,6 +21,9 @@
> */
> gd_t *gd;
>
> +/* env location: current location used during test */
> +static enum env_location sandbox_env_location = ENVL_NOWHERE;
> +
> /* Add a simple GPIO device */
> U_BOOT_DEVICE(gpio_sandbox) = {
> .name = "gpio_sandbox",
> @@ -53,9 +56,44 @@ enum env_location env_get_location(enum env_operation op, int prio)
>
> gd->env_load_prio = 0;
>
> - return ENVL_NOWHERE;
> + return sandbox_env_location;
> }
>
> +static int do_env_loc(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
This should be a sub-command of 'env' I think.
Regards,
Simon
^ permalink raw reply [flat|nested] 16+ messages in thread
* [RESEND PATCH 10/10] test: sandbox: add test for erase command
2020-02-12 18:45 ` [RESEND PATCH 10/10] test: sandbox: add test for erase command Patrick Delaunay
@ 2020-02-16 19:02 ` Simon Glass
2020-02-19 21:46 ` Stephen Warren
1 sibling, 0 replies; 16+ messages in thread
From: Simon Glass @ 2020-02-16 19:02 UTC (permalink / raw)
To: u-boot
Hi Patrick,
On Wed, 12 Feb 2020 at 11:45, Patrick Delaunay <patrick.delaunay@st.com> wrote:
>
> Add test for the erase command tested on ENV in EXT4.
>
> Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
> ---
>
> configs/sandbox64_defconfig | 1 +
> configs/sandbox_defconfig | 1 +
> configs/sandbox_flattree_defconfig | 1 +
> configs/sandbox_spl_defconfig | 1 +
> test/py/tests/test_env.py | 20 ++++++++++++++++++--
> 5 files changed, 22 insertions(+), 2 deletions(-)
Can you write this test in C?
See ut_check_console_line() in mainline which should help if you need
to check console output.
Regards,
Simon
^ permalink raw reply [flat|nested] 16+ messages in thread
* [RESEND PATCH 06/10] test: environment in ext4
2020-02-12 18:44 ` [RESEND PATCH 06/10] test: environment in ext4 Patrick Delaunay
@ 2020-02-19 21:45 ` Stephen Warren
0 siblings, 0 replies; 16+ messages in thread
From: Stephen Warren @ 2020-02-19 21:45 UTC (permalink / raw)
To: u-boot
On 2/12/20 11:44 AM, Patrick Delaunay wrote:
> Add basic test to persistent environment in ext4:
> save and load in host ext4 file 'uboot.env'.
>
> On first execution a empty EXT4 file system is created in
> persistent data dir: env.ext4.img.
> diff --git a/test/py/tests/test_env.py b/test/py/tests/test_env.py
> +def mk_env_ext4(state_test_env):
> + c = state_test_env.u_boot_console
> +
> + """Create a empty ext4 file system volume.
> + """
> + filename = 'env.ext4.img'
> + persistent = c.config.persistent_data_dir + '/' + filename
The test seems to want to delete this file at the end, and re-create it
each time. Why store it in the persistent data directory in that case?
> + if os.path.exists(persistent):
> + c.log.action('Disk image file ' + persistent + ' already exists')
... and why just delete it and re-create it if a stale copy exists?
> + else:
> + try:
> + check_call('rm -f %s' % persistent, shell=True)
why not:
check_call('rm -f ' + persistent)
That has simpler string operations, and I don't think any of these
commands need shell=True, since they don't contain any shell
metacharacters? Same comment for most of the other commands.
> +def test_env_ext4(state_test_env):
> + """ env_location: ENVL_EXT4 (2)
> + """
I think that'd be better as a regular comment:
# env_location: ENVL_EXT4 (2)
If there's a reason to make it a docstring, lets put the trailing """ on
the same line since it's a short piece of text.
> + response = c.run_command('env_loc 2')
> + assert 'Saving Environment to EXT4' in response
> +
> + response = c.run_command('env_loc 2')
> + assert 'Loading Environment from EXT4... OK' in response
Can't both assert invocations run on the same response? Or, does the
env_loc command do different things based on some other state; that
would feel pretty nasty.
^ permalink raw reply [flat|nested] 16+ messages in thread
* [RESEND PATCH 10/10] test: sandbox: add test for erase command
2020-02-12 18:45 ` [RESEND PATCH 10/10] test: sandbox: add test for erase command Patrick Delaunay
2020-02-16 19:02 ` Simon Glass
@ 2020-02-19 21:46 ` Stephen Warren
1 sibling, 0 replies; 16+ messages in thread
From: Stephen Warren @ 2020-02-19 21:46 UTC (permalink / raw)
To: u-boot
On 2/12/20 11:45 AM, Patrick Delaunay wrote:
> Add test for the erase command tested on ENV in EXT4.
> - """ env_location: ENVL_EXT4 (2)
> + """ env location: ENVL_EXT4 (2)
> - """ restore env_location: ENVL_NOWHERE (12)
> + """ restore env location: ENVL_NOWHERE (12)
Was there a whitespace mistake in the earlier path or something? I can't
see a diff here...
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2020-02-19 21:46 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-02-12 18:44 [RESEND PATCH 00/10] env: ext4: add test for env in ext4 Patrick Delaunay
2020-02-12 18:44 ` [RESEND PATCH 01/10] env: add absolute path at CONFIG_ENV_EXT4_FILE Patrick Delaunay
2020-02-12 18:44 ` [RESEND PATCH 02/10] env: ext4: set gd->env_valid Patrick Delaunay
2020-02-12 18:44 ` [RESEND PATCH 03/10] env: correctly handle result in env_init Patrick Delaunay
2020-02-12 18:44 ` [RESEND PATCH 04/10] sandbox: activate env in ext4 support Patrick Delaunay
2020-02-16 19:02 ` Simon Glass
2020-02-12 18:44 ` [RESEND PATCH 05/10] sandbox: support the change of env location Patrick Delaunay
2020-02-16 19:02 ` Simon Glass
2020-02-12 18:44 ` [RESEND PATCH 06/10] test: environment in ext4 Patrick Delaunay
2020-02-19 21:45 ` Stephen Warren
2020-02-12 18:44 ` [RESEND PATCH 07/10] env: ext4: fix possible compilation issue Patrick Delaunay
2020-02-12 18:44 ` [RESEND PATCH 08/10] env: ext4: introduce new function env_ext4_save_buffer Patrick Delaunay
2020-02-12 18:45 ` [RESEND PATCH 09/10] env: ext4: add support of command env erase Patrick Delaunay
2020-02-12 18:45 ` [RESEND PATCH 10/10] test: sandbox: add test for erase command Patrick Delaunay
2020-02-16 19:02 ` Simon Glass
2020-02-19 21:46 ` Stephen Warren
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.