diff options
author | Simon Glass <sjg@chromium.org> | 2016-07-25 18:59:16 -0600 |
---|---|---|
committer | Simon Glass <sjg@chromium.org> | 2016-09-18 21:04:39 -0600 |
commit | babdbde68f1b993289462394f209f4010c761246 (patch) | |
tree | 4f058c7234cbb8ba2400447d9c9f8fabd6d85e8c | |
parent | da5f74998b9e5e6b706608a4ca625ef0ee195150 (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>
-rw-r--r-- | lib/libfdt/libfdt.swig | 3 | ||||
-rw-r--r-- | tools/dtoc/fdt.py | 11 | ||||
-rw-r--r-- | tools/dtoc/fdt_normal.py | 18 |
3 files changed, 32 insertions, 0 deletions
diff --git a/lib/libfdt/libfdt.swig b/lib/libfdt/libfdt.swig index 0cb7977ffe..b24c72b1a2 100644 --- a/lib/libfdt/libfdt.swig +++ b/lib/libfdt/libfdt.swig @@ -108,3 +108,6 @@ int fdt_delprop(void *fdt, int nodeoffset, const char *name); const char *fdt_strerror(int errval); int fdt_pack(void *fdt); + +int fdt_totalsize(const void *fdt); +int fdt_off_dt_struct(const void *fdt); 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 |