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 <hdego...@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> _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot