[PATCH 1/4] reset: Add reset_reset() and reset_reset_bulk() API
Michal Simek
michal.simek at amd.com
Thu Apr 30 14:20:01 CEST 2026
Add reset_reset() and reset_reset_bulk() functions to the reset
controller API. These functions assert and then deassert reset signals
in a single call, providing a convenient way to pulse/toggle a reset
line.
This mirrors the Linux kernel's reset_control_reset() and
reset_control_bulk_reset() APIs. The new functions are useful for
drivers that need to cycle a reset line during initialization or
error recovery.
Signed-off-by: Michal Simek <michal.simek at amd.com>
---
drivers/reset/reset-uclass.c | 30 ++++++++++++++++++++++++++++++
include/reset-uclass.h | 11 +++++++++++
include/reset.h | 35 +++++++++++++++++++++++++++++++++++
3 files changed, 76 insertions(+)
diff --git a/drivers/reset/reset-uclass.c b/drivers/reset/reset-uclass.c
index fe4cebf54f15..b26712abc366 100644
--- a/drivers/reset/reset-uclass.c
+++ b/drivers/reset/reset-uclass.c
@@ -225,6 +225,36 @@ int reset_deassert_bulk(struct reset_ctl_bulk *bulk)
return 0;
}
+int reset_reset(struct reset_ctl *reset_ctl)
+{
+ struct reset_ops *ops = reset_dev_ops(reset_ctl->dev);
+ int ret;
+
+ debug("%s(reset_ctl=%p)\n", __func__, reset_ctl);
+
+ if (ops->rst_reset)
+ return ops->rst_reset(reset_ctl);
+
+ ret = reset_assert(reset_ctl);
+ if (ret < 0)
+ return ret;
+
+ return reset_deassert(reset_ctl);
+}
+
+int reset_reset_bulk(struct reset_ctl_bulk *bulk)
+{
+ int i, ret;
+
+ for (i = 0; i < bulk->count; i++) {
+ ret = reset_reset(&bulk->resets[i]);
+ if (ret < 0)
+ return ret;
+ }
+
+ return 0;
+}
+
int reset_status(struct reset_ctl *reset_ctl)
{
struct reset_ops *ops = reset_dev_ops(reset_ctl->dev);
diff --git a/include/reset-uclass.h b/include/reset-uclass.h
index 9a0696dd1e3b..3ff665c947ea 100644
--- a/include/reset-uclass.h
+++ b/include/reset-uclass.h
@@ -76,6 +76,17 @@ struct reset_ops {
* @return 0 if OK, or a negative error code.
*/
int (*rst_deassert)(struct reset_ctl *reset_ctl);
+ /**
+ * rst_reset - Reset a HW module.
+ *
+ * This optional function triggers a reset pulse on the reset line,
+ * asserting and then deasserting the reset signal. If not implemented,
+ * the reset core will use rst_assert followed by rst_deassert.
+ *
+ * @reset_ctl: The reset signal to pulse.
+ * @return 0 if OK, or a negative error code.
+ */
+ int (*rst_reset)(struct reset_ctl *reset_ctl);
/**
* rst_status - Check reset signal status.
*
diff --git a/include/reset.h b/include/reset.h
index 036a786d2ace..cd10596825a3 100644
--- a/include/reset.h
+++ b/include/reset.h
@@ -320,6 +320,31 @@ int reset_deassert(struct reset_ctl *reset_ctl);
*/
int reset_deassert_bulk(struct reset_ctl_bulk *bulk);
+/**
+ * reset_reset - Reset a HW module by asserting and deasserting a reset signal.
+ *
+ * This function will assert and then deassert the specified reset signal,
+ * thus resetting the affected HW module. This is a convenience function
+ * that combines reset_assert() and reset_deassert().
+ *
+ * @reset_ctl: A reset control struct that was previously successfully
+ * requested by reset_get_by_*().
+ * Return: 0 if OK, or a negative error code.
+ */
+int reset_reset(struct reset_ctl *reset_ctl);
+
+/**
+ * reset_reset_bulk - Reset all HW modules in a reset control bulk struct.
+ *
+ * This function will assert and then deassert all reset signals in the
+ * specified reset control bulk struct, thus resetting all affected HW modules.
+ *
+ * @bulk: A reset control bulk struct that was previously successfully
+ * requested by reset_get_bulk().
+ * Return: 0 if OK, or a negative error code.
+ */
+int reset_reset_bulk(struct reset_ctl_bulk *bulk);
+
/**
* rst_status - Check reset signal status.
*
@@ -443,6 +468,16 @@ static inline int reset_deassert_bulk(struct reset_ctl_bulk *bulk)
return 0;
}
+static inline int reset_reset(struct reset_ctl *reset_ctl)
+{
+ return 0;
+}
+
+static inline int reset_reset_bulk(struct reset_ctl_bulk *bulk)
+{
+ return 0;
+}
+
static inline int reset_status(struct reset_ctl *reset_ctl)
{
return -ENOTSUPP;
--
2.43.0
More information about the U-Boot
mailing list