[U-Boot] OMAP watchdog timer reset on BBB

Grygorii Strashko grygorii.strashko at ti.com
Mon Sep 16 08:43:09 UTC 2019

On 16/09/2019 10:05, Suniel Mahesh wrote:
> Hi all,
> On 14/09/19 12:55, Sam Protsenko wrote:
>> Hi Grygorii,
>> On Fri, Sep 13, 2019 at 8:58 PM Grygorii Strashko
>> <grygorii.strashko at ti.com> 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.
>>> It seems that
>>>          priv->wdt_trgr_pattern = 0x1234;
>>> need to be moved in omap3_wdt_probe()
>> Thanks a lot for the investigation. I'll check that once I have some spare time.
> I have done some investigation and I am unable to conclude the behaviour(though the problem got fixed)
> Here are my observations:
> watchdog timer doesn't reset the board if booted via sd-card and serial.
> https://paste.ubuntu.com/p/tjcPhv4FMQ/ (sd card boot)
> https://pastebin.ubuntu.com/p/X4tkp4ngMK/ (serial boot)
> https://pastebin.ubuntu.com/p/WvS9PZb45p/ (serial boot with print messages)
> Sam was right. watchdog timer is resetting the board after conversion to DM, but only if we booted via emmc.
> earlier for some reason I couldn't concentrate on emmc booting. "my bad".
> analyzed the behaviour, the count is getting reset in the register when ever watchdog_reset is called but for some reason
> at around < 60s, the board gets reset (this shouldn't happen...!!). please go through the pastebin link:
> https://pastebin.ubuntu.com/p/td6c4SQmnm/ (emmc boot)
> As pointed by Grygorii, I just moved priv->wdt_trgr_pattern into probe and the problem disappears. didn't understand how that
> change made a difference. Generally as per documentation all initializations are to be done in probe (but still).
> Why this is not happening on the other two bootmodes (sd-card and serial) ?
> Can some body shed some light for this behaviour ?

It's kinda simple - non DM code defines wdt_trgr_pattern as static so it's initialized only once.
Your code initializes it on every reset, so violates TRM.

TRM says:
"The specific reload sequence is performed whenever the written value on the WDT_WTGR register differs
from its previous value. In this case, reload is executed in the same way as an overflow autoreload, but
without the generation of a reset pulse."

> The problem seems to be fixed, I will be patching u-boot in a while. Request Sam if possible to check/test/deploy the change on the
> board and acknowledge. (I have already tested the changeset and its fixed at my end)

Best regards,

More information about the U-Boot mailing list