]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
fw_env: autodetect NAND erase size and env sectors
authorAnthony Loiseau <anthony.loiseau@allcircuits.com>
Thu, 21 Dec 2023 22:44:38 +0000 (23:44 +0100)
committerTom Rini <trini@konsulko.com>
Fri, 5 Jan 2024 20:41:47 +0000 (15:41 -0500)
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>
tools/env/README
tools/env/fw_env.c

index 480a893202f747f95c62873aa52de90f1285bc15..b8c6a7e19745eed77598b544d90ff79e7e139703 100644 (file)
@@ -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.
index 90010dabd824369da54ee7f523733bbff29f852b..74451ecb9457dff6cb850b8c14abf5e1845955ac 100644 (file)
@@ -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);