Message ID | 1307891100-31123-2-git-send-email-ynezz@true.cz |
---|---|
State | New |
Headers | show |
On Sunday, June 12, 2011 8:05 AM, Petr Štetiar wrote: > > On all ep93xx based boards from Technologic Systems, there's CPLD watchdog > available, so use this one to reset the board instead of the soft reset in > CPU. I've seen some weird lockups with the soft reset on ep93xx in the past, > while the reset via CPLD watchdog seems to be rock solid (tm) and works fine > so far. > > Cc: Ryan Mallon <ryan@bluewatersys.com> > Tested-by: Mika Westerberg <mika.westerberg@iki.fi> > Acked-by: H Hartley Sweeten <hsweeten@visionengravers.com> > Signed-off-by: Petr Štetiar <ynezz@true.cz> Please submit to Russell's Patch Tracker. Regards, Hartley
diff --git a/arch/arm/mach-ep93xx/include/mach/system.h b/arch/arm/mach-ep93xx/include/mach/system.h index 6d661fe..67ec430 100644 --- a/arch/arm/mach-ep93xx/include/mach/system.h +++ b/arch/arm/mach-ep93xx/include/mach/system.h @@ -2,7 +2,10 @@ * arch/arm/mach-ep93xx/include/mach/system.h */ +#include <linux/io.h> + #include <mach/hardware.h> +#include <mach/ts72xx.h> static inline void arch_idle(void) { @@ -13,11 +16,16 @@ static inline void arch_reset(char mode, const char *cmd) { local_irq_disable(); - /* - * Set then clear the SWRST bit to initiate a software reset - */ - ep93xx_devcfg_set_bits(EP93XX_SYSCON_DEVCFG_SWRST); - ep93xx_devcfg_clear_bits(EP93XX_SYSCON_DEVCFG_SWRST); + if (board_is_ts7200() || board_is_ts7250() || board_is_ts7260() || + board_is_ts7300() || board_is_ts7400()) { + /* We use more reliable CPLD watchdog to perform the reset */ + __raw_writeb(0x5, TS72XX_WDT_FEED_PHYS_BASE); + __raw_writeb(0x1, TS72XX_WDT_CONTROL_PHYS_BASE); + } else { + /* Set then clear the SWRST bit to initiate a software reset */ + ep93xx_devcfg_set_bits(EP93XX_SYSCON_DEVCFG_SWRST); + ep93xx_devcfg_clear_bits(EP93XX_SYSCON_DEVCFG_SWRST); + } while (1) ;