On Sat, 2014-10-04 at 20:37 +0800, Chen-Yu Tsai wrote:
> +#else /* CONFIG_SUN6I || CONFIG_SUN8I || .. */
> +     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_CFG_RESET, &wdog->cfg);
> +     writel(WDT_MODE_EN, &wdog->mode);
> +     writel(WDT_CTRL_KEY | WDT_CTRL_RESTART, &wdog->ctl);

That's annoyingly close to the 4/5/7i version, but not quite close
enough to allow any meaningful sharing :-/

> +     while (1) {
> +             /* sun5i sometimes gets stuck without this */

Is this not therefore unnecessary on 6i/8i?

> +             writel(WDT_MODE_EN, &wdog->mode);
> +     }
> +#endif
>  }
>  
>  /* do some early init */
> diff --git a/arch/arm/include/asm/arch-sunxi/watchdog.h 
> b/arch/arm/include/asm/arch-sunxi/watchdog.h
> index 5b755e3..ccc8fa3 100644
> --- a/arch/arm/include/asm/arch-sunxi/watchdog.h
> +++ b/arch/arm/include/asm/arch-sunxi/watchdog.h
> @@ -12,6 +12,9 @@
>  
>  #define WDT_CTRL_RESTART     (0x1 << 0)
>  #define WDT_CTRL_KEY         (0x0a57 << 1)
> +
> +#if defined(CONFIG_SUN4I) || defined(CONFIG_SUN5I) || defined(CONFIG_SUN7I)
> +
>  #define WDT_MODE_EN          (0x1 << 0)
>  #define WDT_MODE_RESET_EN    (0x1 << 1)
>  
> @@ -21,4 +24,21 @@ struct sunxi_wdog {
>       u32 res[2];
>  };
>  
> +#else
> +
> +#define WDT_CFG_RESET                (0x1)
> +#define WDT_MODE_EN          (0x1)
> +
> +struct sunxi_wdog {
> +     u32 irq_en;             /* 0x00 */
> +     u32 irq_sta;            /* 0x04 */
> +     u32 res1[2];
> +     u32 ctl;                /* 0x10 */
> +     u32 cfg;                /* 0x14 */
> +     u32 mode;               /* 0x18 */
> +     u32 res2;
> +};
> +
> +#endif
> +
>  #endif /* _SUNXI_WATCHDOG_H_ */


_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to