[PATCH] arm64: dts: st: fix arm,smc-id of the SMC watchdog on stm32mp2
Marek Vasut
marex at nabladev.com
Fri Oct 30 22:59:55 PDT 2026
On 9/28/26 10:45 AM, Alexandre TORGUE wrote:
Hello all,
> On 9/7/26 11:14, Mateusz Nowicki wrote:
>> OP-TEE implements the STM32MP2 watchdog SMC service with function ID
>> 0xbc000000 (CFG_WDT_SM_HANDLER_ID), not 0xb200005a. With the current
>> value the arm_smc_wdt probe fails with -EIO and the IWDG started by the
>> bootloader is never refreshed.
>>
>> Fixes: 89fca38168c9 ("arm64: dts: st: add arm-wdt node for watchdog
>> support on stm32mp251")
>> Fixes: e9b03ef21386 ("arm64: dts: st: introduce stm32mp23 SoCs family")
>> Signed-off-by: Mateusz Nowicki <mateusz.nowicki at posteo.net>
>> ---
>> arch/arm64/boot/dts/st/stm32mp231.dtsi | 2 +-
>> arch/arm64/boot/dts/st/stm32mp251.dtsi | 2 +-
>> 2 files changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/arch/arm64/boot/dts/st/stm32mp231.dtsi b/arch/arm64/boot/
>> dts/st/stm32mp231.dtsi
>> index 9e1d240888ff..35e247af957c 100644
>> --- a/arch/arm64/boot/dts/st/stm32mp231.dtsi
>> +++ b/arch/arm64/boot/dts/st/stm32mp231.dtsi
>> @@ -35,7 +35,7 @@ arm-pmu {
>> arm_wdt: watchdog {
>> compatible = "arm,smc-wdt";
>> - arm,smc-id = <0xb200005a>;
>> + arm,smc-id = <0xbc000000>;
>> status = "disabled";
>> };
>> diff --git a/arch/arm64/boot/dts/st/stm32mp251.dtsi b/arch/arm64/boot/
>> dts/st/stm32mp251.dtsi
>> index 9c63fdb5a885..2dcbba65e298 100644
>> --- a/arch/arm64/boot/dts/st/stm32mp251.dtsi
>> +++ b/arch/arm64/boot/dts/st/stm32mp251.dtsi
>> @@ -36,7 +36,7 @@ arm-pmu {
>> arm_wdt: watchdog {
>> compatible = "arm,smc-wdt";
>> - arm,smc-id = <0xb200005a>;
>> + arm,smc-id = <0xbc000000>;
>> status = "disabled";
>> };
>
> Applied on stm32-next.
Since this change, my STM32MP255C board started rebooting after 32
seconds. It turns out, this is caused by an ABI break.
Here is the thing -- old ST downstream fork of OP-TEE OS did expect ARM
SMC WDT ID 0xb200005a (that was the ST ecosystem v5), the OP-TEE OS
4.0.0 fork seems to have handled both, and the new 4.8.0 fork expects
0xbc000000 ID only and does not handle 0xb200005a .
At this point, with Linux 6.18 the kernel is trying to trigger the WDT
using SMC ID 0xb200005a , which on my machine works (older OP-TEE OS).
When I boot linux-next , it is using ID 0xbc000000 and my system reboots
after 32 seconds. (not even mainline Linux versions are consistent here
now, sigh)
I actually found this behavior the other way around -- while forward
porting a system to the new OP-TEE OS 4.8.0 port, which I installed,
then booted Linux 6.18.y, machine started rebooting (SMC ID mismatch,
new OP-TEE expects 0xbc000000 and linux-stable sends 0xb200005a), so I
booted recovery, and ... recovery is also Linux 6.18.y, so I could not
recover the machine that way anymore.
Currently, I added [1] to OP-TEE OS as a mitigation of this ABI break,
but I don't think everyone can still update their bootloader stack in
this way. And with this patch in place (and inconsistency between Linux
stable 6.18.y and upcoming 7.4.y) the ABI break will cause some serious
mess.
How shall we deal with this ?
Thank you for your help !
[1]
https://github.com/STMicroelectronics/optee_os/commit/8450f25923c0c98465decc975f25efed19f82ba0
--
Best regards,
Marek Vasut
More information about the linux-arm-kernel
mailing list