Index: sys/stand/efiboot/efifdt.c =================================================================== RCS file: /cvsroot/src/sys/stand/efiboot/efifdt.c,v retrieving revision 1.27 diff -u -p -r1.27 efifdt.c --- sys/stand/efiboot/efifdt.c 22 Oct 2020 09:28:30 -0000 1.27 +++ sys/stand/efiboot/efifdt.c 17 Dec 2020 10:46:25 -0000 @@ -252,10 +252,15 @@ efi_fdt_memory_map(void) memmap = LibMemoryMap(&nentries, &mapkey, &descsize, &descver); for (n = 0, md = memmap; n < nentries; n++, md = NextMemoryDescriptor(md, descsize)) { - fdt_appendprop_u32(fdt_data, fdt_path_offset(fdt_data, FDT_CHOSEN_NODE_PATH), "netbsd,uefi-memmap", md->Type); - fdt_appendprop_u64(fdt_data, fdt_path_offset(fdt_data, FDT_CHOSEN_NODE_PATH), "netbsd,uefi-memmap", md->PhysicalStart); - fdt_appendprop_u64(fdt_data, fdt_path_offset(fdt_data, FDT_CHOSEN_NODE_PATH), "netbsd,uefi-memmap", md->NumberOfPages); - fdt_appendprop_u64(fdt_data, fdt_path_offset(fdt_data, FDT_CHOSEN_NODE_PATH), "netbsd,uefi-memmap", md->Attribute); + /* + * grab the chosen node again as it might have changed if/when + * adding to the memory node + */ + chosen = efi_fdt_chosen(); + fdt_appendprop_u32(fdt_data, chosen, "netbsd,uefi-memmap", md->Type); + fdt_appendprop_u64(fdt_data, chosen, "netbsd,uefi-memmap", md->PhysicalStart); + fdt_appendprop_u64(fdt_data, chosen, "netbsd,uefi-memmap", md->NumberOfPages); + fdt_appendprop_u64(fdt_data, chosen, "netbsd,uefi-memmap", md->Attribute); if ((md->Attribute & EFI_MEMORY_RUNTIME) != 0) continue; @@ -274,25 +279,26 @@ efi_fdt_memory_map(void) if (phys_start & EFI_PAGE_MASK) { /* UEFI spec says these should be 4KB aligned, but U-Boot doesn't always.. */ - phys_start = (phys_start + EFI_PAGE_SIZE) & ~EFI_PAGE_MASK; + phys_start = (phys_start + EFI_PAGE_MASK) & ~EFI_PAGE_MASK; phys_size -= (EFI_PAGE_SIZE * 2); if (phys_size == 0) continue; } + int memory = fdt_path_offset(fdt_data, FDT_MEMORY_NODE_PATH); if (address_cells == 1) - fdt_appendprop_u32(fdt_data, fdt_path_offset(fdt_data, FDT_MEMORY_NODE_PATH), - "reg", (uint32_t)phys_start); + fdt_appendprop_u32(fdt_data, memory, "reg", + (uint32_t)phys_start); else - fdt_appendprop_u64(fdt_data, fdt_path_offset(fdt_data, FDT_MEMORY_NODE_PATH), - "reg", phys_start); + fdt_appendprop_u64(fdt_data, memory, "reg", + phys_start); if (size_cells == 1) - fdt_appendprop_u32(fdt_data, fdt_path_offset(fdt_data, FDT_MEMORY_NODE_PATH), - "reg", (uint32_t)phys_size); + fdt_appendprop_u32(fdt_data, memory, "reg", + (uint32_t)phys_size); else - fdt_appendprop_u64(fdt_data, fdt_path_offset(fdt_data, FDT_MEMORY_NODE_PATH), - "reg", phys_size); + fdt_appendprop_u64(fdt_data, memory, "reg", + phys_size); } }