1
0
mirror of https://xff.cz/git/u-boot/ synced 2026-01-06 23:39:19 +01:00

binman: Support templates at any level

Allow templates to be used inside a section, not just in the top-level
/binman node.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass
2023-07-18 07:24:07 -06:00
parent db0e3f13b4
commit 696f2b73d6
3 changed files with 63 additions and 2 deletions

View File

@@ -493,8 +493,8 @@ def _ProcessTemplates(parent):
Processing involves copying each subnode of the template node into the
target node.
For now this is not done recursively, so templates must be at the top level
of the binman image.
This is done recursively, so templates can be at any level of the binman
image, e.g. inside a section.
See 'Templates' in the Binman documnentation for details.
"""
@@ -502,6 +502,7 @@ def _ProcessTemplates(parent):
tmpl = fdt_util.GetPhandleList(node, 'insert-template')
if tmpl:
node.copy_subnodes_from_phandles(tmpl)
_ProcessTemplates(node)
def PrepareImagesAndDtbs(dtb_fname, select_images, update_fdt, use_expanded):
"""Prepare the images to be processed and select the device tree

View File

@@ -6812,6 +6812,14 @@ fdt fdtmap Extract the devicetree blob from the fdtmap
tools.write_file(fname, fit_data)
out = tools.run('dumpimage', '-l', fname)
def testTemplateSection(self):
"""Test using a template in a section (not at top level)"""
TestFunctional._MakeInputFile('vga2.bin', b'#' + VGA_DATA)
data = self._DoReadFile('289_template_section.dts')
first = U_BOOT_DATA + VGA_DATA + U_BOOT_DTB_DATA
second = U_BOOT_DATA + b'#' + VGA_DATA + U_BOOT_DTB_DATA
self.assertEqual(U_BOOT_IMG_DATA + first + second + first, data)
if __name__ == "__main__":
unittest.main()

View File

@@ -0,0 +1,52 @@
// SPDX-License-Identifier: GPL-2.0+
/dts-v1/;
/ {
#address-cells = <1>;
#size-cells = <1>;
binman {
u-boot-img {
};
common_part: template {
u-boot {
};
intel-vga {
filename = "vga.bin";
};
};
first {
type = "section";
insert-template = <&common_part>;
u-boot-dtb {
};
};
section {
second {
type = "section";
insert-template = <&common_part>;
u-boot-dtb {
};
intel-vga {
filename = "vga2.bin";
};
};
};
second {
type = "section";
insert-template = <&common_part>;
u-boot-dtb {
};
};
};
};