summaryrefslogtreecommitdiffstats
path: root/hdata
diff options
context:
space:
mode:
Diffstat (limited to 'hdata')
-rw-r--r--hdata/memory.c43
1 files changed, 3 insertions, 40 deletions
diff --git a/hdata/memory.c b/hdata/memory.c
index a36337b2..3e627144 100644
--- a/hdata/memory.c
+++ b/hdata/memory.c
@@ -68,32 +68,6 @@ struct HDIF_ms_area_id {
__be16 share_id;
} __packed;
-static struct dt_node *find_shared(struct dt_node *root, u16 id, u64 start, u64 len)
-{
- struct dt_node *i;
-
- for (i = dt_first(root); i; i = dt_next(root, i)) {
- __be64 reg[2];
- const struct dt_property *shared, *type, *region;
-
- type = dt_find_property(i, "device_type");
- if (!type || strcmp(type->prop, "memory") != 0)
- continue;
-
- shared = dt_find_property(i, DT_PRIVATE "share-id");
- if (!shared || fdt32_to_cpu(*(u32 *)shared->prop) != id)
- continue;
-
- region = dt_find_property(i, "reg");
- if (!region)
- continue;
- memcpy(reg, region->prop, sizeof(reg));
- if (be64_to_cpu(reg[0]) == start && be64_to_cpu(reg[1]) == len)
- break;
- }
- return i;
-}
-
static void append_chip_id(struct dt_node *mem, u32 id)
{
struct dt_property *prop;
@@ -123,13 +97,8 @@ static bool add_address_range(struct dt_node *root,
const struct HDIF_ms_area_address_range *arange)
{
struct dt_node *mem;
+ u32 chip_id, type;
u64 reg[2];
- char *name;
- u32 chip_id;
- size_t namesz = sizeof("memory@") + STR_MAX_CHARS(reg[0]);
-
- name = (char*)malloc(namesz);
- assert(name);
chip_id = pcid_to_chip_id(be32_to_cpu(arange->chip));
@@ -144,18 +113,14 @@ static bool add_address_range(struct dt_node *root,
reg[1] = cleanup_addr(be64_to_cpu(arange->end)) - reg[0];
if (be16_to_cpu(id->flags) & MS_AREA_SHARED) {
- /* Only enter shared nodes once. */
- mem = find_shared(root, be16_to_cpu(id->share_id),
- reg[0], reg[1]);
+ mem = dt_find_by_name_addr("memory", reg[0]);
if (mem) {
append_chip_id(mem, chip_id);
- free(name);
return true;
}
}
- snprintf(name, namesz, "memory@%llx", (long long)reg[0]);
- mem = dt_new(root, name);
+ mem = dt_new_addr(root, name, reg[0]);
dt_add_property_string(mem, "device_type", "memory");
dt_add_property_cells(mem, "ibm,chip-id", chip_id);
dt_add_property_u64s(mem, "reg", reg[0], reg[1]);
@@ -163,8 +128,6 @@ static bool add_address_range(struct dt_node *root,
dt_add_property_cells(mem, DT_PRIVATE "share-id",
be16_to_cpu(id->share_id));
- free(name);
-
return true;
}
OpenPOWER on IntegriCloud