forked from openwrt/openwrt
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
bmips: backport accepted watchdog patch
This patch has been accepted for linux v5.14. Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
- Loading branch information
Showing
2 changed files
with
86 additions
and
66 deletions.
There are no files selected for viewing
86 changes: 86 additions & 0 deletions
86
target/linux/bmips/patches-5.10/080-v5.14-watchdog-bcm7038_wdt-add-big-endian-support.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
From e379c2199de4280243e43118dceb4ea5e97059a3 Mon Sep 17 00:00:00 2001 | ||
From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= <noltari@gmail.com> | ||
Date: Tue, 23 Feb 2021 09:00:42 +0100 | ||
Subject: [PATCH] watchdog: bcm7038_wdt: add big endian support | ||
MIME-Version: 1.0 | ||
Content-Type: text/plain; charset=UTF-8 | ||
Content-Transfer-Encoding: 8bit | ||
|
||
bcm7038_wdt can be used on bmips big endian (bcm63xx) devices too. | ||
|
||
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com> | ||
Reviewed-by: Guenter Roeck <linux@roeck-us.net> | ||
Link: https://lore.kernel.org/r/20210223080042.29569-1-noltari@gmail.com | ||
Signed-off-by: Guenter Roeck <linux@roeck-us.net> | ||
Signed-off-by: Wim Van Sebroeck <wim@linux-watchdog.org> | ||
--- | ||
drivers/watchdog/bcm7038_wdt.c | 31 +++++++++++++++++++++++++------ | ||
1 file changed, 25 insertions(+), 6 deletions(-) | ||
|
||
--- a/drivers/watchdog/bcm7038_wdt.c | ||
+++ b/drivers/watchdog/bcm7038_wdt.c | ||
@@ -34,6 +34,25 @@ struct bcm7038_watchdog { | ||
|
||
static bool nowayout = WATCHDOG_NOWAYOUT; | ||
|
||
+static inline void bcm7038_wdt_write(u32 value, void __iomem *addr) | ||
+{ | ||
+ /* MIPS chips strapped for BE will automagically configure the | ||
+ * peripheral registers for CPU-native byte order. | ||
+ */ | ||
+ if (IS_ENABLED(CONFIG_MIPS) && IS_ENABLED(CONFIG_CPU_BIG_ENDIAN)) | ||
+ __raw_writel(value, addr); | ||
+ else | ||
+ writel_relaxed(value, addr); | ||
+} | ||
+ | ||
+static inline u32 bcm7038_wdt_read(void __iomem *addr) | ||
+{ | ||
+ if (IS_ENABLED(CONFIG_MIPS) && IS_ENABLED(CONFIG_CPU_BIG_ENDIAN)) | ||
+ return __raw_readl(addr); | ||
+ else | ||
+ return readl_relaxed(addr); | ||
+} | ||
+ | ||
static void bcm7038_wdt_set_timeout_reg(struct watchdog_device *wdog) | ||
{ | ||
struct bcm7038_watchdog *wdt = watchdog_get_drvdata(wdog); | ||
@@ -41,15 +60,15 @@ static void bcm7038_wdt_set_timeout_reg( | ||
|
||
timeout = wdt->rate * wdog->timeout; | ||
|
||
- writel(timeout, wdt->base + WDT_TIMEOUT_REG); | ||
+ bcm7038_wdt_write(timeout, wdt->base + WDT_TIMEOUT_REG); | ||
} | ||
|
||
static int bcm7038_wdt_ping(struct watchdog_device *wdog) | ||
{ | ||
struct bcm7038_watchdog *wdt = watchdog_get_drvdata(wdog); | ||
|
||
- writel(WDT_START_1, wdt->base + WDT_CMD_REG); | ||
- writel(WDT_START_2, wdt->base + WDT_CMD_REG); | ||
+ bcm7038_wdt_write(WDT_START_1, wdt->base + WDT_CMD_REG); | ||
+ bcm7038_wdt_write(WDT_START_2, wdt->base + WDT_CMD_REG); | ||
|
||
return 0; | ||
} | ||
@@ -66,8 +85,8 @@ static int bcm7038_wdt_stop(struct watch | ||
{ | ||
struct bcm7038_watchdog *wdt = watchdog_get_drvdata(wdog); | ||
|
||
- writel(WDT_STOP_1, wdt->base + WDT_CMD_REG); | ||
- writel(WDT_STOP_2, wdt->base + WDT_CMD_REG); | ||
+ bcm7038_wdt_write(WDT_STOP_1, wdt->base + WDT_CMD_REG); | ||
+ bcm7038_wdt_write(WDT_STOP_2, wdt->base + WDT_CMD_REG); | ||
|
||
return 0; | ||
} | ||
@@ -88,7 +107,7 @@ static unsigned int bcm7038_wdt_get_time | ||
struct bcm7038_watchdog *wdt = watchdog_get_drvdata(wdog); | ||
u32 time_left; | ||
|
||
- time_left = readl(wdt->base + WDT_CMD_REG); | ||
+ time_left = bcm7038_wdt_read(wdt->base + WDT_CMD_REG); | ||
|
||
return time_left / wdt->rate; | ||
} |
66 changes: 0 additions & 66 deletions
66
target/linux/bmips/patches-5.10/120-wdt-bcm7038-add-big-endian-compatibility.patch
This file was deleted.
Oops, something went wrong.