[U-Boot] [PATCH v2 2/3] arm: zynq: Wire watchdog internals

Lukasz Majewski lukma at denx.de
Wed Feb 28 08:55:58 UTC 2018


On Mon, 26 Feb 2018 10:09:55 +0100
Michal Simek <michal.simek at xilinx.com> wrote:

> Watchdog is only enabled in full u-boot. Adoption for SPL should be
> also done because that's the right place where watchdog should be
> enabled.
> 
> Signed-off-by: Michal Simek <michal.simek at xilinx.com>
> ---
> 
> Changes in v2:
> - Make watchdog_reset depends on CONFIG_WATCHDOG not WDT
>   This will handle use cases where watchdog is cleared by OS
> 
>  arch/arm/Kconfig          |  1 +
>  board/xilinx/zynq/board.c | 49
> +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50
> insertions(+)
> 
> diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
> index 2c52ff025a22..a66d04eadfcb 100644
> --- a/arch/arm/Kconfig
> +++ b/arch/arm/Kconfig
> @@ -761,6 +761,7 @@ config ARCH_ZYNQ
>  	select SUPPORT_SPL
>  	select OF_CONTROL
>  	select SPL_BOARD_INIT if SPL
> +	select BOARD_EARLY_INIT_F if WDT
>  	select SPL_OF_CONTROL if SPL
>  	select DM
>  	select DM_ETH if NET
> diff --git a/board/xilinx/zynq/board.c b/board/xilinx/zynq/board.c
> index fb8eab07d768..838ac0f4c4ea 100644
> --- a/board/xilinx/zynq/board.c
> +++ b/board/xilinx/zynq/board.c
> @@ -6,9 +6,11 @@
>   */
>  
>  #include <common.h>
> +#include <dm/uclass.h>
>  #include <fdtdec.h>
>  #include <fpga.h>
>  #include <mmc.h>
> +#include <wdt.h>
>  #include <zynqpl.h>
>  #include <asm/arch/hardware.h>
>  #include <asm/arch/sys_proto.h>
> @@ -33,6 +35,22 @@ static xilinx_desc fpga045 =
> XILINX_XC7Z045_DESC(0x45); static xilinx_desc fpga100 =
> XILINX_XC7Z100_DESC(0x100); #endif
>  
> +#if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_WDT)
> +static struct udevice *watchdog_dev;
> +#endif
> +
> +#if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_BOARD_EARLY_INIT_F)
> +int board_early_init_f(void)
> +{
> +# if defined(CONFIG_WDT)
> +	/* bss is not cleared at time when watchdog_reset() is
> called */
> +	watchdog_dev = NULL;
> +# endif
> +
> +	return 0;
> +}
> +#endif
> +
>  int board_init(void)
>  {
>  #if (defined(CONFIG_FPGA) && !defined(CONFIG_SPL_BUILD)) || \
> @@ -75,6 +93,15 @@ 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
> +
>  #if (defined(CONFIG_FPGA) && !defined(CONFIG_SPL_BUILD)) || \
>      (defined(CONFIG_SPL_FPGA_SUPPORT) && defined(CONFIG_SPL_BUILD))
>  	fpga_init();
> @@ -164,3 +191,25 @@ int dram_init(void)
>  	return 0;
>  }
>  #endif
> +
> +#if defined(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

I do have two questions if you don't mind:

1. It seems like a lot of code added to a board file to provide WDT
support. Normally we just call a few functions - like
hw_watchdog_init(); WATCHDOG_RESET();

2. Is there any good reason for Watchdog_reset not being put into
driver, being wrapped, so it would provide WATCHDOG_RESET() macro,
which is used to refresh WDT in several places?

> +}
> +#endif




Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20180228/85e5f340/attachment.sig>


More information about the U-Boot mailing list