summaryrefslogtreecommitdiff
path: root/arch/arm/plat-mxc/system.c
diff options
context:
space:
mode:
authorAnson Huang <b20788@freescale.com>2011-08-03 09:47:32 +0800
committerJason Liu <r64343@freescale.com>2012-01-09 20:21:48 +0800
commita5e63d72aa774fdb25b62115baae36d61e5f6fa7 (patch)
treed61e580ba8962730616b9073c7d2ac7a0896f235 /arch/arm/plat-mxc/system.c
parent43824e7d2ee6663a8966e5a29d9631faf0645f66 (diff)
ENGR00154211 [MX6]Add workaround for wdog errata
Errata number:TKT039676 WDOG sw reset is generated by writing to its control register. WDOG's reset is activated by ipg_clk_s, and is de-activated (later) by a synchronized CKIL (32KHz clock). On the other hand SRC samples the WDOG reset with an unsynchronized CKIL clock. If the write to WDOG control register happens between the edges of unsynchronized and synchronized CKIL clocks SRC will miss the wdog reset pulse. Workaround: write wdog control register twice. Signed-off-by: Anson Huang <b20788@freescale.com>
Diffstat (limited to 'arch/arm/plat-mxc/system.c')
-rw-r--r--arch/arm/plat-mxc/system.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/arch/arm/plat-mxc/system.c b/arch/arm/plat-mxc/system.c
index 383013c7c76d..cadf3bb23275 100644
--- a/arch/arm/plat-mxc/system.c
+++ b/arch/arm/plat-mxc/system.c
@@ -43,6 +43,10 @@ void arch_reset(char mode, const char *cmd)
/* wait for reset to assert... */
wcr_enable = (1 << 2);
__raw_writew(wcr_enable, wdog_base);
+ /* errata TKT039676, SRS bit may be missed when
+ SRC sample it, need to write the wdog controller
+ twice to avoid it */
+ __raw_writew(wcr_enable, wdog_base);
/* wait for reset to assert... */
mdelay(500);