From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752892AbcHOJgf (ORCPT ); Mon, 15 Aug 2016 05:36:35 -0400 Received: from mail-by2nam01on0075.outbound.protection.outlook.com ([104.47.34.75]:31809 "EHLO NAM01-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752073AbcHOJgd (ORCPT ); Mon, 15 Aug 2016 05:36:33 -0400 X-Greylist: delayed 11729 seconds by postgrey-1.27 at vger.kernel.org; Mon, 15 Aug 2016 05:36:33 EDT Authentication-Results: spf=softfail (sender IP is 66.35.236.227) smtp.mailfrom=altera.com; vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=none action=none header.from=altera.com; From: Ley Foon Tan To: Bjorn Helgaas CC: , , Ley Foon Tan , Ley Foon Tan Subject: [PATCH] PCI: altera: Poll for link training status after retraining the link Date: Mon, 15 Aug 2016 14:06:02 +0800 Message-ID: <1471241162-23021-1-git-send-email-lftan@altera.com> X-Mailer: git-send-email 1.9.1 MIME-Version: 1.0 Content-Type: text/plain X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:66.35.236.227;IPV:NLI;CTRY:US;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(7916002)(2980300002)(199003)(189002)(92566002)(4326007)(586003)(2906002)(8936002)(50226002)(86362001)(87936001)(4001430100002)(33646002)(106466001)(68736007)(50986999)(47776003)(11100500001)(42186005)(229853001)(105596002)(189998001)(5003940100001)(36756003)(107886002)(110136002)(50466002)(48376002)(97736004)(8676002)(19580405001)(7846002)(81156014)(81166006)(19580395003)(356003)(626004)(305945005)(7099028);DIR:OUT;SFP:1101;SCL:1;SRVR:BY2PR0301MB2119;H:sj-itexedge03.altera.priv.altera.com;FPR:;SPF:SoftFail;PTR:InfoDomainNonexistent;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BL2FFO11OLC006;1:P0d+mCsIxBBzcGR79f9+IzN+ASztHG213qgJLZ8W7Ke9mRUGuftuAw5IB0Xif4vTYjvKaRNnMvldb5BMNJX5Iuio+VbrOeUfP+y1PkdXLTBrhSrTdyfDIO3505RoMXxZfmWtXfqPm9k6+/FR1fcmCWxAdH+sEKY2Qw2NFGWu7pbkurbgjpkIsVKOkciqkzOXHnh7a29aNg64csHUM4qu0SnivHTMCySh8WkD9jxQRoA/FHdXIib7NJfn33KCr2GDAOz5gGCMvm3H84YIOr5m9tDCl72/dfvzl9QdQuPD0JPLiUe31pIjg0JV3hUlnmH6TWJWs1MIe649bvwKctJXW8t+OdAb2GbaXuPn5a66J8dEWtXqm+bNUF9KDHEN2SJehPo0icNkFIeQA2mee7zxKrFMAu3uhGt7NvZ5QvqlbtKRAFczbqFvQYL1ldfm95JBRiZgpm3cmwNFquofLM8c7uwMi3VkA/g1Hzor0FFeIoj+hCavzM3r9KE+pPDHeqt4nVKM8e9WhrsHKVj9AcZSY+pduew7StVico+9gwGPoc8BBAvjnjn0+kiCvT7E4RS3 X-MS-Office365-Filtering-Correlation-Id: 4bc0fca8-d298-48a1-8666-08d3c4d24206 X-Microsoft-Exchange-Diagnostics: 1;BY2PR0301MB2119;2:K5X3QFNDABPojfLvkCyiVs9a9ZfLIJKOgQ8/5p8CIcEsGRfxCZx3IZf8x0FexbAuWR/4YSce44uchr7mzLrSFog06mPAvDT4zclbiyQNmrBP6tLdivpuj1JjZaL45GzZKP6S7N2tKaNEnff9YalPbda0sBuuOWnqOZxaKnFt/xZUZ+TLOg33NRrwm+qW4gqx;3:XPozJdDNb3ZbKyp46DWRd/CaHtRiAj5ws1bE9/NMfF70zym1J39YHtYjpY5qzBLbJpB+5YFPJ11kIBZipDN+FjWjEPEOt9OkjkbjWXNZEfnbheIs+nuQtGKnp0DN5husoPTS31z8AOCYbTaNzG1AGKqn6bFAmoJbmZb1TfVLiEZPxGRRukL2JFJtuxMgT24JQ4sVl51vME5y0VptR3xI2uqEc3tRiZXLlvd8tgMk0ls= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BY2PR0301MB2119; X-Microsoft-Exchange-Diagnostics: 1;BY2PR0301MB2119;25:HDcLyNN45t/UiYMwg3h0oMRnmSkzrkCsHnq+vmUtUy/ZUy+UQ5ZOPyuU2QKxmvJco1BSGWtEBkHO1FwXwG2ba3ncn4gy1SOd4RDq4o32VZXUldXMYfdSmjoD56jPMpmadlGKOhF78qRLnJP+Hk3J5hwiq2hhPbGLek9EbJ55tWoJX9Ee9Z0jfcGXIPJiegiz8l8HXDHMfLh7JYxjQ0KP6MbU9Mf44SJGLAFGg3sFfW572o8iGFocN1etpA8qDRkT6U9OJ547BqrcjrjbF+270eE/CaY2ZrGPANYcjjZ51fgdUjA30Wu9tCjvUO+94PdB2Z9/1koNj5qd8CDvg233UCK6xO0j641KSxrD+7d9fNEA6yzUqQO+Lo42QRrQQyspPQ2voZkH4VoNlgCBwCTEVG3VnbbS59H5DZYRXXv13uCoeuXRLAGmCKr2mMlNG8/eA3hgE5AskjlCKNsffyMTynDbot4ejbBb0TIKtxvsqsLo6jjt3sWl2cD2oQwQhwXi+WZXQSPB0HiL5/kIiVdouu3PZhR6YSJcof3gaVBanQaN24hLZLZ/W3IfESRbJKLbeIixLSew37Wu+7hYWzE7KOVS0lX4acnYL9FcYunljxYdSIUw8zEXtiUtfitsP7VdKNhSYgRJMDsLIzEOnxUmsD24Wihyv5Bb3zVCMWuQ1fchw0liOiBI79YkbMx+1xg0fnJCXAtLyNzoh0mzZztGXIMLNI+LIwjPDbR0cX5jBZCf7g36wXxCZNeFjvZDyDRTmTMW3An759/3kyYqE1oHtA== X-Microsoft-Exchange-Diagnostics: 1;BY2PR0301MB2119;31:h7DqBT/RJe9zEJsDY0S3KclBYq78y4Rh9xQe/CqY2IcNBGOjGZmT1JyHqGVP1l9ZnEvjjC7fVLYCZfbTtHJ2nNS9ntPmMBIOQ5MRco4Yr5QesFnD1OMxiIve10KYV3PMwUwozZK2ORQfbX08IRcTQPzrYik6r1rIJ/5wyQxM1Pt7OmUMuhd72cBMAMhvLdns3u9Z/j4dVnAR23SCOlXFyZjiyekEQNRFikifUpJHEGA=;20:eY+uL8bj17UQa2AcBQDpK1EBMBkJ6XLWG5akq0/bxwVIc42nQAR9WkE8MOgEZ315KTcmOaax0o4IctknKJtP7b1igHO6J4Nxu+n6PQSdPaMrdUgqQQ8WwocNhHRFjfnG1i7y5SCuqHrXb1fLOrfBYowOIbz9Ku7avcp9a5+iVLI=;4:m7pb+/QOWCqGz99rhXLcHBN7kkHJJo9xc1YbQ13bNPN+5zpVPSrQmF773ohG/Zzq81IF9LrL/Siy8XlMQDz69l8vhZWkFBj9kjH7eHqnKEOlW4FHlXGM2add4+hsQc74Alfweo4rTjdRdP6AUF3ITRcYwwhE2INA16F7Tkatisno4timSZ95yL/uW1idx3W3iV36UexugZxmYQX3JkNJ6xUx8FK/RYjX/JL7jrOiIPhvDXkALhMP0V/noRd23kuPleNvRn3Bkc/cYTU40tiqJ9++wPbPqLfOKqrYmwmGwOGnhnf2cIOJXqwvNd+Y6SSpZ2LClaJXW/WRzXMgRsmESeD0la/y7xId0HEgEI5okbQ/dISINRwyNryfmW/n7uuvquuK0V+EeB5jrD6wLTo1iGrWN8c+Gtisi/6YvJW2ntEljFZcL57HIS96P+Yk9oPcZN9IFLKz0uJGgy6FRvBjhhhTVBzBdBNGzWig3NEtqWPEIHx++qmve7eLV6K5GWglejdG6/wCRPfSWaNwqsyvPBR1KEMafaX7jVfxnrtxZKM= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(80048183373757); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040176)(601004)(2401047)(13023025)(13018025)(13017025)(13015025)(13024025)(8121501046)(5005006)(3002001)(10201501046)(6055026);SRVR:BY2PR0301MB2119;BCL:0;PCL:0;RULEID:;SRVR:BY2PR0301MB2119; X-Forefront-PRVS: 0035B15214 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BY2PR0301MB2119;23:HthlGgT0tKhMEteZswfquLGRQgNl8SMsA9I+qT7?= =?us-ascii?Q?7Uq2GLLKuneT7YKCwIdT7YfOdMoZmKq5lO488tDoaFY+HdIKfslLyB5pO52F?= =?us-ascii?Q?ZseLeap0AjV4cRG0vA/i/iisXgTARPqYCDnAHUUsXJwzb8pDUWQcHq7XN0l1?= =?us-ascii?Q?wLe7TnagdjlqFQ7RAS9M4MNJqqgRzWKkYS1Bq2qksSo96QoR2Edzk0ZLO8EU?= =?us-ascii?Q?Fi/lnGnhSQ7rtDIiA6T7lRYzYp/IsZUqdK8ejf5HvAPwu7x0nK3MtaN33WFs?= =?us-ascii?Q?saibNPR9ZYD/ZxTyY3A9p7pQp4dNJz5Ueba5/zmMr6gkPtoCdCe6lssfTdSw?= =?us-ascii?Q?Yf79RflANpFP0c8+jnY6q1Fl0D18TJNeanNacqQP2L8TfpxD5bs/adf9j5dT?= =?us-ascii?Q?4O4LRdipxI6W41SG9dUqB0HrOqQJmTRFjlsXTudob+Ru/1wAq7rAnYEkII6o?= =?us-ascii?Q?UgNv+EQd0QBNUjY6uyJkhEr1sE4RggVJp7mREu4D0uxOwjgFSF5Rfz9jB7nu?= =?us-ascii?Q?IlyOZLakme/8sbvqHQsvdGDGV1+Pi8Bbq2CMc29isRoVE2unua8oBMu+V7Mv?= =?us-ascii?Q?ONT/pon+O+NtgJD8DPabCIHKiAnACwrKpX5wI1w250OB+KVn2Ygo+A43eZ7A?= =?us-ascii?Q?Mp8RYZ2lnY0FDi19q16URm5DuMIaUaqRct9UUecjpD2sXXCBO9yngGDHdiPo?= =?us-ascii?Q?Un8ZMnVeptZYKR9K98BApqOuooTo3tBoHwpeH2gK0DHSzeKr2t7zfAr5f7D5?= =?us-ascii?Q?+D7olbP4Nn2jT6o0dIx12wRbqwjs4Lp0N1Oged/Al+Wg1EvH1be9cI1wm+JS?= =?us-ascii?Q?XHdlBIki6HFQzgLL9q4Ba0IbE8AMNSBkgucPUvlMcmya/9fDXjCh9z4lnHdw?= =?us-ascii?Q?FTSPsumUuBaYlY/Exsv3z2QDdNeV+BSyPL8yAb7CDTTMJeJQYORekggcw0p2?= =?us-ascii?Q?TkFuC3/bw1ExU5eRTaiHOYgz2eEDUxgSBjcMB7AsEZoiFJLjx/RVmVNiBIVI?= =?us-ascii?Q?/7GuIVfWcB8I1TuiMEgnXCAbL?= X-Microsoft-Exchange-Diagnostics: 1;BY2PR0301MB2119;6:QzMls+klmtckmLy03jBwtbb5Wn2GoODitQ3cIB/sPN9H4d4YZNCQy6xZvRmiR6NPXWCsrwCY/ZqGRAwuZtw5OyrQxQo+GJ96nuOfdrTm9g2ZVN3tr0l8+NgplhTLAe3xB9dTPBs/J9Mm5YLA1qHaeSHDCnIYe7dJyoiKMFejprMljicbD2kcw+1uzB9VbMkTcEwDzuG5z+G5DraY1CLe1LNj9IXU4qw1o9Msx7Rbp4pQIm/pTW3u0zgc0mEuExvHMAvonnaeFRVpKiSvgQ6QkW7wnn+x7r4ttJU+EPmyNFeNVYkUteu9fb4+4YxTNEF5uPg84yP/jLYCBcmXdrDx8g==;5:gqLMmb8rZEG6EzgOCTx2oBRjUazTp58QGpbcyO6zI14wUmN/kiyKWiwP/ZhA+39OWx3EGf0NNmDt0yj5wNaZ79p745NavcyxO3GTVDHFbDE3y5VyZIm+N5mGNG6JGfFs2ueZ9c4hQU9K9kOcVlbJ7w==;24:yY6ai1je75A+pvtsaBBKlLlQJch2yvyxTZVrHn7qrA9B+rgRlwK6smbjoAj3zOkytY4TD0zJRN+5fqQ6S5j0CEOphfHPDHtJGdaGMGmWrjo=;7:ZMuDUtjfjlQvU4vaYGtciLLvNJC9CudGseekFkOlakOrinb7QCf30jDMLJsjIgJ6k0Q5SVu8S0I9qIo10BsuPspXOQEDJVHlQgB5fndd0BQ3lW7BrFER0XXuKLpxNp0mYuvIZs9aAzvo27jdyoAGC7aoKKEDtYiyBF9KQ9+MUuN1qum/Vrg2njZuhi44P0EIaSKcd0Y044eun8TxXQk5fhdoFBJLH99kNJ4fthboK3rj60g6U1hh4BvtdmT180+I SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: altera.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Aug 2016 06:06:11.5684 (UTC) X-MS-Exchange-CrossTenant-Id: fbd72e03-d4a5-4110-adce-614d51f2077a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=fbd72e03-d4a5-4110-adce-614d51f2077a;Ip=[66.35.236.227];Helo=[sj-itexedge03.altera.priv.altera.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR0301MB2119 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Poll for link training status is cleared before poll for link up status. This can help to get the reliable link up status, especially when PCIe is in Gen 3 speed. Signed-off-by: Ley Foon Tan --- drivers/pci/host/pcie-altera.c | 45 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 37 insertions(+), 8 deletions(-) diff --git a/drivers/pci/host/pcie-altera.c b/drivers/pci/host/pcie-altera.c index 2b78376..58eef99 100644 --- a/drivers/pci/host/pcie-altera.c +++ b/drivers/pci/host/pcie-altera.c @@ -61,7 +61,8 @@ #define TLP_LOOP 500 #define RP_DEVFN 0 -#define LINK_UP_TIMEOUT 5000 +#define LINK_UP_TIMEOUT HZ +#define LINK_RETRAIN_TIMEOUT HZ #define INTX_NUM 4 @@ -99,11 +100,44 @@ static bool altera_pcie_link_is_up(struct altera_pcie *pcie) return !!((cra_readl(pcie, RP_LTSSM) & RP_LTSSM_MASK) == LTSSM_L0); } +static void altera_wait_link_retrain(struct pci_dev *dev) +{ + u16 reg16; + unsigned long start_jiffies; + struct altera_pcie *pcie = dev->bus->sysdata; + + /* Wait for link training end. */ + start_jiffies = jiffies; + for (;;) { + pcie_capability_read_word(dev, PCI_EXP_LNKSTA, ®16); + if (!(reg16 & PCI_EXP_LNKSTA_LT)) + break; + + if (time_after(jiffies, start_jiffies + LINK_RETRAIN_TIMEOUT)) { + dev_err(&pcie->pdev->dev, "link retrain timeout\n"); + break; + } + udelay(100); + } + + /* Wait for link is up */ + start_jiffies = jiffies; + for (;;) { + if (altera_pcie_link_is_up(pcie)) + break; + + if (time_after(jiffies, start_jiffies + LINK_UP_TIMEOUT)) { + dev_err(&pcie->pdev->dev, "link up timeout\n"); + break; + } + udelay(100); + } +} + static void altera_pcie_retrain(struct pci_dev *dev) { u16 linkcap, linkstat; struct altera_pcie *pcie = dev->bus->sysdata; - int timeout = 0; if (!altera_pcie_link_is_up(pcie)) return; @@ -121,12 +155,7 @@ static void altera_pcie_retrain(struct pci_dev *dev) if ((linkstat & PCI_EXP_LNKSTA_CLS) == PCI_EXP_LNKSTA_CLS_2_5GB) { pcie_capability_set_word(dev, PCI_EXP_LNKCTL, PCI_EXP_LNKCTL_RL); - while (!altera_pcie_link_is_up(pcie)) { - timeout++; - if (timeout > LINK_UP_TIMEOUT) - break; - udelay(5); - } + altera_wait_link_retrain(dev); } } DECLARE_PCI_FIXUP_EARLY(0x1172, PCI_ANY_ID, altera_pcie_retrain); -- 1.8.2.1