[U-Boot] [PATCH] bcm2835_wdt: support for the BCM2835/2836 watchdog
Brüns, Stefan
Stefan.Bruens at rwth-aachen.de
Fri Jan 27 17:20:10 CET 2017
On Freitag, 27. Januar 2017 10:59:05 CET Paolo Pisati wrote:
> Signed-off-by: Paolo Pisati <p.pisati at gmail.com>
> ---
> arch/arm/mach-bcm283x/reset.c | 21 ++++++++++++++++++---
> board/raspberrypi/rpi/rpi.c | 4 ++++
> drivers/watchdog/Makefile | 1 +
> drivers/watchdog/bcm2835_wdt.c | 34 ++++++++++++++++++++++++++++++++++
> include/configs/rpi.h | 3 +++
> scripts/config_whitelist.txt | 1 +
> 6 files changed, 61 insertions(+), 3 deletions(-)
> create mode 100644 drivers/watchdog/bcm2835_wdt.c
>
> diff --git a/arch/arm/mach-bcm283x/reset.c b/arch/arm/mach-bcm283x/reset.c
> index 685815c..b62cb8a 100644
> --- a/arch/arm/mach-bcm283x/reset.c
> +++ b/arch/arm/mach-bcm283x/reset.c
> @@ -21,18 +21,33 @@
> */
> #define BCM2835_WDOG_RSTS_RASPBERRYPI_HALT 0x555
>
> +/* max ticks timeout */
> +#define BCM2835_WDOG_MAX_TIMEOUT 0x000fffff
> +
> +#ifdef CONFIG_BCM2835_WDT
> +extern void hw_watchdog_disable(void);
> +#else
> +void hw_watchdog_disable(void) {}
> +#endif
> +
> __efi_runtime_data struct bcm2835_wdog_regs *wdog_regs =
> (struct bcm2835_wdog_regs *)BCM2835_WDOG_PHYSADDR;
>
> -void __efi_runtime reset_cpu(ulong addr)
> +void __efi_runtime reset_cpu(ulong ticks)
> {
> - uint32_t rstc;
> + uint32_t rstc, timeout;
> +
> + if (ticks == 0) {
> + hw_watchdog_disable();
> + timeout = RESET_TIMEOUT;
This is wrong. The efi runtime reset function calls this as reset_cpu(0), and
then tries to call hw_watchdog_disable, which is not marked as __efi_runtime.
Actually, I can see no reason the watchdog setup piggybacks on the reset_cpu
funtion.
> + } else
> + timeout = ticks & BCM2835_WDOG_MAX_TIMEOUT;
>
> rstc = readl(&wdog_regs->rstc);
> rstc &= ~BCM2835_WDOG_RSTC_WRCFG_MASK;
> rstc |= BCM2835_WDOG_RSTC_WRCFG_FULL_RESET;
>
> - writel(BCM2835_WDOG_PASSWORD | RESET_TIMEOUT, &wdog_regs->wdog);
> + writel(BCM2835_WDOG_PASSWORD | timeout, &wdog_regs->wdog);
> writel(BCM2835_WDOG_PASSWORD | rstc, &wdog_regs->rstc);
> }
>
> diff --git a/board/raspberrypi/rpi/rpi.c b/board/raspberrypi/rpi/rpi.c
> index 22e87a2..106e518 100644
> --- a/board/raspberrypi/rpi/rpi.c
> +++ b/board/raspberrypi/rpi/rpi.c
[...]
> --- a/scripts/config_whitelist.txt
> +++ b/scripts/config_whitelist.txt
> @@ -294,6 +294,7 @@ CONFIG_BCH_CONST_M
> CONFIG_BCH_CONST_PARAMS
> CONFIG_BCH_CONST_T
> CONFIG_BCM2835_GPIO
> +CONFIG_BCM2835_WDT
> CONFIG_BCM283X_MU_SERIAL
> CONFIG_BCM_SF2_ETH
> CONFIG_BCM_SF2_ETH_DEFAULT_PORT
I think the rule is no new CONFIG_xxx options, but appropriate options in
KConfig.
Kind regards,
Stefan
More information about the U-Boot
mailing list