From patchwork Mon Feb 20 16:08:58 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Andrey Smirnov X-Patchwork-Id: 9583209 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 01632604A0 for ; Mon, 20 Feb 2017 16:10:50 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 19A5328495 for ; Mon, 20 Feb 2017 16:10:50 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0E9CF28696; Mon, 20 Feb 2017 16:10:50 +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 B6B0628495 for ; Mon, 20 Feb 2017 16:10:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753513AbdBTQKf (ORCPT ); Mon, 20 Feb 2017 11:10:35 -0500 Received: from mail-pg0-f68.google.com ([74.125.83.68]:33587 "EHLO mail-pg0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753994AbdBTQJv (ORCPT ); Mon, 20 Feb 2017 11:09:51 -0500 Received: by mail-pg0-f68.google.com with SMTP id 5so13482846pgj.0; Mon, 20 Feb 2017 08:09:51 -0800 (PST) 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=ePbiKF2W6kKNRTxuHnnP6+bHK+6aH9P08o/whfSMWgU=; b=GSoYee35EHmRJrzA4wbfxjBbx4omjBkASF0w/wc03amAWmsqsp0kyzpIq+DrDW3b4t uO+JceFPgaP5vkaulbXn42qqpcjKQEZq39eZ7yuYKlDJPei05D+QAmgz342Kh4tfVPiY 0YkIzYE6smWFj7tSrQjgFMbeYXEvdqkXEowtoxhMzxgpGXFuJCibkIUwrILqpItTCOAF FH1L8z7jkSXOm6pODCxPDlbz7dRPz8dItLilCCWUbs+pcUhpvfAqCm/9Y6q89SbqOWpY 8vTOcMyDa7d/eHMVdVFRsczVTH7G/68+hJ35Fn3XAJlMCFDCg/NXuF7KOeVXenleUFcz GAtQ== 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=ePbiKF2W6kKNRTxuHnnP6+bHK+6aH9P08o/whfSMWgU=; b=rsFF1rLyu3R2glJ3zg9uMLDUV8FlYmUP8vyysAyVA1jQgzPmlmfo/YYF/eAO+FYT6T STAFHNQjJPS6J79OWuHj6ESu1cd+Gnln438oJBtoZ7ISC3uPHen/Qlo4p5JNpAbFZFwp xcza5cQep3T4g8vaUUdvQZ3kmC6xuPZinc38M5tio0SRl1XHKB6gYc4VYLzsZTOxKjQZ 0lh7i+pzCo2WCM5XBefawX1QNnjOZcaV4CgmNvXhZx9MghrL2qGOPzqkmRMqeOOOhCOe 9Xi3ebQMi+erWzfweMMjssPCzC5OoNwgBOuiraSV8PKqQVp4yGOC964Fd5xrddmneH3g cZFQ== X-Gm-Message-State: AMke39mhq6URQtsDRspdhqrpeUxFp5K4cBu8e0wa8KQKF7kJJosS1tXnfWA4uMGH2Tvhxg== X-Received: by 10.98.192.25 with SMTP id x25mr9678100pff.158.1487606990832; Mon, 20 Feb 2017 08:09:50 -0800 (PST) Received: from localhost.localdomain (c-73-19-0-61.hsd1.wa.comcast.net. [73.19.0.61]) by smtp.gmail.com with ESMTPSA id y184sm36059266pfg.86.2017.02.20.08.09.49 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 20 Feb 2017 08:09:50 -0800 (PST) From: Andrey Smirnov To: linux-pci@vger.kernel.org Cc: Andrey Smirnov , yurovsky@gmail.com, Lucas Stach , Bjorn Helgaas , Fabio Estevam , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [RESEND PATCH v5 2/4] PCI: imx6: Do not wait for speed change on i.MX7 Date: Mon, 20 Feb 2017 08:08:58 -0800 Message-Id: <20170220160900.7014-3-andrew.smirnov@gmail.com> X-Mailer: git-send-email 2.9.3 In-Reply-To: <20170220160900.7014-1-andrew.smirnov@gmail.com> References: <20170220160900.7014-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: linux-arm-kernel@lists.infradead.org Cc: linux-kernel@vger.kernel.org Signed-off-by: Andrey Smirnov --- drivers/pci/host/pci-imx6.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/drivers/pci/host/pci-imx6.c b/drivers/pci/host/pci-imx6.c index 2f3f375..473bbdc 100644 --- a/drivers/pci/host/pci-imx6.c +++ b/drivers/pci/host/pci-imx6.c @@ -577,10 +577,21 @@ static int imx6_pcie_establish_link(struct imx6_pcie *imx6_pcie) tmp |= PORT_LOGIC_SPEED_CHANGE; dw_pcie_writel_rc(pp, 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! */