[PATCH 1/2] board: stm32mp1: fix handling of DT OP-TEE reserved memory nodes

From: Etienne Carriere etienne.carriere@linaro.org
Fix the sequence in stm32mp1 fdt.c that disables OP-TEE resources defined in FDT when U-boot detects OP-TEE firmware is not present.
Before this change, helper function stm32_fdt_disable_optee() set property status to "disabled" for the OP-TEE reserved memory nodes but this has no impact since Linux kernel does not consider the status property for reserved-memory subnodes. This change make U-Boot to attempt to delete the node instead.
Fixes: 4a1b975dac02 ("board: stm32mp1: reserve memory for OP-TEE in device tree") Signed-off-by: Etienne Carriere etienne.carriere@linaro.org Signed-off-by: Patrick Delaunay patrick.delaunay@st.com ---
arch/arm/mach-stm32mp/fdt.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/arch/arm/mach-stm32mp/fdt.c b/arch/arm/mach-stm32mp/fdt.c index c723b223e0..959f12efe1 100644 --- a/arch/arm/mach-stm32mp/fdt.c +++ b/arch/arm/mach-stm32mp/fdt.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause /* - * Copyright (C) 2019, STMicroelectronics - All Rights Reserved + * Copyright (C) 2019-2020, STMicroelectronics - All Rights Reserved */
#include <common.h> @@ -224,19 +224,23 @@ static void stm32_fdt_disable_optee(void *blob) { int off, node;
+ /* Delete "optee" firmware node */ off = fdt_node_offset_by_compatible(blob, -1, "linaro,optee-tz"); if (off >= 0 && fdtdec_get_is_enabled(blob, off)) - fdt_status_disabled(blob, off); + fdt_del_node(blob, off);
- /* Disabled "optee@..." reserved-memory node */ + /* Delete "optee@..." reserved-memory node */ off = fdt_path_offset(blob, "/reserved-memory/"); if (off < 0) return; for (node = fdt_first_subnode(blob, off); node >= 0; node = fdt_next_subnode(blob, node)) { - if (!strncmp(fdt_get_name(blob, node, NULL), "optee@", 6)) - fdt_status_disabled(blob, node); + if (strncmp(fdt_get_name(blob, node, NULL), "optee@", 6)) + continue; + + if (fdt_del_node(blob, node)) + printf("Failed to remove optee reserved-memory node\n"); } }

