Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751932AbbHQD67 (ORCPT ); Sun, 16 Aug 2015 23:58:59 -0400 Received: from mail-bn1on0142.outbound.protection.outlook.com ([157.56.110.142]:22720 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750977AbbHQD65 (ORCPT ); Sun, 16 Aug 2015 23:58:57 -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 Subject: [PATCH 2/3][v2] drivers: usb: dwc3: Add frame length adjustment quirk Date: Mon, 17 Aug 2015 09:54:56 +0530 Message-ID: <1439785496-27243-1-git-send-email-nikhil.badola@freescale.com> X-Mailer: git-send-email 2.1.0 X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;BN1BFFO11FD048;1:rJw3bsq5qciR0Cfafnfp/2gklq6TbpukYjQyKLpnE+az2Ye3NIfIC7yMP0VYzjW9P7eUxnFNkvGFcsWlSvOBLkZCZjWQwMrmwQviHixeMnjcYO4HBT8bBlFt+ypOXPWY85Tsjba2aSC8hX94ZVWOshk7QmedFv7B2r7/oYajBPI3BNAdSfGxVgtTNMeopHv6faASjfvDfND7jbteQ/8SX2TS/lXXRrLwdsP7p3wytLD+qHscgywW7H3lbTMC0zAwHdTS6v8UvnltNuZHGpjdc6Z00jdMHaqr9c2iaJIvEoiWJyt+O76A7PV/3CVb6OYVd09IpQfjJY7a1c34FpgG9ZM3wUBi3lsl3SnRpWbglrWrDu3mNclNQxu/mywu0IhFBZYQTzAYpbhASfVs1EQp3A== X-Forefront-Antispam-Report: CIP:192.88.168.50;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10019020)(6009001)(2980300002)(3050300001)(339900001)(189002)(199003)(6806004)(19580395003)(33646002)(77096005)(77156002)(68736005)(189998001)(2201001)(105606002)(106466001)(87936001)(36756003)(50466002)(4001540100001)(48376002)(19580405001)(5001770100001)(5001860100001)(85426001)(5001830100001)(5001960100002)(81156007)(229853001)(47776003)(50986999)(62966003)(104016003)(50226001)(64706001)(92566002)(86362001)(5003940100001)(107886002)(46102003)(97736004)(4001430100001);DIR:OUT;SFP:1102;SCL:1;SRVR:BLUPR0301MB1618;H:tx30smr01.am.freescale.net;FPR:;SPF:Fail;PTR:InfoDomainNonexistent;MX:1;A:1;LANG:en; MIME-Version: 1.0 Content-Type: text/plain X-Microsoft-Exchange-Diagnostics: 1;BLUPR0301MB1618;2:7umlOJoApF5Twi8HTsbXferephqODpXkMo/7P6RTO8XQxQWkt3/40F7EmqNNkVZ+gERqLs9Jttf7QqnuqGH5fmE2EH1CzoX+l9TMIaMFp447/A0+QuN40U/YGeST1ymZAFxnwevtHgkDZaSfBUSNH09v1Sc3/iuu7VqqKIYuVS4=;3:pxxByagWCffaVPlgrsIHXF0JpVovYgJcBSvzBTARbm6228xpJ4g1Ww0EZPrJOXoxcVjY72o2PdpLxAg6yaQe2bcDEhtEO3G7AJKl9I8ABwXzNPtis7uxdCwTCMbBzWTGnaZF9B9Asc9J1b2HeLSTVUurVeDDVl41JNIdvgWJRkbMzIoowxZozQj5bTX4Q/NISckFgrpIs+06KdqsgzqrFoe+K/fhOuvaZgKNJiyn/3A=;25:15LQ4+XayMY9dg0Yr15DGjjkLCbBl7jgPpljngEh/tPKVSo9tu/QT22eK/tP7mB5MfWmwEjllcniNKREaBz89D052GKbMPcYLRoWlpFT0pAzMxpKLpS0ZkdV6eHaPuFlWkasKVQ8ro7D89XBjUkWI9a9TXf0Wby8TTBNJN1Yl9PDJ3a3Fx42jTKaXY9jJdJ6frrasnDktleI+p9muVxJaXhrecLKotCr9LtugO8ne75hcauCx9WxafOeC1fDgrhf X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BLUPR0301MB1618; X-Microsoft-Exchange-Diagnostics: 1;BLUPR0301MB1618;20:ma24j73mipa/1FWN1tkvtUWf1YyyZwa6tvOrgpcGMCWNhq01iowSnVEXwiPEELSv/f6nEjLbFG5hlSXVYmakW4jYLN4Y5iy5HGrkfypr33S579npiavD+LlD4l1WolxmfC3yOzWdN+dlovBLh5feWD/eumGRDWA0qEtLL5dCa6MU5nQr7QKnAgvlMlLk2cLl0bkxLTX5tfigfEYb7VJAQQp4v31CWlX2E419O6DuzZE1Vi8PnZWG00rUvy4fB/+hmNhfE4Mf+leKe6G0A4WrrYLce41EWA4nwuu5kvNGJ6tj1GyomBCFMlckx1WhYxhOms9tnPye8/F/bh4EjIsQmm5YFfHuJh/GBn2Er+Xu5w8=;4:Kz1mhfmyNPzOOij/yUDVPKEtpmeYumeQt+OjW7xA/r4zlaXQFe9qqcCZ23zLhpCKae/XisDCLDC8UzSChYbWFs6M2wJP4VGi1vZtKdLeoQsblm3LOmGwMP8ScVik+QTnw4FtBcZrDntiaIoTennTQTGuRQJWOG5bDCGG7Tgq2exGEiSQW0GjoOnT+F/WSKwWyReF0lxJ+k16I4rstPH5W6lEtOg9n6/OqJLqv2VXUQtpvLiadgdUC0s3hJtKc2wfpM7Nubh38zpPTXvOGviwppL2xuPyPbeoG2Ns3lxbmsk+D2TbeG11fxGvD3DURwiA X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(5005006)(8121501046)(3002001);SRVR:BLUPR0301MB1618;BCL:0;PCL:0;RULEID:;SRVR:BLUPR0301MB1618; X-Forefront-PRVS: 0671F32598 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BLUPR0301MB1618;23:L5d/tZ+Q3JIODB5P7IMKXOZvdXWZH6sgfdbM0d+?= =?us-ascii?Q?weTqwmTMW0HjoRfDWgpSJN17C3xd6dcxy98gAagTKSvkXLeVgSJQTdDAJq6v?= =?us-ascii?Q?34r6tbwkd7yDrgW88dB4ZAM+pABKOlwnh0OBf5ADPIFcv1PaKvi2hGZKkvTl?= =?us-ascii?Q?TpK7NFi1YoGHS1STgyjb6xbGTPIWjbZBcAD9ig9Moc2CLzbrd0wGbjmAMPpc?= =?us-ascii?Q?CLRa57NXJpO0Vg0Nbrgi/DBZVpQJkViYL41lw/iFBeJ/hX1mYUUYE3cLq5GD?= =?us-ascii?Q?hIwsLO3eKblCwDTA+olhFkHA1f1BdQ9CjFEwM8k+RSt7Qyu5GfVIET9l0Z1S?= =?us-ascii?Q?9ZRE+vRKexEFFyRbgG3/D9G8Iib08Wv4y1E7eMw74pk0FiLbQDW3ni3eePxa?= =?us-ascii?Q?puEWdrFOFuHoMsuKLm85JgHGzvCX9TWiCFgza7lGIGRkeoVo2AqAZpdjuoPk?= =?us-ascii?Q?xmTGO7FAS/CSJqwqwOUchrAT3sjy/vgivS7LK2hKDwa1W2uFgWFYDh0SeLbU?= =?us-ascii?Q?lQZ5LVR7eTQOoDZQ2odCytcYJW0LC6xhbyHEgb7Hf0qC1ooiZSxomSDQ8mLA?= =?us-ascii?Q?8aObkHJkbUEOOIHyFrVmxr1Ce6zxsfY315Uy0VpvSGPfDcv25EMGFyUWqhDP?= =?us-ascii?Q?oFRJusKkvJ6XPizskv6Q3A86kDA83cv/WDsKdQ+xo+7ddEeMxIaZz3oQSbu/?= =?us-ascii?Q?vgHTHuDFnScKuoyeNj/Q9gVipPa8sXzgN19c7GDpkhxhO8sYDo6h1DuhN8aJ?= =?us-ascii?Q?J4kFe5+AA4D0zAFE/fbT3mJ5/thK8tuUXqLNdnSdjWBXW40+XvGeIueiRZa8?= =?us-ascii?Q?CtUEhTJiVoixb4t9p6EyqLZ82yRuXCTRylvF+Eg2EWEpyOrsjeAerxBmXMma?= =?us-ascii?Q?AfsmvYRAbpKrIb1Wk/xtFx/DGsiK/Japsn2nYRO8e7uSS/RjJ7ms+YNbrXgJ?= =?us-ascii?Q?KLdQEvZFM8MCM62jXVof4LUyRxO5+GVdTB+WlZ/4ozyJ12uhgYZZTcD42nFM?= =?us-ascii?Q?Xl6i94852cS4A7Js2KEeAIc3mB5+abG7oG5Rz2klbBWZBcEjuZEdulIoaTiD?= =?us-ascii?Q?pw3U2ErbP9NgCCoOlf8IOuzK8pTCK5oduv8aveP+uG1qzSBlNvxM2iAHNVq9?= =?us-ascii?Q?NJwei5h6WY2MTGtIBAcJcsuuEvubRJLw1OJab0jMF8cc0pzcyf1b2hg=3D?= =?us-ascii?Q?=3D?= X-Microsoft-Exchange-Diagnostics: 1;BLUPR0301MB1618;5:zGMJeG2/rZIDM5GUgea0o2zdHtTToyPVEWlojJ5WxK96Ri1LHKOSflBLpWMcey2cbIvGLMgKmG8NXP8olYeVorQxIQVttKhRGOfjzqN/wn/eiw8JsDDCckMt2zU1ZowvNCqHwt/COHO86wZ1xd2R7w==;24:FyBOXSB5jXBCsFYNgHTrKM6tFtzRG8Xdtsia1x6CwwuW7SjVh6XBqa9x1dhJ/Fdn6tYnjCEFZTsyvo/WATP47qo7QIecPtolbKHl4APKt0Q=;20:xUilZVuKtv+GF3y9ornL89rMs6/KAce/9siB2KkcLWcxysJoZOOThKVR+BKRhEv1GLmtWGLXHweJbl5ezKZEpQ== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Aug 2015 03:58:54.5027 (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: BLUPR0301MB1618 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4422 Lines: 144 Add adjust_frame_length_quirk for writing to fladj register which adjusts (micro)frame length to value provided by "snps,quirk-frame-length-adjustment" property thus avoiding USB 2.0 devices to time-out over a longer run Signed-off-by: Nikhil Badola --- changes for v2 : - updated quirk's name - added separate function for frame length adjustment - added frame length adjustment for pdata users - removed unnecessary flag from struct dwc3 drivers/usb/dwc3/core.c | 37 +++++++++++++++++++++++++++++++++++++ drivers/usb/dwc3/core.h | 5 +++++ drivers/usb/dwc3/platform_data.h | 2 ++ 3 files changed, 44 insertions(+) diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index 064123e..f3beb2e 100644 --- a/drivers/usb/dwc3/core.c +++ b/drivers/usb/dwc3/core.c @@ -143,6 +143,34 @@ static int dwc3_soft_reset(struct dwc3 *dwc) return 0; } +/* + * dwc3_frame_length_adjustment - Adjusts frame length if required + * @dwc3: Pointer to our controller context structure + * @fladj: Value of GFLADJ_30MHZ to adjust frame length + */ +static void dwc3_frame_length_adjustment(struct dwc3 *dwc, u32 fladj) +{ + if (dwc->revision < DWC3_REVISION_250A) + return; + + if (fladj == 0) + return; + + if (fladj) { + u32 reg; + u32 dft; + + reg = dwc3_readl(dwc->regs, DWC3_GFLADJ); + dft = reg & DWC3_GFLADJ_30MHZ_MASK; + if (!dev_WARN_ONCE(dwc->dev, dft == fladj, + "request value same as default, ignoring\n")) { + reg &= ~DWC3_GFLADJ_30MHZ_MASK; + reg |= DWC3_GFLADJ_30MHZ_SDBND_SEL | fladj; + dwc3_writel(dwc->regs, DWC3_GFLADJ, reg); + } + } +} + /** * dwc3_free_one_event_buffer - Frees one event buffer * @dwc: Pointer to our controller context structure @@ -779,6 +807,7 @@ static int dwc3_probe(struct platform_device *pdev) u8 lpm_nyet_threshold; u8 tx_de_emphasis; u8 hird_threshold; + u32 fladj = 0; int ret; @@ -886,6 +915,9 @@ static int dwc3_probe(struct platform_device *pdev) &tx_de_emphasis); of_property_read_string(node, "snps,hsphy_interface", &dwc->hsphy_interface); + of_property_read_u32(node, + "snps,quirk-frame-length-adjustment", + &fladj); } else if (pdata) { dwc->maximum_speed = pdata->maximum_speed; dwc->has_lpm_erratum = pdata->has_lpm_erratum; @@ -915,6 +947,7 @@ static int dwc3_probe(struct platform_device *pdev) tx_de_emphasis = pdata->tx_de_emphasis; dwc->hsphy_interface = pdata->hsphy_interface; + fladj = pdata->fladj_value; } /* default to superspeed if no maximum_speed passed */ @@ -957,6 +990,7 @@ static int dwc3_probe(struct platform_device *pdev) goto err1; } + if (IS_ENABLED(CONFIG_USB_DWC3_HOST)) dwc->dr_mode = USB_DR_MODE_HOST; else if (IS_ENABLED(CONFIG_USB_DWC3_GADGET)) @@ -971,6 +1005,9 @@ static int dwc3_probe(struct platform_device *pdev) goto err1; } + /* Adjust Frame Length */ + dwc3_frame_length_adjustment(dwc, fladj); + usb_phy_set_suspend(dwc->usb2_phy, 0); usb_phy_set_suspend(dwc->usb3_phy, 0); ret = phy_power_on(dwc->usb2_generic_phy); diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h index 0447788..9188745 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 DWC3_GFLADJ_30MHZ_SDBND_SEL (1 << 7) +#define DWC3_GFLADJ_30MHZ_MASK 0x3f + /* Device Configuration Register */ #define DWC3_DCFG_DEVADDR(addr) ((addr) << 3) #define DWC3_DCFG_DEVADDR_MASK DWC3_DCFG_DEVADDR(0x7f) diff --git a/drivers/usb/dwc3/platform_data.h b/drivers/usb/dwc3/platform_data.h index d3614ec..400b197 100644 --- a/drivers/usb/dwc3/platform_data.h +++ b/drivers/usb/dwc3/platform_data.h @@ -46,5 +46,7 @@ struct dwc3_platform_data { unsigned tx_de_emphasis_quirk:1; unsigned tx_de_emphasis:2; + u32 fladj_value; + const char *hsphy_interface; }; -- 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/