73 lines
2.0 KiB
Diff
73 lines
2.0 KiB
Diff
From fc0c70a7c6a088072d0c77e5a59d5e9b7754c6db Mon Sep 17 00:00:00 2001
|
|
From: Weijie Gao <weijie.gao@mediatek.com>
|
|
Date: Mon, 25 Jul 2022 17:01:20 +0800
|
|
Subject: [PATCH 61/71] env: ubi: add support to create environment volume if
|
|
it does not exist
|
|
|
|
Add an option to allow environment volume being auto created if not exist.
|
|
|
|
Signed-off-by: Weijie Gao <weijie.gao@mediatek.com>
|
|
---
|
|
env/Kconfig | 6 ++++++
|
|
env/ubi.c | 20 ++++++++++++++++++++
|
|
2 files changed, 26 insertions(+)
|
|
|
|
--- a/env/Kconfig
|
|
+++ b/env/Kconfig
|
|
@@ -665,6 +665,12 @@ config ENV_UBI_VOLUME_REDUND
|
|
help
|
|
Name of the redundant volume that you want to store the environment in.
|
|
|
|
+config ENV_UBI_VOLUME_CREATE
|
|
+ bool "Create UBI volume if not exist"
|
|
+ depends on ENV_IS_IN_UBI
|
|
+ help
|
|
+ Create the UBI volume if it does not exist.
|
|
+
|
|
config ENV_UBI_VID_OFFSET
|
|
int "ubi environment VID offset"
|
|
depends on ENV_IS_IN_UBI
|
|
--- a/env/ubi.c
|
|
+++ b/env/ubi.c
|
|
@@ -100,6 +100,18 @@ static int env_ubi_save(void)
|
|
#endif /* CONFIG_SYS_REDUNDAND_ENVIRONMENT */
|
|
#endif /* CONFIG_CMD_SAVEENV */
|
|
|
|
+int __weak env_ubi_volume_create(const char *volume)
|
|
+{
|
|
+ struct ubi_volume *vol;
|
|
+
|
|
+ vol = ubi_find_volume((char *)volume);
|
|
+ if (vol)
|
|
+ return 0;
|
|
+
|
|
+ return ubi_create_vol((char *)volume, CONFIG_ENV_SIZE, true,
|
|
+ UBI_VOL_NUM_AUTO, false);
|
|
+}
|
|
+
|
|
#ifdef CONFIG_SYS_REDUNDAND_ENVIRONMENT
|
|
static int env_ubi_load(void)
|
|
{
|
|
@@ -129,6 +141,11 @@ static int env_ubi_load(void)
|
|
return -EIO;
|
|
}
|
|
|
|
+ if (IS_ENABLED(CONFIG_ENV_UBI_VOLUME_CREATE)) {
|
|
+ env_ubi_volume_create(CONFIG_ENV_UBI_VOLUME);
|
|
+ env_ubi_volume_create(CONFIG_ENV_UBI_VOLUME_REDUND);
|
|
+ }
|
|
+
|
|
read1_fail = ubi_volume_read(CONFIG_ENV_UBI_VOLUME, (void *)tmp_env1,
|
|
CONFIG_ENV_SIZE);
|
|
if (read1_fail)
|
|
@@ -166,6 +183,9 @@ static int env_ubi_load(void)
|
|
return -EIO;
|
|
}
|
|
|
|
+ if (IS_ENABLED(CONFIG_ENV_UBI_VOLUME_CREATE))
|
|
+ env_ubi_volume_create(CONFIG_ENV_UBI_VOLUME);
|
|
+
|
|
if (ubi_volume_read(CONFIG_ENV_UBI_VOLUME, buf, CONFIG_ENV_SIZE)) {
|
|
printf("\n** Unable to read env from %s:%s **\n",
|
|
CONFIG_ENV_UBI_PART, CONFIG_ENV_UBI_VOLUME);
|