On the ThunderX, the FDT provides NUMA locality info in the device nodes
corresponding to ranges of physical memory. This change follows the
example of the x86 SRAT parsing code and uses a SYSINIT to search for
this info and populate the mem_info table before the VM is initialized.
I refactored fdt_get_mem_regions() to avoid duplicating code. In so
doing, I changed it to iterate over all children of the root node, since
multiple memory nodes may exist. (This is akin to ofw_mem_regions() in
the powerpc platform code.) On the ThunderX we use the memory map from
EFI to populate phys_avail, so this problem wasn't noticed.
I don't attempt anything like renumber_domains() in the x86 code, since
there are multiple devices with a numa-node-id property, and we don't
perform that compaction elsewhere.