> >>> > >>>> 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. > Jun, would you please create a patch for it. I have tested it at CDNS3 platform, feel free add my tag. Reviewed-by: Peter Chen <peter.chen@xxxxxxx> Tested-by: Peter Chen <peter.chen@xxxxxxx> Peter