diff options
| author | Tom Rini <[email protected]> | 2026-06-08 08:36:57 -0600 |
|---|---|---|
| committer | Tom Rini <[email protected]> | 2026-06-08 08:36:57 -0600 |
| commit | 5d4d6e331d3f056ecc7ab11b72098a3cf4fdb099 (patch) | |
| tree | bd545cc373e2646007a97ab90bdb5be52f481982 /drivers/reset/reset-uclass.c | |
| parent | 9e87893c24d1f21350e69bc222e6a3214c933b3b (diff) | |
| parent | 8efa173b389e5cef6eece991351442baea0264fd (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.c | 34 |
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); |
