All of lore.kernel.org
 help / color / mirror / Atom feed
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

  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.