Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S935067AbcJUPpS (ORCPT ); Fri, 21 Oct 2016 11:45:18 -0400 Received: from mail-bn3nam01on0064.outbound.protection.outlook.com ([104.47.33.64]:27456 "EHLO NAM01-BN3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S933352AbcJUPpQ (ORCPT ); Fri, 21 Oct 2016 11:45:16 -0400 X-Greylist: delayed 5594 seconds by postgrey-1.27 at vger.kernel.org; Fri, 21 Oct 2016 11:45:15 EDT Authentication-Results: spf=none (sender IP is 192.88.168.50) smtp.mailfrom=lvd5587.freescale.com; vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=fail action=none header.from=nxp.com; From: Sriram Dash To: , CC: , , , , Sriram Dash , Rajat Srivastava , Rajesh Bhagat Subject: [PATCH] usb: xhci: Workaround for erratum-A010129 Date: Fri, 21 Oct 2016 19:41:49 +0530 Message-ID: <1477059109-3938-1-git-send-email-sriram.dash@nxp.com> X-Mailer: git-send-email 1.7.7.4 X-EOPAttributedMessage: 0 X-Matching-Connectors: 131215327193171389;(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)(6039001)(7916002)(2980300002)(428002)(199003)(189002)(8936002)(52956003)(50226002)(4720700003)(5003940100001)(47776003)(960300001)(626004)(81166006)(81156014)(45336002)(6666003)(87936001)(48376002)(19580395003)(101416001)(33646002)(4326007)(36756003)(19580405001)(586003)(50466002)(575784001)(86372001)(2906002)(68736007)(189998001)(5001770100001)(92566002)(97736004)(42882006)(50986999)(229853001)(46386002)(7846002)(5660300001)(90966002)(105586002)(11100500001)(8676002)(106466001)(8666005)(305945005)(103686003)(42186005)(356003)(7059030);DIR:OUT;SFP:1101;SCL:1;SRVR:BN3PR03MB2369;H:tx30smr01.am.freescale.net;FPR:;SPF:None;PTR:InfoDomainNonexistent;A:0;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BL2FFO11FD059;1:TaX0J3vvfXg8IdKTOFMUglziXQbE4W9PN/gKXcqJyS40zWpM4ZIYjnOFWmnPg2tcPBjpLTm8JvsHDDuRyajp/eC3Y9F5XZ1QDE2Sb58cA6IqapCckL2AiU+IAxUyO+pE4Edl7TdVeTnsq5bp8/YVMLHwTgT9gqwF0JSQbninG7rhMLGrQfE+Zwg5bstvgjLPQaXpVkpKeGQ3UItW+Zr9uQNfbamtL1hh4fFpzGLY8KaizUpp/Urt79htvs2foLdEdiyL+93aoPuvLgfNsayDxIcsU4kb4+yV+DJE7XXwJ8UCGQSTnKD8q1R2R6/Wjyci9wQAhCl8bmkVovNZvUFYlbZ7azkUC9JN+TU3I0zYjauZEOVZ/quugjOYZEH92GxdOcfT2WgpuiMjqMdwkVwrxbvCiSQDIT8s+MS/JujEbvAzBd1t+1wSxdIkf831l9KnbQdioM7gHs6Cg029J76EupFMB+b2wdWPjg0SBgs3SkQcJ5msebabKrEm05KMY8tUKLpYhtpQehBga5T14asTQH2MePkX8nIBmxZ1oJYf0G/FQZudimWP9YnKIOgCHlC+ZviEEAAx0O6cYy7hlIqG9ohYjyNsoFQ7xuBuENfRxu/4qyVpXkJ/VDhKqtIwwaDliMuwdY8ChyCIWlaj+H5AZw== MIME-Version: 1.0 Content-Type: text/plain X-MS-Office365-Filtering-Correlation-Id: 606c46fd-10b1-45ab-85bd-08d3f9bc38e6 X-Microsoft-Exchange-Diagnostics: 1;BN3PR03MB2369;2:7v9gA3cLDqPSJSP0wBGTUxDekqHfKpGuB9wdj5LqPHNruKxc4rOAmynbwLGHYloEcXAc23ehgfZRJlE14dtB4eCb01FpFvoc+vUEA2yT6JGTs9PrJmrcfGL+IdCQyFWMncxHuoqbz2Yf2G9gQw+G41iYIPOJCDW4jyyli1L8iBnlwKCg4Lsw774Sln6+ihPwI0kCdjzWbOmYBravDmvGyQ==;3:f4hp7+LCT5WNnASv2JkG79aH+ESdueSUokor4sDGcfsFR38l4w5jXWq2TkGs5OAaSdA+y3XrBTsnwuhbT4x0TjrWZsgXkmLfbIVB88BDi5LLimhwEmBicYCWB42GBMT9lRtfnLS6/R7TQWAbS/MsBluZVbAmDDW3s3lZvKKKAHHv5XFcMM+xta15SyJAghGxmiaBAX1DA1aw07eVnDWQ9v6nkDIAwK1XWA7B1dpZy9oBslJ1rdZvK1O8saPECw7X X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BN3PR03MB2369; X-Microsoft-Exchange-Diagnostics: 1;BN3PR03MB2369;25:PNv4l2cy5fN5IoatZotYnFbAcYHa/uUT87WTAFD1O+I3FpncpRk0GQecvggC669aEVtEXXR2B6/ATUci+PrZ5FXznTLDN9PKQ8N8wMArVJV28O3NvNoioNeMhQ+Af4c4IsCMITcFDpZnTCcPMCgittGPXrChcrTVTg5tw8HPmd0hc3TNwSgFZEZYoELIJy7Bm0O80P85ll+4xj1aW0t2chP/OUDTUCyDAPE9n+spxGb1KDGmjgVzqWO14MAWUEe1h1FIVGf9ROjERl6mYNNxMFLu9MnT6EyBg/kf9diT6FmEMDBwxzg3Dj5Tnd5bOVwB3HFPgFu8ownHoZfmhonFRZgI5Ic90eOnhmp5ouBfShpqSUGGcQ6E+elY3Va5zyFVIfizOX9FlmgtUiaPN7qTtb7b9MTv7ROsthvUWxp/RAIsTh5G04dFLWzteK3rbk1h7Op0RAGNN00IUlasqS4PHLQ5VSdJscxrcRPEj/Ym83FPIgrb/szwWN1P3lvKl3HnlTPAMJK/U6rGUpYlj4SeGWhUn1ITjowqtiDQHWUP2JtyqGWjJV39YZrR12V/ZWBGOjGXgkN0DszkQJSPgv6JzT98NAXwgjXpCpSszaoGhYovO7uW884kJrTMmLgp+PhHzJE98lcsQY6ewNobwf4THxdPHyD6Dd37I9ALYX/64NJ6gdEJ2Jz2TZ6xNhUel76/b8FNtbM4GZ7Gi1dDsi8b6lnI4XP3cbQrcFCYP79Kz1DLfexTWysFLBM+Guu9vOMoAEELZVNLzOnrvgXyiKjsY0dmsIbwdytDfTNDEUM9kNF2H8hE2vo5gvxih2haqbn7 X-Microsoft-Exchange-Diagnostics: 1;BN3PR03MB2369;31:V9GmN+MBgTXcQgiFHxohiXW7Vb1ffgVE47x/F8pbYRWu9XHwehi9WB4sdpdZZ8juVh3yuhncnazGp/BIgwXAQ2rXrcQggvHiE67JPAWjUGHvTHjOkWKufWMAT6ABdbUlVo/niv2TSpWlmNMqCeXAdNM3OD4qZFtSE9gYiuh9nLF0kThkASW11OwNsqadEx8LZlywpDo7EsfsiQTccbXJWIVfgsOORxZBwz53Xt7qAl5apGpeUOpKxrBW/C2VuHO7DQ9enPz61P+mg5Atj08DFw==;4:UqHmAFRmvfLH20lnzyOCWpF1sm1Gai4bM6O2KAGa7z+ORcXrmTVChidMib+RqQo+ooD7DBicsm+qMV/7Iz5U3DttXkb7jZu0k/NqU4QZzT+RS8hoaEg/EqsYl0RTh7jLbeTZMakGkgXRzTkfogbxy/IQPLmvKRQPg1FexVwJbGz+wiQrNeL0raFtl7X1Go6+s0fNQv7ndQlZzUvftwp7tjjO3Q1S8UI34Rxw817qEouMlv4BkB4j4W/blw32BhG40u7prph6s/SWrain7fd+UVtIQXvzI9DUoOUlmxenj1UmBt4OBnqJKQwIZYoVqSjJFJli9NjI4IxGVszoTDLDBPx7xojdrZjEtFkHsIPPwRbJe8gOqcGf21n5OPJ+k4Yw5XCwSQsdfjAJL8i0nFZdSfbqSj+9Z420LfDG7Jh6FlTt0mNmhp82DCu2VLsIWJmmK5GRbxJWG0iZ5qESRRDXGZrtg1z4PomP3lNymHLDxwphS+kKaa2xcEgswpA0LsqURqTL6O+4SNde+RMGR6ZOSY4HZP6xYuHymOmtr57dGCTYtuiQX5qACz2KIDX0JaFr X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040176)(601004)(2401047)(8121501046)(13018025)(13017025)(13015025)(13024025)(13023025)(5005006)(10201501046)(3002001)(6055026);SRVR:BN3PR03MB2369;BCL:0;PCL:0;RULEID:(400006);SRVR:BN3PR03MB2369; X-Forefront-PRVS: 01026E1310 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BN3PR03MB2369;23:uUpPykR9F9UH3d9eBPHtNUo65SK0Qr02aIy7mjIEz?= =?us-ascii?Q?tIu4EgwQjq27AGWnHGiuPuozlI4tYobaynm2k+NVnjVH/WG5Sbj/m+Cx/SVp?= =?us-ascii?Q?bPykWemM4NEiGhrVw3IOdu+JE6eDH7vR8GbIrzhfMgHQWtW0FQD6pjKi0Cuo?= =?us-ascii?Q?T58ZDJeCWzDQ/ejtw8HoHHWxL/gPx/Vtk/AL+VuGq4RIk+0RP6J78hU16I5g?= =?us-ascii?Q?hcPn70qYnISTgwmhmAp0igL91liN+8+msLeFo+9VzyZ15Kscxu0eywXTA0aR?= =?us-ascii?Q?DCWlRCwlPDBlUPhm5lAsG24Q5LPTznEyhvWqAvGPNeBDqkTHT87JTB1SdB1b?= =?us-ascii?Q?C7JZFekHRLCyzML86PRELERkKqgRV5eHkDqm4JucvppAU7umIx82OaCISuk5?= =?us-ascii?Q?kHUD78TCH21WS0fN0xbvnVR1cnDJBiTBcvPuknD4n1pW7FS51Srq9lbBP3/d?= =?us-ascii?Q?uhKA+7VX7nJS1Wx0RRPOAKr8R1VSr6QfFU/DCXNEqblEK2UkAv4rR3SyDSM4?= =?us-ascii?Q?uRTqjtWU2IGHicyh0F/SeQcNxfi7h5eEiDupYz2m0tdmELX/lxyF2EPjirWy?= =?us-ascii?Q?5HL/jZcL27HdRmRFoC8MhRuIJzvkA9H9Z9FoSaJwfyg+fhhnnf2vduzflIi2?= =?us-ascii?Q?QL0FP4W95i9bXPIA4zeZpqFH/DqnbKIis+o0HVVtnL+vARBg2fmeGGfkLbMu?= =?us-ascii?Q?tXmqlnkaXKxyGitGbvpNP1PSCuBwcRzqFeTFZOd3cntebwCKLo8FkaoKEzU4?= =?us-ascii?Q?LbEa3h6EpHlDcZjb1JrVDwSIC1pksjJv39FeMczbTifL1rpfCoqWiCCTx1wi?= =?us-ascii?Q?ecZs/nkMnR6r1DmLtK/Gz5vLblErfSRoBplZjeIVtwSdPj6GEAHQRYItYpH3?= =?us-ascii?Q?x8XzOyDIQ2JwmiADWRMs/o1xcI2oYB6lE/3EE0QgPc4P3kQwC52y1Ckg+HpE?= =?us-ascii?Q?bXYtsEhCSuXWDyVEYAIB0NGYXQOffTDw69aaAUMhdQCXG9vTyDt1Yxpal15S?= =?us-ascii?Q?dSLllNv9x9Jp4qXDEc+cFACqYe0jiU8BA1nsUu481Bl7cHSI0YRtXYPhDSLd?= =?us-ascii?Q?qUCjokKvXE2hQrslkfjOYDLDQiDIB9xP8fwxFzXF/2doQu4kTwlrjLHOASws?= =?us-ascii?Q?nDu/l3YEAj6t9dYUp8h8rOMGYrBNai6BpzISyD18yRgVdNyyk0UJTgiFfgOX?= =?us-ascii?Q?QZIPFaQMVPREHTKa7AdzrA8/qmjI+vCtbQAEgGMWvwYUmcDs1SnA2NV0Vgvh?= =?us-ascii?Q?k8CnYuDtBZ+OR41EFz75o1BBt4oPaC4UW4P9dEz05vT94olQul4O/HmrbvIl?= =?us-ascii?B?UT09?= X-Microsoft-Exchange-Diagnostics: 1;BN3PR03MB2369;6:Whe1PlAXVWspCSGoQ/qjJNkgUz25S1d35XvgyscCyOxGo5sIvROZZlm4GFplvDyg2Ei2Z5t5DElMt/gbRIn2nyu+Tz1UbkOZaBEv7hNuKjTHpPa+FnGup4LEtYBgWenjDMJuWt+n6f2Zt3FZ5UhdExubExTXl48utoX+uHqsDrAfUWC0210Iqeusn64F/s2xgFZeZqhEK+R0bXBebXTL0OFMosOeeO2gz+0Ri3ujWKRrUeQQ85fWtnlOruTvArNMBpCdus9i5kIJms2QtG4fgm803GMu5xH6ClWKiKaj3iaqYRch3Bo/r2xdUsAyh7Jm;5:TkqtQF4vXGoJw0M7CYlAJgUTQGXKAyXSX3B0BDG2CXMRdjxU40RujZmP01rpPPrypV0IGsXjGB02Z9HgD25pGpsDW0Zpa1bVHIu1QyzcWqNWW58BWoDmAwaT6kGFDYoj2Zu1O/TIqjJUkqDVMFpoCN9R7UMYGMiDxC1pTyIf+3zpd8PKClvTY2t/HrJT3OGo;24:loNQ4skTeWryNnUVMc/6aOCAQxJDzMXnlz/ZoKCULD9cDKcIwfFFsaScfdna/UFnuyAlogMgw8Xk2i6ZdG3VWMpdf+qQw2uTK95FaDurWKA= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;BN3PR03MB2369;7:/41araOghBwk+tQAVfOe6PgoBiA8GRDGZcBjI9VDUZRDxZRqQQjz0tOuNO7Gw6V4Pg4EP9CizT2HMlwAyXMwBYw3pSUMhkN0aEK95gSD0xha0o88USV1/NlsdmXSonwlyXaAyphIYLVIyMtmvj3TGju77zB+kEu0G/MEifCZ/vidUimcYoD3dn2KFaAQ4X2Xqd4VPiBtyc8aYRAdfqanGXCOKoKEIU6Oanvd/Ece4kiUEZGsipMd1IdUFBlZwBg7Dt7BP9x/ABVMNvVONTaQqZ05JB2qqXTUeKa6VOqG3zy8G0iEoVwqQU9G/hMTp98q0DOhXjApkwLv7p/BGDWhwqWgJV4zr3hfeiORQAIixMY= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Oct 2016 14:11:59.1299 (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: BN3PR03MB2369 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2601 Lines: 72 For the USB3.0 controller, USB 2.0 reset not driven while port is in Resume state. So, do not program the USB 2.0 reset (PORTSC[PR]=1) while in Resume state. Signed-off-by: Rajat Srivastava Signed-off-by: Sriram Dash Signed-off-by: Rajesh Bhagat --- drivers/usb/host/xhci-hub.c | 28 +++++++++++++++++++++++++++- drivers/usb/host/xhci.h | 1 + 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c index 730b9fd..3def0dd 100644 --- a/drivers/usb/host/xhci-hub.c +++ b/drivers/usb/host/xhci-hub.c @@ -878,7 +878,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, struct xhci_hcd *xhci = hcd_to_xhci(hcd); int max_ports; unsigned long flags; - u32 temp, status; + u32 temp, status, tmp_status = 0; int retval = 0; __le32 __iomem **port_array; int slot_id; @@ -1098,6 +1098,32 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, spin_lock_irqsave(&xhci->lock, flags); break; case USB_PORT_FEAT_RESET: + /* + * Erratum : A010129 + * Synopsys STAR 9000962562. + * USB 2.0 Reset Not Driven While Port in Resume + * While in USB 2.0 resume state (the PORTSC.PLS + * register bit is set to 4'd15), if the xHCI driver + * programs the PORTSC.PR register bit to 1, the + * controller does not drive a USB 2.0 reset + * and it does not generate a PORTSC.PRC=1 interrupt. + * So, The xHCI driver should not program a USB + * 2.0 reset (PORTSC.PR=1) while in resume + * (PORTSC.PLS=4'd15). + */ + if (xhci->quirks & XHCI_PORT_RST_ON_RESUME) { + tmp_status = readl(port_array[wIndex]); + spin_unlock_irqrestore(&xhci->lock, flags); + if (!DEV_SUPERSPEED(tmp_status) + && (tmp_status & PORT_PLS_MASK) + == XDEV_RESUME) { + xhci_err(xhci, "skip port reset\n"); + spin_lock_irqsave(&xhci->lock, flags); + break; + } + spin_lock_irqsave(&xhci->lock, flags); + } + temp = (temp | PORT_RESET); writel(temp, port_array[wIndex]); diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h index b2c1dc5..c07e267 100644 --- a/drivers/usb/host/xhci.h +++ b/drivers/usb/host/xhci.h @@ -1653,6 +1653,7 @@ struct xhci_hcd { #define XHCI_MTK_HOST (1 << 21) #define XHCI_SSIC_PORT_UNUSED (1 << 22) #define XHCI_NO_64BIT_SUPPORT (1 << 23) +#define XHCI_PORT_RST_ON_RESUME (1 << 24) unsigned int num_active_eps; unsigned int limit_active_eps; /* There are two roothubs to keep track of bus suspend info for */ -- 2.1.0