summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/libfdt/libfdt.swig1
-rw-r--r--tools/dtoc/fdt.py16
-rw-r--r--tools/dtoc/fdt_normal.py11
3 files changed, 28 insertions, 0 deletions
diff --git a/lib/libfdt/libfdt.swig b/lib/libfdt/libfdt.swig
index ce516fddf2..0cb7977ffe 100644
--- a/lib/libfdt/libfdt.swig
+++ b/lib/libfdt/libfdt.swig
@@ -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);
diff --git a/tools/dtoc/fdt.py b/tools/dtoc/fdt.py
index f01c7b18ea..403eb1fe6d 100644
--- a/tools/dtoc/fdt.py
+++ b/tools/dtoc/fdt.py
@@ -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
diff --git a/tools/dtoc/fdt_normal.py b/tools/dtoc/fdt_normal.py
index 52d80555ab..f2cf608b1e 100644
--- a/tools/dtoc/fdt_normal.py
+++ b/tools/dtoc/fdt_normal.py
@@ -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.