|
|
@@ -307,10 +307,11 @@ static int add_changeset_property(struct overlay_changeset *ovcs,
|
|
|
int ret = 0;
|
|
|
bool check_for_non_overlay_node = false;
|
|
|
|
|
|
- if (!of_prop_cmp(overlay_prop->name, "name") ||
|
|
|
- !of_prop_cmp(overlay_prop->name, "phandle") ||
|
|
|
- !of_prop_cmp(overlay_prop->name, "linux,phandle"))
|
|
|
- return 0;
|
|
|
+ if (target->in_livetree)
|
|
|
+ if (!of_prop_cmp(overlay_prop->name, "name") ||
|
|
|
+ !of_prop_cmp(overlay_prop->name, "phandle") ||
|
|
|
+ !of_prop_cmp(overlay_prop->name, "linux,phandle"))
|
|
|
+ return 0;
|
|
|
|
|
|
if (target->in_livetree)
|
|
|
prop = of_find_property(target->np, overlay_prop->name, NULL);
|
|
|
@@ -330,6 +331,10 @@ static int add_changeset_property(struct overlay_changeset *ovcs,
|
|
|
|
|
|
if (!prop) {
|
|
|
check_for_non_overlay_node = true;
|
|
|
+ if (!target->in_livetree) {
|
|
|
+ new_prop->next = target->np->deadprops;
|
|
|
+ target->np->deadprops = new_prop;
|
|
|
+ }
|
|
|
ret = of_changeset_add_property(&ovcs->cset, target->np,
|
|
|
new_prop);
|
|
|
} else if (!of_prop_cmp(prop->name, "#address-cells")) {
|
|
|
@@ -408,9 +413,10 @@ static int add_changeset_node(struct overlay_changeset *ovcs,
|
|
|
struct target *target, struct device_node *node)
|
|
|
{
|
|
|
const char *node_kbasename;
|
|
|
+ const __be32 *phandle;
|
|
|
struct device_node *tchild;
|
|
|
struct target target_child;
|
|
|
- int ret = 0;
|
|
|
+ int ret = 0, size;
|
|
|
|
|
|
node_kbasename = kbasename(node->full_name);
|
|
|
|
|
|
@@ -424,6 +430,19 @@ static int add_changeset_node(struct overlay_changeset *ovcs,
|
|
|
return -ENOMEM;
|
|
|
|
|
|
tchild->parent = target->np;
|
|
|
+ tchild->name = __of_get_property(node, "name", NULL);
|
|
|
+ tchild->type = __of_get_property(node, "device_type", NULL);
|
|
|
+
|
|
|
+ if (!tchild->name)
|
|
|
+ tchild->name = "<NULL>";
|
|
|
+ if (!tchild->type)
|
|
|
+ tchild->type = "<NULL>";
|
|
|
+
|
|
|
+ /* ignore obsolete "linux,phandle" */
|
|
|
+ phandle = __of_get_property(node, "phandle", &size);
|
|
|
+ if (phandle && (size == 4))
|
|
|
+ tchild->phandle = be32_to_cpup(phandle);
|
|
|
+
|
|
|
of_node_set_flag(tchild, OF_OVERLAY);
|
|
|
|
|
|
ret = of_changeset_attach_node(&ovcs->cset, tchild);
|