Re: [PATCH 1/2] usb: dwc3: Don't reinitialize core during host bus-suspend/resume

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 7/13/2017 11:33 AM, Baolin Wang wrote:
> On 12 July 2017 at 16:58, Manu Gautam <mgautam@xxxxxxxxxxxxxx> wrote:
>>
>> On 7/12/2017 2:06 PM, Baolin Wang wrote:
>>> Hi,
>>>
>>> On 12 July 2017 at 15:25, Manu Gautam <mgautam@xxxxxxxxxxxxxx> wrote:
>>>>
>>>> On 7/12/2017 12:19 PM, Baolin Wang wrote:
>>>>> Hi,
>>>>>
>>>>> On 3 July 2017 at 19:25, Manu Gautam <mgautam@xxxxxxxxxxxxxx> wrote:
>>>>>> Driver powers-off PHYs and reinitializes DWC3 core and gadget on
>>>>>> resume. While this works fine for gadget mode but in host
>>>>>> mode there is not re-initialization of host stack. Also, resetting
>>>>>> bus as part of bus_suspend/resume is not correct which could affect
>>>>>> (or disconnect) connected devices.
>>>>>> Fix this by not reinitializing core on suspend/resume in host mode
>>>>>> for HOST only and OTG/drd configurations.
>>>>> But for some mobile devices, they also need suspend/resume in host
>>>>> mode which will power off dwc3 controller in glue layer. If we remove
>>>>> dwc3_core_init() for host mode, I am afraid it can not work well in
>>>>> host mode after resuming dwc3.
>>>> Can you point me to a glue driver doing that?
>>> Yes, now there are no glue driver doing that, but for many vendor
>>> trees they will do that. (Our platform will power off dwc3 when
>>> suspending dwc3, but have not upstreamed yet)
>>
>> Fine, but glue driver still need to take care of re-initialization on resume
>> with current design.
> Yes.
>
>>>> If dwc3 is powered off on suspend then Xhci level initialization also
>>>> needed
>>>> after
>>>> performing dwc3_core_init on resume which is currently not present. So
>>>> this
>>>> seems
>>>> to me broken anyway.
>>> Since we've add runtime PM for xhci-plat driver [1], which means we
>>> can runtime suspend/resume xhci device from dwc3 [2].
>>> [1] https://www.spinics.net/lists/linux-usb/msg156077.html
>>> [2] https://patchwork.kernel.org/patch/9471869/
>>
>> Sure. We can discuss this patch once you re-submit.
>> One concern I have with the patch is marking ignore_children for dwc3 and as
>> part of
>> dwc3 suspend/resume invoking
> Suppose we will suspend xhci device as dwc3's child, but now dwc3
> device is not suspend yet, which will block to suspend xhci device.
> Thus we should set ignore children flag to remove the parent
> dependency.

I may not have understood the issue. In any case children must be suspended first.
Example sequence is:
external hub/device (if any) suspend -> root hub  -> xhci -> dwc3 core -> dwc3 glue.
xhci device's runtime/pm suspend should happen before dwc3 gets suspended.


>> runtime pm on xhci. Ideally pm core should handle it seamlessly i.e.
>> suspending dwc3
>> once xhci gets suspended and pm_stay_awake/relax can be used to block
>> pm_suspend
>> until runtime suspend of glue driver happens.
>>
>>> But [2] has not applied yet now, I will try to upstream it again. Then
>>> we can suspend xhci device--> suspend dwc3 host---> glue layer can
>>> power off, and it is similar when resuming in host mode.
>>
>> Do you see any issues with this patch?
>> I am able to get runtime suspend/resume happening fine with XHCI on my
>> platform.
>> It involves runtime suspend/resume of USB HUB and dwc3 glue driver without
>> any other
>> change.
> Great, I will try this patch again.
>

--
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



[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux