usb: dwc3: fix PHY disable sequence
PATCH 1/1 usb: dwc3: fix PHY disable sequence
From: Johan Hovold <[email protected]>
commit d2ac7bef95c9ead307801ccb6cb6dfbeb14247bf upstream.
Generic PHYs must be powered-off before they can be tore down.
Similarly, suspending legacy PHYs after having powered them off makes no sense.
Fix the dwc3_core_exit() (e.g. called during suspend) and open-coded dwc3_probe() error-path sequences that got this wrong.
Note that this makes dwc3_core_exit() match the dwc3_core_init() error path with respect to powering off the PHYs.
Fixes 03c1fd622f72 ("usb: dwc3: core: add phy cleanup for probe error handling")
Fixes c499ff71ff2a ("usb: dwc3: core: re-factor init and exit paths")
Cc [email protected] # 4.8
Reviewed-by Andrew Halaney <[email protected]>
Reviewed-by Matthias Kaehlcke <[email protected]>
Reviewed-by Manivannan Sadhasivam <[email protected]>
Signed-off-by Johan Hovold <[email protected]>
Signed-off-by Greg Kroah-Hartman <[email protected]>
[ johan: adjust context to 4.9 ]
Signed-off-by Johan Hovold <[email protected]>
---
Never again... ;)
Johan
drivers/usb/dwc3/core.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-)
drivers/usb/dwc3/core.c +10 -10
@@ -602,15 +602,15 @@ static void dwc3_core_exit(struct dwc3 *dwc) {dwc3_event_buffers_cleanup (dwc); -usb_phy_shutdown (dwc->usb2_phy); -usb_phy_shutdown (dwc->usb3_phy); -phy_exit (dwc->usb2_generic_phy); -phy_exit (dwc->usb3_generic_phy); -usb_phy_set_suspend (dwc->usb2_phy,1 );usb_phy_set_suspend (dwc->usb3_phy,1 );phy_power_off (dwc->usb2_generic_phy);phy_power_off (dwc->usb3_generic_phy); + +usb_phy_shutdown (dwc->usb2_phy); +usb_phy_shutdown (dwc->usb3_phy); +phy_exit (dwc->usb2_generic_phy); +phy_exit (dwc->usb3_generic_phy); }/**
@@ -1149,16 +1149,16 @@ static int dwc3_probe(struct platform_device *pdev) err5:dwc3_event_buffers_cleanup (dwc); -usb_phy_shutdown (dwc->usb2_phy); -usb_phy_shutdown (dwc->usb3_phy); -phy_exit (dwc->usb2_generic_phy); -phy_exit (dwc->usb3_generic_phy); -usb_phy_set_suspend (dwc->usb2_phy,1 );usb_phy_set_suspend (dwc->usb3_phy,1 );phy_power_off (dwc->usb2_generic_phy);phy_power_off (dwc->usb3_generic_phy); +usb_phy_shutdown (dwc->usb2_phy); +usb_phy_shutdown (dwc->usb3_phy); +phy_exit (dwc->usb2_generic_phy); +phy_exit (dwc->usb3_generic_phy); +dwc3_ulpi_exit (dwc); err4:
Signature · 1 line
2.35.1