Lines Matching refs:dev

84 static u64 get_counter_value(struct armada_37xx_watchdog *dev, int id)  in get_counter_value()  argument
92 val = readl(dev->reg + CNTR_COUNT_LOW(id)); in get_counter_value()
93 val |= ((u64)readl(dev->reg + CNTR_COUNT_HIGH(id))) << 32; in get_counter_value()
98 static void set_counter_value(struct armada_37xx_watchdog *dev, int id, u64 val) in set_counter_value() argument
100 writel(val & 0xffffffff, dev->reg + CNTR_COUNT_LOW(id)); in set_counter_value()
101 writel(val >> 32, dev->reg + CNTR_COUNT_HIGH(id)); in set_counter_value()
104 static void counter_enable(struct armada_37xx_watchdog *dev, int id) in counter_enable() argument
108 reg = readl(dev->reg + CNTR_CTRL(id)); in counter_enable()
110 writel(reg, dev->reg + CNTR_CTRL(id)); in counter_enable()
113 static void counter_disable(struct armada_37xx_watchdog *dev, int id) in counter_disable() argument
117 reg = readl(dev->reg + CNTR_CTRL(id)); in counter_disable()
119 writel(reg, dev->reg + CNTR_CTRL(id)); in counter_disable()
122 static void init_counter(struct armada_37xx_watchdog *dev, int id, u32 mode, in init_counter() argument
127 reg = readl(dev->reg + CNTR_CTRL(id)); in init_counter()
141 writel(reg, dev->reg + CNTR_CTRL(id)); in init_counter()
146 struct armada_37xx_watchdog *dev = watchdog_get_drvdata(wdt); in armada_37xx_wdt_ping() local
149 counter_disable(dev, CNTR_ID_RETRIGGER); in armada_37xx_wdt_ping()
150 counter_enable(dev, CNTR_ID_RETRIGGER); in armada_37xx_wdt_ping()
157 struct armada_37xx_watchdog *dev = watchdog_get_drvdata(wdt); in armada_37xx_wdt_get_timeleft() local
160 res = get_counter_value(dev, CNTR_ID_WDOG) * CNTR_CTRL_PRESCALE_MIN; in armada_37xx_wdt_get_timeleft()
161 do_div(res, dev->clk_rate); in armada_37xx_wdt_get_timeleft()
169 struct armada_37xx_watchdog *dev = watchdog_get_drvdata(wdt); in armada_37xx_wdt_set_timeout() local
178 dev->timeout = (u64)dev->clk_rate * timeout; in armada_37xx_wdt_set_timeout()
179 do_div(dev->timeout, CNTR_CTRL_PRESCALE_MIN); in armada_37xx_wdt_set_timeout()
181 set_counter_value(dev, CNTR_ID_WDOG, dev->timeout); in armada_37xx_wdt_set_timeout()
186 static bool armada_37xx_wdt_is_running(struct armada_37xx_watchdog *dev) in armada_37xx_wdt_is_running() argument
190 regmap_read(dev->cpu_misc, WDT_TIMER_SELECT, &reg); in armada_37xx_wdt_is_running()
194 reg = readl(dev->reg + CNTR_CTRL(CNTR_ID_WDOG)); in armada_37xx_wdt_is_running()
200 struct armada_37xx_watchdog *dev = watchdog_get_drvdata(wdt); in armada_37xx_wdt_start() local
203 regmap_write(dev->cpu_misc, WDT_TIMER_SELECT, WDT_TIMER_SELECT_VAL); in armada_37xx_wdt_start()
206 init_counter(dev, CNTR_ID_RETRIGGER, CNTR_CTRL_MODE_ONESHOT, 0); in armada_37xx_wdt_start()
207 set_counter_value(dev, CNTR_ID_RETRIGGER, 0); in armada_37xx_wdt_start()
210 init_counter(dev, CNTR_ID_WDOG, CNTR_CTRL_MODE_HWSIG, in armada_37xx_wdt_start()
212 set_counter_value(dev, CNTR_ID_WDOG, dev->timeout); in armada_37xx_wdt_start()
215 counter_enable(dev, CNTR_ID_WDOG); in armada_37xx_wdt_start()
218 counter_enable(dev, CNTR_ID_RETRIGGER); in armada_37xx_wdt_start()
225 struct armada_37xx_watchdog *dev = watchdog_get_drvdata(wdt); in armada_37xx_wdt_stop() local
227 counter_disable(dev, CNTR_ID_WDOG); in armada_37xx_wdt_stop()
228 counter_disable(dev, CNTR_ID_RETRIGGER); in armada_37xx_wdt_stop()
229 regmap_write(dev->cpu_misc, WDT_TIMER_SELECT, 0); in armada_37xx_wdt_stop()
250 struct armada_37xx_watchdog *dev; in armada_37xx_wdt_probe() local
255 dev = devm_kzalloc(&pdev->dev, sizeof(struct armada_37xx_watchdog), in armada_37xx_wdt_probe()
257 if (!dev) in armada_37xx_wdt_probe()
260 dev->wdt.info = &armada_37xx_wdt_info; in armada_37xx_wdt_probe()
261 dev->wdt.ops = &armada_37xx_wdt_ops; in armada_37xx_wdt_probe()
263 regmap = syscon_regmap_lookup_by_phandle(pdev->dev.of_node, in armada_37xx_wdt_probe()
267 dev->cpu_misc = regmap; in armada_37xx_wdt_probe()
272 dev->reg = devm_ioremap(&pdev->dev, res->start, resource_size(res)); in armada_37xx_wdt_probe()
273 if (!dev->reg) in armada_37xx_wdt_probe()
277 dev->clk = devm_clk_get_enabled(&pdev->dev, NULL); in armada_37xx_wdt_probe()
278 if (IS_ERR(dev->clk)) in armada_37xx_wdt_probe()
279 return PTR_ERR(dev->clk); in armada_37xx_wdt_probe()
281 dev->clk_rate = clk_get_rate(dev->clk); in armada_37xx_wdt_probe()
282 if (!dev->clk_rate) in armada_37xx_wdt_probe()
290 dev->wdt.min_timeout = 1; in armada_37xx_wdt_probe()
291 dev->wdt.max_timeout = UINT_MAX; in armada_37xx_wdt_probe()
292 dev->wdt.parent = &pdev->dev; in armada_37xx_wdt_probe()
295 dev->wdt.timeout = WATCHDOG_TIMEOUT; in armada_37xx_wdt_probe()
296 watchdog_init_timeout(&dev->wdt, timeout, &pdev->dev); in armada_37xx_wdt_probe()
298 platform_set_drvdata(pdev, &dev->wdt); in armada_37xx_wdt_probe()
299 watchdog_set_drvdata(&dev->wdt, dev); in armada_37xx_wdt_probe()
301 armada_37xx_wdt_set_timeout(&dev->wdt, dev->wdt.timeout); in armada_37xx_wdt_probe()
303 if (armada_37xx_wdt_is_running(dev)) in armada_37xx_wdt_probe()
304 set_bit(WDOG_HW_RUNNING, &dev->wdt.status); in armada_37xx_wdt_probe()
306 watchdog_set_nowayout(&dev->wdt, nowayout); in armada_37xx_wdt_probe()
307 watchdog_stop_on_reboot(&dev->wdt); in armada_37xx_wdt_probe()
308 ret = devm_watchdog_register_device(&pdev->dev, &dev->wdt); in armada_37xx_wdt_probe()
312 dev_info(&pdev->dev, "Initial timeout %d sec%s\n", in armada_37xx_wdt_probe()
313 dev->wdt.timeout, nowayout ? ", nowayout" : ""); in armada_37xx_wdt_probe()
318 static int __maybe_unused armada_37xx_wdt_suspend(struct device *dev) in armada_37xx_wdt_suspend() argument
320 struct watchdog_device *wdt = dev_get_drvdata(dev); in armada_37xx_wdt_suspend()
325 static int __maybe_unused armada_37xx_wdt_resume(struct device *dev) in armada_37xx_wdt_resume() argument
327 struct watchdog_device *wdt = dev_get_drvdata(dev); in armada_37xx_wdt_resume()