# pylint: disable=R0913
def run(self, reset_timestamp=False, output_fname=None, external=False,
- pad=None):
+ pad=None, align=None):
"""Run mkimage
Args:
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 = []
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:
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
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
'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
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()
--- /dev/null
+// 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";
+ };
+ };
+ };
+ };
+};