diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/include/usr/initservice/initsvcreasoncodes.H | 6 | ||||
-rw-r--r-- | src/usr/hwpf/hwp/slave_sbe/slave_sbe.C | 38 |
2 files changed, 40 insertions, 4 deletions
diff --git a/src/include/usr/initservice/initsvcreasoncodes.H b/src/include/usr/initservice/initsvcreasoncodes.H index e30c8fd2b..39c944c7c 100644 --- a/src/include/usr/initservice/initsvcreasoncodes.H +++ b/src/include/usr/initservice/initsvcreasoncodes.H @@ -5,7 +5,9 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* COPYRIGHT International Business Machines Corp. 2011,2014 */ +/* Contributors Listed Below - COPYRIGHT 2011,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. */ @@ -68,6 +70,8 @@ enum InitServiceReasonCode SHUTDOWN_REQUESTED_BY_FSP = INITSVC_COMP_ID | 0x0b, ISTEP_INVALID_ON_MPIPL = INITSVC_COMP_ID | 0x0c, ISTEP_NON_MASTER_NODE_MSG = INITSVC_COMP_ID | 0x0d, + //termination_rc + SBE_EXTRACT_RC_REQUEST_REIPL = INITSVC_COMP_ID | 0x0e, }; enum InitServiceUserDetailDataSubSection diff --git a/src/usr/hwpf/hwp/slave_sbe/slave_sbe.C b/src/usr/hwpf/hwp/slave_sbe/slave_sbe.C index 939f6d7ff..7b0a74447 100644 --- a/src/usr/hwpf/hwp/slave_sbe/slave_sbe.C +++ b/src/usr/hwpf/hwp/slave_sbe/slave_sbe.C @@ -41,6 +41,7 @@ #include <errl/errlentry.H> #include <initservice/isteps_trace.H> #include <initservice/initserviceif.H> +#include <initservice/initsvcreasoncodes.H> #include <sys/time.h> #include <devicefw/userif.H> @@ -313,9 +314,40 @@ void* call_proc_check_slave_sbe_seeprom_complete( void *io_pArgs ) l_pProcTarget ); // Invoke the HWP - FAPI_INVOKE_HWP(l_errl, - proc_check_slave_sbe_seeprom_complete, - l_fapiProcTarget, sbeImgPtr, l_wait_time); + fapi::ReturnCode rc_fapi = fapi::FAPI_RC_SUCCESS; + FAPI_EXEC_HWP(rc_fapi, + proc_check_slave_sbe_seeprom_complete, + l_fapiProcTarget, + sbeImgPtr, + l_wait_time); + + // check for re ipl request + if(static_cast<uint32_t>(rc_fapi) == + fapi::RC_PROC_EXTRACT_SBE_RC_ENGINE_RETRY) + { + l_errl = fapi::fapiRcToErrl(rc_fapi); + + // capture the target data in the elog + ErrlUserDetailsTarget(l_pProcTarget).addToLog( l_errl ); + + l_errl->setSev(ERRL_SEV_INFORMATIONAL); + + errlCommit( l_errl, HWPF_COMP_ID ); + + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "ERROR : proc_extract_sbe_rc requesting reIPL:" + " Calling INITSERVICE::doShutdown() with " + "SBE_EXTRACT_RC_REQUEST_REIPL = 0x%x", + INITSERVICE::SBE_EXTRACT_RC_REQUEST_REIPL); + + INITSERVICE::doShutdown + ( INITSERVICE::SBE_EXTRACT_RC_REQUEST_REIPL); + // doShutdown does not return + } + else + { + l_errl = fapi::fapiRcToErrl(rc_fapi); + } if (l_errl) { |