
On Thu, Sep 30, 2010 at 03:48:36PM -0500, Timur Tabi wrote:
On Thu, Sep 30, 2010 at 3:15 PM, ame ayman@phx1-ss-2-lb.cnet.com wrote:
On my 460ex board, i've tried to add CONFIG_WATCHDOG to the config and it appears to work until the board tries to boot. ?At that point I can count down about 10 seconds and the reboot happens. ?The 10s correlates with what I think the watchdog is being set to. ?I've inserted some WATCHDOG_RESET() invocations wrapping memmove_wd (which admittedly should not be needed), but it does not have an effect.
Looks to me like your implementation of WATCHDOG_RESET() is broken. It's not actually resetting the watchdog. That's what you should debug.
I suspect that that is the case, but trawling through the u-boot code it appears that WATCHDOG_RESET is a macro that eventually does one of two things: a) if asm, bl watchdog_reset b) if c, watchdog_reset()
watchdog_reset in turn saves the interrupt state, disables interrupts, invokes reset_4xx_watchdog, then restores the interrupt state.
Finally reset_4xx_watchdog does mtspr(tsr, 0xc0000000) where tsr is 0x150 IIRC.
All of this is in the u-boot source, mostly in cpu.c and watchdog.h (i.e. none of this is custom for my board, it is part of the ppc44x code).
I've dumped the binary to make sure the methods are actually in the code, manipulating the spr, and getting called.
ame