> -----Original Message----- > From: Martin Kepplinger <martin.kepplinger@xxxxxxx> > Sent: 2020年2月20日 1:37 > To: Jun Li <jun.li@xxxxxxx>; Peter Chen <peter.chen@xxxxxxx>; > mathias.nyman@xxxxxxxxx > Cc: linux-usb@xxxxxxxxxxxxxxx; dl-linux-imx <linux-imx@xxxxxxx>; Anson Huang > <anson.huang@xxxxxxx>; shawnguo@xxxxxxxxxx; kernel@xxxxxxxxxxxxxx > Subject: [PATCH] usb: host: xhci-plat: add XHCI_MISSING_CAS quirk > > From: Li Jun <jun.li@xxxxxxx> > > i.MX8MQ USB3 host needs XHCI_MISSING_CAS quirk to warm reset the port to enum the > USB3 device plugged in while system sleep, as the port state is stuck in polling > mode after resume. > > Signed-off-by: Li Jun <jun.li@xxxxxxx> > Acked-by: Peter Chen <peter.chen@xxxxxxx> > --- > > Hi, > > Because resume from S3 suspend is broken for me on imx8mq, I stumbled upon this > patch in NXP's linux tree. (Please note that I'm not the author and I've not yet > put my SoB tag under it). This is just a > question: > > This patch (and the docs) clearly is missing in mainline Linux because the imx8mq > devicetree description includes it (which does nothing now). > > I've tested this and this particular addition doesn't fix my problem: > > [ 84.257538] imx8mq-usb-phy 381f0040.usb-phy: bus resume > [ 84.263195] imx8mq-usb-phy 382f0040.usb-phy: bus resume > [ 84.268898] dwc3 38100000.usb: driver resume > > during resume from S3 suspend, here it still hangs. Is your problem a system hang? If yes, this may another issue, where the hang happens? dwc3_resume_common()? The question patch is to give a warm reset for connected USB device if the link state is not connect/CAS after system resume, otherwise host will wait 2s for device appear: [ 44.834831] usb 2-1: Waited 2000ms for CONNECT ... [ 45.055718] PM: resume devices took 3.132 seconds I will post this patch and doc(to be updated) to upstream later. Li Jun > > What else could be missing here? I'm using mainline Linux only of course. > > thanks, > > martin > > > > drivers/usb/host/xhci-plat.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c index > d90cd5ec09cf..4655016eaf45 100644 > --- a/drivers/usb/host/xhci-plat.c > +++ b/drivers/usb/host/xhci-plat.c > @@ -291,6 +291,10 @@ static int xhci_plat_probe(struct platform_device *pdev) > > device_property_read_u32(tmpdev, "imod-interval-ns", > &xhci->imod_interval); > + > + if (device_property_read_bool(tmpdev, > + "usb3-resume-missing-cas")) > + xhci->quirks |= XHCI_MISSING_CAS; > } > > hcd->usb_phy = devm_usb_get_phy_by_phandle(sysdev, "usb-phy", 0); > -- > 2.20.1