From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marek Vasut Date: Tue, 20 Sep 2011 06:16:59 +0200 Subject: [U-Boot] [PATCH] MX31: Disable watchdog during low-power modes In-Reply-To: <1316454670-31278-1-git-send-email-fabio.estevam@freescale.com> References: <1316454670-31278-1-git-send-email-fabio.estevam@freescale.com> Message-ID: <201109200616.59531.marek.vasut@gmail.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On Monday, September 19, 2011 07:51:10 PM Fabio Estevam wrote: > Turn on the watchdog WDZST bit so that watchdog timer does not count during > low power modes. > > Prior to applying this patch mx31pdk board got watchdog resets because when > it booted in the Linux prompt and there was no activity, the system > entered into idle mode while watchdog timer was still active. > > Fix this by disabling watchdog timer during idle mode. > > Signed-off-by: Fabio Estevam > --- > arch/arm/cpu/arm1136/mx31/timer.c | 4 ++-- > arch/arm/include/asm/arch-mx31/imx-regs.h | 2 ++ > 2 files changed, 4 insertions(+), 2 deletions(-) > > diff --git a/arch/arm/cpu/arm1136/mx31/timer.c > b/arch/arm/cpu/arm1136/mx31/timer.c index c05a39d..7197108 100644 > --- a/arch/arm/cpu/arm1136/mx31/timer.c > +++ b/arch/arm/cpu/arm1136/mx31/timer.c > @@ -173,8 +173,8 @@ void mxc_hw_watchdog_enable(void) > #else > secs = 64; > #endif > - writew(readw(&wdog->wcr) | (secs << WDOG_WT_SHIFT) | WDOG_ENABLE, > - &wdog->wcr); > + writew(readw(&wdog->wcr) | (secs << WDOG_WT_SHIFT) | WDOG_ENABLE > + | WDOG_WDZST, &wdog->wcr); Maybe tmp = readw(); tmp |= ... writel(tmp, ...); ? > } > > > diff --git a/arch/arm/include/asm/arch-mx31/imx-regs.h > b/arch/arm/include/asm/arch-mx31/imx-regs.h index 2064870..338ba4d 100644 > --- a/arch/arm/include/asm/arch-mx31/imx-regs.h > +++ b/arch/arm/include/asm/arch-mx31/imx-regs.h > @@ -71,6 +71,8 @@ struct cspi_regs { > /* Watchdog Timer (WDOG) registers */ > #define WDOG_ENABLE (1 << 2) > #define WDOG_WT_SHIFT 8 > +#define WDOG_WDZST 1 (1 << 0) ? > + > struct wdog_regs { > u16 wcr; /* Control */ > u16 wsr; /* Service */