binman: Support default alignment for sections
Sometimes it is useful to specify the default alignment for all entries in a section, such as when word-alignment is necessary, for example. It is tedious and error-prone to specify this individually for each section. Add a property to control this for a section. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
631f752de5
commit
5ff9fedc9b
|
@ -562,6 +562,13 @@ skip-at-start:
|
|||
'end-at-4gb' property is not applicable where CONFIG_SYS_TEXT_BASE +
|
||||
Image size != 4gb.
|
||||
|
||||
align-default:
|
||||
Specifies the default alignment for entries in this section, if they do
|
||||
not specify an alignment. Note that this only applies to top-level entries
|
||||
in the section (direct subentries), not any subentries of those entries.
|
||||
This means that each section must specify its own default alignment, if
|
||||
required.
|
||||
|
||||
Examples of the above options can be found in the tests. See the
|
||||
tools/binman/test directory.
|
||||
|
||||
|
|
|
@ -796,6 +796,8 @@ Properties / Entry arguments: (see binman README for more information):
|
|||
file, since the first 16 bytes are skipped when writing.
|
||||
name-prefix: Adds a prefix to the name of every entry in the section
|
||||
when writing out the map
|
||||
align_default: Default alignment for this section, if no alignment is
|
||||
given in the entry
|
||||
|
||||
Properties:
|
||||
allow_missing: True if this section permits external blobs to be
|
||||
|
|
|
@ -201,6 +201,8 @@ class Entry(object):
|
|||
if tools.NotPowerOfTwo(self.align):
|
||||
raise ValueError("Node '%s': Alignment %s must be a power of two" %
|
||||
(self._node.path, self.align))
|
||||
if self.section and self.align is None:
|
||||
self.align = self.section.align_default
|
||||
self.pad_before = fdt_util.GetInt(self._node, 'pad-before', 0)
|
||||
self.pad_after = fdt_util.GetInt(self._node, 'pad-after', 0)
|
||||
self.align_size = fdt_util.GetInt(self._node, 'align-size')
|
||||
|
|
|
@ -169,6 +169,7 @@ class Entry_cbfs(Entry):
|
|||
|
||||
super().__init__(section, etype, node)
|
||||
self._cbfs_arg = fdt_util.GetString(node, 'cbfs-arch', 'x86')
|
||||
self.align_default = None
|
||||
self._cbfs_entries = OrderedDict()
|
||||
self._ReadSubnodes()
|
||||
self.reader = None
|
||||
|
|
|
@ -36,6 +36,7 @@ class Entry_mkimage(Entry):
|
|||
super().__init__(section, etype, node)
|
||||
self._args = fdt_util.GetString(self._node, 'args').split(' ')
|
||||
self._mkimage_entries = OrderedDict()
|
||||
self.align_default = None
|
||||
self._ReadSubnodes()
|
||||
|
||||
def ObtainContents(self):
|
||||
|
|
|
@ -36,6 +36,8 @@ class Entry_section(Entry):
|
|||
file, since the first 16 bytes are skipped when writing.
|
||||
name-prefix: Adds a prefix to the name of every entry in the section
|
||||
when writing out the map
|
||||
align_default: Default alignment for this section, if no alignment is
|
||||
given in the entry
|
||||
|
||||
Properties:
|
||||
allow_missing: True if this section permits external blobs to be
|
||||
|
@ -76,6 +78,7 @@ class Entry_section(Entry):
|
|||
if self._skip_at_start is None:
|
||||
self._skip_at_start = 0
|
||||
self._name_prefix = fdt_util.GetString(self._node, 'name-prefix')
|
||||
self.align_default = fdt_util.GetInt(self._node, 'align-default', 0)
|
||||
filename = fdt_util.GetString(self._node, 'filename')
|
||||
if filename:
|
||||
self._filename = filename
|
||||
|
|
|
@ -4496,6 +4496,18 @@ class TestFunctional(unittest.TestCase):
|
|||
section + tools.GetBytes(0xfe, 3) + U_BOOT_DATA,
|
||||
data)
|
||||
|
||||
def testAlignDefault(self):
|
||||
"""Test that default alignment works on sections"""
|
||||
data = self._DoReadFile('200_align_default.dts')
|
||||
expected = (U_BOOT_DATA + tools.GetBytes(0, 8 - len(U_BOOT_DATA)) +
|
||||
U_BOOT_DATA)
|
||||
# Special alignment for section
|
||||
expected += tools.GetBytes(0, 32 - len(expected))
|
||||
# No alignment within the nested section
|
||||
expected += U_BOOT_DATA + U_BOOT_NODTB_DATA;
|
||||
# Now the final piece, which should be default-aligned
|
||||
expected += tools.GetBytes(0, 88 - len(expected)) + U_BOOT_NODTB_DATA
|
||||
self.assertEqual(expected, data)
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
// SPDX-License-Identifier: GPL-2.0+
|
||||
|
||||
/dts-v1/;
|
||||
|
||||
/ {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
binman {
|
||||
align-default = <8>;
|
||||
u-boot {
|
||||
};
|
||||
|
||||
u-boot-align {
|
||||
type = "u-boot";
|
||||
};
|
||||
|
||||
section {
|
||||
align = <32>;
|
||||
u-boot {
|
||||
};
|
||||
|
||||
u-boot-nodtb {
|
||||
};
|
||||
};
|
||||
|
||||
u-boot-nodtb {
|
||||
};
|
||||
};
|
||||
};
|
Loading…
Reference in New Issue