Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S964826AbcKXJtk (ORCPT ); Thu, 24 Nov 2016 04:49:40 -0500 Received: from mail-sn1nam01on0051.outbound.protection.outlook.com ([104.47.32.51]:15194 "EHLO NAM01-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S938664AbcKXJth (ORCPT ); Thu, 24 Nov 2016 04:49:37 -0500 X-Greylist: delayed 93758 seconds by postgrey-1.27 at vger.kernel.org; Thu, 24 Nov 2016 04:49:37 EST Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=nxp.com; nxp.com; dkim=none (message not signed) header.d=none;nxp.com; dmarc=fail action=none header.from=nxp.com;nxp.com; dkim=none (message not signed) header.d=none; X-IncomingTopHeaderMarker: OriginalChecksum:;UpperCasedChecksum:;SizeAsReceived:690;Count:8 From: Changming Huang To: , CC: , , , , Changming Huang , Ramneek Mehresh Subject: [PATCH] fsl/usb: Workarourd for USB erratum-A005697 Date: Thu, 24 Nov 2016 17:18:09 +0800 Message-ID: <1479979089-4715-1-git-send-email-jerry.huang@nxp.com> X-Mailer: git-send-email 1.7.9.5 X-IncomingHeaderCount: 8 X-EOPAttributedMessage: 0 X-Matching-Connectors: 131244536438645133;(91ab9b29-cfa4-454e-5278-08d120cd25b8);() X-Forefront-Antispam-Report: CIP:192.88.168.50;IPV:NLI;CTRY:US;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(7916002)(2980300002)(1109001)(1110001)(336004)(339900001)(199003)(189002)(7846002)(39410400001)(77096005)(189998001)(8666005)(97736004)(47776003)(50986999)(106466001)(305945005)(5001770100001)(551934003)(92566002)(50466002)(105606002)(36756003)(48376002)(33646002)(5660300001)(4720700003)(8676002)(356003)(4326007)(626004)(2906002)(86362001)(5003940100001)(104016004)(49486002)(2171001)(8936002)(68736007)(38730400001)(85426001)(81166006)(50226002)(81156014)(39390400001)(39400400001)(39380400001)(7059030);DIR:OUT;SFP:1101;SCL:1;SRVR:DM5PR03MB2475;H:tx30smr01.am.freescale.net;FPR:;SPF:Fail;PTR:InfoDomainNonexistent;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BL2FFO11FD046;1:Owxt5twVN9kGk020KcCvaUWLPkrn5e+bvn+BfOeUXB+P54PNw9r80hAhMKww75hmJFB4nlUJhotu1ldA+8avBmnwRvzdhrewYGiARlUT6PiZDolBatRrJgDpT8osQ4IwcdapCoDlOJamBzCW6zTQgukzQSbS0dGv4t1sVK3cNprQxA87hAewfLYvGv+EF/jZ1oJ8Qz0LQYlBJSQjtqqZdnWyIRdr8JiXIzmWGMiV4yGqU1leK9COnc7fU3CSml6WhRrngVGdk+T9Xd6w26rIekcktwDANBKXzE3Pd7zzOQ+9r0A6+1g03Wn30cvh17Iw063BIoKNoqPC8x/OWWQ9IrOfh9iXC9ClDvIzVcH6DWYdo8Pqp0UC0GQO7teBVBi7IiMRQY/lYwWuu6vkE5Azok3sh8lagaRGBpQvi7HgS3SbGJUgoiBodfeF2mPw5eqi7rV7zgKLSxa70VulHMCQVV6eBbcLCBBDxdqWeNugWizCAwnOsfaV38vjcgXb5wHnLriCXnW5LyrWawQqHWoPxNBNyxsjn1/JYZFeyRQkuJ6+Mh03WDw+tngY6xM9yFjnKYzPBSt1ig0tGShoelHdvtC7Bta5bqUMG74CPJcGwid5AJegjWoUHMf+ocQDQgoX5LZDo/hOP4GSwu/njrQIiowyj/b0nV3k4prmHpG4T6K1oyeQuXZwuQZkR2YZB/wbAA5KUmU3j0Aht5r0XFn6vfgPTatOPwnlv/hFik3FTEKuF4PyticJqSa4WBtsxsj8 MIME-Version: 1.0 Content-Type: text/plain X-Microsoft-Exchange-Diagnostics: 1;DM5PR03MB2475;2:G0mPpvi/J6/1X0mjQ6kU2hIub7psn8S46QLkfbnvEW68kp9L/ctEYpTzWIYDjkNOcndy/tWXyj0I+IOZW5AihQ6skhW1+Ih0fIbCVYsYbypAAwNKL4Jy/sRnjzk2qVPkJl6KMk6KWkBRwvNTZ/D91pN+Hvk8ExiP2FNVRPtwubk=;3:ZKLgw9Ws8gZE+7Licc/mPXSLt2e7oYPEUbyWfc8qNjgIwJXS88NCPTmdN1DzkKtd9Mf/WSge3IWU1rvGOnshPO3jejZEIQE0um1OzObEyPgcj/VuLfuZFTxHiBOCnrTwPz8eLZj01vRzlyhDahgaY+KRPkJ069JXVHn9+gEB0rx6JrMAKEkiMPiW3i/9LasO5fRKeLh/CbqLMj9Ru2bo0AvG2VH4MtS+vB0S6NUOjnVBfx1xi1MY4/DAbRA65OyKO/VCSKIc0PxCA7erm+xR3A== X-MS-Office365-Filtering-Correlation-Id: 62b97e5e-8f56-49da-802e-08d4144d0797 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:DM5PR03MB2475; X-Microsoft-Exchange-Diagnostics: 1;DM5PR03MB2475;25:TEwBT0GSFPnFwzUlsAzV1/P0UIERvS/mU5vggpDI61vSf2hdyp5hF9tmXpIdXBrpzQIO0gI9clGmCMQyVC7TOc2v2iyljnWjpTsEulu3TaTxYrmRtaexzSZ2IRp6rbHGV46Pqdse5avxBvABNIWxDgA9Hp3mFoah7Myz2CF/Ja8n/v7v24WC0B3PRZMgyaxJypNbOyBHDIe5LkrPRL+w1Kyl1DdKpRRRNxczKK1RH0R/7Fm/MME4s94d23tA2reXJTB6+OshmZcsC3u67IhgscCYzCgOrmRPI0VgiSORTg5uMJ1NPawF47PbEPm0OzXT6GXbl1EZiaGNJ6mRZlI5MVqPjDhYB9N7fxbhRWBmMgaXfYQXQdtwkBkqGbTDCQWueTAqQQhrGEWuaRcfjej2lOSTsPSuqT164xMUxB2vFcWBqhhwmsLpz+OQQXa77TpDRHoPoxBANSBsDw2+Hx19s2FPX+SrD7RHEsY5Y98rDizLKjyqjH9QMPieolhGg3xBL1iynkPkcUnFkSgTkw3Lx49Ue4svP7B2MBUcG86RVMpVun0bJM/KP0wvncMmmAl7gmKw+32cRYS9zdOP+0W+H8rd+Yzyp7WxPCNuNvtb2jaTDTcsi9YQdGHIdNsrrZNEgRLaY9QaH0qU0UETpki8OSodO4Iy9qzzZGXU+eGxU1giqbmsI0Vn3TcGgT3gxzF5iCkIfk+FGg11ESkU2pm3eVLQcix/BEbJkol3a2GIEy63cZ3JlG23Mpv1yw0pUtO4OGdUvRfn9gFcLlRnmejgmYfduhpao8l/2wlEjsxzoHBF52UovIrVoOssM5VXeHzn X-Microsoft-Exchange-Diagnostics: 1;DM5PR03MB2475;31:MIK64daEozHBSSn/Qu0wWOBDY8zfgXm1ZjF46x/sX3BMFn01vzja+HqCBsvKJm6PId7MI1En5b9YXuDY8GLnr1LypFloYoJjSeEBDVWS8wDXKR4mSgrw666DlatYADAZJUznEKe8VoC9UOkkps7mHw59tPhoIK+JSK19OwB5ZOeta+SwjEi0m47r6EajxSZR4E6sfOHtAdaobvSulB0KhjRoRoYtZgKs0TTs1tsYQ7h1OF5f6jdpRF0f5+h8To2Rz1uYL+Pf3GcCez+SUrT2lQ== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6095060)(601004)(2401047)(8121501046)(13024025)(13017025)(5005006)(13023025)(13018025)(13015025)(10201501046)(3002001)(6055026)(6096035)(20161123556025)(20161123561025)(20161123565025)(20161123559025)(20161123563025);SRVR:DM5PR03MB2475;BCL:0;PCL:0;RULEID:(400006);SRVR:DM5PR03MB2475; X-Microsoft-Exchange-Diagnostics: 1;DM5PR03MB2475;4:6GIq1mo1/PXliVOi/7oGlz125wTRdFhpReWLosYM0mNA96iBC/guySoeu6mKw73i6/oN/hNpsUA5vAofMcd+oeSrTUA6cGZ9uIqN2oWODoIIVAmialU3IwbFCAkEhBrvfS7MRK/DTPazZIy755AOB/Mvvl1wNdXBFnpmXzxcjtd+DsL/OhlKHBPUHemLXddWT9SuFhZDGXA4LQCrfZsGYOPlw1KIJWK3UpvWiDtCmRsupXDKfxE6nZkHLKaLuwsgwKI07V7AhbB0oHJKyOn1nJHei1iOVh1fgy6d4xI+IJQnsXuD8E7cGJTfe+URivSqSlQivpX6ZSNIMS/+rAKzOTXp7hTvH0NkyZ3N7iZ/+c0DPkfvOsdYUrVr4Y8zFTcGPXG4VJfDo0bl80RIcfrCIgPGBTQIXDYD0ipdMPLyObKuWWaYrHE0kG0gbKyVNTFo/A/ELD4d81ghiMLmvwwJl+/lLIx2kd7fGs2Vpt6brm/YLZUpNmNL3vHyIq6cycyQZL2DKUPm+XV1CkAYpeKKEFdHQbYs8QhokFzvmxpYgvXqstuXeKlE9nw584u9bK+xB9sPp+Y3R9lk/Q8Ysj5Jc6cjRXM/o2nmjPwCUBrJJpihWHlMQ8IQlWUrUX9+ji9mnY1JjmydQBjJM6PzupCPR2pQ62amkWE5c0uN7QLXNmcJM010kOdfObb81Z74Khuv3yFjZVgGbNEUAUOoagJdhjtdyRxEZ6uzsA2P81JFIVcFLuNRUWWk8zcGw8RZc013 X-Forefront-PRVS: 0136C1DDA4 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DM5PR03MB2475;23:z1AP9IV0/2PTVWnHvuHZHtZvSvxxYbB3xSLcHjBns?= =?us-ascii?Q?D33Nkey30TAQ+Ou4ntB8l4lq0SOMS9CISGfl6l5jcGfRw9PkDfZjSIMwkmvp?= =?us-ascii?Q?xsgkWs/lrCziyppdY4SNaV/fMKOfkh3/GSbc87D1p01l58y8VlqTeWjVvqEo?= =?us-ascii?Q?4JzcHBqPbfu7b7UNgbP4yNdCiBXaHpVYzrWQjMK+4/gHnG90oUUC0j5BKGp2?= =?us-ascii?Q?52h0UiV7JLOrt98IUyUkGpRvekdGu+p7Gha+jjFokgiH1X2HCbxsJWOTbGNG?= =?us-ascii?Q?TJH0EZahjd8xxSaaAwh3UDEFPlOTV9QTbYSo033dx6IkNk3URWbRU45fXmAa?= =?us-ascii?Q?KwDp+DpHQ1hlQlkTRi3EuY6E1WuJSg0rc0y50OW+wPJA6+4ze9RAwWcbbYU5?= =?us-ascii?Q?l+KDwMP/iFZdh1RKrnes9lMQ4w8aC8TmR/b7nfIn8XVIdVp81Cv4mbsgFRTN?= =?us-ascii?Q?SoIIFPxy6J97kwcW9PPVxHBa8W3OusaxIuky/oWfe52bmQTSwZrCn9JFtKiU?= =?us-ascii?Q?DPnzFmIcTAGx0j/c4C80UCvS1SXmsHnrPce5Rhll4NRvn7eU0G9OWOCU7btF?= =?us-ascii?Q?CRpJw5PQZFm3yEZIZEhEKvtXJWEaAbQ+IcCGnoPYhXZK+jt3y90ygl79oWOY?= =?us-ascii?Q?Bqu3PKKsDjI6TH2DQ7hK2ly2/Ynsh8yzHzdwqaR39Wt+poXdesO59sWKI7tj?= =?us-ascii?Q?6zTNGBn1z7ilZqqgCDurvoFgwu8yPF6ySLEf0epBEMOEGQ+etiIkaWO6XJt2?= =?us-ascii?Q?opYNFnZQnpdFfT1mP2wkltUdJIDu0FHN+ChBg+eG07PlwCTvtO0+NfEKRKTi?= =?us-ascii?Q?BAMpnKYOmNi7dDKyJjyIjFhxVIJI01uMsF5B5oThKueqJsvjmx562txv4Yca?= =?us-ascii?Q?i5wkOgnyS7mlyGBWctPdl+Py72r3pFrXAEX/G0mLLhKfUEHogzKYXCq125cW?= =?us-ascii?Q?kjJxwbv97zRDrJTX3H49iMEwE1qDGJKyUHGW9D9k6mx3b6ogbrdX1IjT80ku?= =?us-ascii?Q?ak2lUv6amjtvflK6w4ehrOgz8EzHu+DTBUOQ/qPRX7fd2RTpuDzCuoFX8MsD?= =?us-ascii?Q?W+V2aXocHX//otc+FicmnOkvxTMvciMx3sBNu22mSf9YfCmgXk7Y97XXHIQK?= =?us-ascii?Q?Nu1wLlapGre+pBAwc5q46J2X0SGx3eU8lSLfedZP9kKYOHt91PtTagx6gJtN?= =?us-ascii?Q?zp3R5rh3zxIwRKL8Rm/WXtrI4wlKc4NJuKLRerAuOhkZeQYuuo9kloPCg=3D?= =?us-ascii?Q?=3D?= X-Microsoft-Exchange-Diagnostics: 1;DM5PR03MB2475;6:5hgOVd45sGWCzvwPC63mDGioT0fEJYqKX4N10MF/D2k3PQlS8q4fMSrAhzUqFwna/lRbTm+xzW0aGvaVGcPjkjLjI6i//gc8gTn12fsHBvUBcdjxDQ7ypXwC/2cPxEqEBtJ2FHrs8Y4UcZKN9RJvUyrY7Tn/0qfZ6GovM5eVQbNzUKiPWV47BAAiCSZbDSPrU3xQczOrsFUo/vkUVyoQLw15C318GgcxpSkUT7JS+r2GTrUiqZZUrDUPHB94d416tsehOpUYjhWhOXav947VC5NWGC9FG7Hfapi9L+0fYFgs46UthwkgdoMw/+w7RAnED6oAssMDEv8vzIg6ZDoufg==;5:t4+V/r+W8+UB5O5slrhGC+JObYombsRxxWfqv9uo3hhJj6Fb2NugnSVrQdtZ+JrH/Z29OV+PI+2OKerz9lE8qhaCQBA1WAfKQGIdA4xQUkWPbKbCpu3URzemWfhvhpn/WXy7SkBaDR0TelyvvOjH5p/8fp+N7t47xZlAb4pKntVz51OBVxIfVdYHM5vKIRo+;24:70iYuBuNc/8N9VdOxb0ENzy424PeQVUGdD/fuIiAWFy/vHLZqs0mdF86lTrsjoAdMFl4o5okwFJaSLQRZXLShAzHG6qEmalpOEOWT78KRfA= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DM5PR03MB2475;7:pUD8SmBj0Q4a4Mh99N43wUZ3wN4C6vThNIFfyDdLjJ8Kmqzi0AuKmCKM9Z+SHaRJjR/RJBKyb7/LoGmiivViebl8ygPeiKDuE7JK4BQLYipVBzaTdKk7+Usb3o0dQKNoFNPjUWaXPIZ/DBmg0wlvkaGKdXFXRp74v1iU1yArfQTdcQUcjW7i8LdXKg+sp8fQ9uFCZ4vDhBiMH6x3ClXlQ4Na7GpMddIbEgrPJoU7K1FjTsjWm6Tx4EuyUOcX4DUwLCBe+5AKUbMNMdFsTJ9G1JgBnLks+gwtKa7MivZ03AGpEtvDdTqY/tM+DT4VGxuOfykxTwNXcU6edvZt/xT9yVCamMqK2jCN3LgHkxNaNq8= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Nov 2016 09:34:03.6773 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e;Ip=[192.88.168.50];Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR03MB2475 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3991 Lines: 103 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); 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