Lines Matching refs:wdt
115 static void atmel_wdt_write_sleep(struct atmel_wdt *wdt, uint32_t reg, in atmel_wdt_write_sleep() argument
120 io_write32(wdt->base + reg, val); in atmel_wdt_write_sleep()
126 struct atmel_wdt *wdt = container_of(chip, struct atmel_wdt, chip); in atmel_wdt_settimeout() local
128 if (wdt->type == WDT_TYPE_WDT) { in atmel_wdt_settimeout()
129 wdt->mr &= ~WDT_MR_WDV; in atmel_wdt_settimeout()
130 wdt->mr |= WDT_MR_WDV_SET(SEC_TO_WDT(timeout)); in atmel_wdt_settimeout()
133 if (WDT_ENABLED(wdt->mr, wdt->dis_mask)) in atmel_wdt_settimeout()
134 atmel_wdt_write_sleep(wdt, WDT_MR, wdt->mr); in atmel_wdt_settimeout()
136 io_write32(wdt->base + WDT_WL, in atmel_wdt_settimeout()
145 struct atmel_wdt *wdt = container_of(chip, struct atmel_wdt, chip); in atmel_wdt_ping() local
147 atmel_wdt_write_sleep(wdt, WDT_CR, WDT_CR_KEY | WDT_CR_WDRSTT); in atmel_wdt_ping()
150 static void atmel_wdt_start(struct atmel_wdt *wdt) in atmel_wdt_start() argument
152 wdt->mr &= ~wdt->dis_mask; in atmel_wdt_start()
153 atmel_wdt_write_sleep(wdt, WDT_MR, wdt->mr); in atmel_wdt_start()
158 struct atmel_wdt *wdt = container_of(chip, struct atmel_wdt, chip); in atmel_wdt_enable() local
160 wdt->enabled = true; in atmel_wdt_enable()
161 atmel_wdt_start(wdt); in atmel_wdt_enable()
164 static void atmel_wdt_stop(struct atmel_wdt *wdt) in atmel_wdt_stop() argument
166 wdt->mr |= wdt->dis_mask; in atmel_wdt_stop()
167 atmel_wdt_write_sleep(wdt, WDT_MR, wdt->mr); in atmel_wdt_stop()
172 struct atmel_wdt *wdt = container_of(chip, struct atmel_wdt, chip); in atmel_wdt_disable() local
174 wdt->enabled = false; in atmel_wdt_disable()
175 atmel_wdt_stop(wdt); in atmel_wdt_disable()
180 struct atmel_wdt *wdt = h->data; in atmel_wdt_itr_cb() local
183 if (wdt->type == WDT_TYPE_WDT) { in atmel_wdt_itr_cb()
184 sr = io_read32(wdt->base + WDT_SR); in atmel_wdt_itr_cb()
190 } else if (wdt->type == WDT_TYPE_DWDT) { in atmel_wdt_itr_cb()
191 sr = io_read32(wdt->base + WDT_ISR); in atmel_wdt_itr_cb()
228 static void atmel_wdt_init_hw(struct atmel_wdt *wdt) in atmel_wdt_init_hw() argument
237 if (!WDT_ENABLED(wdt->mr, wdt->dis_mask)) { in atmel_wdt_init_hw()
238 mr = io_read32(wdt->base + WDT_MR); in atmel_wdt_init_hw()
239 if (WDT_ENABLED(mr, wdt->dis_mask)) in atmel_wdt_init_hw()
240 io_write32(wdt->base + WDT_MR, mr | wdt->dis_mask); in atmel_wdt_init_hw()
243 if (wdt->type == WDT_TYPE_WDT) { in atmel_wdt_init_hw()
245 wdt->mr |= WDT_MR_WDFIEN | WDT_MR_WDDBGHLT | WDT_MR_WDIDLEHLT; in atmel_wdt_init_hw()
247 wdt->mr |= WDT_MR_WDRSTEN; in atmel_wdt_init_hw()
248 wdt->mr |= WDT_MR_WDD_SET(SEC_TO_WDT(WDT_MAX_TIMEOUT)); in atmel_wdt_init_hw()
249 wdt->mr |= WDT_MR_WDV_SET(SEC_TO_WDT(WDT_DEFAULT_TIMEOUT)); in atmel_wdt_init_hw()
250 } else if (wdt->type == WDT_TYPE_DWDT) { in atmel_wdt_init_hw()
252 io_write32(wdt->base + WDT_ISR, WDT_PERINT); in atmel_wdt_init_hw()
254 wdt->mr |= WDT_MR_WDDBGHLT | WDT_MR_WDIDLEHLT; in atmel_wdt_init_hw()
256 wdt->mr |= WDT_MR_PERIODRST; in atmel_wdt_init_hw()
257 io_write32(wdt->base + WDT_WL, in atmel_wdt_init_hw()
268 if (WDT_ENABLED(wdt->mr, wdt->dis_mask)) in atmel_wdt_init_hw()
269 io_write32(wdt->base + WDT_MR, wdt->mr); in atmel_wdt_init_hw()
276 struct atmel_wdt *wdt = hdl->handle; in atmel_wdt_pm() local
280 atmel_wdt_init_hw(wdt); in atmel_wdt_pm()
281 if (wdt->enabled) in atmel_wdt_pm()
282 atmel_wdt_start(wdt); in atmel_wdt_pm()
285 if (wdt->enabled) in atmel_wdt_pm()
286 atmel_wdt_stop(wdt); in atmel_wdt_pm()
295 static void atmel_wdt_register_pm(struct atmel_wdt *wdt) in atmel_wdt_register_pm() argument
297 register_pm_driver_cb(atmel_wdt_pm, wdt, "atmel_wdt"); in atmel_wdt_register_pm()
300 static void atmel_wdt_register_pm(struct atmel_wdt *wdt __unused) in atmel_wdt_register_pm()
310 struct atmel_wdt *wdt; in wdt_node_probe() local
323 wdt = calloc(1, sizeof(*wdt)); in wdt_node_probe()
324 if (!wdt) in wdt_node_probe()
327 wdt->chip.ops = &atmel_wdt_ops; in wdt_node_probe()
328 wdt->type = compat->type; in wdt_node_probe()
329 wdt->dis_mask = compat->dis_mask; in wdt_node_probe()
336 it, atmel_wdt_itr_cb, 0, wdt, in wdt_node_probe()
341 if (dt_map_dev(fdt, node, &wdt->base, &size, DT_MAP_AUTO) < 0) in wdt_node_probe()
345 wdt->mr = io_read32(wdt->base + WDT_MR) & wdt->dis_mask; in wdt_node_probe()
347 atmel_wdt_init_hw(wdt); in wdt_node_probe()
350 res = watchdog_register(&wdt->chip); in wdt_node_probe()
354 atmel_wdt_register_pm(wdt); in wdt_node_probe()
360 core_mmu_remove_mapping(MEM_AREA_IO_SEC, (void *)wdt->base, size); in wdt_node_probe()
364 free(wdt); in wdt_node_probe()