On 14.5.2020 4.34, Alan Stern wrote: > On Thu, May 14, 2020 at 01:31:59AM +0000, Peter Chen wrote: >> On 20-05-13 14:45:42, Jun Li wrote: >>> >>> ... >>>> Would it make sense to change xhci_plat_remove() to >>> >>> >>> >>>> xhci_plat_remove() >>> >>>> pm_runtime_disable() >>> >>>> <remove and put both hcd's> >>> >>>> pm_runtime_set_suspended() >>> >>> >>> >>>> or possibly wrapping the remove in a runtime get/put: >>> >>>> xhci_plat_remove() >>> >>>> pm_runtime_get_noresume() >>> >>>> pm_runtime_disable() >>> >>> > <remove and put both hcd's> >>> >>> > pm_runtime_set_suspended() >>> >>> > pm_runtime_put_noidle() >>> >>> I think it's better to keep runtime active during driver removal, >>> how about this: >>> >>> pm_runtime_get_sync() >>> <remove and put both hcd's> >>> pm_runtime_disable() >>> pm_runtime_put_noidle() >>> pm_runtime_set_suspended() >>> >> >> I think it is more reasonable since for some DRD controllers if >> DRD core is suspended, access the xHCI register (eg, we remove >> xhci-plat-hcd module at the time) may hang the system. Alan & >> Mathias, what's your opinion? Makes sense to me > > Jun's suggestion looks good to me. > > Alan Stern > Great, lets go with this then. Jun, or Peter, could you turn this into a patch and check that it works? I only got PCI xHC's to play with myself. Thanks -Mathias