]> git.sur5r.net Git - u-boot/blobdiff - tools/dtoc/fdt.py
dtoc: Move a few more common functions into fdt.py
[u-boot] / tools / dtoc / fdt.py
index 964ef7cbb461dc7f1e6ef51e6226a7e97d129221..c0ce5af8ac50ee74bd758c17779747611fd16e48 100644 (file)
@@ -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@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@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
+