doc: board: Add Intel Cherry Hill board doc
[oweals/u-boot.git] / include / wdt.h
index e9a7c5355a64e0fea55cdecfffb895d5a5615d6d..aa77d3e9b40368af889b67e81fa411d9c66d42e4 100644 (file)
@@ -6,6 +6,9 @@
 #ifndef _WDT_H_
 #define _WDT_H_
 
+#include <dm.h>
+#include <dm/read.h>
+
 /*
  * Implement a simple watchdog uclass. Watchdog is basically a timer that
  * is used to detect or recover from malfunction. During normal operation
@@ -103,4 +106,42 @@ struct wdt_ops {
        int (*expire_now)(struct udevice *dev, ulong flags);
 };
 
+#if defined(CONFIG_WDT)
+#ifndef CONFIG_WATCHDOG_TIMEOUT_MSECS
+#define CONFIG_WATCHDOG_TIMEOUT_MSECS  (60 * 1000)
+#endif
+#define WATCHDOG_TIMEOUT_SECS  (CONFIG_WATCHDOG_TIMEOUT_MSECS / 1000)
+
+static inline int initr_watchdog(void)
+{
+       u32 timeout = WATCHDOG_TIMEOUT_SECS;
+
+       /*
+        * Init watchdog: This will call the probe function of the
+        * watchdog driver, enabling the use of the device
+        */
+       if (uclass_get_device_by_seq(UCLASS_WDT, 0,
+                                    (struct udevice **)&gd->watchdog_dev)) {
+               debug("WDT:   Not found by seq!\n");
+               if (uclass_get_device(UCLASS_WDT, 0,
+                                     (struct udevice **)&gd->watchdog_dev)) {
+                       printf("WDT:   Not found!\n");
+                       return 0;
+               }
+       }
+
+       if (CONFIG_IS_ENABLED(OF_CONTROL)) {
+               timeout = dev_read_u32_default(gd->watchdog_dev, "timeout-sec",
+                                              WATCHDOG_TIMEOUT_SECS);
+       }
+
+       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);
+
+       return 0;
+}
+#endif
+
 #endif  /* _WDT_H_ */