diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-5.15/0051-watchdog-orion_wdt-support-pretimeout-on-Armada-XP.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-5.15/0051-watchdog-orion_wdt-support-pretimeout-on-Armada-XP.patch | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-5.15/0051-watchdog-orion_wdt-support-pretimeout-on-Armada-XP.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-5.15/0051-watchdog-orion_wdt-support-pretimeout-on-Armada-XP.patch new file mode 100644 index 00000000..946e187b --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-5.15/0051-watchdog-orion_wdt-support-pretimeout-on-Armada-XP.patch @@ -0,0 +1,65 @@ +From 578c70b22a4847bd2f58678383d684aeb01054cf Mon Sep 17 00:00:00 2001 +From: Chris Packham <chris.packham@alliedtelesis.co.nz> +Date: Fri, 11 Feb 2022 13:32:57 +1300 +Subject: [PATCH 51/86] watchdog: orion_wdt: support pretimeout on Armada-XP + +commit 7a6b3d8a432d18f48f3390de48f4361bc677712e upstream + +Commit e07a4c79ca75 ("watchdog: orion_wdt: use timer1 as a pretimeout") +added support for a pretimeout on Armada-38x variants. Because the +Armada-XP variants use armada370_start/armada370_stop (due to missing an +explicit RSTOUT mask bit for the watchdog). Add the required pretimeout +support to armada370_start/armada370_stop for Armada-XP. + +Signed-off-by: Chris Packham <chris.packham@alliedtelesis.co.nz> +Reviewed-by: Gregory CLEMENT <gregory.clement@bootlin.com> +Reviewed-by: Guenter Roeck <linux@roeck-us.net> +Link: https://lore.kernel.org/r/20220211003257.2037332-3-chris.packham@alliedtelesis.co.nz +Signed-off-by: Guenter Roeck <linux@roeck-us.net> +Signed-off-by: Wim Van Sebroeck <wim@linux-watchdog.org> +Signed-off-by: Zhaolong Zhang <zhaolong.zhang@windriver.com> +--- + drivers/watchdog/orion_wdt.c | 13 +++++++++---- + 1 file changed, 9 insertions(+), 4 deletions(-) + +diff --git a/drivers/watchdog/orion_wdt.c b/drivers/watchdog/orion_wdt.c +index 127eefc9161d..e25e6bf4647f 100644 +--- a/drivers/watchdog/orion_wdt.c ++++ b/drivers/watchdog/orion_wdt.c +@@ -238,8 +238,10 @@ static int armada370_start(struct watchdog_device *wdt_dev) + atomic_io_modify(dev->reg + TIMER_A370_STATUS, WDT_A370_EXPIRED, 0); + + /* Enable watchdog timer */ +- atomic_io_modify(dev->reg + TIMER_CTRL, dev->data->wdt_enable_bit, +- dev->data->wdt_enable_bit); ++ reg = dev->data->wdt_enable_bit; ++ if (dev->wdt.info->options & WDIOF_PRETIMEOUT) ++ reg |= TIMER1_ENABLE_BIT; ++ atomic_io_modify(dev->reg + TIMER_CTRL, reg, reg); + + /* Enable reset on watchdog */ + reg = readl(dev->rstout); +@@ -312,7 +314,7 @@ static int armada375_stop(struct watchdog_device *wdt_dev) + static int armada370_stop(struct watchdog_device *wdt_dev) + { + struct orion_watchdog *dev = watchdog_get_drvdata(wdt_dev); +- u32 reg; ++ u32 reg, mask; + + /* Disable reset on watchdog */ + reg = readl(dev->rstout); +@@ -320,7 +322,10 @@ static int armada370_stop(struct watchdog_device *wdt_dev) + writel(reg, dev->rstout); + + /* Disable watchdog timer */ +- atomic_io_modify(dev->reg + TIMER_CTRL, dev->data->wdt_enable_bit, 0); ++ mask = dev->data->wdt_enable_bit; ++ if (wdt_dev->info->options & WDIOF_PRETIMEOUT) ++ mask |= TIMER1_ENABLE_BIT; ++ atomic_io_modify(dev->reg + TIMER_CTRL, mask, 0); + + return 0; + } +-- +2.37.3 + |