Lines Matching +full:kpss +full:- +full:timer
1 // SPDX-License-Identifier: GPL-2.0-only
56 return wdt->base + wdt->layout[reg]; in wdt_addr()
77 unsigned int bark = wdd->timeout - wdd->pretimeout; in qcom_wdt_start()
81 writel(bark * wdt->rate, wdt_addr(wdt, WDT_BARK_TIME)); in qcom_wdt_start()
82 writel(wdd->timeout * wdt->rate, wdt_addr(wdt, WDT_BITE_TIME)); in qcom_wdt_start()
106 wdd->timeout = timeout; in qcom_wdt_set_timeout()
113 wdd->pretimeout = timeout; in qcom_wdt_set_pretimeout()
127 timeout = 128 * wdt->rate / 1000; in qcom_wdt_restart()
188 struct device *dev = &pdev->dev; in qcom_wdt_probe()
191 struct device_node *np = dev->of_node; in qcom_wdt_probe()
200 return -ENODEV; in qcom_wdt_probe()
205 return -ENOMEM; in qcom_wdt_probe()
209 return -ENOMEM; in qcom_wdt_probe()
212 if (of_property_read_u32(np, "cpu-offset", &percpu_offset)) in qcom_wdt_probe()
215 res->start += percpu_offset; in qcom_wdt_probe()
216 res->end += percpu_offset; in qcom_wdt_probe()
218 wdt->base = devm_ioremap_resource(dev, res); in qcom_wdt_probe()
219 if (IS_ERR(wdt->base)) in qcom_wdt_probe()
220 return PTR_ERR(wdt->base); in qcom_wdt_probe()
239 * not zero to avoid a divide-by-zero exception. in qcom_wdt_probe()
245 wdt->rate = clk_get_rate(clk); in qcom_wdt_probe()
246 if (wdt->rate == 0 || in qcom_wdt_probe()
247 wdt->rate > 0x10000000U) { in qcom_wdt_probe()
249 return -EINVAL; in qcom_wdt_probe()
254 if (data->pretimeout && irq > 0) { in qcom_wdt_probe()
256 "wdt_bark", &wdt->wdd); in qcom_wdt_probe()
260 wdt->wdd.info = &qcom_wdt_pt_info; in qcom_wdt_probe()
261 wdt->wdd.pretimeout = 1; in qcom_wdt_probe()
263 if (irq == -EPROBE_DEFER) in qcom_wdt_probe()
264 return -EPROBE_DEFER; in qcom_wdt_probe()
266 wdt->wdd.info = &qcom_wdt_info; in qcom_wdt_probe()
269 wdt->wdd.ops = &qcom_wdt_ops; in qcom_wdt_probe()
270 wdt->wdd.min_timeout = 1; in qcom_wdt_probe()
271 wdt->wdd.max_timeout = 0x10000000U / wdt->rate; in qcom_wdt_probe()
272 wdt->wdd.parent = dev; in qcom_wdt_probe()
273 wdt->layout = data->offset; in qcom_wdt_probe()
276 wdt->wdd.bootstatus = WDIOF_CARDRESET; in qcom_wdt_probe()
279 * If 'timeout-sec' unspecified in devicetree, assume a 30 second in qcom_wdt_probe()
283 wdt->wdd.timeout = min(wdt->wdd.max_timeout, 30U); in qcom_wdt_probe()
284 watchdog_init_timeout(&wdt->wdd, 0, dev); in qcom_wdt_probe()
286 ret = devm_watchdog_register_device(dev, &wdt->wdd); in qcom_wdt_probe()
298 if (watchdog_active(&wdt->wdd)) in qcom_wdt_suspend()
299 qcom_wdt_stop(&wdt->wdd); in qcom_wdt_suspend()
308 if (watchdog_active(&wdt->wdd)) in qcom_wdt_resume()
309 qcom_wdt_start(&wdt->wdd); in qcom_wdt_resume()
317 { .compatible = "qcom,kpss-timer", .data = &match_data_apcs_tmr },
318 { .compatible = "qcom,scss-timer", .data = &match_data_apcs_tmr },
319 { .compatible = "qcom,kpss-wdt", .data = &match_data_kpss },
334 MODULE_DESCRIPTION("QCOM KPSS Watchdog Driver");