From patchwork Tue Oct 15 16:06:39 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Vasut X-Patchwork-Id: 3046511 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id A2C11BF924 for ; Tue, 15 Oct 2013 16:08:11 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 6B700201CD for ; Tue, 15 Oct 2013 16:08:10 +0000 (UTC) Received: from casper.infradead.org (casper.infradead.org [85.118.1.10]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 991F8203F1 for ; Tue, 15 Oct 2013 16:08:05 +0000 (UTC) Received: from merlin.infradead.org ([2001:4978:20e::2]) by casper.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1VW79u-0002nT-LQ; Tue, 15 Oct 2013 16:07:46 +0000 Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1VW79o-0005GR-RT; Tue, 15 Oct 2013 16:07:40 +0000 Received: from mail-out.m-online.net ([2001:a60:0:28:0:1:25:1]) by merlin.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1VW79Z-0005Ch-2G for linux-arm-kernel@lists.infradead.org; Tue, 15 Oct 2013 16:07:28 +0000 Received: from frontend1.mail.m-online.net (frontend1.mail.intern.m-online.net [192.168.8.180]) by mail-out.m-online.net (Postfix) with ESMTP id 3czhNS2R6Gz3hj5N; Tue, 15 Oct 2013 18:07:04 +0200 (CEST) X-Auth-Info: 0cYCOkm5vGiKP4oTFd0EiEtgfrWyxsrYCw38PlOI6gw= Received: from chi.lan (host-82-135-33-74.customer.m-online.net [82.135.33.74]) by smtp-auth.mnet-online.de (Postfix) with ESMTPA id 3czhNR4YB5zbbl1; Tue, 15 Oct 2013 18:07:03 +0200 (CEST) From: Marek Vasut To: linux-pci@vger.kernel.org Subject: [PATCH 5/6] PCI: imx6: Force Gen1 operation Date: Tue, 15 Oct 2013 18:06:39 +0200 Message-Id: <1381853200-5534-6-git-send-email-marex@denx.de> X-Mailer: git-send-email 1.8.4.rc3 In-Reply-To: <1381853200-5534-1-git-send-email-marex@denx.de> References: <1381853200-5534-1-git-send-email-marex@denx.de> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20131015_120725_517611_D613236E X-CRM114-Status: GOOD ( 11.80 ) X-Spam-Score: 1.1 (+) Cc: Marek Vasut , Pratyush Anand , Richard Zhu , Siva Reddy Kallam , Mohit KUMAR , Sascha Hauer , Jingoo Han , Troy Kisky , Frank Li , Srikanth T Shivanand , Bjorn Helgaas , Sean Cross , Shawn Guo , Yinghai Lu , Tim Harvey , linux-arm-kernel@lists.infradead.org X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Spam-Status: No, score=-1.7 required=5.0 tests=BAYES_00,KHOP_BIG_TO_CC, RCVD_IN_DNSWL_MED, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=no version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Without forcing the PCIe core into Gen1 operation, the PCIe switch attached directly to the PCIe port is not recognised at all. The PCIe switch is Gen2 capable to make this issue even more puzzling. Signed-off-by: Marek Vasut Cc: Bjorn Helgaas Cc: Frank Li Cc: Jingoo Han Cc: Mohit KUMAR Cc: Pratyush Anand Cc: Richard Zhu Cc: Sascha Hauer Cc: Sean Cross Cc: Shawn Guo Cc: Siva Reddy Kallam Cc: Srikanth T Shivanand Cc: Tim Harvey Cc: Troy Kisky Cc: Yinghai Lu --- drivers/pci/host/pci-imx6.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/drivers/pci/host/pci-imx6.c b/drivers/pci/host/pci-imx6.c index ca8c5de..8402e9a 100644 --- a/drivers/pci/host/pci-imx6.c +++ b/drivers/pci/host/pci-imx6.c @@ -321,6 +321,7 @@ static void imx6_pcie_host_init(struct pcie_port *pp) { int count = 0; struct imx6_pcie *imx6_pcie = to_imx6_pcie(pp); + uint32_t tmp; imx6_pcie_assert_core_reset(pp); @@ -330,13 +331,23 @@ static void imx6_pcie_host_init(struct pcie_port *pp) dw_pcie_setup_rc(pp); + /* + * FIXME: + * Force Gen1 operation. In case the IP block is in Gen2 operation + * mode, it does not detect the PCIe switch at all. + */ + tmp = readl(pp->dbi_base + 0x7c); + tmp &= ~0xf; + tmp |= 0x1; + writel(tmp, pp->dbi_base + 0x7c); + regmap_update_bits(imx6_pcie->iomuxc_gpr, IOMUXC_GPR12, IMX6Q_GPR12_PCIE_CTL_2, 1 << 10); while (!dw_pcie_link_up(pp)) { usleep_range(100, 1000); count++; - if (count >= 10) { + if (count >= 200) { dev_err(pp->dev, "phy link never came up\n"); dev_dbg(pp->dev, "DEBUG_R0: 0x%08x, DEBUG_R1: 0x%08x\n",