diff mbox series

[v1,05/14] usb: dwc2: Add port conn. sts. checking in _dwc2_hcd_resume() function.

Message ID ac07dae6922ad0110dbecffcab1dc495ce6a6cbc.1555672441.git.arturp@synopsys.com (mailing list archive)
State New, archived
Headers show
Series usb: dwc2: Fix and improve power saving modes. | expand

Commit Message

Artur Petrosyan April 19, 2019, 11:24 a.m. UTC
Added port connection status checking which prevents exiting from
Partial Power Down mode from _dwc2_hcd_resume() when no entering
to Partial Power Down mode happened.

Signed-off-by: Artur Petrosyan <arturp@synopsys.com>
---
 drivers/usb/dwc2/hcd.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

Comments

Doug Anderson April 26, 2019, 8:45 p.m. UTC | #1
Hi,

On Fri, Apr 19, 2019 at 11:53 AM Artur Petrosyan
<Arthur.Petrosyan@synopsys.com> wrote:
>
> Added port connection status checking which prevents exiting from
> Partial Power Down mode from _dwc2_hcd_resume() when no entering
> to Partial Power Down mode happened.
>
> Signed-off-by: Artur Petrosyan <arturp@synopsys.com>
> ---
>  drivers/usb/dwc2/hcd.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c
> index 1d18258b5ff8..8367902a47eb 100644
> --- a/drivers/usb/dwc2/hcd.c
> +++ b/drivers/usb/dwc2/hcd.c
> @@ -4544,6 +4544,9 @@ static int _dwc2_hcd_resume(struct usb_hcd *hcd)
>         struct dwc2_hsotg *hsotg = dwc2_hcd_to_hsotg(hcd);
>         unsigned long flags;
>         int ret = 0;
> +       u32 hprt0;
> +
> +       hprt0 = dwc2_read_hprt0(hsotg);
>
>         spin_lock_irqsave(&hsotg->lock, flags);

In this patch you put the reading of hprt0 before the spinlock (which
seems wrong) and then you move it after the spinlock in the last patch
in the series, AKA ("usb: dwc2: Add enter/exit hibernation from system
issued suspend/resume").  Can you just put it in the right place here
so you don't need to move it in a later patch?


-Doug
diff mbox series

Patch

diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c
index 1d18258b5ff8..8367902a47eb 100644
--- a/drivers/usb/dwc2/hcd.c
+++ b/drivers/usb/dwc2/hcd.c
@@ -4544,6 +4544,9 @@  static int _dwc2_hcd_resume(struct usb_hcd *hcd)
 	struct dwc2_hsotg *hsotg = dwc2_hcd_to_hsotg(hcd);
 	unsigned long flags;
 	int ret = 0;
+	u32 hprt0;
+
+	hprt0 = dwc2_read_hprt0(hsotg);
 
 	spin_lock_irqsave(&hsotg->lock, flags);
 
@@ -4553,7 +4556,8 @@  static int _dwc2_hcd_resume(struct usb_hcd *hcd)
 	if (hsotg->lx_state != DWC2_L2)
 		goto unlock;
 
-	if (hsotg->params.power_down != DWC2_POWER_DOWN_PARAM_PARTIAL) {
+	if (hsotg->params.power_down != DWC2_POWER_DOWN_PARAM_PARTIAL ||
+	    hprt0 & HPRT0_CONNSTS) {
 		hsotg->lx_state = DWC2_L0;
 		goto unlock;
 	}