
Hi Tom,
From: Patrick DELAUNAY patrick.delaunay@st.com Sent: vendredi 5 juin 2020 09:22
From: Etienne Carriere etienne.carriere@linaro.org
Fix the loop that parses FDT for a reserved memory node named "optee".
Before this change, if at least one subnode was found in the reserved-memory node, the function endlessly looped since instruction continue returned back in the loop without updating variable subnode. This change fixes the issue by using a for loop.
Fixes: 6ccb05eae01b ("image: fdt: copy possible optee nodes to a loaded devicetree") Signed-off-by: Etienne Carriere etienne.carriere@linaro.org Signed-off-by: Patrick Delaunay patrick.delaunay@st.com
lib/optee/optee.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/lib/optee/optee.c b/lib/optee/optee.c index e59b5766e7..457d4cca8a 100644 --- a/lib/optee/optee.c +++ b/lib/optee/optee.c @@ -156,8 +156,9 @@ int optee_copy_fdt_nodes(const void *old_blob, void *new_blob) /* optee inserts its memory regions as reserved-memory nodes */ nodeoffset = fdt_subnode_offset(old_blob, 0, "reserved-memory"); if (nodeoffset >= 0) {
subnode = fdt_first_subnode(old_blob, nodeoffset);
while (subnode >= 0) {
for (subnode = fdt_first_subnode(old_blob, nodeoffset);
subnode >= 0;
subnode = fdt_next_subnode(old_blob, subnode)) { const char *name = fdt_get_name(old_blob, subnode, NULL); if (!name)
@@ -197,8 +198,6 @@ int optee_copy_fdt_nodes(const void *old_blob, void *new_blob) if (ret < 0) return ret; }
} }subnode = fdt_next_subnode(old_blob, subnode);
-- 2.17.1
Do you think it is possible to include this fix in v2020.07 ? Or do you expect some review ?
This issue blocks the STM32MP1 boot with OP-TEE... as subnode is not update if the first reserved node is not "optee" one, with:
if (strncmp(name, "optee", 5)) continue;
for example DT =
reserved-memory { gpu_reserved: gpu@da000000 { reg = <0xda000000 0x4000000>; no-map; };
optee@de000000 { reg = <0xde000000 0x02000000>; no-map; }; };
See also http://patchwork.ozlabs.org/project/uboot/list/?series=181471
Regards
Patrick