Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752775AbbGaGKr (ORCPT ); Fri, 31 Jul 2015 02:10:47 -0400 Received: from mail-bl2on0123.outbound.protection.outlook.com ([65.55.169.123]:64128 "EHLO na01-bl2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752710AbbGaGKo (ORCPT ); Fri, 31 Jul 2015 02:10:44 -0400 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=freescale.com; freescale.mail.onmicrosoft.com; dkim=none (message not signed) header.d=none; From: Nikhil Badola To: , CC: , , Nikhil Badola , Ramneek Mehresh Subject: [PATCH] drivers: usb: fsl: Workaround for USB erratum-A005275 Date: Fri, 31 Jul 2015 12:06:20 +0530 Message-ID: <1438324580-25308-1-git-send-email-nikhil.badola@freescale.com> X-Mailer: git-send-email 2.1.0 X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;BN1BFFO11FD042;1:Y5Tdo9J81wlEo0An7UyJPriY7xXvoPDvkZs3zD6irGXc6WBSjd2Fq+ufBV+wVWP680sQh9TeSHAK68dBXgR+R5iOO8cIfw0veW+Yh7wTXtuyBY3VMp/sGlGP8jje58Qun5gTnCqt4ffDvHqwQt5xg7lEBvTUanldUQUlhHbPJTJyE9+5dnSDeoywD4T3C73HOKKoXwzXU2tdMx9VKm0hODxX7FOjtpglEcFEWc3qgXoiRvMrA0cNeFwMA4o0qDR3iJt2Id0O2sgLmxkAhCbC8j6Ts4AHa7s7Q00tEo0htK8e6dKWnVdrH3U9R3tIid+YNW06UksTel8grrlSZ+/VHw== X-Forefront-Antispam-Report: CIP:192.88.168.50;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10019020)(6009001)(2980300002)(339900001)(199003)(189002)(105606002)(62966003)(92566002)(46102003)(19580395003)(50466002)(77096005)(106466001)(6806004)(77156002)(5001960100002)(5001770100001)(50226001)(107886002)(19580405001)(86362001)(85426001)(87936001)(33646002)(104016003)(48376002)(50986999)(229853001)(36756003)(189998001)(47776003)(4001430100001);DIR:OUT;SFP:1102;SCL:1;SRVR:CY1PR0301MB1625;H:tx30smr01.am.freescale.net;FPR:;SPF:Fail;MLV:sfv;A:1;MX:1;LANG:en; MIME-Version: 1.0 Content-Type: text/plain X-Microsoft-Exchange-Diagnostics: 1;CY1PR0301MB1625;2:8OtDmAiPDp3x/yTd2UcCfjZlyDxiDzxDiAb+bcvHLe//JbjOcKT/pE/kMlNGRlujkce29aqRlM5HyPw3rk6mytul6Rer93oxWaMLzgTWEKPVbo5ViNAyd5BXQRzpY9gkp2rEz/4ZG111of5gKLXjZqcAPsJQpR8WCjjVrK1G3eE=;3:/zgM6MBipvUpCiESGoNOpsJmMgklxwY5i5o7q2+2c42K9R1hdISguASE3QosavUJiCyTloQjdzagnQAW/FS71IGo63ZfKbKnlda7fMKHHz4h3aggSsaoBboqpvRVSeayWnpyz3MqhZdW3FM+GJWVmhjavpaghF/2ZAyvJ46xr7fcb1JKTFkdEGy3EkYBQb/ILODlHnaTFvjo5bMaTYyVNiDsC69EWBN9AW4/rxE7r4s=;25:Z5JW3IWR4o5EudfSh/3at/5daYFcirI+ssCEXnWclm849YqfpG9TnvieEErTzoRL1jPCOEDjxf0PbgWimJZkxyAbgBW4pLiVYf5vtD4sHtkHc8e29M4dpp3adji3pWM8gZmz55ROe6FRzMHqKzhIXs4G2+cMg8rQO6LOezrgY0G8Mt+HUHgE5o8B0eqTpx8vz1a+aHi3SBJNaQOzc3OKrp/6gkjhWnDtEugkW2jc+QQjOF98ByOl9NukgvwRt9Za X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR0301MB1625; X-Microsoft-Exchange-Diagnostics: 1;CY1PR0301MB1625;20:+0eYdeXvtxFsbBlpeoHnVqLoX4WSLZOcqzKTvk6vD60UfVhsg1kSF+/Qmu+q+FheReWs7dDN/oLvybgl23WCm0QG4DW6gjDFA9q0+M1y6dXeLGqoeFtfoDpGaS3udwweFEiu5Ow7y1wbaRcgsn95reZ5AQre/nvZs5Mug6bd+v/YESckohAQyQQ71yRxRC3uZU1Xkii5xL7EPyjCUPcFvBpS14jfsAFY8owqUrXF0lP5yuivI8yF26R+cUMoppxIfEHfTu0x6Yk1jbt/yEBLfEn3QC+4F4NsbRDGFLOqSmt33wjAG7SsHJJuf+0ek6r9f7WlEIgpzMfJB3/C+XG96QqSCPV3d7475h3+TLWNA4E=;4:bQOUZpCwLsqNAEdkPaKGIOCVMgSgAXfzXAI3Jq03PS265A8BSfuAVn8n+nVQgbVTv9+S8ZyhX3BV5XObuCKYn6fZQ8328KIVop+IvV1YLt4eei2mXD6OVPKO5AMFJz8dU9N8yMXg1JatoiCZtALIVtNtXHDH2mKUhYC2T/+hbE7jpSyDpqD8v/eZZqVHeMRCIVutKTNF82T8O1zfGJ1+oYGDrJHHRWObd1yJhovrMBsIexFMy8Y6bLh5Qh0qty0gYvtHC7lQXVFp2besQuKsWsyQM0iGlfpuNKHfOvWS7JE= CY1PR0301MB1625: X-MS-Exchange-Organization-RulesExecuted X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(5005006)(3002001);SRVR:CY1PR0301MB1625;BCL:0;PCL:0;RULEID:;SRVR:CY1PR0301MB1625; X-Forefront-PRVS: 0654257CF5 X-Microsoft-Exchange-Diagnostics: 1;CY1PR0301MB1625;23:GGe5QVgvHvii3u6DikRTSOS/1VkHK8+Z+zAe5Vdw+bSsZ2jVOnMt8xb9m0N8CCgpybs8rKDjcINQSGnUxhRwS94oV8JF/SQerEKAGnlwX8aXreeRAA1vdWZsMT5pLuwswLaI5jl3PcNonMf4AaLMwhTcLjLc72jpNi/1W/eDoqmUvdnfyn01nnuypmnROCCzn2/2hDKj4JiZwLIkKYw71ZKrw8+uC2QKPOOGHqshY17w2KOPL9It9OXwo0aYRUJFXqSv8S9xw3KTvuQ0LIqhGZQ+/MapAci6y90/VLV0TuE9kWD2dDFPdT+hyNJ4aIwUj/nltRq3SFnf8Z3rOSBWxaY/8JeZT7Zugi11/NjOw4CUbl761+YQn+Hz5ayGWtatREre2MoAeaGTR8X2mAO0EbuTQS44qt+vNG9cGKIlGCoTIxegOdLw9IScoz2iPBu862qckadRcs61aohIM6ltQQWfwi5szQk144RUXpNLMo1tnpWXoeQ18n+Bp1IDa0orP4Fl9DnDnish2MBl0lQwTUqGzErCNKVpprggGp8VTP9c41C/bVReFu2dzQ6FreK0q3PoHMdk2p1vcGKyvbr8zRrjsKtDq3XBR2V59KXSAY9+7dihKdwx0NivDvKwBNVMDgGGB6vLFTdNseNACLpAqZ77b3A6Xh83uEs0u2dg+6kgP+RoZ4hZhG8rCn1/SYJfo6oMWSbv65Cb20hb47OoF5odssw8hZIJm1a2kkltL+Ms/DfzZG+3ENJL2jYZrl0f6TjG4XwC5M0PX5D5abLYv9Zjnx9gyy+RAbuY3cezqUcpcKVplf1pHA8LtDRUFNsEnNMPjb6ni0J170ZtVMq/GSJYSLeUdYR3dPND5XbR1suWR5PlHkPia2sHqqAHVohI X-Microsoft-Exchange-Diagnostics: 1;CY1PR0301MB1625;5:Nv23VnbP4KJ9RDiPTx0RWspszU3m5/eJhSUJoPDEYNyeUcvkTZxXEyf8gHhK9seyesu0K1qZe38d2usRuS9Qlw25Wn8VcZVfyTxK5xJr8B+R4ofifR0ncYon9NOaQme26ER1QaDPk7cWx8EZ0YkAtw==;24:/XKBIPMmq9Onm47pyVyzPesUCacvSSl2dGX7d4Sj/FxRoBag9uyB1ZGN6jAbPTemyw3eeYeRcM+1Q0XeLbNJF5NmusL4tK8h1KOFEIM4tes=;20:eJx7jpvaPYv4ASFF0HxhKeaQ8CkRyr/ABgt+i1wBtOOdxJlhvmaAnbghG1SB8Wfkkn7KwCeqgSq7YHNEvsZ/ww== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 31 Jul 2015 06:10:40.3907 (UTC) X-MS-Exchange-CrossTenant-Id: 710a03f5-10f6-4d38-9ff4-a80b81da590d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=710a03f5-10f6-4d38-9ff4-a80b81da590d;Ip=[192.88.168.50];Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR0301MB1625 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4282 Lines: 119 Incoming packets in high speed are randomly corrupted by h/w resulting in multiple errors. This workaround makes FS as default mode in all affected socs by disabling HS chirp signalling.This errata does not affect FS and LS mode. Forces all HS devices to connect in FS mode for all socs affected by this erratum: P3041 and P2041 rev 1.0 and 1.1 P5020 and P5010 rev 1.0 and 2.0 P5040, P1010 and T4240 rev 1.0 Signed-off-by: Ramneek Mehresh Signed-off-by: Nikhil Badola --- drivers/usb/host/ehci-fsl.c | 4 ++++ drivers/usb/host/ehci-hub.c | 7 +++++++ drivers/usb/host/ehci.h | 12 ++++++++++++ drivers/usb/host/fsl-mph-dr-of.c | 4 ++++ include/linux/fsl_devices.h | 1 + 5 files changed, 28 insertions(+) diff --git a/drivers/usb/host/ehci-fsl.c b/drivers/usb/host/ehci-fsl.c index 202dafb..3b6eb21 100644 --- a/drivers/usb/host/ehci-fsl.c +++ b/drivers/usb/host/ehci-fsl.c @@ -278,6 +278,10 @@ static int ehci_fsl_usb_setup(struct ehci_hcd *ehci) out_be32(non_ehci + FSL_SOC_USB_SNOOP2, 0x80000000 | SNOOP_SIZE_2GB); } + /* Deal with USB erratum A-005275 */ + if (pdata->has_fsl_erratum_a005275 == 1) + ehci->has_fsl_hs_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 22abb68..fb381cf 100644 --- a/drivers/usb/host/ehci-hub.c +++ b/drivers/usb/host/ehci-hub.c @@ -1222,6 +1222,13 @@ int ehci_hub_control( ehci->reset_done [wIndex] = jiffies + msecs_to_jiffies (50); } + + /* Force full-speed connect for FSL high-speed erratum; + * disable HS Chirp by setting PFSC bit + */ + if (ehci_has_fsl_hs_errata(ehci)) + temp |= (1 << PORTSC_FSL_PFSC); + ehci_writel(ehci, temp, status_reg); break; diff --git a/drivers/usb/host/ehci.h b/drivers/usb/host/ehci.h index f700157..c232838 100644 --- a/drivers/usb/host/ehci.h +++ b/drivers/usb/host/ehci.h @@ -215,6 +215,7 @@ struct ehci_hcd { /* one per controller */ /* SILICON QUIRKS */ unsigned no_selective_suspend:1; unsigned has_fsl_port_bug:1; /* FreeScale */ + unsigned has_fsl_hs_errata:1; /* Freescale HS quirk */ unsigned big_endian_mmio:1; unsigned big_endian_desc:1; unsigned big_endian_capbase:1; @@ -675,6 +676,17 @@ ehci_port_speed(struct ehci_hcd *ehci, unsigned int portsc) #define ehci_port_speed(ehci, portsc) USB_PORT_STAT_HIGH_SPEED #endif +#define PORTSC_FSL_PFSC 24 /* Port Force Full-Speed Connect */ + +#if defined(CONFIG_PPC_85xx) +/* Some Freescale processors have an erratum (USB A-005275) in which + * incoming packets get corrupted in HS mode + */ +#define ehci_has_fsl_hs_errata(e) ((e)->has_fsl_hs_errata) +#else +#define ehci_has_fsl_hs_errata(e) (0) +#endif + /*-------------------------------------------------------------------------*/ #ifdef CONFIG_PPC_83xx diff --git a/drivers/usb/host/fsl-mph-dr-of.c b/drivers/usb/host/fsl-mph-dr-of.c index 9f73141..534c4c5 100644 --- a/drivers/usb/host/fsl-mph-dr-of.c +++ b/drivers/usb/host/fsl-mph-dr-of.c @@ -221,6 +221,10 @@ static int fsl_usb2_mph_dr_of_probe(struct platform_device *ofdev) pdata->has_fsl_erratum_a007792 = 1; else pdata->has_fsl_erratum_a007792 = 0; + if (of_get_property(np, "fsl,usb-erratum-a005275", NULL)) + pdata->has_fsl_erratum_a005275 = 1; + else + pdata->has_fsl_erratum_a005275 = 0; /* * Determine whether phy_clk_valid needs to be checked diff --git a/include/linux/fsl_devices.h b/include/linux/fsl_devices.h index cebdbbb..f291291 100644 --- a/include/linux/fsl_devices.h +++ b/include/linux/fsl_devices.h @@ -99,6 +99,7 @@ struct fsl_usb2_platform_data { unsigned suspended:1; unsigned already_suspended:1; unsigned has_fsl_erratum_a007792:1; + unsigned has_fsl_erratum_a005275:1; unsigned check_phy_clk_valid:1; /* register save area for suspend/resume */ -- 2.1.0 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/