diff options
author | Josh Rispoli <jprispol@us.ibm.com> | 2014-09-26 11:58:30 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2014-10-14 14:54:50 -0500 |
commit | d0dc609dd10135f9be6cee0dda936a88296b64c4 (patch) | |
tree | e0ace0ce4ea6a234a396b92dd9259100a1c91e9e /src | |
parent | 18ec11f6579bafedcf33112be287b063f5f90530 (diff) | |
download | talos-hostboot-d0dc609dd10135f9be6cee0dda936a88296b64c4.tar.gz talos-hostboot-d0dc609dd10135f9be6cee0dda936a88296b64c4.zip |
Add check for functional membufs in checkMinHW
Change-Id: I79d276d0799066df9c0889782bdae305bd0f87a7
RTC:91178
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/13651
Tested-by: Jenkins Server
Reviewed-by: Brian H. Horton <brianh@linux.ibm.com>
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/include/usr/hwas/common/hwas_reasoncodes.H | 5 | ||||
-rw-r--r-- | src/usr/hwas/common/hwas.C | 59 |
2 files changed, 63 insertions, 1 deletions
diff --git a/src/include/usr/hwas/common/hwas_reasoncodes.H b/src/include/usr/hwas/common/hwas_reasoncodes.H index 0e6a07875..c7b735fa8 100644 --- a/src/include/usr/hwas/common/hwas_reasoncodes.H +++ b/src/include/usr/hwas/common/hwas_reasoncodes.H @@ -5,7 +5,9 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* COPYRIGHT International Business Machines Corp. 2011,2014 */ +/* Contributors Listed Below - COPYRIGHT 2012,2014 */ +/* [+] International Business Machines Corp. */ +/* */ /* */ /* Licensed under the Apache License, Version 2.0 (the "License"); */ /* you may not use this file except in compliance with the License. */ @@ -47,6 +49,7 @@ namespace HWAS RC_SYSAVAIL_NO_MEMORY_FUNC = HWAS_COMP_ID | 0x06, RC_SYSAVAIL_NO_PROCS_FUNC = HWAS_COMP_ID | 0x07, RC_SYSAVAIL_NO_NODES_FUNC = HWAS_COMP_ID | 0x08, + RC_SYSAVAIL_NO_MEMBUFS_FUNC = HWAS_COMP_ID | 0x09, }; }; diff --git a/src/usr/hwas/common/hwas.C b/src/usr/hwas/common/hwas.C index 3ac0a3ad0..2322271dd 100644 --- a/src/usr/hwas/common/hwas.C +++ b/src/usr/hwas/common/hwas.C @@ -918,6 +918,65 @@ errlHndl_t checkMinimumHardware(const TARGETING::ConstTargetHandle_t i_node) errlCommit(l_errl, HWAS_COMP_ID); // errl is now NULL } // if no dimms + + // check for functional membufs + PredicateCTM l_membuf(CLASS_CHIP, TYPE_MEMBUF); + + TargetHandleList l_funcMembufTargetList; + PredicatePostfixExpr l_checkExprFunctionalMembufs; + l_checkExprFunctionalMembufs.push(&l_membuf).push(&l_functional).And(); + targetService().getAssociated( l_funcMembufTargetList, pTop, + TargetService::CHILD, TargetService::ALL, + &l_checkExprFunctionalMembufs); + + HWAS_DBG( "checkMinimumHardware: %d functional membufs", + l_funcMembufTargetList.size()); + + if (l_funcMembufTargetList.empty()) + { + HWAS_ERR( "Insufficient hardware to continue IPL (func membufs)"); + + TargetHandleList l_presentMembufTargetList; + PredicatePostfixExpr l_checkExprPresentMembufs; + l_checkExprPresentMembufs.push(&l_membuf).push(&l_present).And(); + targetService().getAssociated( l_presentMembufTargetList, pTop, + TargetService::CHILD, TargetService::ALL, + &l_checkExprPresentMembufs); + uint32_t membufs_present = l_presentMembufTargetList.size(); + + /*@ + * @errortype + * @severity ERRL_SEV_UNRECOVERABLE + * @moduleid MOD_CHECK_MIN_HW + * @reasoncode RC_SYSAVAIL_NO_MEMBUFS_FUNC + * @devdesc checkMinimumHardware found no + * functional membufs + * @custdesc A problem occurred during the IPL of the + * system: Found no functional dimm cards. + * @userdata1[00:31] HUID of node + * @userdata2[00:31] number of present nonfunctional membufs + */ + const uint64_t userdata1 = + (static_cast<uint64_t>(get_huid(pTop)) << 32); + const uint64_t userdata2 = + (static_cast<uint64_t>(membufs_present) << 32); + l_errl = hwasError(ERRL_SEV_UNRECOVERABLE, + MOD_CHECK_MIN_HW, + RC_SYSAVAIL_NO_MEMBUFS_FUNC, + userdata1, userdata2); + + // call out the procedure to find the deconfigured part. + hwasErrorAddProcedureCallout( l_errl, + EPUB_PRC_FIND_DECONFIGURED_PART, + SRCI_PRIORITY_HIGH ); + + // if we already have an error, link this one to the earlier; + // if not, set the common plid + hwasErrorUpdatePlid( l_errl, l_commonPlid ); + errlCommit(l_errl, HWAS_COMP_ID); + // errl is now NULL + } + #endif // CONFIG_DJVPD_READ_FROM_HW // ------------------------------------------------------------ |