* [PATCH v2 0/7] Removal of bcm63xx-wdt
@ 2021-10-29 18:34 Florian Fainelli
2021-10-29 18:34 ` [PATCH v2 1/7] dt-bindings: watchdog: convert Broadcom's WDT to the json-schema Florian Fainelli
` (6 more replies)
0 siblings, 7 replies; 10+ messages in thread
From: Florian Fainelli @ 2021-10-29 18:34 UTC (permalink / raw)
To: linux-kernel
Cc: rafal, Florian Fainelli, Wim Van Sebroeck, Guenter Roeck,
Rob Herring, Thomas Bogendoerfer,
maintainer:BROADCOM BCM63XX ARM ARCHITECTURE, Justin Chen,
open list:WATCHDOG DEVICE DRIVERS,
open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS,
open list:MIPS, moderated list:BROADCOM BCM63XX ARM ARCHITECTURE
This patch series prepares the bcm7038_wdt driver to support its bcm63xx
counter part, updates the MIPS BCM63xx platform code to provide the
necessary information about the "periph" clock, and finally proceeds
with removing the bcm63xx_wdt altogether.
This was only compiled tested as I did not have a readily available
BCM63xx system to test with.
This should also help with adding support for BCM4908 which Rafal is
working on.
Changes in v2:
- added Guenter's Reviewed-by where given
- update binding patch to pass make dt_bindings_check (Rob)
Florian Fainelli (6):
dt-bindings: watchdog: Add BCM6345 compatible to BCM7038 binding
watchdog: bcm7038_wdt: Support platform data configuration
watchdog: Allow building BCM7038_WDT for BCM63XX
watchdog: bcm7038_wdt: Add platform device id for bcm63xx-wdt
MIPS: BCM63XX: Provide platform data to watchdog device
watchdog: Remove BCM63XX_WDT
Rafał Miłecki (1):
dt-bindings: watchdog: convert Broadcom's WDT to the json-schema
.../bindings/watchdog/brcm,bcm7038-wdt.txt | 19 --
.../bindings/watchdog/brcm,bcm7038-wdt.yaml | 41 +++
arch/mips/bcm63xx/dev-wdt.c | 8 +
drivers/watchdog/Kconfig | 15 +-
drivers/watchdog/Makefile | 1 -
drivers/watchdog/bcm63xx_wdt.c | 315 ------------------
drivers/watchdog/bcm7038_wdt.c | 15 +-
include/linux/platform_data/bcm7038_wdt.h | 8 +
8 files changed, 74 insertions(+), 348 deletions(-)
delete mode 100644 Documentation/devicetree/bindings/watchdog/brcm,bcm7038-wdt.txt
create mode 100644 Documentation/devicetree/bindings/watchdog/brcm,bcm7038-wdt.yaml
delete mode 100644 drivers/watchdog/bcm63xx_wdt.c
create mode 100644 include/linux/platform_data/bcm7038_wdt.h
--
2.25.1
^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v2 1/7] dt-bindings: watchdog: convert Broadcom's WDT to the json-schema
2021-10-29 18:34 [PATCH v2 0/7] Removal of bcm63xx-wdt Florian Fainelli
@ 2021-10-29 18:34 ` Florian Fainelli
2021-10-29 18:34 ` [PATCH v2 2/7] dt-bindings: watchdog: Add BCM6345 compatible to BCM7038 binding Florian Fainelli
` (5 subsequent siblings)
6 siblings, 0 replies; 10+ messages in thread
From: Florian Fainelli @ 2021-10-29 18:34 UTC (permalink / raw)
To: linux-kernel
Cc: rafal, Florian Fainelli, Wim Van Sebroeck, Guenter Roeck,
Rob Herring, Thomas Bogendoerfer,
maintainer:BROADCOM BCM63XX ARM ARCHITECTURE, Justin Chen,
open list:WATCHDOG DEVICE DRIVERS,
open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS,
open list:MIPS, moderated list:BROADCOM BCM63XX ARM ARCHITECTURE
From: Rafał Miłecki <rafal@milecki.pl>
This helps validating DTS files.
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
---
.../bindings/watchdog/brcm,bcm7038-wdt.txt | 19 ---------
.../bindings/watchdog/brcm,bcm7038-wdt.yaml | 39 +++++++++++++++++++
2 files changed, 39 insertions(+), 19 deletions(-)
delete mode 100644 Documentation/devicetree/bindings/watchdog/brcm,bcm7038-wdt.txt
create mode 100644 Documentation/devicetree/bindings/watchdog/brcm,bcm7038-wdt.yaml
diff --git a/Documentation/devicetree/bindings/watchdog/brcm,bcm7038-wdt.txt b/Documentation/devicetree/bindings/watchdog/brcm,bcm7038-wdt.txt
deleted file mode 100644
index 84122270be8f..000000000000
--- a/Documentation/devicetree/bindings/watchdog/brcm,bcm7038-wdt.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-BCM7038 Watchdog timer
-
-Required properties:
-
-- compatible : should be "brcm,bcm7038-wdt"
-- reg : Specifies base physical address and size of the registers.
-
-Optional properties:
-
-- clocks: The clock running the watchdog. If no clock is found the
- driver will default to 27000000 Hz.
-
-Example:
-
-watchdog@f040a7e8 {
- compatible = "brcm,bcm7038-wdt";
- clocks = <&upg_fixed>;
- reg = <0xf040a7e8 0x16>;
-};
diff --git a/Documentation/devicetree/bindings/watchdog/brcm,bcm7038-wdt.yaml b/Documentation/devicetree/bindings/watchdog/brcm,bcm7038-wdt.yaml
new file mode 100644
index 000000000000..bbf2e91f9db7
--- /dev/null
+++ b/Documentation/devicetree/bindings/watchdog/brcm,bcm7038-wdt.yaml
@@ -0,0 +1,39 @@
+# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/watchdog/brcm,bcm7038-wdt.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: BCM7038 watchdog timer
+
+allOf:
+ - $ref: "watchdog.yaml#"
+
+maintainers:
+ - Justin Chen <justinpopo6@gmail.com>
+ - Florian Fainelli <f.fainelli@gmail.com>
+
+properties:
+ compatible:
+ const: brcm,bcm7038-wdt
+
+ reg:
+ maxItems: 1
+
+ clocks:
+ description: >
+ The clock running the watchdog. If no clock is found the driver will
+ default to 27000000 Hz.
+
+unevaluatedProperties: false
+
+required:
+ - reg
+
+examples:
+ - |
+ watchdog@f040a7e8 {
+ compatible = "brcm,bcm7038-wdt";
+ reg = <0xf040a7e8 0x16>;
+ clocks = <&upg_fixed>;
+ };
--
2.25.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v2 2/7] dt-bindings: watchdog: Add BCM6345 compatible to BCM7038 binding
2021-10-29 18:34 [PATCH v2 0/7] Removal of bcm63xx-wdt Florian Fainelli
2021-10-29 18:34 ` [PATCH v2 1/7] dt-bindings: watchdog: convert Broadcom's WDT to the json-schema Florian Fainelli
@ 2021-10-29 18:34 ` Florian Fainelli
2021-10-29 18:34 ` [PATCH v2 3/7] watchdog: bcm7038_wdt: Support platform data configuration Florian Fainelli
` (4 subsequent siblings)
6 siblings, 0 replies; 10+ messages in thread
From: Florian Fainelli @ 2021-10-29 18:34 UTC (permalink / raw)
To: linux-kernel
Cc: rafal, Florian Fainelli, Wim Van Sebroeck, Guenter Roeck,
Rob Herring, Thomas Bogendoerfer,
maintainer:BROADCOM BCM63XX ARM ARCHITECTURE, Justin Chen,
open list:WATCHDOG DEVICE DRIVERS,
open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS,
open list:MIPS, moderated list:BROADCOM BCM63XX ARM ARCHITECTURE
The BCM7038 watchdog binding is updated to include a "brcm,bcm6345-wdt"
compatible string which is the first instance of a DSL (BCM63xx) SoC
seeing the integration of such a watchdog timer block.
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
---
.../devicetree/bindings/watchdog/brcm,bcm7038-wdt.yaml | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/Documentation/devicetree/bindings/watchdog/brcm,bcm7038-wdt.yaml b/Documentation/devicetree/bindings/watchdog/brcm,bcm7038-wdt.yaml
index bbf2e91f9db7..72cce0a046a6 100644
--- a/Documentation/devicetree/bindings/watchdog/brcm,bcm7038-wdt.yaml
+++ b/Documentation/devicetree/bindings/watchdog/brcm,bcm7038-wdt.yaml
@@ -4,7 +4,7 @@
$id: http://devicetree.org/schemas/watchdog/brcm,bcm7038-wdt.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
-title: BCM7038 watchdog timer
+title: BCM63xx and BCM7038 watchdog timer
allOf:
- $ref: "watchdog.yaml#"
@@ -15,7 +15,9 @@ maintainers:
properties:
compatible:
- const: brcm,bcm7038-wdt
+ enum:
+ - brcm,bcm6345-wdt
+ - brcm,bcm7038-wdt
reg:
maxItems: 1
--
2.25.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v2 3/7] watchdog: bcm7038_wdt: Support platform data configuration
2021-10-29 18:34 [PATCH v2 0/7] Removal of bcm63xx-wdt Florian Fainelli
2021-10-29 18:34 ` [PATCH v2 1/7] dt-bindings: watchdog: convert Broadcom's WDT to the json-schema Florian Fainelli
2021-10-29 18:34 ` [PATCH v2 2/7] dt-bindings: watchdog: Add BCM6345 compatible to BCM7038 binding Florian Fainelli
@ 2021-10-29 18:34 ` Florian Fainelli
2021-10-29 18:34 ` [PATCH v2 4/7] watchdog: Allow building BCM7038_WDT for BCM63XX Florian Fainelli
` (3 subsequent siblings)
6 siblings, 0 replies; 10+ messages in thread
From: Florian Fainelli @ 2021-10-29 18:34 UTC (permalink / raw)
To: linux-kernel
Cc: rafal, Florian Fainelli, Guenter Roeck, Wim Van Sebroeck,
Rob Herring, Thomas Bogendoerfer,
maintainer:BROADCOM BCM63XX ARM ARCHITECTURE, Justin Chen,
open list:WATCHDOG DEVICE DRIVERS,
open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS,
open list:MIPS, moderated list:BROADCOM BCM63XX ARM ARCHITECTURE
The BCM7038 watchdog driver needs to be able to obtain a specific clock
name on BCM63xx platforms which is the "periph" clock ticking at 50MHz.
make it possible to specify the clock name to obtain via platform data.
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
---
drivers/watchdog/bcm7038_wdt.c | 8 +++++++-
include/linux/platform_data/bcm7038_wdt.h | 8 ++++++++
2 files changed, 15 insertions(+), 1 deletion(-)
create mode 100644 include/linux/platform_data/bcm7038_wdt.h
diff --git a/drivers/watchdog/bcm7038_wdt.c b/drivers/watchdog/bcm7038_wdt.c
index acaaa0005d5b..506cd7ef9c77 100644
--- a/drivers/watchdog/bcm7038_wdt.c
+++ b/drivers/watchdog/bcm7038_wdt.c
@@ -10,6 +10,7 @@
#include <linux/module.h>
#include <linux/of.h>
#include <linux/platform_device.h>
+#include <linux/platform_data/bcm7038_wdt.h>
#include <linux/pm.h>
#include <linux/watchdog.h>
@@ -133,8 +134,10 @@ static void bcm7038_clk_disable_unprepare(void *data)
static int bcm7038_wdt_probe(struct platform_device *pdev)
{
+ struct bcm7038_wdt_platform_data *pdata = pdev->dev.platform_data;
struct device *dev = &pdev->dev;
struct bcm7038_watchdog *wdt;
+ const char *clk_name = NULL;
int err;
wdt = devm_kzalloc(dev, sizeof(*wdt), GFP_KERNEL);
@@ -147,7 +150,10 @@ static int bcm7038_wdt_probe(struct platform_device *pdev)
if (IS_ERR(wdt->base))
return PTR_ERR(wdt->base);
- wdt->clk = devm_clk_get(dev, NULL);
+ if (pdata && pdata->clk_name)
+ clk_name = pdata->clk_name;
+
+ wdt->clk = devm_clk_get(dev, clk_name);
/* If unable to get clock, use default frequency */
if (!IS_ERR(wdt->clk)) {
err = clk_prepare_enable(wdt->clk);
diff --git a/include/linux/platform_data/bcm7038_wdt.h b/include/linux/platform_data/bcm7038_wdt.h
new file mode 100644
index 000000000000..e18cfd9ec8f9
--- /dev/null
+++ b/include/linux/platform_data/bcm7038_wdt.h
@@ -0,0 +1,8 @@
+#ifndef __BCM7038_WDT_PDATA_H
+#define __BCM7038_WDT_PDATA_H
+
+struct bcm7038_wdt_platform_data {
+ const char *clk_name;
+};
+
+#endif /* __BCM7038_WDT_PDATA_H */
--
2.25.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v2 4/7] watchdog: Allow building BCM7038_WDT for BCM63XX
2021-10-29 18:34 [PATCH v2 0/7] Removal of bcm63xx-wdt Florian Fainelli
` (2 preceding siblings ...)
2021-10-29 18:34 ` [PATCH v2 3/7] watchdog: bcm7038_wdt: Support platform data configuration Florian Fainelli
@ 2021-10-29 18:34 ` Florian Fainelli
2021-10-29 18:34 ` [PATCH v2 5/7] watchdog: bcm7038_wdt: Add platform device id for bcm63xx-wdt Florian Fainelli
` (2 subsequent siblings)
6 siblings, 0 replies; 10+ messages in thread
From: Florian Fainelli @ 2021-10-29 18:34 UTC (permalink / raw)
To: linux-kernel
Cc: rafal, Florian Fainelli, Guenter Roeck, Wim Van Sebroeck,
Rob Herring, Thomas Bogendoerfer,
maintainer:BROADCOM BCM63XX ARM ARCHITECTURE, Justin Chen,
open list:WATCHDOG DEVICE DRIVERS,
open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS,
open list:MIPS, moderated list:BROADCOM BCM63XX ARM ARCHITECTURE
CONFIG_BCM63XX denotes the legacy MIPS-based DSL SoCs which utilize the
same piece of hardware as a watchdog, make it possible to select that
driver for those platforms.
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
---
drivers/watchdog/Kconfig | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
index bf59faeb3de1..24a775dd2bf1 100644
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
@@ -1756,12 +1756,13 @@ config BCM7038_WDT
tristate "BCM7038 Watchdog"
select WATCHDOG_CORE
depends on HAS_IOMEM
- depends on ARCH_BRCMSTB || BMIPS_GENERIC || COMPILE_TEST
+ depends on ARCH_BRCMSTB || BMIPS_GENERIC || BCM63XX || COMPILE_TEST
help
Watchdog driver for the built-in hardware in Broadcom 7038 and
later SoCs used in set-top boxes. BCM7038 was made public
during the 2004 CES, and since then, many Broadcom chips use this
- watchdog block, including some cable modem chips.
+ watchdog block, including some cable modem chips and DSL (63xx)
+ chips.
config IMGPDC_WDT
tristate "Imagination Technologies PDC Watchdog Timer"
--
2.25.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v2 5/7] watchdog: bcm7038_wdt: Add platform device id for bcm63xx-wdt
2021-10-29 18:34 [PATCH v2 0/7] Removal of bcm63xx-wdt Florian Fainelli
` (3 preceding siblings ...)
2021-10-29 18:34 ` [PATCH v2 4/7] watchdog: Allow building BCM7038_WDT for BCM63XX Florian Fainelli
@ 2021-10-29 18:34 ` Florian Fainelli
2021-10-30 6:58 ` kernel test robot
2021-10-29 18:34 ` [PATCH v2 6/7] MIPS: BCM63XX: Provide platform data to watchdog device Florian Fainelli
2021-10-29 18:34 ` [PATCH v2 7/7] watchdog: Remove BCM63XX_WDT Florian Fainelli
6 siblings, 1 reply; 10+ messages in thread
From: Florian Fainelli @ 2021-10-29 18:34 UTC (permalink / raw)
To: linux-kernel
Cc: rafal, Florian Fainelli, Guenter Roeck, Wim Van Sebroeck,
Rob Herring, Thomas Bogendoerfer,
maintainer:BROADCOM BCM63XX ARM ARCHITECTURE, Justin Chen,
open list:WATCHDOG DEVICE DRIVERS,
open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS,
open list:MIPS, moderated list:BROADCOM BCM63XX ARM ARCHITECTURE
In order to phase out bcm63xx_wdt and use bcm7038_wdt instead, introduce
a platform_device_id table that allows both names to be matched.
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
---
drivers/watchdog/bcm7038_wdt.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/drivers/watchdog/bcm7038_wdt.c b/drivers/watchdog/bcm7038_wdt.c
index 506cd7ef9c77..2535f450e8a1 100644
--- a/drivers/watchdog/bcm7038_wdt.c
+++ b/drivers/watchdog/bcm7038_wdt.c
@@ -223,6 +223,13 @@ static const struct of_device_id bcm7038_wdt_match[] = {
};
MODULE_DEVICE_TABLE(of, bcm7038_wdt_match);
+static const struct platform_device_id bcm7038_wdt_devtype[] = {
+ { .name = "bcm7038-wdt" },
+ { .name = "bcm63xx-wdt" },
+ { /* sentinel */ },
+};
+MODULE_DEVICE_TABLE(platform, bcm7038_wdt_devtype);
+
static struct platform_driver bcm7038_wdt_driver = {
.probe = bcm7038_wdt_probe,
.driver = {
--
2.25.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v2 6/7] MIPS: BCM63XX: Provide platform data to watchdog device
2021-10-29 18:34 [PATCH v2 0/7] Removal of bcm63xx-wdt Florian Fainelli
` (4 preceding siblings ...)
2021-10-29 18:34 ` [PATCH v2 5/7] watchdog: bcm7038_wdt: Add platform device id for bcm63xx-wdt Florian Fainelli
@ 2021-10-29 18:34 ` Florian Fainelli
2021-10-29 18:52 ` Guenter Roeck
2021-10-29 18:34 ` [PATCH v2 7/7] watchdog: Remove BCM63XX_WDT Florian Fainelli
6 siblings, 1 reply; 10+ messages in thread
From: Florian Fainelli @ 2021-10-29 18:34 UTC (permalink / raw)
To: linux-kernel
Cc: rafal, Florian Fainelli, Wim Van Sebroeck, Guenter Roeck,
Rob Herring, Thomas Bogendoerfer,
maintainer:BROADCOM BCM63XX ARM ARCHITECTURE, Justin Chen,
open list:WATCHDOG DEVICE DRIVERS,
open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS,
open list:MIPS, moderated list:BROADCOM BCM63XX ARM ARCHITECTURE
In order to utilize the bcm7038_wdt.c driver which needs to know the
clock name to obtain, pass it via platform data using the
bcm7038_wdt_platform_data structure.
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
---
arch/mips/bcm63xx/dev-wdt.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/arch/mips/bcm63xx/dev-wdt.c b/arch/mips/bcm63xx/dev-wdt.c
index 2a2346a99bcb..42130914a3c2 100644
--- a/arch/mips/bcm63xx/dev-wdt.c
+++ b/arch/mips/bcm63xx/dev-wdt.c
@@ -9,6 +9,7 @@
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/platform_device.h>
+#include <linux/platform_data/bcm7038_wdt.h>
#include <bcm63xx_cpu.h>
static struct resource wdt_resources[] = {
@@ -19,11 +20,18 @@ static struct resource wdt_resources[] = {
},
};
+static struct bcm7038_wdt_platform_data bcm63xx_wdt_pdata = {
+ .clk_name = "periph",
+};
+
static struct platform_device bcm63xx_wdt_device = {
.name = "bcm63xx-wdt",
.id = -1,
.num_resources = ARRAY_SIZE(wdt_resources),
.resource = wdt_resources,
+ .dev = {
+ .platform_data = &bcm63xx_wdt_pdata,
+ },
};
int __init bcm63xx_wdt_register(void)
--
2.25.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v2 7/7] watchdog: Remove BCM63XX_WDT
2021-10-29 18:34 [PATCH v2 0/7] Removal of bcm63xx-wdt Florian Fainelli
` (5 preceding siblings ...)
2021-10-29 18:34 ` [PATCH v2 6/7] MIPS: BCM63XX: Provide platform data to watchdog device Florian Fainelli
@ 2021-10-29 18:34 ` Florian Fainelli
6 siblings, 0 replies; 10+ messages in thread
From: Florian Fainelli @ 2021-10-29 18:34 UTC (permalink / raw)
To: linux-kernel
Cc: rafal, Florian Fainelli, Guenter Roeck, Wim Van Sebroeck,
Rob Herring, Thomas Bogendoerfer,
maintainer:BROADCOM BCM63XX ARM ARCHITECTURE, Justin Chen,
open list:WATCHDOG DEVICE DRIVERS,
open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS,
open list:MIPS, moderated list:BROADCOM BCM63XX ARM ARCHITECTURE
Now that we can utilize the BCM7038_WDT driver, remove that one which
was not converted to the watchdog APIs. There are a couple of notable
differences with how the bcm7038_wdt driver proceeds:
- bcm63xx_wdt would register with the ad-hoc BCM63xx hardware timer API,
but this would only be used in order to catch the interrupt *before* a
SoC reset and make the kernel "die"
- bcm6xx_wdt would register a software timer and kick it every second in
order to pet the watchdog, thus offering a two step watchdog process.
This is not something that is brought over to the bcm7038_wdt as it is
deemed unnecessary. If user-space cannot pet the watchdog, but a
kernel timer can, the system is still in a bad shape anyway.
bcm7038_wdt is simpler in its behavior and behaves as a standard
watchdog driver and is not making use of any specific platform APIs,
therefore making it more maintainable and extensible.
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
---
drivers/watchdog/Kconfig | 10 --
drivers/watchdog/Makefile | 1 -
drivers/watchdog/bcm63xx_wdt.c | 315 ---------------------------------
3 files changed, 326 deletions(-)
delete mode 100644 drivers/watchdog/bcm63xx_wdt.c
diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
index 24a775dd2bf1..acebf9caf6d1 100644
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
@@ -1709,16 +1709,6 @@ config OCTEON_WDT
from the first interrupt, it is then only poked when the
device is written.
-config BCM63XX_WDT
- tristate "Broadcom BCM63xx hardware watchdog"
- depends on BCM63XX
- help
- Watchdog driver for the built in watchdog hardware in Broadcom
- BCM63xx SoC.
-
- To compile this driver as a loadable module, choose M here.
- The module will be called bcm63xx_wdt.
-
config BCM2835_WDT
tristate "Broadcom BCM2835 hardware watchdog"
depends on ARCH_BCM2835 || (OF && COMPILE_TEST)
diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile
index 1bd2d6f37c53..9811c4b1cd16 100644
--- a/drivers/watchdog/Makefile
+++ b/drivers/watchdog/Makefile
@@ -154,7 +154,6 @@ obj-$(CONFIG_XILINX_WATCHDOG) += of_xilinx_wdt.o
# MIPS Architecture
obj-$(CONFIG_ATH79_WDT) += ath79_wdt.o
obj-$(CONFIG_BCM47XX_WDT) += bcm47xx_wdt.o
-obj-$(CONFIG_BCM63XX_WDT) += bcm63xx_wdt.o
obj-$(CONFIG_RC32434_WDT) += rc32434_wdt.o
obj-$(CONFIG_INDYDOG) += indydog.o
obj-$(CONFIG_JZ4740_WDT) += jz4740_wdt.o
diff --git a/drivers/watchdog/bcm63xx_wdt.c b/drivers/watchdog/bcm63xx_wdt.c
deleted file mode 100644
index 7cdb25363ea0..000000000000
--- a/drivers/watchdog/bcm63xx_wdt.c
+++ /dev/null
@@ -1,315 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * Broadcom BCM63xx SoC watchdog driver
- *
- * Copyright (C) 2007, Miguel Gaio <miguel.gaio@efixo.com>
- * Copyright (C) 2008, Florian Fainelli <florian@openwrt.org>
- *
- */
-
-#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
-
-#include <linux/bitops.h>
-#include <linux/errno.h>
-#include <linux/fs.h>
-#include <linux/io.h>
-#include <linux/kernel.h>
-#include <linux/miscdevice.h>
-#include <linux/module.h>
-#include <linux/moduleparam.h>
-#include <linux/types.h>
-#include <linux/uaccess.h>
-#include <linux/watchdog.h>
-#include <linux/timer.h>
-#include <linux/jiffies.h>
-#include <linux/interrupt.h>
-#include <linux/ptrace.h>
-#include <linux/resource.h>
-#include <linux/platform_device.h>
-
-#include <bcm63xx_cpu.h>
-#include <bcm63xx_io.h>
-#include <bcm63xx_regs.h>
-#include <bcm63xx_timer.h>
-
-#define PFX KBUILD_MODNAME
-
-#define WDT_HZ 50000000 /* Fclk */
-#define WDT_DEFAULT_TIME 30 /* seconds */
-#define WDT_MAX_TIME 256 /* seconds */
-
-static struct {
- void __iomem *regs;
- struct timer_list timer;
- unsigned long inuse;
- atomic_t ticks;
-} bcm63xx_wdt_device;
-
-static int expect_close;
-
-static int wdt_time = WDT_DEFAULT_TIME;
-static bool nowayout = WATCHDOG_NOWAYOUT;
-module_param(nowayout, bool, 0);
-MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default="
- __MODULE_STRING(WATCHDOG_NOWAYOUT) ")");
-
-/* HW functions */
-static void bcm63xx_wdt_hw_start(void)
-{
- bcm_writel(0xfffffffe, bcm63xx_wdt_device.regs + WDT_DEFVAL_REG);
- bcm_writel(WDT_START_1, bcm63xx_wdt_device.regs + WDT_CTL_REG);
- bcm_writel(WDT_START_2, bcm63xx_wdt_device.regs + WDT_CTL_REG);
-}
-
-static void bcm63xx_wdt_hw_stop(void)
-{
- bcm_writel(WDT_STOP_1, bcm63xx_wdt_device.regs + WDT_CTL_REG);
- bcm_writel(WDT_STOP_2, bcm63xx_wdt_device.regs + WDT_CTL_REG);
-}
-
-static void bcm63xx_wdt_isr(void *data)
-{
- struct pt_regs *regs = get_irq_regs();
-
- die(PFX " fire", regs);
-}
-
-static void bcm63xx_timer_tick(struct timer_list *unused)
-{
- if (!atomic_dec_and_test(&bcm63xx_wdt_device.ticks)) {
- bcm63xx_wdt_hw_start();
- mod_timer(&bcm63xx_wdt_device.timer, jiffies + HZ);
- } else
- pr_crit("watchdog will restart system\n");
-}
-
-static void bcm63xx_wdt_pet(void)
-{
- atomic_set(&bcm63xx_wdt_device.ticks, wdt_time);
-}
-
-static void bcm63xx_wdt_start(void)
-{
- bcm63xx_wdt_pet();
- bcm63xx_timer_tick(0);
-}
-
-static void bcm63xx_wdt_pause(void)
-{
- del_timer_sync(&bcm63xx_wdt_device.timer);
- bcm63xx_wdt_hw_stop();
-}
-
-static int bcm63xx_wdt_settimeout(int new_time)
-{
- if ((new_time <= 0) || (new_time > WDT_MAX_TIME))
- return -EINVAL;
-
- wdt_time = new_time;
-
- return 0;
-}
-
-static int bcm63xx_wdt_open(struct inode *inode, struct file *file)
-{
- if (test_and_set_bit(0, &bcm63xx_wdt_device.inuse))
- return -EBUSY;
-
- bcm63xx_wdt_start();
- return stream_open(inode, file);
-}
-
-static int bcm63xx_wdt_release(struct inode *inode, struct file *file)
-{
- if (expect_close == 42)
- bcm63xx_wdt_pause();
- else {
- pr_crit("Unexpected close, not stopping watchdog!\n");
- bcm63xx_wdt_start();
- }
- clear_bit(0, &bcm63xx_wdt_device.inuse);
- expect_close = 0;
- return 0;
-}
-
-static ssize_t bcm63xx_wdt_write(struct file *file, const char *data,
- size_t len, loff_t *ppos)
-{
- if (len) {
- if (!nowayout) {
- size_t i;
-
- /* In case it was set long ago */
- expect_close = 0;
-
- for (i = 0; i != len; i++) {
- char c;
- if (get_user(c, data + i))
- return -EFAULT;
- if (c == 'V')
- expect_close = 42;
- }
- }
- bcm63xx_wdt_pet();
- }
- return len;
-}
-
-static struct watchdog_info bcm63xx_wdt_info = {
- .identity = PFX,
- .options = WDIOF_SETTIMEOUT |
- WDIOF_KEEPALIVEPING |
- WDIOF_MAGICCLOSE,
-};
-
-
-static long bcm63xx_wdt_ioctl(struct file *file, unsigned int cmd,
- unsigned long arg)
-{
- void __user *argp = (void __user *)arg;
- int __user *p = argp;
- int new_value, retval = -EINVAL;
-
- switch (cmd) {
- case WDIOC_GETSUPPORT:
- return copy_to_user(argp, &bcm63xx_wdt_info,
- sizeof(bcm63xx_wdt_info)) ? -EFAULT : 0;
-
- case WDIOC_GETSTATUS:
- case WDIOC_GETBOOTSTATUS:
- return put_user(0, p);
-
- case WDIOC_SETOPTIONS:
- if (get_user(new_value, p))
- return -EFAULT;
-
- if (new_value & WDIOS_DISABLECARD) {
- bcm63xx_wdt_pause();
- retval = 0;
- }
- if (new_value & WDIOS_ENABLECARD) {
- bcm63xx_wdt_start();
- retval = 0;
- }
-
- return retval;
-
- case WDIOC_KEEPALIVE:
- bcm63xx_wdt_pet();
- return 0;
-
- case WDIOC_SETTIMEOUT:
- if (get_user(new_value, p))
- return -EFAULT;
-
- if (bcm63xx_wdt_settimeout(new_value))
- return -EINVAL;
-
- bcm63xx_wdt_pet();
-
- case WDIOC_GETTIMEOUT:
- return put_user(wdt_time, p);
-
- default:
- return -ENOTTY;
-
- }
-}
-
-static const struct file_operations bcm63xx_wdt_fops = {
- .owner = THIS_MODULE,
- .llseek = no_llseek,
- .write = bcm63xx_wdt_write,
- .unlocked_ioctl = bcm63xx_wdt_ioctl,
- .compat_ioctl = compat_ptr_ioctl,
- .open = bcm63xx_wdt_open,
- .release = bcm63xx_wdt_release,
-};
-
-static struct miscdevice bcm63xx_wdt_miscdev = {
- .minor = WATCHDOG_MINOR,
- .name = "watchdog",
- .fops = &bcm63xx_wdt_fops,
-};
-
-
-static int bcm63xx_wdt_probe(struct platform_device *pdev)
-{
- int ret;
- struct resource *r;
-
- timer_setup(&bcm63xx_wdt_device.timer, bcm63xx_timer_tick, 0);
-
- r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
- if (!r) {
- dev_err(&pdev->dev, "failed to get resources\n");
- return -ENODEV;
- }
-
- bcm63xx_wdt_device.regs = devm_ioremap(&pdev->dev, r->start,
- resource_size(r));
- if (!bcm63xx_wdt_device.regs) {
- dev_err(&pdev->dev, "failed to remap I/O resources\n");
- return -ENXIO;
- }
-
- ret = bcm63xx_timer_register(TIMER_WDT_ID, bcm63xx_wdt_isr, NULL);
- if (ret < 0) {
- dev_err(&pdev->dev, "failed to register wdt timer isr\n");
- return ret;
- }
-
- if (bcm63xx_wdt_settimeout(wdt_time)) {
- bcm63xx_wdt_settimeout(WDT_DEFAULT_TIME);
- dev_info(&pdev->dev,
- ": wdt_time value must be 1 <= wdt_time <= 256, using %d\n",
- wdt_time);
- }
-
- ret = misc_register(&bcm63xx_wdt_miscdev);
- if (ret < 0) {
- dev_err(&pdev->dev, "failed to register watchdog device\n");
- goto unregister_timer;
- }
-
- dev_info(&pdev->dev, " started, timer margin: %d sec\n",
- WDT_DEFAULT_TIME);
-
- return 0;
-
-unregister_timer:
- bcm63xx_timer_unregister(TIMER_WDT_ID);
- return ret;
-}
-
-static int bcm63xx_wdt_remove(struct platform_device *pdev)
-{
- if (!nowayout)
- bcm63xx_wdt_pause();
-
- misc_deregister(&bcm63xx_wdt_miscdev);
- bcm63xx_timer_unregister(TIMER_WDT_ID);
- return 0;
-}
-
-static void bcm63xx_wdt_shutdown(struct platform_device *pdev)
-{
- bcm63xx_wdt_pause();
-}
-
-static struct platform_driver bcm63xx_wdt_driver = {
- .probe = bcm63xx_wdt_probe,
- .remove = bcm63xx_wdt_remove,
- .shutdown = bcm63xx_wdt_shutdown,
- .driver = {
- .name = "bcm63xx-wdt",
- }
-};
-
-module_platform_driver(bcm63xx_wdt_driver);
-
-MODULE_AUTHOR("Miguel Gaio <miguel.gaio@efixo.com>");
-MODULE_AUTHOR("Florian Fainelli <florian@openwrt.org>");
-MODULE_DESCRIPTION("Driver for the Broadcom BCM63xx SoC watchdog");
-MODULE_LICENSE("GPL");
-MODULE_ALIAS("platform:bcm63xx-wdt");
--
2.25.1
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v2 6/7] MIPS: BCM63XX: Provide platform data to watchdog device
2021-10-29 18:34 ` [PATCH v2 6/7] MIPS: BCM63XX: Provide platform data to watchdog device Florian Fainelli
@ 2021-10-29 18:52 ` Guenter Roeck
0 siblings, 0 replies; 10+ messages in thread
From: Guenter Roeck @ 2021-10-29 18:52 UTC (permalink / raw)
To: Florian Fainelli
Cc: linux-kernel, rafal, Wim Van Sebroeck, Rob Herring,
Thomas Bogendoerfer,
maintainer:BROADCOM BCM63XX ARM ARCHITECTURE, Justin Chen,
open list:WATCHDOG DEVICE DRIVERS,
open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS,
open list:MIPS, moderated list:BROADCOM BCM63XX ARM ARCHITECTURE
On Fri, Oct 29, 2021 at 11:34:29AM -0700, Florian Fainelli wrote:
> In order to utilize the bcm7038_wdt.c driver which needs to know the
> clock name to obtain, pass it via platform data using the
> bcm7038_wdt_platform_data structure.
>
> Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
We'll need an Ack from a MIPS maintainer for this patch to
be able to apply it through the watchdog tree.
Guenter
> ---
> arch/mips/bcm63xx/dev-wdt.c | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
> diff --git a/arch/mips/bcm63xx/dev-wdt.c b/arch/mips/bcm63xx/dev-wdt.c
> index 2a2346a99bcb..42130914a3c2 100644
> --- a/arch/mips/bcm63xx/dev-wdt.c
> +++ b/arch/mips/bcm63xx/dev-wdt.c
> @@ -9,6 +9,7 @@
> #include <linux/init.h>
> #include <linux/kernel.h>
> #include <linux/platform_device.h>
> +#include <linux/platform_data/bcm7038_wdt.h>
> #include <bcm63xx_cpu.h>
>
> static struct resource wdt_resources[] = {
> @@ -19,11 +20,18 @@ static struct resource wdt_resources[] = {
> },
> };
>
> +static struct bcm7038_wdt_platform_data bcm63xx_wdt_pdata = {
> + .clk_name = "periph",
> +};
> +
> static struct platform_device bcm63xx_wdt_device = {
> .name = "bcm63xx-wdt",
> .id = -1,
> .num_resources = ARRAY_SIZE(wdt_resources),
> .resource = wdt_resources,
> + .dev = {
> + .platform_data = &bcm63xx_wdt_pdata,
> + },
> };
>
> int __init bcm63xx_wdt_register(void)
> --
> 2.25.1
>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 5/7] watchdog: bcm7038_wdt: Add platform device id for bcm63xx-wdt
2021-10-29 18:34 ` [PATCH v2 5/7] watchdog: bcm7038_wdt: Add platform device id for bcm63xx-wdt Florian Fainelli
@ 2021-10-30 6:58 ` kernel test robot
0 siblings, 0 replies; 10+ messages in thread
From: kernel test robot @ 2021-10-30 6:58 UTC (permalink / raw)
To: Florian Fainelli, linux-kernel; +Cc: Justin Chen, linux-watchdog
[-- Attachment #1: Type: text/plain, Size: 2331 bytes --]
Hi Florian,
I love your patch! Perhaps something to improve:
[auto build test WARNING on robh/for-next]
[also build test WARNING on linux/master groeck-staging/hwmon-next linus/master v5.15-rc7 next-20211029]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Florian-Fainelli/Removal-of-bcm63xx-wdt/20211030-023646
base: https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git for-next
config: arm-randconfig-r002-20211028 (attached as .config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 5db7568a6a1fcb408eb8988abdaff2a225a8eb72)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install arm cross compiling tool for clang build
# apt-get install binutils-arm-linux-gnueabi
# https://github.com/0day-ci/linux/commit/3848f68f0fd262b6cf79422b1efc8e3cd9005716
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Florian-Fainelli/Removal-of-bcm63xx-wdt/20211030-023646
git checkout 3848f68f0fd262b6cf79422b1efc8e3cd9005716
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 ARCH=arm
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
>> drivers/watchdog/bcm7038_wdt.c:226:40: warning: unused variable 'bcm7038_wdt_devtype' [-Wunused-const-variable]
static const struct platform_device_id bcm7038_wdt_devtype[] = {
^
1 warning generated.
vim +/bcm7038_wdt_devtype +226 drivers/watchdog/bcm7038_wdt.c
225
> 226 static const struct platform_device_id bcm7038_wdt_devtype[] = {
227 { .name = "bcm7038-wdt" },
228 { .name = "bcm63xx-wdt" },
229 { /* sentinel */ },
230 };
231 MODULE_DEVICE_TABLE(platform, bcm7038_wdt_devtype);
232
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 37831 bytes --]
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2021-10-30 6:59 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-29 18:34 [PATCH v2 0/7] Removal of bcm63xx-wdt Florian Fainelli
2021-10-29 18:34 ` [PATCH v2 1/7] dt-bindings: watchdog: convert Broadcom's WDT to the json-schema Florian Fainelli
2021-10-29 18:34 ` [PATCH v2 2/7] dt-bindings: watchdog: Add BCM6345 compatible to BCM7038 binding Florian Fainelli
2021-10-29 18:34 ` [PATCH v2 3/7] watchdog: bcm7038_wdt: Support platform data configuration Florian Fainelli
2021-10-29 18:34 ` [PATCH v2 4/7] watchdog: Allow building BCM7038_WDT for BCM63XX Florian Fainelli
2021-10-29 18:34 ` [PATCH v2 5/7] watchdog: bcm7038_wdt: Add platform device id for bcm63xx-wdt Florian Fainelli
2021-10-30 6:58 ` kernel test robot
2021-10-29 18:34 ` [PATCH v2 6/7] MIPS: BCM63XX: Provide platform data to watchdog device Florian Fainelli
2021-10-29 18:52 ` Guenter Roeck
2021-10-29 18:34 ` [PATCH v2 7/7] watchdog: Remove BCM63XX_WDT Florian Fainelli
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).