Since kernel 4.16 the memory nodes got a @<reg> suffix so the fixup won't work correctly anymore, because instead of adapting the extisting one it creates a new node. To be compatible with the old and new layout delete the found memory node and create a new one. The new node follows the new @<reg> style. The patch also renames the node element to root to make it more clear. Signed-off-by: Marco Felsch <m.felsch@xxxxxxxxxxxxxx> --- common/memory.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/common/memory.c b/common/memory.c index 00fa7c50ff..5402acab8e 100644 --- a/common/memory.c +++ b/common/memory.c @@ -224,7 +224,7 @@ int memory_bank_first_find_space(resource_size_t *retstart, #ifdef CONFIG_OFTREE -static int of_memory_fixup(struct device_node *node, void *unused) +static int of_memory_fixup(struct device_node *root, void *unused) { struct memory_bank *bank; int err; @@ -232,7 +232,23 @@ static int of_memory_fixup(struct device_node *node, void *unused) struct device_node *memnode; u8 tmp[16 * 16]; /* Up to 64-bit address + 64-bit size */ - memnode = of_create_node(node, "/memory"); + /* + * Since kernel 4.16 the memory node got a @<reg> suffix. To support + * the old and the new style delete any found memory node and add it + * again to be sure that the memory node exists only once. It shouldn't + * bother older kernels if the memory node has this suffix so adding it + * following the new style. + */ + + memnode = of_find_node_by_name(root, "memory"); + if (!memnode) + memnode = of_find_node_by_type(root, "memory"); + + if (memnode) + of_delete_node(memnode); + + /* At this moment we don't know the <reg> val */ + memnode = of_create_node(root, "/memory"); if (!memnode) return -ENOMEM; @@ -256,6 +272,10 @@ static int of_memory_fixup(struct device_node *node, void *unused) return err; } + /* now adapt the node name */ + of_rename_node(memnode, basprintf("memory@%llx", + of_read_number((u32 *)tmp, addr_cell_len))); + return 0; } -- 2.20.1 _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox