imx: wdog: correct wcr register settings
authorPeng Fan <Peng.Fan@freescale.com>
Mon, 14 Sep 2015 05:34:44 +0000 (13:34 +0800)
committerStefano Babic <sbabic@denx.de>
Sun, 20 Sep 2015 07:39:35 +0000 (09:39 +0200)
We should not simple use "writew(WCR_WDE, &wdog->wcr)" to set
wcr, since this will override bits set before reset_cpu.

Use clrsetbits_le16 instead of writew to fix this issue.

Signed-off-by: Peng Fan <Peng.Fan@freescale.com>
Cc: Stefano Babic <sbabic@denx.de>
Cc: Fabio Estevam <fabio.estevam@freescale.com>
Cc: Sebastian Siewior <bigeasy@linutronix.de>
Tested-by: Fabio Estevam <fabio.estevam@freescale.com>
drivers/watchdog/imx_watchdog.c

index 1d18d4b269f8af94e4f8cae77bdc9a39b5524f8e..9a77a54192be10211da9ebb716f89019290263fc 100644 (file)
@@ -55,7 +55,8 @@ void reset_cpu(ulong addr)
 {
        struct watchdog_regs *wdog = (struct watchdog_regs *)WDOG1_BASE_ADDR;
 
-       writew(WCR_WDE, &wdog->wcr);
+       clrsetbits_le16(&wdog->wcr, 0, WCR_WDE);
+
        writew(0x5555, &wdog->wsr);
        writew(0xaaaa, &wdog->wsr);     /* load minimum 1/2 second timeout */
        while (1) {