Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751284AbcKYI1N (ORCPT ); Fri, 25 Nov 2016 03:27:13 -0500 Received: from mail-db5eur01on0076.outbound.protection.outlook.com ([104.47.2.76]:2816 "EHLO EUR01-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750976AbcKYI1F (ORCPT ); Fri, 25 Nov 2016 03:27:05 -0500 From: Jerry Huang To: Sriram Dash , "stern@rowland.harvard.edu" , "gregkh@linuxfoundation.org" CC: "linux-usb@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "julia.lawall@lip6.fr" , Ramneek Mehresh , Suresh Gupta Subject: RE: [PATCH] fsl/usb: Workarourd for USB erratum-A005697 Thread-Topic: [PATCH] fsl/usb: Workarourd for USB erratum-A005697 Thread-Index: AQHSRjXotONUOBA9ekapQ3gxU3f+DaDn/CwAgAEFbZA= Date: Fri, 25 Nov 2016 02:53:22 +0000 Message-ID: References: <1479979089-4715-1-git-send-email-jerry.huang@nxp.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=jerry.huang@nxp.com; x-originating-ip: [199.59.225.131] x-microsoft-exchange-diagnostics: 1;DB5PR0401MB1928;7:yNTnlNBhFBGnscwH/vYq2hV9+Hawqu84AwJ19BD5hPuN5a194f5YwXI8S6oEaI8FLdqcE7Pz6uIyTFQiw/OKXxWkCKBf1vZh2rDRheENL/nGtm0/RVFncoWBgD621+WYP/3kkii7TjnIcZ5fYoACHU8MswS9Ag5Hf3tf7wMzqs4T8riXSlqF2kk2+dPVkosW0/wnInaq2hcD7iCKPpvaYhF65HvFDf548hJ2+STF0zFGO7uQkxwo4guLrbKemE3MznUoV3xjkCOVU+Vk4cPr/sO/TmqRql7wZjS2E98S5f6czWTt+A7sdeX5VZsP4DZIsfoLC4lg1VmvaJH4Oy1LuiSVrHhzjQf9QA56WjzHJj0= x-forefront-antispam-report: SFV:SKI;SCL:-1SFV:NSPM;SFS:(10009020)(6009001)(7916002)(377454003)(13464003)(199003)(189002)(33656002)(2501003)(74316002)(39410400001)(3660700001)(68736007)(3280700002)(106116001)(2900100001)(106356001)(3900700001)(38730400001)(551934003)(105586002)(8676002)(2171001)(77096005)(81156014)(50986999)(54356999)(66066001)(76176999)(81166006)(189998001)(2950100002)(229853002)(5001770100001)(4326007)(76576001)(6116002)(101416001)(102836003)(97736004)(39450400002)(3846002)(6506003)(9686002)(5660300001)(86362001)(7696004)(7846002)(122556002)(2201001)(7736002)(92566002)(305945005)(8936002)(39380400001)(2906002)(39400400001);DIR:OUT;SFP:1101;SCL:1;SRVR:DB5PR0401MB1928;H:DB5PR0401MB1813.eurprd04.prod.outlook.com;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; x-ms-office365-filtering-correlation-id: b0ef78b8-ec14-482b-4875-08d414de3843 x-microsoft-antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:DB5PR0401MB1928; x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(9452136761055)(185117386973197)(35762410373642); x-exchange-antispam-report-cfa-test: BCL:0;PCL:0;RULEID:(6060326)(6045199)(6040361)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046)(6055026)(6061324)(6041248)(6046074)(20161123555025)(20161123564025)(20161123560025)(20161123562025);SRVR:DB5PR0401MB1928;BCL:0;PCL:0;RULEID:;SRVR:DB5PR0401MB1928; x-forefront-prvs: 01371B902F spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-originalarrivaltime: 25 Nov 2016 02:53:22.3309 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB5PR0401MB1928 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by mail.home.local id uAP8RI0E030905 Content-Length: 4800 Lines: 129 Thanks, Sriram, It is better to move this delay out of spin-lock. Best Regards Jerry Huang -----Original Message----- From: Sriram Dash Sent: Thursday, November 24, 2016 7:17 PM To: Jerry Huang ; stern@rowland.harvard.edu; gregkh@linuxfoundation.org Cc: linux-usb@vger.kernel.org; linux-kernel@vger.kernel.org; julia.lawall@lip6.fr; Jerry Huang ; Ramneek Mehresh ; Suresh Gupta Subject: RE: [PATCH] fsl/usb: Workarourd for USB erratum-A005697 >From: Changming Huang [mailto:jerry.huang@nxp.com] As per USB >specification, in the Suspend state, the status bit does not change >until the port is suspended. However, there may be a delay in >suspending a port if there is a transaction currently in progress on the bus. > >In the USBDR controller, the PORTSCx[SUSP] bit changes immediately when >the application sets it and not when the port is actually suspended > >Workaround for this issue involves waiting for a minimum of 10ms to >allow the controller to go into SUSPEND state before proceeding ahead > >Signed-off-by: Changming Huang >Signed-off-by: Ramneek Mehresh >--- > drivers/usb/host/ehci-fsl.c | 3 +++ > drivers/usb/host/ehci-hub.c | 2 ++ > drivers/usb/host/ehci.h | 6 ++++++ > drivers/usb/host/fsl-mph-dr-of.c | 2 ++ > include/linux/fsl_devices.h | 1 + > 5 files changed, 14 insertions(+) > >diff --git a/drivers/usb/host/ehci-fsl.c b/drivers/usb/host/ehci-fsl.c >index 9f5ffb6..91701cc 100644 >--- a/drivers/usb/host/ehci-fsl.c >+++ b/drivers/usb/host/ehci-fsl.c >@@ -286,6 +286,9 @@ static int ehci_fsl_usb_setup(struct ehci_hcd *ehci) > if (pdata->has_fsl_erratum_a005275 == 1) > ehci->has_fsl_hs_errata = 1; > >+ if (pdata->has_fsl_erratum_a005697 == 1) >+ ehci->has_fsl_susp_errata = 1; >+ > if ((pdata->operating_mode == FSL_USB2_DR_HOST) || > (pdata->operating_mode == FSL_USB2_DR_OTG)) > if (ehci_fsl_setup_phy(hcd, pdata->phy_mode, 0)) diff --git >a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c index >74f62d6..86d154e 100644 >--- a/drivers/usb/host/ehci-hub.c >+++ b/drivers/usb/host/ehci-hub.c >@@ -305,6 +305,8 @@ static int ehci_bus_suspend (struct usb_hcd *hcd) > USB_PORT_STAT_HIGH_SPEED) > fs_idle_delay = true; > ehci_writel(ehci, t2, reg); >+ if (ehci_has_fsl_susp_errata(ehci)) >+ mdelay(10); Hi Jerry, Move the delay out of the spin lock. Other than that, it looks fine to me. > changed = 1; > } > } >diff --git a/drivers/usb/host/ehci.h b/drivers/usb/host/ehci.h index >3f3b74a..7706e4a 100644 >--- a/drivers/usb/host/ehci.h >+++ b/drivers/usb/host/ehci.h >@@ -219,6 +219,7 @@ struct ehci_hcd { /* one per controller */ > unsigned no_selective_suspend:1; > unsigned has_fsl_port_bug:1; /* FreeScale */ > unsigned has_fsl_hs_errata:1; /* Freescale HS quirk */ >+ unsigned has_fsl_susp_errata:1; /*Freescale SUSP quirk*/ > unsigned big_endian_mmio:1; > unsigned big_endian_desc:1; > unsigned big_endian_capbase:1; >@@ -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 >+ * setting SUSP bit > */ > #define ehci_has_fsl_hs_errata(e) ((e)->has_fsl_hs_errata) >+#define ehci_has_fsl_susp_errata(e) ((e)->has_fsl_susp_errata) > #else > #define ehci_has_fsl_hs_errata(e) (0) >+#define ehci_has_fsl_susp_errata(e) (0) > #endif > > /* >diff --git a/drivers/usb/host/fsl-mph-dr-of.c >b/drivers/usb/host/fsl-mph-dr-of.c >index f07ccb2..e90ddb5 100644 >--- a/drivers/usb/host/fsl-mph-dr-of.c >+++ b/drivers/usb/host/fsl-mph-dr-of.c >@@ -226,6 +226,8 @@ static int fsl_usb2_mph_dr_of_probe(struct >platform_device *ofdev) > of_property_read_bool(np, "fsl,usb-erratum-a007792"); > pdata->has_fsl_erratum_a005275 = > of_property_read_bool(np, "fsl,usb-erratum-a005275"); >+ pdata->has_fsl_erratum_a005697 = >+ of_property_read_bool(np, "fsl,usb_erratum-a005697"); > > /* > * Determine whether phy_clk_valid needs to be checked diff --git >a/include/linux/fsl_devices.h b/include/linux/fsl_devices.h index >f291291..60cef82 >100644 >--- a/include/linux/fsl_devices.h >+++ b/include/linux/fsl_devices.h >@@ -100,6 +100,7 @@ struct fsl_usb2_platform_data { > unsigned already_suspended:1; > unsigned has_fsl_erratum_a007792:1; > unsigned has_fsl_erratum_a005275:1; >+ unsigned has_fsl_erratum_a005697:1; > unsigned check_phy_clk_valid:1; > > /* register save area for suspend/resume */ >-- >1.7.9.5 Regards, Sriram