[Skiboot] [RFC PATCH 17/23] hw/phb4: Move link tracing into poll_link()

Oliver O'Halloran oohall at gmail.com
Wed Apr 3 20:09:14 AEDT 2019

Currently when we bring the link up we'll stay in the and the link
training trace is enabled we stay in the FRESET_ASSERT_DELAY state until
the link is trained.

Although this is not wrong, it does mean that we don't get a link training
trace in the HRESET case and it's additional PHB4 specific behavior
in the FRESET path. We want to move to a generic FRESET function that
correctly deals with power-controlled slots, so this patch moves the
link trace into the poll_link() function to handle the HRESET case
and make the FRESET path more generic.

Signed-off-by: Oliver O'Halloran <oohall at gmail.com>
 hw/phb4.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/hw/phb4.c b/hw/phb4.c
index c63e916da0b7..3a6b05b4a5a6 100644
--- a/hw/phb4.c
+++ b/hw/phb4.c
@@ -2789,8 +2789,11 @@ static int64_t phb4_poll_link(struct pci_slot *slot)
 		PHBDBG(p, "LINK: Start polling\n");
 		slot->retries = PHB4_LINK_ELECTRICAL_RETRIES;
 		pci_slot_set_state(slot, PHB4_SLOT_LINK_WAIT_ELECTRICAL);
-		/* Polling early here has no chance of a false positive */
-		return pci_slot_set_sm_timeout(slot, msecs_to_tb(1));
+		if (pci_tracing)
+			phb4_training_trace(p);
+		/* fallthrough */
 		 * Wait for the link electrical connection to be
@@ -3049,8 +3052,6 @@ static int64_t phb4_freset(struct pci_slot *slot)
 		PHBDBG(p, "FRESET: Deassert\n");
 		phb4_assert_perst(slot, false);
-		phb4_training_trace(p);
 		pci_slot_set_state(slot, PHB4_SLOT_LINK_START);
 		return slot->ops.poll_link(slot);

More information about the Skiboot mailing list