
At present it is not always possible to have an expanded entry as a sibling of another node. This limitation applies in most situations where the other node has properties which binman must update, or when other nodes appear after the expanded entry. An example is a 'hash' node in the same section as an expanding node, since binman must update the hash node with the hash of the expanding node, but it cannot do this while also inserting the expanding node.
These limitations are mostly to do with how the fdt library worked (the one provided by dtoc). This library still uses pylibfdt directly. At some point it would be nice to have a hierarchical (live-tree) implementation in pylibfdt (and therefore libfdt), but this does not exist at present. It would simplify the code in the fdt library.
This series takes the support for expanded entries a little further, allow them to be used in nearly any situation.
Where expanded entries are not wanted in a paricular case, a new 'no-expanded' property can be used.
Another problem found in the real world is that some systems require a particular alignment for entries. For example, Intel chips struggle to read data from SPI flash unless it is word-aligned. This series provides a way to specify the default alignment for all the entries in a section, to avoid the tedium of putting this in every single entry.
Finally, the vblock implementation includes code to collect the contents of other entries, as specified by a phandle. It happens that this doesn't work if one of the entries is a section, e.g. an expanding entry, since (for efficiency reasons) binman currently only calculates section contents when performing final image assembly. This series removes this limitation. It also creates a new 'collection' entry type, to serve as a base class for vblock, since it is likely that this functionality will be useful for other entry types.
Simon Glass (11): binman: Use a unique number for the symbols test file binman: Allow disabling expanding an entry binman: Add support for a collection of entries binman: Support obtaining section contents immediately binman: Support default alignment for sections dtoc: Improve internal error for Refresh() dtoc: Tidy up property-offset handling dtoc: Tweak ordering of fdt-offsets refreshing dtoc: Add a subnode test for multiple nodes dtoc: Support adding subnodes alongside existing ones dtoc: Add new check that offsets are correct
tools/binman/binman.rst | 14 +++ tools/binman/entries.rst | 21 ++++- tools/binman/entry.py | 16 +++- tools/binman/etype/cbfs.py | 1 + tools/binman/etype/collection.py | 67 ++++++++++++++ tools/binman/etype/mkimage.py | 1 + tools/binman/etype/section.py | 36 ++++++-- 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/etype/vblock.py | 36 ++++---- tools/binman/ftest.py | 57 +++++++++++- ...ymbols_nodtb.dts => 196_symbols_nodtb.dts} | 0 tools/binman/test/197_symbols_expand.dts | 23 +++++ tools/binman/test/198_collection.dts | 27 ++++++ tools/binman/test/199_collection_section.dts | 32 +++++++ tools/binman/test/200_align_default.dts | 30 ++++++ tools/dtoc/fdt.py | 92 +++++++++++++++---- tools/dtoc/test/dtoc_test_simple.dts | 4 + tools/dtoc/test_fdt.py | 76 ++++++++++++--- 20 files changed, 470 insertions(+), 69 deletions(-) create mode 100644 tools/binman/etype/collection.py rename tools/binman/test/{192_symbols_nodtb.dts => 196_symbols_nodtb.dts} (100%) create mode 100644 tools/binman/test/197_symbols_expand.dts create mode 100644 tools/binman/test/198_collection.dts create mode 100644 tools/binman/test/199_collection_section.dts create mode 100644 tools/binman/test/200_align_default.dts