From patchwork Tue Mar 21 13:42:02 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Andrey Smirnov X-Patchwork-Id: 9636615 X-Patchwork-Delegate: bhelgaas@google.com Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id AD52860216 for ; Tue, 21 Mar 2017 13:42:30 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A810826E4C for ; Tue, 21 Mar 2017 13:42:30 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 9C78227C0B; Tue, 21 Mar 2017 13:42:30 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.5 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 46EB526E4C for ; Tue, 21 Mar 2017 13:42:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757512AbdCUNmN (ORCPT ); Tue, 21 Mar 2017 09:42:13 -0400 Received: from mail-pg0-f65.google.com ([74.125.83.65]:36579 "EHLO mail-pg0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757488AbdCUNmL (ORCPT ); Tue, 21 Mar 2017 09:42:11 -0400 Received: by mail-pg0-f65.google.com with SMTP id 81so17183043pgh.3; Tue, 21 Mar 2017 06:42:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Li4K8GR0FTDrxVTyVCZwv4W9fvMRhJ13a5Ddsu7r1Zo=; b=I9qMn2rLEpZAvbCZhhVCuSYO1gP6sOV0NSGlCuSvJ2N3peMrwJIxDcKy3DAxWOwnA1 66XWs/MOJQ9mlorsBfeASa12YgKV3RpCFAPEZWARM7U9YtwPZKUITyfHmAacutt8Eyv4 t/1oKXqRrUwqie6hz2woVUVgX3tMy3MC+DrQNqXqKP6zi4Ba8VARrecU/R3Mbqdd8lxO P+x53jU7xwjvdPLWh2OVn1FAEdJKgzPWflxjrF2wkRGTp7DGUzUiDPJGOLCpHmS2zf5g M9mJNKVnQ3EKfFnp+7Qo85+NOiATocNP4YkDuXBoaaNlRuYucOLb94Q9npy9SuQF9RSM Q03Q== 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:mime-version:content-transfer-encoding; bh=Li4K8GR0FTDrxVTyVCZwv4W9fvMRhJ13a5Ddsu7r1Zo=; b=HrwsI0CnsDlSEQmkoL9oBcfeqnS+60txaBlj7wpWop9lMZlHDGVUinMLEtr8y7fygM J/8cGX32qdm1Qi+TSlBtX6hQG9JoCDMp53IPQ07LcVRYUG3gmKmUV3oHt41C8NCeuk2X xkdY/xdNeqcJOnNlxgWroF/m2x8FWjw9HNw+b+ef8YDzpG5YrDou9gWfa6txeFK/oZjK JzvvwNHUXC6vQiQBcRVGcVtjS8xnJqEzvDk8PlsQgtl7YHL38iCwlcFKRiRYco2oRu2I bhXUE/1b8598vu5+QP9Zk0LthSntc5i885/4XixV8sMnMEvBCQUxkKoetM4ueBeH26ap 2SKg== X-Gm-Message-State: AFeK/H1StNemcES+zYb2VM08EygSCpKWAvnUF5Nfov1jroJiD2XmHgepMVWWAtxipObq/Q== X-Received: by 10.98.144.151 with SMTP id q23mr39238899pfk.51.1490103730135; Tue, 21 Mar 2017 06:42:10 -0700 (PDT) Received: from squirtle.lan (c-73-19-0-61.hsd1.wa.comcast.net. [73.19.0.61]) by smtp.gmail.com with ESMTPSA id x21sm39898761pfa.71.2017.03.21.06.42.09 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 21 Mar 2017 06:42:09 -0700 (PDT) From: Andrey Smirnov To: linux-pci@vger.kernel.org Cc: Andrey Smirnov , yurovsky@gmail.com, Lucas Stach , Bjorn Helgaas , Fabio Estevam , Dong Aisheng , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v7 3/4] PCI: imx6: Do not wait for speed change on i.MX7 Date: Tue, 21 Mar 2017 06:42:02 -0700 Message-Id: <20170321134203.26325-4-andrew.smirnov@gmail.com> X-Mailer: git-send-email 2.9.3 In-Reply-To: <20170321134203.26325-1-andrew.smirnov@gmail.com> References: <20170321134203.26325-1-andrew.smirnov@gmail.com> MIME-Version: 1.0 Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP As can be seen from [1]: "...the different behavior between iMX6Q PCIe and iMX7D PCIe maybe caused by the different controller version. Regarding to the DOC description, the DIRECT_SPEED_CHANGE should be cleared after the speed change from GEN1 to GEN2. Unfortunately, when GEN1 device is used, the behavior is not documented. So, IC design guys run the simulation and find out the following behaviors: 1. DIRECT_SPEED_CHANGE will be cleared in 7D after speed change from GEN1 to GEN2. This matches doc’s description 2. set MAX link speed(PCIE_CAP_TARGET_LINK_SPEED=0x01) as GEN1 and re-run the simulation, DIRECT_SPEED_CHANGE will not be cleared; remain as 1, this matches your result, but function test is passed, so this bit should not affect the normal PCIe function. ..." imx6_pcie_wait_for_speed_change will report false failures for Gen1 -> Gen1 speed transition, so avoid doing that check and just rely on imx6_pcie_wait_for_link only. [1] https://community.nxp.com/message/867943 Cc: yurovsky@gmail.com Cc: Lucas Stach Cc: Bjorn Helgaas Cc: Fabio Estevam Cc: Dong Aisheng Cc: linux-arm-kernel@lists.infradead.org Cc: linux-kernel@vger.kernel.org Signed-off-by: Andrey Smirnov Reviewed-by: Lucas Stach --- drivers/pci/dwc/pci-imx6.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/drivers/pci/dwc/pci-imx6.c b/drivers/pci/dwc/pci-imx6.c index 64de9bb..c731e41 100644 --- a/drivers/pci/dwc/pci-imx6.c +++ b/drivers/pci/dwc/pci-imx6.c @@ -545,10 +545,21 @@ static int imx6_pcie_establish_link(struct imx6_pcie *imx6_pcie) tmp |= PORT_LOGIC_SPEED_CHANGE; dw_pcie_writel_dbi(pci, PCIE_LINK_WIDTH_SPEED_CONTROL, tmp); - ret = imx6_pcie_wait_for_speed_change(imx6_pcie); - if (ret) { - dev_err(dev, "Failed to bring link up!\n"); - goto err_reset_phy; + if (imx6_pcie->variant != IMX7D) { + /* + * On i.MX7, DIRECT_SPEED_CHANGE behaves differently + * from i.MX6 family when no link speed transition + * occurs and we go Gen1 -> yep, Gen1. The difference + * is that, in such case, it will not be cleared by HW + * which will cause the following code to report false + * failure. + */ + + ret = imx6_pcie_wait_for_speed_change(imx6_pcie); + if (ret) { + dev_err(dev, "Failed to bring link up!\n"); + goto err_reset_phy; + } } /* Make sure link training is finished as well! */