aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrank Rowand <frank.rowand@sony.com>2017-07-19 12:25:21 -0400
committerRob Herring <robh@kernel.org>2017-07-20 10:36:15 -0400
commitc1cd1e01fece0c139a7946c14b788f887d8b658a (patch)
tree68c3a0d182a1bc06b25638fb72c5cb468692fd8e
parent60a0004cc9d66193ad9f1443315f52ec1086e25e (diff)
of: overlay: correctly apply overlay node with unit-address
Correct existing node name detection when overlay node name has a unit-address. Expected test result is overlay will update the nodes and properties for /testcase-data-2/fairway-1/ride@100/ after this commit. Before this commit: Console error message near end of unittest: OF: Duplicate name in fairway-1, renamed to "ride@100#1" $ cd /proc/device-tree/testcase-data-2/fairway-1/ $ # extra node: ride@100#1 $ ls #address-cells linux,phandle phandle ride@200 #size-cells name ride@100 status compatible orientation ride@100#1 $ cd /proc/device-tree/testcase-data-2/fairway-1/ride@100/ $ ls track@30/incline-up ls: track@30/incline-up: No such file or directory $ ls track@40/incline-up ls: track@40/incline-up: No such file or directory After this commit: Console error message no longer occurs $ cd /proc/device-tree/testcase-data-2/fairway-1/ $ # no extra node: ride@100#1 $ ls #address-cells compatible name phandle ride@200 #size-cells linux,phandle orientation ride@100 status $ cd /proc/device-tree/testcase-data-2/fairway-1/ride@100/ $ ls track@30/incline-up track@30/incline-up $ ls track@40/incline-up track@40/incline-up Signed-off-by: Frank Rowand <frank.rowand@sony.com> Signed-off-by: Rob Herring <robh@kernel.org>
-rw-r--r--drivers/of/overlay.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/of/overlay.c b/drivers/of/overlay.c
index 0ddffebd7838..fbe1980accb6 100644
--- a/drivers/of/overlay.c
+++ b/drivers/of/overlay.c
@@ -130,7 +130,10 @@ static int of_overlay_apply_single_device_node(struct of_overlay *ov,
130 return -ENOMEM; 130 return -ENOMEM;
131 131
132 /* NOTE: Multiple mods of created nodes not supported */ 132 /* NOTE: Multiple mods of created nodes not supported */
133 tchild = of_get_child_by_name(target, cname); 133 for_each_child_of_node(target, tchild)
134 if (!of_node_cmp(cname, kbasename(tchild->full_name)))
135 break;
136
134 if (tchild != NULL) { 137 if (tchild != NULL) {
135 /* new overlay phandle value conflicts with existing value */ 138 /* new overlay phandle value conflicts with existing value */
136 if (child->phandle) 139 if (child->phandle)