From: Greg Kroah-Hartman Date: Sun, 11 Sep 2022 05:44:58 +0000 (+0200) Subject: 4.9-stable patches X-Git-Tag: v5.19.9~34 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=bb0ab692488bac011a35171ece65cea7ddeba86e;p=thirdparty%2Fkernel%2Fstable-queue.git 4.9-stable patches added patches: usb-dwc3-fix-phy-disable-sequence.patch --- diff --git a/queue-4.9/series b/queue-4.9/series index 218bd113e2d..4b0da93103a 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -37,3 +37,4 @@ sch_sfb-don-t-assume-the-skb-is-still-around-after-e.patch tipc-fix-shift-wrapping-bug-in-map_get.patch tcp-fix-early-etimedout-after-spurious-non-sack-rto.patch sch_sfb-also-store-skb-len-before-calling-child-enqu.patch +usb-dwc3-fix-phy-disable-sequence.patch diff --git a/queue-4.9/usb-dwc3-fix-phy-disable-sequence.patch b/queue-4.9/usb-dwc3-fix-phy-disable-sequence.patch new file mode 100644 index 00000000000..61154f7dd9d --- /dev/null +++ b/queue-4.9/usb-dwc3-fix-phy-disable-sequence.patch @@ -0,0 +1,80 @@ +From d2ac7bef95c9ead307801ccb6cb6dfbeb14247bf Mon Sep 17 00:00:00 2001 +From: Johan Hovold +Date: Thu, 4 Aug 2022 17:09:53 +0200 +Subject: usb: dwc3: fix PHY disable sequence + +From: Johan Hovold + +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: stable@vger.kernel.org # 4.8 +Reviewed-by: Andrew Halaney +Reviewed-by: Matthias Kaehlcke +Reviewed-by: Manivannan Sadhasivam +Signed-off-by: Johan Hovold +Link: https://lore.kernel.org/r/20220804151001.23612-2-johan+linaro@kernel.org +[ johan: adjust context to 4.9 ] +Signed-off-by: Johan Hovold +Signed-off-by: Greg Kroah-Hartman +--- + drivers/usb/dwc3/core.c | 20 ++++++++++---------- + 1 file changed, 10 insertions(+), 10 deletions(-) + +--- a/drivers/usb/dwc3/core.c ++++ b/drivers/usb/dwc3/core.c +@@ -602,15 +602,15 @@ static void dwc3_core_exit(struct dwc3 * + { + 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_de + 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: