Re: [PATCH] binman: Support templating with multiple images

2023-07-07 Thread Simon Glass
Hi Jan,

On Fri, 7 Jul 2023 at 15:04, Jan Kiszka  wrote:
>
> On 07.07.23 14:40, Simon Glass wrote:
> > Allow a template to appear in the top level description when using
> > multiple images.
> >
> > Signed-off-by: Simon Glass 
> > ---
> >
> >  tools/binman/control.py  |  5 ++--
> >  tools/binman/ftest.py| 12 ++
> >  tools/binman/test/287_template_multi.dts | 29 
> >  3 files changed, 44 insertions(+), 2 deletions(-)
> >  create mode 100644 tools/binman/test/287_template_multi.dts
> >
> > diff --git a/tools/binman/control.py b/tools/binman/control.py
> > index 0f98e9904fb1..b334fbc8ac8f 100644
> > --- a/tools/binman/control.py
> > +++ b/tools/binman/control.py
> > @@ -57,8 +57,9 @@ def _ReadImageDesc(binman_node, use_expanded):
> >  images = OrderedDict()
> >  if 'multiple-images' in binman_node.props:
> >  for node in binman_node.subnodes:
> > -images[node.name] = Image(node.name, node,
> > -  use_expanded=use_expanded)
> > +if 'template' not in node.name:
> > +images[node.name] = Image(node.name, node,
> > +  use_expanded=use_expanded)
> >  else:
> >  images['image'] = Image('image', binman_node, 
> > use_expanded=use_expanded)
> >  return images
> > diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py
> > index 389d3906371a..c783424c91da 100644
> > --- a/tools/binman/ftest.py
> > +++ b/tools/binman/ftest.py
> > @@ -6771,6 +6771,18 @@ fdt fdtmapExtract the 
> > devicetree blob from the fdtmap
> >  second = U_BOOT_DATA + b'#' + VGA_DATA + U_BOOT_DTB_DATA
> >  self.assertEqual(U_BOOT_IMG_DATA + first + second, data)
> >
> > +def testEntryTemplateBlobMulti(self):
> > +"""Test using a template with 'multiple-images' enabled"""
> > +TestFunctional._MakeInputFile('my-blob.bin', b'blob')
> > +TestFunctional._MakeInputFile('my-blob2.bin', b'other')
> > +retcode = self._DoTestFile('287_template_multi.dts')
> > +
> > +self.assertEqual(0, retcode)
> > +image = control.images['image']
> > +image_fname = tools.get_output_filename('my-image.bin')
> > +data = tools.read_file(image_fname)
> > +self.assertEqual(b'blobother', data)
> > +
> >
> >  if __name__ == "__main__":
> >  unittest.main()
> > diff --git a/tools/binman/test/287_template_multi.dts 
> > b/tools/binman/test/287_template_multi.dts
> > new file mode 100644
> > index ..15bd8701c671
> > --- /dev/null
> > +++ b/tools/binman/test/287_template_multi.dts
> > @@ -0,0 +1,29 @@
> > +// SPDX-License-Identifier: GPL-2.0+
> > +
> > +/dts-v1/;
> > +
> > +/dts-v1/;
>
> Duplicate.
>
> > +/ {
> > + binman: binman {
> > + multiple-images;
> > +
> > + my_template: template {
> > + blob-ext@0 {
> > + filename = "my-blob.bin";
> > + offset = <0>;
> > + };
> > + blob-ext@8 {
> > + offset = <8>;
> > + };
> > + };
> > +
> > + image {
> > + pad-byte = <0x40>;
> > + filename = "my-image.bin";
> > + insert-template = <_template>;
> > + blob-ext@8 {
> > + filename = "my-blob2.bin";
> > + };
> > + };
> > + };
> > +};
>
> For the sake of context:
>
> echo 1234 > my-blob.bin
> echo 5678 > my-blob2.bin
> dtc tools/binman/test/287_template_multi.dts -o binman-test.dtb
> tools/binman/binman build -d binman-test.dtb -O .
>
> binman: Node '/binman/image/blob-ext@0': Offset 0x0 (0) overlaps with 
> previous entry '/binman/image/blob-ext@8' ending at 0xd (13)

