On Mon, Jul 21, 2025 at 09:33:11PM +0530, Harshit Mogalapalli wrote:
Hi Sasha,
On 21/07/25 21:21, Sasha Levin wrote:
From: Krishna Kurapati krishna.kurapati@oss.qualcomm.com
[ Upstream commit ef8abc0ba49ce717e6bc4124e88e59982671f3b5 ]
Leaving the USB BCR asserted prevents the associated GDSC to turn on. This blocks any subsequent attempts of probing the device, e.g. after a probe deferral, with the following showing in the log:
[ 1.332226] usb30_prim_gdsc status stuck at 'off'
Leave the BCR deasserted when exiting the driver to avoid this issue.
Cc: stable stable@kernel.org Fixes: a4333c3a6ba9 ("usb: dwc3: Add Qualcomm DWC3 glue driver") Acked-by: Thinh Nguyen Thinh.Nguyen@synopsys.com Reviewed-by: Konrad Dybcio konrad.dybcio@oss.qualcomm.com Signed-off-by: Krishna Kurapati krishna.kurapati@oss.qualcomm.com Link: https://lore.kernel.org/r/20250709132900.3408752-1-krishna.kurapati@oss.qual... Signed-off-by: Greg Kroah-Hartman gregkh@linuxfoundation.org [ adapted to individual clock management API instead of bulk clock operations ] Signed-off-by: Sasha Levin sashal@kernel.org
drivers/usb/dwc3/dwc3-qcom.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/drivers/usb/dwc3/dwc3-qcom.c b/drivers/usb/dwc3/dwc3-qcom.c index 742be1e07a01d..4874a6442c806 100644 --- a/drivers/usb/dwc3/dwc3-qcom.c +++ b/drivers/usb/dwc3/dwc3-qcom.c @@ -615,13 +615,13 @@ static int dwc3_qcom_probe(struct platform_device *pdev) ret = reset_control_deassert(qcom->resets); if (ret) { dev_err(&pdev->dev, "failed to deassert resets, err=%d\n", ret);
goto reset_assert;
} ret = dwc3_qcom_clk_init(qcom, of_clk_get_parent_count(np)); if (ret) { dev_err(dev, "failed to get clocks\n");return ret;
goto reset_assert;
} res = platform_get_resource(pdev, IORESOURCE_MEM, 0);return ret;
@@ -700,8 +700,6 @@ static int dwc3_qcom_probe(struct platform_device *pdev) clk_disable_unprepare(qcom->clks[i]); clk_put(qcom->clks[i]); } -reset_assert:
- reset_control_assert(qcom->resets); return ret;
} @@ -725,7 +723,7 @@ static int dwc3_qcom_remove(struct platform_device *pdev) } qcom->num_clocks = 0;
- reset_control_assert(qcom->resets);
- dwc3_qcom_interconnect_exit(qcom);
^^ This part of diff doesn't look good to me. Can you please double check the conflict resolution ? (Probably shouldn't have addition in this hunk)
You're right! It came from the 5.10 backport which I've cherry picked onto 5.4. I'll resend.