[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