summaryrefslogtreecommitdiffstats
path: root/src/usr/hwas/hostbootIstep.C
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/hwas/hostbootIstep.C')
-rw-r--r--src/usr/hwas/hostbootIstep.C566
1 files changed, 0 insertions, 566 deletions
diff --git a/src/usr/hwas/hostbootIstep.C b/src/usr/hwas/hostbootIstep.C
deleted file mode 100644
index 491d35db7..000000000
--- a/src/usr/hwas/hostbootIstep.C
+++ /dev/null
@@ -1,566 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG */
-/* This is an automatically generated prolog. */
-/* */
-/* $Source: src/usr/hwas/hostbootIstep.C $ */
-/* */
-/* OpenPOWER HostBoot Project */
-/* */
-/* Contributors Listed Below - COPYRIGHT 2012,2015 */
-/* [+] 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. */
-/* You may obtain a copy of the License at */
-/* */
-/* http://www.apache.org/licenses/LICENSE-2.0 */
-/* */
-/* Unless required by applicable law or agreed to in writing, software */
-/* distributed under the License is distributed on an "AS IS" BASIS, */
-/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
-/* implied. See the License for the specific language governing */
-/* permissions and limitations under the License. */
-/* */
-/* IBM_PROLOG_END_TAG */
-/**
- * @file hostbootIstep.C
- *
- * @brief hostboot istep-called functions
- */
-
-#include <hwas/common/hwas.H>
-#include <hwas/common/hwasCommon.H>
-#include <hwas/common/hwas_reasoncodes.H>
-#include <hwas/hwasPlat.H>
-
-#include <hwas/hostbootIstep.H>
-#include <hwas/common/deconfigGard.H>
-
-#include <fsi/fsiif.H>
-#include <initservice/taskargs.H>
-#include <initservice/isteps_trace.H>
-#include <initservice/initserviceif.H>
-#include <hwpisteperror.H>
-
-#include <targeting/attrsync.H>
-#include <targeting/namedtarget.H>
-#include <diag/prdf/prdfMain.H>
-#include <intr/interrupt.H>
-#include <ibscom/ibscomif.H>
-
-#include <i2c/i2cif.H>
-
-#include <sbe/sbeif.H>
-#include <sbe_update.H>
-
-// fapi support
-#include <fapi.H>
-#include <fapiPlatHwpInvoker.H>
-
-// targeting support.
-#include <targeting/common/utilFilter.H>
-#include <targeting/common/commontargeting.H>
-#include <targeting/common/entitypath.H>
-
-#include <errl/errludtarget.H>
-
-#include <proc_enable_reconfig.H>
-
-#include <console/consoleif.H>
-
-#include <ipmi/ipmisensor.H>
-#include <ipmi/ipmifruinv.H>
-
-// Custom compile configs
-#include <config.h>
-
-#ifdef CONFIG_ENABLE_CHECKSTOP_ANALYSIS
- #include <hwpf/hwp/occ/occ.H>
- #include <hwpf/hwp/occ/occ_common.H>
-
- #include <diag/attn/attn.H>
-#endif
-
-#ifdef CONFIG_TPMDD
- #include <secureboot/trustedbootif.H>
-#endif
-
-namespace HWAS
-{
-
-using namespace TARGETING;
-using namespace fapi;
-using namespace ISTEP;
-using namespace ISTEP_ERROR;
-
-// functions called from the istep dispatcher -- hostboot only
-
-//******************************************************************************
-// host_init_fsi function
-//******************************************************************************
-void* host_init_fsi( void *io_pArgs )
-{
- errlHndl_t l_errl = NULL;
-
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "host_init_fsi entry" );
- do
- {
- l_errl = FSI::initializeHardware( );
- if (l_errl)
- {
- // This error should get returned
- break;
- }
-
- // Only reset the I2C Masters if FSP is not running
- if ( !INITSERVICE::spBaseServicesEnabled() )
- {
- l_errl = I2C::i2cResetActiveMasters(I2C::I2C_ALL, false);
- if (l_errl)
- {
- // Commit this error
- errlCommit( l_errl, HWPF_COMP_ID );
- }
- }
-
- } while (0);
-
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "host_init_fsi exit" );
- return l_errl;
-}
-
-//******************************************************************************
-// host_set_ipl_parms function
-//******************************************************************************
-void* host_set_ipl_parms( void *io_pArgs )
-{
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "host_set_ipl_parms entry" );
- errlHndl_t errl = NULL;
-
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "host_set_ipl_parms exit" );
-
- return errl;
-}
-
-//******************************************************************************
-// host_discover_targets function
-//******************************************************************************
-void* host_discover_targets( void *io_pArgs )
-{
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "host_discover_targets entry" );
-
- errlHndl_t errl = NULL;
-
- // Check whether we're in MPIPL mode
- TARGETING::Target* l_pTopLevel = NULL;
- targetService().getTopLevelTarget( l_pTopLevel );
- HWAS_ASSERT(l_pTopLevel, "HWAS host_discover_targets: no TopLevelTarget");
-
- if (l_pTopLevel->getAttr<ATTR_IS_MPIPL_HB>())
- {
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, "MPIPL mode");
-
- // Sync attributes from Fsp
- errl = syncAllAttributesFromFsp();
- }
- else
- {
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, "Normal IPL mode");
-
- errl = discoverTargets();
- }
-
- // Put out some helpful messages that show which targets we actually found
- std::map<TARGETING::TYPE,uint64_t> l_presData;
- for (TargetIterator target = targetService().begin();
- target != targetService().end();
- ++target)
- {
- if (!(target->getAttr<ATTR_HWAS_STATE>().present))
- {
- continue;
- }
- TARGETING::TYPE l_type = target->getAttr<TARGETING::ATTR_TYPE>();
- TARGETING::ATTR_POSITION_type l_pos = 0;
- if( target->tryGetAttr<TARGETING::ATTR_POSITION>(l_pos) )
- {
- l_presData[l_type] |= (0x8000000000000000 >> l_pos);
- }
- }
- TARGETING::EntityPath l_epath; //use EntityPath's translation functions
- for( std::map<TARGETING::TYPE,uint64_t>::iterator itr = l_presData.begin();
- itr != l_presData.end();
- ++itr )
- {
- uint8_t l_type = itr->first;
- uint64_t l_val = itr->second;
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,"PRESENT> %s[%.2X]=%.8X%.8X",
- l_epath.pathElementTypeAsString(itr->first), l_type, l_val>>32, l_val&0xFFFFFFFF);
-#if (!defined(CONFIG_CONSOLE_OUTPUT_TRACE) && defined(CONFIG_CONSOLE))
- CONSOLE::displayf("HWAS", "PRESENT> %s[%.2X]=%.8X%.8X",
- l_epath.pathElementTypeAsString(itr->first), l_type, l_val>>32, l_val&0xFFFFFFFF );
-#endif
- }
-
-#ifdef CONFIG_BMC_IPMI
- // Gather + Send the base IPMI Fru Inventory data to the BMC
- IPMIFRUINV::setData();
-
- // send DIMM/CORE/PROC sensor status to the BMC
- SENSOR::updateBMCSensorStatus();
-#endif
-
-#ifdef CONFIG_TPMDD
- if (NULL == errl)
- {
- // Initialize the master TPM
- errl = (errlHndl_t)TRUSTEDBOOT::host_update_master_tpm(io_pArgs);
- }
-#endif
-
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "host_discover_targets exit" );
-
- return errl;
-}
-
-//******************************************************************************
-// host_gard function
-//******************************************************************************
-void* host_gard( void *io_pArgs )
-{
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "host_gard entry" );
- errlHndl_t errl;
-
- do {
- TARGETING::Target* l_pTopLevel = NULL;
- targetService().getTopLevelTarget( l_pTopLevel );
- HWAS_ASSERT(l_pTopLevel, "HWAS host_gard: no TopLevelTarget");
-
- #ifdef CONFIG_ENABLE_CHECKSTOP_ANALYSIS
-
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- INFO_MRK"host_gard: invoke PRD to check for previous CS" );
-
- errl = ATTN::checkForCSAttentions();
- if ( NULL != errl )
- {
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- ERR_MRK"host_gard: error from checkForCSAttentions" );
- errlCommit(errl, HWPF_COMP_ID);
- }
-
- #endif
-
- // Check whether we're in MPIPL mode
- if (l_pTopLevel->getAttr<ATTR_IS_MPIPL_HB>())
- {
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, "MPIPL mode");
-
- // we only want EX units to be processed
- TARGETING::PredicateCTM l_exFilter(TARGETING::CLASS_UNIT,
- TARGETING::TYPE_EX);
- errl = collectGard(&l_exFilter);
- if (errl)
- {
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "collectGard returned error; breaking out");
- break;
- }
- }
- else
- {
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, "Normal IPL mode");
-
- errl = collectGard();
- if(errl)
- {
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "collectGard returned error; breaking out");
- break;
- }
-
- if (errl == NULL)
- {
- // check and see if we still have enough hardware to continue
- errl = checkMinimumHardware();
- if(errl)
- {
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "check minimum hardware returned error; breaking out");
- break;
- }
- }
- // If targets are deconfigured as a result of host_gard, they are
- // done so using the PLID as the reason for deconfiguration. This
- // triggers the reconfigure loop attribute to be set, which causes
- // undesirable behavior, so we need to reset it here:
-
- // Read current value
- TARGETING::ATTR_RECONFIGURE_LOOP_type l_reconfigAttr =
- l_pTopLevel->getAttr<TARGETING::ATTR_RECONFIGURE_LOOP>();
- // Turn off deconfigure bit
- l_reconfigAttr &= ~TARGETING::RECONFIGURE_LOOP_DECONFIGURE;
- // Write back to attribute
- l_pTopLevel->setAttr<TARGETING::ATTR_RECONFIGURE_LOOP>
- (l_reconfigAttr);
- }
-
- // Send message to FSP sending HUID of EX chip associated with
- // master core
- msg_t * core_msg = msg_allocate();
- core_msg->type = SBE::MSG_IPL_MASTER_CORE;
- const TARGETING::Target* l_masterCore = TARGETING::getMasterCore( );
-
- /*@ errorlog tag
- * @errortype ERRL_SEV_CRITICAL_SYS_TERM
- * @moduleid MOD_HOST_GARD
- * @reasoncode RC_MASTER_CORE_NULL
- * @userdata1 0
- * @userdata2 0
- * @devdesc HWAS host_gard: no masterCore found
- */
- if (l_masterCore == NULL)
- {
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "No masterCore Found" );
- const bool hbSwError = true;
- errl = new ERRORLOG::ErrlEntry
- (ERRORLOG::ERRL_SEV_CRITICAL_SYS_TERM,
- HWAS::MOD_HOST_GARD,
- HWAS::RC_MASTER_CORE_NULL,
- 0, 0, hbSwError);
- break;
- }
- // Get the EX chip associated with the master core as that is the
- // chip that
- // has the IS_MASTER_EX attribute associated with it
- TARGETING::TargetHandleList targetList;
- getParentAffinityTargets(targetList,
- l_masterCore,
- TARGETING::CLASS_UNIT,
- TARGETING::TYPE_EX);
- HWAS_ASSERT(targetList.size() == 1,
- "HWAS host_gard: Incorrect EX chip(s) associated with masterCore");
- core_msg->data[0] = 0;
- core_msg->data[1] = TARGETING::get_huid( targetList[0] );
- core_msg->extra_data = NULL;
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "Sending MSG_MASTER_CORE message with HUID %08x",
- core_msg->data[1]);
- errl = MBOX::send(MBOX::IPL_SERVICE_QUEUE,core_msg);
- if (errl)
- {
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- ERR_MRK"MBOX::send failed sending Master Core message");
- msg_free(core_msg);
- break;
- }
- } while (0);
-
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "host_gard exit" );
- return errl;
-}
-
-//******************************************************************************
-// call_p9_revert_sbe_mcs_setup function
-//******************************************************************************
-void* call_p9_revert_sbe_mcs_setup(void *io_pArgs)
-{
- errlHndl_t l_errl = NULL;
- IStepError l_stepError;
-
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "call_p9_revert_sbe_mcs_setup entry" );
-
- TARGETING::Target* l_pProcTarget = NULL;
- TARGETING::targetService().masterProcChipTargetHandle(l_pProcTarget);
-
- fapi::Target l_fapiProcTarget(fapi::TARGET_TYPE_PROC_CHIP, l_pProcTarget);
-
- // Invoke the HWP
- // FAPI_INVOKE_HWP(l_errl, p9_revert_sbe_mcs_setup, l_fapiProcTarget);
-
- if (l_errl)
- {
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "ERROR : failed executing p9_revert_sbe_mcs_setup "
- "returning error");
-
- // capture the target data in the elog
- ERRORLOG::ErrlUserDetailsTarget(l_pProcTarget).addToLog( l_errl );
-
- // Create IStep error log and cross reference error that occurred
- l_stepError.addErrorDetails( l_errl );
-
- errlCommit( l_errl, HWPF_COMP_ID );
- }
- else
- {
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "SUCCESS : p9_revert_sbe_mcs_setup completed ok");
- }
-
- TRACDCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "call_p9_revert_sbe_mcs_setup exit");
-
- // end task, returning any errorlogs to IStepDisp
- return l_stepError.getErrorHandle();
-}
-
-
-//******************************************************************************
-// host_cancontinue_clear function
-//******************************************************************************
-void* host_cancontinue_clear( void *io_pArgs )
-{
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "host_cancontinue_clear entry" );
- errlHndl_t errl = NULL;
-
-#ifdef CONFIG_IPLTIME_CHECKSTOP_ANALYSIS
- // TODO RTC 115587: current place; could change
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "host_cancontinue_clear: calling activateOCCs" );
- errl = HBOCC::activateOCCs(true);
- if (errl)
- {
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "activateOCCs failed");
- }
-#endif
-
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "host_cancontinue_clear exit" );
-
- return errl;
-}
-
-//******************************************************************************
-// host_prd_hwreconfig function
-//******************************************************************************
-void* host_prd_hwreconfig( void *io_pArgs )
-{
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "host_prd_hwreconfig entry" );
-
- errlHndl_t errl = NULL;
- IStepError l_stepError;
- do
- {
- // Flip the scom path back to FSI in case we enabled IBSCOM previously
- IBSCOM::enableInbandScoms(IBSCOM_DISABLE);
-
- // Call PRDF to remove non-function chips from its system model
- errl = PRDF::refresh();
-
- if (errl)
- {
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "host_prd_hwreconfig ERROR 0x%.8X returned from"
- " call to PRDF::refresh", errl->reasonCode());
-
- // Create IStep error log and cross reference error that occurred
- l_stepError.addErrorDetails(errl);
-
- // Commit Error
- errlCommit(errl, HWPF_COMP_ID);
-
- break;
- }
-
- // Lists for present MCS
- TARGETING::TargetHandleList l_presMcsList;
-
- // find all present MCS chiplets of all procs
- getChipletResources(l_presMcsList, TYPE_MCS, UTIL_FILTER_PRESENT);
-
- for (TargetHandleList::const_iterator
- l_mcs_iter = l_presMcsList.begin();
- l_mcs_iter != l_presMcsList.end();
- ++l_mcs_iter)
- {
- // make a local copy of the MCS target
- const TARGETING::Target * l_pMcs = *l_mcs_iter;
- // Retrieve HUID of current MCS
- TARGETING::ATTR_HUID_type l_currMcsHuid =
- TARGETING::get_huid(l_pMcs);
-
- // Dump current run on target
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "Running proc_enable_reconfig HWP on "
- "MCS target HUID %.8X", l_currMcsHuid);
-
- // Create FAPI Targets.
- fapi::Target l_fapiMcsTarget(TARGET_TYPE_MCS_CHIPLET,
- (const_cast<TARGETING::Target*>(l_pMcs)));
-
- // Call the HWP with each fapi::Target
- FAPI_INVOKE_HWP(errl, proc_enable_reconfig, l_fapiMcsTarget);
-
- if (errl)
- {
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "ERROR 0x%.8X: proc_enable_reconfig HWP returns error",
- errl->reasonCode());
-
- // Capture the target data in the elog
- ERRORLOG::ErrlUserDetailsTarget(l_pMcs).addToLog( errl );
-
- //Create IStep error log and cross reference error that occurred
- l_stepError.addErrorDetails(errl);
-
- // Commit Error
- errlCommit(errl, HWPF_COMP_ID);
-
- // Don't keep calling proc_enable_reconfig. Treat as a fatal
- // unexpected unrecoverable error and terminate the IPL.
- break ; // break with error
- }
- // Success
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "Successfully ran proc_enable_reconfig HWP on "
- "MCS target HUID %.8X", l_currMcsHuid);
- } // for
-
-#ifdef CONFIG_IPLTIME_CHECKSTOP_ANALYSIS
- // update firdata inputs for OCC
- TARGETING::Target* masterproc = NULL;
- TARGETING::targetService().masterProcChipTargetHandle(masterproc);
- errl = HBOCC::loadHostDataToSRAM(masterproc,
- PRDF::MASTER_PROC_CORE);
- if (errl)
- {
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "Error returned from call to HBOCC::loadHostDataToSRAM");
-
- //Create IStep error log and cross reference error that occurred
- l_stepError.addErrorDetails(errl);
-
- // Commit Error
- errlCommit(errl, HWPF_COMP_ID);
- break;
- }
-#endif
-
- }
- while(0);
-
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "host_prd_hwreconfig exit" );
- // end task, returning any errorlogs to IStepDisp
- return l_stepError.getErrorHandle();
-}
-
-//******************************************************************************
-// host_stub function
-//******************************************************************************
-void* host_stub( void *io_pArgs )
-{
- errlHndl_t errl = NULL;
- // no function required
- return errl;
-}
-
-} // namespace HWAS
OpenPOWER on IntegriCloud