[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