diff options
author | Simon Glass <sjg@chromium.org> | 2016-07-25 18:59:15 -0600 |
---|---|---|
committer | Simon Glass <sjg@chromium.org> | 2016-09-18 21:04:39 -0600 |
commit | da5f74998b9e5e6b706608a4ca625ef0ee195150 (patch) | |
tree | 2c628a3eafc53e5976da64efef57569462595ab5 | |
parent | 2a70d897ed68fd521411a10831ac05e1ffdd3d41 (diff) |
dtoc: Support packing the device tree
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>
-rw-r--r-- | lib/libfdt/libfdt.swig | 1 | ||||
-rw-r--r-- | tools/dtoc/fdt.py | 16 | ||||
-rw-r--r-- | tools/dtoc/fdt_normal.py | 11 |
3 files changed, 28 insertions, 0 deletions
diff --git a/lib/libfdt/libfdt.swig b/lib/libfdt/libfdt.swig index ce516fddf22..0cb7977ffe5 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 f01c7b18ea9..403eb1fe6d0 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 52d80555ab9..f2cf608b1e8 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. |