summaryrefslogtreecommitdiff
path: root/drivers/reset/reset-uclass.c
diff options
context:
space:
mode:
authorTom Rini <[email protected]>2026-06-08 08:36:57 -0600
committerTom Rini <[email protected]>2026-06-08 08:36:57 -0600
commit5d4d6e331d3f056ecc7ab11b72098a3cf4fdb099 (patch)
treebd545cc373e2646007a97ab90bdb5be52f481982 /drivers/reset/reset-uclass.c
parent9e87893c24d1f21350e69bc222e6a3214c933b3b (diff)
parent8efa173b389e5cef6eece991351442baea0264fd (diff)
Merge tag 'xilinx-for-v2026.10-rc1-v2' of https://source.denx.de/u-boot/custodians/u-boot-microblaze into next
AMD/Xilinx/FPGA changes for v2026.10-rc1 v2 zynqmp: - Clean up USB gadget configuration mbv: - Reduce SPL size versal: - Add support for A/B capsule update versal2: - Add support for A/B capsule update reset: - Introduce reset_reset_bulk() generic interface - zynqmp: Implement reset_reset_bulk() interface spi: - cadence: Switch to reset_reset_bulk() interface
Diffstat (limited to 'drivers/reset/reset-uclass.c')
-rw-r--r--drivers/reset/reset-uclass.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/drivers/reset/reset-uclass.c b/drivers/reset/reset-uclass.c
index fe4cebf54f1..c199e3e5da7 100644
--- a/drivers/reset/reset-uclass.c
+++ b/drivers/reset/reset-uclass.c
@@ -13,6 +13,7 @@
#include <reset-uclass.h>
#include <dm/devres.h>
#include <dm/lists.h>
+#include <linux/delay.h>
static inline struct reset_ops *reset_dev_ops(struct udevice *dev)
{
@@ -225,6 +226,39 @@ int reset_deassert_bulk(struct reset_ctl_bulk *bulk)
return 0;
}
+int reset_reset(struct reset_ctl *reset_ctl, ulong delay_us)
+{
+ struct reset_ops *ops = reset_dev_ops(reset_ctl->dev);
+ int ret;
+
+ debug("%s(reset_ctl=%p, delay_us=%lu)\n", __func__, reset_ctl,
+ delay_us);
+
+ if (ops->rst_reset)
+ return ops->rst_reset(reset_ctl, delay_us);
+
+ ret = reset_assert(reset_ctl);
+ if (ret < 0)
+ return ret;
+
+ udelay(delay_us);
+
+ return reset_deassert(reset_ctl);
+}
+
+int reset_reset_bulk(struct reset_ctl_bulk *bulk, ulong delay_us)
+{
+ int i, ret;
+
+ for (i = 0; i < bulk->count; i++) {
+ ret = reset_reset(&bulk->resets[i], delay_us);
+ 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);