From 6bafb2f810694619ba65317cd349af3b1ca97617 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rafa=C5=82=20Mi=C5=82ecki?= Date: Wed, 11 Feb 2015 10:11:00 +0000 Subject: [PATCH] bcm53xx: backport bcm47xx_wdt changes to 3.18 to use this driver in future MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Rafał Miłecki SVN-Revision: 44390 --- target/linux/bcm53xx/config-3.18 | 1 + ...xx_wdt.c-add-restart-handler-support.patch | 81 +++++++++++++++++++ ..._wdt.c-allow-enabling-on-BCM5301X-ar.patch | 34 ++++++++ 3 files changed, 116 insertions(+) create mode 100644 target/linux/bcm53xx/patches-3.18/080-watchdog-bcm47xx_wdt.c-add-restart-handler-support.patch create mode 100644 target/linux/bcm53xx/patches-3.18/081-watchdog-bcm47xx_wdt.c-allow-enabling-on-BCM5301X-ar.patch diff --git a/target/linux/bcm53xx/config-3.18 b/target/linux/bcm53xx/config-3.18 index d08e667794..bf2b8fe818 100644 --- a/target/linux/bcm53xx/config-3.18 +++ b/target/linux/bcm53xx/config-3.18 @@ -52,6 +52,7 @@ CONFIG_B53=y CONFIG_B53_SRAB_DRIVER=y CONFIG_BCM47XX_NVRAM=y CONFIG_BCM47XX_SPROM=y +# CONFIG_BCM47XX_WDT is not set CONFIG_BCMA=y CONFIG_BCMA_BLOCKIO=y CONFIG_BCMA_DEBUG=y diff --git a/target/linux/bcm53xx/patches-3.18/080-watchdog-bcm47xx_wdt.c-add-restart-handler-support.patch b/target/linux/bcm53xx/patches-3.18/080-watchdog-bcm47xx_wdt.c-add-restart-handler-support.patch new file mode 100644 index 0000000000..c15114cc31 --- /dev/null +++ b/target/linux/bcm53xx/patches-3.18/080-watchdog-bcm47xx_wdt.c-add-restart-handler-support.patch @@ -0,0 +1,81 @@ +From 823769d2e6622a48276bee35b2dad5ba77cbdc25 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= +Date: Sun, 25 Jan 2015 11:40:57 +0100 +Subject: [PATCH] watchdog: bcm47xx_wdt.c: add restart handler support +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Just like in case of other watchdog drivers, use the new kernel core +API to provide restart support. + +Signed-off-by: Rafał Miłecki +Reviewed-by: Guenter Roeck +Signed-off-by: Wim Van Sebroeck +--- + drivers/watchdog/bcm47xx_wdt.c | 21 ++++++++++++++++++++- + include/linux/bcm47xx_wdt.h | 1 + + 2 files changed, 21 insertions(+), 1 deletion(-) + +diff --git a/drivers/watchdog/bcm47xx_wdt.c b/drivers/watchdog/bcm47xx_wdt.c +index 9816485..b28a072 100644 +--- a/drivers/watchdog/bcm47xx_wdt.c ++++ b/drivers/watchdog/bcm47xx_wdt.c +@@ -169,6 +169,17 @@ static int bcm47xx_wdt_notify_sys(struct notifier_block *this, + return NOTIFY_DONE; + } + ++static int bcm47xx_wdt_restart(struct notifier_block *this, unsigned long mode, ++ void *cmd) ++{ ++ struct bcm47xx_wdt *wdt; ++ ++ wdt = container_of(this, struct bcm47xx_wdt, restart_handler); ++ wdt->timer_set(wdt, 1); ++ ++ return NOTIFY_DONE; ++} ++ + static struct watchdog_ops bcm47xx_wdt_soft_ops = { + .owner = THIS_MODULE, + .start = bcm47xx_wdt_soft_start, +@@ -209,15 +220,23 @@ static int bcm47xx_wdt_probe(struct platform_device *pdev) + if (ret) + goto err_timer; + +- ret = watchdog_register_device(&wdt->wdd); ++ wdt->restart_handler.notifier_call = &bcm47xx_wdt_restart; ++ wdt->restart_handler.priority = 64; ++ ret = register_restart_handler(&wdt->restart_handler); + if (ret) + goto err_notifier; + ++ ret = watchdog_register_device(&wdt->wdd); ++ if (ret) ++ goto err_handler; ++ + dev_info(&pdev->dev, "BCM47xx Watchdog Timer enabled (%d seconds%s%s)\n", + timeout, nowayout ? ", nowayout" : "", + soft ? ", Software Timer" : ""); + return 0; + ++err_handler: ++ unregister_restart_handler(&wdt->restart_handler); + err_notifier: + unregister_reboot_notifier(&wdt->notifier); + err_timer: +diff --git a/include/linux/bcm47xx_wdt.h b/include/linux/bcm47xx_wdt.h +index b708786..5582c21 100644 +--- a/include/linux/bcm47xx_wdt.h ++++ b/include/linux/bcm47xx_wdt.h +@@ -16,6 +16,7 @@ struct bcm47xx_wdt { + + struct watchdog_device wdd; + struct notifier_block notifier; ++ struct notifier_block restart_handler; + + struct timer_list soft_timer; + atomic_t soft_ticks; +-- +1.8.4.5 + diff --git a/target/linux/bcm53xx/patches-3.18/081-watchdog-bcm47xx_wdt.c-allow-enabling-on-BCM5301X-ar.patch b/target/linux/bcm53xx/patches-3.18/081-watchdog-bcm47xx_wdt.c-allow-enabling-on-BCM5301X-ar.patch new file mode 100644 index 0000000000..890b7cffc8 --- /dev/null +++ b/target/linux/bcm53xx/patches-3.18/081-watchdog-bcm47xx_wdt.c-allow-enabling-on-BCM5301X-ar.patch @@ -0,0 +1,34 @@ +From b08c144e3a1089cdb725e393fa4f68f83a73e31b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= +Date: Sat, 7 Feb 2015 18:04:10 +0100 +Subject: [PATCH] watchdog: bcm47xx_wdt.c: allow enabling on BCM5301X arch +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +BCM5301X (ARCH_BCM_5301X) is a new Broadcom architecture using the same +SoC bus driver (bcma) as BCM47XX but based on ARM instead of MIPS. + +Signed-off-by: Rafał Miłecki +Reviewed-by: Guenter Roeck +Signed-off-by: Wim Van Sebroeck +--- + drivers/watchdog/Kconfig | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig +index 2aaef7b..ca6c949 100644 +--- a/drivers/watchdog/Kconfig ++++ b/drivers/watchdog/Kconfig +@@ -1113,7 +1113,7 @@ config ATH79_WDT + + config BCM47XX_WDT + tristate "Broadcom BCM47xx Watchdog Timer" +- depends on BCM47XX ++ depends on BCM47XX || ARCH_BCM_5301X + select WATCHDOG_CORE + help + Hardware driver for the Broadcom BCM47xx Watchdog Timer. +-- +1.8.4.5 + -- 2.25.1