From 37af28e0577faecd3c5f2d6b303e842687ea6d39 Mon Sep 17 00:00:00 2001 From: Caleb Palmer Date: Wed, 17 Jul 2019 15:20:07 -0500 Subject: 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 Reviewed-by: Brian J Stegmiller Reviewed-by: Paul Greenwood Reviewed-by: Zane C Shelley Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/81062 Tested-by: Jenkins OP Build CI Tested-by: FSP CI Jenkins Tested-by: Jenkins OP HW --- src/usr/diag/prdf/plat/mem/prdfMemDynDealloc.C | 6 ++++-- src/usr/diag/prdf/plat/mem/prdfP9Mca.C | 13 ++++++++++--- src/usr/diag/prdf/plat/mem/prdfRestoreDramRepairs.C | 13 ++++++++++--- 3 files changed, 24 insertions(+), 8 deletions(-) (limited to 'src/usr/diag/prdf/plat/mem') 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 #include #include -#include // Platform includes #include @@ -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(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 ); -- cgit v1.2.1