summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/usr/diag/prdf/common/plat/p9/prdfLaneRepair.C33
1 files changed, 20 insertions, 13 deletions
diff --git a/src/usr/diag/prdf/common/plat/p9/prdfLaneRepair.C b/src/usr/diag/prdf/common/plat/p9/prdfLaneRepair.C
index 99948b717..94947b037 100644
--- a/src/usr/diag/prdf/common/plat/p9/prdfLaneRepair.C
+++ b/src/usr/diag/prdf/common/plat/p9/prdfLaneRepair.C
@@ -371,8 +371,7 @@ int32_t handleLaneRepairEvent( ExtensibleChip * i_chip,
}
-void obus_smpCallout_link( TargetHandle_t &i_smpTgt,
- TargetHandle_t &i_smpPeerTgt )
+void obus_smpCallout_link( TargetHandle_t &i_smpTgt )
{
errlHndl_t l_mainElog = NULL;
l_mainElog = ServiceGeneratorClass::ThisServiceGenerator().getErrl();
@@ -393,8 +392,12 @@ void obus_smpCallout_link( TargetHandle_t &i_smpTgt,
#ifndef ESW_SIM_COMPILE
errlHndl_t l_err = NULL;
+ // get the peer SMGROUP target associated with input SMPGROUP
+ TargetHandle_t l_smpPeerTgt = i_smpTgt->getAttr<ATTR_PEER_TARGET>();
+ PRDF_ASSERT(nullptr != l_smpPeerTgt);
+
// Call SVPD routine to add callouts
- l_err = HWSV::SvrError::AddSMPCalloutAndFFDC(i_smpTgt, i_smpPeerTgt,
+ l_err = HWSV::SvrError::AddSMPCalloutAndFFDC(i_smpTgt, l_smpPeerTgt,
l_mainElog);
if (NULL != l_err)
@@ -448,6 +451,19 @@ void obus_getSmpTarget( TargetHandle_t &i_obusTgt,
{
l_smpNum = l_smp->getAttr<ATTR_CHIP_UNIT>();
+ // ==========================================
+ // Link numbering from hardware is just 0:1
+ // in OBUS related FIR.
+ // ==========================================
+ // SMPGROUP numbering is 0:7 (2 per OBUS chiplet)
+ //
+ // OBUS0 link 0:1 -> SMGROUP 0:1
+ // OBUS1 link 0:1 -> SMGROUP 2:3
+ // OBUS2 link 0:1 -> SMGROUP 4:5
+ // OBUS3 link 0:1 -> SMGROUP 6:7
+ // ==========================================
+ l_smpNum = l_smpNum % 2;
+
if (i_link == l_smpNum)
{
// We found the SMPGROUP
@@ -464,23 +480,14 @@ void obus_getSmpTarget( TargetHandle_t &i_obusTgt,
void obus_smpCallout_link( TargetHandle_t &i_obusTgt, uint32_t i_link )
{
TargetHandle_t l_smpTarg = nullptr;
- TargetHandle_t l_smpPeerTarg = nullptr;
// Get the associated SMP target for this OBUS target
obus_getSmpTarget( i_obusTgt, i_link, l_smpTarg );
PRDF_ASSERT(nullptr != l_smpTarg);
- // Need the other end of OBUS for the FSP callout
- TargetHandle_t peerObusTgt = getTxBusEndPt(i_obusTgt);
- PRDF_ASSERT(nullptr != peerObusTgt);
-
- // Get the SMP target on the other end
- obus_getSmpTarget( peerObusTgt, i_link, l_smpPeerTarg );
- PRDF_ASSERT(nullptr != l_smpPeerTarg);
-
// Callout both SMPGROUPS
- obus_smpCallout_link( l_smpTarg, l_smpPeerTarg );
+ obus_smpCallout_link( l_smpTarg );
return;
OpenPOWER on IntegriCloud