]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
reset: zynqmp: Implement rst_reset using PM_RESET_ACTION_PULSE
authorMichal Simek <michal.simek@amd.com>
Mon, 25 May 2026 11:45:46 +0000 (13:45 +0200)
committerMichal Simek <michal.simek@amd.com>
Mon, 8 Jun 2026 08:50:06 +0000 (10:50 +0200)
Implement the rst_reset operation in the ZynqMP reset driver to use
PM_RESET_ACTION_PULSE. This allows the reset controller to perform
a reset pulse in a single firmware call instead of separate assert
and deassert calls.

This matches the Linux kernel implementation of zynqmp_reset_reset().

Reviewed-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Michal Simek <michal.simek@amd.com>
Link: https://lore.kernel.org/r/be77d6f1b60f591ef626c14229d85c5cab867967.1779709539.git.michal.simek@amd.com
drivers/reset/reset-zynqmp.c

index d04e8eef3bb4983b2ba178d3c7f94bb0a34dda41..2b58f3a75b422436bc432149628628ce7ae52c6b 100644 (file)
@@ -45,6 +45,16 @@ static int zynqmp_reset_deassert(struct reset_ctl *rst)
                                      PM_RESET_ACTION_RELEASE);
 }
 
+static int zynqmp_reset_reset(struct reset_ctl *rst, ulong delay_us)
+{
+       struct zynqmp_reset_priv *priv = dev_get_priv(rst->dev);
+
+       dev_dbg(rst->dev, "%s(rst=%p) (id=%lu)\n", __func__, rst, rst->id);
+
+       return zynqmp_pm_reset_assert(priv->reset_id + rst->id,
+                                     PM_RESET_ACTION_PULSE);
+}
+
 static int zynqmp_reset_request(struct reset_ctl *rst)
 {
        struct zynqmp_reset_priv *priv = dev_get_priv(rst->dev);
@@ -74,6 +84,7 @@ const struct reset_ops zynqmp_reset_ops = {
        .request = zynqmp_reset_request,
        .rst_assert = zynqmp_reset_assert,
        .rst_deassert = zynqmp_reset_deassert,
+       .rst_reset = zynqmp_reset_reset,
 };
 
 static const struct udevice_id zynqmp_reset_ids[] = {