From: Simon Glass <sjg@chromium.org>
Date: Mon, 10 Jan 2022 03:13:46 +0000 (-0700)
Subject: binman: Allow faked blobs in blob-ext-list
X-Git-Tag: v2025.01-rc5-pxa1908~1562^2~42
X-Git-Url: http://git.dujemihanovic.xyz/browse.php?a=commitdiff_plain;h=f4590e02c133e7a971bb425d1e83c7ab0cdbf64a;p=u-boot.git

binman: Allow faked blobs in blob-ext-list

Since this is a list of blobs, each blob should have the ability to be
faked, as with blob-ext. Update the Entry base class to set allow_fake
and use the base class in the section code also, so that this propagagtes
to blob-ext-list, which is not a section.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

diff --git a/tools/binman/entry.py b/tools/binman/entry.py
index bac90bbbcd..e4a1f2d5d5 100644
--- a/tools/binman/entry.py
+++ b/tools/binman/entry.py
@@ -960,7 +960,7 @@ features to produce new behaviours.
         Args:
             allow_fake: True if allowed, False if not allowed
         """
-        pass
+        self.allow_fake = allow_fake
 
     def CheckMissing(self, missing_list):
         """Check if any entries in this section have missing external blobs
diff --git a/tools/binman/etype/blob_ext_list.py b/tools/binman/etype/blob_ext_list.py
index 136ae81994..29c9092dc3 100644
--- a/tools/binman/etype/blob_ext_list.py
+++ b/tools/binman/etype/blob_ext_list.py
@@ -37,6 +37,7 @@ class Entry_blob_ext_list(Entry_blob):
         missing = False
         pathnames = []
         for fname in self._filenames:
+            fname = self.check_fake_fname(fname)
             pathname = tools.GetInputFilename(
                 fname, self.external and self.section.GetAllowMissing())
             # Allow the file to be missing
diff --git a/tools/binman/etype/section.py b/tools/binman/etype/section.py
index 7a55d03231..fdd4cbb21a 100644
--- a/tools/binman/etype/section.py
+++ b/tools/binman/etype/section.py
@@ -805,6 +805,7 @@ class Entry_section(Entry):
         Args:
             allow_fake_blob: True if allowed, False if not allowed
         """
+        super().SetAllowFakeBlob(allow_fake)
         for entry in self._entries.values():
             entry.SetAllowFakeBlob(allow_fake)
 
diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py
index 6a7647311b..ac6aabbf9c 100644
--- a/tools/binman/ftest.py
+++ b/tools/binman/ftest.py
@@ -4982,6 +4982,14 @@ fdt         fdtmap                Extract the devicetree blob from the fdtmap
             err,
             "Image '.*' has faked external blobs and is non-functional: .*")
 
+    def testExtblobListFaked(self):
+        """Test an extblob with missing external blob that are faked"""
+        with test_util.capture_sys_output() as (stdout, stderr):
+            self._DoTestFile('216_blob_ext_list_missing.dts',
+                             allow_fake_blobs=True)
+        err = stderr.getvalue()
+        self.assertRegex(err, "Image 'main-section'.*faked.*: blob-ext-list")
+
 
 if __name__ == "__main__":
     unittest.main()
diff --git a/tools/binman/test/218_blob_ext_list_fake.dts b/tools/binman/test/218_blob_ext_list_fake.dts
new file mode 100644
index 0000000000..54ee54fdaa
--- /dev/null
+++ b/tools/binman/test/218_blob_ext_list_fake.dts
@@ -0,0 +1,14 @@
+// SPDX-License-Identifier: GPL-2.0+
+
+/dts-v1/;
+
+/ {
+	#address-cells = <1>;
+	#size-cells = <1>;
+
+	binman {
+		blob-ext-list {
+			filenames = "refcode.bin", "fake-file";
+		};
+	};
+};