@@ -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
+
@@ -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
@@ -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.
Some functions have the same code in the subclasses. Move these into the superclass to avoid duplication. Signed-off-by: Simon Glass <sjg@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(-)