mediatek: add mt7986 soc support to the target
[openwrt/staging/aparcar.git] / target / linux / mediatek / patches-5.15 / 920-watchdog-add-mt7986-assert.patch
1 --- a/drivers/watchdog/mtk_wdt.c
2 +++ b/drivers/watchdog/mtk_wdt.c
3 @@ -9,6 +9,7 @@
4 * Based on sunxi_wdt.c
5 */
6
7 +#include <dt-bindings/reset/mt7986-resets.h>
8 #include <dt-bindings/reset-controller/mt2712-resets.h>
9 #include <dt-bindings/reset-controller/mt8183-resets.h>
10 #include <dt-bindings/reset-controller/mt8192-resets.h>
11 @@ -65,6 +66,7 @@ struct mtk_wdt_dev {
12 void __iomem *wdt_base;
13 spinlock_t lock; /* protects WDT_SWSYSRST reg */
14 struct reset_controller_dev rcdev;
15 + bool disable_wdt_extrst;
16 };
17
18 struct mtk_wdt_data {
19 @@ -87,6 +89,10 @@ static const struct mtk_wdt_data mt8195_
20 .toprgu_sw_rst_num = MT8195_TOPRGU_SW_RST_NUM,
21 };
22
23 +static const struct mtk_wdt_data mt7986_data = {
24 + .toprgu_sw_rst_num = MT7986_TOPRGU_SW_RST_NUM,
25 +};
26 +
27 static int toprgu_reset_update(struct reset_controller_dev *rcdev,
28 unsigned long id, bool assert)
29 {
30 @@ -256,6 +262,8 @@ static int mtk_wdt_start(struct watchdog
31 reg |= (WDT_MODE_IRQ_EN | WDT_MODE_DUAL_EN);
32 else
33 reg &= ~(WDT_MODE_IRQ_EN | WDT_MODE_DUAL_EN);
34 + if (mtk_wdt->disable_wdt_extrst)
35 + reg &= ~WDT_MODE_EXRST_EN;
36 reg |= (WDT_MODE_EN | WDT_MODE_KEY);
37 iowrite32(reg, wdt_base + WDT_MODE);
38
39 @@ -381,6 +389,10 @@ static int mtk_wdt_probe(struct platform
40 if (err)
41 return err;
42 }
43 +
44 + mtk_wdt->disable_wdt_extrst =
45 + of_property_read_bool(dev->of_node, "mediatek,disable-extrst");
46 +
47 return 0;
48 }
49
50 @@ -414,6 +426,7 @@ static const struct of_device_id mtk_wdt
51 { .compatible = "mediatek,mt8183-wdt", .data = &mt8183_data },
52 { .compatible = "mediatek,mt8192-wdt", .data = &mt8192_data },
53 { .compatible = "mediatek,mt8195-wdt", .data = &mt8195_data },
54 + { .compatible = "mediatek,mt7986-wdt", .data = &mt7986_data },
55 { /* sentinel */ }
56 };
57 MODULE_DEVICE_TABLE(of, mtk_wdt_dt_ids);