diff options
author | Rick Ward <rward15@us.ibm.com> | 2018-04-25 08:52:31 -0500 |
---|---|---|
committer | William G. Hoffa <wghoffa@us.ibm.com> | 2018-06-05 14:00:46 -0400 |
commit | b364d7b062bfa33c715364eca9654c878c4f6a62 (patch) | |
tree | cbb6c7dec3bf50b27b8eba2ff499f14ecbc9a00d /src/usr/scom | |
parent | 41f3aa61a7e97de134cffd04ebbbbb286424c3cb (diff) | |
download | talos-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.C | 8 | ||||
-rw-r--r-- | src/usr/scom/runtime/test/testscom_rt.H | 11 |
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 ); } |