summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Rini <[email protected]>2026-05-25 13:44:45 -0600
committerTom Rini <[email protected]>2026-05-25 13:44:45 -0600
commit8d5f30b52f7c800c2177188fc4d331fb7af2c46a (patch)
treea3f23faa01933dcb49c22ca50c8d5a9e3293a87a
parent77efd55f89e406d49a8697fd5475b6ab2ba6497c (diff)
parente11b0c5cab44817b3c1cb4fd29339010b4db4321 (diff)
Merge patch series "env: migrate static flags list to Kconfig"next
This series from James Hilliard <[email protected]> converts the static flags list for the environment to be configured via Kconfig and updates the documentation. Link: https://lore.kernel.org/r/[email protected]
-rw-r--r--README169
-rw-r--r--configs/aristainetos2c_defconfig1
-rw-r--r--configs/aristainetos2ccslb_defconfig1
-rw-r--r--configs/hmibsc_defconfig1
-rw-r--r--configs/imx6q_bosch_acc_defconfig1
-rw-r--r--configs/imx8qxp_capricorn.config1
-rw-r--r--configs/smegw01_defconfig1
-rw-r--r--configs/socrates_defconfig1
-rw-r--r--doc/develop/environment.rst40
-rw-r--r--env/Kconfig23
-rw-r--r--include/configs/aristainetos2.h3
-rw-r--r--include/configs/capricorn-common.h13
-rw-r--r--include/configs/hmibsc.h4
-rw-r--r--include/configs/imx6q-bosch-acc.h12
-rw-r--r--include/configs/iot2050.h8
-rw-r--r--include/configs/smegw01.h15
-rw-r--r--include/configs/socrates.h2
-rw-r--r--include/env_flags.h6
18 files changed, 72 insertions, 230 deletions
diff --git a/README b/README
index 5653f687e82..472cf37d9cc 100644
--- a/README
+++ b/README
@@ -707,7 +707,7 @@ The following options need to be configured:
The same can be accomplished in a more flexible way
for any variable by configuring the type of access
to allow for those variables in the ".flags" variable
- or define CFG_ENV_FLAGS_LIST_STATIC.
+ or by setting CONFIG_ENV_FLAGS_LIST_STATIC.
- Protected RAM:
CFG_PRAM
@@ -941,173 +941,6 @@ typically in board_init_f() and board_init_r().
- CONFIG_BOARD_EARLY_INIT_R: Call board_early_init_r()
- CONFIG_BOARD_LATE_INIT: Call board_late_init()
-Configuration Settings:
------------------------
-
-- CONFIG_SYS_LONGHELP: Defined when you want long help messages included;
- undefine this when you're short of memory.
-
-- CFG_SYS_HELP_CMD_WIDTH: Defined when you want to override the default
- width of the commands listed in the 'help' command output.
-
-- CONFIG_SYS_PROMPT: This is what U-Boot prints on the console to
- prompt for user input.
-
-- CFG_SYS_BAUDRATE_TABLE:
- List of legal baudrate settings for this board.
-
-- CFG_SYS_MEM_RESERVE_SECURE
- Only implemented for ARMv8 for now.
- If defined, the size of CFG_SYS_MEM_RESERVE_SECURE memory
- is substracted from total RAM and won't be reported to OS.
- This memory can be used as secure memory. A variable
- gd->arch.secure_ram is used to track the location. In systems
- the RAM base is not zero, or RAM is divided into banks,
- this variable needs to be recalcuated to get the address.
-
-- CFG_SYS_SDRAM_BASE:
- Physical start address of SDRAM. _Must_ be 0 here.
-
-- CFG_SYS_FLASH_BASE:
- Physical start address of Flash memory.
-
-- CONFIG_SYS_MALLOC_LEN:
- Size of DRAM reserved for malloc() use.
-
-- CFG_SYS_BOOTMAPSZ:
- Maximum size of memory mapped by the startup code of
- the Linux kernel; all data that must be processed by
- the Linux kernel (bd_info, boot arguments, FDT blob if
- used) must be put below this limit, unless "bootm_low"
- environment variable is defined and non-zero. In such case
- all data for the Linux kernel must be between "bootm_low"
- and "bootm_low" + CFG_SYS_BOOTMAPSZ. The environment
- variable "bootm_mapsize" will override the value of
- CFG_SYS_BOOTMAPSZ. If CFG_SYS_BOOTMAPSZ is undefined,
- then the value in "bootm_size" will be used instead.
-
-- CONFIG_SYS_BOOT_GET_CMDLINE:
- Enables allocating and saving kernel cmdline in space between
- "bootm_low" and "bootm_low" + BOOTMAPSZ.
-
-- CONFIG_SYS_BOOT_GET_KBD:
- Enables allocating and saving a kernel copy of the bd_info in
- space between "bootm_low" and "bootm_low" + BOOTMAPSZ.
-
-- CONFIG_SYS_FLASH_PROTECTION
- If defined, hardware flash sectors protection is used
- instead of U-Boot software protection.
-
-- CONFIG_SYS_FLASH_CFI:
- Define if the flash driver uses extra elements in the
- common flash structure for storing flash geometry.
-
-- CONFIG_FLASH_CFI_DRIVER
- This option also enables the building of the cfi_flash driver
- in the drivers directory
-
-- CONFIG_FLASH_CFI_MTD
- This option enables the building of the cfi_mtd driver
- in the drivers directory. The driver exports CFI flash
- to the MTD layer.
-
-- CONFIG_SYS_FLASH_USE_BUFFER_WRITE
- Use buffered writes to flash.
-
-- CONFIG_ENV_FLAGS_LIST_DEFAULT
-- CFG_ENV_FLAGS_LIST_STATIC
- Enable validation of the values given to environment variables when
- calling env set. Variables can be restricted to only decimal,
- hexadecimal, or boolean. If CONFIG_CMD_NET is also defined,
- the variables can also be restricted to IP address or MAC address.
-
- The format of the list is:
- type_attribute = [s|d|x|b|i|m]
- access_attribute = [a|r|o|c]
- attributes = type_attribute[access_attribute]
- entry = variable_name[:attributes]
- list = entry[,list]
-
- The type attributes are:
- s - String (default)
- d - Decimal
- x - Hexadecimal
- b - Boolean ([1yYtT|0nNfF])
- i - IP address
- m - MAC address
-
- The access attributes are:
- a - Any (default)
- r - Read-only
- o - Write-once
- c - Change-default
-
- - CONFIG_ENV_FLAGS_LIST_DEFAULT
- Define this to a list (string) to define the ".flags"
- environment variable in the default or embedded environment.
-
- - CFG_ENV_FLAGS_LIST_STATIC
- Define this to a list (string) to define validation that
- should be done if an entry is not found in the ".flags"
- environment variable. To override a setting in the static
- list, simply add an entry for the same variable name to the
- ".flags" variable.
-
- If CONFIG_REGEX is defined, the variable_name above is evaluated as a
- regular expression. This allows multiple variables to define the same
- flags without explicitly listing them for each variable.
-
-The following definitions that deal with the placement and management
-of environment data (variable area); in general, we support the
-following configurations:
-
-BE CAREFUL! The first access to the environment happens quite early
-in U-Boot initialization (when we try to get the setting of for the
-console baudrate). You *MUST* have mapped your NVRAM area then, or
-U-Boot will hang.
-
-Please note that even with NVRAM we still use a copy of the
-environment in RAM: we could work on NVRAM directly, but we want to
-keep settings there always unmodified except somebody uses "saveenv"
-to save the current settings.
-
-BE CAREFUL! For some special cases, the local device can not use
-"saveenv" command. For example, the local device will get the
-environment stored in a remote NOR flash by SRIO or PCIE link,
-but it can not erase, write this NOR flash by SRIO or PCIE interface.
-
-- CONFIG_NAND_ENV_DST
-
- Defines address in RAM to which the nand_spl code should copy the
- environment. If redundant environment is used, it will be copied to
- CONFIG_NAND_ENV_DST + CONFIG_ENV_SIZE.
-
-Please note that the environment is read-only until the monitor
-has been relocated to RAM and a RAM copy of the environment has been
-created; also, when using EEPROM you will have to use env_get_f()
-until then to read environment variables.
-
-The environment is protected by a CRC32 checksum. Before the monitor
-is relocated into RAM, as a result of a bad CRC you will be working
-with the compiled-in default environment - *silently*!!! [This is
-necessary, because the first environment variable we need is the
-"baudrate" setting for the console - if we have a bad CRC, we don't
-have any device yet where we could complain.]
-
-Note: once the monitor has been relocated, then it will complain if
-the default environment is used; a new CRC is computed as soon as you
-use the "saveenv" command to store a valid environment.
-
-- CONFIG_DISPLAY_BOARDINFO
- Display information about the board that U-Boot is running on
- when U-Boot starts up. The board function checkboard() is called
- to do this.
-
-- CONFIG_DISPLAY_BOARDINFO_LATE
- Similar to the previous option, but display this information
- later, once stdio is running and output goes to the LCD, if
- present.
-
Low Level (hardware related) configuration options:
---------------------------------------------------
diff --git a/configs/aristainetos2c_defconfig b/configs/aristainetos2c_defconfig
index d73576b1e63..cb3e61a29f3 100644
--- a/configs/aristainetos2c_defconfig
+++ b/configs/aristainetos2c_defconfig
@@ -55,6 +55,7 @@ CONFIG_CMD_UBI=y
CONFIG_OF_CONTROL=y
CONFIG_DTB_RESELECT=y
CONFIG_MULTI_DTB_FIT=y
+CONFIG_ENV_FLAGS_LIST_STATIC="ethaddr:mw,serial#:sw,board_type:sw,sysnum:dw,panel:sw,ipaddr:iw,serverip:iw"
CONFIG_ENV_OVERWRITE=y
CONFIG_ENV_IS_IN_SPI_FLASH=y
CONFIG_ENV_SPI_EARLY=y
diff --git a/configs/aristainetos2ccslb_defconfig b/configs/aristainetos2ccslb_defconfig
index c7153ca1657..a29ecf96fb9 100644
--- a/configs/aristainetos2ccslb_defconfig
+++ b/configs/aristainetos2ccslb_defconfig
@@ -55,6 +55,7 @@ CONFIG_CMD_UBI=y
CONFIG_OF_CONTROL=y
CONFIG_DTB_RESELECT=y
CONFIG_MULTI_DTB_FIT=y
+CONFIG_ENV_FLAGS_LIST_STATIC="ethaddr:mw,serial#:sw,board_type:sw,sysnum:dw,panel:sw,ipaddr:iw,serverip:iw"
CONFIG_ENV_OVERWRITE=y
CONFIG_ENV_IS_IN_SPI_FLASH=y
CONFIG_ENV_SPI_EARLY=y
diff --git a/configs/hmibsc_defconfig b/configs/hmibsc_defconfig
index 1e3d744193d..c8fad154e31 100644
--- a/configs/hmibsc_defconfig
+++ b/configs/hmibsc_defconfig
@@ -41,6 +41,7 @@ CONFIG_CMD_EXT4=y
CONFIG_CMD_FAT=y
CONFIG_CMD_FS_GENERIC=y
# CONFIG_OF_UPSTREAM is not set
+CONFIG_ENV_FLAGS_LIST_STATIC="BOOT_A_LEFT:dw,BOOT_B_LEFT:dw,BOOT_ORDER:sw"
CONFIG_ENV_IS_IN_MMC=y
CONFIG_ENV_RELOC_GD_ENV_ADDR=y
CONFIG_ENV_MMC_EMMC_HW_PARTITION=2
diff --git a/configs/imx6q_bosch_acc_defconfig b/configs/imx6q_bosch_acc_defconfig
index 6f0ef2eaee3..87cf676ed4c 100644
--- a/configs/imx6q_bosch_acc_defconfig
+++ b/configs/imx6q_bosch_acc_defconfig
@@ -74,6 +74,7 @@ CONFIG_EFI_PARTITION=y
CONFIG_SPL_OF_CONTROL=y
CONFIG_MULTI_DTB_FIT=y
CONFIG_OF_SPL_REMOVE_PROPS="pinctrl-0 pinctrl-names clocks clock-names interrupt-parent"
+CONFIG_ENV_FLAGS_LIST_STATIC="bootset:bw,clone_pending:bw,endurance_test:bw,env_persisted:bw,factory_reset:bw,fdtcontroladdr:xw,fitpart:dw,mmcpart:dw,production:bw,ustate:dw"
CONFIG_ENV_OVERWRITE=y
CONFIG_ENV_IS_IN_MMC=y
CONFIG_ENV_REDUNDANT=y
diff --git a/configs/imx8qxp_capricorn.config b/configs/imx8qxp_capricorn.config
index 2bae5b1a862..91da5554db0 100644
--- a/configs/imx8qxp_capricorn.config
+++ b/configs/imx8qxp_capricorn.config
@@ -92,6 +92,7 @@ CONFIG_CMD_EXT4=y
CONFIG_CMD_FAT=y
CONFIG_CMD_FS_GENERIC=y
CONFIG_SPL_OF_CONTROL=y
+CONFIG_ENV_FLAGS_LIST_STATIC="bootcount:dw,bootdelay:sw,bootlimit:dw,partitionset_active:sw,rastate:dw,sig_a:sw,sig_b:sw,target_env:sw,upgrade_available:dw,ustate:dw"
CONFIG_ENV_OVERWRITE=y
CONFIG_ENV_IS_IN_MMC=y
diff --git a/configs/smegw01_defconfig b/configs/smegw01_defconfig
index 7499988638c..ba32f6bc52f 100644
--- a/configs/smegw01_defconfig
+++ b/configs/smegw01_defconfig
@@ -48,6 +48,7 @@ CONFIG_CMD_FAT=y
CONFIG_CMD_SQUASHFS=y
CONFIG_CMD_FS_GENERIC=y
CONFIG_OF_CONTROL=y
+CONFIG_ENV_FLAGS_LIST_STATIC="mmcpart:dw,mmcpart_committed:dw,ustate:dw,bootcount:dw,bootlimit:dw,upgrade_available:dw"
CONFIG_ENV_OVERWRITE=y
CONFIG_ENV_REDUNDANT=y
CONFIG_ENV_RELOC_GD_ENV_ADDR=y
diff --git a/configs/socrates_defconfig b/configs/socrates_defconfig
index 293c4a91a53..16fba72170c 100644
--- a/configs/socrates_defconfig
+++ b/configs/socrates_defconfig
@@ -66,6 +66,7 @@ CONFIG_MTDIDS_DEFAULT="nor0=fe000000.nor_flash,nand0=socrates_nand"
CONFIG_MTDPARTS_DEFAULT="mtdparts=fe000000.nor_flash:13312k(system1),13312k(system2),5120k(data),128k(env),128k(env-red),768k(u-boot);socrates_nand:256M(ubi-data1),-(ubi-data2)"
# CONFIG_CMD_IRQ is not set
CONFIG_OF_CONTROL=y
+CONFIG_ENV_FLAGS_LIST_STATIC="ethaddr:mw,eth1addr:mw,system1_addr:xw,serial#:sw,ethact:sw,ethprime:sw"
CONFIG_ENV_IS_IN_FLASH=y
CONFIG_ENV_REDUNDANT=y
CONFIG_ENV_ADDR_REDUND=0xFFF00000
diff --git a/doc/develop/environment.rst b/doc/develop/environment.rst
index e46cd39d601..a7ed4aab0a5 100644
--- a/doc/develop/environment.rst
+++ b/doc/develop/environment.rst
@@ -49,3 +49,43 @@ The signature of the callback functions is::
include/search.h
The return value is 0 if the variable change is accepted and 1 otherwise.
+
+Flags for environment variables
+-------------------------------
+
+Environment flags validate the values given to environment variables and
+restrict how environment variables can be changed.
+
+The static list is configured with CONFIG_ENV_FLAGS_LIST_STATIC. The list
+must be in the following format::
+
+ type_attribute = [s|d|x|b|i|m]
+ access_attribute = [a|r|o|c|w]
+ attributes = type_attribute[access_attribute]
+ entry = variable_name[:attributes]
+ list = entry[,list]
+
+The type attributes are:
+
+* s - String (default)
+* d - Decimal
+* x - Hexadecimal
+* b - Boolean ([1yYtT|0nNfF])
+* i - IP address, if networking is enabled
+* m - MAC address, if networking is enabled
+
+The access attributes are:
+
+* a - Any (default)
+* r - Read-only
+* o - Write-once
+* c - Change-default
+* w - Writeable, if CONFIG_ENV_WRITEABLE_LIST is enabled
+
+CONFIG_ENV_FLAGS_LIST_DEFAULT defines the ``.flags`` variable in the
+default or embedded environment. Any association in ``.flags`` overrides
+an association in the static list.
+
+If CONFIG_REGEX is defined, the variable name is evaluated as a regular
+expression. This allows multiple variables to define the same flags without
+explicitly listing them all.
diff --git a/env/Kconfig b/env/Kconfig
index 7abd82ab6f3..3c9aaeb1f16 100644
--- a/env/Kconfig
+++ b/env/Kconfig
@@ -34,6 +34,29 @@ config ENV_CALLBACK_LIST_STATIC
If the callback name is not specified, then the callback is deleted.
Spaces are also allowed anywhere in the list.
+config ENV_FLAGS_LIST_STATIC
+ string "Static flags list"
+ default ""
+ help
+ The environment flags are associated with variables in a static
+ list. Define this list in the following format:
+
+ type_attribute = [s|d|x|b|i|m]
+ access_attribute = [a|r|o|c|w]
+ attributes = type_attribute[access_attribute]
+ entry = variable_name[:attributes]
+ list = entry[,list]
+
+ The type attributes are s for string, d for decimal, x for
+ hexadecimal and b for boolean. If networking is enabled, i can
+ be used for IP addresses and m for MAC addresses.
+
+ The access attributes are a for any, r for read-only, o for
+ write-once and c for change-default. When CONFIG_ENV_WRITEABLE_LIST
+ is enabled, w can be used to mark variables as writable.
+
+ Spaces are also allowed anywhere in the list.
+
config SAVEENV
def_bool y if CMD_SAVEENV
diff --git a/include/configs/aristainetos2.h b/include/configs/aristainetos2.h
index 2078ebc5282..76b9d3166be 100644
--- a/include/configs/aristainetos2.h
+++ b/include/configs/aristainetos2.h
@@ -413,7 +413,4 @@
/* UBI support */
-#define CFG_ENV_FLAGS_LIST_STATIC "ethaddr:mw,serial#:sw,board_type:sw," \
- "sysnum:dw,panel:sw,ipaddr:iw,serverip:iw"
-
#endif /* __ARISTAINETOS2_CONFIG_H */
diff --git a/include/configs/capricorn-common.h b/include/configs/capricorn-common.h
index ee13d2ab950..7120a44d186 100644
--- a/include/configs/capricorn-common.h
+++ b/include/configs/capricorn-common.h
@@ -38,19 +38,6 @@
#define CFG_EXTRA_ENV_SETTINGS \
AHAB_ENV
-#ifdef CONFIG_ENV_WRITEABLE_LIST
-#define CFG_ENV_FLAGS_LIST_STATIC \
- "bootcount:dw," \
- "bootdelay:sw," \
- "bootlimit:dw," \
- "partitionset_active:sw," \
- "rastate:dw," \
- "sig_a:sw,sig_b:sw," \
- "target_env:sw," \
- "upgrade_available:dw," \
- "ustate:dw"
-#endif
-
/* Default location for tftp and bootm */
/* On CCP board, USDHC1 is for eMMC */
diff --git a/include/configs/hmibsc.h b/include/configs/hmibsc.h
index 950ec8b190d..ea9762ee448 100644
--- a/include/configs/hmibsc.h
+++ b/include/configs/hmibsc.h
@@ -8,8 +8,4 @@
#ifndef __CONFIGS_HMIBSC_H
#define __CONFIGS_HMIBSC_H
-/* PHY needs a longer aneg time */
-
-#define CFG_ENV_FLAGS_LIST_STATIC "BOOT_A_LEFT:dw,BOOT_B_LEFT:dw,BOOT_ORDER:sw"
-
#endif
diff --git a/include/configs/imx6q-bosch-acc.h b/include/configs/imx6q-bosch-acc.h
index 84da8250684..e00cddfdac0 100644
--- a/include/configs/imx6q-bosch-acc.h
+++ b/include/configs/imx6q-bosch-acc.h
@@ -44,18 +44,6 @@
"then env set env_persisted 1; run save_env; fi;\0" \
"save_env=env save; env save\0"
-#define CFG_ENV_FLAGS_LIST_STATIC \
- "bootset:bw," \
- "clone_pending:bw," \
- "endurance_test:bw," \
- "env_persisted:bw," \
- "factory_reset:bw," \
- "fdtcontroladdr:xw," \
- "fitpart:dw," \
- "mmcpart:dw," \
- "production:bw," \
- "ustate:dw"
-
#else
/* SD Card boot */
#define ENV_EXTRA \
diff --git a/include/configs/iot2050.h b/include/configs/iot2050.h
index 5c58c7bbaab..fac4bbcd4ed 100644
--- a/include/configs/iot2050.h
+++ b/include/configs/iot2050.h
@@ -38,12 +38,4 @@
func(MMC, mmc, 0) \
BOOT_TARGET_USB(func)
-#ifdef CONFIG_ENV_WRITEABLE_LIST
-#define CFG_ENV_FLAGS_LIST_STATIC \
- "board_uuid:sw,board_name:sw,board_serial:sw,board_a5e:sw," \
- "mlfb:sw,fw_version:sw,seboot_version:sw," \
- "m2_manual_config:sw," \
- "eth1addr:mw,eth2addr:mw,watchdog_timeout_ms:dw,boot_targets:sw"
-#endif
-
#endif /* __CONFIG_IOT2050_H */
diff --git a/include/configs/smegw01.h b/include/configs/smegw01.h
index 0aa25f9e2ea..c0ca5a7db2f 100644
--- a/include/configs/smegw01.h
+++ b/include/configs/smegw01.h
@@ -22,21 +22,6 @@
#define EXTRA_BOOTPARAMS
#endif
-#ifdef CONFIG_SYS_BOOT_LOCKED
-#define EXTRA_ENV_FLAGS
-#else
-#define EXTRA_ENV_FLAGS "mmcdev:dw,"
-#endif
-
-#define CFG_ENV_FLAGS_LIST_STATIC \
- "mmcpart:dw," \
- "mmcpart_committed:dw," \
- "ustate:dw," \
- "bootcount:dw," \
- "bootlimit:dw," \
- "upgrade_available:dw," \
- EXTRA_ENV_FLAGS
-
/* Physical Memory Map */
#define PHYS_SDRAM MMDC0_ARB_BASE_ADDR
diff --git a/include/configs/socrates.h b/include/configs/socrates.h
index 006d649f6ed..68d177d4ca3 100644
--- a/include/configs/socrates.h
+++ b/include/configs/socrates.h
@@ -108,8 +108,6 @@
*/
#define CFG_SYS_BOOTMAPSZ (8 << 20) /* Initial Memory map for Linux */
-#define CFG_ENV_FLAGS_LIST_STATIC "ethaddr:mw,eth1addr:mw,system1_addr:xw,serial#:sw,ethact:sw,ethprime:sw"
-
/* pass open firmware flat tree */
#endif /* __CONFIG_H */
diff --git a/include/env_flags.h b/include/env_flags.h
index 123fdbcb0ba..245dfdbd564 100644
--- a/include/env_flags.h
+++ b/include/env_flags.h
@@ -37,10 +37,6 @@ enum env_flags_varaccess {
#define ENV_FLAGS_VARTYPE_LOC 0
#define ENV_FLAGS_VARACCESS_LOC 1
-#ifndef CFG_ENV_FLAGS_LIST_STATIC
-#define CFG_ENV_FLAGS_LIST_STATIC ""
-#endif
-
#if CONFIG_IS_ENABLED(NET)
#ifdef CONFIG_REGEX
#define ETHADDR_WILDCARD "\\d*"
@@ -89,7 +85,7 @@ enum env_flags_varaccess {
NET_FLAGS \
NET6_FLAGS \
SERIAL_FLAGS \
- CFG_ENV_FLAGS_LIST_STATIC
+ CONFIG_ENV_FLAGS_LIST_STATIC
#ifdef CONFIG_CMD_ENV_FLAGS
/*