Hi Jan,

I don't get that error when I try these exact commands:

(=88a31 moveconfig.failed) sglass@ELLESMERE ~/u> echo 1234 > my-blob.bin
(=88a31 moveconfig.failed) sglass@ELLESMERE ~/u> echo 5678 > my-blob2.bin
(=88a31 moveconfig.failed) sglass@ELLESMERE ~/u> dtc
tools/binman/test/287_template_multi.dts -o binman-test.dtb
tools/binman/test/287_template_multi.dts:11.15-14.6: Warning
(unit_address_vs_reg): /binman/template/blob-ext@0: node has a unit
name, but no reg or ranges property
tools/binman/test/287_template_multi.dts:15.15-17.6: Warning
(unit_address_vs_reg): /binman/template/blob-ext@8: node has a unit
name, but no reg or ranges property
tools/binman/test/287_template_multi.dts:24.15-26.6: Warning
(unit_address_vs_reg): /binman/image/blob-ext@8: node has a unit name,
but no reg or ranges property
(=88a31 moveconfig.failed) sglass@ELLESMERE ~/u> tools/binman/binman
build -d binman-test.dtb -O .
(=88a31 moveconfig.failed) sglass@ELLESMERE ~/u> hd my-image.bin
  31 32 33 34 0a 40 40 40  35 36 37 38 0a   

Re: [PATCH] binman: Support templating with multiple images

2023-07-07 Thread Jan Kiszka
On 07.07.23 14:40, Simon Glass wrote:
> Allow a template to appear in the top level description when using
> multiple images.
> 
> Signed-off-by: Simon Glass 
> ---
> 
>  tools/binman/control.py  |  5 ++--
>  tools/binman/ftest.py| 12 ++
>  tools/binman/test/287_template_multi.dts | 29 
>  3 files changed, 44 insertions(+), 2 deletions(-)
>  create mode 100644 tools/binman/test/287_template_multi.dts
> 
> diff --git a/tools/binman/control.py b/tools/binman/control.py
> index 0f98e9904fb1..b334fbc8ac8f 100644
> --- a/tools/binman/control.py
> +++ b/tools/binman/control.py
> @@ -57,8 +57,9 @@ def _ReadImageDesc(binman_node, use_expanded):
>  images = OrderedDict()
>  if 'multiple-images' in binman_node.props:
>  for node in binman_node.subnodes:
> -images[node.name] = Image(node.name, node,
> -  use_expanded=use_expanded)
> +if 'template' not in node.name:
> +images[node.name] = Image(node.name, node,
> +  use_expanded=use_expanded)
>  else:
>  images['image'] = Image('image', binman_node, 
> use_expanded=use_expanded)
>  return images
> diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py
> index 389d3906371a..c783424c91da 100644
> --- a/tools/binman/ftest.py
> +++ b/tools/binman/ftest.py
> @@ -6771,6 +6771,18 @@ fdt fdtmapExtract the 
> devicetree blob from the fdtmap
>  second = U_BOOT_DATA + b'#' + VGA_DATA + U_BOOT_DTB_DATA
>  self.assertEqual(U_BOOT_IMG_DATA + first + second, data)
>  
> +def testEntryTemplateBlobMulti(self):
> +"""Test using a template with 'multiple-images' enabled"""
> +TestFunctional._MakeInputFile('my-blob.bin', b'blob')
> +TestFunctional._MakeInputFile('my-blob2.bin', b'other')
> +retcode = self._DoTestFile('287_template_multi.dts')
> +
> +self.assertEqual(0, retcode)
> +image = control.images['image']
> +image_fname = tools.get_output_filename('my-image.bin')
> +data = tools.read_file(image_fname)
> +self.assertEqual(b'blobother', data)
> +
>  
>  if __name__ == "__main__":
>  unittest.main()
> diff --git a/tools/binman/test/287_template_multi.dts 
> b/tools/binman/test/287_template_multi.dts
> new file mode 100644
> index ..15bd8701c671
> --- /dev/null
> +++ b/tools/binman/test/287_template_multi.dts
> @@ -0,0 +1,29 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +
> +/dts-v1/;
> +
> +/dts-v1/;

Duplicate.

