binman: Update IFWI entry to support updates
authorSimon Glass <sjg@chromium.org>
Sat, 24 Aug 2019 13:23:10 +0000 (07:23 -0600)
committerSimon Glass <sjg@chromium.org>
Tue, 15 Oct 2019 14:40:02 +0000 (08:40 -0600)
Add support for the ProcessContents() method in this entry so that it is
possible to support entries which change after initial creation.

Signed-off-by: Simon Glass <sjg@chromium.org>
tools/binman/etype/intel_ifwi.py

index ef2b35706fc790e5148f674e2c84942a6e0e8a59..17792defe9a0a377c6ffbd33b3d21d1ce022f7a7 100644 (file)
@@ -53,22 +53,8 @@ class Entry_intel_ifwi(Entry_blob):
         self._ReadSubnodes()
         Entry_blob.ReadNode(self)
 
-    def ObtainContents(self):
-        """Get the contects for the IFWI
-
-        Unfortunately we cannot create anything from scratch here, as Intel has
-        tools which create precursor binaries with lots of data and settings,
-        and these are not incorporated into binman.
-
-        The first step is to get a file in the IFWI format. This is either
-        supplied directly or is extracted from a fitimage using the 'create'
-        subcommand.
-
-        After that we delete the OBBP sub-partition and add each of the files
-        that we want in the IFWI file, one for each sub-entry of the IWFI node.
-        """
-        self._pathname = tools.GetInputFilename(self._filename)
-
+    def _BuildIfwi(self):
+        """Build the contents of the IFWI and write it to the 'data' property"""
         # Create the IFWI file if needed
         if self._convert_fit:
             inname = self._pathname
@@ -85,8 +71,6 @@ class Entry_intel_ifwi(Entry_blob):
 
         for entry in self._ifwi_entries.values():
             # First get the input data and put it in a file
-            if not entry.ObtainContents():
-                return False
             data = entry.GetData()
             uniq = self.GetUniqueName()
             input_fname = tools.GetOutputFilename('input.%s' % uniq)
@@ -99,6 +83,32 @@ class Entry_intel_ifwi(Entry_blob):
         self.ReadBlobContents()
         return True
 
+    def ObtainContents(self):
+        """Get the contects for the IFWI
+
+        Unfortunately we cannot create anything from scratch here, as Intel has
+        tools which create precursor binaries with lots of data and settings,
+        and these are not incorporated into binman.
+
+        The first step is to get a file in the IFWI format. This is either
+        supplied directly or is extracted from a fitimage using the 'create'
+        subcommand.
+
+        After that we delete the OBBP sub-partition and add each of the files
+        that we want in the IFWI file, one for each sub-entry of the IWFI node.
+        """
+        self._pathname = tools.GetInputFilename(self._filename)
+        for entry in self._ifwi_entries.values():
+            if not entry.ObtainContents():
+                return False
+        return self._BuildIfwi()
+
+    def ProcessContents(self):
+        orig_data = self.data
+        self._BuildIfwi()
+        same = orig_data == self.data
+        return same
+
     def _ReadSubnodes(self):
         """Read the subnodes to find out what should go in this IFWI"""
         for node in self._node.subnodes: