summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2016-07-25 18:59:16 -0600
committerSimon Glass <sjg@chromium.org>2016-09-18 21:04:39 -0600
commitbabdbde68f1b993289462394f209f4010c761246 (patch)
tree4f058c7234cbb8ba2400447d9c9f8fabd6d85e8c /tools
parentda5f74998b9e5e6b706608a4ca625ef0ee195150 (diff)
dtoc: Support finding the offset of a property
Add a way to find the byte offset of a property within the device tree. This is only supported with the normal libfdt implementation since fdtget does not provide this information. Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'tools')
-rw-r--r--tools/dtoc/fdt.py11
-rw-r--r--tools/dtoc/fdt_normal.py18
2 files changed, 29 insertions, 0 deletions
diff --git a/tools/dtoc/fdt.py b/tools/dtoc/fdt.py
index 403eb1fe6d..816fdbe525 100644
--- a/tools/dtoc/fdt.py
+++ b/tools/dtoc/fdt.py
@@ -144,6 +144,17 @@ class PropBase:
else:
return True
+ def GetOffset(self):
+ """Get the offset of a property
+
+ This can be implemented by subclasses.
+
+ Returns:
+ The offset of the property (struct fdt_property) within the
+ file, or None if not known.
+ """
+ return None
+
class NodeBase:
"""A device tree node
diff --git a/tools/dtoc/fdt_normal.py b/tools/dtoc/fdt_normal.py
index f2cf608b1e..aae258e412 100644
--- a/tools/dtoc/fdt_normal.py
+++ b/tools/dtoc/fdt_normal.py
@@ -43,6 +43,14 @@ class Prop(PropBase):
return
self.type, self.value = self.BytesToValue(bytes)
+ def GetOffset(self):
+ """Get the offset of a property
+
+ Returns:
+ The offset of the property (struct fdt_property) within the file
+ """
+ return self._node._fdt.GetStructOffset(self._offset)
+
class Node(NodeBase):
"""A device tree node
@@ -193,6 +201,16 @@ class FdtNormal(Fdt):
"""Refresh the offset cache"""
self._root.Refresh(0)
+ def GetStructOffset(self, offset):
+ """Get the file offset of a given struct offset
+
+ Args:
+ offset: Offset within the 'struct' region of the device tree
+ Returns:
+ Position of @offset within the device tree binary
+ """
+ return libfdt.fdt_off_dt_struct(self._fdt) + offset
+
@classmethod
def Node(self, fdt, offset, name, path):
"""Create a new node