> +/ {
> + binman: binman {
> + multiple-images;
> +
> + my_template: template {
> + blob-ext@0 {
> + filename = "my-blob.bin";
> + offset = <0>;
> + };
> + blob-ext@8 {
> + offset = <8>;
> + };
> + };
> +
> + image {
> + pad-byte = <0x40>;
> + filename = "my-image.bin";
> + insert-template = <_template>;
> + blob-ext@8 {
> + filename = "my-blob2.bin";
> + };
> + };
> + };
> +};

For the sake of context:

echo 1234 > my-blob.bin
echo 5678 > my-blob2.bin
dtc tools/binman/test/287_template_multi.dts -o binman-test.dtb
tools/binman/binman build -d binman-test.dtb -O .

binman: Node '/binman/image/blob-ext@0': Offset 0x0 (0) overlaps with previous 
entry '/binman/image/blob-ext@8' ending at 0xd (13)

Jan

-- 
Siemens AG, Technology
Competence Center Embedded Linux



[PATCH] binman: Support templating with multiple images

2023-07-07 Thread Simon Glass
Allow a template to appear in the top level description when using
multiple images.

Signed-off-by: Simon Glass 
---

 tools/binman/control.py  |  5 ++--
 tools/binman/ftest.py| 12 ++
 tools/binman/test/287_template_multi.dts | 29 
 3 files changed, 44 insertions(+), 2 deletions(-)
 create mode 100644 tools/binman/test/287_template_multi.dts

diff --git a/tools/binman/control.py b/tools/binman/control.py
index 0f98e9904fb1..b334fbc8ac8f 100644
--- a/tools/binman/control.py
+++ b/tools/binman/control.py
@@ -57,8 +57,9 @@ def _ReadImageDesc(binman_node, use_expanded):
 images = OrderedDict()
 if 'multiple-images' in binman_node.props:
 for node in binman_node.subnodes:
-images[node.name] = Image(node.name, node,
-  use_expanded=use_expanded)
+if 'template' not in node.name:
+images[node.name] = Image(node.name, node,
+  use_expanded=use_expanded)
 else:
 images['image'] = Image('image', binman_node, 
use_expanded=use_expanded)
 return images
diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py
index 389d3906371a..c783424c91da 100644
--- a/tools/binman/ftest.py
+++ b/tools/binman/ftest.py
@@ -6771,6 +6771,18 @@ fdt fdtmapExtract the devicetree 
blob from the fdtmap
 second = U_BOOT_DATA + b'#' + VGA_DATA + U_BOOT_DTB_DATA
 self.assertEqual(U_BOOT_IMG_DATA + first + second, data)
 
+def testEntryTemplateBlobMulti(self):
+"""Test using a template with 'multiple-images' enabled"""
+TestFunctional._MakeInputFile('my-blob.bin', b'blob')
+TestFunctional._MakeInputFile('my-blob2.bin', b'other')
+retcode = self._DoTestFile('287_template_multi.dts')
+
+self.assertEqual(0, retcode)
+image = control.images['image']
+image_fname = tools.get_output_filename('my-image.bin')
+data = tools.read_file(image_fname)
+self.assertEqual(b'blobother', data)
+
 
 if __name__ == "__main__":
 unittest.main()
diff --git a/tools/binman/test/287_template_multi.dts 
b/tools/binman/test/287_template_multi.dts
new file mode 100644
index ..15bd8701c671
--- /dev/null
+++ b/tools/binman/test/287_template_multi.dts
@@ -0,0 +1,29 @@
+// SPDX-License-Identifier: GPL-2.0+
+
+/dts-v1/;
+
+/dts-v1/;
+/ {
+   binman: binman {
+   multiple-images;
+
+   my_template: template {
+   blob-ext@0 {
+   filename = "my-blob.bin";
+   offset = <0>;
+   };
+   blob-ext@8 {
+   offset = <8>;
+   };
+   };
+
+   image {
+   pad-byte = <0x40>;
+   filename = "my-image.bin";
+   insert-template = <_template>;
+   blob-ext@8 {
+   filename = "my-blob2.bin";
+   };
+   };
+   };
+};
-- 
2.41.0.390.g38632f3daf-goog