summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2019-07-20 12:23:48 -0600
committerSimon Glass <sjg@chromium.org>2019-07-29 09:38:06 -0600
commit02fd463cfeeb3ec693539885dbc58e0439d3b4de (patch)
tree0b3db4d028d93a8db31b07950d9e74efdd43781a
parent6ccbfcdd96b9eade93379ad00ee11c7d055d1690 (diff)
binman: Allow the fdtmap to remain unchanged
When updating an existing image where the size of all entries remains the same, we should not need to regenerate the fdtmap. Update the entry to return the same fdtmap as was read from the image. Signed-off-by: Simon Glass <sjg@chromium.org>
-rw-r--r--tools/binman/etype/fdtmap.py55
1 files changed, 30 insertions, 25 deletions
diff --git a/tools/binman/etype/fdtmap.py b/tools/binman/etype/fdtmap.py
index a55c9c899b..1271b50036 100644
--- a/tools/binman/etype/fdtmap.py
+++ b/tools/binman/etype/fdtmap.py
@@ -93,31 +93,36 @@ class Entry_fdtmap(Entry):
with fsw.add_node(subnode.name):
_AddNode(subnode)
- # Get the FDT data into an Fdt object
- data = state.GetFdtContents()[1]
- infdt = Fdt.FromData(data)
- infdt.Scan()
-
- # Find the node for the image containing the Fdt-map entry
- path = self.section.GetPath()
- self.Detail("Fdtmap: Using section '%s' (path '%s')" %
- (self.section.name, path))
- node = infdt.GetNode(path)
- if not node:
- self.Raise("Internal error: Cannot locate node for path '%s'" %
- path)
-
- # Build a new tree with all nodes and properties starting from that node
- fsw = libfdt.FdtSw()
- fsw.finish_reservemap()
- with fsw.add_node(''):
- fsw.property_string('image-node', node.name)
- _AddNode(node)
- fdt = fsw.as_fdt()
-
- # Pack this new FDT and return its contents
- fdt.pack()
- outfdt = Fdt.FromData(fdt.as_bytearray())
+ outfdt = self.GetImage().fdtmap_dtb
+ # If we have an fdtmap it means that we are using this as the
+ # read-only fdtmap for this image.
+ if not outfdt:
+ # Get the FDT data into an Fdt object
+ data = state.GetFdtContents()[1]
+ infdt = Fdt.FromData(data)
+ infdt.Scan()
+
+ # Find the node for the image containing the Fdt-map entry
+ path = self.section.GetPath()
+ self.Detail("Fdtmap: Using section '%s' (path '%s')" %
+ (self.section.name, path))
+ node = infdt.GetNode(path)
+ if not node:
+ self.Raise("Internal error: Cannot locate node for path '%s'" %
+ path)
+
+ # Build a new tree with all nodes and properties starting from that
+ # node
+ fsw = libfdt.FdtSw()
+ fsw.finish_reservemap()
+ with fsw.add_node(''):
+ fsw.property_string('image-node', node.name)
+ _AddNode(node)
+ fdt = fsw.as_fdt()
+
+ # Pack this new FDT and return its contents
+ fdt.pack()
+ outfdt = Fdt.FromData(fdt.as_bytearray())
data = FDTMAP_MAGIC + tools.GetBytes(0, 8) + outfdt.GetContents()
return data