diff options
author | Anthony Loiseau | 2023-12-21 23:44:38 +0100 |
---|---|---|
committer | Tom Rini | 2024-01-05 15:41:47 -0500 |
commit | d73a6641868029b5cae53ed00c5766921c9d8b1f (patch) | |
tree | 4add007f6818eafefe1ff7e617f2fcdf3911ae35 /tools/env | |
parent | 9e3003f79d168eac7ee65cd457e3904e2fb4eea8 (diff) |
fw_env: autodetect NAND erase size and env sectors
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/env')
-rw-r--r-- | tools/env/README | 3 | ||||
-rw-r--r-- | tools/env/fw_env.c | 11 |
2 files changed, 12 insertions, 2 deletions
diff --git a/tools/env/README b/tools/env/README index 480a893202f..b8c6a7e1974 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 90010dabd82..74451ecb945 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); |