summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlper Nebi Yasak <alpernebiyasak@gmail.com>2022-02-08 01:08:05 +0300
committerSimon Glass <sjg@chromium.org>2022-02-09 12:30:13 -0700
commited293c322188d9d41bf6f26e01ad6343974150d1 (patch)
tree82f1b825e1817ad181307612b7ab831ae04dba07
parent21353311ffe9bf28e168ab7d69ec670f0093cf96 (diff)
binman: Register and check bintools from FIT subentries
Binman keeps track of binary tools each entry wants to use. The implementation of this for the FIT entry only adds "mkimage", but not the tools that would be used by its subentries. Register the binary tools that FIT subentries will use in addition to the one FIT itself uses, and check their existence by copying the appropriate method from Section entry type. Also add tests that check if these subentries can use and warn about binary tools. Signed-off-by: Alper Nebi Yasak <alpernebiyasak@gmail.com> Reviewed-by: Simon Glass <sjg@chromium.org>
-rw-r--r--tools/binman/etype/fit.py14
-rw-r--r--tools/binman/ftest.py25
-rw-r--r--tools/binman/test/220_fit_subentry_bintool.dts39
3 files changed, 78 insertions, 0 deletions
diff --git a/tools/binman/etype/fit.py b/tools/binman/etype/fit.py
index bb2a4e2d1e8..9445997fdac 100644
--- a/tools/binman/etype/fit.py
+++ b/tools/binman/etype/fit.py
@@ -311,4 +311,18 @@ class Entry_fit(Entry):
section.SetAllowMissing(allow_missing)
def AddBintools(self, tools):
+ for section in self._fit_sections.values():
+ section.AddBintools(tools)
self.mkimage = self.AddBintool(tools, 'mkimage')
+
+ def check_missing_bintools(self, missing_list):
+ """Check if any entries in this section have missing bintools
+
+ If there are missing bintools, these are added to the list
+
+ Args:
+ missing_list: List of Bintool objects to be added to
+ """
+ super().check_missing_bintools(missing_list)
+ for entry in self._fit_sections.values():
+ entry.check_missing_bintools(missing_list)
diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py
index 16956e00e94..dc14a74904a 100644
--- a/tools/binman/ftest.py
+++ b/tools/binman/ftest.py
@@ -5133,6 +5133,31 @@ fdt fdtmap Extract the devicetree blob from the fdtmap
finally:
shutil.rmtree(tmpdir)
+ def testFitSubentryUsesBintool(self):
+ """Test that binman FIT subentries can use bintools"""
+ command.test_result = self._HandleGbbCommand
+ entry_args = {
+ 'keydir': 'devkeys',
+ 'bmpblk': 'bmpblk.bin',
+ }
+ data, _, _, _ = self._DoReadFileDtb('220_fit_subentry_bintool.dts',
+ entry_args=entry_args)
+
+ expected = (GBB_DATA + GBB_DATA + tools.GetBytes(0, 8) +
+ tools.GetBytes(0, 0x2180 - 16))
+ self.assertIn(expected, data)
+
+ def testFitSubentryMissingBintool(self):
+ """Test that binman reports missing bintools for FIT subentries"""
+ entry_args = {
+ 'keydir': 'devkeys',
+ }
+ with test_util.capture_sys_output() as (_, stderr):
+ self._DoTestFile('220_fit_subentry_bintool.dts',
+ force_missing_bintools='futility', entry_args=entry_args)
+ err = stderr.getvalue()
+ self.assertRegex(err,
+ "Image 'main-section'.*missing bintools.*: futility")
if __name__ == "__main__":
unittest.main()
diff --git a/tools/binman/test/220_fit_subentry_bintool.dts b/tools/binman/test/220_fit_subentry_bintool.dts
new file mode 100644
index 00000000000..6e29d41eeb3
--- /dev/null
+++ b/tools/binman/test/220_fit_subentry_bintool.dts
@@ -0,0 +1,39 @@
+// SPDX-License-Identifier: GPL-2.0+
+
+/dts-v1/;
+
+/ {
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ binman {
+ fit {
+ description = "test-desc";
+ #address-cells = <1>;
+
+ images {
+ test {
+ description = "Something using a bintool";
+ type = "kernel";
+ arch = "arm";
+ os = "linux";
+ compression = "gzip";
+ load = <00000000>;
+ entry = <00000000>;
+
+ gbb {
+ size = <0x2180>;
+ };
+ };
+ };
+
+ configurations {
+ default = "conf-1";
+ conf-1 {
+ description = "Boot bintool output";
+ kernel = "kernel";
+ };
+ };
+ };
+ };
+};