Lines Matching +full:meson6 +full:- +full:timer
1 // SPDX-License-Identifier: GPL-2.0-or-later
67 tc_reboot |= meson_wdt->data->enable; in meson_wdt_restart()
70 writel(tc_reboot, meson_wdt->wdt_base + MESON_WDT_TC); in meson_wdt_restart()
81 writel(0, meson_wdt->wdt_base + MESON_WDT_RESET); in meson_wdt_ping()
92 reg = readl(meson_wdt->wdt_base + MESON_WDT_TC); in meson_wdt_change_timeout()
93 reg &= ~meson_wdt->data->terminal_count_mask; in meson_wdt_change_timeout()
94 reg |= MESON_SEC_TO_TC(timeout, meson_wdt->data->count_unit); in meson_wdt_change_timeout()
95 writel(reg, meson_wdt->wdt_base + MESON_WDT_TC); in meson_wdt_change_timeout()
101 wdt_dev->timeout = timeout; in meson_wdt_set_timeout()
114 reg = readl(meson_wdt->wdt_base + MESON_WDT_TC); in meson_wdt_stop()
115 reg &= ~meson_wdt->data->enable; in meson_wdt_stop()
116 writel(reg, meson_wdt->wdt_base + MESON_WDT_TC); in meson_wdt_stop()
126 meson_wdt_change_timeout(wdt_dev, meson_wdt->wdt_dev.timeout); in meson_wdt_start()
129 reg = readl(meson_wdt->wdt_base + MESON_WDT_TC); in meson_wdt_start()
130 reg |= meson_wdt->data->enable; in meson_wdt_start()
131 writel(reg, meson_wdt->wdt_base + MESON_WDT_TC); in meson_wdt_start()
153 { .compatible = "amlogic,meson6-wdt", .data = &meson6_wdt_data },
154 { .compatible = "amlogic,meson8-wdt", .data = &meson6_wdt_data },
155 { .compatible = "amlogic,meson8b-wdt", .data = &meson8b_wdt_data },
156 { .compatible = "amlogic,meson8m2-wdt", .data = &meson8b_wdt_data },
163 struct device *dev = &pdev->dev; in meson_wdt_probe()
170 return -ENOMEM; in meson_wdt_probe()
172 meson_wdt->wdt_base = devm_platform_ioremap_resource(pdev, 0); in meson_wdt_probe()
173 if (IS_ERR(meson_wdt->wdt_base)) in meson_wdt_probe()
174 return PTR_ERR(meson_wdt->wdt_base); in meson_wdt_probe()
179 return -ENODEV; in meson_wdt_probe()
181 meson_wdt->data = of_id->data; in meson_wdt_probe()
183 meson_wdt->wdt_dev.parent = dev; in meson_wdt_probe()
184 meson_wdt->wdt_dev.info = &meson_wdt_info; in meson_wdt_probe()
185 meson_wdt->wdt_dev.ops = &meson_wdt_ops; in meson_wdt_probe()
186 meson_wdt->wdt_dev.max_timeout = in meson_wdt_probe()
187 meson_wdt->data->terminal_count_mask / meson_wdt->data->count_unit; in meson_wdt_probe()
188 meson_wdt->wdt_dev.min_timeout = MESON_WDT_MIN_TIMEOUT; in meson_wdt_probe()
189 meson_wdt->wdt_dev.timeout = min_t(unsigned int, in meson_wdt_probe()
191 meson_wdt->wdt_dev.max_timeout); in meson_wdt_probe()
193 watchdog_set_drvdata(&meson_wdt->wdt_dev, meson_wdt); in meson_wdt_probe()
195 watchdog_init_timeout(&meson_wdt->wdt_dev, timeout, dev); in meson_wdt_probe()
196 watchdog_set_nowayout(&meson_wdt->wdt_dev, nowayout); in meson_wdt_probe()
197 watchdog_set_restart_priority(&meson_wdt->wdt_dev, 128); in meson_wdt_probe()
199 meson_wdt_stop(&meson_wdt->wdt_dev); in meson_wdt_probe()
201 watchdog_stop_on_reboot(&meson_wdt->wdt_dev); in meson_wdt_probe()
202 err = devm_watchdog_register_device(dev, &meson_wdt->wdt_dev); in meson_wdt_probe()
207 meson_wdt->wdt_dev.timeout, nowayout); in meson_wdt_probe()
232 MODULE_DESCRIPTION("Meson Watchdog Timer Driver");