summaryrefslogtreecommitdiff
path: root/tools/dtoc
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2016-07-25 18:59:07 -0600
committerSimon Glass <sjg@chromium.org>2016-09-18 21:04:38 -0600
commitf7a2aeeeb8d4bbbb9bfd788903942062c8535efb (patch)
tree6b3a40e80838d7c733894379baf4df4eb81da90e /tools/dtoc
parentc322a850affaf18f3833b3316292c91007c4b5d8 (diff)
dtoc: Move a few more common functions into fdt.py
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>
Diffstat (limited to 'tools/dtoc')
-rw-r--r--tools/dtoc/fdt.py57
-rw-r--r--tools/dtoc/fdt_fallback.py16
-rw-r--r--tools/dtoc/fdt_normal.py16
3 files changed, 57 insertions, 32 deletions
diff --git a/tools/dtoc/fdt.py b/tools/dtoc/fdt.py
index 964ef7cbb4..c0ce5af8ac 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@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
+
diff --git a/tools/dtoc/fdt_fallback.py b/tools/dtoc/fdt_fallback.py
index 84a3db1e78..5b0f2a181b 100644
--- a/tools/dtoc/fdt_fallback.py
+++ b/tools/dtoc/fdt_fallback.py
@@ -81,22 +81,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 6f019c1f12..861f60c7d0 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.