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.stras...@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 <s...@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,
grygorii
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to