On Fri, Feb 15, 2019 at 3:12 PM Chris Packham <judge.pack...@gmail.com> wrote: > > Enable the hardware watchdog to guard against system lock ups when > running in the SPL or U-Boot. Stop the watchdog just before booting so > that the OS.
D'oh managed to cut off the sentence. so that the OS can re-enable it if needed. > > Signed-off-by: Chris Packham <judge.pack...@gmail.com> > --- > > arch/arm/dts/armada-385-atl-x530-u-boot.dtsi | 4 ++ > board/alliedtelesis/x530/x530.c | 48 ++++++++++++++++++++ > configs/x530_defconfig | 5 ++ > 3 files changed, 57 insertions(+) > > diff --git a/arch/arm/dts/armada-385-atl-x530-u-boot.dtsi > b/arch/arm/dts/armada-385-atl-x530-u-boot.dtsi > index 7074a73537fa..79b694cb84bc 100644 > --- a/arch/arm/dts/armada-385-atl-x530-u-boot.dtsi > +++ b/arch/arm/dts/armada-385-atl-x530-u-boot.dtsi > @@ -11,3 +11,7 @@ > &uart0 { > u-boot,dm-pre-reloc; > }; > + > +&watchdog { > + u-boot,dm-pre-reloc; > +}; > diff --git a/board/alliedtelesis/x530/x530.c b/board/alliedtelesis/x530/x530.c > index d7d1942fe686..1b22b6307cd2 100644 > --- a/board/alliedtelesis/x530/x530.c > +++ b/board/alliedtelesis/x530/x530.c > @@ -7,6 +7,7 @@ > #include <command.h> > #include <dm.h> > #include <i2c.h> > +#include <wdt.h> > #include <asm/gpio.h> > #include <linux/mbus.h> > #include <linux/io.h> > @@ -24,6 +25,10 @@ DECLARE_GLOBAL_DATA_PTR; > #define CONFIG_NVS_LOCATION 0xf4800000 > #define CONFIG_NVS_SIZE (512 << 10) > > +#ifdef CONFIG_WATCHDOG > +static struct udevice *watchdog_dev; > +#endif > + > static struct serdes_map board_serdes_map[] = { > {PEX0, SERDES_SPEED_5_GBPS, PEX_ROOT_COMPLEX_X1, 0, 0}, > {DEFAULT_SERDES, SERDES_SPEED_5_GBPS, SERDES_DEFAULT_MODE, 0, 0}, > @@ -75,6 +80,10 @@ struct mv_ddr_topology_map *mv_ddr_topology_map_get(void) > > int board_early_init_f(void) > { > +#ifdef CONFIG_WATCHDOG > + watchdog_dev = NULL; > +#endif > + > /* Configure MPP */ > writel(0x00001111, MVEBU_MPP_BASE + 0x00); > writel(0x00000000, MVEBU_MPP_BASE + 0x04); > @@ -88,6 +97,17 @@ int board_early_init_f(void) > return 0; > } > > +void spl_board_init(void) > +{ > +#ifdef CONFIG_WATCHDOG > + int ret; > + > + ret = uclass_get_device(UCLASS_WDT, 0, &watchdog_dev); > + if (!ret) > + wdt_start(watchdog_dev, 25000000ULL * 120, 0); > +#endif > +} > + > int board_init(void) > { > /* address of boot parameters */ > @@ -100,9 +120,37 @@ int board_init(void) > /* DEV_READYn is not needed for NVS, ignore it when accessing CS1 */ > writel(0x00004001, MVEBU_DEV_BUS_BASE + 0xc8); > > + spl_board_init(); > + > return 0; > } > > +void arch_preboot_os(void) > +{ > +#ifdef CONFIG_WATCHDOG > + wdt_stop(watchdog_dev); > +#endif > +} > + > +#ifdef CONFIG_WATCHDOG > +void watchdog_reset(void) > +{ > + static ulong next_reset = 0; > + ulong now; > + > + if (!watchdog_dev) > + return; > + > + now = timer_get_us(); > + > + /* Do not reset the watchdog too often */ > + if (now > next_reset) { > + wdt_reset(watchdog_dev); > + next_reset = now + 1000; > + } > +} > +#endif > + > static int led_7seg_init(unsigned int segments) > { > int node; > diff --git a/configs/x530_defconfig b/configs/x530_defconfig > index 25b9e885d8e6..3bc37b9bee11 100644 > --- a/configs/x530_defconfig > +++ b/configs/x530_defconfig > @@ -19,6 +19,8 @@ CONFIG_SILENT_CONSOLE=y > CONFIG_SILENT_U_BOOT_ONLY=y > CONFIG_SILENT_CONSOLE_UPDATE_ON_RELOC=y > CONFIG_MISC_INIT_R=y > +CONFIG_SPL_BOARD_INIT=y > +CONFIG_SPL_WATCHDOG_SUPPORT=y > CONFIG_CMD_MEMINFO=y > # CONFIG_CMD_FLASH is not set > CONFIG_CMD_GPIO=y > @@ -70,3 +72,6 @@ CONFIG_USB_STORAGE=y > CONFIG_USB_HOST_ETHER=y > CONFIG_USB_ETHER_ASIX=y > CONFIG_USB_ETHER_ASIX88179=y > +CONFIG_WATCHDOG=y > +CONFIG_WDT=y > +CONFIG_WDT_ORION=y > -- > 2.20.1 > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot