diff options
author | Dan Crowell <dcrowell@us.ibm.com> | 2019-12-10 13:37:30 -0600 |
---|---|---|
committer | William G Hoffa <wghoffa@us.ibm.com> | 2020-01-07 13:22:21 -0600 |
commit | 91f6cf7412ed2fc0a5c0ec50245c44bf3ee5219c (patch) | |
tree | 9cf11ec84dbd532f5f8c574a70a55dbed2e65b91 /src | |
parent | 4198ffbc2ae5404b05baff55be8e6f39578389cc (diff) | |
download | talos-hostboot-91f6cf7412ed2fc0a5c0ec50245c44bf3ee5219c.tar.gz talos-hostboot-91f6cf7412ed2fc0a5c0ec50245c44bf3ee5219c.zip |
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 <pfd-jenkins+hostboot@us.ibm.com>
Reviewed-by: Nicholas E Bofferding <bofferdn@us.ibm.com>
Reviewed-by: Roland Veloz <rveloz@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')
-rw-r--r-- | src/include/usr/targeting/common/attributeTank.H | 15 | ||||
-rw-r--r-- | src/usr/errldisplay/errldisplay.C | 6 | ||||
-rw-r--r-- | src/usr/hwas/common/deconfigGard.C | 23 | ||||
-rw-r--r-- | src/usr/targeting/attrPlatOverride.C | 100 | ||||
-rw-r--r-- | src/usr/targeting/common/attributeTank.C | 19 | ||||
-rwxr-xr-x | src/usr/vpd/vpd.C | 16 |
6 files changed, 173 insertions, 6 deletions
diff --git a/src/include/usr/targeting/common/attributeTank.H b/src/include/usr/targeting/common/attributeTank.H index 4e67e72db..1a4c5a4ce 100644 --- a/src/include/usr/targeting/common/attributeTank.H +++ b/src/include/usr/targeting/common/attributeTank.H @@ -713,6 +713,21 @@ namespace AttributeTank */ size_t size() const; + /** + * @brief Return a copy of all attributes in the tank + * + * @param[out] List of all attributes in this tank + * @return n/a + */ + void getAllAttributes( std::list<Attribute *>& o_attributes ) const; + + /** + * @brief Return a string description of the given tank layer + * + * @return String representation of layer + */ + static const char* layerToString( TankLayer i_layer ); + private: // Copy constructor and assignment operator disabled AttributeTank(const AttributeTank & i_right); 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 <targeting/common/targetservice.H> #include <targeting/common/iterators/targetiterator.H> #include <targeting/common/target.H> +#include <arch/ppc.H> #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<TARGETING::ATTR_PHYS_PATH>().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<TARGETING::ATTR_PHYS_PATH>().toString(); CONSOLE::displayf("HWAS", "Deconfig HUID 0x%08X, %s", get_huid(l_pTarget), - l_pTarget->getAttr<TARGETING::ATTR_PHYS_PATH>().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<TARGETING::ATTR_PHYS_PATH>().toString(); CONSOLE::displayf("HWAS", "Deconfig HUID 0x%08X, %s", get_huid(l_pTarget), - l_pTarget->getAttr<TARGETING::ATTR_PHYS_PATH>().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 <targeting/common/targreasoncodes.H> #include <errl/errlmanager.H> #include <secureboot/service.H> +#include <console/consoleif.H> 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; i<AttributeTank::TANK_LAYER_LAST; i++ ) + { + if( l_pOverTanks[i]->attributesExist() ) + { + /* 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<AttributeTank::TankLayer>(i)), + i); + + AttributeTank::AttributeHeader last_hdr; + std::list<AttributeTank::Attribute*> 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<TARGETING::TYPE>(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<const char*>(l_attr->getValue()); + for( size_t s=0; s<hdr.iv_valSize && s<max_data; s++ ) + { + char datastr[4]={}; + sprintf( datastr, "%.2X", dataval[s] ); + strcat( outstr, datastr ); + } + if( hdr.iv_valSize > 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<Attribute *>& 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<TARGETING::ATTR_PHYS_PATH>().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<TARGETING::ATTR_PHYS_PATH>().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); |