[U-Boot] [PATCH v2 2/2]: arm:kirkwood: Add hardware watchdog support for Marvell Kirkwood boards

Prafulla Wadaskar prafulla at marvell.com
Thu Oct 29 09:32:31 CET 2009


 

> -----Original Message-----
> From: Simon Kagstrom [mailto:simon.kagstrom at netinsight.net] 
> Sent: Thursday, October 29, 2009 1:41 PM
> To: U-Boot ML; Prafulla Wadaskar; Wolfgang Denk
> Subject: [PATCH v2 2/2]: arm:kirkwood: Add hardware watchdog 
> support for Marvell Kirkwood boards
> 
> Initialize by calling the generic API watchdog_enable() with 
> the number
> of seconds for the watchdog to timeout. It's not possible to 
> disable the
> watchdog once it's on.
> 
> Signed-off-by: Simon Kagstrom <simon.kagstrom at netinsight.net>
> ---
> ChangeLog:
>   v2:
>      * Remove watchdog_disable()
>      * Add check to see that the maximum timeout supported by 
> the hardware
>        is not exceeded
> 
>  cpu/arm926ejs/kirkwood/timer.c |   38 
> ++++++++++++++++++++++++++++++++++++++
>  1 files changed, 38 insertions(+), 0 deletions(-)
> 
> diff --git a/cpu/arm926ejs/kirkwood/timer.c 
> b/cpu/arm926ejs/kirkwood/timer.c
> index 817ff42..69a5cb7 100644
> --- a/cpu/arm926ejs/kirkwood/timer.c
> +++ b/cpu/arm926ejs/kirkwood/timer.c
> @@ -23,8 +23,10 @@
>  
>  #include <common.h>
>  #include <asm/arch/kirkwood.h>
> +#include <watchdog.h>
>  
>  #define UBOOT_CNTR	0	/* counter to use for uboot timer */
> +#define WATCHDOG_TMR	2
>  
>  /* Timer reload and current value registers */
>  struct kwtmr_val {
> @@ -166,3 +168,39 @@ int timer_init(void)
>  
>  	return 0;
>  }
> +
> +#if defined(CONFIG_HW_WATCHDOG)
> +static unsigned long watchdog_timeout = 5;
> +void hw_watchdog_reset(void)
> +{
> +	u32 time = CONFIG_SYS_TCLK * watchdog_timeout;
> +
> +	writel(time, CNTMR_VAL_REG(WATCHDOG_TMR));
> +}
> +
> +#define MAX_TIMEOUT (0xffffffff / CONFIG_SYS_TCLK)
> +int watchdog_enable(unsigned int timeout_secs)
> +{
> +	struct kwcpu_registers *cpureg =
> +		(struct kwcpu_registers *)KW_CPU_REG_BASE;
> +	u32 rstoutn_mask;
> +	u32 cntmrctrl;
> +
> +	if (timeout_secs > MAX_TIMEOUT)
> +		return -1;
> +
> +	watchdog_timeout = timeout_secs;
> +	/* Enable CPU reset if watchdog expires */
> +	rstoutn_mask = readl(cpureg->rstoutn_mask);
> +	writel(rstoutn_mask |= 2, &cpureg->rstoutn_mask);
> +	hw_watchdog_reset();
> +
> +	/* Enable the watchdog */
> +	cntmrctrl = readl(CNTMR_CTRL_REG);
> +	cntmrctrl |= CTCR_ARM_TIMER_EN(WATCHDOG_TMR);
> +	cntmrctrl |= CTCR_ARM_TIMER_AUTO_EN(WATCHDOG_TMR);
> +	writel(cntmrctrl, CNTMR_CTRL_REG);
> +
> +	return 0;
> +}
> +#endif
> -- 
> 1.6.0.4

Ack
Regards..
Prafulla . .

> 
> 


More information about the U-Boot mailing list