mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-12-27 12:21:22 -05:00
nvmem: layouts: u-boot-env: add optional "env-size" property
Some devices reserve a larger NVMEM region for the U-Boot environment than the actual environment data length used by U-Boot itself. The CRC32 in the U-Boot header is calculated over the smaller data length, causing CRC validation to fail when Linux reads the full partition. Allow an optional device tree property "env-size" to specify the environment data size to use for CRC computation. v2: add missing $ref line to DT binding Signed-off-by: Jascha Sundaresan <flizarthanon@gmail.com> Reviewed-by: Rob Herring (Arm) <robh@kernel.org> Signed-off-by: Srinivas Kandagatla <srini@kernel.org> Link: https://patch.msgid.link/20251114110636.143268-5-srini@kernel.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
2f9fae5098
commit
5b2f8c133d
@@ -46,6 +46,12 @@ properties:
|
||||
type: object
|
||||
description: Command to use for automatic booting
|
||||
|
||||
env-size:
|
||||
description:
|
||||
Size in bytes of the environment data used by U-Boot for CRC
|
||||
calculation. If omitted, the full NVMEM region size is used.
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
|
||||
ethaddr:
|
||||
type: object
|
||||
description: Ethernet interfaces base MAC address.
|
||||
@@ -104,6 +110,7 @@ examples:
|
||||
|
||||
partition-u-boot-env {
|
||||
compatible = "brcm,env";
|
||||
env-size = <0x20000>;
|
||||
|
||||
ethaddr {
|
||||
};
|
||||
|
||||
@@ -99,10 +99,12 @@ int u_boot_env_parse(struct device *dev, struct nvmem_device *nvmem,
|
||||
uint32_t crc32;
|
||||
uint32_t calc;
|
||||
uint8_t *buf;
|
||||
u32 env_size;
|
||||
int bytes;
|
||||
int err;
|
||||
|
||||
dev_size = nvmem_dev_size(nvmem);
|
||||
dev_size = device_property_read_u32(dev, "env-size", &env_size) ?
|
||||
nvmem_dev_size(nvmem) : (size_t)env_size;
|
||||
|
||||
buf = kzalloc(dev_size, GFP_KERNEL);
|
||||
if (!buf) {
|
||||
|
||||
Reference in New Issue
Block a user