[U-Boot] [PATCH 11/30] dtoc: Move a few more common functions into fdt.py

Simon Glass sjg at chromium.org
Tue Jul 26 02:59:07 CEST 2016


Some functions have the same code in the subclasses. Move these into the
superclass to avoid duplication.

Signed-off-by: Simon Glass <sjg at chromium.org>
---

 tools/dtoc/fdt.py          | 57 ++++++++++++++++++++++++++++++++++++++++++++++
 tools/dtoc/fdt_fallback.py | 16 -------------
 tools/dtoc/fdt_normal.py   | 16 -------------
 3 files changed, 57 insertions(+), 32 deletions(-)

diff --git a/tools/dtoc/fdt.py b/tools/dtoc/fdt.py
index 964ef7c..c0ce5af 100644
--- a/tools/dtoc/fdt.py
+++ b/tools/dtoc/fdt.py
@@ -164,6 +164,26 @@ class NodeBase:
         self.subnodes = []
         self.props = {}
 
+    def _FindNode(self, name):
+        """Find a node given its name
+
+        Args:
+            name: Node name to look for
+        Returns:
+            Node object if found, else None
+        """
+        for subnode in self.subnodes:
+            if subnode.name == name:
+                return subnode
+        return None
+
+    def Scan(self):
+        """Scan the subnodes of a node
+
+        This should be implemented by subclasses
+        """
+        raise NotImplementedError()
+
 class Fdt:
     """Provides simple access to a flat device tree blob.
 
@@ -173,3 +193,40 @@ class Fdt:
     """
     def __init__(self, fname):
         self._fname = fname
+
+    def Scan(self, root='/'):
+        """Scan a device tree, building up a tree of Node objects
+
+        This fills in the self._root property
+
+        Args:
+            root: Ignored
+
+        TODO(sjg at chromium.org): Implement the 'root' parameter
+        """
+        self._root = self.Node(self, 0, '/', '/')
+        self._root.Scan()
+
+    def GetRoot(self):
+        """Get the root Node of the device tree
+
+        Returns:
+            The root Node object
+        """
+        return self._root
+
+    def GetNode(self, path):
+        """Look up a node from its path
+
+        Args:
+            path: Path to look up, e.g. '/microcode/update at 0'
+        Returns:
+            Node object, or None if not found
+        """
+        node = self._root
+        for part in path.split('/')[1:]:
+            node = node._FindNode(part)
+            if not node:
+                return None
+        return node
+
diff --git a/tools/dtoc/fdt_fallback.py b/tools/dtoc/fdt_fallback.py
index 9a03b02..222fd27 100644
--- a/tools/dtoc/fdt_fallback.py
+++ b/tools/dtoc/fdt_fallback.py
@@ -80,22 +80,6 @@ class FdtFallback(Fdt):
     def __init__(self, fname):
         Fdt.__init__(self, fname)
 
-    def Scan(self):
-        """Scan a device tree, building up a tree of Node objects
-
-        This fills in the self._root property
-        """
-        self._root = Node(self, 0, '/', '/')
-        self._root.Scan()
-
-    def GetRoot(self):
-        """Get the root Node of the device tree
-
-        Returns:
-            The root Node object
-        """
-        return self._root
-
     def GetSubNodes(self, node):
         """Returns a list of sub-nodes of a given node
 
diff --git a/tools/dtoc/fdt_normal.py b/tools/dtoc/fdt_normal.py
index 6f019c1..861f60c 100644
--- a/tools/dtoc/fdt_normal.py
+++ b/tools/dtoc/fdt_normal.py
@@ -94,22 +94,6 @@ class FdtNormal(Fdt):
         """
         return self._fdt
 
-    def Scan(self):
-        """Scan a device tree, building up a tree of Node objects
-
-        This fills in the self._root property
-        """
-        self._root = Node(self, 0, '/', '/')
-        self._root.Scan()
-
-    def GetRoot(self):
-        """Get the root Node of the device tree
-
-        Returns:
-            The root Node object
-        """
-        return self._root
-
     def GetProps(self, node):
         """Get all properties from a node.
 
-- 
2.8.0.rc3.226.g39d4020



More information about the U-Boot mailing list