summaryrefslogtreecommitdiffstats
path: root/src/usr/scom
diff options
context:
space:
mode:
authorRick Ward <rward15@us.ibm.com>2018-04-25 08:52:31 -0500
committerWilliam G. Hoffa <wghoffa@us.ibm.com>2018-06-05 14:00:46 -0400
commitb364d7b062bfa33c715364eca9654c878c4f6a62 (patch)
treecbb6c7dec3bf50b27b8eba2ff499f14ecbc9a00d /src/usr/scom
parent41f3aa61a7e97de134cffd04ebbbbb286424c3cb (diff)
downloadtalos-hostboot-b364d7b062bfa33c715364eca9654c878c4f6a62.tar.gz
talos-hostboot-b364d7b062bfa33c715364eca9654c878c4f6a62.zip
Centaur Channel Checkstop (runtime)
This story covers when a DMI channel gets checkstopped at runtime and how to service the subsequent SCOM operations that PRD requests to diagnose the issue. At runtime, PRD makes all of its SCOM requests to HBRT which passes them on to PHYP for in-band access. The checkstop blocks in-band access, so HBRT must fail-over to messaging the FSP to do FSI accesses. To reduce the number of SCOM calls to the FSP, HBRT makes a "multi-SCOM read" call for all the common SCOMs that PRD will request after a checkstop, and caches the results. Two new calls (MBOX, generic messaging interface) to the FSP were added in a previous commit to allow FSI SCOM operations through the FSP: - MSG_SINGLE_SCOM_OP - MSG_MULTI_SCOM_OP Also, a new map, chnlFailScomList, was added in a previous commit. chnlFailScomList contains a list of target types and associated SCOM addresses that PRD is likely want to read after a checkstop. PRD is responsible for maintaining the contents. Change-Id: I829a72067007ac8a61d80caa690d8eedee0f08cc RTC:189294 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/59197 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com> Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: William G. Hoffa <wghoffa@us.ibm.com>
Diffstat (limited to 'src/usr/scom')
-rw-r--r--src/usr/scom/runtime/rt_scom.C8
-rw-r--r--src/usr/scom/runtime/test/testscom_rt.H11
2 files changed, 16 insertions, 3 deletions
diff --git a/src/usr/scom/runtime/rt_scom.C b/src/usr/scom/runtime/rt_scom.C
index 26bac2898..551e9bac9 100644
--- a/src/usr/scom/runtime/rt_scom.C
+++ b/src/usr/scom/runtime/rt_scom.C
@@ -28,6 +28,7 @@
#include <errl/errlmanager.H>
#include <scom/scomreasoncodes.H>
#include <scom/scomif.H>
+#include <scom/runtime/rt_scomif.H>
#include <runtime/interface.h>
#include <runtime/rt_targeting.H>
#include <xscom/piberror.H>
@@ -223,6 +224,13 @@ errlHndl_t sendScomToHyp(DeviceFW::OperationType i_opType,
i_opType),
i_scomAddr);
+ constexpr int MembufFatalError = -0x1008;
+
+ if (rc == MembufFatalError)
+ {
+ FSISCOM::switchToFspScomAccess(i_target);
+ }
+
// attempt to translate rc into a pib error assuming
// the rc is in common format
HbrtRcPiberr_t l_commonRc = static_cast<HbrtRcPiberr_t>(rc);
diff --git a/src/usr/scom/runtime/test/testscom_rt.H b/src/usr/scom/runtime/test/testscom_rt.H
index bfa92afde..901b492f8 100644
--- a/src/usr/scom/runtime/test/testscom_rt.H
+++ b/src/usr/scom/runtime/test/testscom_rt.H
@@ -176,7 +176,7 @@ public:
TRACFCOMP( g_trac_scom, "ScomTest::test_SCOMreadWrite_proc> %d/%d fails", fails, total );
}
-
+ // FSI access in runtime
/**
* @brief SCOM test via FSISCOM to Centaur
*
@@ -186,6 +186,8 @@ public:
TRACFCOMP( g_trac_scom, "ScomTest::test_FSISCOMreadWrite_centaur> Start" );
uint64_t fails = 0;
uint64_t total = 0;
+#if 0 // removing this test from runtime because HB doesn't have any FSI SCOM
+ // access during runtime (except through FSP)
errlHndl_t l_err = NULL;
// Setup some targets to use
@@ -252,8 +254,10 @@ public:
{
continue;
}
- else if (scom_targets[x]->
- getAttr<TARGETING::ATTR_HWAS_STATE>().functional != true)
+ else if ((scom_targets[x]->
+ getAttr<TARGETING::ATTR_HWAS_STATE>().functional != true) ||
+ (scom_targets[x]->
+ getAttr<TARGETING::ATTR_SCOM_SWITCHES>().useFsiScom == 0))
{
TRACDCOMP( g_trac_scom, "ScomTest::test_FSISCOMreadWrite_centaur> Target %d is not functional", x );
scom_targets[x] = NULL; //remove from our list
@@ -347,6 +351,7 @@ public:
}
}
+#endif
TRACFCOMP( g_trac_scom, "ScomTest::test_FSISCOMreadWrite_centaur> %d/%d fails", fails, total );
}
OpenPOWER on IntegriCloud