diff options
author | Caleb Palmer <cnpalmer@us.ibm.com> | 2019-07-17 15:20:07 -0500 |
---|---|---|
committer | Zane C Shelley <zshelle@us.ibm.com> | 2019-07-30 09:22:52 -0500 |
commit | 37af28e0577faecd3c5f2d6b303e842687ea6d39 (patch) | |
tree | 3e09b2659c7af9da7f56369985318f816063710c /src/usr/diag/prdf/plat/mem | |
parent | ddf90e53a96d0d99974d9520e113cc995738bc0f (diff) | |
download | talos-hostboot-37af28e0577faecd3c5f2d6b303e842687ea6d39.tar.gz talos-hostboot-37af28e0577faecd3c5f2d6b303e842687ea6d39.zip |
PRD: NVDIMM avoid gard for general mem errors only for IPL
Change-Id: Iaa1c8b4e92377f2b6bf854f21ee334e915745ff5
CQ: SW470603
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/80608
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Reviewed-by: Brian J Stegmiller <bjs@us.ibm.com>
Reviewed-by: Paul Greenwood <paul.greenwood@ibm.com>
Reviewed-by: Zane C Shelley <zshelle@us.ibm.com>
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/81062
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Diffstat (limited to 'src/usr/diag/prdf/plat/mem')
-rw-r--r-- | src/usr/diag/prdf/plat/mem/prdfMemDynDealloc.C | 6 | ||||
-rw-r--r-- | src/usr/diag/prdf/plat/mem/prdfP9Mca.C | 13 | ||||
-rw-r--r-- | src/usr/diag/prdf/plat/mem/prdfRestoreDramRepairs.C | 13 |
3 files changed, 24 insertions, 8 deletions
diff --git a/src/usr/diag/prdf/plat/mem/prdfMemDynDealloc.C b/src/usr/diag/prdf/plat/mem/prdfMemDynDealloc.C index 054a35a27..0ac004642 100644 --- a/src/usr/diag/prdf/plat/mem/prdfMemDynDealloc.C +++ b/src/usr/diag/prdf/plat/mem/prdfMemDynDealloc.C @@ -1354,19 +1354,21 @@ int32_t dimmList( TargetHandleList & i_dimmList ) PRDF_TRAC( PRDF_FUNC "Predictive dealloc for start addr: 0x%016llx " "end addr: 0x%016llx", ssAddr, seAddr ); + #ifdef CONFIG_NVDIMM // If the DIMM is an NVDIMM, send a message to PHYP that a save/restore // may work. if ( isNVDIMM(*it) ) { - uint32_t l_rc = PlatServices::nvdimmNotifyPhypProtChange( *it, + uint32_t l_rc = PlatServices::nvdimmNotifyProtChange( *it, NVDIMM::NVDIMM_RISKY_HW_ERROR ); if ( SUCCESS != l_rc ) { - PRDF_TRAC( PRDF_FUNC "nvdimmNotifyPhypProtChange(0x%08x) " + PRDF_TRAC( PRDF_FUNC "nvdimmNotifyProtChange(0x%08x) " "failed.", getHuid(*it) ); continue; } } + #endif } return o_rc; diff --git a/src/usr/diag/prdf/plat/mem/prdfP9Mca.C b/src/usr/diag/prdf/plat/mem/prdfP9Mca.C index 1bd8e2256..d415047ff 100644 --- a/src/usr/diag/prdf/plat/mem/prdfP9Mca.C +++ b/src/usr/diag/prdf/plat/mem/prdfP9Mca.C @@ -27,7 +27,6 @@ #include <iipServiceDataCollector.h> #include <prdfExtensibleChip.H> #include <prdfPluginMap.H> -#include <isteps/nvdimm/nvdimm.H> // Platform includes #include <prdfMemDbUtils.H> @@ -747,6 +746,7 @@ int32_t AnalyzeNvdimmHealthStatRegs( ExtensibleChip * i_chip, { #define PRDF_FUNC "[nimbus_mca::AnalyzeNvdimmHealthStatRegs] " + #ifdef CONFIG_NVDIMM #ifdef __HOSTBOOT_RUNTIME uint32_t l_rc = SUCCESS; @@ -786,7 +786,7 @@ int32_t AnalyzeNvdimmHealthStatRegs( ExtensibleChip * i_chip, io_sc.service_data->SetThresholdMaskId(0); // Send message to PHYP that save/restore may work - l_rc = PlatServices::nvdimmNotifyPhypProtChange( dimm, + l_rc = PlatServices::nvdimmNotifyProtChange( dimm, NVDIMM::NVDIMM_RISKY_HW_ERROR ); if ( SUCCESS != l_rc ) continue; @@ -829,7 +829,14 @@ int32_t AnalyzeNvdimmHealthStatRegs( ExtensibleChip * i_chip, PRDF_ERR( PRDF_FUNC "Unexpected call to analyze NVDIMMs at IPL." ); io_sc.service_data->SetCallout( LEVEL2_SUPPORT, MRU_HIGH, NO_GARD ); - #endif + #endif // end runtime vs IPL check + + #else // CONFIG_NVDIMM not defined + + PRDF_ERR( PRDF_FUNC "CONFIG_NVDIMM not defined." ); + io_sc.service_data->SetCallout( LEVEL2_SUPPORT, MRU_HIGH, NO_GARD ); + + #endif // end CONFIG_NVDIMM check return SUCCESS; // nothing to return to rule code diff --git a/src/usr/diag/prdf/plat/mem/prdfRestoreDramRepairs.C b/src/usr/diag/prdf/plat/mem/prdfRestoreDramRepairs.C index 3acf7bcb1..5afc48016 100644 --- a/src/usr/diag/prdf/plat/mem/prdfRestoreDramRepairs.C +++ b/src/usr/diag/prdf/plat/mem/prdfRestoreDramRepairs.C @@ -112,17 +112,24 @@ void __calloutDimm( errlHndl_t & io_errl, TargetHandle_t i_portTrgt, HWAS::DeconfigEnum deconfigPolicy = HWAS::DELAYED_DECONFIG; HWAS::GARD_ErrorType gardPolicy = HWAS::GARD_Predictive; + #ifdef CONFIG_NVDIMM // If the DIMM is an NVDIMM, change the gard and deconfig options to no - // gard/deconfig and set the appropriate attribute to indicate a + // gard/deconfig and call nvdimmNotifyProtChange to indicate a // save/restore may work if ( isNVDIMM(i_dimmTrgt) ) { deconfigPolicy = HWAS::NO_DECONFIG; gardPolicy = HWAS::GARD_NULL; - i_dimmTrgt->setAttr<ATTR_NV_STATUS_FLAG>(0x40); + uint32_t l_rc = PlatServices::nvdimmNotifyProtChange( i_dimmTrgt, + NVDIMM::NVDIMM_RISKY_HW_ERROR ); + if ( SUCCESS != l_rc ) + { + PRDF_TRAC( PRDF_FUNC "nvdimmNotifyProtChange(0x%08x) " + "failed.", PlatServices::getHuid(i_dimmTrgt) ); + } } - + #endif io_errl->addHwCallout( i_dimmTrgt, HWAS::SRCI_PRIORITY_HIGH, deconfigPolicy, gardPolicy ); |