From: "Rafał Miłecki" <zajec5@gmail.com>
To: Wim Van Sebroeck <wim@linux-watchdog.org>,
Guenter Roeck <linux@roeck-us.net>,
Rob Herring <robh+dt@kernel.org>
Cc: "Florian Fainelli" <f.fainelli@gmail.com>,
"Thomas Bogendoerfer" <tsbogend@alpha.franken.de>,
bcm-kernel-feedback-list@broadcom.com,
linux-watchdog@vger.kernel.org,
linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org,
linux-mips@vger.kernel.org, "Rafał Miłecki" <rafal@milecki.pl>
Subject: [PATCH 2/3] watchdog: bcm63xx_wdt: support compiling with COMPILE_TEST
Date: Wed, 27 Oct 2021 23:55:30 +0200 [thread overview]
Message-ID: <20211027215531.9996-2-zajec5@gmail.com> (raw)
In-Reply-To: <20211027215531.9996-1-zajec5@gmail.com>
From: Rafał Miłecki <rafal@milecki.pl>
Most of this driver uses generic code and can be compile tested on any
platform / arch. Move watchdog specific defines to a globally available
header and check for BCM63XX for platform specific code.
This helps maintaining kernel / driver and will allow adding support for
other platforms later.
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
---
arch/mips/bcm63xx/prom.c | 1 +
arch/mips/bcm63xx/setup.c | 1 +
.../include/asm/mach-bcm63xx/bcm63xx_regs.h | 22 ------------
drivers/watchdog/Kconfig | 2 +-
drivers/watchdog/bcm63xx_wdt.c | 35 +++++++++++++++----
include/linux/bcm63xx_wdt.h | 24 +++++++++++++
6 files changed, 55 insertions(+), 30 deletions(-)
create mode 100644 include/linux/bcm63xx_wdt.h
diff --git a/arch/mips/bcm63xx/prom.c b/arch/mips/bcm63xx/prom.c
index c3a2ea62c5c3..5e602a58a986 100644
--- a/arch/mips/bcm63xx/prom.c
+++ b/arch/mips/bcm63xx/prom.c
@@ -6,6 +6,7 @@
* Copyright (C) 2008 Maxime Bizon <mbizon@freebox.fr>
*/
+#include <linux/bcm63xx_wdt.h>
#include <linux/init.h>
#include <linux/memblock.h>
#include <linux/smp.h>
diff --git a/arch/mips/bcm63xx/setup.c b/arch/mips/bcm63xx/setup.c
index d811e3e03f81..86d4ad7dc8ba 100644
--- a/arch/mips/bcm63xx/setup.c
+++ b/arch/mips/bcm63xx/setup.c
@@ -6,6 +6,7 @@
* Copyright (C) 2008 Maxime Bizon <mbizon@freebox.fr>
*/
+#include <linux/bcm63xx_wdt.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/delay.h>
diff --git a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h
index 9ceb5e72889f..fc0272e2dec2 100644
--- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h
+++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h
@@ -441,28 +441,6 @@
#define TIMER_CTL_ENABLE_MASK (1 << 31)
-/*************************************************************************
- * _REG relative to RSET_WDT
- *************************************************************************/
-
-/* Watchdog default count register */
-#define WDT_DEFVAL_REG 0x0
-
-/* Watchdog control register */
-#define WDT_CTL_REG 0x4
-
-/* Watchdog control register constants */
-#define WDT_START_1 (0xff00)
-#define WDT_START_2 (0x00ff)
-#define WDT_STOP_1 (0xee00)
-#define WDT_STOP_2 (0x00ee)
-
-/* Watchdog reset length register */
-#define WDT_RSTLEN_REG 0x8
-
-/* Watchdog soft reset register (BCM6328 only) */
-#define WDT_SOFTRESET_REG 0xc
-
/*************************************************************************
* _REG relative to RSET_GPIO
*************************************************************************/
diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
index bf59faeb3de1..913cde027e92 100644
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
@@ -1711,7 +1711,7 @@ config OCTEON_WDT
config BCM63XX_WDT
tristate "Broadcom BCM63xx hardware watchdog"
- depends on BCM63XX
+ depends on BCM63XX || COMPILE_TEST
help
Watchdog driver for the built in watchdog hardware in Broadcom
BCM63xx SoC.
diff --git a/drivers/watchdog/bcm63xx_wdt.c b/drivers/watchdog/bcm63xx_wdt.c
index 56cc262571a5..1334e7fe77d8 100644
--- a/drivers/watchdog/bcm63xx_wdt.c
+++ b/drivers/watchdog/bcm63xx_wdt.c
@@ -9,6 +9,7 @@
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+#include <linux/bcm63xx_wdt.h>
#include <linux/bitops.h>
#include <linux/errno.h>
#include <linux/fs.h>
@@ -27,10 +28,10 @@
#include <linux/resource.h>
#include <linux/platform_device.h>
-#include <bcm63xx_cpu.h>
+#ifdef BCM63XX
#include <bcm63xx_io.h>
-#include <bcm63xx_regs.h>
#include <bcm63xx_timer.h>
+#endif
#define PFX KBUILD_MODNAME
@@ -53,26 +54,40 @@ module_param(nowayout, bool, 0);
MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default="
__MODULE_STRING(WATCHDOG_NOWAYOUT) ")");
+static void bcm63xx_wdt_write_reg(u32 reg, u32 val)
+{
+ void __iomem *addr = bcm63xx_wdt_device.regs;
+
+ addr += reg;
+#ifdef BCM63XX
+ bcm_writel(val, addr);
+#else
+ writel(val, addr);
+#endif
+}
+
/* 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);
+ bcm63xx_wdt_write_reg(WDT_DEFVAL_REG, 0xfffffffe);
+ bcm63xx_wdt_write_reg(WDT_CTL_REG, WDT_START_1);
+ bcm63xx_wdt_write_reg(WDT_CTL_REG, WDT_START_2);
}
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);
+ bcm63xx_wdt_write_reg(WDT_CTL_REG, WDT_STOP_1);
+ bcm63xx_wdt_write_reg(WDT_CTL_REG, WDT_STOP_2);
}
+#ifdef BCM63XX
static void bcm63xx_wdt_isr(void *data)
{
struct pt_regs *regs = get_irq_regs();
die(PFX " fire", regs);
}
+#endif
static void bcm63xx_timer_tick(struct timer_list *unused)
{
@@ -255,11 +270,13 @@ static int bcm63xx_wdt_probe(struct platform_device *pdev)
return -ENXIO;
}
+#ifdef BCM63XX
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;
}
+#endif
if (bcm63xx_wdt_settimeout(wdt_time)) {
bcm63xx_wdt_settimeout(WDT_DEFAULT_TIME);
@@ -280,7 +297,9 @@ static int bcm63xx_wdt_probe(struct platform_device *pdev)
return 0;
unregister_timer:
+#ifdef BCM63XX
bcm63xx_timer_unregister(TIMER_WDT_ID);
+#endif
return ret;
}
@@ -290,7 +309,9 @@ static int bcm63xx_wdt_remove(struct platform_device *pdev)
bcm63xx_wdt_pause();
misc_deregister(&bcm63xx_wdt_miscdev);
+#ifdef BCM63XX
bcm63xx_timer_unregister(TIMER_WDT_ID);
+#endif
return 0;
}
diff --git a/include/linux/bcm63xx_wdt.h b/include/linux/bcm63xx_wdt.h
new file mode 100644
index 000000000000..a33d23237b32
--- /dev/null
+++ b/include/linux/bcm63xx_wdt.h
@@ -0,0 +1,24 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#ifndef __BCM63XX_WDT_H
+#define __BCM63XX_WDT_H
+
+/* Watchdog default count register */
+#define WDT_DEFVAL_REG 0x0
+
+/* Watchdog control register */
+#define WDT_CTL_REG 0x4
+
+/* Watchdog control register constants */
+#define WDT_START_1 (0xff00)
+#define WDT_START_2 (0x00ff)
+#define WDT_STOP_1 (0xee00)
+#define WDT_STOP_2 (0x00ee)
+
+/* Watchdog reset length register */
+#define WDT_RSTLEN_REG 0x8
+
+/* Watchdog soft reset register (BCM6328 only) */
+#define WDT_SOFTRESET_REG 0xc
+
+#endif /* __BCM63XX_WDT_H */
--
2.31.1
WARNING: multiple messages have this Message-ID (diff)
From: "Rafał Miłecki" <zajec5@gmail.com>
To: Wim Van Sebroeck <wim@linux-watchdog.org>,
Guenter Roeck <linux@roeck-us.net>,
Rob Herring <robh+dt@kernel.org>
Cc: "Florian Fainelli" <f.fainelli@gmail.com>,
"Thomas Bogendoerfer" <tsbogend@alpha.franken.de>,
bcm-kernel-feedback-list@broadcom.com,
linux-watchdog@vger.kernel.org,
linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org,
linux-mips@vger.kernel.org, "Rafał Miłecki" <rafal@milecki.pl>
Subject: [PATCH 2/3] watchdog: bcm63xx_wdt: support compiling with COMPILE_TEST
Date: Wed, 27 Oct 2021 23:55:30 +0200 [thread overview]
Message-ID: <20211027215531.9996-2-zajec5@gmail.com> (raw)
In-Reply-To: <20211027215531.9996-1-zajec5@gmail.com>
From: Rafał Miłecki <rafal@milecki.pl>
Most of this driver uses generic code and can be compile tested on any
platform / arch. Move watchdog specific defines to a globally available
header and check for BCM63XX for platform specific code.
This helps maintaining kernel / driver and will allow adding support for
other platforms later.
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
---
arch/mips/bcm63xx/prom.c | 1 +
arch/mips/bcm63xx/setup.c | 1 +
.../include/asm/mach-bcm63xx/bcm63xx_regs.h | 22 ------------
drivers/watchdog/Kconfig | 2 +-
drivers/watchdog/bcm63xx_wdt.c | 35 +++++++++++++++----
include/linux/bcm63xx_wdt.h | 24 +++++++++++++
6 files changed, 55 insertions(+), 30 deletions(-)
create mode 100644 include/linux/bcm63xx_wdt.h
diff --git a/arch/mips/bcm63xx/prom.c b/arch/mips/bcm63xx/prom.c
index c3a2ea62c5c3..5e602a58a986 100644
--- a/arch/mips/bcm63xx/prom.c
+++ b/arch/mips/bcm63xx/prom.c
@@ -6,6 +6,7 @@
* Copyright (C) 2008 Maxime Bizon <mbizon@freebox.fr>
*/
+#include <linux/bcm63xx_wdt.h>
#include <linux/init.h>
#include <linux/memblock.h>
#include <linux/smp.h>
diff --git a/arch/mips/bcm63xx/setup.c b/arch/mips/bcm63xx/setup.c
index d811e3e03f81..86d4ad7dc8ba 100644
--- a/arch/mips/bcm63xx/setup.c
+++ b/arch/mips/bcm63xx/setup.c
@@ -6,6 +6,7 @@
* Copyright (C) 2008 Maxime Bizon <mbizon@freebox.fr>
*/
+#include <linux/bcm63xx_wdt.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/delay.h>
diff --git a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h
index 9ceb5e72889f..fc0272e2dec2 100644
--- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h
+++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h
@@ -441,28 +441,6 @@
#define TIMER_CTL_ENABLE_MASK (1 << 31)
-/*************************************************************************
- * _REG relative to RSET_WDT
- *************************************************************************/
-
-/* Watchdog default count register */
-#define WDT_DEFVAL_REG 0x0
-
-/* Watchdog control register */
-#define WDT_CTL_REG 0x4
-
-/* Watchdog control register constants */
-#define WDT_START_1 (0xff00)
-#define WDT_START_2 (0x00ff)
-#define WDT_STOP_1 (0xee00)
-#define WDT_STOP_2 (0x00ee)
-
-/* Watchdog reset length register */
-#define WDT_RSTLEN_REG 0x8
-
-/* Watchdog soft reset register (BCM6328 only) */
-#define WDT_SOFTRESET_REG 0xc
-
/*************************************************************************
* _REG relative to RSET_GPIO
*************************************************************************/
diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
index bf59faeb3de1..913cde027e92 100644
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
@@ -1711,7 +1711,7 @@ config OCTEON_WDT
config BCM63XX_WDT
tristate "Broadcom BCM63xx hardware watchdog"
- depends on BCM63XX
+ depends on BCM63XX || COMPILE_TEST
help
Watchdog driver for the built in watchdog hardware in Broadcom
BCM63xx SoC.
diff --git a/drivers/watchdog/bcm63xx_wdt.c b/drivers/watchdog/bcm63xx_wdt.c
index 56cc262571a5..1334e7fe77d8 100644
--- a/drivers/watchdog/bcm63xx_wdt.c
+++ b/drivers/watchdog/bcm63xx_wdt.c
@@ -9,6 +9,7 @@
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+#include <linux/bcm63xx_wdt.h>
#include <linux/bitops.h>
#include <linux/errno.h>
#include <linux/fs.h>
@@ -27,10 +28,10 @@
#include <linux/resource.h>
#include <linux/platform_device.h>
-#include <bcm63xx_cpu.h>
+#ifdef BCM63XX
#include <bcm63xx_io.h>
-#include <bcm63xx_regs.h>
#include <bcm63xx_timer.h>
+#endif
#define PFX KBUILD_MODNAME
@@ -53,26 +54,40 @@ module_param(nowayout, bool, 0);
MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default="
__MODULE_STRING(WATCHDOG_NOWAYOUT) ")");
+static void bcm63xx_wdt_write_reg(u32 reg, u32 val)
+{
+ void __iomem *addr = bcm63xx_wdt_device.regs;
+
+ addr += reg;
+#ifdef BCM63XX
+ bcm_writel(val, addr);
+#else
+ writel(val, addr);
+#endif
+}
+
/* 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);
+ bcm63xx_wdt_write_reg(WDT_DEFVAL_REG, 0xfffffffe);
+ bcm63xx_wdt_write_reg(WDT_CTL_REG, WDT_START_1);
+ bcm63xx_wdt_write_reg(WDT_CTL_REG, WDT_START_2);
}
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);
+ bcm63xx_wdt_write_reg(WDT_CTL_REG, WDT_STOP_1);
+ bcm63xx_wdt_write_reg(WDT_CTL_REG, WDT_STOP_2);
}
+#ifdef BCM63XX
static void bcm63xx_wdt_isr(void *data)
{
struct pt_regs *regs = get_irq_regs();
die(PFX " fire", regs);
}
+#endif
static void bcm63xx_timer_tick(struct timer_list *unused)
{
@@ -255,11 +270,13 @@ static int bcm63xx_wdt_probe(struct platform_device *pdev)
return -ENXIO;
}
+#ifdef BCM63XX
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;
}
+#endif
if (bcm63xx_wdt_settimeout(wdt_time)) {
bcm63xx_wdt_settimeout(WDT_DEFAULT_TIME);
@@ -280,7 +297,9 @@ static int bcm63xx_wdt_probe(struct platform_device *pdev)
return 0;
unregister_timer:
+#ifdef BCM63XX
bcm63xx_timer_unregister(TIMER_WDT_ID);
+#endif
return ret;
}
@@ -290,7 +309,9 @@ static int bcm63xx_wdt_remove(struct platform_device *pdev)
bcm63xx_wdt_pause();
misc_deregister(&bcm63xx_wdt_miscdev);
+#ifdef BCM63XX
bcm63xx_timer_unregister(TIMER_WDT_ID);
+#endif
return 0;
}
diff --git a/include/linux/bcm63xx_wdt.h b/include/linux/bcm63xx_wdt.h
new file mode 100644
index 000000000000..a33d23237b32
--- /dev/null
+++ b/include/linux/bcm63xx_wdt.h
@@ -0,0 +1,24 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#ifndef __BCM63XX_WDT_H
+#define __BCM63XX_WDT_H
+
+/* Watchdog default count register */
+#define WDT_DEFVAL_REG 0x0
+
+/* Watchdog control register */
+#define WDT_CTL_REG 0x4
+
+/* Watchdog control register constants */
+#define WDT_START_1 (0xff00)
+#define WDT_START_2 (0x00ff)
+#define WDT_STOP_1 (0xee00)
+#define WDT_STOP_2 (0x00ee)
+
+/* Watchdog reset length register */
+#define WDT_RSTLEN_REG 0x8
+
+/* Watchdog soft reset register (BCM6328 only) */
+#define WDT_SOFTRESET_REG 0xc
+
+#endif /* __BCM63XX_WDT_H */
--
2.31.1
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2021-10-27 21:56 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-10-27 21:55 [PATCH 1/3] dt-bindings: watchdog: add Broadcom's BCM63xx watchdog Rafał Miłecki
2021-10-27 21:55 ` Rafał Miłecki
2021-10-27 21:55 ` Rafał Miłecki [this message]
2021-10-27 21:55 ` [PATCH 2/3] watchdog: bcm63xx_wdt: support compiling with COMPILE_TEST Rafał Miłecki
2021-10-27 21:55 ` [PATCH 3/3] watchdog: bcm63xx_wdt: support BCM4908 Rafał Miłecki
2021-10-27 21:55 ` Rafał Miłecki
2021-10-27 22:22 ` Guenter Roeck
2021-10-27 22:22 ` Guenter Roeck
2021-10-27 22:28 ` Florian Fainelli
2021-10-27 22:28 ` Florian Fainelli
2021-10-27 22:33 ` [PATCH 1/3] dt-bindings: watchdog: add Broadcom's BCM63xx watchdog Florian Fainelli
2021-10-27 22:33 ` Florian Fainelli
2021-10-28 5:50 ` Rafał Miłecki
2021-10-28 5:50 ` Rafał Miłecki
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20211027215531.9996-2-zajec5@gmail.com \
--to=zajec5@gmail.com \
--cc=bcm-kernel-feedback-list@broadcom.com \
--cc=devicetree@vger.kernel.org \
--cc=f.fainelli@gmail.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-mips@vger.kernel.org \
--cc=linux-watchdog@vger.kernel.org \
--cc=linux@roeck-us.net \
--cc=rafal@milecki.pl \
--cc=robh+dt@kernel.org \
--cc=tsbogend@alpha.franken.de \
--cc=wim@linux-watchdog.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.