Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752888AbbGWKBF (ORCPT ); Thu, 23 Jul 2015 06:01:05 -0400 Received: from mail-bn1bn0107.outbound.protection.outlook.com ([157.56.110.107]:52736 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752185AbbGWKAy (ORCPT ); Thu, 23 Jul 2015 06:00:54 -0400 Authentication-Results: spf=fail (sender IP is 192.88.158.2) smtp.mailfrom=freescale.com; freescale.mail.onmicrosoft.com; dkim=none (message not signed) header.d=none; From: Nikhil Badola To: , , CC: , , Nikhil Badola Subject: [PATCH 2/3] drivers: usb: dwc3: Add adjust_frame_length_quirk Date: Thu, 23 Jul 2015 15:41:35 +0530 Message-ID: <1437646295-1858-1-git-send-email-nikhil.badola@freescale.com> X-Mailer: git-send-email 2.1.0 X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;BN1AFFO11FD028;1:78PMjNTENxAhLuOmcftoFqffGwe1LJ+zqPauNNZw283LAY+swxM/xHFs/wezgJC3VEYoW4RTE3e+TAqo+/TM/cqtzyV4A0loUBjPsmOy6oTpY/Fq8Hy83Qbyj3eXlygokSuL+K00QnXBEYP+phN4Sp7vlINVgjAZaH6awdb1ZhXh8doFHX4m5U+6R9XHwJXeYWkU6rPPfPmMLe+Z4AKuwy6HDu7mgcbUwY3ggkKbPC7c2JX8MKLaW/h9PLe1QG0mRPADy3kLfWM/dSM6VaGaLsyj1pf0ejU9UR2NRGt/HEY/T03o6k6+Y0oX0EJtoUpHh4Vb9+qpDK0iCk+eY+BeVQ== X-Forefront-Antispam-Report: CIP:192.88.158.2;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10019020)(6009001)(2980300002)(339900001)(189002)(199003)(77156002)(19580395003)(62966003)(46102003)(86362001)(19580405001)(85426001)(92566002)(106466001)(105606002)(36756003)(107886002)(87936001)(189998001)(6806004)(5003940100001)(5001960100002)(50226001)(50466002)(50986999)(77096005)(229853001)(5001770100001)(2201001)(33646002)(104016003)(47776003)(5001920100001)(4001430100001);DIR:OUT;SFP:1102;SCL:1;SRVR:BLUPR0301MB1619;H:az84smr01.freescale.net;FPR:;SPF:Fail;MLV:sfv;MX:1;A:1;LANG:en; MIME-Version: 1.0 Content-Type: text/plain X-Microsoft-Exchange-Diagnostics: 1;BLUPR0301MB1619;2:YnCxpduZcxo7ylSSaSjPi7mu/7qOH7MvWhjs81wJ4YieWmFaSr0PPSwD+olrcIin;3:8P3zgg2MOA6n9oZbfUdi7/YD2pZfagDHPn0IS7XjEjKrGu1TBQJjcywZTZBlJ1YZxScz2Lo0ozzVawicyBZ7rmRBPzufifmZFwN97vnyfNZG5fDjC0WAMqgoJlATo/DJX8ycABQ8jPo8F35ko/lAluWib26QlO917VDBOKIguXj7cB9+CaRHY3fseOK+IXUtWklOmUIYiyJ4hVSmp/HYXceuvjyd2CsDrMZfIu6tsn0=;25:WxpQLV8PMVM3Ay/3cj+8me3Fut+bvpRzPGz3Sa+KjkBPq0VwTk4ax0LWZV6XHK+ZJW7uT4sulLVrTKDJuEJtZ9mTqRIOgTlNhNZtcCs5tfLaR799SU5p+H0nEpyr430UcNS/x/4tlMMq40GcnJSDZbRH5pAm/OcLbcYiGYhrLncBf/WQ20m+0Elb52XvGUM1lwDjOHcSvO9yd8AqwnyxdJuOetrZ4BFyS1kQE2TZYf/oHrh2v0llWnCULQyWR8Xu;20:xI9M3clv7IoYB9wUSy2b9ceAbfM8jO8vlqq85UyPLZES9h5hUmE4Ziu391k/vjuczwmBWkBecUEvhrOp7tMmQuvJLm8h//1eL465b3As7JqqISU5XGikrPjzcU7FnLXuBjgIy33IFjNNoV8BTDUUKSB5WjZL684z4JKPs74Cp7einr9LKP0oW0XU9eVt6AdiAPwEsIzOScmw2xDl28HbI0f2MgZta45Xpls7X01lmM6d/PLwlKW0QK5KDrVMX49G6RxYnYccDGrxSFa4PFUJIbVrErCIVdF0kToO0MFX81eJ5sx7Pi78UwqJdI1ncll64R2nb9WsihWKAlpUWX3D4cS2UeimbyotOILYxcb/MyA= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BLUPR0301MB1619; BLUPR0301MB1619: 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:BLUPR0301MB1619;BCL:0;PCL:0;RULEID:;SRVR:BLUPR0301MB1619; X-Microsoft-Exchange-Diagnostics: 1;BLUPR0301MB1619;4:hle7ODaPn2EmCyqznH6zmUx9w3sdZy4qcdiKNatzKQQLdD0FpZS4ZtlZDeSv7R1pcYge9UWQYBeNN3/cBmatXKw6uT8Jdfmr1V6jimR957NjY9kuxIrVF94vOIeBdHm48Iq8OFIK0CZ58+beFa9GueLRVYJTAO6jlVyix21tyD2z96r+jNbStR6ggfQfliXX565HFcQPxdLwuVNQzQrQG1/52/MkUJIIn95DruktO+stKBT9nghuzPSg87npEYmVLlFZklY8y1G84rfaDz9K0+5EZldCN9rM4hc+TH49N4c= X-Forefront-PRVS: 06469BCC91 X-Microsoft-Exchange-Diagnostics: 1;BLUPR0301MB1619;23:Wqp2agik3jtCcKLJJwHK+nBos6H4Y0f1ZyUA390tju/tkk0zQKoK6rnYeRW7U8qILBftZR6zPjZjEa6HGMguly7+9lgxpNPjkQnQe8VWtQHpYXmwpTTcbzXiGd7HnRodnPdfzO796+0D+KMW1wYhC5iDMVwNTD0pcSL9x7sCKx3L3R9HasuZ0zMEnhPO8qkrkFFwO051WCs58Dk2E0qEcJ5rPcGZvJJH/O5H+2KpPZif8ornRzTJuORMrPy899dpn5F4Lw4FQRPjKW2OkQB2YjzeN/hmvfcePDjpmeiCOc/BWZr4WHWeTvc1KH26MnfJRGHQSmItXwfQWVO0gCSkyXMkJYk6bQriY5YVmmy8STyw9Ocl7lz422rbCj1N6uOVaNv8huxiwBg7/BehFQzRVMgMHfyUsx6oee8J/4iPRu3FaoUGoyQx7fM29NmfuYmrvBqntEjW5kUzty+Ke5TVV4E6qt3LWFD1FsYFLVb3OlSOMvEGbyWveTQJhiVsYzZkP2zOI/T9twcxgWP6J6qnxnzLvi98TYclL2NS91JRvHxaSAuqdRjwgXuwq+sqUxivagBmyzpEEIkm++UI4TChLLkBZaZSsqfkZ6cSSC66lwgXUAL4PAgXLqfSTX71ph3qgOhPOxu/TfNdSUbWRr+CMG9L337fexcm7ebpSWujBw7mM6DGzzROwCIUaLSSb87YRpnEcoDBCmiOaxoYoSFhCr1i/E0vbTr8KUNtfyExXUlL+x02kf2Ps6cxgI0ye9OP9qtgLTro03pcL2yXGC/lBAOo/02mxSE0SXgHCy7cpzQ7NRTWpKh/TokMm0P5jSWTS7D5Lka+mYBDUUthJc6CUtCX2Jx+75fYVQ6LqB3NSRzkQ1W7gfJzvQW83JyXYbCeKW6uHXLUo3eb9oPl1dRF3cyi/PBvmnI282nzm+GOB1+/jD/GrzHEDM5ZewhYVI+X X-Microsoft-Exchange-Diagnostics: 1;BLUPR0301MB1619;5:CNm4Vp2mgRFoYK/o3g4p+fgbuKmG08WLQoV5kn6ompGy/ItB5Q5MdVQmWAyDQIYuwjEmRLpNaTd9kvdcX4MVowehdNYNo12DNsNEpl1aSwe/Jb6cr9T4uUJrA0mcZm6tmcpCvMo0VS6XkgGEikfAww==;24:Gb/MgIWDQ6DUf7XrKMdre7LlfBnJEpoBRm4oZ+lPABAKzcajlq82nk8awW32pPry/FXQusLSuHVNkUkTot95ZzFb2MRyuSSAbBJ67VsfXeE=;20:vNLxlJBjzo+ixTLSiJHt8nqJQR3HxvctGNUqw1EPH+TPOQ48EMVWzgnETwvjojAODmhvqU59PWMkCzW03lbiyg== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Jul 2015 09:46:08.2912 (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.158.2];Helo=[az84smr01.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLUPR0301MB1619 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3265 Lines: 95 Add adjust_frame_length_quirk for writing to fladj register which adjusts (micro)frame length to value provided by "snps,configure-fladj" property thus avoiding USB 2.0 devices to time-out over a longer run Signed-off-by: Nikhil Badola --- drivers/usb/dwc3/core.c | 12 ++++++++++++ drivers/usb/dwc3/core.h | 7 +++++++ 2 files changed, 19 insertions(+) diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index 5c110d8..72ba025 100644 --- a/drivers/usb/dwc3/core.c +++ b/drivers/usb/dwc3/core.c @@ -779,6 +779,7 @@ static int dwc3_probe(struct platform_device *pdev) u8 lpm_nyet_threshold; u8 tx_de_emphasis; u8 hird_threshold; + u32 fladj_value; int ret; @@ -886,6 +887,12 @@ static int dwc3_probe(struct platform_device *pdev) &tx_de_emphasis); of_property_read_string(node, "snps,hsphy_interface", &dwc->hsphy_interface); + ret = of_property_read_u32(node, "snps,configure-fladj", + &fladj_value); + if (!ret) + dwc->adjust_frame_length_quirk = 1; + else + dwc->adjust_frame_length_quirk = 0; } else if (pdata) { dwc->maximum_speed = pdata->maximum_speed; dwc->has_lpm_erratum = pdata->has_lpm_erratum; @@ -957,6 +964,11 @@ static int dwc3_probe(struct platform_device *pdev) goto err1; } + /* Adjust Frame Length */ + if (dwc->adjust_frame_length_quirk) + dwc3_writel(dwc->regs, DWC3_GFLADJ, GFLADJ_30MHZ_REG_SEL | + GFLADJ_30MHZ(fladj_value)); + if (IS_ENABLED(CONFIG_USB_DWC3_HOST)) dwc->dr_mode = USB_DR_MODE_HOST; else if (IS_ENABLED(CONFIG_USB_DWC3_GADGET)) diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h index 0447788..b7a5119 100644 --- a/drivers/usb/dwc3/core.h +++ b/drivers/usb/dwc3/core.h @@ -124,6 +124,7 @@ #define DWC3_GEVNTCOUNT(n) (0xc40c + (n * 0x10)) #define DWC3_GHWPARAMS8 0xc600 +#define DWC3_GFLADJ 0xc630 /* Device Registers */ #define DWC3_DCFG 0xc700 @@ -234,6 +235,10 @@ /* Global HWPARAMS6 Register */ #define DWC3_GHWPARAMS6_EN_FPGA (1 << 7) +/* Global Frame Length Adjustment Register */ +#define GFLADJ_30MHZ_REG_SEL (1 << 7) +#define GFLADJ_30MHZ(n) ((n) & 0x3f) + /* Device Configuration Register */ #define DWC3_DCFG_DEVADDR(addr) ((addr) << 3) #define DWC3_DCFG_DEVADDR_MASK DWC3_DCFG_DEVADDR(0x7f) @@ -712,6 +717,7 @@ struct dwc3_scratchpad_array { * @rx_detect_poll_quirk: set if we enable rx_detect to polling lfps quirk * @dis_u3_susphy_quirk: set if we disable usb3 suspend phy * @dis_u2_susphy_quirk: set if we disable usb2 suspend phy + * @adjust_frame_length_quirk: enables post-silicon frame length adjustment * @tx_de_emphasis_quirk: set if we enable Tx de-emphasis quirk * @tx_de_emphasis: Tx de-emphasis value * 0 - -6dB de-emphasis @@ -841,6 +847,7 @@ struct dwc3 { unsigned rx_detect_poll_quirk:1; unsigned dis_u3_susphy_quirk:1; unsigned dis_u2_susphy_quirk:1; + unsigned adjust_frame_length_quirk:1; unsigned tx_de_emphasis_quirk:1; unsigned tx_de_emphasis:2; -- 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/