From: Etienne Carriere etienne.carriere@linaro.org
Add OP-TEE firmware node in stm32mp15 U-Boot DTSI. This node is needed since commit [1] that changed U-Boot/stm32mp15 to detect OP-TEE availability by probing the resource instead of relying on U-Boot configuration. The software sequence implemented by [1] is fine but U-Boot DTS/DTSI files were not updated accordingly since, hence OP-TEE presence is never detected by U-Boot, preventing Linux kernel from using OP-TEE resources.
For consistency and to synchronize stm32mp15 DTSI files (excluding U-Boot specific DTSI files) with the Linux kernel ones, this change also moves the OP-TEE reserved memory nodes from board generic DTSI files to U-Boot specific board DTSI files.
Link: [1] commit 43df0a159df6 ("stm32mp1: dynamically detect op-tee presence") Signed-off-by: Etienne Carriere etienne.carriere@linaro.org Signed-off-by: Patrick Delaunay patrick.delaunay@st.com ---
arch/arm/dts/stm32mp157a-dk1-u-boot.dtsi | 15 +++++++++++++++ arch/arm/dts/stm32mp157c-ed1-u-boot.dtsi | 14 ++++++++++++++ arch/arm/dts/stm32mp157c-ed1.dts | 5 ----- arch/arm/dts/stm32mp15xx-dkx.dtsi | 5 ----- 4 files changed, 29 insertions(+), 10 deletions(-)
diff --git a/arch/arm/dts/stm32mp157a-dk1-u-boot.dtsi b/arch/arm/dts/stm32mp157a-dk1-u-boot.dtsi index c52abeb1e7..3fedb6f1e1 100644 --- a/arch/arm/dts/stm32mp157a-dk1-u-boot.dtsi +++ b/arch/arm/dts/stm32mp157a-dk1-u-boot.dtsi @@ -20,6 +20,21 @@ st,fastboot-gpios = <&gpioa 13 GPIO_ACTIVE_LOW>; st,stm32prog-gpios = <&gpioa 14 GPIO_ACTIVE_LOW>; }; + + firmware { + optee { + compatible = "linaro,optee-tz"; + method = "smc"; + }; + }; + + reserved-memory { + optee@de000000 { + reg = <0xde000000 0x02000000>; + no-map; + }; + }; + led { red { label = "error"; diff --git a/arch/arm/dts/stm32mp157c-ed1-u-boot.dtsi b/arch/arm/dts/stm32mp157c-ed1-u-boot.dtsi index 84af7fa47b..a07c585415 100644 --- a/arch/arm/dts/stm32mp157c-ed1-u-boot.dtsi +++ b/arch/arm/dts/stm32mp157c-ed1-u-boot.dtsi @@ -21,6 +21,20 @@ st,stm32prog-gpios = <&gpioa 14 GPIO_ACTIVE_LOW>; };
+ firmware { + optee { + compatible = "linaro,optee-tz"; + method = "smc"; + }; + }; + + reserved-memory { + optee@fe000000 { + reg = <0xfe000000 0x02000000>; + no-map; + }; + }; + led { red { label = "error"; diff --git a/arch/arm/dts/stm32mp157c-ed1.dts b/arch/arm/dts/stm32mp157c-ed1.dts index 4fb71100f5..186dc46754 100644 --- a/arch/arm/dts/stm32mp157c-ed1.dts +++ b/arch/arm/dts/stm32mp157c-ed1.dts @@ -70,11 +70,6 @@ reg = <0xe8000000 0x8000000>; no-map; }; - - optee@fe000000 { - reg = <0xfe000000 0x02000000>; - no-map; - }; };
aliases { diff --git a/arch/arm/dts/stm32mp15xx-dkx.dtsi b/arch/arm/dts/stm32mp15xx-dkx.dtsi index 812e370ee4..7589c6f9dc 100644 --- a/arch/arm/dts/stm32mp15xx-dkx.dtsi +++ b/arch/arm/dts/stm32mp15xx-dkx.dtsi @@ -58,11 +58,6 @@ reg = <0xd4000000 0x4000000>; no-map; }; - - optee@de000000 { - reg = <0xde000000 0x02000000>; - no-map; - }; };
led {

Hi
On 6/5/20 9:24 AM, Patrick Delaunay wrote:
From: Etienne Carriere etienne.carriere@linaro.org
Add OP-TEE firmware node in stm32mp15 U-Boot DTSI. This node is needed since commit [1] that changed U-Boot/stm32mp15 to detect OP-TEE availability by probing the resource instead of relying on U-Boot configuration. The software sequence implemented by [1] is fine but U-Boot DTS/DTSI files were not updated accordingly since, hence OP-TEE presence is never detected by U-Boot, preventing Linux kernel from using OP-TEE resources.
For consistency and to synchronize stm32mp15 DTSI files (excluding U-Boot specific DTSI files) with the Linux kernel ones, this change also moves the OP-TEE reserved memory nodes from board generic DTSI files to U-Boot specific board DTSI files.
Link: [1] commit 43df0a159df6 ("stm32mp1: dynamically detect op-tee presence") Signed-off-by: Etienne Carriere etienne.carriere@linaro.org Signed-off-by: Patrick Delaunay patrick.delaunay@st.com
arch/arm/dts/stm32mp157a-dk1-u-boot.dtsi | 15 +++++++++++++++ arch/arm/dts/stm32mp157c-ed1-u-boot.dtsi | 14 ++++++++++++++ arch/arm/dts/stm32mp157c-ed1.dts | 5 ----- arch/arm/dts/stm32mp15xx-dkx.dtsi | 5 ----- 4 files changed, 29 insertions(+), 10 deletions(-)
diff --git a/arch/arm/dts/stm32mp157a-dk1-u-boot.dtsi b/arch/arm/dts/stm32mp157a-dk1-u-boot.dtsi index c52abeb1e7..3fedb6f1e1 100644 --- a/arch/arm/dts/stm32mp157a-dk1-u-boot.dtsi +++ b/arch/arm/dts/stm32mp157a-dk1-u-boot.dtsi @@ -20,6 +20,21 @@ st,fastboot-gpios = <&gpioa 13 GPIO_ACTIVE_LOW>; st,stm32prog-gpios = <&gpioa 14 GPIO_ACTIVE_LOW>; };
- firmware {
optee {
compatible = "linaro,optee-tz";
method = "smc";
};
- };
- reserved-memory {
optee@de000000 {
reg = <0xde000000 0x02000000>;
no-map;
};
- };
- led { red { label = "error";
diff --git a/arch/arm/dts/stm32mp157c-ed1-u-boot.dtsi b/arch/arm/dts/stm32mp157c-ed1-u-boot.dtsi index 84af7fa47b..a07c585415 100644 --- a/arch/arm/dts/stm32mp157c-ed1-u-boot.dtsi +++ b/arch/arm/dts/stm32mp157c-ed1-u-boot.dtsi @@ -21,6 +21,20 @@ st,stm32prog-gpios = <&gpioa 14 GPIO_ACTIVE_LOW>; };
- firmware {
optee {
compatible = "linaro,optee-tz";
method = "smc";
};
- };
- reserved-memory {
optee@fe000000 {
reg = <0xfe000000 0x02000000>;
no-map;
};
- };
- led { red { label = "error";
diff --git a/arch/arm/dts/stm32mp157c-ed1.dts b/arch/arm/dts/stm32mp157c-ed1.dts index 4fb71100f5..186dc46754 100644 --- a/arch/arm/dts/stm32mp157c-ed1.dts +++ b/arch/arm/dts/stm32mp157c-ed1.dts @@ -70,11 +70,6 @@ reg = <0xe8000000 0x8000000>; no-map; };
optee@fe000000 {
reg = <0xfe000000 0x02000000>;
no-map;
};
};
aliases {
diff --git a/arch/arm/dts/stm32mp15xx-dkx.dtsi b/arch/arm/dts/stm32mp15xx-dkx.dtsi index 812e370ee4..7589c6f9dc 100644 --- a/arch/arm/dts/stm32mp15xx-dkx.dtsi +++ b/arch/arm/dts/stm32mp15xx-dkx.dtsi @@ -58,11 +58,6 @@ reg = <0xd4000000 0x4000000>; no-map; };
optee@de000000 {
reg = <0xde000000 0x02000000>;
no-map;
};
};
led {
Reviewed-by: Patrice Chotard patrice.chotard@st.com
Thanks

Hi,
From: Patrick DELAUNAY patrick.delaunay@st.com Sent: vendredi 5 juin 2020 09:25
From: Etienne Carriere etienne.carriere@linaro.org
Add OP-TEE firmware node in stm32mp15 U-Boot DTSI. This node is needed since commit [1] that changed U-Boot/stm32mp15 to detect OP-TEE availability by probing the resource instead of relying on U-Boot configuration. The software sequence implemented by [1] is fine but U-Boot DTS/DTSI files were not updated accordingly since, hence OP-TEE presence is never detected by U-Boot, preventing Linux kernel from using OP-TEE resources.
For consistency and to synchronize stm32mp15 DTSI files (excluding U-Boot specific DTSI files) with the Linux kernel ones, this change also moves the OP- TEE reserved memory nodes from board generic DTSI files to U-Boot specific board DTSI files.
Link: [1] commit 43df0a159df6 ("stm32mp1: dynamically detect op-tee presence") Signed-off-by: Etienne Carriere etienne.carriere@linaro.org Signed-off-by: Patrick Delaunay patrick.delaunay@st.com
arch/arm/dts/stm32mp157a-dk1-u-boot.dtsi | 15 +++++++++++++++ arch/arm/dts/stm32mp157c-ed1-u-boot.dtsi | 14 ++++++++++++++ arch/arm/dts/stm32mp157c-ed1.dts | 5 ----- arch/arm/dts/stm32mp15xx-dkx.dtsi | 5 ----- 4 files changed, 29 insertions(+), 10 deletions(-)
Applied to u-boot-stm/master, thanks!
Regards
Patrick

Hi
On 6/5/20 9:24 AM, Patrick Delaunay wrote:
From: Etienne Carriere etienne.carriere@linaro.org
Fix the sequence in stm32mp1 fdt.c that disables OP-TEE resources defined in FDT when U-boot detects OP-TEE firmware is not present.
Before this change, helper function stm32_fdt_disable_optee() set property status to "disabled" for the OP-TEE reserved memory nodes but this has no impact since Linux kernel does not consider the status property for reserved-memory subnodes. This change make U-Boot to attempt to delete the node instead.
Fixes: 4a1b975dac02 ("board: stm32mp1: reserve memory for OP-TEE in device tree") Signed-off-by: Etienne Carriere etienne.carriere@linaro.org Signed-off-by: Patrick Delaunay patrick.delaunay@st.com
arch/arm/mach-stm32mp/fdt.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/arch/arm/mach-stm32mp/fdt.c b/arch/arm/mach-stm32mp/fdt.c index c723b223e0..959f12efe1 100644 --- a/arch/arm/mach-stm32mp/fdt.c +++ b/arch/arm/mach-stm32mp/fdt.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0+ OR BSD-3-Clause /*
- Copyright (C) 2019, STMicroelectronics - All Rights Reserved
*/
- Copyright (C) 2019-2020, STMicroelectronics - All Rights Reserved
#include <common.h> @@ -224,19 +224,23 @@ static void stm32_fdt_disable_optee(void *blob) { int off, node;
- /* Delete "optee" firmware node */ off = fdt_node_offset_by_compatible(blob, -1, "linaro,optee-tz"); if (off >= 0 && fdtdec_get_is_enabled(blob, off))
fdt_status_disabled(blob, off);
fdt_del_node(blob, off);
- /* Disabled "optee@..." reserved-memory node */
- /* Delete "optee@..." reserved-memory node */ off = fdt_path_offset(blob, "/reserved-memory/"); if (off < 0) return; for (node = fdt_first_subnode(blob, off); node >= 0; node = fdt_next_subnode(blob, node)) {
if (!strncmp(fdt_get_name(blob, node, NULL), "optee@", 6))
fdt_status_disabled(blob, node);
if (strncmp(fdt_get_name(blob, node, NULL), "optee@", 6))
continue;
if (fdt_del_node(blob, node))
}printf("Failed to remove optee reserved-memory node\n");
}
Reviewed-by: Patrice Chotard patrice.chotard@st.com
Thanks

Hi,
From: Patrick DELAUNAY patrick.delaunay@st.com Sent: vendredi 5 juin 2020 09:24
From: Etienne Carriere etienne.carriere@linaro.org
Fix the sequence in stm32mp1 fdt.c that disables OP-TEE resources defined in FDT when U-boot detects OP-TEE firmware is not present.
Before this change, helper function stm32_fdt_disable_optee() set property status to "disabled" for the OP-TEE reserved memory nodes but this has no impact since Linux kernel does not consider the status property for reserved-memory subnodes. This change make U-Boot to attempt to delete the node instead.
Fixes: 4a1b975dac02 ("board: stm32mp1: reserve memory for OP-TEE in device tree") Signed-off-by: Etienne Carriere etienne.carriere@linaro.org Signed-off-by: Patrick Delaunay patrick.delaunay@st.com
Applied to u-boot-stm/master, thanks!
Regards
Patrick
participants (3)
-
Patrice CHOTARD
-
Patrick DELAUNAY
-
Patrick Delaunay