On 10/19/2026 5:46 PM, Richard GENOUD wrote:
> Le 17/10/2026 à 04:40, Kumar, Udit a écrit :
>>
>>
>> On 10/16/2026 2:35 PM, Markus Schneider-Pargmann wrote:
>>> On HS-SE platforms TIFS takes longer to initialize. TIFS only removes
>>> the firewall on the registers at the end of initialization. On HS-SE the
>>> U-Boot ctrl_mmr_unlock() can happen before TIFS removed the firewall
>>> leading to a race condition. This leads to a broken watchdog since the
>>> signal configuration doesn't succeed because the write doesn't take
>>> effect.
>>>
>>> Wait for TIFS to be initialized using k3_sysfw_wait_ready() before doing
>>> ctrl_mmr_unlock(). Note that spl_early_init() needs to be done first to
>>> setup DM.
>>>
>>> Link: https://lore.kernel.org/u-boot/20250815160240.3575140-1-
>>> [email protected]/
>>> Link: https://lore.kernel.org/u-boot/20260225051559.416445-1-u-
>>> [email protected]/
>>> Signed-off-by: Markus Schneider-Pargmann <[email protected]>
>>> ---
>>
>> I have tested on J722S hs-fs and hs-se devices,
>> Post this patch wdt reset got functional on hs-se device.
>>
>> So for this patch
>>
>> Tested-by: Udit Kumar <[email protected]>
>>
> I tested it on my LPM series with j722s HS-FS, and I still need a
> ctrl_mmr_unlock() before spl_early_init() and also another after
> k3_sysfw_print_ver() otherwise querying pmic fails.
>
Thanks Richard for testing LPM flow.
I realized now, you need PMIC which is probed in spl_early_init(), so
MMR has to be unlocked before this call.
However below patch fixes wdt flow in HS_SE devices.
> Regards,
> Richard
>
>>> arch/arm/mach-k3/j722s/j722s_init.c | 5 +++--
>>> 1 file changed, 3 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/arch/arm/mach-k3/j722s/j722s_init.c b/arch/arm/mach-k3/
>>> j722s/j722s_init.c
>>> index 1180c75f551d..c15b3b2682d9 100644
>>> --- a/arch/arm/mach-k3/j722s/j722s_init.c
>>> +++ b/arch/arm/mach-k3/j722s/j722s_init.c
>>> @@ -84,13 +84,14 @@ static void k3_spl_init(void)
>>> */
>>> store_boot_info_from_rom();
>>> - ctrl_mmr_unlock();
>>> -
>>> /* Init DM early */
>>> ret = spl_early_init();
>>> if (ret)
>>> panic("spl_early_init() failed: %d\n", ret);
>>> + k3_sysfw_wait_ready();
>>> + ctrl_mmr_unlock();
>>> +
>>> /*
>>> * Process pinctrl for the serial0 a.k.a. WKUP_UART0 module and
>>> continue
>>> * regardless of the result of pinctrl. Do this without probing
>>> the
>>>
>>
>
>