* [PATCH v2 1/5] ARM: dts: stm32: add TAMP backup register in stm32mp131.dtsi
2026-09-30 7:49 [PATCH v2 0/5] Add STM32 TAMP nvram support Patrice Chotard
@ 2026-09-30 7:49 ` Patrice Chotard
2026-09-30 7:49 ` [PATCH v2 2/5] ARM: dts: stm32: add TAMP backup register in stm32mp151.dtsi Patrice Chotard
` (3 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: Patrice Chotard @ 2026-09-30 7:49 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Maxime Coquelin,
Alexandre Torgue
Cc: devicetree, linux-stm32, linux-arm-kernel, linux-kernel,
Patrice Chotard, Simeon Marijon
From: Simeon Marijon <simeon.marijon@foss.st.com>
TAMP backup registers allow information sharing between different
software components/execution levels.
They are described individually as nvmem cells.
Signed-off-by: Simeon Marijon <simeon.marijon@foss.st.com>
Signed-off-by: Patrice Chotard <patrice.chotard@foss.st.com>
---
arch/arm/boot/dts/st/stm32mp131.dtsi | 34 ++++++++++++++++++++++++++++++++++
1 file changed, 34 insertions(+)
diff --git a/arch/arm/boot/dts/st/stm32mp131.dtsi b/arch/arm/boot/dts/st/stm32mp131.dtsi
index 83ae59b73dd0..b37c22b1379c 100644
--- a/arch/arm/boot/dts/st/stm32mp131.dtsi
+++ b/arch/arm/boot/dts/st/stm32mp131.dtsi
@@ -1918,5 +1918,39 @@ gpioi: gpio@5000a000 {
gpio-ranges = <&pinctrl 0 128 8>;
};
};
+
+ tamp: tamp@5c00a000 {
+ compatible = "st,stm32-tamp", "syscon", "simple-mfd";
+ #address-cells = <1>;
+ #size-cells = <1>;
+ reg = <0x5c00a000 0x400>;
+ ranges;
+
+ nvram: nvram@5c00a100 {
+ compatible = "st,stm32mp15-tamp-nvram";
+ reg = <0x5c00a100 0x80>;
+
+ nvmem-layout {
+ compatible = "fixed-layout";
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ saes_secret_key: tamp-bkp@0 {
+ /* see saes secret key feature */
+ reg = <0x0 0x20>;
+ };
+
+ boot_mode: tamp-bkp@78 {
+ /* see boot mode selection feature */
+ reg = <0x78 0x4>;
+ };
+
+ boot_counter: tamp-bkp@7c {
+ /* see boot counter feature */
+ reg = <0x7c 0x4>;
+ };
+ };
+ };
+ };
};
};
--
2.43.0
^ permalink raw reply related [flat|nested] 7+ messages in thread* [PATCH v2 2/5] ARM: dts: stm32: add TAMP backup register in stm32mp151.dtsi
2026-09-30 7:49 [PATCH v2 0/5] Add STM32 TAMP nvram support Patrice Chotard
2026-09-30 7:49 ` [PATCH v2 1/5] ARM: dts: stm32: add TAMP backup register in stm32mp131.dtsi Patrice Chotard
@ 2026-09-30 7:49 ` Patrice Chotard
2026-09-30 8:03 ` sashiko-bot
2026-09-30 7:49 ` [PATCH v2 3/5] arm64: dts: st: add TAMP backup register in stm32mp211.dtsi Patrice Chotard
` (2 subsequent siblings)
4 siblings, 1 reply; 7+ messages in thread
From: Patrice Chotard @ 2026-09-30 7:49 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Maxime Coquelin,
Alexandre Torgue
Cc: devicetree, linux-stm32, linux-arm-kernel, linux-kernel,
Patrice Chotard, Simeon Marijon
From: Simeon Marijon <simeon.marijon@foss.st.com>
TAMP backup registers allow information sharing between different
software components/execution levels.
They are described individually as nvmem cells.
Signed-off-by: Simeon Marijon <simeon.marijon@foss.st.com>
Signed-off-by: Patrice Chotard <patrice.chotard@foss.st.com>
---
arch/arm/boot/dts/st/stm32mp151.dtsi | 83 ++++++++++++++++++++++++++++++++++++
1 file changed, 83 insertions(+)
diff --git a/arch/arm/boot/dts/st/stm32mp151.dtsi b/arch/arm/boot/dts/st/stm32mp151.dtsi
index 84f68e8563d8..2ea505ce1748 100644
--- a/arch/arm/boot/dts/st/stm32mp151.dtsi
+++ b/arch/arm/boot/dts/st/stm32mp151.dtsi
@@ -2060,7 +2060,90 @@ i2c6: i2c@5c009000 {
tamp: tamp@5c00a000 {
compatible = "st,stm32-tamp", "syscon", "simple-mfd";
+ #address-cells = <1>;
+ #size-cells = <1>;
reg = <0x5c00a000 0x400>;
+ ranges;
+
+ nvram: nvram@5c00a100 {
+ compatible = "st,stm32mp15-tamp-nvram";
+ reg = <0x5c00a100 0x80>;
+
+ nvmem-layout {
+ compatible = "fixed-layout";
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ wakeup_sec: tamp-bkp@0 {
+ reg = <0x0 0x4>;
+ };
+
+ m4_security_perimeter_exti1: tamp-bkp@4 {
+ /* see cortex-m4 wake up feature */
+ reg = <0x4 0x4>;
+ };
+
+ m4_security_perimeter_exti2: tamp-bkp@8 {
+ /* see cortex-m4 wake up feature */
+ reg = <0x8 0x4>;
+ };
+
+ m4_security_perimeter_exti3: tamp-bkp@c {
+ /* see cortex-m4 wake up feature */
+ reg = <0xc 0x4>;
+ };
+
+ magic_number: tamp-bkp@10 {
+ /* see ddr and cpu wake up management feature */
+ reg = <0x10 0x4>;
+ };
+
+ branch_address: tamp-bkp@14 {
+ /* see ddr and cpu wake up management feature */
+ reg = <0x14 0x4>;
+ };
+
+ fwu_info: tamp-bkp@28 {
+ /* see firmware update info feature */
+ reg = <0x28 0x4>;
+ };
+
+ copro_rsc_tbl_address: tamp-bkp@44 {
+ /* see cortex-m4 management feature */
+ reg = <0x44 0x4>;
+ };
+
+ cortex_m_state: tamp-bkp@48 {
+ /* see cortex-m4 management feature */
+ reg = <0x48 0x4>;
+ };
+
+ boot_mode: tamp-bkp@50 {
+ /* see boot mode selection feature */
+ reg = <0x50 0x4>;
+ };
+
+ boot_counter: tamp-bkp@54 {
+ /* see boot counter feature */
+ reg = <0x54 0x4>;
+ };
+
+ m4_wakeup_area_start: tamp-bkp@58 {
+ /* see cortex-m4 wake up feature */
+ reg = <0x58 0x4>;
+ };
+
+ m4_wakeup_area_length: tamp-bkp@5c {
+ /* see cortex-m4 wake up feature */
+ reg = <0x5c 0x4>;
+ };
+
+ m4_wakeup_area_hash: tamp-bkp@60 {
+ /* SHA-256 value see Cortex-M4 wake up feature */
+ reg = <0x60 0x20>;
+ };
+ };
+ };
};
/*
--
2.43.0
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: [PATCH v2 2/5] ARM: dts: stm32: add TAMP backup register in stm32mp151.dtsi
2026-09-30 7:49 ` [PATCH v2 2/5] ARM: dts: stm32: add TAMP backup register in stm32mp151.dtsi Patrice Chotard
@ 2026-09-30 8:03 ` sashiko-bot
0 siblings, 0 replies; 7+ messages in thread
From: sashiko-bot @ 2026-09-30 8:03 UTC (permalink / raw)
To: Patrice Chotard; +Cc: robh, conor+dt, devicetree
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] dt-bindings: stm32: data race on TAMP registers due to dual regmap mapping
--
commit 8441cd6ab8bc051ddef5b9749ba604477c2ab5e4
Author: Simeon Marijon <simeon.marijon@foss.st.com>
ARM: dts: stm32: add TAMP backup register in stm32mp151.dtsi
This commit adds the TAMP backup registers as individual nvmem cells in the
stm32mp151 device tree. They allow information sharing between different
software components and execution levels.
> diff --git a/arch/arm/boot/dts/st/stm32mp151.dtsi b/arch/arm/boot/dts/st/stm32mp151.dtsi
> --- a/arch/arm/boot/dts/st/stm32mp151.dtsi
> +++ b/arch/arm/boot/dts/st/stm32mp151.dtsi
> @@ -2060,7 +2060,90 @@ i2c6: i2c@5c009000 {
>
> tamp: tamp@5c00a000 {
> compatible = "st,stm32-tamp", "syscon", "simple-mfd";
> + #address-cells = <1>;
> + #size-cells = <1>;
> reg = <0x5c00a000 0x400>;
> + ranges;
> +
> + nvram: nvram@5c00a100 {
> + compatible = "st,stm32mp15-tamp-nvram";
> + reg = <0x5c00a100 0x80>;
[Severity: High]
Does this child resource definition cause a data race by overlapping the parent
syscon's memory region?
When this node is added, the stm32-tamp-nvram driver binds to it and creates
a second independent MMIO regmap covering the physical address 0x5c00a100:
drivers/nvmem/stm32-tamp-nvram.c:stm32_tamp_nvram_probe() {
...
priv->bkpregs_regmap = devm_regmap_init_mmio(dev, base_addr,
priv->data->bkpregs_regmap_cfg);
...
}
Because this new regmap has its own independent spinlock, it bypasses the
parent syscon regmap's lock.
If a userspace write to the NVMEM cells triggers stm32_tamp_nvram_write_byte(),
it performs a read-modify-write using its independent lock. At the same time,
other drivers like remoteproc might concurrently update the exact same
physical registers using the parent syscon regmap's lock:
drivers/remoteproc/stm32_rproc.c:stm32_rproc_set_m4_state() {
...
err = regmap_update_bits(ddata->m4_state.map,
ddata->m4_state.reg,
ddata->m4_state.mask,
state);
...
}
Could this concurrent access with separate locks lead to data corruption in the
TAMP backup registers?
[ ... ]
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260930-upstream_tamp_nvram_dts_part-v2-0-bd73158ce46b@foss.st.com?part=2
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v2 3/5] arm64: dts: st: add TAMP backup register in stm32mp211.dtsi
2026-09-30 7:49 [PATCH v2 0/5] Add STM32 TAMP nvram support Patrice Chotard
2026-09-30 7:49 ` [PATCH v2 1/5] ARM: dts: stm32: add TAMP backup register in stm32mp131.dtsi Patrice Chotard
2026-09-30 7:49 ` [PATCH v2 2/5] ARM: dts: stm32: add TAMP backup register in stm32mp151.dtsi Patrice Chotard
@ 2026-09-30 7:49 ` Patrice Chotard
2026-09-30 7:49 ` [PATCH v2 4/5] arm64: dts: st: add TAMP backup register in stm32mp231.dtsi Patrice Chotard
2026-09-30 7:49 ` [PATCH v2 5/5] arm64: dts: st: add TAMP backup register in stm32mp251.dtsi Patrice Chotard
4 siblings, 0 replies; 7+ messages in thread
From: Patrice Chotard @ 2026-09-30 7:49 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Maxime Coquelin,
Alexandre Torgue
Cc: devicetree, linux-stm32, linux-arm-kernel, linux-kernel,
Patrice Chotard, Clément Le Goffic
TAMP backup registers allow information sharing between different
software components/execution levels.
They are described individually as nvmem cells.
Signed-off-by: Clément Le Goffic <clement.legoffic@foss.st.com>
Signed-off-by: Patrice Chotard <patrice.chotard@foss.st.com>
---
arch/arm64/boot/dts/st/stm32mp211.dtsi | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/arch/arm64/boot/dts/st/stm32mp211.dtsi b/arch/arm64/boot/dts/st/stm32mp211.dtsi
index 4bfd58b26b51..f9fe99dc90a3 100644
--- a/arch/arm64/boot/dts/st/stm32mp211.dtsi
+++ b/arch/arm64/boot/dts/st/stm32mp211.dtsi
@@ -133,6 +133,37 @@ syscfg: syscon@44230000 {
reg = <0x44230000 0x0 0x10000>;
};
+ tamp: tamp@46010000 {
+ compatible = "st,stm32-tamp", "syscon", "simple-mfd";
+ #address-cells = <1>;
+ #size-cells = <2>;
+ reg = <0x46010000 0x0 0x400>;
+ ranges;
+
+ nvram: nvram@46010100 {
+ compatible = "st,stm32mp25-tamp-nvram";
+ reg = <0x46010100 0x0 0x200>;
+
+ nvmem-layout {
+ compatible = "fixed-layout";
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ boot_mode: tamp-bkp@180 {
+ reg = <0x180 0x4>;
+ };
+
+ rsc_tbl_addr: tamp-bkp@184 {
+ reg = <0x184 0x4>;
+ };
+
+ rsc_tbl_size: tamp-bkp@188 {
+ reg = <0x188 0x4>;
+ };
+ };
+ };
+ };
+
intc: interrupt-controller@4ac10000 {
compatible = "arm,gic-400";
reg = <0x4ac10000 0x0 0x1000>,
--
2.43.0
^ permalink raw reply related [flat|nested] 7+ messages in thread* [PATCH v2 4/5] arm64: dts: st: add TAMP backup register in stm32mp231.dtsi
2026-09-30 7:49 [PATCH v2 0/5] Add STM32 TAMP nvram support Patrice Chotard
` (2 preceding siblings ...)
2026-09-30 7:49 ` [PATCH v2 3/5] arm64: dts: st: add TAMP backup register in stm32mp211.dtsi Patrice Chotard
@ 2026-09-30 7:49 ` Patrice Chotard
2026-09-30 7:49 ` [PATCH v2 5/5] arm64: dts: st: add TAMP backup register in stm32mp251.dtsi Patrice Chotard
4 siblings, 0 replies; 7+ messages in thread
From: Patrice Chotard @ 2026-09-30 7:49 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Maxime Coquelin,
Alexandre Torgue
Cc: devicetree, linux-stm32, linux-arm-kernel, linux-kernel,
Patrice Chotard
TAMP backup registers allow information sharing between different
software components/execution levels.
They are described individually as nvmem cells.
Signed-off-by: Patrice Chotard <patrice.chotard@foss.st.com>
---
arch/arm64/boot/dts/st/stm32mp231.dtsi | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/arch/arm64/boot/dts/st/stm32mp231.dtsi b/arch/arm64/boot/dts/st/stm32mp231.dtsi
index 9e1d240888ff..083ec93a2b5f 100644
--- a/arch/arm64/boot/dts/st/stm32mp231.dtsi
+++ b/arch/arm64/boot/dts/st/stm32mp231.dtsi
@@ -1102,6 +1102,37 @@ rtc: rtc@46000000 {
status = "disabled";
};
+ tamp: tamp@46010000 {
+ compatible = "st,stm32-tamp", "syscon", "simple-mfd";
+ #address-cells = <1>;
+ #size-cells = <1>;
+ reg = <0x46010000 0x400>;
+ ranges;
+
+ nvram: nvram@46010100 {
+ compatible = "st,stm32mp25-tamp-nvram";
+ reg = <0x46010100 0x200>;
+
+ nvmem-layout {
+ compatible = "fixed-layout";
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ boot_mode: tamp-bkp@180 {
+ reg = <0x180 0x4>;
+ };
+
+ rsc_tbl_addr: tamp-bkp@184 {
+ reg = <0x184 0x4>;
+ };
+
+ rsc_tbl_size: tamp-bkp@188 {
+ reg = <0x188 0x4>;
+ };
+ };
+ };
+ };
+
pinctrl_z: pinctrl@46200000 {
compatible = "st,stm32mp257-z-pinctrl";
ranges = <0 0x46200000 0x400>;
--
2.43.0
^ permalink raw reply related [flat|nested] 7+ messages in thread* [PATCH v2 5/5] arm64: dts: st: add TAMP backup register in stm32mp251.dtsi
2026-09-30 7:49 [PATCH v2 0/5] Add STM32 TAMP nvram support Patrice Chotard
` (3 preceding siblings ...)
2026-09-30 7:49 ` [PATCH v2 4/5] arm64: dts: st: add TAMP backup register in stm32mp231.dtsi Patrice Chotard
@ 2026-09-30 7:49 ` Patrice Chotard
4 siblings, 0 replies; 7+ messages in thread
From: Patrice Chotard @ 2026-09-30 7:49 UTC (permalink / raw)
To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Maxime Coquelin,
Alexandre Torgue
Cc: devicetree, linux-stm32, linux-arm-kernel, linux-kernel,
Patrice Chotard, Simeon Marijon
From: Simeon Marijon <simeon.marijon@foss.st.com>
TAMP backup registers allow information sharing between different
software components/execution levels.
They are described individually as nvmem cells.
Signed-off-by: Simeon Marijon <simeon.marijon@foss.st.com>
Signed-off-by: Patrice Chotard <patrice.chotard@foss.st.com>
---
arch/arm64/boot/dts/st/stm32mp251.dtsi | 31 +++++++++++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/arch/arm64/boot/dts/st/stm32mp251.dtsi b/arch/arm64/boot/dts/st/stm32mp251.dtsi
index 9c63fdb5a885..e98ac3374ad8 100644
--- a/arch/arm64/boot/dts/st/stm32mp251.dtsi
+++ b/arch/arm64/boot/dts/st/stm32mp251.dtsi
@@ -2118,6 +2118,37 @@ rtc: rtc@46000000 {
status = "disabled";
};
+ tamp: tamp@46010000 {
+ compatible = "st,stm32-tamp", "syscon", "simple-mfd";
+ #address-cells = <1>;
+ #size-cells = <1>;
+ reg = <0x46010000 0x400>;
+ ranges;
+
+ nvram: nvram@46010100 {
+ compatible = "st,stm32mp25-tamp-nvram";
+ reg = <0x46010100 0x200>;
+
+ nvmem-layout {
+ compatible = "fixed-layout";
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ boot_mode: tamp-bkp@180 {
+ reg = <0x180 0x4>;
+ };
+
+ rsc_tbl_addr: tamp-bkp@184 {
+ reg = <0x184 0x4>;
+ };
+
+ rsc_tbl_size: tamp-bkp@188 {
+ reg = <0x188 0x4>;
+ };
+ };
+ };
+ };
+
pinctrl_z: pinctrl@46200000 {
#address-cells = <1>;
#size-cells = <1>;
--
2.43.0
^ permalink raw reply related [flat|nested] 7+ messages in thread