aboutsummaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorAnthony Loiseau <anthony.loiseau@allcircuits.com>2023-12-21 23:44:38 +0100
committerTom Rini <trini@konsulko.com>2024-01-05 15:41:47 -0500
commitd73a6641868029b5cae53ed00c5766921c9d8b1f (patch)
tree4add007f6818eafefe1ff7e617f2fcdf3911ae35 /tools
parent9e3003f79d168eac7ee65cd457e3904e2fb4eea8 (diff)
downloadu-boot-d73a6641868029b5cae53ed00c5766921c9d8b1f.zip
u-boot-d73a6641868029b5cae53ed00c5766921c9d8b1f.tar.gz
u-boot-d73a6641868029b5cae53ed00c5766921c9d8b1f.tar.bz2
fw_env: autodetect NAND erase size and env sectorsWIP/2024-01-05-fw_env-fixes
As already done for NOR chips, if device ESIZE and ENVSECTORS static configurations are both zero, then autodetect them at runtime. Cc: Joe Hershberger <joe.hershberger@ni.com> cc: Stefan Agner <stefan@agner.ch> cc: Rasmus Villemoes <rasmus.villemoes@prevas.dk> Signed-off-by: Anthony Loiseau <anthony.loiseau@allcircuits.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/env/README3
-rw-r--r--tools/env/fw_env.c11
2 files changed, 12 insertions, 2 deletions
diff --git a/tools/env/README b/tools/env/README
index 480a893..b8c6a7e 100644
--- a/tools/env/README
+++ b/tools/env/README
@@ -58,6 +58,9 @@ DEVICEx_ENVSECTORS defines the number of sectors that may be used for
this environment instance. On NAND this is used to limit the range
within which bad blocks are skipped, on NOR it is not used.
+If DEVICEx_ESIZE and DEVICEx_ENVSECTORS are both zero, then a runtime
+detection is attempted for NOR and NAND mtd types.
+
To prevent losing changes to the environment and to prevent confusing the MTD
drivers, a lock file at /run/fw_printenv.lock is used to serialize access
to the environment.
diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c
index 90010da..74451ec 100644
--- a/tools/env/fw_env.c
+++ b/tools/env/fw_env.c
@@ -1652,8 +1652,15 @@ static int check_device_config(int dev)
}
DEVTYPE(dev) = mtdinfo.type;
if (DEVESIZE(dev) == 0 && ENVSECTORS(dev) == 0 &&
- mtdinfo.type == MTD_NORFLASH)
- DEVESIZE(dev) = mtdinfo.erasesize;
+ mtdinfo.erasesize > 0) {
+ if (mtdinfo.type == MTD_NORFLASH)
+ DEVESIZE(dev) = mtdinfo.erasesize;
+ else if (mtdinfo.type == MTD_NANDFLASH) {
+ DEVESIZE(dev) = mtdinfo.erasesize;
+ ENVSECTORS(dev) =
+ mtdinfo.size / mtdinfo.erasesize;
+ }
+ }
if (DEVESIZE(dev) == 0)
/* Assume the erase size is the same as the env-size */
DEVESIZE(dev) = ENVSIZE(dev);