linux/drivers/watchdog
Aaron Plattner 48defdf6b0 watchdog: sbsa: Adjust keepalive timeout to avoid MediaTek WS0 race condition
The MediaTek implementation of the sbsa_gwdt watchdog has a race
condition where a write to SBSA_GWDT_WRR is ignored if it occurs while
the hardware is processing a timeout refresh that asserts WS0.

Detect this based on the hardware implementer and adjust
wdd->min_hw_heartbeat_ms to avoid the race by forcing the keepalive ping
to be one second later.

Signed-off-by: Aaron Plattner <aplattner@nvidia.com>
Acked-by: Timur Tabi <ttabi@nvidia.com>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Link: https://lore.kernel.org/r/20250721230640.2244915-1-aplattner@nvidia.com
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Wim Van Sebroeck <wim@linux-watchdog.org>
2025-07-28 12:07:08 +02:00
..
acquirewdt.c Get rid of 'remove_new' relic from platform driver struct 2024-12-01 15:12:43 -08:00
advantech_ec_wdt.c
advantechwdt.c Get rid of 'remove_new' relic from platform driver struct 2024-12-01 15:12:43 -08:00
airoha_wdt.c watchdog: Add support for Airoha EN7851 watchdog 2024-11-05 10:04:39 +01:00
alim1535_wdt.c [tree-wide] finally take no_llseek out 2024-09-27 08:18:43 -07:00
alim7101_wdt.c treewide: Switch/rename to timer_delete[_sync]() 2025-04-05 10:30:12 +02:00
apple_wdt.c watchdog: apple: set max_hw_heartbeat_ms instead of max_timeout 2025-06-01 13:16:20 +02:00
arm_smc_wdt.c watchdog: arm_smc_wdt: get wdt status through SMCWD_GET_TIMELEFT 2025-06-01 13:16:29 +02:00
armada_37xx_wdt.c watchdog: armada_37xx_wdt: remove struct resource 2024-11-04 13:13:03 +01:00
asm9260_wdt.c
aspeed_wdt.c watchdog: aspeed: fix 64-bit division 2025-03-16 11:00:34 +01:00
at91rm9200_wdt.c Get rid of 'remove_new' relic from platform driver struct 2024-12-01 15:12:43 -08:00
at91sam9_wdt.c treewide, timers: Rename from_timer() to timer_container_of() 2025-06-08 09:07:37 +02:00
at91sam9_wdt.h
ath79_wdt.c Get rid of 'remove_new' relic from platform driver struct 2024-12-01 15:12:43 -08:00
bcm47xx_wdt.c treewide, timers: Rename from_timer() to timer_container_of() 2025-06-08 09:07:37 +02:00
bcm2835_wdt.c Get rid of 'remove_new' relic from platform driver struct 2024-12-01 15:12:43 -08:00
bcm7038_wdt.c
bcm_kona_wdt.c Get rid of 'remove_new' relic from platform driver struct 2024-12-01 15:12:43 -08:00
bd9576_wdt.c watchdog: bd9576: Drop "always-running" property 2024-05-04 12:50:41 +02:00
bd96801_wdt.c watchdog: bd96801_wdt: Add missing include for FIELD_*() 2024-07-09 10:40:02 +01:00
booke_wdt.c
cadence_wdt.c
cgbc_wdt.c watchdog: Congatec Board Controller watchdog timer driver 2024-10-09 16:32:11 +01:00
cpwd.c treewide: Switch/rename to timer_delete[_sync]() 2025-04-05 10:30:12 +02:00
cros_ec_wdt.c watchdog: cros-ec: Avoid -Wflex-array-member-not-at-end warning 2025-05-24 16:57:52 +02:00
da9052_wdt.c watchdog: da9052_wdt: respect TWDMIN 2025-05-24 16:57:52 +02:00
da9055_wdt.c watchdog: da9055_wdt: don't print out if registering watchdog fails 2024-11-05 10:04:33 +01:00
da9062_wdt.c
da9063_wdt.c watchdog: da9063: Remove __maybe_unused notations 2024-11-05 10:04:40 +01:00
davinci_wdt.c
db8500_wdt.c
diag288_wdt.c watchdog: diag288_wdt: Implement module autoload 2025-04-16 09:26:49 +02:00
digicolor_wdt.c
dw_wdt.c watchdog: dw_wdt: Fix default timeout 2025-07-21 11:10:33 +02:00
ebc-c384_wdt.c
ep93xx_wdt.c watchdog: Convert GPL 2.0 notice to SPDX identifier 2023-06-26 14:30:04 +02:00
eurotechwdt.c [tree-wide] finally take no_llseek out 2024-09-27 08:18:43 -07:00
exar_wdt.c watchdog: exar: Shorten identity name to fit correctly 2025-04-28 10:32:43 -07:00
f71808e_wdt.c
ftwdt010_wdt.c watchdog: Explicitly include correct DT includes 2023-08-13 14:29:49 +02:00
gef_wdt.c Get rid of 'remove_new' relic from platform driver struct 2024-12-01 15:12:43 -08:00
geodewdt.c Get rid of 'remove_new' relic from platform driver struct 2024-12-01 15:12:43 -08:00
gpio_wdt.c watchdog: gpio_wdt: Make use of device properties 2023-10-29 19:45:05 +01:00
gxp-wdt.c watchdog: gxp-wdt: don't print out if registering watchdog fails 2024-11-05 10:04:34 +01:00
hpwdt.c watchdog/hpwdt: Support Suspend and Resume 2024-03-03 14:17:30 +01:00
i6300esb.c
ib700wdt.c Get rid of 'remove_new' relic from platform driver struct 2024-12-01 15:12:43 -08:00
ibmasr.c [tree-wide] finally take no_llseek out 2024-09-27 08:18:43 -07:00
ie6xx_wdt.c Get rid of 'remove_new' relic from platform driver struct 2024-12-01 15:12:43 -08:00
imgpdc_wdt.c
imx2_wdt.c watchdog: imx2_wdt: Remove __maybe_unused notations 2024-09-10 11:05:28 +02:00
imx7ulp_wdt.c watchdog: imx7ulp_wdt: move post_rcs_wait into struct imx_wdt_hw_feature 2024-09-10 11:05:27 +02:00
imx_sc_wdt.c watchdog: imx_sc_wdt: detect if already running 2024-09-10 11:08:46 +02:00
indydog.c [tree-wide] finally take no_llseek out 2024-09-27 08:18:43 -07:00
intel-mid_wdt.c platform/x86: intel_scu_wdt: Move intel_scu_wdt.h to x86 subfolder 2024-09-11 14:26:08 +02:00
intel_oc_wdt.c watchdog: Add driver for Intel OC WDT 2025-06-01 13:16:33 +02:00
it87_wdt.c watchdog: it87_wdt: Don't use "proxy" headers 2025-07-17 11:26:56 +02:00
it8712f_wdt.c [tree-wide] finally take no_llseek out 2024-09-27 08:18:43 -07:00
iTCO_vendor.h
iTCO_vendor_support.c
iTCO_wdt.c watchdog: iTCO_wdt: Report error if timeout configuration fails 2025-07-16 18:05:02 +02:00
ixp4xx_wdt.c watchdog: ixp4xx: Make sure restart always works 2023-10-29 19:45:04 +01:00
jz4740_wdt.c
Kconfig watchdog: Add driver for Intel OC WDT 2025-06-01 13:16:33 +02:00
keembay_wdt.c
kempld_wdt.c
lantiq_wdt.c watchdog: Explicitly include correct DT includes 2023-08-13 14:29:49 +02:00
lenovo_se10_wdt.c watchdog: lenovo_se10_wdt: Convert comma to semicolon 2024-07-18 20:35:40 +02:00
lenovo_se30_wdt.c watchdog: lenovo_se30_wdt: Fix possible devm_ioremap() NULL pointer dereference in lenovo_se30_wdt_probe() 2025-06-01 13:16:07 +02:00
loongson1_wdt.c watchdog: Enable COMPILE_TEST for more drivers 2023-08-13 14:29:51 +02:00
lpc18xx_wdt.c treewide, timers: Rename from_timer() to timer_container_of() 2025-06-08 09:07:37 +02:00
m54xx_wdt.c [tree-wide] finally take no_llseek out 2024-09-27 08:18:43 -07:00
machzwd.c treewide: Switch/rename to timer_delete[_sync]() 2025-04-05 10:30:12 +02:00
Makefile watchdog: Add driver for Intel OC WDT 2025-06-01 13:16:33 +02:00
marvell_gti_wdt.c drivers: watchdog: marvell_gti: Convert comma to semicolon 2024-09-10 11:08:49 +02:00
max63xx_wdt.c watchdog: Convert GPL 2.0 notice to SPDX identifier 2023-06-26 14:30:04 +02:00
max77620_wdt.c watchdog: max77620: fix excess field in kerneldoc 2025-01-06 19:38:07 +01:00
mei_wdt.c
mena21_wdt.c
menf21bmc_wdt.c
menz69_wdt.c module: Convert symbol namespace to string literal 2024-12-02 11:34:44 -08:00
meson_gxbb_wdt.c watchdog: Add support for Amlogic-T7 SoCs 2023-08-25 16:19:15 +02:00
meson_wdt.c watchdog: Explicitly include correct DT includes 2023-08-13 14:29:49 +02:00
mixcomwd.c treewide: Switch/rename to timer_delete[_sync]() 2025-04-05 10:30:12 +02:00
mlx_wdt.c watchdog: mlx_wdt: fix all kernel-doc warnings 2023-12-24 10:44:40 +01:00
moxart_wdt.c watchdog: Convert GPL 2.0 notice to SPDX identifier 2023-06-26 14:30:04 +02:00
mpc8xxx_wdt.c watchdog: Explicitly include correct DT includes 2023-08-13 14:29:49 +02:00
msc313e_wdt.c
mt7621_wdt.c
mtk_wdt.c watchdog: mediatek: Add support for MT6735 TOPRGU/WDT 2024-11-07 11:27:07 +01:00
mtx-1_wdt.c Get rid of 'remove_new' relic from platform driver struct 2024-12-01 15:12:43 -08:00
ni903x_wdt.c
nic7018_wdt.c watchdog: nic7018_wdt: tidy up ACPI ID table 2025-03-09 15:19:44 +01:00
npcm_wdt.c watchdog: npcm: Remove unnecessary NULL check before clk_prepare_enable/clk_disable_unprepare 2025-03-16 11:00:32 +01:00
nv_tco.c Get rid of 'remove_new' relic from platform driver struct 2024-12-01 15:12:43 -08:00
nv_tco.h
octeon-wdt-main.c watchdog: octeon-wdt: don't print out if registering watchdog fails 2024-11-05 10:04:35 +01:00
octeon-wdt-nmi.S watchdog: Convert GPL 2.0 notice to SPDX identifier 2023-06-26 14:30:04 +02:00
of_xilinx_wdt.c watchdog: of_xilinx_wdt: Remove unnecessary clock disable call in the remove path 2023-10-11 18:53:33 +02:00
omap_wdt.c Get rid of 'remove_new' relic from platform driver struct 2024-12-01 15:12:43 -08:00
omap_wdt.h
orion_wdt.c Get rid of 'remove_new' relic from platform driver struct 2024-12-01 15:12:43 -08:00
pc87413_wdt.c [tree-wide] finally take no_llseek out 2024-09-27 08:18:43 -07:00
pcwd.c treewide: Switch/rename to timer_delete[_sync]() 2025-04-05 10:30:12 +02:00
pcwd_pci.c [tree-wide] finally take no_llseek out 2024-09-27 08:18:43 -07:00
pcwd_usb.c watchdog: Correct kerneldoc warnings 2025-05-24 16:57:54 +02:00
pic32-dmt.c watchdog: Explicitly include correct DT includes 2023-08-13 14:29:49 +02:00
pic32-wdt.c watchdog: Explicitly include correct DT includes 2023-08-13 14:29:49 +02:00
pika_wdt.c treewide: Switch/rename to timer_delete[_sync]() 2025-04-05 10:30:12 +02:00
pm8916_wdt.c watchdog: Convert comma to semicolon 2024-09-17 13:41:31 +02:00
pnx4008_wdt.c
pretimeout_noop.c watchdog: Correct kerneldoc warnings 2025-05-24 16:57:54 +02:00
pretimeout_panic.c watchdog: Correct kerneldoc warnings 2025-05-24 16:57:54 +02:00
pseries-wdt.c
qcom-wdt.c watchdog: qcom: introduce the device data for IPQ5424 watchdog device 2025-06-01 13:16:16 +02:00
rave-sp-wdt.c watchdog: Explicitly include correct DT includes 2023-08-13 14:29:49 +02:00
rc32434_wdt.c Get rid of 'remove_new' relic from platform driver struct 2024-12-01 15:12:43 -08:00
rdc321x_wdt.c Get rid of 'remove_new' relic from platform driver struct 2024-12-01 15:12:43 -08:00
realtek_otto_wdt.c
renesas_wdt.c watchdog: renesas_wdt: Convert to DEFINE_SIMPLE_DEV_PM_OPS() 2025-07-16 18:05:02 +02:00
retu_wdt.c
riowd.c Get rid of 'remove_new' relic from platform driver struct 2024-12-01 15:12:43 -08:00
rn5t618_wdt.c
rt2880_wdt.c
rtd119x_wdt.c watchdog: Convert GPL 2.0 notice to SPDX identifier 2023-06-26 14:30:04 +02:00
rti_wdt.c watchdog: rti_wdt: Use of_reserved_mem_region_to_resource() for "memory-region" 2025-07-16 18:05:01 +02:00
rza_wdt.c watchdog: rza_wdt: don't print out if registering watchdog fails 2024-11-05 10:04:37 +01:00
rzg2l_wdt.c watchdog: rzg2l_wdt: Power on the watchdog domain in the restart handler 2024-11-05 10:04:42 +01:00
rzn1_wdt.c watchdog: fix typo in the comment 2024-11-04 13:12:55 +01:00
rzv2h_wdt.c watchdog: rzv2h_wdt: Use local dev pointer in probe 2025-01-06 19:37:51 +01:00
s3c2410_wdt.c watchdog: s3c2410_wdt: Add exynos990-wdt compatible data 2025-06-01 13:16:03 +02:00
s32g_wdt.c watchdog: Add the Watchdog Timer for the NXP S32 platform 2025-05-24 16:57:54 +02:00
sa1100_wdt.c Get rid of 'remove_new' relic from platform driver struct 2024-12-01 15:12:43 -08:00
sama5d4_wdt.c watchdog: sama5d4: readout initial state 2023-08-19 17:36:20 +02:00
sb_wdog.c [tree-wide] finally take no_llseek out 2024-09-27 08:18:43 -07:00
sbc60xxwdt.c treewide: Switch/rename to timer_delete[_sync]() 2025-04-05 10:30:12 +02:00
sbc7240_wdt.c [tree-wide] finally take no_llseek out 2024-09-27 08:18:43 -07:00
sbc8360.c [tree-wide] finally take no_llseek out 2024-09-27 08:18:43 -07:00
sbc_epx_c3.c [tree-wide] finally take no_llseek out 2024-09-27 08:18:43 -07:00
sbc_fitpc2_wdt.c [tree-wide] finally take no_llseek out 2024-09-27 08:18:43 -07:00
sbsa_gwdt.c watchdog: sbsa: Adjust keepalive timeout to avoid MediaTek WS0 race condition 2025-07-28 12:07:08 +02:00
sc520_wdt.c treewide: Switch/rename to timer_delete[_sync]() 2025-04-05 10:30:12 +02:00
sc1200wdt.c [tree-wide] finally take no_llseek out 2024-09-27 08:18:43 -07:00
sch311x_wdt.c Get rid of 'remove_new' relic from platform driver struct 2024-12-01 15:12:43 -08:00
scx200_wdt.c [tree-wide] finally take no_llseek out 2024-09-27 08:18:43 -07:00
shwdt.c treewide, timers: Rename from_timer() to timer_container_of() 2025-06-08 09:07:37 +02:00
simatic-ipc-wdt.c watchdog: add missing MODULE_DESCRIPTION() macros 2024-06-15 12:49:57 +02:00
sl28cpld_wdt.c watchdog: sl28cpld_wdt: don't print out if registering watchdog fails 2024-11-05 10:04:37 +01:00
smsc37b787_wdt.c watchdog: fix typo in the comment 2024-11-04 13:12:55 +01:00
softdog.c watchdog: Switch to use hrtimer_setup() 2025-02-18 10:32:33 +01:00
sp805_wdt.c watchdog: sp805_wdt: Drop documentation of non-existent status member 2025-01-06 19:37:52 +01:00
sp5100_tco.c watchdog: sp5100_tco: support Hygon FCH/SCH (Server Controller Hub) 2023-06-26 14:30:07 +02:00
sp5100_tco.h
sprd_wdt.c
st_lpc_wdt.c Get rid of 'remove_new' relic from platform driver struct 2024-12-01 15:12:43 -08:00
starfive-wdt.c Get rid of 'remove_new' relic from platform driver struct 2024-12-01 15:12:43 -08:00
stm32_iwdg.c watchdog: stm32: Fix wakeup source leaks on device unbind 2025-05-24 16:57:53 +02:00
stmp3xxx_rtc_wdt.c Get rid of 'remove_new' relic from platform driver struct 2024-12-01 15:12:43 -08:00
stpmic1_wdt.c
sun4v_wdt.c
sunplus_wdt.c watchdog: sunplus: Use the devm_clk_get_enabled() helper function 2023-10-11 18:34:10 +02:00
sunxi_wdt.c watchdog: sunxi_wdt: Add support for Allwinner A523 2025-03-25 14:11:16 +01:00
tegra_wdt.c
tqmx86_wdt.c
ts72xx_wdt.c wdt: ts72xx: add DT support for ts72xx 2024-09-12 14:33:11 +00:00
ts4800_wdt.c watchdog: add missing MODULE_DESCRIPTION() macros 2024-06-15 12:49:57 +02:00
twl4030_wdt.c watchdog: add missing MODULE_DESCRIPTION() macros 2024-06-15 12:49:57 +02:00
txx9wdt.c Get rid of 'remove_new' relic from platform driver struct 2024-12-01 15:12:43 -08:00
uniphier_wdt.c
via_wdt.c treewide: Switch/rename to timer_delete[_sync]() 2025-04-05 10:30:12 +02:00
visconti_wdt.c
w83627hf_wdt.c
w83877f_wdt.c treewide: Switch/rename to timer_delete[_sync]() 2025-04-05 10:30:12 +02:00
w83977f_wdt.c [tree-wide] finally take no_llseek out 2024-09-27 08:18:43 -07:00
wafer5823wdt.c [tree-wide] finally take no_llseek out 2024-09-27 08:18:43 -07:00
watchdog_core.c watchdog: Convert to use device property 2025-03-11 15:52:51 +01:00
watchdog_core.h watchdog: Don't use "proxy" headers 2025-07-17 11:26:56 +02:00
watchdog_dev.c watchdog: Switch to use hrtimer_setup() 2025-02-18 10:32:33 +01:00
watchdog_hrtimer_pretimeout.c watchdog: Switch to use hrtimer_setup() 2025-02-18 10:32:33 +01:00
watchdog_pretimeout.c watchdog: Don't use "proxy" headers 2025-07-17 11:26:56 +02:00
watchdog_pretimeout.h
wd501p.h
wdat_wdt.c watchdog: wdat_wdt: Add timeout value as a param in ping method 2023-10-29 19:45:06 +01:00
wdrtas.c [tree-wide] finally take no_llseek out 2024-09-27 08:18:43 -07:00
wdt.c [tree-wide] finally take no_llseek out 2024-09-27 08:18:43 -07:00
wdt285.c [tree-wide] finally take no_llseek out 2024-09-27 08:18:43 -07:00
wdt977.c [tree-wide] finally take no_llseek out 2024-09-27 08:18:43 -07:00
wdt_pci.c watchdog: Correct kerneldoc warnings 2025-05-24 16:57:54 +02:00
wm831x_wdt.c
wm8350_wdt.c
xen_wdt.c
xilinx_wwdt.c watchdog: xilinx_wwdt: Calculate max_hw_heartbeat_ms using clock frequency 2024-11-04 13:12:59 +01:00
ziirave_wdt.c watchdog: ziirave_wdt: check record length in ziirave_firm_verify() 2025-07-16 18:05:00 +02:00