From 171215efef24f72a6644371b48c89ec82abe04e7 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 3 Oct 2014 12:10:03 -0700 Subject: [PATCH] 3.14-stable patches added patches: usb-dwc3-core-fix-order-of-pm-runtime-calls.patch usb-dwc3-core-fix-ordering-for-phy-suspend.patch --- queue-3.14/series | 2 + ...3-core-fix-order-of-pm-runtime-calls.patch | 50 +++++++++++++++++++ ...c3-core-fix-ordering-for-phy-suspend.patch | 47 +++++++++++++++++ 3 files changed, 99 insertions(+) create mode 100644 queue-3.14/usb-dwc3-core-fix-order-of-pm-runtime-calls.patch create mode 100644 queue-3.14/usb-dwc3-core-fix-ordering-for-phy-suspend.patch diff --git a/queue-3.14/series b/queue-3.14/series index a3c04affbcc..f789108aaf1 100644 --- a/queue-3.14/series +++ b/queue-3.14/series @@ -175,3 +175,5 @@ lockd-fix-rpcbind-crash-on-lockd-startup-failure.patch lockdep-revert-lockdep-check-in-raw_seqcount_begin.patch genhd-fix-leftover-might_sleep-in-blk_free_devt.patch usb-dwc3-fix-trb-completion-when-multiple-trbs-are-started.patch +usb-dwc3-core-fix-order-of-pm-runtime-calls.patch +usb-dwc3-core-fix-ordering-for-phy-suspend.patch diff --git a/queue-3.14/usb-dwc3-core-fix-order-of-pm-runtime-calls.patch b/queue-3.14/usb-dwc3-core-fix-order-of-pm-runtime-calls.patch new file mode 100644 index 00000000000..899ecae92ca --- /dev/null +++ b/queue-3.14/usb-dwc3-core-fix-order-of-pm-runtime-calls.patch @@ -0,0 +1,50 @@ +From fed33afce0eda44a46ae24d93aec1b5198c0bac4 Mon Sep 17 00:00:00 2001 +From: Felipe Balbi +Date: Tue, 2 Sep 2014 14:57:20 -0500 +Subject: usb: dwc3: core: fix order of PM runtime calls + +From: Felipe Balbi + +commit fed33afce0eda44a46ae24d93aec1b5198c0bac4 upstream. + +Currently, we disable pm_runtime before all register +accesses are done, this is dangerous and might lead +to abort exceptions due to the driver trying to access +a register which is clocked by a clock which was long +gated. + +Fix that by moving pm_runtime_put_sync() and pm_runtime_disable() +as the last thing we do before returning from our ->remove() +method. + +Fixes: 72246da (usb: Introduce DesignWare USB3 DRD Driver) +Signed-off-by: Felipe Balbi +Signed-off-by: Greg Kroah-Hartman + + +--- + drivers/usb/dwc3/core.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +--- a/drivers/usb/dwc3/core.c ++++ b/drivers/usb/dwc3/core.c +@@ -586,9 +586,6 @@ static int dwc3_remove(struct platform_d + usb_phy_set_suspend(dwc->usb2_phy, 1); + usb_phy_set_suspend(dwc->usb3_phy, 1); + +- pm_runtime_put_sync(&pdev->dev); +- pm_runtime_disable(&pdev->dev); +- + dwc3_debugfs_exit(dwc); + + switch (dwc->dr_mode) { +@@ -611,6 +608,9 @@ static int dwc3_remove(struct platform_d + dwc3_free_event_buffers(dwc); + dwc3_core_exit(dwc); + ++ pm_runtime_put_sync(&pdev->dev); ++ pm_runtime_disable(&pdev->dev); ++ + return 0; + } + diff --git a/queue-3.14/usb-dwc3-core-fix-ordering-for-phy-suspend.patch b/queue-3.14/usb-dwc3-core-fix-ordering-for-phy-suspend.patch new file mode 100644 index 00000000000..7b601d9a656 --- /dev/null +++ b/queue-3.14/usb-dwc3-core-fix-ordering-for-phy-suspend.patch @@ -0,0 +1,47 @@ +From dc99f16f076559235c92d3eb66d03d1310faea08 Mon Sep 17 00:00:00 2001 +From: Felipe Balbi +Date: Wed, 3 Sep 2014 16:13:37 -0500 +Subject: usb: dwc3: core: fix ordering for PHY suspend + +From: Felipe Balbi + +commit dc99f16f076559235c92d3eb66d03d1310faea08 upstream. + +We can't suspend the PHYs before dwc3_core_exit_mode() +has been called, that's because the host and/or device +sides might still need to communicate with the far end +link partner. + +Fixes: 8ba007a (usb: dwc3: core: enable the USB2 and USB3 phy in probe) +Suggested-by: Alan Stern +Signed-off-by: Felipe Balbi +Signed-off-by: Greg Kroah-Hartman + + +--- + drivers/usb/dwc3/core.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +--- a/drivers/usb/dwc3/core.c ++++ b/drivers/usb/dwc3/core.c +@@ -583,9 +583,6 @@ static int dwc3_remove(struct platform_d + { + struct dwc3 *dwc = platform_get_drvdata(pdev); + +- usb_phy_set_suspend(dwc->usb2_phy, 1); +- usb_phy_set_suspend(dwc->usb3_phy, 1); +- + dwc3_debugfs_exit(dwc); + + switch (dwc->dr_mode) { +@@ -606,6 +603,10 @@ static int dwc3_remove(struct platform_d + + dwc3_event_buffers_cleanup(dwc); + dwc3_free_event_buffers(dwc); ++ ++ usb_phy_set_suspend(dwc->usb2_phy, 1); ++ usb_phy_set_suspend(dwc->usb3_phy, 1); ++ + dwc3_core_exit(dwc); + + pm_runtime_put_sync(&pdev->dev); -- 2.47.3