On Tue, Nov 18, 2014 at 11:07:34AM -0500, Alan Stern wrote: > On Tue, 18 Nov 2014, Kever Yang wrote: > > > After we implement the bus_suspend/resume, auto suspend id enabled. > > The root hub will be auto suspend if there is no device connected, > > we need to resume the root hub when a device connect detect. > > > > This patch tested on rk3288. > > > > Signed-off-by: Roy Li <roy...@rock-chips.com> > > Signed-off-by: Kever Yang <kever.y...@rock-chips.com> > > --- > > > > Changes in v2: > > - add definition for hcd structure > > - remove check for bus->root_hub > > > > drivers/usb/dwc2/hcd_intr.c | 5 +++++ > > 1 file changed, 5 insertions(+) > > > > diff --git a/drivers/usb/dwc2/hcd_intr.c b/drivers/usb/dwc2/hcd_intr.c > > index 551ba87..680206f 100644 > > --- a/drivers/usb/dwc2/hcd_intr.c > > +++ b/drivers/usb/dwc2/hcd_intr.c > > @@ -329,6 +329,7 @@ static void dwc2_port_intr(struct dwc2_hsotg *hsotg) > > { > > u32 hprt0; > > u32 hprt0_modify; > > + struct usb_hcd *hcd = (struct usb_hcd *)hsotg->priv; > > > > dev_vdbg(hsotg->dev, "--Port Interrupt--\n"); > > > > @@ -354,6 +355,10 @@ static void dwc2_port_intr(struct dwc2_hsotg *hsotg) > > hsotg->flags.b.port_connect_status = 1; > > hprt0_modify |= HPRT0_CONNDET; > > > > + /* resume root hub? */ > > + if (hcd->state == HC_STATE_SUSPENDED) > > + usb_hcd_resume_root_hub(hcd); > > You should be aware that it's not safe to use hcd->state for anything > in a host controller driver. That field is owned by usbcore, not by > the HCD, and it is not protected by any locks. > > Thus, for example, hcd->state does not get set to HC_STATE_SUSPENDED > until some time after the bus_suspend routine has returned. A > port-change interrupt might occur during that time interval.
In that case, XHCI has a bug :-) Mathias, care to add it to your TODO list ? -- balbi
signature.asc
Description: Digital signature