aboutsummaryrefslogtreecommitdiff
path: root/hw
diff options
context:
space:
mode:
authorMichael Neuling <mikey@neuling.org>2017-09-15 10:27:39 +1000
committerStewart Smith <stewart@linux.vnet.ibm.com>2017-09-15 01:18:24 -0500
commit4a2b8317fd3fee38fdce9b6d6e1639752335204a (patch)
treecfcd4549e47dfb9a7db8a3e8b5c9073fb8446ce1 /hw
parent3f936bae970e8ce116151b7106bf7d6437046c19 (diff)
downloadskiboot-4a2b8317fd3fee38fdce9b6d6e1639752335204a.zip
skiboot-4a2b8317fd3fee38fdce9b6d6e1639752335204a.tar.gz
skiboot-4a2b8317fd3fee38fdce9b6d6e1639752335204a.tar.bz2
phb4: Use link if degraded
In the recent change: 3f936bae97 phb4: Retrain link if degraded We retrain if the link is degraded. We do 3 retries to get an optimal link. Unfortunately if the last retry fails, we mark the PHB as bad and don't use it. Hence that PHB is lost even though it actually trained (just degraded). This fixes the problem by printing an error message (as below) but still marking the PHB as good. [ 7.179320404,3] PHB#0005[0:5]: LINK: Link degraded [ 8.387346665,3] PHB#0005[0:5]: LINK: Link degraded [ 10.078409137,3] PHB#0005[0:5]: LINK: Link degraded [ 11.281477269,3] PHB#0005[0:5]: LINK: Link degraded [ 11.283123885,3] PHB#0005[0:5]: LINK: Degraded but no more retries Signed-off-by: Michael Neuling <mikey@neuling.org> Acked-by: Russell Currey <ruscur@russell.cc> Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
Diffstat (limited to 'hw')
-rw-r--r--hw/phb4.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/hw/phb4.c b/hw/phb4.c
index c469797..fea9125 100644
--- a/hw/phb4.c
+++ b/hw/phb4.c
@@ -2622,7 +2622,13 @@ static int64_t phb4_poll_link(struct pci_slot *slot)
PHBDBG(p, "LINK: Link is stable\n");
if (!phb4_link_optimal(slot)) {
PHBERR(p, "LINK: Link degraded\n");
- return phb4_retry_state(slot);
+ if (slot->link_retries)
+ return phb4_retry_state(slot);
+ /*
+ * Link is degraded but no more retries, so
+ * settle for what we have :-(
+ */
+ PHBERR(p, "LINK: Degraded but no more retries\n");
}
pci_slot_set_state(slot, PHB4_SLOT_NORMAL);
return OPAL_SUCCESS;