[PATCH 2/3] usb: dwc3: xilinx: use reset_control_reset() in versal init
Pandey, Radhey Shyam
radheys at amd.com
Mon May 18 07:28:58 PDT 2026
On 5/14/2026 7:04 AM, Thinh Nguyen wrote:
> On Mon, May 11, 2026, Radhey Shyam Pandey wrote:
>> 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..
>
>> Signed-off-by: Radhey Shyam Pandey <radhey.shyam.pandey at 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
More information about the linux-arm-kernel
mailing list