binman: Add support for align argument to mkimage tool

Add support to indicate what alignment to use for the FIT and its
external data. Pass the alignment to mkimage via the -B flag.

Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Jonas Karlman 2023-01-21 19:01:39 +00:00 committed by Simon Glass
parent 27e0fb3b08
commit 9b2fd2d228
5 changed files with 92 additions and 1 deletions

View File

@ -22,7 +22,7 @@ class Bintoolmkimage(bintool.Bintool):
# pylint: disable=R0913
def run(self, reset_timestamp=False, output_fname=None, external=False,
pad=None):
pad=None, align=None):
"""Run mkimage
Args:
@ -33,6 +33,7 @@ class Bintoolmkimage(bintool.Bintool):
pad: Bytes to use for padding the FIT devicetree output. This allows
other things to be easily added later, if required, such as
signatures
align: Bytes to use for alignment of the FIT and its external data
version: True to get the mkimage version
"""
args = []
@ -40,6 +41,8 @@ class Bintoolmkimage(bintool.Bintool):
args.append('-E')
if pad:
args += ['-p', f'{pad:x}']
if align:
args += ['-B', f'{align:x}']
if reset_timestamp:
args.append('-t')
if output_fname:

View File

@ -604,6 +604,11 @@ The top-level 'fit' node supports the following special properties:
Indicates that the contents of the FIT are external and provides the
external offset. This is passed to mkimage via the -E and -p flags.
fit,align
Indicates what alignment to use for the FIT and its external data,
and provides the alignment to use. This is passed to mkimage via
the -B flag.
fit,fdt-list
Indicates the entry argument which provides the list of device tree
files for the gen-fdt-nodes operation (as below). This is often

View File

@ -70,6 +70,11 @@ class Entry_fit(Entry_section):
Indicates that the contents of the FIT are external and provides the
external offset. This is passed to mkimage via the -E and -p flags.
fit,align
Indicates what alignment to use for the FIT and its external data,
and provides the alignment to use. This is passed to mkimage via
the -B flag.
fit,fdt-list
Indicates the entry argument which provides the list of device tree
files for the gen-fdt-nodes operation (as below). This is often
@ -423,6 +428,9 @@ class Entry_fit(Entry_section):
'external': True,
'pad': fdt_util.fdt32_to_cpu(ext_offset.value)
}
align = self._fit_props.get('fit,align')
if align is not None:
args.update({'align': fdt_util.fdt32_to_cpu(align.value)})
if self.mkimage.run(reset_timestamp=True, output_fname=output_fname,
**args) is None:
# Bintool is missing; just use empty data as the output

View File

@ -6309,6 +6309,22 @@ fdt fdtmap Extract the devicetree blob from the fdtmap
self.assertEqual(base + 8, inset.image_pos);
self.assertEqual(4, inset.size);
def testFitAlign(self):
"""Test an image with an FIT with aligned external data"""
data = self._DoReadFile('275_fit_align.dts')
self.assertEqual(4096, len(data))
dtb = fdt.Fdt.FromData(data)
dtb.Scan()
props = self._GetPropTree(dtb, ['data-position'])
expected = {
'u-boot:data-position': 1024,
'fdt-1:data-position': 2048,
'fdt-2:data-position': 3072,
}
self.assertEqual(expected, props)
if __name__ == "__main__":
unittest.main()

View File

@ -0,0 +1,59 @@
// SPDX-License-Identifier: GPL-2.0+
/dts-v1/;
/ {
#address-cells = <1>;
#size-cells = <1>;
binman {
fit {
description = "test desc";
#address-cells = <1>;
fit,external-offset = <1024>;
fit,align = <1024>;
images {
u-boot {
description = "test u-boot";
type = "standalone";
arch = "arm64";
os = "u-boot";
compression = "none";
load = <00000000>;
entry = <00000000>;
u-boot-nodtb {
};
};
fdt-1 {
description = "test fdt";
type = "flat_dt";
compression = "none";
u-boot-dtb {
};
};
fdt-2 {
description = "test fdt";
type = "flat_dt";
compression = "none";
u-boot-dtb {
};
};
};
configurations {
default = "config-1";
config-1 {
description = "test config";
fdt = "fdt-1";
firmware = "u-boot";
};
};
};
};
};