watchdog: Set/unset GD_FLG_WDT_READY flag in wdt_start()/wdt_stop()
Watchdog is ready after successful call of ops->start() callback in wdt_start() function. And is stopped after successful call of ops->stop() callback in wdt_stop function. So move setting of GD_FLG_WDT_READY flag from initr_watchdog() function to wdt_start() and ensure that GD_FLG_WDT_READY flag is unset in wdt_stop() function. This change ensures that GD_FLG_WDT_READY flag is set only when watchdog is running. And ensures that flag is also also when watchdog was started not only by initr_watchdog() call (e.g. by U-Boot 'wdt' command). Signed-off-by: Pali Rohár <pali@kernel.org> Reviewed-by: Stefan Roese <sr@denx.de>
This commit is contained in:
		
							parent
							
								
									90eba245a6
								
							
						
					
					
						commit
						9c44ff1c5f
					
				|  | @ -51,7 +51,6 @@ int initr_watchdog(void) | |||
| 	} | ||||
| 
 | ||||
| 	wdt_start(gd->watchdog_dev, timeout * 1000, 0); | ||||
| 	gd->flags |= GD_FLG_WDT_READY; | ||||
| 	printf("WDT:   Started with%s servicing (%ds timeout)\n", | ||||
| 	       IS_ENABLED(CONFIG_WATCHDOG) ? "" : "out", timeout); | ||||
| 
 | ||||
|  | @ -61,21 +60,31 @@ int initr_watchdog(void) | |||
| int wdt_start(struct udevice *dev, u64 timeout_ms, ulong flags) | ||||
| { | ||||
| 	const struct wdt_ops *ops = device_get_ops(dev); | ||||
| 	int ret; | ||||
| 
 | ||||
| 	if (!ops->start) | ||||
| 		return -ENOSYS; | ||||
| 
 | ||||
| 	return ops->start(dev, timeout_ms, flags); | ||||
| 	ret = ops->start(dev, timeout_ms, flags); | ||||
| 	if (ret == 0) | ||||
| 		gd->flags |= GD_FLG_WDT_READY; | ||||
| 
 | ||||
| 	return ret; | ||||
| } | ||||
| 
 | ||||
| int wdt_stop(struct udevice *dev) | ||||
| { | ||||
| 	const struct wdt_ops *ops = device_get_ops(dev); | ||||
| 	int ret; | ||||
| 
 | ||||
| 	if (!ops->stop) | ||||
| 		return -ENOSYS; | ||||
| 
 | ||||
| 	return ops->stop(dev); | ||||
| 	ret = ops->stop(dev); | ||||
| 	if (ret == 0) | ||||
| 		gd->flags &= ~GD_FLG_WDT_READY; | ||||
| 
 | ||||
| 	return ret; | ||||
| } | ||||
| 
 | ||||
| int wdt_reset(struct udevice *dev) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue