Thread (5 messages) 5 messages, 4 authors, 2025-07-31

Re: [PATCH 2/2] dt-bindings: nvmem: add env-size property for u-boot env layout

From: Alexander Dahl <hidden>
Date: 2025-07-31 08:39:43
Also in: lkml

Hei hei,

just hooking in, because it relates to a U-Boot feature I'm using, too.

Am Wed, Jul 30, 2025 at 06:52:14PM -0500 schrieb Rob Herring:
On Wed, Jul 30, 2025 at 09:17:47PM +0800, Shiji Yang wrote:
quoted
This newly introduced property allows users to declare the size of
the environment storage area.
Why do you need it to be less than the partition size? They commit msg 
needs to explain that.
+1
The partition size for fixed partitions in particular are purely a DT 
construct. No reason the partition size can't always be the env size.
You can set CONFIG_ENV_RANGE and CONFIG_ENV_SIZE to different values
in U-Boot to allow bad block handling.  I have a board here where the
U-Boot env is stored directly in NAND flash.  The mtd partition size
is 2 times the nand block size (ENV_RANGE=0x40000) while the env size
is exactly one nand block size (ENV_SIZE=0x20000).  So the partition
is 2 blocks, but the env size is only 1 block.  This way the first
block can become bad and U-Boot will skip it and use the second block.
This would not be possible if the env would always use the whole
partition.  The usable size of the partition would be too small to
keep the env then.

The help text for this is present in U-Boot since 2010, so I guess the
feature is there even longer:

  - CONFIG_ENV_RANGE (optional):
  
    Specifies the length of the region in which the environment
    can be written.  This should be a multiple of the NAND device's
    block size.  Specifying a range with more erase blocks than
    are needed to hold CONFIG_ENV_SIZE allows bad blocks within
    the range to be avoided.

HTH & Greets
Alex
quoted
Signed-off-by: Shiji Yang <redacted>
---
 .../devicetree/bindings/nvmem/layouts/u-boot,env.yaml      | 7 +++++++
 1 file changed, 7 insertions(+)
diff --git a/Documentation/devicetree/bindings/nvmem/layouts/u-boot,env.yaml b/Documentation/devicetree/bindings/nvmem/layouts/u-boot,env.yaml
index 56a8f55d4..e0b65a53e 100644
--- a/Documentation/devicetree/bindings/nvmem/layouts/u-boot,env.yaml
+++ b/Documentation/devicetree/bindings/nvmem/layouts/u-boot,env.yaml
@@ -46,6 +46,12 @@ properties:
     type: object
     description: Command to use for automatic booting
 
+  env-size:
+    $ref: /schemas/types.yaml#/definitions/uint32
+    description:
+      Size of the environment storage area in bytes. If this property
+      is not defined, the default size is the partition size.
+
   ethaddr:
     type: object
     description: Ethernet interfaces base MAC address.
@@ -85,6 +91,7 @@ examples:
         env: partition@40000 {
             compatible = "u-boot,env";
             reg = <0x40000 0x10000>;
+            env-size = <0x1000>;
 
             mac: ethaddr {
                 #nvmem-cell-cells = <1>;
-- 
2.50.0
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help