Lines Matching full:wdt

45 static inline bool pic32_wdt_is_win_enabled(struct pic32_wdt *wdt)  in pic32_wdt_is_win_enabled()  argument
47 return !!(readl(wdt->regs + WDTCON_REG) & WDTCON_WIN_EN); in pic32_wdt_is_win_enabled()
50 static inline u32 pic32_wdt_get_post_scaler(struct pic32_wdt *wdt) in pic32_wdt_get_post_scaler() argument
52 u32 v = readl(wdt->regs + WDTCON_REG); in pic32_wdt_get_post_scaler()
57 static inline u32 pic32_wdt_get_clk_id(struct pic32_wdt *wdt) in pic32_wdt_get_clk_id() argument
59 u32 v = readl(wdt->regs + WDTCON_REG); in pic32_wdt_get_clk_id()
64 static int pic32_wdt_bootstatus(struct pic32_wdt *wdt) in pic32_wdt_bootstatus() argument
66 u32 v = readl(wdt->rst_base); in pic32_wdt_bootstatus()
68 writel(RESETCON_WDT_TIMEOUT, PIC32_CLR(wdt->rst_base)); in pic32_wdt_bootstatus()
73 static u32 pic32_wdt_get_timeout_secs(struct pic32_wdt *wdt, struct device *dev) in pic32_wdt_get_timeout_secs() argument
78 rate = clk_get_rate(wdt->clk); in pic32_wdt_get_timeout_secs()
80 dev_dbg(dev, "wdt: clk_id %d, clk_rate %lu (prescale)\n", in pic32_wdt_get_timeout_secs()
81 pic32_wdt_get_clk_id(wdt), rate); in pic32_wdt_get_timeout_secs()
89 ps = pic32_wdt_get_post_scaler(wdt); in pic32_wdt_get_timeout_secs()
95 "wdt: clk_rate %lu (postscale) / terminal %d, timeout %dsec\n", in pic32_wdt_get_timeout_secs()
101 static void pic32_wdt_keepalive(struct pic32_wdt *wdt) in pic32_wdt_keepalive() argument
104 writew(WDTCON_CLR_KEY, wdt->regs + WDTCON_REG + 2); in pic32_wdt_keepalive()
109 struct pic32_wdt *wdt = watchdog_get_drvdata(wdd); in pic32_wdt_start() local
111 writel(WDTCON_ON, PIC32_SET(wdt->regs + WDTCON_REG)); in pic32_wdt_start()
112 pic32_wdt_keepalive(wdt); in pic32_wdt_start()
119 struct pic32_wdt *wdt = watchdog_get_drvdata(wdd); in pic32_wdt_stop() local
121 writel(WDTCON_ON, PIC32_CLR(wdt->regs + WDTCON_REG)); in pic32_wdt_stop()
134 struct pic32_wdt *wdt = watchdog_get_drvdata(wdd); in pic32_wdt_ping() local
136 pic32_wdt_keepalive(wdt); in pic32_wdt_ping()
160 { .compatible = "microchip,pic32mzda-wdt", },
175 struct pic32_wdt *wdt; in pic32_wdt_drv_probe() local
177 wdt = devm_kzalloc(dev, sizeof(*wdt), GFP_KERNEL); in pic32_wdt_drv_probe()
178 if (!wdt) in pic32_wdt_drv_probe()
181 wdt->regs = devm_platform_ioremap_resource(pdev, 0); in pic32_wdt_drv_probe()
182 if (IS_ERR(wdt->regs)) in pic32_wdt_drv_probe()
183 return PTR_ERR(wdt->regs); in pic32_wdt_drv_probe()
185 wdt->rst_base = devm_ioremap(dev, PIC32_BASE_RESET, 0x10); in pic32_wdt_drv_probe()
186 if (!wdt->rst_base) in pic32_wdt_drv_probe()
189 wdt->clk = devm_clk_get(dev, NULL); in pic32_wdt_drv_probe()
190 if (IS_ERR(wdt->clk)) { in pic32_wdt_drv_probe()
192 return PTR_ERR(wdt->clk); in pic32_wdt_drv_probe()
195 ret = clk_prepare_enable(wdt->clk); in pic32_wdt_drv_probe()
201 wdt->clk); in pic32_wdt_drv_probe()
205 if (pic32_wdt_is_win_enabled(wdt)) { in pic32_wdt_drv_probe()
210 wdd->timeout = pic32_wdt_get_timeout_secs(wdt, dev); in pic32_wdt_drv_probe()
218 wdd->bootstatus = pic32_wdt_bootstatus(wdt) ? WDIOF_CARDRESET : 0; in pic32_wdt_drv_probe()
221 watchdog_set_drvdata(wdd, wdt); in pic32_wdt_drv_probe()
235 .name = "pic32-wdt",