Lines Matching +full:disable +full:- +full:extrst

1 // SPDX-License-Identifier: GPL-2.0+
12 #include <dt-bindings/reset/mt2712-resets.h>
13 #include <dt-bindings/reset/mediatek,mt6735-wdt.h>
14 #include <dt-bindings/reset/mediatek,mt6795-resets.h>
15 #include <dt-bindings/reset/mt7986-resets.h>
16 #include <dt-bindings/reset/mt8183-resets.h>
17 #include <dt-bindings/reset/mt8186-resets.h>
18 #include <dt-bindings/reset/mt8188-resets.h>
19 #include <dt-bindings/reset/mt8192-resets.h>
20 #include <dt-bindings/reset/mt8195-resets.h>
30 #include <linux/reset-controller.h>
62 #define DRV_NAME "mtk-wdt"
125 spin_lock_irqsave(&data->lock, flags); in toprgu_reset_update()
127 tmp = readl(data->wdt_base + WDT_SWSYSRST); in toprgu_reset_update()
133 writel(tmp, data->wdt_base + WDT_SWSYSRST); in toprgu_reset_update()
135 spin_unlock_irqrestore(&data->lock, flags); in toprgu_reset_update()
176 spin_lock_init(&mtk_wdt->lock); in toprgu_register_reset_controller()
178 mtk_wdt->rcdev.owner = THIS_MODULE; in toprgu_register_reset_controller()
179 mtk_wdt->rcdev.nr_resets = rst_num; in toprgu_register_reset_controller()
180 mtk_wdt->rcdev.ops = &toprgu_reset_ops; in toprgu_register_reset_controller()
181 mtk_wdt->rcdev.of_node = pdev->dev.of_node; in toprgu_register_reset_controller()
182 ret = devm_reset_controller_register(&pdev->dev, &mtk_wdt->rcdev); in toprgu_register_reset_controller()
184 dev_err(&pdev->dev, in toprgu_register_reset_controller()
196 wdt_base = mtk_wdt->wdt_base; in mtk_wdt_restart()
214 void __iomem *wdt_base = mtk_wdt->wdt_base; in mtk_wdt_ping()
225 void __iomem *wdt_base = mtk_wdt->wdt_base; in mtk_wdt_set_timeout()
228 wdt_dev->timeout = timeout; in mtk_wdt_set_timeout()
233 if (wdt_dev->pretimeout) in mtk_wdt_set_timeout()
234 wdt_dev->pretimeout = timeout / 2; in mtk_wdt_set_timeout()
240 reg = WDT_LENGTH_TIMEOUT((timeout - wdt_dev->pretimeout) << 6) in mtk_wdt_set_timeout()
254 wdt_base = mtk_wdt->wdt_base; in mtk_wdt_init()
257 set_bit(WDOG_HW_RUNNING, &wdt_dev->status); in mtk_wdt_init()
258 mtk_wdt_set_timeout(wdt_dev, wdt_dev->timeout); in mtk_wdt_init()
265 void __iomem *wdt_base = mtk_wdt->wdt_base; in mtk_wdt_stop()
280 void __iomem *wdt_base = mtk_wdt->wdt_base; in mtk_wdt_start()
283 ret = mtk_wdt_set_timeout(wdt_dev, wdt_dev->timeout); in mtk_wdt_start()
288 if (wdt_dev->pretimeout) in mtk_wdt_start()
292 if (mtk_wdt->disable_wdt_extrst) in mtk_wdt_start()
294 if (mtk_wdt->reset_by_toprgu) in mtk_wdt_start()
306 void __iomem *wdt_base = mtk_wdt->wdt_base; in mtk_wdt_set_pretimeout()
309 if (timeout && !wdd->pretimeout) { in mtk_wdt_set_pretimeout()
310 wdd->pretimeout = wdd->timeout / 2; in mtk_wdt_set_pretimeout()
312 } else if (!timeout && wdd->pretimeout) { in mtk_wdt_set_pretimeout()
313 wdd->pretimeout = 0; in mtk_wdt_set_pretimeout()
322 return mtk_wdt_set_timeout(wdd, wdd->timeout); in mtk_wdt_set_pretimeout()
361 struct device *dev = &pdev->dev; in mtk_wdt_probe()
368 return -ENOMEM; in mtk_wdt_probe()
372 mtk_wdt->wdt_base = devm_platform_ioremap_resource(pdev, 0); in mtk_wdt_probe()
373 if (IS_ERR(mtk_wdt->wdt_base)) in mtk_wdt_probe()
374 return PTR_ERR(mtk_wdt->wdt_base); in mtk_wdt_probe()
378 err = devm_request_irq(&pdev->dev, irq, mtk_wdt_isr, 0, "wdt_bark", in mtk_wdt_probe()
379 &mtk_wdt->wdt_dev); in mtk_wdt_probe()
383 mtk_wdt->wdt_dev.info = &mtk_wdt_pt_info; in mtk_wdt_probe()
384 mtk_wdt->wdt_dev.pretimeout = WDT_MAX_TIMEOUT / 2; in mtk_wdt_probe()
386 if (irq == -EPROBE_DEFER) in mtk_wdt_probe()
387 return -EPROBE_DEFER; in mtk_wdt_probe()
389 mtk_wdt->wdt_dev.info = &mtk_wdt_info; in mtk_wdt_probe()
392 mtk_wdt->wdt_dev.ops = &mtk_wdt_ops; in mtk_wdt_probe()
393 mtk_wdt->wdt_dev.timeout = WDT_MAX_TIMEOUT; in mtk_wdt_probe()
394 mtk_wdt->wdt_dev.max_hw_heartbeat_ms = WDT_MAX_TIMEOUT * 1000; in mtk_wdt_probe()
395 mtk_wdt->wdt_dev.min_timeout = WDT_MIN_TIMEOUT; in mtk_wdt_probe()
396 mtk_wdt->wdt_dev.parent = dev; in mtk_wdt_probe()
398 watchdog_init_timeout(&mtk_wdt->wdt_dev, timeout, dev); in mtk_wdt_probe()
399 watchdog_set_nowayout(&mtk_wdt->wdt_dev, nowayout); in mtk_wdt_probe()
400 watchdog_set_restart_priority(&mtk_wdt->wdt_dev, 128); in mtk_wdt_probe()
402 watchdog_set_drvdata(&mtk_wdt->wdt_dev, mtk_wdt); in mtk_wdt_probe()
404 mtk_wdt_init(&mtk_wdt->wdt_dev); in mtk_wdt_probe()
406 watchdog_stop_on_reboot(&mtk_wdt->wdt_dev); in mtk_wdt_probe()
407 err = devm_watchdog_register_device(dev, &mtk_wdt->wdt_dev); in mtk_wdt_probe()
412 mtk_wdt->wdt_dev.timeout, nowayout); in mtk_wdt_probe()
417 wdt_data->toprgu_sw_rst_num); in mtk_wdt_probe()
422 mtk_wdt->disable_wdt_extrst = in mtk_wdt_probe()
423 of_property_read_bool(dev->of_node, "mediatek,disable-extrst"); in mtk_wdt_probe()
425 mtk_wdt->reset_by_toprgu = in mtk_wdt_probe()
426 of_property_read_bool(dev->of_node, "mediatek,reset-by-toprgu"); in mtk_wdt_probe()
435 if (watchdog_active(&mtk_wdt->wdt_dev)) in mtk_wdt_suspend()
436 mtk_wdt_stop(&mtk_wdt->wdt_dev); in mtk_wdt_suspend()
445 if (watchdog_active(&mtk_wdt->wdt_dev)) { in mtk_wdt_resume()
446 mtk_wdt_start(&mtk_wdt->wdt_dev); in mtk_wdt_resume()
447 mtk_wdt_ping(&mtk_wdt->wdt_dev); in mtk_wdt_resume()
454 { .compatible = "mediatek,mt2712-wdt", .data = &mt2712_data },
455 { .compatible = "mediatek,mt6589-wdt" },
456 { .compatible = "mediatek,mt6735-wdt", .data = &mt6735_data },
457 { .compatible = "mediatek,mt6795-wdt", .data = &mt6795_data },
458 { .compatible = "mediatek,mt7986-wdt", .data = &mt7986_data },
459 { .compatible = "mediatek,mt8183-wdt", .data = &mt8183_data },
460 { .compatible = "mediatek,mt8186-wdt", .data = &mt8186_data },
461 { .compatible = "mediatek,mt8188-wdt", .data = &mt8188_data },
462 { .compatible = "mediatek,mt8192-wdt", .data = &mt8192_data },
463 { .compatible = "mediatek,mt8195-wdt", .data = &mt8195_data },