Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754531AbcKYNVP (ORCPT ); Fri, 25 Nov 2016 08:21:15 -0500 Received: from mail-lf0-f45.google.com ([209.85.215.45]:35579 "EHLO mail-lf0-f45.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753324AbcKYNU7 (ORCPT ); Fri, 25 Nov 2016 08:20:59 -0500 Subject: Re: [PATCH v2] fsl/usb: Workarourd for USB erratum-A005697 To: Changming Huang , stern@rowland.harvard.edu, gregkh@linuxfoundation.org References: <1480044248-6365-1-git-send-email-jerry.huang@nxp.com> Cc: ramneek.mehresh@nxp.com, julia.lawall@lip6.fr, sriram.dash@nxp.com, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org From: Sergei Shtylyov Organization: Cogent Embedded Message-ID: Date: Fri, 25 Nov 2016 16:12:09 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 MIME-Version: 1.0 In-Reply-To: <1480044248-6365-1-git-send-email-jerry.huang@nxp.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2142 Lines: 70 Hello. On 11/25/2016 06:24 AM, Changming Huang wrote: > The EHCI specification states the following in the SUSP bit description: > In the Suspend state, the port is senstive to resume detection. Sensitive. > Note that the bit status does not change untile the port is suspended and Until. > that there may be a delay in susupending a port if there is a transaction Suspending. > currently in progress on the USB. > > However, in NXP USBDR controller, the PORTSCx[SUSP] bit changes immediately > when the application sets it and not when the port is actually suspended. > > So the application must wait for at least 10 milliseconds after a port > indicates that it is suspended, to make sure this port has entered > suspended state before initiating this port resume using the Force Port > Resume bit. This bit is for NXP controller, not EHCI compatible. > > Signed-off-by: Changming Huang > Signed-off-by: Ramneek Mehresh [...] > diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c > index 74f62d6..81e2310 100644 > --- a/drivers/usb/host/ehci-hub.c > +++ b/drivers/usb/host/ehci-hub.c > @@ -310,6 +310,13 @@ static int ehci_bus_suspend (struct usb_hcd *hcd) > } > spin_unlock_irq(&ehci->lock); > > + if (changed && ehci_has_fsl_susp_errata(ehci)) > + /* Wait for at least 10 millisecondes to ensure the controller Milliseconds. > + * enter the suspend status before initiating a port resume > + * using the Fore Port Resume bit (Not-EHCI compatible). Maybe force? s/Not/non/ also. > + */ > + usleep_range(10000, 20000); > + > if ((changed && ehci->has_tdi_phy_lpm) || fs_idle_delay) { > /* > * Wait for HCD to enter low-power mode or for the bus [...] > @@ -703,10 +704,15 @@ struct ehci_tt { > #if defined(CONFIG_PPC_85xx) > /* Some Freescale processors have an erratum (USB A-005275) in which > * incoming packets get corrupted in HS mode > + * Some Freescale processors have an erratum (USB A-005697) in which > + * we need to wait for 10ms for bus to fo into suspend mode after Fo? [...] MBR, Sergei