diff options
author | George Keishing <gkeishin@in.ibm.com> | 2016-01-17 22:43:52 -0600 |
---|---|---|
committer | Stephen Cprek <smcprek@us.ibm.com> | 2016-02-19 17:06:10 -0600 |
commit | a1453a5a6a503d513c030bbb6cc4fddc6e7ff38f (patch) | |
tree | f94eac630c11ee6fdf96ebe46db998cebce947d4 /src | |
parent | 2371ccf5322545d5df64f188f176b15bd5de3a51 (diff) | |
download | talos-hostboot-a1453a5a6a503d513c030bbb6cc4fddc6e7ff38f.tar.gz talos-hostboot-a1453a5a6a503d513c030bbb6cc4fddc6e7ff38f.zip |
P9 DDR4 Callout for failing domains of Centaur DIMMs
RTC :134057
Change-Id: Ib827e429f22be845ea02f3d1a949baa7440daa72
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/23348
Tested-by: Jenkins Server
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/usr/isteps/istep13/hbVddrMsg.C | 107 |
1 files changed, 106 insertions, 1 deletions
diff --git a/src/usr/isteps/istep13/hbVddrMsg.C b/src/usr/isteps/istep13/hbVddrMsg.C index 70bb61af5..527a0bdef 100644 --- a/src/usr/isteps/istep13/hbVddrMsg.C +++ b/src/usr/isteps/istep13/hbVddrMsg.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2012,2015 */ +/* Contributors Listed Below - COPYRIGHT 2012,2016 */ /* [+] Google Inc. */ /* [+] International Business Machines Corp. */ /* */ @@ -433,6 +433,49 @@ errlHndl_t HBVddrMsg::sendMsg(VDDR_MSG_TYPE i_msgType) const return l_err; } +// +// calloutCentaurChildDimms : HW callout for the failing DIMMs +// +void calloutCentaurChildDimms( + errlHndl_t & io_errl, + const TARGETING::Target * i_membuf) +{ + TRACFCOMP(g_trac_volt, ENTER_MRK "calloutCentaurChildDimms"); + + TARGETING::TargetHandleList l_dimmList; + + // Get child dimms + getChildAffinityTargets( l_dimmList, + i_membuf, + CLASS_NA, + TYPE_DIMM ); + + if( !l_dimmList.empty()) + { + // iterate over the DIMMs and call them out + TargetHandleList::iterator l_iter = l_dimmList.begin(); + + for(;l_iter != l_dimmList.end(); ++l_iter) + { + TRACFCOMP( g_trac_volt, INFO_MRK + "HBVddrMsg::calloutCentaurChildDimms Target HUID = 0x%08X" , + TARGETING::get_huid(*l_iter) ); + + io_errl->addHwCallout( *l_iter, + HWAS::SRCI_PRIORITY_LOW, + HWAS::NO_DECONFIG, + HWAS::GARD_NULL ); + } + } + else + { + TRACFCOMP(g_trac_volt, "Centuar [ 0x%08X ] No child DIMMs found!", + TARGETING::get_huid(i_membuf)); + } + + TRACFCOMP(g_trac_volt, EXIT_MRK "calloutCentaurChildDimms"); +} + /////////////////////////////////////////////////////////////////////////////// // HBVddrMsg::processVDDRmsg @@ -519,6 +562,68 @@ errlHndl_t HBVddrMsg::processVDDRmsg(msg_t* i_recvMsg) const */ createErrLog(l_errLog, fapi::MOD_VDDR_PROC_VDDR_MSG, fapi::RC_VDDR_POWR_ERR, l_errPlid); + + l_errLog->addProcedureCallout( + HWAS::EPUB_PRC_MEMORY_PLUGGING_ERROR, + HWAS::SRCI_PRIORITY_MED ); + + // Find the centaur buffers associated with this Domain id + TARGETING::TargetHandleList membufTargetList; + TARGETING::ATTR_VMEM_ID_type l_attr_domainId = 0x0; + TARGETING::Target* pMembuf =NULL; + getAllChips(membufTargetList, TYPE_MEMBUF); + + for (TARGETING::TargetHandleList::const_iterator + ppMembuf = membufTargetList.begin(); + ppMembuf != membufTargetList.end(); + ++ppMembuf) + { + pMembuf = *ppMembuf; + // Get the domain id and check if this Id is matching + // centaur chip reported for failing domain Id + switch(domain) + { + // Add hw callouts for the failing Centaur and it's + // child DIMMs + case MEM_VOLTAGE_DOMAIN_VDDR: + l_attr_domainId = + pMembuf->getAttr< TARGETING::ATTR_VMEM_ID >(); + break; + case MEM_VOLTAGE_DOMAIN_VCS: + l_attr_domainId = + pMembuf->getAttr< TARGETING::ATTR_VCS_ID>(); + break; + case MEM_VOLTAGE_DOMAIN_VPP: + l_attr_domainId = + pMembuf->getAttr< TARGETING::ATTR_VPP_ID>(); + break; + case MEM_VOLTAGE_DOMAIN_AVDD: + l_attr_domainId = + pMembuf->getAttr< TARGETING::ATTR_AVDD_ID>(); + break; + case MEM_VOLTAGE_DOMAIN_VDD: + l_attr_domainId = + pMembuf->getAttr< TARGETING::ATTR_VDD_ID>(); + break; + default: + // Mark this Centaur as Not found + pMembuf = NULL; + TRACFCOMP( g_trac_volt, ERR_MRK + "[ ERROR ] unsupported Domain" ); + break; + } + + // Call out DIMMs associated for this Centaur + if(( pMembuf != NULL ) && ( l_attr_domainId == l_domainId )) + { + TRACFCOMP( g_trac_volt, INFO_MRK + " Target Centaur HUID = 0x%08X", + TARGETING::get_huid(pMembuf)); + + calloutCentaurChildDimms( l_errLog, pMembuf ); + } + } + l_errLog->plid(l_errPlid); break; } |