Lines Matching +full:cmd +full:- +full:timeout +full:- +full:ms

1 /*-
49 #define READ(_sc, _r) bus_read_4((_sc)->res, (_r))
50 #define WRITE(_sc, _r, _v) bus_write_4((_sc)->res, (_r), (_v))
117 {"allwinner,sun4i-a10-wdt", A10_WATCHDOG},
118 {"allwinner,sun6i-a31-wdt", A31_WATCHDOG},
119 {"allwinner,sun20i-d1-wdt", D1_WATCHDOG},
132 switch (ofw_bus_search_compatible(dev, compat_data)->ocd_data) {
156 sc->dev = dev;
159 sc->res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, RF_ACTIVE);
160 if (sc->res == NULL) {
167 switch (ofw_bus_search_compatible(dev, compat_data)->ocd_data) {
169 sc->wdog_ctrl = A10_WDOG_CTRL;
170 sc->wdog_mode = A10_WDOG_MODE;
171 sc->wdog_mode_key = 0;
172 sc->wdog_mode_intvl_shift = A10_WDOG_MODE_INTVL_SHIFT;
173 sc->wdog_mode_en = A10_WDOG_MODE_RST_EN | WDOG_MODE_EN;
176 sc->wdog_ctrl = A31_WDOG_CTRL;
177 sc->wdog_ctrl_key = A31_WDOG_CTRL_KEY;
178 sc->wdog_mode = A31_WDOG_MODE;
179 sc->wdog_mode_key = 0;
180 sc->wdog_mode_intvl_shift = A31_WDOG_MODE_INTVL_SHIFT;
181 sc->wdog_mode_en = WDOG_MODE_EN;
182 sc->wdog_config = A31_WDOG_CONFIG;
183 sc->wdog_config_value = A31_WDOG_CONFIG_RST_EN_SYSTEM;
186 sc->wdog_ctrl = D1_WDOG_CTRL;
187 sc->wdog_ctrl_key = D1_WDOG_CTRL_KEY;
188 sc->wdog_mode = D1_WDOG_MODE;
189 sc->wdog_mode_key = D1_WDOG_MODE_KEY;
190 sc->wdog_mode_intvl_shift = D1_WDOG_MODE_INTVL_SHIFT;
191 sc->wdog_mode_en = WDOG_MODE_EN;
192 sc->wdog_config = D1_WDOG_CONFIG;
193 sc->wdog_config_value = D1_WDOG_CONFIG_KEY | D1_WDOG_CONFIG_RST_EN_SYSTEM;
196 bus_release_resource(dev, SYS_RES_MEMORY, rid, sc->res);
200 mtx_init(&sc->mtx, "AW Watchdog", "aw_wdog", MTX_DEF);
203 SHUTDOWN_PRI_LAST - 1);
206 WRITE(sc, sc->wdog_mode, sc->wdog_mode_key);
212 aw_wdog_watchdog_fn(void *private, u_int cmd, int *error)
215 uint64_t ms;
219 mtx_lock(&sc->mtx);
221 cmd &= WD_INTERVAL;
223 if (cmd > 0) {
224 ms = ((uint64_t)1 << (cmd & WD_INTERVAL)) / 1000000;
227 (ms > wd_intervals[i].milliseconds))
230 WRITE(sc, sc->wdog_mode, sc->wdog_mode_key |
231 (wd_intervals[i].value << sc->wdog_mode_intvl_shift) |
232 sc->wdog_mode_en);
233 WRITE(sc, sc->wdog_ctrl,
234 WDOG_CTRL_RESTART | sc->wdog_ctrl_key);
235 if (sc->wdog_config)
236 WRITE(sc, sc->wdog_config,
237 sc->wdog_config_value);
245 device_printf(sc->dev,
246 "Can't arm, timeout is more than 16 sec\n");
247 mtx_unlock(&sc->mtx);
248 WRITE(sc, sc->wdog_mode, sc->wdog_mode_key);
253 WRITE(sc, sc->wdog_mode, sc->wdog_mode_key);
255 mtx_unlock(&sc->mtx);
274 WRITE(aw_wdog_sc, aw_wdog_sc->wdog_mode, aw_wdog_sc->wdog_mode_key |
275 (wd_intervals[0].value << aw_wdog_sc->wdog_mode_intvl_shift) |
276 aw_wdog_sc->wdog_mode_en);
277 if (aw_wdog_sc->wdog_config)
278 WRITE(aw_wdog_sc, aw_wdog_sc->wdog_config,
279 aw_wdog_sc->wdog_config_value);
280 WRITE(aw_wdog_sc, aw_wdog_sc->wdog_ctrl,
281 WDOG_CTRL_RESTART | aw_wdog_sc->wdog_ctrl_key);