From 91f6cf7412ed2fc0a5c0ec50245c44bf3ee5219c Mon Sep 17 00:00:00 2001 From: Dan Crowell Date: Tue, 10 Dec 2019 13:37:30 -0600 Subject: Enhancements to default console output Added the following pieces of extra information to the default console output: -- Attribute Overrides -- 3.49165|**Found 24 attribute overrides in Tank FAPI(1) 3.49169|- PEC:n0:p0:c0 3.49171| ATTR 0EB604DF [1] = 00 3.49174| ATTR 085F1C7E [1] = 00 3.49177| ATTR 048A8902 [1] = 01 3.49180| ATTR 04D8DF8D [2] = 0000 3.49182|- PEC:n0:p0:c1 3.49185| ATTR 0EB604DF [1] = 00 3.49188| ATTR 085F1C7E [1] = 00 3.49191| ATTR 048A8902 [1] = 03 -- New part detection -- 4.97449|Detected new part : 00030002 (Physical:/Sys0/Node0/DIMM2) -- Applying GARD records -- 8.78767|HWAS|Applying GARD record for HUID=0x000E0000 (Physical:/Sys0/Node0/Pr oc0/XBUS0) due to 0x90000135 8.78912|HWAS|Deconfig HUID 0x000E0000, Physical:/Sys0/Node0/Proc0/XBUS0 Change-Id: Ic2ae04515453dbb49e359abff952c87c83e23b72 Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/88388 Tested-by: Jenkins Server Reviewed-by: Nicholas E Bofferding Reviewed-by: Roland Veloz Tested-by: Jenkins OP Build CI Tested-by: Jenkins OP HW Tested-by: FSP CI Jenkins Reviewed-by: William G Hoffa --- src/usr/errldisplay/errldisplay.C | 6 +- src/usr/hwas/common/deconfigGard.C | 23 ++++++- src/usr/targeting/attrPlatOverride.C | 100 ++++++++++++++++++++++++++++++- src/usr/targeting/common/attributeTank.C | 19 ++++++ src/usr/vpd/vpd.C | 16 +++++ 5 files changed, 158 insertions(+), 6 deletions(-) (limited to 'src/usr') diff --git a/src/usr/errldisplay/errldisplay.C b/src/usr/errldisplay/errldisplay.C index 66c876162..3f04618cd 100644 --- a/src/usr/errldisplay/errldisplay.C +++ b/src/usr/errldisplay/errldisplay.C @@ -67,6 +67,7 @@ #include #include #include +#include #ifdef CONFIG_CONSOLE_OUTPUT_FFDCDISPLAY //Generated hearder files for HWP parsing @@ -339,7 +340,6 @@ case HWAS::_type: CONSOLE::displayf(NULL, " Bus Type : %s", #_t case HWAS::HW_CALLOUT: CONSOLE::displayf(NULL, " Callout type : Hardware Callout"); - CONSOLE::displayf(NULL, " CPU id : %d", callout->cpuid); displayGard = true; l_gard = callout->gardErrorType; @@ -676,9 +676,9 @@ void ErrLogDisplay::msgDisplay (const errlHndl_t &i_err, CONSOLE::displayf(NULL, "================================================"); - CONSOLE::displayf(NULL, "Error reported by %s (0x%04X) PLID 0x%08X", + CONSOLE::displayf(NULL, "Error reported by %s (0x%04X) EID 0x%08X", findComponentName( i_committerComp ), - i_committerComp, i_err->plid() ); + i_committerComp, i_err->eid() ); //PRD doesn't follow the rest of the HB conventions // Handle them special diff --git a/src/usr/hwas/common/deconfigGard.C b/src/usr/hwas/common/deconfigGard.C index 220bfa101..89df5b160 100644 --- a/src/usr/hwas/common/deconfigGard.C +++ b/src/usr/hwas/common/deconfigGard.C @@ -173,6 +173,17 @@ errlHndl_t DeconfigGard::applyGardRecord(Target *i_pTarget, // all ok - do the work HWAS_MUTEX_LOCK(iv_mutex); +#if (!defined(CONFIG_CONSOLE_OUTPUT_TRACE) && defined(CONFIG_CONSOLE)) + const char* l_tmpstring = + i_pTarget->getAttr().toString(); + CONSOLE::displayf("HWAS", "Applying GARD record for HUID=0x%08X (%s) due to 0x%.8X", + get_huid(i_pTarget), + l_tmpstring, + l_errlogEid); + free((void*)(l_tmpstring)); + l_tmpstring = nullptr; +#endif + // Deconfigure the Target // don't need to check ATTR_DECONFIG_GARDABLE -- if we get // here, it's because of a gard record on this target @@ -642,9 +653,13 @@ errlHndl_t DeconfigGard::deconfigureTargetsFromGardRecordsForIpl( } #if (!defined(CONFIG_CONSOLE_OUTPUT_TRACE) && defined(CONFIG_CONSOLE)) + const char* l_tmpstring = + l_pTarget->getAttr().toString(); CONSOLE::displayf("HWAS", "Deconfig HUID 0x%08X, %s", get_huid(l_pTarget), - l_pTarget->getAttr().toString()); + l_tmpstring); + free((void*)(l_tmpstring)); + l_tmpstring = nullptr; #endif } // for @@ -911,9 +926,13 @@ errlHndl_t DeconfigGard::deconfigureTargetsFromGardRecordsForIpl( } #if (!defined(CONFIG_CONSOLE_OUTPUT_TRACE) && defined(CONFIG_CONSOLE)) + const char* l_tmpstring = + l_pTarget->getAttr().toString(); CONSOLE::displayf("HWAS", "Deconfig HUID 0x%08X, %s", get_huid(l_pTarget), - l_pTarget->getAttr().toString()); + l_tmpstring); + free((void*)(l_tmpstring)); + l_tmpstring = nullptr; #endif l_specDeconfigVector.erase(l_specDeconfigVector.begin()); diff --git a/src/usr/targeting/attrPlatOverride.C b/src/usr/targeting/attrPlatOverride.C index 7e1025d40..46f50e566 100644 --- a/src/usr/targeting/attrPlatOverride.C +++ b/src/usr/targeting/attrPlatOverride.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2014,2018 */ +/* Contributors Listed Below - COPYRIGHT 2014,2019 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -28,6 +28,7 @@ #include #include #include +#include namespace TARGETING { @@ -291,6 +292,103 @@ errlHndl_t getAttrOverrides(PNOR::SectionInfo_t &i_sectionInfo, break; } + // Print out the contents of all attribute tanks + for( size_t i=0; iattributesExist() ) + { + /* Display output like this + + **Found 3 attribute overrides in Tank TARG(2) + - type:n1:p2:c3 + ATTR 12345678 = 0011223344 + ATTR 10102020 = 223344 + - type:nall:pall:call + ATTR 02395414 = 07 + */ + + CONSOLE::displayf("TARG","**Found %d attribute overrides in Tank %s(%d)", + l_pOverTanks[i]->size(), + AttributeTank::layerToString( + static_cast(i)), + i); + + AttributeTank::AttributeHeader last_hdr; + std::list l_attrList; + l_pOverTanks[i]->getAllAttributes(l_attrList); + for( auto l_attr : l_attrList ) + { + constexpr size_t MAX_DISPLAY = 100; + char outstr[MAX_DISPLAY]; + outstr[0] = '\0'; + + // Only print out the target string once if possible + AttributeTank::AttributeHeader hdr = l_attr->getHeader(); + if( (hdr.iv_targetType != last_hdr.iv_targetType) + || (hdr.iv_node != last_hdr.iv_node) + || (hdr.iv_pos != last_hdr.iv_pos) + || (hdr.iv_unitPos != last_hdr.iv_unitPos) ) + { + EntityPath epath; //func should be static but isn't + sprintf( outstr, "- %s", + epath.pathElementTypeAsString( + static_cast(hdr.iv_targetType)) ); + if( AttributeTank::ATTR_NODE_NA == hdr.iv_node ) + { + strcat( outstr, ":nall" ); + } + else + { + char tmpstr[10]={}; + sprintf( tmpstr, ":n%d", hdr.iv_node ); + strcat( outstr, tmpstr ); + } + if( AttributeTank::ATTR_POS_NA == hdr.iv_pos ) + { + strcat( outstr, ":pall" ); + } + else + { + char tmpstr[10]={}; + sprintf( tmpstr, ":p%d", hdr.iv_pos ); + strcat( outstr, tmpstr ); + } + if( AttributeTank::ATTR_UNIT_POS_NA == hdr.iv_unitPos ) + { + strcat( outstr, ":call" ); + } + else + { + char tmpstr[10]={}; + sprintf( tmpstr, ":c%d", hdr.iv_unitPos ); + strcat( outstr, tmpstr ); + } + CONSOLE::displayf("TARG",outstr); + last_hdr = hdr; + } + + // Now print out the attribute values + sprintf( outstr, " ATTR %.8X [%d] = ", + hdr.iv_attrId, + hdr.iv_valSize ); + size_t max_data = (MAX_DISPLAY - strlen(outstr))/2 - 4; + const char* dataval = + reinterpret_cast(l_attr->getValue()); + for( size_t s=0; s max_data ) + { + strcat( outstr, "..." ); + } + CONSOLE::displayf("TARG",outstr); + } + CONSOLE::flush(); + } + } } while(0); TRACFCOMP(g_trac_targeting,"attrPlatOverride::getAttrOverrides EXIT"); diff --git a/src/usr/targeting/common/attributeTank.C b/src/usr/targeting/common/attributeTank.C index 0d8db2867..c6cad3c49 100644 --- a/src/usr/targeting/common/attributeTank.C +++ b/src/usr/targeting/common/attributeTank.C @@ -637,4 +637,23 @@ size_t AttributeTank::size() const return iv_attributes.size(); } +//****************************************************************************** +void AttributeTank::getAllAttributes( std::list& o_attributes ) const +{ + o_attributes = iv_attributes; } + +//****************************************************************************** +const char* AttributeTank::layerToString( TankLayer i_layer ) +{ + switch(i_layer) + { + case(AttributeTank::TANK_LAYER_FAPI): return "FAPI"; + case(AttributeTank::TANK_LAYER_TARG): return "TARG"; + case(AttributeTank::TANK_LAYER_PERM): return "PERM"; + default: return "UNKNOWN"; + } +} + +} + diff --git a/src/usr/vpd/vpd.C b/src/usr/vpd/vpd.C index 339fd3dab..490c8bbc8 100755 --- a/src/usr/vpd/vpd.C +++ b/src/usr/vpd/vpd.C @@ -855,6 +855,14 @@ errlHndl_t ensureEepromCacheIsInSync(TARGETING::Target * i_target, TRACFCOMP(g_trac_vpd, "VPD::ensureEepromCacheIsInSync: CACHE_PN/SN != HARDWARE_PN/SN,CACHE must be loaded from HARDWARE for target %.8X", TARGETING::get_huid(i_target)); + const char* l_pathstring + = i_target->getAttr().toString(); + CONSOLE::displayf(NULL,"Detected new part : %.8X (%s)", + TARGETING::get_huid(i_target), + l_pathstring); + free((void*)(l_pathstring)); + l_pathstring = nullptr; + CONSOLE::flush(); #ifndef CONFIG_SUPPORT_EEPROM_CACHING //Set the targets as changed since the p/n's don't match HWAS::markTargetChanged(i_target); @@ -1040,6 +1048,14 @@ errlHndl_t ensureCacheIsInSync ( TARGETING::Target * i_target ) else { TRACFCOMP(g_trac_vpd,"VPD::ensureCacheIsInSync: PNOR_PN/SN != SEEPROM_PN/SN, Loading PNOR from SEEPROM for target %.8X",TARGETING::get_huid(i_target)); + const char* l_pathstring = + i_target->getAttr().toString(); + CONSOLE::displayf(NULL,"Detected new part : %.8X (%s)", + TARGETING::get_huid(i_target), + l_pathstring); + free((void*)(l_pathstring)); + l_pathstring = nullptr; + CONSOLE::flush(); //Set the targets as changed since the p/n's don't match HWAS::markTargetChanged(i_target); -- cgit v1.2.1