[U-Boot] OMAP watchdog timer reset on BBB

Suniel Mahesh sunil.m at techveda.org
Sat Sep 14 05:07:35 UTC 2019

On 13/09/19 23:28, Grygorii Strashko wrote:
> On 12/09/2019 19:33, Sam Protsenko wrote:
>> Hi Stefan,
>> On Thu, Sep 12, 2019 at 5:38 PM Stefan Roese <sr at denx.de> wrote:
>>> Hi Sam,
>>> On 12.09.19 15:45, Sam Protsenko wrote:
>>>> Hi Suniel,
>>>> After transition to DM WDT, watchdog timer on BeagleBone Black resets
>>>> the board after 1 minute or so. I'm using this defconfig: [1]. After
>>>> disabling CONFIG_WDT and CONFIG_WATCHDOG options the board doesn't
>>>> reset. I guess it might be happening on other boards using
>>>> CONFIG_WDT_OMAP3 as well. The issue can be reproduced by stopping in
>>>> U-Boot shell (=>) and waiting for 1 minute.
>>>> Do you know by chance why it might be happening, or maybe some fix
>>>> already exists?
>>>> Thanks!
>>>> [1] https://pastebin.ubuntu.com/p/Zz5bY6cYXS/
>>> So you have enabled the watchdog and should see something like this
>>> upon bootup:
>>> WDT:   Started without servicing (60s timeout)
>>> Is this correct? Then you need to enable the U-Boot internal WDT
>>> servicing by enabling CONFIG_WATCHDOG as well, as this will
>>> result in the internal U-Boot servicing of the watchdog. Then
>>> you should see this upon bootup and no reset will appear in
>>> U-Boot:
>>> WDT:   Started with servicing (60s timeout)
>> I'm seeing this ("with servicing") line, and CONFIG_WATCHDOG is
>> already enabled in am335x_evm_defconfig. So I think it's an issue,
>> which *probably* appeared when watchdog drivers were converted to
>> Driver Model (this defconfig is using CONFIG_WDT + CONFIG_WDT_OMAP3
>> options). Any clues what can be wrong?
>>> Does this help?
> It seems logic of hw_watchdog_reset() and omap3_wdt_reset() is different.
> Pay attention at wdt_trgr_pattern.

Didn't do anything different. It was just a replication of hw_watchdog_reset() logic into omap3_wdt_reset().

in hw_watchdog_reset: a global variable "wdt_trgr_pattern" is assigned a value and written into register
static unsigned int wdt_trgr_pattern = 0x1234;
wdt_trgr_pattern = ~wdt_trgr_pattern;
writel(wdt_trgr_pattern, &wdt->wdtwtgr);

in omap3_wdt_reset:  as per DM, all glob var's must be part of drivers private structure
so initialised priv->wdt_trgr_pattern = 0x1234; and then written into register
priv->wdt_trgr_pattern = ~(priv->wdt_trgr_pattern);
writel(priv->wdt_trgr_pattern, &priv->regs->wdtwtgr);

> It seems that
>      priv->wdt_trgr_pattern = 0x1234;
> need to be moved in omap3_wdt_probe()

As per my understanding the above change will not make any difference, because its just initialization of the variable.
should be ready before its use.
Please go through this pastebin link, at my end, omap3_wdt_reset() happens at regular intervals, where ever
it is triggered. (print messages are inserted in omap3_wdt_reset)

The target doesn't restart.


More information about the U-Boot mailing list