tools: binman: control.py: Delete template nodes after parsing

Dynamically going through the subnode array and deleting leads to
templates being skipped from deletion when templates are consecutive in
the subnode list. Prevent this from happening by first parsing the DT
and then deleting the nodes. Add a testcase as well for this cornercase.

Signed-off-by: Neha Malcom Francis <n-francis@ti.com>
This commit is contained in:
Neha Malcom Francis
2025-03-17 10:24:20 +05:30
committed by Tom Rini
parent 0e1fc465fe
commit 42ce9ed7ff
3 changed files with 61 additions and 1 deletions

View File

@@ -522,8 +522,12 @@ def _ProcessTemplates(parent):
def _RemoveTemplates(parent):
"""Remove any templates in the binman description
"""
del_nodes = []
for node in parent.subnodes:
if node.name.startswith('template'):
del_nodes.append(node)
for node in del_nodes:
node.Delete()
def PrepareImagesAndDtbs(dtb_fname, select_images, update_fdt, use_expanded, indir):

View File

@@ -7990,5 +7990,12 @@ fdt fdtmap Extract the devicetree blob from the fdtmap
"""Test an image with an FIT with multiple FDT images using NAME"""
self.CheckFitFdt('345_fit_fdt_name.dts', use_seq_num=False)
def testRemoveTemplate(self):
"""Test whether template is removed"""
TestFunctional._MakeInputFile('my-blob.bin', b'blob')
TestFunctional._MakeInputFile('my-blob2.bin', b'other')
self._DoTestFile('346_remove_template.dts',
force_missing_bintools='openssl',)
if __name__ == "__main__":
unittest.main()

View File

@@ -0,0 +1,49 @@
// SPDX-License-Identifier: GPL-2.0+
/dts-v1/;
/ {
binman: binman {
multiple-images;
template_1: template-1 {
section {
phandle1: my-blob.bin {
filename = "my-blob.bin";
type = "blob-ext";
};
};
};
template_2: template-2 {
section {
ti-secure {
content = <&phandle2>;
keyfile = "key.pem";
};
phandle2: my-blob.bin {
filename = "my-blob.bin";
type = "blob-ext";
};
};
};
template_3: template-3 {
section {
phandle3: my-blob.bin {
filename = "my-blob.bin";
type = "blob-ext";
};
};
};
file1 {
insert-template = <&template_1>;
};
file2 {
insert-template = <&template_2>;
};
file3 {
insert-template = <&template_3>;
};
};
};