On 18 May 2016 at 18:12, Felipe Balbi <balbi@xxxxxxxxxx> wrote: > > Hi, > > Baolin Wang <baolin.wang@xxxxxxxxxx> writes: >>>> Baolin Wang <baolin.wang@xxxxxxxxxx> writes: >>>>>>>>> Make sense. >>>>>>>> >>>>>>>> cool, if you wanna work on it, let me know and I can give some details >>>>>>>> of what I have in mind. >>>>>>> >>>>>>> Could you explain details to me, and I wanna continue to optimize the >>>>>>> power management things. Thanks. >>>>>> >>>>>> I have it half-way done. Have a look at my dwc3-fix-suspend branch on >>>>>> k.org. I haven't sent because I'm not getting a PME event. Can you test >>>>>> on your end and let me know what happens? >> >> I applied some patches (showing below) about suspend/resume at your >> dwc3-fix-suspend branch with my glue layer runtime_* callbacks on my >> testing platform. >> usb: dwc3: implement runtime PM >> usb: dwc3: core: simplify suspend/resume operations >> usb: dwc3: core: re-factor init and exit paths >> usb: dwc3: core: get rid of DWC3_PM_OPS macro >> usb: dwc3: gadget: fix gadget suspend/resume >> usb: dwc3: gadget: re-factor ->udc_start and ->udc_stop >> >> Then I tested the cable connect/disconnect action to see the dwc core >> resume/suspend. It looks work well on my platform, except that I did >> some extra 2 modifications like below: >> (1) >> @@ -1485,16 +1490,11 @@ static int dwc3_gadget_run_stop(struct dwc3 >> *dwc, int is_on, int suspend) >> { >> u32 reg; >> u32 timeout = 500, i; >> >> + if (pm_runtime_suspended(dwc->dev)) >> + return 0; >> >> (2) >> @@ -1748,15 +1754,25 @@ static int dwc3_gadget_start(struct usb_gadget *g, >> * even though host mode might be active. Don't actually perform >> * device-specific initialization until device mode is activated. >> */ >> >> + if (pm_runtime_suspended(dwc->dev)) { >> + spin_unlock_irqrestore(&dwc->lock, flags); >> + return 0; >> + } >> >> + ret = __dwc3_gadget_start(dwc); >> + if (ret) >> + goto err1; >> >> So I think the dwc3 core can enter suspend mode before gadget function >> is ready to call the 'usb_gadget_udc_start()' and >> 'usb_udc_connect_control()', then if the dwc3 core has entered >> suspended mode, we need to return success when starting the gadget, >> and leave the gadget starting action from gadget resume. What do you >> think about that? Thanks. > > Well, if this makes it work properly. Then, yeah; looks okay to me. I'll > add this to the patch introducing runtime PM. OK. > > Thanks a lot for testing on your side :-) You are welcome:) > > -- > balbi -- Baolin.wang Best Regards -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html