[U-Boot] [PATCH u-boot sunxi 01/12] sunxi: Implement reset_cpu

Ian Campbell ijc at hellion.org.uk
Tue Mar 18 11:25:44 CET 2014


On Tue, 2014-03-18 at 00:00 +0100, Hans de Goede wrote:
> There is no way to reset the cpu, so use the watchdog for this.

Did you see
https://www.mail-archive.com/u-boot@lists.denx.de/msg134259.html ?

> 
> Signed-off-by: Hans de Goede <hdegoede at redhat.com>
> ---
>  arch/arm/cpu/armv7/sunxi/board.c        | 7 +++++++
>  arch/arm/include/asm/arch-sunxi/timer.h | 4 ++++
>  2 files changed, 11 insertions(+)
> 
> diff --git a/arch/arm/cpu/armv7/sunxi/board.c b/arch/arm/cpu/armv7/sunxi/board.c
> index e95f4e5..4fd5bcc 100644
> --- a/arch/arm/cpu/armv7/sunxi/board.c
> +++ b/arch/arm/cpu/armv7/sunxi/board.c
> @@ -54,6 +54,13 @@ int gpio_init(void)
>  
>  void reset_cpu(ulong addr)
>  {
> +	static const struct sunxi_wdog *wdog =
> +		 &((struct sunxi_timer_reg *)SUNXI_TIMER_BASE)->wdog;
> +
> +	/* Set the watchdog for its shortest interval (.5s) and wait */
> +	writel(WDT_MODE_RESET_EN | WDT_MODE_EN, &wdog->mode);
> +	writel(WDT_CTRL_RESTART, &wdog->ctl);
> +	while (1);
>  }
>  
>  /* do some early init */
> diff --git a/arch/arm/include/asm/arch-sunxi/timer.h b/arch/arm/include/asm/arch-sunxi/timer.h
> index 6aacfd7..c29d3a0 100644
> --- a/arch/arm/include/asm/arch-sunxi/timer.h
> +++ b/arch/arm/include/asm/arch-sunxi/timer.h
> @@ -11,6 +11,10 @@
>  #ifndef _SUNXI_TIMER_H_
>  #define _SUNXI_TIMER_H_
>  
> +#define WDT_CTRL_RESTART        (0x1 << 0)
> +#define WDT_MODE_EN             (0x1 << 0)
> +#define WDT_MODE_RESET_EN       (0x1 << 1)
> +
>  #ifndef __ASSEMBLY__
>  
>  #include <linux/types.h>




More information about the U-Boot mailing list