Merge https://gitlab.denx.de/u-boot/custodians/u-boot-marvell
[platform/kernel/u-boot.git] / include / sysreset.h
index 343e46f..61295e3 100644 (file)
@@ -11,6 +11,7 @@ enum sysreset_t {
        SYSRESET_WARM,  /* Reset CPU, keep GPIOs active */
        SYSRESET_COLD,  /* Reset CPU and GPIOs */
        SYSRESET_POWER, /* Reset PMIC (remove and restore power) */
+       SYSRESET_POWER_OFF,     /* Turn off power */
 
        SYSRESET_COUNT,
 };
@@ -37,6 +38,14 @@ struct sysreset_ops {
         * @return 0 if OK, -ve on error
         */
        int (*get_status)(struct udevice *dev, char *buf, int size);
+
+       /**
+        * get_last() - get information on the last reset
+        *
+        * @dev:        Device to check
+        * @return last reset state (enum sysreset_t) or -ve error
+        */
+       int (*get_last)(struct udevice *dev);
 };
 
 #define sysreset_get_ops(dev)        ((struct sysreset_ops *)(dev)->driver->ops)
@@ -60,6 +69,14 @@ int sysreset_request(struct udevice *dev, enum sysreset_t type);
 int sysreset_get_status(struct udevice *dev, char *buf, int size);
 
 /**
+ * sysreset_get_last() - get information on the last reset
+ *
+ * @dev:       Device to check
+ * @return last reset state (enum sysreset_t) or -ve error
+ */
+int sysreset_get_last(struct udevice *dev);
+
+/**
  * sysreset_walk() - cause a system reset
  *
  * This works through the available sysreset devices until it finds one that can
@@ -74,6 +91,19 @@ int sysreset_get_status(struct udevice *dev, char *buf, int size);
 int sysreset_walk(enum sysreset_t type);
 
 /**
+ * sysreset_get_last_walk() - get information on the last reset
+ *
+ * This works through the available sysreset devices until it finds one that can
+ * perform a reset. If the provided sysreset type is not available, the next one
+ * will be tried.
+ *
+ * If no device prives the information, this function returns -ENOENT
+ *
+ * @return last reset state (enum sysreset_t) or -ve error
+ */
+int sysreset_get_last_walk(void);
+
+/**
  * sysreset_walk_halt() - try to reset, otherwise halt
  *
  * This calls sysreset_walk(). If it returns, indicating that reset is not