[U-Boot] OMAP watchdog timer reset on BBB
Sam Protsenko
semen.protsenko at linaro.org
Mon Sep 16 11:13:21 UTC 2019
Hi Suniel, Grygorii,
Tested eMMC boot on BBB with this patch (suggested by Grygorii):
[1] https://pastebin.ubuntu.com/p/pKhX6Jsjr9/
I can confirm that it works fine now, with patch applied, no reset occurs.
Guys, please send out the patch, you can use [1] as a boilerplate.
Thanks!
On Mon, Sep 16, 2019 at 11:43 AM Grygorii Strashko
<grygorii.strashko at ti.com> wrote:
>
>
>
> 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,
> grygorii
More information about the U-Boot
mailing list