mirror of
https://github.com/u-boot/u-boot.git
synced 2024-12-13 14:53:28 +08:00
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:
parent
27e0fb3b08
commit
9b2fd2d228
@ -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:
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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()
|
||||
|
59
tools/binman/test/275_fit_align.dts
Normal file
59
tools/binman/test/275_fit_align.dts
Normal 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";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
Loading…
Reference in New Issue
Block a user