Message ID | 1586529114-25211-1-git-send-email-fabrice.gasnier@st.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | usb: dwc2: only prevent new request when power_down is possible | expand |
Hi, On 4/10/2020 6:31 PM, Fabrice Gasnier wrote: > When controller is suspended, registers mustn't be touched. This is not > the case when 'power_down' is set to none. In this case, power saving > routines are skipped. If core in suspend mode even with any enabled power saving modes then lx_state = DWC2_L2. If power_down != DWC2_POWER_DOWN_PARAM_NONE it doesn't mean that core in suspend state (DWC2_L2) and declining request is wrong. So, additional checking of params.power_dowm here is not correct. > > This fixes a case where gadget driver (f_acm) gets opened (cat /dev/ttyGS0) > but the bus has been suspended by the host: > - configfs-gadget gadget: acm ttyGS0 can't notify serial state, -11 > > Fixes: 7ababa926c66 ("usb: dwc2: gadget: prevent new request submission during suspend") > Fixes: 88b02f2cb1e1 ("usb: dwc2: Add core state checking") > > Signed-off-by: Fabrice Gasnier <fabrice.gasnier@st.com> > --- > drivers/usb/dwc2/gadget.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/usb/dwc2/gadget.c b/drivers/usb/dwc2/gadget.c > index 92ed32e..45a8782 100644 > --- a/drivers/usb/dwc2/gadget.c > +++ b/drivers/usb/dwc2/gadget.c > @@ -1375,7 +1375,8 @@ static int dwc2_hsotg_ep_queue(struct usb_ep *ep, struct usb_request *req, > req->zero, req->short_not_ok); > > /* Prevent new request submission when controller is suspended */ > - if (hs->lx_state != DWC2_L0) { > + if (hs->params.power_down != DWC2_POWER_DOWN_PARAM_NONE && > + hs->lx_state != DWC2_L0) { > dev_dbg(hs->dev, "%s: submit request only in active state\n", > __func__); > return -EAGAIN; >
diff --git a/drivers/usb/dwc2/gadget.c b/drivers/usb/dwc2/gadget.c index 92ed32e..45a8782 100644 --- a/drivers/usb/dwc2/gadget.c +++ b/drivers/usb/dwc2/gadget.c @@ -1375,7 +1375,8 @@ static int dwc2_hsotg_ep_queue(struct usb_ep *ep, struct usb_request *req, req->zero, req->short_not_ok); /* Prevent new request submission when controller is suspended */ - if (hs->lx_state != DWC2_L0) { + if (hs->params.power_down != DWC2_POWER_DOWN_PARAM_NONE && + hs->lx_state != DWC2_L0) { dev_dbg(hs->dev, "%s: submit request only in active state\n", __func__); return -EAGAIN;
When controller is suspended, registers mustn't be touched. This is not the case when 'power_down' is set to none. In this case, power saving routines are skipped. This fixes a case where gadget driver (f_acm) gets opened (cat /dev/ttyGS0) but the bus has been suspended by the host: - configfs-gadget gadget: acm ttyGS0 can't notify serial state, -11 Fixes: 7ababa926c66 ("usb: dwc2: gadget: prevent new request submission during suspend") Fixes: 88b02f2cb1e1 ("usb: dwc2: Add core state checking") Signed-off-by: Fabrice Gasnier <fabrice.gasnier@st.com> --- drivers/usb/dwc2/gadget.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)