Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

watchdog: mtk_wdt: Add reset_by_toprgu support

In some cases, the MediaTek watchdog requires the TOPRGU to reset
timer after system resets.

Provide a reset_by_toprgu parameter for configuration.

Signed-off-by: Allen-KH Cheng <allen-kh.cheng@mediatek.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
Link: https://lore.kernel.org/r/20230117014023.2993-3-allen-kh.cheng@mediatek.com
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Wim Van Sebroeck <wim@linux-watchdog.org>

authored by

Allen-KH Cheng and committed by
Wim Van Sebroeck
a224764f 9b30eac1

+7
+7
drivers/watchdog/mtk_wdt.c
··· 50 50 #define WDT_MODE_IRQ_EN (1 << 3) 51 51 #define WDT_MODE_AUTO_START (1 << 4) 52 52 #define WDT_MODE_DUAL_EN (1 << 6) 53 + #define WDT_MODE_CNT_SEL (1 << 8) 53 54 #define WDT_MODE_KEY 0x22000000 54 55 55 56 #define WDT_SWRST 0x14 ··· 71 70 spinlock_t lock; /* protects WDT_SWSYSRST reg */ 72 71 struct reset_controller_dev rcdev; 73 72 bool disable_wdt_extrst; 73 + bool reset_by_toprgu; 74 74 }; 75 75 76 76 struct mtk_wdt_data { ··· 281 279 reg &= ~(WDT_MODE_IRQ_EN | WDT_MODE_DUAL_EN); 282 280 if (mtk_wdt->disable_wdt_extrst) 283 281 reg &= ~WDT_MODE_EXRST_EN; 282 + if (mtk_wdt->reset_by_toprgu) 283 + reg |= WDT_MODE_CNT_SEL; 284 284 reg |= (WDT_MODE_EN | WDT_MODE_KEY); 285 285 iowrite32(reg, wdt_base + WDT_MODE); 286 286 ··· 411 407 412 408 mtk_wdt->disable_wdt_extrst = 413 409 of_property_read_bool(dev->of_node, "mediatek,disable-extrst"); 410 + 411 + mtk_wdt->reset_by_toprgu = 412 + of_property_read_bool(dev->of_node, "mediatek,reset-by-toprgu"); 414 413 415 414 return 0; 416 415 }