summaryrefslogtreecommitdiffstats
path: root/src/usr/diag/prdf/common/framework
diff options
context:
space:
mode:
authorCaleb Palmer <cnpalmer@us.ibm.com>2019-08-27 14:59:06 -0500
committerZane C Shelley <zshelle@us.ibm.com>2019-08-29 09:40:29 -0500
commit6034efa847e5bb46288670c12fc5fb02f6390aab (patch)
tree0726fffa3b2b533ae66527f307f8ff3b8a83b6bd /src/usr/diag/prdf/common/framework
parent153dcaa15050071e25b0177618ad0c9d829606e2 (diff)
downloadblackbird-hostboot-6034efa847e5bb46288670c12fc5fb02f6390aab.tar.gz
blackbird-hostboot-6034efa847e5bb46288670c12fc5fb02f6390aab.zip
PRD: Skip callouts without trgts when clearing NVDIMM gard
Change-Id: Ic8dea5a3077a34ff10ade3c01f1a5031294156ef CQ: SW473843 Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/82947 Reviewed-by: Paul Greenwood <paul.greenwood@ibm.com> Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-by: Brian J Stegmiller <bjs@us.ibm.com> Reviewed-by: Zane C Shelley <zshelle@us.ibm.com> Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/82949 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>
Diffstat (limited to 'src/usr/diag/prdf/common/framework')
-rwxr-xr-xsrc/usr/diag/prdf/common/framework/service/prdfServiceDataCollector.C39
1 files changed, 36 insertions, 3 deletions
diff --git a/src/usr/diag/prdf/common/framework/service/prdfServiceDataCollector.C b/src/usr/diag/prdf/common/framework/service/prdfServiceDataCollector.C
index 49ba0bf7e..11f264a49 100755
--- a/src/usr/diag/prdf/common/framework/service/prdfServiceDataCollector.C
+++ b/src/usr/diag/prdf/common/framework/service/prdfServiceDataCollector.C
@@ -187,13 +187,17 @@ void ServiceDataCollector::clearNvdimmMruListGard()
for ( auto & mru : xMruList )
{
PRDcallout callout = mru.callout;
- TargetHandle_t trgt = callout.getTarget();
- if ( TYPE_DIMM == PlatServices::getTargetType(trgt) )
+ PRDcalloutData::MruType mruType = callout.getType();
+
+ if ( mruType == PRDcalloutData::TYPE_TARGET )
{
+ TargetHandle_t trgt = callout.getTarget();
+
// If the callout target is an NVDIMM send a message to
// PHYP/Hostboot that a save/restore may work, and if we are at
// IPL, clear Gard on the NVDIMM.
- if ( isNVDIMM(trgt) )
+ if ( TYPE_DIMM == PlatServices::getTargetType(trgt) &&
+ isNVDIMM(trgt) )
{
// Send the message to PHYP/Hostboot
uint32_t l_rc = PlatServices::nvdimmNotifyProtChange( trgt,
@@ -210,6 +214,35 @@ void ServiceDataCollector::clearNvdimmMruListGard()
#endif
}
}
+ else if ( mruType == PRDcalloutData::TYPE_MEMMRU )
+ {
+ MemoryMru memMru( callout.flatten() );
+ TargetHandleList dimmList = memMru.getCalloutList();
+
+ for ( auto & dimm : dimmList )
+ {
+ // If the callout target is an NVDIMM send a message to
+ // PHYP/Hostboot that a save/restore may work, and if we are at
+ // IPL, clear Gard on the NVDIMM.
+ if ( TYPE_DIMM == PlatServices::getTargetType(dimm) &&
+ isNVDIMM(dimm) )
+ {
+ // Send the message to PHYP/Hostboot
+ uint32_t l_rc = PlatServices::nvdimmNotifyProtChange( dimm,
+ NVDIMM::NVDIMM_RISKY_HW_ERROR );
+ if ( SUCCESS != l_rc )
+ {
+ PRDF_TRAC( PRDF_FUNC "nvdimmNotifyProtChange(0x%08x) "
+ "failed.", PlatServices::getHuid(dimm) );
+ continue;
+ }
+ #ifndef __HOSTBOOT_RUNTIME
+ // IPL, clear Gard
+ mru.gardState = NO_GARD;
+ #endif
+ }
+ }
+ }
}
#endif // __HOSTBOOT_MODULE
#endif // CONFIG_NVDIMM
OpenPOWER on IntegriCloud