[PATCH] pstore: Use root address-cells/size-cells as defaults for reserved-memory

Heinrich Schuchardt xypron.glpk at gmx.de
Sat Aug 26 15:10:10 CEST 2023


On 8/26/23 14:16, Andrey Skvortsov wrote:
> u-boot adds reserve-memory node, if it's missing, with following
> properties:
>
> ```
>      reserved-memory {
>           #address-cells = <2>;
>           #size-cells = <2>;

This defines the size of cells for the children of reserved-memory and
and for the ranges property. If you set the cell sizes to 1 you can no
longer encode 64 bit addresses.

>           ranges;
>      }
> ```
>
> But with these default address-cells and size-cells values, pstore
> isn't working on A64. Root node for A64 defines 'address-cells' and
> 'size-cells' as 1.
>
> dtc complains if reserved-memory has different address-cells and
> size-cells.
>
> ```
>       Warning (ranges_format): /reserved-memory:ranges: empty "ranges"
>       property but its #address-cells (2) differs from / (1)

I cannot find any such requirement in the Devicetree Specification 1.4.
Is this a dtc bug?

> ```
>
> This patch takes into account address-cells and size-cells of the root
> node and uses them as values for new reserved-memory node.

Reservations may be above 4 GiB. How does your patch consider this?

Best regards

Heinrich

>
> Signed-off-by: Andrey Skvortsov <andrej.skvortzov at gmail.com>
> ---
>   cmd/pstore.c | 10 ++++++++--
>   1 file changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/cmd/pstore.c b/cmd/pstore.c
> index cd6f6feb2f..9795eea2db 100644
> --- a/cmd/pstore.c
> +++ b/cmd/pstore.c
> @@ -486,6 +486,8 @@ void fdt_fixup_pstore(void *blob)
>   {
>   	char node[32];
>   	int  nodeoffset;	/* node offset from libfdt */
> +	u32 addr_cells_root;
> +	u32 size_cells_root;
>   	u32 addr_cells;
>   	u32 size_cells;
>
> @@ -495,6 +497,8 @@ void fdt_fixup_pstore(void *blob)
>   		log_err("fdt_path_offset() returned %s\n", fdt_strerror(nodeoffset));
>   		return;
>   	}
> +	addr_cells_root = fdt_getprop_u32_default_node(blob, nodeoffset, 0, "#address-cells", 2);
> +	size_cells_root = fdt_getprop_u32_default_node(blob, nodeoffset, 0, "#size-cells", 2);
>
>   	nodeoffset = fdt_find_or_add_subnode(blob, nodeoffset, "reserved-memory");
>   	if (nodeoffset < 0) {
> @@ -503,8 +507,10 @@ void fdt_fixup_pstore(void *blob)
>   		return;
>   	}
>
> -	addr_cells = fdt_getprop_u32_default_node(blob, nodeoffset, 0, "#address-cells", 2);
> -	size_cells = fdt_getprop_u32_default_node(blob, nodeoffset, 0, "#size-cells", 2);
> +	addr_cells = fdt_getprop_u32_default_node(blob, nodeoffset, 0,
> +						  "#address-cells", addr_cells_root);
> +	size_cells = fdt_getprop_u32_default_node(blob, nodeoffset, 0,
> +						  "#size-cells", size_cells_root);
>   	fdt_setprop_u32(blob, nodeoffset, "#address-cells", addr_cells);
>   	fdt_setprop_u32(blob, nodeoffset, "#size-cells", size_cells);
>



More information about the U-Boot mailing list