summaryrefslogtreecommitdiffstats
path: root/src/usr
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr')
-rw-r--r--src/usr/errldisplay/errldisplay.C6
-rw-r--r--src/usr/hwas/common/deconfigGard.C23
-rw-r--r--src/usr/targeting/attrPlatOverride.C100
-rw-r--r--src/usr/targeting/common/attributeTank.C19
-rwxr-xr-xsrc/usr/vpd/vpd.C16
5 files changed, 158 insertions, 6 deletions
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);
OpenPOWER on IntegriCloud