diff options
author | Dan Crowell <dcrowell@us.ibm.com> | 2018-08-06 08:41:35 -0500 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2018-08-19 22:24:57 -0500 |
commit | 5675c7315db0c79fa464149ea38cde09f3195130 (patch) | |
tree | 0245f5a028edc609a5b9e0e6bf76203319189daa /src/usr | |
parent | 207de5cbd30e805f2f15dc9f2f4bc7e63e774796 (diff) | |
download | talos-hostboot-5675c7315db0c79fa464149ea38cde09f3195130.tar.gz talos-hostboot-5675c7315db0c79fa464149ea38cde09f3195130.zip |
Add flag to HWAS Callout for SMP repair indicator
Used one of the reserved bytes of the callout structure to hold
a flag that will indicate if the SMP bus being called out is
completely down, and thus eligible for concurrent repair.
Change-Id: I299e3393529e811aa006a087de51165b79038201
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/63946
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/usr')
-rw-r--r-- | src/usr/errl/errlentry.C | 11 | ||||
-rw-r--r-- | src/usr/errl/errludcallout.C | 4 | ||||
-rw-r--r-- | src/usr/errl/plugins/errludcallout.H | 11 | ||||
-rw-r--r-- | src/usr/hwas/common/hwasCallout.C | 3 |
4 files changed, 24 insertions, 5 deletions
diff --git a/src/usr/errl/errlentry.C b/src/usr/errl/errlentry.C index 3d183b923..d16ba7dab 100644 --- a/src/usr/errl/errlentry.C +++ b/src/usr/errl/errlentry.C @@ -422,7 +422,8 @@ void ErrlEntry::addPartCallout(const TARGETING::Target *i_target, void ErrlEntry::addBusCallout(const TARGETING::Target *i_target_endp1, const TARGETING::Target *i_target_endp2, const HWAS::busTypeEnum i_busType, - const HWAS::callOutPriority i_priority) + const HWAS::callOutPriority i_priority, + const HWAS::CalloutFlag_t i_flag) { TRACFCOMP(g_trac_errl, ENTER_MRK"addBusCallout(%p, %p, %d, 0x%x)", i_target_endp1, i_target_endp2, i_busType, i_priority); @@ -439,7 +440,7 @@ void ErrlEntry::addBusCallout(const TARGETING::Target *i_target_endp1, ErrlUserDetailsCallout( pData1, size1, pData2, size2, i_busType, - i_priority).addToLog(this); + i_priority, i_flag).addToLog(this); if( ep1 ) { @@ -456,7 +457,8 @@ void ErrlEntry::addBusCallout(const TARGETING::Target *i_target_endp1, void ErrlEntry::addBusCallout(const TARGETING::EntityPath & i_target_endp1, const TARGETING::EntityPath & i_target_endp2, const HWAS::busTypeEnum i_busType, - const HWAS::callOutPriority i_priority) + const HWAS::callOutPriority i_priority, + const HWAS::CalloutFlag_t i_flag) { char * l_target_endp1_path_str = nullptr; char * l_target_endp2_path_str = nullptr; @@ -491,7 +493,8 @@ void ErrlEntry::addBusCallout(const TARGETING::EntityPath & i_target_endp1, &i_target_endp2, size2, i_busType, - i_priority).addToLog(this); + i_priority, + i_flag).addToLog(this); } else diff --git a/src/usr/errl/errludcallout.C b/src/usr/errl/errludcallout.C index 3e8c0b522..0ba9e1570 100644 --- a/src/usr/errl/errludcallout.C +++ b/src/usr/errl/errludcallout.C @@ -112,7 +112,8 @@ ErrlUserDetailsCallout::ErrlUserDetailsCallout( const void *i_pTarget2Data, uint32_t i_target2DataLength, const HWAS::busTypeEnum i_busType, - const HWAS::callOutPriority i_priority) + const HWAS::callOutPriority i_priority, + const HWAS::CalloutFlag_t i_flag) { TRACDCOMP(g_trac_errl, "BusCallout entry"); @@ -127,6 +128,7 @@ ErrlUserDetailsCallout::ErrlUserDetailsCallout( pData = reinterpret_cast<HWAS::callout_ud_t *> (reallocUsrBuf(pDataLength)); pData->type = HWAS::BUS_CALLOUT; + pData->flag = i_flag; pData->busType = i_busType; pData->priority = i_priority; char * l_ptr = (char *)(++pData); diff --git a/src/usr/errl/plugins/errludcallout.H b/src/usr/errl/plugins/errludcallout.H index 4df646c7b..9ebea5e64 100644 --- a/src/usr/errl/plugins/errludcallout.H +++ b/src/usr/errl/plugins/errludcallout.H @@ -362,6 +362,17 @@ case HWAS::_type: i_parser.PrintString( "Priority", #_type); break; break; } // switch priority #undef case_PRIORITY + + switch (pData->flag) + { +#define case_FLAG(_type) \ + case HWAS::_type: i_parser.PrintString( "Flag", #_type); break; + case_FLAG(FLAG_LINK_DOWN) + case(HWAS::FLAG_NONE): break; //do not print anything + default: + i_parser.PrintNumber( "Flag", "UNKNOWN: 0x%X", + ntohl(pData->flag) ); + } // switch partType } // parse friend class ErrlUserDetailsParserSensor; diff --git a/src/usr/hwas/common/hwasCallout.C b/src/usr/hwas/common/hwasCallout.C index a7ea7e224..83f168a29 100644 --- a/src/usr/hwas/common/hwasCallout.C +++ b/src/usr/hwas/common/hwasCallout.C @@ -60,6 +60,9 @@ bool retrieveTarget(uint8_t * & io_uData, { bool l_err = false; + static_assert( sizeof(callout_ud_t) == 20, + "callout_ud_t is the wrong size" ); + // data is either a token indicating it's the // MASTER_PROCESSOR_CHIP_TARGET_SENTINEL // or it's the EntityPath - getAttr<TARGETING::ATTR_PHYS_PATH>() |