From 7bc110f09223f73768b942ee4dba7d44b9a3790c Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Sun, 21 Mar 2021 18:24:30 +1300 Subject: [PATCH] binman: Allow disabling expanding an entry At present there is a command-line flag to disable substitution of expanded entries. Add an option to the entry node as well, so it can be controlled at the node level. Add a test to cover this. Fix up the comment to the checkSymbols() function it uses, while we are here. Signed-off-by: Simon Glass --- tools/binman/binman.rst | 7 +++++++ tools/binman/entries.rst | 6 +++--- tools/binman/entry.py | 3 ++- tools/binman/etype/u_boot.py | 2 +- tools/binman/etype/u_boot_spl.py | 2 +- tools/binman/etype/u_boot_tpl.py | 2 +- tools/binman/ftest.py | 20 ++++++++++++++++++-- tools/binman/test/197_symbols_expand.dts | 23 +++++++++++++++++++++++ 8 files changed, 56 insertions(+), 9 deletions(-) create mode 100644 tools/binman/test/197_symbols_expand.dts diff --git a/tools/binman/binman.rst b/tools/binman/binman.rst index 15314d1958..28cb2e7a9c 100644 --- a/tools/binman/binman.rst +++ b/tools/binman/binman.rst @@ -472,6 +472,13 @@ missing-msg: information about what needs to be fixed. See missing-blob-help for the message for each tag. +no-expanded: + By default binman substitutes entries with expanded versions if available, + so that a `u-boot` entry type turns into `u-boot-expanded`, for example. The + `--no-expanded` command-line option disables this globally. The + `no-expanded` property disables this just for a single entry. Put the + `no-expanded` boolean property in the node to select this behaviour. + The attributes supported for images and sections are described below. Several are similar to those for entries. diff --git a/tools/binman/entries.rst b/tools/binman/entries.rst index f6faa15562..1a71413f94 100644 --- a/tools/binman/entries.rst +++ b/tools/binman/entries.rst @@ -863,7 +863,7 @@ U-Boot can access binman symbols at runtime. See: in the binman README for more information. Note that this entry is automatically replaced with u-boot-expanded unless ---no-expanded is used. +--no-expanded is used or the node has a 'no-expanded' property. @@ -984,7 +984,7 @@ The ELF file 'spl/u-boot-spl' must also be available for this to work, since binman uses that to look up symbols to write into the SPL binary. Note that this entry is automatically replaced with u-boot-spl-expanded -unless --no-expanded is used. +unless --no-expanded is used or the node has a 'no-expanded' property. @@ -1113,7 +1113,7 @@ The ELF file 'tpl/u-boot-tpl' must also be available for this to work, since binman uses that to look up symbols to write into the TPL binary. Note that this entry is automatically replaced with u-boot-tpl-expanded -unless --no-expanded is used. +unless --no-expanded is used or the node has a 'no-expanded' property. diff --git a/tools/binman/entry.py b/tools/binman/entry.py index 1cfa024a9f..ac25986ee6 100644 --- a/tools/binman/entry.py +++ b/tools/binman/entry.py @@ -164,7 +164,8 @@ class Entry(object): if obj and expanded: # Check whether to use the expanded entry new_etype = etype + '-expanded' - if obj.UseExpanded(node, etype, new_etype): + can_expand = not fdt_util.GetBool(node, 'no-expanded') + if can_expand and obj.UseExpanded(node, etype, new_etype): etype = new_etype else: obj = None diff --git a/tools/binman/etype/u_boot.py b/tools/binman/etype/u_boot.py index d2eaba6d4a..e8d180a46d 100644 --- a/tools/binman/etype/u_boot.py +++ b/tools/binman/etype/u_boot.py @@ -25,7 +25,7 @@ class Entry_u_boot(Entry_blob): in the binman README for more information. Note that this entry is automatically replaced with u-boot-expanded unless - --no-expanded is used. + --no-expanded is used or the node has a 'no-expanded' property. """ def __init__(self, section, etype, node): super().__init__(section, etype, node) diff --git a/tools/binman/etype/u_boot_spl.py b/tools/binman/etype/u_boot_spl.py index 1c39f98251..6f79bf59f9 100644 --- a/tools/binman/etype/u_boot_spl.py +++ b/tools/binman/etype/u_boot_spl.py @@ -32,7 +32,7 @@ class Entry_u_boot_spl(Entry_blob): binman uses that to look up symbols to write into the SPL binary. Note that this entry is automatically replaced with u-boot-spl-expanded - unless --no-expanded is used. + unless --no-expanded is used or the node has a 'no-expanded' property. """ def __init__(self, section, etype, node): super().__init__(section, etype, node) diff --git a/tools/binman/etype/u_boot_tpl.py b/tools/binman/etype/u_boot_tpl.py index 95d9bd6b20..0c575df8cd 100644 --- a/tools/binman/etype/u_boot_tpl.py +++ b/tools/binman/etype/u_boot_tpl.py @@ -32,7 +32,7 @@ class Entry_u_boot_tpl(Entry_blob): binman uses that to look up symbols to write into the TPL binary. Note that this entry is automatically replaced with u-boot-tpl-expanded - unless --no-expanded is used. + unless --no-expanded is used or the node has a 'no-expanded' property. """ def __init__(self, section, etype, node): super().__init__(section, etype, node) diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py index 34449553ca..cd93dc153a 100644 --- a/tools/binman/ftest.py +++ b/tools/binman/ftest.py @@ -1344,13 +1344,19 @@ class TestFunctional(unittest.TestCase): data = self._DoReadFile('052_u_boot_spl_nodtb.dts') self.assertEqual(U_BOOT_SPL_NODTB_DATA, data[:len(U_BOOT_SPL_NODTB_DATA)]) - def checkSymbols(self, dts, base_data, u_boot_offset): + def checkSymbols(self, dts, base_data, u_boot_offset, entry_args=None, + use_expanded=False): """Check the image contains the expected symbol values Args: dts: Device tree file to use for test base_data: Data before and after 'u-boot' section u_boot_offset: Offset of 'u-boot' section in image + entry_args: Dict of entry args to supply to binman + key: arg name + value: value of that arg + use_expanded: True to use expanded entries where available, e.g. + 'u-boot-expanded' instead of 'u-boot' """ elf_fname = self.ElfTestFile('u_boot_binman_syms') syms = elf.GetSymbols(elf_fname, ['binman', 'image']) @@ -1359,7 +1365,8 @@ class TestFunctional(unittest.TestCase): addr) self._SetupSplElf('u_boot_binman_syms') - data = self._DoReadFile(dts) + data = self._DoReadFileDtb(dts, entry_args=entry_args, + use_expanded=use_expanded)[0] # The image should contain the symbols from u_boot_binman_syms.c # Note that image_pos is adjusted by the base address of the image, # which is 0x10 in our test image @@ -4460,5 +4467,14 @@ class TestFunctional(unittest.TestCase): start += fdt_size + len(U_BOOT_TPL_DATA) self.assertEqual(len(data), start) + def testSymbolsExpanded(self): + """Test binman can assign symbols in expanded entries""" + entry_args = { + 'spl-dtb': '1', + } + self.checkSymbols('197_symbols_expand.dts', U_BOOT_SPL_NODTB_DATA + + U_BOOT_SPL_DTB_DATA, 0x38, + entry_args=entry_args, use_expanded=True) + if __name__ == "__main__": unittest.main() diff --git a/tools/binman/test/197_symbols_expand.dts b/tools/binman/test/197_symbols_expand.dts new file mode 100644 index 0000000000..8aee76dc75 --- /dev/null +++ b/tools/binman/test/197_symbols_expand.dts @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: GPL-2.0+ + +/dts-v1/; + +/ { + #address-cells = <1>; + #size-cells = <1>; + + binman { + pad-byte = <0xff>; + u-boot-spl { + }; + + u-boot { + offset = <0x38>; + no-expanded; + }; + + u-boot-spl2 { + type = "u-boot-spl"; + }; + }; +}; -- 2.39.5