On 28.06.23 13:41, Simon Glass wrote: > Sometimes multiple boards are built with binman and it is useful to > specify a different FDT list for each. At present this is not possible > without providing multiple values of the of-list entryarg (which is not > supported in the U-Boot build system). > > Allow a fit,fdt-list-val string-list property to be used instead. > > Signed-off-by: Simon Glass <s...@chromium.org> > --- > > tools/binman/entries.rst | 6 +++ > tools/binman/etype/fit.py | 9 ++++ > tools/binman/ftest.py | 14 ++++++- > tools/binman/test/284_fit_fdt_list.dts | 58 ++++++++++++++++++++++++++ > 4 files changed, 86 insertions(+), 1 deletion(-) > create mode 100644 tools/binman/test/284_fit_fdt_list.dts > > diff --git a/tools/binman/entries.rst b/tools/binman/entries.rst > index b71af801fdad..b55f424620a3 100644 > --- a/tools/binman/entries.rst > +++ b/tools/binman/entries.rst > @@ -615,6 +615,12 @@ The top-level 'fit' node supports the following special > properties: > `of-list` meaning that `-a of-list="dtb1 dtb2..."` should be passed > to binman. > > + fit,fdt-list-val > + As an alternative to fit,fdt-list the list of device tree files > + can be provided in this property as a string list, e.g.:: > + > + fit,fdt-list-val = "dtb1", "dtb2"; > + > Substitutions > ~~~~~~~~~~~~~ > > diff --git a/tools/binman/etype/fit.py b/tools/binman/etype/fit.py > index c395706ece5f..ef4d0667578d 100644 > --- a/tools/binman/etype/fit.py > +++ b/tools/binman/etype/fit.py > @@ -81,6 +81,12 @@ class Entry_fit(Entry_section): > `of-list` meaning that `-a of-list="dtb1 dtb2..."` should be > passed > to binman. > > + fit,fdt-list-val > + As an alternative to fit,fdt-list the list of device tree files > + can be provided in this property as a string list, e.g.:: > + > + fit,fdt-list-val = "dtb1", "dtb2"; > + > Substitutions > ~~~~~~~~~~~~~ > > @@ -361,6 +367,9 @@ class Entry_fit(Entry_section): > [EntryArg(self._fit_list_prop.value, str)]) > if fdts is not None: > self._fdts = fdts.split() > + else: > + self._fdts = fdt_util.GetStringList(self._node, > 'fit,fdt-list-val') > + > self._fit_default_dt = > self.GetEntryArgsOrProps([EntryArg('default-dt', > str)])[0] > > diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py > index 6d0ffda2f432..54691c420733 100644 > --- a/tools/binman/ftest.py > +++ b/tools/binman/ftest.py > @@ -6739,6 +6739,18 @@ fdt fdtmap Extract the > devicetree blob from the fdtmap > # Just check that the data appears in the file somewhere > self.assertIn(U_BOOT_DATA, data) > > + def testFitFdtList(self): > + """Test an image with an FIT with the fit,fdt-list-val option""" > + entry_args = { > + 'default-dt': 'test-fdt2', > + } > + data = self._DoReadFileDtb( > + '284_fit_fdt_list.dts', > + entry_args=entry_args, > + extra_indirs=[os.path.join(self._indir, TEST_FDT_SUBDIR)])[0] > + self.assertEqual(U_BOOT_NODTB_DATA, data[-len(U_BOOT_NODTB_DATA):]) > + fit_data = data[len(U_BOOT_DATA):-len(U_BOOT_NODTB_DATA)] > + > > -if __name__ == "_s_main__": > +if __name__ == "__main__": > unittest.main() > diff --git a/tools/binman/test/284_fit_fdt_list.dts > b/tools/binman/test/284_fit_fdt_list.dts > new file mode 100644 > index 000000000000..8885313f5b88 > --- /dev/null > +++ b/tools/binman/test/284_fit_fdt_list.dts > @@ -0,0 +1,58 @@ > +// SPDX-License-Identifier: GPL-2.0+ > + > +/dts-v1/; > + > +/ { > + #address-cells = <1>; > + #size-cells = <1>; > + > + binman { > + u-boot { > + }; > + fit { > + description = "test-desc"; > + #address-cells = <1>; > + fit,fdt-list-val = "test-fdt1", "test-fdt2"; > + > + images { > + kernel { > + description = "Vanilla Linux kernel"; > + type = "kernel"; > + arch = "ppc"; > + os = "linux"; > + compression = "gzip"; > + load = <00000000>; > + entry = <00000000>; > + hash-1 { > + algo = "crc32"; > + }; > + hash-2 { > + algo = "sha1"; > + }; > + u-boot { > + }; > + }; > + @fdt-SEQ { > + description = "fdt-NAME.dtb"; > + type = "flat_dt"; > + compression = "none"; > + hash { > + algo = "sha256"; > + }; > + }; > + }; > + > + configurations { > + default = "@config-DEFAULT-SEQ"; > + @config-SEQ { > + description = "conf-NAME.dtb"; > + firmware = "uboot"; > + loadables = "atf"; > + fdt = "fdt-SEQ"; > + }; > + }; > + }; > + u-boot-nodtb { > + }; > + }; > +};
In contrast, this already works nicely and obsoletes our need to patch the binman command line for the IOT2050. Jan -- Siemens AG, Technology Competence Center Embedded Linux