[PATCH 11/12] dtoc: Allow inserting a list of nodes into another
Simon Glass
sjg at chromium.org
Wed Jun 28 13:41:44 CEST 2023
Provide a way to specify a phandle list of nodes which are to be inserted
into an existing node.
Signed-off-by: Simon Glass <sjg at chromium.org>
---
tools/dtoc/fdt.py | 16 ++++++++++++++++
tools/dtoc/test/dtoc_test_simple.dts | 10 ++++++++--
tools/dtoc/test_fdt.py | 18 ++++++++++++++++++
3 files changed, 42 insertions(+), 2 deletions(-)
diff --git a/tools/dtoc/fdt.py b/tools/dtoc/fdt.py
index fcf229f83036..4ff55a47b6f1 100644
--- a/tools/dtoc/fdt.py
+++ b/tools/dtoc/fdt.py
@@ -657,6 +657,22 @@ class Node:
for node in src.subnodes:
dst.copy_node(node)
+ def copy_subnodes_from_phandles(self, phandle_list):
+ """Copy subnodes of a list of nodes into another node
+
+ Args:
+ phandle_list (list of int): List of phandles of nodes to copy
+
+ For each node in the phandle list, its subnodes and their properties are
+ copied recursively. Note that it does not copy the node itself, nor its
+ properties.
+ """
+ for phandle in phandle_list:
+ parent = self.GetFdt().LookupPhandle(phandle)
+ tout.debug(f'adding template {parent.path} to node {self.path}')
+ for node in parent.subnodes:
+ self.copy_node(node)
+
class Fdt:
"""Provides simple access to a flat device tree blob using libfdts.
diff --git a/tools/dtoc/test/dtoc_test_simple.dts b/tools/dtoc/test/dtoc_test_simple.dts
index c51f1a5908ce..f7ad445574d2 100644
--- a/tools/dtoc/test/dtoc_test_simple.dts
+++ b/tools/dtoc/test/dtoc_test_simple.dts
@@ -50,7 +50,7 @@
};
};
- i2c at 0 {
+ i2c: i2c at 0 {
compatible = "sandbox,i2c";
bootph-all;
#address-cells = <1>;
@@ -63,10 +63,16 @@
};
};
- orig-node {
+ orig: orig-node {
orig = <1 23 4>;
args = "-n first", "second", "-p", "123,456", "-x";
args2 = "a space", "there";
args3 = "-n first second -p 123,456 -x";
+
+ copy-list = <&i2c &orig>;
+
+ subnode {
+ a-prop;
+ };
};
};
diff --git a/tools/dtoc/test_fdt.py b/tools/dtoc/test_fdt.py
index 5d9d99eb384b..6d96270d539e 100755
--- a/tools/dtoc/test_fdt.py
+++ b/tools/dtoc/test_fdt.py
@@ -349,6 +349,24 @@ class TestNode(unittest.TestCase):
self.dtb.Sync(auto_resize=True)
+ def test_copy_subnodes_from_phandles(self):
+ """Test copy_node() function"""
+ pmic = self.dtb.GetNode('/spl-test3/i2c at 0/pmic at 9')
+ self.assertIsNone(pmic)
+
+ orig = self.dtb.GetNode('/orig-node')
+ node_list = fdt_util.GetPhandleList(orig, 'copy-list')
+
+ dst = self.dtb.GetNode('/spl-test3')
+ dst.copy_subnodes_from_phandles(node_list)
+
+ pmic = self.dtb.GetNode('/spl-test3/pmic at 9')
+ self.assertTrue(pmic)
+
+ subn = self.dtb.GetNode('/spl-test3/subnode')
+ self.assertTrue(subn)
+ self.assertEqual({'a-prop'}, subn.props.keys())
+
class TestProp(unittest.TestCase):
"""Test operation of the Prop class"""
--
2.41.0.162.gfafddb0af9-goog
More information about the U-Boot
mailing list