diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/include/usr/hwas/common/hwas_reasoncodes.H | 3 | ||||
-rw-r--r-- | src/include/usr/isteps/hwpf_reasoncodes.H | 8 | ||||
-rw-r--r-- | src/include/usr/isteps/istep_reasoncodes.H | 1 | ||||
-rw-r--r-- | src/usr/hwas/common/hwas.C | 60 | ||||
-rw-r--r-- | src/usr/isteps/istep14/call_proc_exit_cache_contained.C | 78 |
5 files changed, 121 insertions, 29 deletions
diff --git a/src/include/usr/hwas/common/hwas_reasoncodes.H b/src/include/usr/hwas/common/hwas_reasoncodes.H index cceede164..667ac6c3f 100644 --- a/src/include/usr/hwas/common/hwas_reasoncodes.H +++ b/src/include/usr/hwas/common/hwas_reasoncodes.H @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2012,2016 */ +/* Contributors Listed Below - COPYRIGHT 2012,2017 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -54,6 +54,7 @@ namespace HWAS RC_RESOURCE_RECOVERED = HWAS_COMP_ID | 0x0A, RC_SYSAVAIL_MISSING_CRITICAL_RESOURCE = HWAS_COMP_ID | 0x0B, RC_SYSAVAIL_NO_MCAS_FUNC = HWAS_COMP_ID | 0x0C, + RC_SYSAVAIL_NO_MEMORY_FUNC_MASTER = HWAS_COMP_ID | 0x0D, }; }; diff --git a/src/include/usr/isteps/hwpf_reasoncodes.H b/src/include/usr/isteps/hwpf_reasoncodes.H index 23bf0501e..83a5fa18b 100644 --- a/src/include/usr/isteps/hwpf_reasoncodes.H +++ b/src/include/usr/isteps/hwpf_reasoncodes.H @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2013,2016 */ +/* Contributors Listed Below - COPYRIGHT 2013,2017 */ /* [+] Google Inc. */ /* [+] International Business Machines Corp. */ /* */ @@ -55,7 +55,7 @@ namespace fapi MOD_ATTR_GET_TARGETING_TARGET = 0x0D, MOD_ATTR_GET_TARGET_NAME = 0x0E, MOD_MVPD_ACCESS = 0x0F, - MOD_EXIT_CACHE_CONTAINED = 0x10, + // empty MOD_GET_CACHE_DECONFIG = 0x11, MOD_FAPI_GET_OTHER_SIDE_OF_MEM_CHANNEL = 0x12, MOD_MBVPD_ACCESS = 0x13, @@ -115,7 +115,7 @@ namespace fapi RC_UNEXPECTED_TARGET_TYPE = HWPF_COMP_ID | 0x1C, RC_INVALID_RECORD = HWPF_COMP_ID | 0x1D, RC_INVALID_KEYWORD = HWPF_COMP_ID | 0x1E, - RC_MM_EXTEND_FAILED = HWPF_COMP_ID | 0x1F, + // empty RC_INCORRECT_KEWORD_SIZE = HWPF_COMP_ID | 0x20, RC_NO_SINGLE_MCS = HWPF_COMP_ID | 0x21, RC_NO_SINGLE_MEMBUFF = HWPF_COMP_ID | 0x22, @@ -130,7 +130,7 @@ namespace fapi RC_HOST_TIMER_THREAD_FAIL = HWPF_COMP_ID | 0x2B, RC_NULL_POINTER = HWPF_COMP_ID | 0x2C, RC_RT_WAKEUP_FAILED = HWPF_COMP_ID | 0x2D, - RC_NO_MIRRORED_MEMORY = HWPF_COMP_ID | 0x2E, + // empty RC_VDDR_INVALID_VOLTAGE = HWPF_COMP_ID | 0x2F, RC_TIMEOUT_EN_VDDR = HWPF_COMP_ID | 0x30, RC_TARGET_UNSUPPORTED = HWPF_COMP_ID | 0x31, diff --git a/src/include/usr/isteps/istep_reasoncodes.H b/src/include/usr/isteps/istep_reasoncodes.H index 254793a85..a3e019c3a 100644 --- a/src/include/usr/isteps/istep_reasoncodes.H +++ b/src/include/usr/isteps/istep_reasoncodes.H @@ -92,6 +92,7 @@ namespace ISTEP RC_NOMINAL_FREQ_MISMATCH = ISTEP_COMP_ID | 0x1B, RC_PM_OCC_CHKPT_TIMEOUT = ISTEP_COMP_ID | 0x1C, RC_UPDATE_SECURITY_CTRL_HWP_FAIL = ISTEP_COMP_ID | 0x1D, + RC_NO_FUNCTIONAL_MEMORY = ISTEP_COMP_ID | 0x1E, }; }; 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); diff --git a/src/usr/isteps/istep14/call_proc_exit_cache_contained.C b/src/usr/isteps/istep14/call_proc_exit_cache_contained.C index e44c0732e..827dfc0d3 100644 --- a/src/usr/isteps/istep14/call_proc_exit_cache_contained.C +++ b/src/usr/isteps/istep14/call_proc_exit_cache_contained.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2015,2016 */ +/* Contributors Listed Below - COPYRIGHT 2015,2017 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -179,8 +179,8 @@ void* call_proc_exit_cache_contained (void *io_pArgs) /*@ * @errortype ERRL_SEV_CRITICAL_SYS_TERM - * @moduleid fapi::MOD_EXIT_CACHE_CONTAINED, - * @reasoncode fapi::RC_NO_MIRRORED_MEMORY, + * @moduleid ISTEP::MOD_EXIT_CACHE_CONTAINED + * @reasoncode ISTEP::RC_NO_MIRRORED_MEMORY * @userdata1 Mirrored Memory Address * @userdata2 0 * @@ -191,8 +191,8 @@ void* call_proc_exit_cache_contained (void *io_pArgs) l_errl = new ERRORLOG::ErrlEntry ( ERRORLOG::ERRL_SEV_CRITICAL_SYS_TERM, - fapi::MOD_EXIT_CACHE_CONTAINED, - fapi::RC_NO_MIRRORED_MEMORY, + ISTEP::MOD_EXIT_CACHE_CONTAINED, + ISTEP::RC_NO_MIRRORED_MEMORY, l_mirrorBaseAddr, 0, true); // callout firmware @@ -219,26 +219,56 @@ void* call_proc_exit_cache_contained (void *io_pArgs) l_sys->setAttr<ATTR_PAYLOAD_BASE>(payloadBase); } - for (const auto & l_procChip: l_procList) + // Make sure we actually have memory before we try to use it + uint64_t l_bottom = get_bottom_mem_addr(); + uint64_t l_top = get_top_mem_addr(); + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "Memory range : %.llX-%.llX", l_bottom, l_top ); + if( (l_top == 0) || (l_top == l_bottom) ) { - const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP> - l_fapi_cpu_target(l_procChip); - // call p9_proc_exit_cache_contained.C HWP - FAPI_INVOKE_HWP( l_errl, - p9_exit_cache_contained, - l_procChip); - - if(l_errl) + /*@ + * @errortype ERRL_SEV_CRITICAL_SYS_TERM + * @moduleid ISTEP::MOD_EXIT_CACHE_CONTAINED + * @reasoncode ISTEP::RC_NO_FUNCTIONAL_MEMORY + * @userdata1 Bottom of memory + * @userdata2 Top of memory + * + * @devdesc There is no functional memory + */ + l_errl = new ERRORLOG::ErrlEntry + ( + ERRORLOG::ERRL_SEV_CRITICAL_SYS_TERM, + ISTEP::MOD_EXIT_CACHE_CONTAINED, + ISTEP::RC_NO_FUNCTIONAL_MEMORY, + l_bottom, + l_top); + // We should never get here so there is some kind of bug + l_errl->addProcedureCallout( HWAS::EPUB_PRC_HB_CODE, + HWAS::SRCI_PRIORITY_HIGH ); + // Also should look at the deconfigured memory + l_errl->addProcedureCallout( HWAS::EPUB_PRC_FIND_DECONFIGURED_PART, + HWAS::SRCI_PRIORITY_MED ); + } + else + { + for (const auto & l_procChip: l_procList) { - ErrlUserDetailsTarget(l_procChip).addToLog(l_errl); - l_stepError.addErrorDetails( l_errl ); - errlCommit( l_errl, HWPF_COMP_ID ); - TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_proc_exit_cache_contained:: failed on proc with HUID : %d",TARGETING::get_huid(l_procChip) ); + const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP> + l_fapi_cpu_target(l_procChip); + // call p9_proc_exit_cache_contained.C HWP + FAPI_INVOKE_HWP( l_errl, + p9_exit_cache_contained, + l_procChip); + + if(l_errl) + { + ErrlUserDetailsTarget(l_procChip).addToLog(l_errl); + l_stepError.addErrorDetails( l_errl ); + errlCommit( l_errl, HWPF_COMP_ID ); + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_proc_exit_cache_contained:: failed on proc with HUID : %d", TARGETING::get_huid(l_procChip) ); + } } } - - // no errors so extend Virtual Memory Map if(!l_errl) { @@ -311,8 +341,8 @@ void* call_proc_exit_cache_contained (void *io_pArgs) { /*@ * @errortype - * @moduleid fapi::MOD_EXIT_CACHE_CONTAINED - * @reasoncode fapi::RC_MM_EXTEND_FAILED + * @moduleid ISTEP::MOD_EXIT_CACHE_CONTAINED + * @reasoncode ISTEP::RC_MM_EXTEND_FAILED * @userdata1 rc from mm_extend * @userdata2 <UNUSED> * @@ -321,8 +351,8 @@ void* call_proc_exit_cache_contained (void *io_pArgs) */ l_errl = new ERRORLOG::ErrlEntry (ERRORLOG::ERRL_SEV_UNRECOVERABLE, - fapi::MOD_EXIT_CACHE_CONTAINED, - fapi::RC_MM_EXTEND_FAILED, + ISTEP::MOD_EXIT_CACHE_CONTAINED, + ISTEP::RC_MM_EXTEND_FAILED, rc, 0); |