summaryrefslogtreecommitdiffstats
path: root/src/usr
diff options
context:
space:
mode:
authorDan Crowell <dcrowell@us.ibm.com>2018-08-06 08:41:35 -0500
committerDaniel M. Crowell <dcrowell@us.ibm.com>2018-08-19 22:24:57 -0500
commit5675c7315db0c79fa464149ea38cde09f3195130 (patch)
tree0245f5a028edc609a5b9e0e6bf76203319189daa /src/usr
parent207de5cbd30e805f2f15dc9f2f4bc7e63e774796 (diff)
downloadtalos-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.C11
-rw-r--r--src/usr/errl/errludcallout.C4
-rw-r--r--src/usr/errl/plugins/errludcallout.H11
-rw-r--r--src/usr/hwas/common/hwasCallout.C3
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>()
OpenPOWER on IntegriCloud