diff options
Diffstat (limited to 'arch/arm/mach-imx/system.c')
| -rw-r--r-- | arch/arm/mach-imx/system.c | 24 | 
1 files changed, 11 insertions, 13 deletions
diff --git a/arch/arm/mach-imx/system.c b/arch/arm/mach-imx/system.c index 3b0733edb68c..d14c33fd6b03 100644 --- a/arch/arm/mach-imx/system.c +++ b/arch/arm/mach-imx/system.c @@ -42,7 +42,10 @@ void mxc_restart(enum reboot_mode mode, const char *cmd)  {  	unsigned int wcr_enable; -	if (wdog_clk) +	if (!wdog_base) +		goto reset_fallback; + +	if (!IS_ERR(wdog_clk))  		clk_enable(wdog_clk);  	if (cpu_is_mx1()) @@ -70,6 +73,7 @@ void mxc_restart(enum reboot_mode mode, const char *cmd)  	/* delay to allow the serial port to show the message */  	mdelay(50); +reset_fallback:  	/* we'll take a jump through zero as a poor second */  	soft_restart(0);  } @@ -79,13 +83,10 @@ void __init mxc_arch_reset_init(void __iomem *base)  	wdog_base = base;  	wdog_clk = clk_get_sys("imx2-wdt.0", NULL); -	if (IS_ERR(wdog_clk)) { +	if (IS_ERR(wdog_clk))  		pr_warn("%s: failed to get wdog clock\n", __func__); -		wdog_clk = NULL; -		return; -	} - -	clk_prepare(wdog_clk); +	else +		clk_prepare(wdog_clk);  }  void __init mxc_arch_reset_init_dt(void) @@ -97,13 +98,10 @@ void __init mxc_arch_reset_init_dt(void)  	WARN_ON(!wdog_base);  	wdog_clk = of_clk_get(np, 0); -	if (IS_ERR(wdog_clk)) { +	if (IS_ERR(wdog_clk))  		pr_warn("%s: failed to get wdog clock\n", __func__); -		wdog_clk = NULL; -		return; -	} - -	clk_prepare(wdog_clk); +	else +		clk_prepare(wdog_clk);  }  #ifdef CONFIG_CACHE_L2X0  |