diff options
author | Richard J. Knight <rjknight@us.ibm.com> | 2014-08-11 16:57:27 -0500 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2014-08-13 15:30:48 -0500 |
commit | 15cde95b1c44bdfd603957d13e851001fa0da78c (patch) | |
tree | 465f38691e52074fe162f28ab405ba9c6b9fd1c2 /src/usr/hwpf | |
parent | d55c6e1817ad2468afc1ea6902d60d4c30b326b5 (diff) | |
download | talos-hostboot-15cde95b1c44bdfd603957d13e851001fa0da78c.tar.gz talos-hostboot-15cde95b1c44bdfd603957d13e851001fa0da78c.zip |
SW272212: Injecting a PORE/SLW error results in HB UE
Injecting a PORE/SLW error that isolates to a core followed
by an MPIPL, results in a HB UE BC8A0506 & B181BA4E(hwsv)
The root cause is currently unknown, the change added with
this commit will create an error log and collect debug info.
Change-Id: I37d5078e02a5a51693365c183570923ba35bebaa
CQ:SW272212
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/12752
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/usr/hwpf')
-rw-r--r-- | src/usr/hwpf/hwp/core_activate/core_activate.C | 215 |
1 files changed, 126 insertions, 89 deletions
diff --git a/src/usr/hwpf/hwp/core_activate/core_activate.C b/src/usr/hwpf/hwp/core_activate/core_activate.C index e4bc7dff7..7fe698ac3 100644 --- a/src/usr/hwpf/hwp/core_activate/core_activate.C +++ b/src/usr/hwpf/hwp/core_activate/core_activate.C @@ -379,115 +379,152 @@ void* call_host_activate_slave_cores( void *io_pArgs ) (*l_core), TARGETING::CLASS_UNIT, TARGETING::TYPE_EX); - TARGETING::Target* l_ex = targetList[0]; - const fapi::Target l_fapi_ex_target( TARGET_TYPE_EX_CHIPLET, - const_cast<TARGETING::Target*>(l_ex) ); - int rc = cpu_start_core(pir,en_threads); - // Handle time out error - if (-ETIME == rc) + // verify the list has one entry, see SW272212. + if( targetList.size() == 1 ) { - TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - "call_host_activate_slave_cores: " - "Time out rc from kernel %d on core %x", - rc, - pir); + TARGETING::Target* l_ex = targetList[0]; + const fapi::Target l_fapi_ex_target( TARGET_TYPE_EX_CHIPLET, + const_cast<TARGETING::Target*>(l_ex) ); - FAPI_INVOKE_HWP( l_errl, proc_check_slw_done, - l_fapi_ex_target); - if (l_errl) + int rc = cpu_start_core(pir,en_threads); + + // Handle time out error + if (-ETIME == rc) { - TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, - "ERROR : proc_check_slw_done" ); - // Add chip target info - ErrlUserDetailsTarget(l_processor).addToLog( l_errl ); - // Create IStep error log - l_stepError.addErrorDetails(l_errl); - // Commit error - errlCommit( l_errl, HWPF_COMP_ID ); - break; + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "call_host_activate_slave_cores: " + "Time out rc from kernel %d on core %x", + rc, + pir); + + FAPI_INVOKE_HWP( l_errl, proc_check_slw_done, + l_fapi_ex_target); + if (l_errl) + { + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "ERROR : proc_check_slw_done" ); + // Add chip target info + ErrlUserDetailsTarget(l_processor).addToLog( l_errl ); + // Create IStep error log + l_stepError.addErrorDetails(l_errl); + // Commit error + errlCommit( l_errl, HWPF_COMP_ID ); + break; + } + else + { + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "SUCCESS : proc_check_slw_done - " + "SLW is in clean state"); + } } - else + + // Create error log + if (0 != rc) + { + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "call_host_activate_slave_cores: " + "Error from kernel %d on core %x", + rc, + pir); + /*@ + * @errortype + * @reasoncode ISTEP_BAD_RC + * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE + * @moduleid ISTEP_HOST_ACTIVATE_SLAVE_CORES + * @userdata1 PIR of failing core. + * @userdata2 rc of cpu_start_core(). + * + * @devdesc Kernel returned error when trying to activate + * core. + */ + errlHndl_t l_tmperrl = + new ERRORLOG::ErrlEntry( + ERRORLOG::ERRL_SEV_UNRECOVERABLE, + ISTEP_HOST_ACTIVATE_SLAVE_CORES, + ISTEP_BAD_RC, + pir, + rc ); + + // Callout core that failed to wake up. + l_tmperrl->addHwCallout(*l_core, + HWAS::SRCI_PRIORITY_MED, + HWAS::DECONFIG, + HWAS::GARD_Predictive); + + if (NULL == l_errl) + { + l_errl = l_tmperrl; + } + else + { + errlCommit( l_tmperrl, HWPF_COMP_ID ); + } + } + else //Core out of winkle sucessfully, issue SPWU for PRD { TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, - "SUCCESS : proc_check_slw_done - SLW is in clean state"); + "Running p8_cpu_special_wakeup (ENABLE)" + " EX target HUID %.8X", + TARGETING::get_huid(l_ex)); + + // Enable special wakeup on core + FAPI_INVOKE_HWP( l_errl, + p8_cpu_special_wakeup, + l_fapi_ex_target, + SPCWKUP_ENABLE, + HOST); + + if( l_errl ) + { + ErrlUserDetailsTarget(l_ex).addToLog( l_errl ); + + // Create IStep error log and cross ref error that + // occurred + l_stepError.addErrorDetails( l_errl ); + + // Commit Error + errlCommit( l_errl, HWPF_COMP_ID ); + + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "ERROR : enable p8_cpu_special_wakeup, " + "PLID=0x%x", l_errl->plid() ); + } + else + { + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "SUCCESS: enable p8_cpu_special_wakeup"); + } } } - - // Create error log - if (0 != rc) + else { + // wrong number of targets in the list, create an error log TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - "call_host_activate_slave_cores: " - "Error from kernel %d on core %x", - rc, - pir); + "ERROR: call to getParentAffinityTarget " + "returned %d instead of 1", targetList.size() ); /*@ * @errortype - * @reasoncode ISTEP_BAD_RC + * @reasoncode ISTEP_INCORRECT_TARGET_COUNT * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE * @moduleid ISTEP_HOST_ACTIVATE_SLAVE_CORES * @userdata1 PIR of failing core. - * @userdata2 rc of cpu_start_core(). + * @userdata2 number of targets returned + * + * @devdesc Call to getParentAffinityTarget requesting + * the number of EX chips with parent affinity + * to a core, returned and incorrect vector size, + * the expected size is 1. * - * @devdesc Kernel returned error when trying to activate core. */ - errlHndl_t l_tmperrl = + l_errl = new ERRORLOG::ErrlEntry(ERRORLOG::ERRL_SEV_UNRECOVERABLE, - ISTEP_HOST_ACTIVATE_SLAVE_CORES, - ISTEP_BAD_RC, - pir, - rc ); - - // Callout core that failed to wake up. - l_tmperrl->addHwCallout(*l_core, - HWAS::SRCI_PRIORITY_MED, - HWAS::DECONFIG, - HWAS::GARD_Predictive); - - if (NULL == l_errl) - { - l_errl = l_tmperrl; - } - else - { - errlCommit( l_tmperrl, HWPF_COMP_ID ); - } - } - else //Core out of winkle sucessfully, issue SPWU for PRD - { - TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, - "Running p8_cpu_special_wakeup (ENABLE)" - " EX target HUID %.8X", - TARGETING::get_huid(l_ex)); - - // Enable special wakeup on core - FAPI_INVOKE_HWP( l_errl, - p8_cpu_special_wakeup, - l_fapi_ex_target, - SPCWKUP_ENABLE, - HOST); - - if( l_errl ) - { - ErrlUserDetailsTarget(l_ex).addToLog( l_errl ); - - // Create IStep error log and cross ref error that occurred - l_stepError.addErrorDetails( l_errl ); - - // Commit Error - errlCommit( l_errl, HWPF_COMP_ID ); - - TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, - "ERROR : enable p8_cpu_special_wakeup, PLID=0x%x", - l_errl->plid() ); - } - else - { - TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - "SUCCESS: enable p8_cpu_special_wakeup"); - } + ISTEP_HOST_ACTIVATE_SLAVE_CORES, + ISTEP_INCORRECT_TARGET_COUNT, + pir, + targetList.size(), true); } } } |