return false;
}
+/*
+ * Check if a node is a proper /memory node according to Devicetree
+ * Specification v0.4, chapter 3.4.
+ */
+static bool __init device_tree_is_memory_node(const void *fdt, int node,
+ int depth)
+{
+ const char *type;
+ int len;
+
+ if ( depth != 1 )
+ return false;
+
+ if ( !device_tree_node_matches(fdt, node, "memory") )
+ return false;
+
+ type = fdt_getprop(fdt, node, "device_type", &len);
+ if ( !type )
+ return false;
+
+ if ( (len <= strlen("memory")) || strcmp(type, "memory") )
+ return false;
+
+ return true;
+}
+
void __init device_tree_get_reg(const __be32 **cell, uint32_t address_cells,
uint32_t size_cells, paddr_t *start,
paddr_t *size)
* populated. So we should skip the parsing.
*/
if ( !efi_enabled(EFI_BOOT) &&
- device_tree_node_matches(fdt, node, "memory") )
+ device_tree_is_memory_node(fdt, node, depth) )
rc = process_memory_node(fdt, node, name, depth,
address_cells, size_cells, bootinfo_get_mem());
else if ( depth == 1 && !dt_node_cmp(name, "reserved-memory") )