diff options
author | Dan Crowell <dcrowell@us.ibm.com> | 2017-03-27 16:38:08 -0500 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2017-04-21 23:28:33 -0400 |
commit | 96b6f392d2a590938540216fd50b1b350a3b5730 (patch) | |
tree | a3e4824897c84232fda78a9d88a0f2625b5d2248 /src/usr/hwas | |
parent | 335bd0a9a6d45518f340396e4996aba282af3118 (diff) | |
download | talos-hostboot-96b6f392d2a590938540216fd50b1b350a3b5730.tar.gz talos-hostboot-96b6f392d2a590938540216fd50b1b350a3b5730.zip |
Terminate IPL if no memory configured behind master proc
Firmware doesn't currently support booting in a configuration
where there is no functional memory behind the master processor
(proc0). Added an explicit check to the 'minimum hardware'
logic to account for this to avoid confusing CRESP errors when
this scenario shows up.
Change-Id: Ia9c1e1d1cb135efb58a52edfccffe66174f57a2c
CQ: SW384402
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/39048
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Christian R. Geddes <crgeddes@us.ibm.com>
Reviewed-by: Stephen M. Cprek <smcprek@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/usr/hwas')
-rw-r--r-- | src/usr/hwas/common/hwas.C | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/src/usr/hwas/common/hwas.C b/src/usr/hwas/common/hwas.C index 8e6931ef7..04c47356e 100644 --- a/src/usr/hwas/common/hwas.C +++ b/src/usr/hwas/common/hwas.C @@ -1669,6 +1669,66 @@ errlHndl_t checkMinimumHardware(const TARGETING::ConstTargetHandle_t i_nodeOrSys // errl is now NULL } // if no dimms + //@fixme-RTC:149250-Remove when we have XOR Mask Support + // check here for functional dimms behind the master proc + targetService().getAssociated(l_dimms, l_pMasterProc, + TargetService::CHILD_BY_AFFINITY, TargetService::ALL, + &l_checkExprFunctional); + HWAS_DBG( "checkMinimumHardware: %d functional dimms behind master proc %.8X", + l_dimms.size(), get_huid(l_pMasterProc) ); + + if (l_dimms.empty()) + { + HWAS_ERR( "Insufficient hardware to continue IPL (func DIMM behind master proc)"); + + if(o_bootable) + { + *o_bootable = false; + break; + } + // determine some numbers to help figure out what's up.. + TargetHandleList l_plist; + PredicatePostfixExpr l_checkExprPresent; + l_checkExprPresent.push(&l_dimm).push(&l_present).And(); + targetService().getAssociated(l_plist, l_pMasterProc, + TargetService::CHILD_BY_AFFINITY, TargetService::ALL, + &l_checkExprPresent); + uint32_t dimms_present = l_plist.size(); + + /*@ + * @errortype + * @severity ERRL_SEV_UNRECOVERABLE + * @moduleid MOD_CHECK_MIN_HW + * @reasoncode RC_SYSAVAIL_NO_MEMORY_FUNC_MASTER + * @devdesc checkMinimumHardware found no + * functional dimms behind proc0 + * @custdesc A problem occurred during the IPL of the + * system: Found no functional dimm cards. + * @userdata1[00:31] HUID of master proc + * @userdata2[00:31] number of present, non-functional dimms + */ + const uint64_t userdata1 = + (static_cast<uint64_t>(get_huid(l_pMasterProc)) << 32); + const uint64_t userdata2 = + (static_cast<uint64_t>(dimms_present) << 32); + l_errl = hwasError(ERRL_SEV_UNRECOVERABLE, + MOD_CHECK_MIN_HW, + RC_SYSAVAIL_NO_MEMORY_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 + } // if no dimms + //END section to remove + // There needs to be either functional MCS/MCAs (NIMBUS) or MCS/MBAs // (CUMULUS). Check for MCAs first. PredicateCTM l_mca(CLASS_UNIT, TYPE_MCA); |