
Hi Heinrich,
On 23-08-26 15:10, Heinrich Schuchardt wrote:
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.
This will be limited to 32 bit only for platforms, that don't support 64 bit. These platforms explicitly defines #address-cells = 1 and #size-cells = 1 in root node.
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 is current behavior of Linux kernel. When root #address-cells and reserved-memory #address-cells don't match, then reserved-memory region is ignored. See [1].
dmesg output: ``` OF: fdt: Reserved memory: unsupported node format, ignoring ```
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?
It's entirely possible to do on platforms, that support that. Default fallback value is still 2 for #address-cells and #size-cells.
1. https://elixir.bootlin.com/linux/latest/source/drivers/of/fdt.c#L548