@@ -4638,8 +4638,7 @@ static int pci_pm_reset(struct pci_dev *dev, int probe)
4638
4638
* pcie_wait_for_link_delay - Wait until link is active or inactive
4639
4639
* @pdev: Bridge device
4640
4640
* @active: waiting for active or inactive?
4641
- * @delay: Delay to wait after link has become active (in ms). Specify %0
4642
- * for no delay.
4641
+ * @delay: Delay to wait after link has become active (in ms)
4643
4642
*
4644
4643
* Use this to wait till link becomes active or inactive.
4645
4644
*/
@@ -4680,7 +4679,7 @@ static bool pcie_wait_for_link_delay(struct pci_dev *pdev, bool active,
4680
4679
msleep (10 );
4681
4680
timeout -= 10 ;
4682
4681
}
4683
- if (active && ret && delay )
4682
+ if (active && ret )
4684
4683
msleep (delay );
4685
4684
else if (ret != active )
4686
4685
pci_info (pdev , "Data Link Layer Link Active not %s in 1000 msec\n" ,
@@ -4801,28 +4800,17 @@ void pci_bridge_wait_for_secondary_bus(struct pci_dev *dev)
4801
4800
if (!pcie_downstream_port (dev ))
4802
4801
return ;
4803
4802
4804
- /*
4805
- * Per PCIe r5.0, sec 6.6.1, for downstream ports that support
4806
- * speeds > 5 GT/s, we must wait for link training to complete
4807
- * before the mandatory delay.
4808
- *
4809
- * We can only tell when link training completes via DLL Link
4810
- * Active, which is required for downstream ports that support
4811
- * speeds > 5 GT/s (sec 7.5.3.6). Unfortunately some common
4812
- * devices do not implement Link Active reporting even when it's
4813
- * required, so we'll check for that directly instead of checking
4814
- * the supported link speed. We assume devices without Link Active
4815
- * reporting can train in 100 ms regardless of speed.
4816
- */
4817
- if (dev -> link_active_reporting ) {
4818
- pci_dbg (dev , "waiting for link to train\n" );
4819
- if (!pcie_wait_for_link_delay (dev , true, 0 )) {
4803
+ if (pcie_get_speed_cap (dev ) <= PCIE_SPEED_5_0GT ) {
4804
+ pci_dbg (dev , "waiting %d ms for downstream link\n" , delay );
4805
+ msleep (delay );
4806
+ } else {
4807
+ pci_dbg (dev , "waiting %d ms for downstream link, after activation\n" ,
4808
+ delay );
4809
+ if (!pcie_wait_for_link_delay (dev , true, delay )) {
4820
4810
/* Did not train, no need to wait any further */
4821
4811
return ;
4822
4812
}
4823
4813
}
4824
- pci_dbg (child , "waiting %d ms to become accessible\n" , delay );
4825
- msleep (delay );
4826
4814
4827
4815
if (!pci_device_is_present (child )) {
4828
4816
pci_dbg (child , "waiting additional %d ms to become accessible\n" , delay );
0 commit comments