
On Freitag, 27. Januar 2017 10:59:05 CET Paolo Pisati wrote:
Signed-off-by: Paolo Pisati p.pisati@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