@ -9,11 +9,13 @@
# include <ahci.h>
# include <scsi.h>
# include <malloc.h>
# include <wdt.h>
# include <asm/arch/clk.h>
# include <asm/arch/hardware.h>
# include <asm/arch/sys_proto.h>
# include <asm/arch/psu_init_gpl.h>
# include <asm/io.h>
# include <dm/uclass.h>
# include <usb.h>
# include <dwc3-uboot.h>
# include <zynqmppl.h>
@ -22,6 +24,10 @@
DECLARE_GLOBAL_DATA_PTR ;
# if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_WDT)
static struct udevice * watchdog_dev ;
# endif
# if defined(CONFIG_FPGA) && defined(CONFIG_FPGA_ZYNQMPPL) && \
! defined ( CONFIG_SPL_BUILD )
static xilinx_desc zynqmppl = XILINX_ZYNQMP_DESC ;
@ -281,6 +287,11 @@ int board_early_init_f(void)
ret = psu_init ( ) ;
# endif
# if defined(CONFIG_WDT) && !defined(CONFIG_SPL_BUILD)
/* bss is not cleared at time when watchdog_reset() is called */
watchdog_dev = NULL ;
# endif
return ret ;
}
@ -299,9 +310,40 @@ int board_init(void)
}
# endif
# if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_WDT)
if ( uclass_get_device ( UCLASS_WDT , 0 , & watchdog_dev ) ) {
puts ( " Watchdog: Not found! \n " ) ;
} else {
wdt_start ( watchdog_dev , 0 , 0 ) ;
puts ( " Watchdog: Started \n " ) ;
}
# endif
return 0 ;
}
# ifdef CONFIG_WATCHDOG
/* Called by macro WATCHDOG_RESET */
void watchdog_reset ( void )
{
# if !defined(CONFIG_SPL_BUILD)
static ulong next_reset ;
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
}
# endif
int board_early_init_r ( void )
{
u32 val ;