]> git.sur5r.net Git - u-boot/commitdiff
dtoc: Support packing the device tree
authorSimon Glass <sjg@chromium.org>
Tue, 26 Jul 2016 00:59:15 +0000 (18:59 -0600)
committerSimon Glass <sjg@chromium.org>
Mon, 19 Sep 2016 03:04:39 +0000 (21:04 -0600)
After any node/property deletion the device tree can be packed to remove
spare space. Add a way to perform this operation.

Note that for fdt_fallback, fdtput automatically packs the device tree after
deletion, so no action is required here.

Signed-off-by: Simon Glass <sjg@chromium.org>
lib/libfdt/libfdt.swig
tools/dtoc/fdt.py
tools/dtoc/fdt_normal.py

index ce516fddf22613b51f7f73ec7a314bb5a597409d..0cb7977ffe5ebeec6cb2baf2216cd48fa4e42af7 100644 (file)
@@ -107,3 +107,4 @@ int fdt_next_subnode(const void *fdt, int offset);
 int fdt_delprop(void *fdt, int nodeoffset, const char *name);
 
 const char *fdt_strerror(int errval);
+int fdt_pack(void *fdt);
index f01c7b18ea9c8d8df0caf3e8979aa8c24eb5a384..403eb1fe6d0507d0233d2563fe8089d760f34823 100644 (file)
@@ -240,3 +240,19 @@ class Fdt:
                 return None
         return node
 
+    def Flush(self):
+        """Flush device tree changes back to the file
+
+        If the device tree has changed in memory, write it back to the file.
+        Subclasses can implement this if needed.
+        """
+        pass
+
+    def Pack(self):
+        """Pack the device tree down to its minimum size
+
+        When nodes and properties shrink or are deleted, wasted space can
+        build up in the device tree binary. Subclasses can implement this
+        to remove that spare space.
+        """
+        pass
index 52d80555ab9c8eec53ce3a710684084846f5b0c1..f2cf608b1e881c7e778844251f39c055bd96cfe9 100644 (file)
@@ -140,6 +140,17 @@ class FdtNormal(Fdt):
         """
         return self._fdt
 
+    def Flush(self):
+        """Flush device tree changes back to the file"""
+        with open(self._fname, 'wb') as fd:
+            fd.write(self._fdt)
+
+    def Pack(self):
+        """Pack the device tree down to its minimum size"""
+        CheckErr(libfdt.fdt_pack(self._fdt), 'pack')
+        fdt_len = libfdt.fdt_totalsize(self._fdt)
+        del self._fdt[fdt_len:]
+
     def GetProps(self, node, path):
         """Get all properties from a node.