Re: [PATCH v2 6/7] usb: dwc3: qcom: Support broken suspend for SA8255P

From: Thinh Nguyen

Date: Fri Sep 11 2026 - 21:25:06 EST


On Thu, Sep 03, 2026, Faisal Hassan wrote:
> During APPS Suspend, the clock controller unit disables all clocks
> to the CPU and subsystems, causing the controller to enter the
> Power-On Reset (POR) state. This results in the loss of
> Qscratch programming.
>
> Upon APPS Resume, the USB controller does not have the proper
> PIPE_UTMI_CLK_SEL or VBUS_VALID. Hence, if only the High-Speed
> PHY is used for a controller capable of SuperSpeed operations,
> the controller will assume it should use the USB3 PHY and not
> the HS PHY as configured before APPS Suspend. This behavior
> disrupts the normal operation of the USB controller. Similarly,
> if the controller was operating in device mode prior to
> APPS suspend, and VBUS_VALID signal is not set after APPS resume,
> this will cause the PHYs to transition into the suspend state.
> This behavior disrupts the normal operation of the USB controller.
>
> Address the issues by ensuring that the PIPE_UTMI_CLK_SEL and
> VBUS_VALID are handled properly after the system resumes from
> APPS Suspend. This is crucial for maintaining the correct
> operational state of the USB controller and preventing
> unintended suspensions of the PHYs.
>
> Also, as the controller is starting from POR state, make
> sure the controller Reset is performed.
>
> Co-developed-by: Sriram Dash <sriram.dash@xxxxxxxxxxxxxxxx>
> Signed-off-by: Sriram Dash <sriram.dash@xxxxxxxxxxxxxxxx>
> Signed-off-by: Faisal Hassan <faisal.hassan@xxxxxxxxxxxxxxxx>
> ---
> drivers/usb/dwc3/dwc3-qcom.c | 128 +++++++++++++++++++++++++++--------
> 1 file changed, 100 insertions(+), 28 deletions(-)
>

[...]

>
> +static const struct property_entry dwc3_qcom_props_broken_suspend[] = {
> + PROPERTY_ENTRY_BOOL("xhci-reset-on-resume"),
> + { }
> +};
> +
> +static const struct software_node dwc3_qcom_swnode_prop_broken_suspend = {
> + .properties = dwc3_qcom_props_broken_suspend,
> +};
> +

The "xhci-reset-on-resume" isn't a documented DT property. It's set here
for match data just to immediately read back by the same driver. Can we
add a field to dwc3_properties and pass it through the probe data
instead (similar to how dwc3_generic_plat.c handles it)? This avoids
handling the software_node lifecycle just to pass the quirk.

Thanks,
Thinh