From: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
To: Yinghai Lu <yinghai.lu@oracle.com>
Cc: Jesse Barnes <jbarnes@virtuousgeek.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-pci@vger.kernel.org" <linux-pci@vger.kernel.org>
Subject: Re: [RFC PATCH] pciehp: Wait for link get trained in pci_check_link_status()
Date: Tue, 08 Nov 2011 18:19:48 +0900 [thread overview]
Message-ID: <4EB8F434.6090003@jp.fujitsu.com> (raw)
In-Reply-To: <4EB88238.4050409@oracle.com>
(2011/11/08 10:13), Yinghai Lu wrote:
>
> Found one PCI Express Modules has link training error after hotplug.
> It turns out that after DLLLA is set, LT is still set for a while.
> So pciehp will delcare that hotplug fail in 1s.
I think DLLLA bit reads 1b means LT is completed. So I don't know why LT
is still set on your platform.
>
> HW guys say that pciehp is against PCI-e SPEC:
> From PCI Express Base Specification Revision 2.1, Section 6.7.3.3:
> Software must allow 1 second after the Data Link Layer Link Active bit reads 1b
> before it is permitted to determine that a hot plugged device which fails to
> return a Successful Completion for a Valid Configuration Request is a broken
> device (see section 6.6).
>
> Try to wait for long enough by adding LT checking in 1s.
The pciehp driver already have this 1 second wait in board_added().
So I still don't understand what in pciehp is against PCIe spec clearly.
Can you explain more about this?
What about the patch below? I think it's much simpler and has less impact.
Regards,
Kenji Kaneshige
---
drivers/pci/hotplug/pciehp_ctrl.c | 3 ---
drivers/pci/hotplug/pciehp_hpc.c | 14 ++++++++++++++
2 files changed, 14 insertions(+), 3 deletions(-)
Index: linux-3.1/drivers/pci/hotplug/pciehp_ctrl.c
===================================================================
--- linux-3.1.orig/drivers/pci/hotplug/pciehp_ctrl.c
+++ linux-3.1/drivers/pci/hotplug/pciehp_ctrl.c
@@ -213,9 +213,6 @@ static int board_added(struct slot *p_sl
goto err_exit;
}
- /* Wait for 1 second after checking link training status */
- msleep(1000);
-
/* Check for a power fault */
if (ctrl->power_fault_detected || pciehp_query_power_fault(p_slot)) {
ctrl_err(ctrl, "Power fault on slot %s\n", slot_name(p_slot));
Index: linux-3.1/drivers/pci/hotplug/pciehp_hpc.c
===================================================================
--- linux-3.1.orig/drivers/pci/hotplug/pciehp_hpc.c
+++ linux-3.1/drivers/pci/hotplug/pciehp_hpc.c
@@ -280,6 +280,20 @@ int pciehp_check_link_status(struct cont
else
msleep(1000);
+ /*
+ * Need to wait for 1 second after the Data Link Layer Link
+ * Active bit reads 1b before sending configuration request.
+ * We also need additional 100 ms wait if the downstream port
+ * supports Link speeds greater than 5.0 GT/s. We place this
+ * wait before checking Link Training bit because Link
+ * Training bit still is set even after Data Link Layer Link
+ * Active bit is set on some platforms.
+ */
+ if (ctrl->pcie->port->subordinate->max_bus_speed > PCIE_SPEED_5_0GT)
+ msleep(1100);
+ else
+ msleep(1000);
+
retval = pciehp_readw(ctrl, PCI_EXP_LNKSTA, &lnk_status);
if (retval) {
ctrl_err(ctrl, "Cannot read LNKSTATUS register\n");
next prev parent reply other threads:[~2011-11-08 9:20 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-08 1:13 [RFC PATCH] pciehp: Wait for link get trained in pci_check_link_status() Yinghai Lu
2011-11-08 9:19 ` Kenji Kaneshige [this message]
2011-11-08 15:27 ` Yinghai Lu
2011-11-08 21:54 ` Yinghai Lu
2011-11-10 7:39 ` Kenji Kaneshige
2011-11-10 7:40 ` [PATCH 1/2] pciehp: wait 1000 ms before Link Training check Kenji Kaneshige
2011-11-10 19:10 ` Yinghai Lu
2011-11-10 7:42 ` [PATCH 2/2] pciehp: wait 100 ms after " Kenji Kaneshige
2011-11-10 19:10 ` Yinghai Lu
2011-11-11 17:32 ` Jesse Barnes
2011-11-11 17:33 ` Yinghai Lu
2011-11-11 17:40 ` Greg KH
[not found] ` <4ECDA602.9060103@oracle.com>
2011-11-27 3:25 ` pciehp for stable Greg KH
2011-12-02 23:21 ` Greg KH
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4EB8F434.6090003@jp.fujitsu.com \
--to=kaneshige.kenji@jp.fujitsu.com \
--cc=jbarnes@virtuousgeek.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=yinghai.lu@oracle.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.