diff mbox

[U-Boot,20/30] dtoc: Support finding the offset of a property

Message ID 1469494766-26601-21-git-send-email-sjg@chromium.org
State Accepted
Commit babdbde68f1b993289462394f209f4010c761246
Delegated to: Simon Glass
Headers show

Commit Message

Simon Glass July 26, 2016, 12:59 a.m. UTC
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>
---

 lib/libfdt/libfdt.swig   |  3 +++
 tools/dtoc/fdt.py        | 11 +++++++++++
 tools/dtoc/fdt_normal.py | 18 ++++++++++++++++++
 3 files changed, 32 insertions(+)

Comments

Simon Glass Aug. 27, 2016, 4:06 p.m. UTC | #1
On 25 July 2016 at 18:59, Simon Glass <sjg@chromium.org> wrote:
> 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>
> ---
>
>  lib/libfdt/libfdt.swig   |  3 +++
>  tools/dtoc/fdt.py        | 11 +++++++++++
>  tools/dtoc/fdt_normal.py | 18 ++++++++++++++++++
>  3 files changed, 32 insertions(+)

Applied to u-boot-dm/next.
diff mbox

Patch

diff --git a/lib/libfdt/libfdt.swig b/lib/libfdt/libfdt.swig
index 0cb7977..b24c72b 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 403eb1f..816fdbe 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 f2cf608..aae258e 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