[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