Lines Matching defs:gwdt

54 #define DRV_NAME		"sbsa-gwdt"
134 static u64 sbsa_gwdt_reg_read(struct sbsa_gwdt *gwdt)
136 if (gwdt->version == 0)
137 return readl(gwdt->control_base + SBSA_GWDT_WOR);
139 return lo_hi_readq(gwdt->control_base + SBSA_GWDT_WOR);
142 static void sbsa_gwdt_reg_write(u64 val, struct sbsa_gwdt *gwdt)
144 if (gwdt->version == 0)
145 writel((u32)val, gwdt->control_base + SBSA_GWDT_WOR);
147 lo_hi_writeq(val, gwdt->control_base + SBSA_GWDT_WOR);
156 struct sbsa_gwdt *gwdt = watchdog_get_drvdata(wdd);
162 sbsa_gwdt_reg_write((u64)gwdt->clk * timeout, gwdt);
169 sbsa_gwdt_reg_write(((u64)gwdt->clk / 2) * timeout, gwdt);
193 if (gwdt->need_ws0_race_workaround)
201 struct sbsa_gwdt *gwdt = watchdog_get_drvdata(wdd);
210 !(readl(gwdt->control_base + SBSA_GWDT_WCS) & SBSA_GWDT_WCS_WS0))
211 timeleft += sbsa_gwdt_reg_read(gwdt);
213 timeleft += lo_hi_readq(gwdt->control_base + SBSA_GWDT_WCV) -
216 do_div(timeleft, gwdt->clk);
223 struct sbsa_gwdt *gwdt = watchdog_get_drvdata(wdd);
229 writel(0, gwdt->refresh_base + SBSA_GWDT_WRR);
236 struct sbsa_gwdt *gwdt = watchdog_get_drvdata(wdd);
239 iidr = readl(gwdt->control_base + SBSA_GWDT_W_IIDR);
243 gwdt->version = ver;
244 gwdt->need_ws0_race_workaround =
250 struct sbsa_gwdt *gwdt = watchdog_get_drvdata(wdd);
253 writel(SBSA_GWDT_WCS_EN, gwdt->control_base + SBSA_GWDT_WCS);
260 struct sbsa_gwdt *gwdt = watchdog_get_drvdata(wdd);
263 writel(0, gwdt->control_base + SBSA_GWDT_WCS);
297 struct sbsa_gwdt *gwdt;
301 gwdt = devm_kzalloc(dev, sizeof(*gwdt), GFP_KERNEL);
302 if (!gwdt)
304 platform_set_drvdata(pdev, gwdt);
319 gwdt->clk = arch_timer_get_cntfrq();
320 gwdt->refresh_base = rf_base;
321 gwdt->control_base = cf_base;
323 wdd = &gwdt->wdd;
329 watchdog_set_drvdata(wdd, gwdt);
332 if (gwdt->version == 0)
333 wdd->max_hw_heartbeat_ms = U32_MAX / gwdt->clk * 1000;
335 wdd->max_hw_heartbeat_ms = GENMASK_ULL(47, 0) / gwdt->clk * 1000;
337 if (gwdt->need_ws0_race_workaround) {
366 pdev->name, gwdt)) {
396 wdd->timeout, gwdt->clk, action,
405 struct sbsa_gwdt *gwdt = dev_get_drvdata(dev);
407 if (watchdog_hw_running(&gwdt->wdd))
408 sbsa_gwdt_stop(&gwdt->wdd);
416 struct sbsa_gwdt *gwdt = dev_get_drvdata(dev);
418 if (watchdog_hw_running(&gwdt->wdd))
419 sbsa_gwdt_start(&gwdt->wdd);
429 { .compatible = "arm,sbsa-gwdt", },