Thread (11 messages) 11 messages, 3 authors, 27d ago

Re: [PATCH 2/3] usb: dwc3: xilinx: use reset_control_reset() in versal init

From: Pandey, Radhey Shyam <hidden>
Date: 2026-05-18 14:29:17
Also in: linux-usb, lkml

On 5/14/2026 7:04 AM, Thinh Nguyen wrote:
On Mon, May 11, 2026, Radhey Shyam Pandey wrote:
quoted
Replace separate reset_control_assert() and reset_control_deassert() calls
with reset_control_reset(), which pulses the reset in one step. Report
failures with dev_err_probe() and a single message. No functional change.
The behavior of reset_control_reset() is a little different. I wouldn't
call this "No functional change". However, I assumed this was tested.
Please provide a proper reason for this change in the change log.
In the dwc3-xilinx case, reset_control_reset() routes through the
zynqmp reset driver and invokes PM_RESET_ACTION_PULSE. This triggers
the Xilinx firmware reset implementation, which performs both assert
and deassert. Effectively, reset() issues a single SMC call for a
reset pulse instead of separate assert and deassert calls and moves
IP out of reset.

Yes this new reset sequence is validated on HW. I will include
above description and respin v2..
quoted
Signed-off-by: Radhey Shyam Pandey <radhey.shyam.pandey@amd.com>
---
  drivers/usb/dwc3/dwc3-xilinx.c | 16 ++++------------
  1 file changed, 4 insertions(+), 12 deletions(-)
diff --git a/drivers/usb/dwc3/dwc3-xilinx.c b/drivers/usb/dwc3/dwc3-xilinx.c
index a3c7dc258c7d..94458b3da1a0 100644
--- a/drivers/usb/dwc3/dwc3-xilinx.c
+++ b/drivers/usb/dwc3/dwc3-xilinx.c
@@ -98,18 +98,10 @@ static int dwc3_xlnx_init_versal(struct dwc3_xlnx *priv_data)
  
  	dwc3_xlnx_mask_phy_rst(priv_data, false);
  
-	/* Assert and De-assert reset */
-	ret = reset_control_assert(crst);
-	if (ret < 0) {
-		dev_err_probe(dev, ret, "failed to assert Reset\n");
-		return ret;
-	}
-
-	ret = reset_control_deassert(crst);
-	if (ret < 0) {
-		dev_err_probe(dev, ret, "failed to De-assert Reset\n");
-		return ret;
-	}
+	/* assert and deassert reset */
+	ret = reset_control_reset(crst);
+	if (ret)
+		return dev_err_probe(dev, ret, "failed to assert and deassert reset\n");
  
  	dwc3_xlnx_mask_phy_rst(priv_data, true);
  	dwc3_xlnx_set_coherency(priv_data, XLNX_USB2_TRAFFIC_ROUTE_CONFIG);
-- 
2.44.4
  
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help