diff mbox series

usb: dwc3: gadget: add missing wakeup link states

Message ID 20210423152524.624619-1-marcel@solidxs.se
State New
Headers show
Series usb: dwc3: gadget: add missing wakeup link states | expand

Commit Message

Marcel Hamer April 23, 2021, 3:25 p.m. UTC
In dwc3_send_gadget_ep_cmd() a check is performed if the gadget needs
waking up. The following condition is checked before calling the
__dwc3_gadget_wakeup() function:

	needs_wakeup = (dwc->link_state == DWC3_LINK_STATE_U1 ||
        		dwc->link_state == DWC3_LINK_STATE_U2 ||
                        dwc->link_state == DWC3_LINK_STATE_U3);

Inside __dwc3_gadget_wakeup() only link_state DWC3_LINK_STATE_U3 is checked
and link state DWC3_LINK_STATE_U1 and DWC3_LINK_STATE_U2 are considered
invalid and generate a warning because of the call to:

	dev_WARN_ONCE(dwc->dev, ret, "wakeup failed --> %d\n", ret);

because of ret being -EINVAL.

Signed-off-by: Marcel Hamer <marcel@solidxs.se>
---
 drivers/usb/dwc3/gadget.c | 2 ++
 1 file changed, 2 insertions(+)

Comments

Felipe Balbi April 24, 2021, 8:08 a.m. UTC | #1
Marcel Hamer <marcel@solidxs.se> writes:

> In dwc3_send_gadget_ep_cmd() a check is performed if the gadget needs

> waking up. The following condition is checked before calling the

> __dwc3_gadget_wakeup() function:

>

> 	needs_wakeup = (dwc->link_state == DWC3_LINK_STATE_U1 ||

>         		dwc->link_state == DWC3_LINK_STATE_U2 ||

>                         dwc->link_state == DWC3_LINK_STATE_U3);

>

> Inside __dwc3_gadget_wakeup() only link_state DWC3_LINK_STATE_U3 is checked

> and link state DWC3_LINK_STATE_U1 and DWC3_LINK_STATE_U2 are considered

> invalid and generate a warning because of the call to:

>

> 	dev_WARN_ONCE(dwc->dev, ret, "wakeup failed --> %d\n", ret);

>

> because of ret being -EINVAL.

>

> Signed-off-by: Marcel Hamer <marcel@solidxs.se>

> ---

>  drivers/usb/dwc3/gadget.c | 2 ++

>  1 file changed, 2 insertions(+)

>

> diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c

> index c7ef218e7a8c..d05a7d630410 100644

> --- a/drivers/usb/dwc3/gadget.c

> +++ b/drivers/usb/dwc3/gadget.c

> @@ -1972,6 +1972,8 @@ static int __dwc3_gadget_wakeup(struct dwc3 *dwc)

>  	switch (link_state) {

>  	case DWC3_LINK_STATE_RESET:

>  	case DWC3_LINK_STATE_RX_DET:	/* in HS, means Early Suspend */

> +	case DWC3_LINK_STATE_U1:

> +	case DWC3_LINK_STATE_U2:


I think this was fixed recently by Thinh.

https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git/commit/?h=usb-next&id=c560e76319a94a3b9285bc426c609903408e4826

-- 
balbi
Marcel Hamer April 24, 2021, 6:41 p.m. UTC | #2
On Sat, Apr 24, 2021 at 11:08:07AM +0300, Felipe Balbi wrote:
> Marcel Hamer <marcel@solidxs.se> writes:

> 

> > In dwc3_send_gadget_ep_cmd() a check is performed if the gadget needs

> > waking up. The following condition is checked before calling the

> > __dwc3_gadget_wakeup() function:

> >

> > 	needs_wakeup = (dwc->link_state == DWC3_LINK_STATE_U1 ||

> >         		dwc->link_state == DWC3_LINK_STATE_U2 ||

> >                         dwc->link_state == DWC3_LINK_STATE_U3);

> >

> > Inside __dwc3_gadget_wakeup() only link_state DWC3_LINK_STATE_U3 is checked

> > and link state DWC3_LINK_STATE_U1 and DWC3_LINK_STATE_U2 are considered

> > invalid and generate a warning because of the call to:

> >

> > 	dev_WARN_ONCE(dwc->dev, ret, "wakeup failed --> %d\n", ret);

> >

> > because of ret being -EINVAL.

> >

> > Signed-off-by: Marcel Hamer <marcel@solidxs.se>

> > ---

> >  drivers/usb/dwc3/gadget.c | 2 ++

> >  1 file changed, 2 insertions(+)

> >

> > diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c

> > index c7ef218e7a8c..d05a7d630410 100644

> > --- a/drivers/usb/dwc3/gadget.c

> > +++ b/drivers/usb/dwc3/gadget.c

> > @@ -1972,6 +1972,8 @@ static int __dwc3_gadget_wakeup(struct dwc3 *dwc)

> >  	switch (link_state) {

> >  	case DWC3_LINK_STATE_RESET:

> >  	case DWC3_LINK_STATE_RX_DET:	/* in HS, means Early Suspend */

> > +	case DWC3_LINK_STATE_U1:

> > +	case DWC3_LINK_STATE_U2:

> 

> I think this was fixed recently by Thinh.

> 

> https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git/commit/?h=usb-next&id=c560e76319a94a3b9285bc426c609903408e4826

> 

> -- 

> balbi


Great, I missed that. Thank you for clarifying this.

Kind regards,

Marcel
diff mbox series

Patch

diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index c7ef218e7a8c..d05a7d630410 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -1972,6 +1972,8 @@  static int __dwc3_gadget_wakeup(struct dwc3 *dwc)
 	switch (link_state) {
 	case DWC3_LINK_STATE_RESET:
 	case DWC3_LINK_STATE_RX_DET:	/* in HS, means Early Suspend */
+	case DWC3_LINK_STATE_U1:
+	case DWC3_LINK_STATE_U2:
 	case DWC3_LINK_STATE_U3:	/* in HS, means SUSPEND */
 	case DWC3_LINK_STATE_RESUME:
 		break;