From f7a2aeeeb8d4bbbb9bfd788903942062c8535efb Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Mon, 25 Jul 2016 18:59:07 -0600 Subject: [PATCH] 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 --- 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 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. -- 2.39.5