summaryrefslogtreecommitdiffstats
path: root/src/usr/isteps/istep13
diff options
context:
space:
mode:
authorGeorge Keishing <gkeishin@in.ibm.com>2016-01-17 22:43:52 -0600
committerStephen Cprek <smcprek@us.ibm.com>2016-02-19 17:06:10 -0600
commita1453a5a6a503d513c030bbb6cc4fddc6e7ff38f (patch)
treef94eac630c11ee6fdf96ebe46db998cebce947d4 /src/usr/isteps/istep13
parent2371ccf5322545d5df64f188f176b15bd5de3a51 (diff)
downloadtalos-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/usr/isteps/istep13')
-rw-r--r--src/usr/isteps/istep13/hbVddrMsg.C107
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;
}
OpenPOWER on IntegriCloud