[U-Boot] [PATCH u-boot sunxi 3/4] sunxi: Implement reset_cpu
Ian Campbell
ijc at hellion.org.uk
Sun Mar 16 19:38:41 CET 2014
On Sun, 2014-03-16 at 14:53 +0100, Hans de Goede wrote:
> There is no way to reset the cpu, so use the watchdog for this.
The sunxi.git tree does this by calling watchdog_set(0). I think it
would be better to introduce the generic watchdog support and the add
this a patch to use it for reset. Unless we don't plan to upstream the
watchdog stuff for some reason?
Not sure why cmd_watchdog.c is sunxi, seems like in principal it could
be generic.
Ian.
> 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 98cad43..2668d52 100644
> --- a/arch/arm/cpu/armv7/sunxi/board.c
> +++ b/arch/arm/cpu/armv7/sunxi/board.c
> @@ -70,6 +70,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 f9d4f4f..1489b2e 100644
> --- a/arch/arm/include/asm/arch-sunxi/timer.h
> +++ b/arch/arm/include/asm/arch-sunxi/timer.h
> @@ -27,6 +27,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