From patchwork Thu Sep 5 16:17:45 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mathieu Poirier X-Patchwork-Id: 173155 Delivered-To: patch@linaro.org Received: by 2002:a05:6e02:ce:0:0:0:0 with SMTP id r14csp934898ilq; Thu, 5 Sep 2019 09:18:10 -0700 (PDT) X-Google-Smtp-Source: APXvYqxjPcxrMC7V3b2GhIE80+g/HXWvoMItHEQIlO3k7AU15Jwpn1LqSWWlntHHTBXRJUXrMUll X-Received: by 2002:a17:902:a58c:: with SMTP id az12mr4460024plb.129.1567700290341; Thu, 05 Sep 2019 09:18:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1567700290; cv=none; d=google.com; s=arc-20160816; b=tfTiAYSBQ31XunnQDaclimZK6r5fSuCctMuTmyT+XT8KA/ysKhC2e5RXc6uIBhX42I duetESQpCf2EVY3owSYu8E46t7SbkAWPKIFHfL+vXrpNW0/lrF7a/WG/3XUiLp6nJIPG bKNEl2ZzAuoO0THwdROfjIXNtfmwfn2rBZSQhEJUiFWWx4r5mD7HkbwGmGXKX/MWyUYW Zfos7AyoQYdzs9fXHoFdJX+0FdRmaIgljhiQFvWgQgCME4e4aZEztUZWWE3DBDAW2k6T lZzUx+j/tLZFSH4bCWnqM2t/Ezn45lLj6ywPe2J/A/VCdSp2UhIOhGYZ1/C8ZVG+KQ7R Td6Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=oxweDnammrNyIt2aaQLCe6r9vThCpXKTK19Q9yGm1E4=; b=ZNgbTqJrczWFBBkYQ/inj7l07dk+tDNreU3QGuh6u1io/ATsD3cYCIV4mti8drBBSJ b1PKB1b1tHIF8oa8qZFrCeaRfEtVsy29431IRXvPT0+r4unegH6ueC2EKp7kRtND8QZS 4nVyUBQERUE4fxtcO9DNK0WqP8HPVcZpotKPJE/1CxjljZ6yeNbx3hQAyntTtiwoPo1w zE8h3D1okrD34qrtJZnUeWv/JxlYQm93+VvHD+fcQ0u8Fs7wo3J4vHrWIAhK7+etPPjb Rfc6Nc/Ku7dW8MI3v6NhvThmLIXnIVy3c9h+Pg3RkmuekM9ysWExLs+/hy1WMl/M2cLP m28g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=B+cZWsZu; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id m22si1327529pls.277.2019.09.05.09.18.10; Thu, 05 Sep 2019 09:18:10 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=B+cZWsZu; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387845AbfIEQSJ (ORCPT + 28 others); Thu, 5 Sep 2019 12:18:09 -0400 Received: from mail-pg1-f193.google.com ([209.85.215.193]:40720 "EHLO mail-pg1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387612AbfIEQSH (ORCPT ); Thu, 5 Sep 2019 12:18:07 -0400 Received: by mail-pg1-f193.google.com with SMTP id w10so1680360pgj.7 for ; Thu, 05 Sep 2019 09:18:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=oxweDnammrNyIt2aaQLCe6r9vThCpXKTK19Q9yGm1E4=; b=B+cZWsZuXFEQB01N9qcY/nKk7nFveM0bQSkHouQZ+2v8KRCDItQu12g91o55OqiDIl SQnnn5r6vvZTn3KSmZR9+5rl9wxcTUw4H96aAEmGDnjJxx3uKAFfio+dNp5I+wQr3Vwe gbXWR4hTOwsV+tXvAEB+6kyHio5Z54rthgV5q6RE89zhMs4lr/LJm01282eHycMXzU0z U9a2VMJKcYvCVPouURNHnaM7gNG9pAlCnZKkh1Y0vrCEBkYcoJQ5dlKEJOS6mj8Rfcf/ 3BOqGGxylR2E7voPViPNnWEY2QFJ0exUKtekqdkZckIcT8g6oOqpENw3lQbrUEfCQSqK d4Uw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=oxweDnammrNyIt2aaQLCe6r9vThCpXKTK19Q9yGm1E4=; b=TlVMfApr+ppnP9EFLjoVsfklVp7dCP/nsMrN8P10A836h8L91Jbcb8Dv3XjUeBoGDJ pDuKLkciq7FJ8/pwplsZ3E9xTQbo+D2VN3ehwPTDwFpg+uMEPokoJewaMpa8yjo9R587 CfQCqdyctVQlGv1pSy/rhXwEq4FIxz0QUC61K9Jx5ZZfgBpfHW9C6q9Aucz2Czb0oB6N gI8SILlO7t2dNZK7muvcGxdU1HSg6oM2quw9CiCaxPXlNqiDEcnPrxkqDkOJ1NXsGrfr zaeDSg9k1gFOToFMRHx7X0yc73IdgmWjNI5Z5U7o5gsok/zrsSWKjSzFz4HOlrHQta4x Q1mg== X-Gm-Message-State: APjAAAXnMKIfk5kv6lWFT7eqCNLvHqE359R+KXVSP/7KKctjqt0DQLd7 UiGS8Q8h2GkB/hUUjSing1KXEg== X-Received: by 2002:a17:90a:303:: with SMTP id 3mr4750663pje.124.1567700285921; Thu, 05 Sep 2019 09:18:05 -0700 (PDT) Received: from xps15.cg.shawcable.net (S0106002369de4dac.cg.shawcable.net. [68.147.8.254]) by smtp.gmail.com with ESMTPSA id m129sm6324005pga.39.2019.09.05.09.18.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 05 Sep 2019 09:18:05 -0700 (PDT) From: Mathieu Poirier To: stable@vger.kernel.org Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-omap@vger.kernel.org, linux-i2c@vger.kernel.org, linux-pci@vger.kernel.org, linux-mtd@lists.infradead.org Subject: [BACKPORT 4.14.y 04/18] usb: dwc3: Allow disabling of metastability workaround Date: Thu, 5 Sep 2019 10:17:45 -0600 Message-Id: <20190905161759.28036-5-mathieu.poirier@linaro.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190905161759.28036-1-mathieu.poirier@linaro.org> References: <20190905161759.28036-1-mathieu.poirier@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Roger Quadros commit 42bf02ec6e420e541af9a47437d0bdf961ca2972 upstream Some platforms (e.g. TI's DRA7 USB2 instance) have more trouble with the metastability workaround as it supports only a High-Speed PHY and the PHY can enter into an Erratic state [1] when the controller is set in SuperSpeed mode as part of the metastability workaround. This causes upto 2 seconds delay in enumeration on DRA7's USB2 instance in gadget mode. If these platforms can be better off without the workaround, provide a device tree property to suggest that so the workaround is avoided. [1] Device mode enumeration trace showing PHY Erratic Error. irq/90-dwc3-969 [000] d... 52.323145: dwc3_event: event (00000901): Erratic Error [U0] irq/90-dwc3-969 [000] d... 52.560646: dwc3_event: event (00000901): Erratic Error [U0] irq/90-dwc3-969 [000] d... 52.798144: dwc3_event: event (00000901): Erratic Error [U0] Signed-off-by: Roger Quadros Signed-off-by: Felipe Balbi Signed-off-by: Mathieu Poirier --- Documentation/devicetree/bindings/usb/dwc3.txt | 2 ++ drivers/usb/dwc3/core.c | 3 +++ drivers/usb/dwc3/core.h | 3 +++ drivers/usb/dwc3/gadget.c | 6 ++++-- 4 files changed, 12 insertions(+), 2 deletions(-) -- 2.17.1 diff --git a/Documentation/devicetree/bindings/usb/dwc3.txt b/Documentation/devicetree/bindings/usb/dwc3.txt index 52fb41046b34..44e8bab159ad 100644 --- a/Documentation/devicetree/bindings/usb/dwc3.txt +++ b/Documentation/devicetree/bindings/usb/dwc3.txt @@ -47,6 +47,8 @@ Optional properties: from P0 to P1/P2/P3 without delay. - snps,dis-tx-ipgap-linecheck-quirk: when set, disable u2mac linestate check during HS transmit. + - snps,dis_metastability_quirk: when set, disable metastability workaround. + CAUTION: use only if you are absolutely sure of it. - snps,is-utmi-l1-suspend: true when DWC3 asserts output signal utmi_l1_suspend_n, false when asserts utmi_sleep_n - snps,hird-threshold: HIRD threshold diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index 945330ea8d5c..9b093978bd24 100644 --- a/drivers/usb/dwc3/core.c +++ b/drivers/usb/dwc3/core.c @@ -1115,6 +1115,9 @@ static void dwc3_get_properties(struct dwc3 *dwc) device_property_read_u32(dev, "snps,quirk-frame-length-adjustment", &dwc->fladj); + dwc->dis_metastability_quirk = device_property_read_bool(dev, + "snps,dis_metastability_quirk"); + dwc->lpm_nyet_threshold = lpm_nyet_threshold; dwc->tx_de_emphasis = tx_de_emphasis; diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h index abd1142c9e4d..40bf0e0768d9 100644 --- a/drivers/usb/dwc3/core.h +++ b/drivers/usb/dwc3/core.h @@ -869,6 +869,7 @@ struct dwc3_scratchpad_array { * 1 - -3.5dB de-emphasis * 2 - No de-emphasis * 3 - Reserved + * @dis_metastability_quirk: set to disable metastability quirk. * @imod_interval: set the interrupt moderation interval in 250ns * increments or 0 to disable. */ @@ -1025,6 +1026,8 @@ struct dwc3 { unsigned tx_de_emphasis_quirk:1; unsigned tx_de_emphasis:2; + unsigned dis_metastability_quirk:1; + u16 imod_interval; }; diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 1b99d44e52b9..5916340c4162 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -2034,7 +2034,8 @@ static void dwc3_gadget_set_speed(struct usb_gadget *g, * STAR#9000525659: Clock Domain Crossing on DCTL in * USB 2.0 Mode */ - if (dwc->revision < DWC3_REVISION_220A) { + if (dwc->revision < DWC3_REVISION_220A && + !dwc->dis_metastability_quirk) { reg |= DWC3_DCFG_SUPERSPEED; } else { switch (speed) { @@ -3265,7 +3266,8 @@ int dwc3_gadget_init(struct dwc3 *dwc) * is less than super speed because we don't have means, yet, to tell * composite.c that we are USB 2.0 + LPM ECN. */ - if (dwc->revision < DWC3_REVISION_220A) + if (dwc->revision < DWC3_REVISION_220A && + !dwc->dis_metastability_quirk) dev_info(dwc->dev, "changing max_speed on rev %08x\n", dwc->revision);