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