From bf4cb3342fe0aa8a51d11bb85bddab61a0a7398c Mon Sep 17 00:00:00 2001 From: Prachi Gupta Date: Mon, 26 Oct 2015 10:22:47 -0500 Subject: P9 Isteps: Created directory structure for istep 14 wrappers Change-Id: Idad8c430afef013a91e0c206d4fff80fc45053c0 RTC:137652 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/21501 Tested-by: Jenkins Server Reviewed-by: Daniel M. Crowell Reviewed-by: A. Patrick Williams III --- src/usr/hwpf/hwp/bus_training/pbusLinkSvc.C | 2 +- .../hwp/dram_initialization/dram_initialization.C | 1071 +------------------- .../establish_system_smp/establish_system_smp.C | 2 +- src/usr/hwpf/hwp/occ/occ.C | 2 +- src/usr/hwpf/hwp/occ/occAccess.C | 4 +- src/usr/hwpf/hwp/occ/occ_common.C | 2 +- src/usr/hwpf/hwp/occ/runtime/rt_occ.C | 2 +- src/usr/hwpf/hwp/pstates/pstates/freqVoltageSvc.C | 2 +- src/usr/hwpf/hwp/thread_activate/thread_activate.C | 6 +- src/usr/hwpf/plat/fapiPlatAttrOverrideSync.C | 6 +- src/usr/hwpf/plat/fapiPlatAttributeService.C | 2 +- src/usr/hwpf/plat/fapiPlatHwAccess.C | 6 +- src/usr/hwpf/plat/fapiPlatHwpInvoker.C | 2 +- src/usr/hwpf/plat/fapiPlatMBvpdAccess.C | 2 +- src/usr/hwpf/plat/fapiPlatMvpdAccess.C | 2 +- src/usr/hwpf/plat/fapiPlatSystemConfig.C | 4 +- src/usr/hwpf/plat/fapiPlatUtil.C | 2 +- src/usr/hwpf/test/occAccessTest.H | 4 +- src/usr/isteps/hwpistepud.C | 2 +- src/usr/isteps/istep13/hbVddrMsg.H | 2 +- src/usr/isteps/istep13/palmetto_vddr.C | 2 +- src/usr/isteps/istep14/call_host_mpipl_service.C | 270 +++++ src/usr/isteps/istep14/call_host_startprd_dram.C | 88 ++ src/usr/isteps/istep14/call_mss_memdiag.C | 73 ++ src/usr/isteps/istep14/call_mss_power_cleanup.C | 143 +++ src/usr/isteps/istep14/call_mss_thermal_init.C | 174 ++++ .../istep14/call_proc_exit_cache_contained.C | 282 ++++++ src/usr/isteps/istep14/call_proc_htm_setup.C | 40 + src/usr/isteps/istep14/call_proc_pcie_config.C | 106 ++ src/usr/isteps/istep14/call_proc_setup_bars.C | 225 ++++ src/usr/isteps/istep14/makefile | 38 + src/usr/isteps/makefile | 1 + 32 files changed, 1473 insertions(+), 1096 deletions(-) create mode 100644 src/usr/isteps/istep14/call_host_mpipl_service.C create mode 100644 src/usr/isteps/istep14/call_host_startprd_dram.C create mode 100644 src/usr/isteps/istep14/call_mss_memdiag.C create mode 100644 src/usr/isteps/istep14/call_mss_power_cleanup.C create mode 100644 src/usr/isteps/istep14/call_mss_thermal_init.C create mode 100644 src/usr/isteps/istep14/call_proc_exit_cache_contained.C create mode 100644 src/usr/isteps/istep14/call_proc_htm_setup.C create mode 100644 src/usr/isteps/istep14/call_proc_pcie_config.C create mode 100644 src/usr/isteps/istep14/call_proc_setup_bars.C create mode 100644 src/usr/isteps/istep14/makefile (limited to 'src/usr') diff --git a/src/usr/hwpf/hwp/bus_training/pbusLinkSvc.C b/src/usr/hwpf/hwp/bus_training/pbusLinkSvc.C index c085a22f5..5c40c091a 100644 --- a/src/usr/hwpf/hwp/bus_training/pbusLinkSvc.C +++ b/src/usr/hwpf/hwp/bus_training/pbusLinkSvc.C @@ -23,7 +23,7 @@ /* */ /* IBM_PROLOG_END_TAG */ #include "pbusLinkSvc.H" -#include +#include namespace EDI_EI_INITIALIZATION { diff --git a/src/usr/hwpf/hwp/dram_initialization/dram_initialization.C b/src/usr/hwpf/hwp/dram_initialization/dram_initialization.C index edf2732e1..d7fbcd0af 100644 --- a/src/usr/hwpf/hwp/dram_initialization/dram_initialization.C +++ b/src/usr/hwpf/hwp/dram_initialization/dram_initialization.C @@ -55,7 +55,7 @@ // fapi support #include #include -#include +#include #include "dram_initialization.H" #include @@ -97,66 +97,6 @@ using namespace EDI_EI_INITIALIZATION; using namespace fapi; using namespace ERRORLOG; -// -// Wrapper function to call host_startprd_dram -// -void* call_host_startprd_dram( void *io_pArgs ) -{ - errlHndl_t l_errl = NULL; - - TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - "call_host_startPRD_dram entry" ); - -#if 0 - // @@@@@ CUSTOM BLOCK: @@@@@ - // figure out what targets we need - // customize any other inputs - // set up loops to go through all targets (if parallel, spin off a task) - - // write HUID of target - TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, - "target HUID %.8X", TARGETING::get_huid(l_@targetN_target)); - - // cast OUR type of target to a FAPI type of target. - const fapi::Target l_fapi_@targetN_target( TARGET_TYPE_MEMBUF_CHIP, - (const_cast(l_@targetN_target)) ); - - // call the HWP with each fapi::Target - FAPI_INVOKE_HWP( l_errl, host_startPRD_dram, _args_...); - if ( l_errl ) - { - TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, - "ERROR : .........." ); - errlCommit( l_errl, HWPF_COMP_ID ); - } - else - { - TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - "SUCCESS : .........." ); - } - // @@@@@ END CUSTOM BLOCK: @@@@@ -#endif - -#ifdef CONFIG_IPLTIME_CHECKSTOP_ANALYSIS - // update firdata inputs for OCC - TARGETING::Target* masterproc = NULL; - TARGETING::targetService().masterProcChipTargetHandle(masterproc); - l_errl = HBOCC::loadHostDataToSRAM(masterproc, - PRDF::ALL_PROC_MEM_MASTER_CORE); - if (l_errl) - { - TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, - "Error returned from call to HBOCC::loadHostDataToSRAM"); - } -#endif - - TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - "call_host_startPRD_dram exit" ); - - // end task, returning any errorlogs to IStepDisp - return l_errl; -} - // // Wrapper function to call mss_extent_setup // @@ -197,1013 +137,4 @@ void* call_mss_extent_setup( void *io_pArgs ) return l_stepError.getErrorHandle(); } - -// -// Wrapper function to call mss_memdiag -// -void* call_mss_memdiag( void *io_pArgs ) -{ - using namespace MDIA; - - errlHndl_t l_errl = NULL; - - IStepError l_stepError; - - TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - "call_mss_memdiag entry" ); - - TargetHandleList l_mbaList; - getAllChiplets(l_mbaList, TYPE_MBA); - - do { - - l_errl = ATTN::startService(); - - if(l_errl) - { - break; - } - - l_errl = runStep(l_mbaList); - if(NULL != l_errl) - { - TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,"MDIA subStep failed"); - break; - } - - l_errl = ATTN::stopService(); - - if(l_errl) - { - break; - } - - - } while (0); - - if( l_errl ) - { - // Create IStep error log and cross reference to error that occurred - l_stepError.addErrorDetails( l_errl ); - - // Commit Error - errlCommit( l_errl, HWPF_COMP_ID ); - } - - - TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - "call_mss_memdiag exit" ); - - // end task, returning any errorlogs to IStepDisp - return l_stepError.getErrorHandle(); -} - -// -// Wrapper function to call mss_thermal_init -// -void* call_mss_thermal_init( void *io_pArgs ) -{ - errlHndl_t l_errl = NULL; - IStepError l_StepError; - - do - { - // Get all Centaur targets - TARGETING::TargetHandleList l_memBufTargetList; - getAllChips(l_memBufTargetList, TYPE_MEMBUF ); - - // -------------------------------------------------------------------- - // run mss_thermal_init on all Centaurs - // -------------------------------------------------------------------- - for (TargetHandleList::const_iterator - l_iter = l_memBufTargetList.begin(); - l_iter != l_memBufTargetList.end(); - ++l_iter) - { - // make a local copy of the target for ease of use - const TARGETING::Target* l_pCentaur = *l_iter; - - // write HUID of target - TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, - "target HUID %.8X", TARGETING::get_huid(l_pCentaur)); - - // cast OUR type of target to a FAPI type of target. - const fapi::Target l_fapi_pCentaur( TARGET_TYPE_MEMBUF_CHIP, - (const_cast(l_pCentaur)) ); - - // Current run on target - TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - "Running call_mss_thermal_init HWP on " - "target HUID %.8X", TARGETING::get_huid(l_pCentaur)); - - - // call the HWP with each fapi::Target - FAPI_INVOKE_HWP( l_errl, mss_thermal_init, l_fapi_pCentaur ); - - if ( l_errl ) - { - TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, - "ERROR 0x%.8X: mss_thermal_init HWP returns error", - l_errl->reasonCode()); - - // capture the target data in the elog - ErrlUserDetailsTarget(l_pCentaur).addToLog( l_errl ); - - // Create IStep error log and cross reference to error that occurred - l_StepError.addErrorDetails( l_errl ); - - // Commit Error - errlCommit( l_errl, HWPF_COMP_ID ); - - break; - } - else - { - TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - "SUCCESS : mss_thermal_init HWP( )" ); - } - } - if (l_errl) - { - break; - } - - // Run proc throttle sync - // Get all functional proc chip targets - TARGETING::TargetHandleList l_cpuTargetList; - getAllChips(l_cpuTargetList, TYPE_PROC); - - for (TARGETING::TargetHandleList::const_iterator - l_cpuIter = l_cpuTargetList.begin(); - l_cpuIter != l_cpuTargetList.end(); - ++l_cpuIter) - { - const TARGETING::Target* l_pTarget = *l_cpuIter; - fapi::Target l_fapiproc_target( TARGET_TYPE_PROC_CHIP, - (const_cast(l_pTarget))); - - TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - "Running proc_throttle_sync HWP on " - "target HUID %.8X", TARGETING::get_huid(l_pTarget)); - - // Call proc_throttle_sync - FAPI_INVOKE_HWP( l_errl, proc_throttle_sync, l_fapiproc_target ); - - if (l_errl) - { - TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, - "ERROR 0x%.8X: proc_throttle_sync HWP returns error", - l_errl->reasonCode()); - - // Capture the target data in the elog - ErrlUserDetailsTarget(l_pTarget).addToLog(l_errl); - - // Create IStep error log and cross reference to error that occurred - l_StepError.addErrorDetails( l_errl ); - - // Commit Error - errlCommit( l_errl, HWPF_COMP_ID ); - - break; - } - else - { - TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - "SUCCESS : proc_throttle_sync HWP( )" ); - } - } - - } while (0); - - - if(l_StepError.isNull()) - { - TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - "SUCCESS : call_mss_thermal_init" ); - } - - // end task, returning any errorlogs to IStepDisp - return l_StepError.getErrorHandle(); -} - -// -// Wrapper function to call proc_pcie_config -// -void* call_proc_pcie_config( void *io_pArgs ) -{ - errlHndl_t l_errl = NULL; - - IStepError l_stepError; - - TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - "call_proc_pcie_config entry" ); - - TARGETING::TargetHandleList l_procTargetList; - getAllChips(l_procTargetList, TYPE_PROC ); - - for ( TargetHandleList::const_iterator - l_iter = l_procTargetList.begin(); - l_iter != l_procTargetList.end(); - ++l_iter ) - { - const TARGETING::Target* l_pTarget = *l_iter; - - // write HUID of target - TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, - "target HUID %.8X", TARGETING::get_huid(l_pTarget)); - - // build a FAPI type of target. - const fapi::Target l_fapi_pTarget( TARGET_TYPE_PROC_CHIP, - (const_cast(l_pTarget)) ); - - // call the HWP with each fapi::Target - FAPI_INVOKE_HWP( l_errl, proc_pcie_config, l_fapi_pTarget ); - - if ( l_errl ) - { - // capture the target data in the elog - ErrlUserDetailsTarget(l_pTarget).addToLog( l_errl ); - - // Create IStep error log and cross reference to error that occurred - l_stepError.addErrorDetails( l_errl ); - - // Commit Error - errlCommit( l_errl, HWPF_COMP_ID ); - - TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, - "ERROR : proc_pcie_config" ); - - break; - } - else - { - TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - "SUCCESS : proc_pcie_config" ); - } - } - - TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - "call_proc_pcie_config exit" ); - - // end task, returning any errorlogs to IStepDisp - return l_stepError.getErrorHandle(); -} - - -// -// Wrapper function to call mss_power_cleanup -// -void* call_mss_power_cleanup( void *io_pArgs ) -{ - errlHndl_t l_err = NULL; - IStepError l_stepError; - - TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - "call_mss_power_cleanup entry" ); - - // Get a list of all present Centaurs - TargetHandleList l_presCentaurs; - getChipResources(l_presCentaurs, TYPE_MEMBUF, UTIL_FILTER_PRESENT); - - // For each present Centaur - for (TargetHandleList::const_iterator - l_cenIter = l_presCentaurs.begin(); - l_cenIter != l_presCentaurs.end(); - ++l_cenIter) - { - // Make a local copy of the target for ease of use - TARGETING::Target * l_pCentaur = *l_cenIter; - // Retrieve HUID of current Centaur - TARGETING::ATTR_HUID_type l_currCentaurHuid = - TARGETING::get_huid(l_pCentaur); - - // Find all present MBAs associated with this Centaur - TARGETING::TargetHandleList l_presMbas; - getChildAffinityTargetsByState(l_presMbas, - l_pCentaur, - CLASS_UNIT, - TYPE_MBA, - UTIL_FILTER_PRESENT); - - // If not at least two MBAs found - if (l_presMbas.size() < 2) - { - TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, - "Not enough MBAs found for Centaur target HUID %.8X, " - "skipping this Centaur.", - l_currCentaurHuid); - continue; - } - - // Cache current MBA HUIDs for tracing - TARGETING::ATTR_HUID_type l_currMBA0Huid = - TARGETING::get_huid(l_presMbas[0]); - TARGETING::ATTR_HUID_type l_currMBA1Huid = - TARGETING::get_huid(l_presMbas[1]); - - TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, - "Running mss_power_cleanup HWP on " - "Centaur HUID %.8X, MBA0 HUID %.8X, " - "MBA1 HUID %.8X, ", l_currCentaurHuid, - l_currMBA0Huid, l_currMBA1Huid); - - // Create FAPI Targets. - const fapi::Target l_fapiCentaurTarget(TARGET_TYPE_MEMBUF_CHIP, - (const_cast(l_pCentaur))); - const fapi::Target l_fapiMba0Target(TARGET_TYPE_MBA_CHIPLET, - (const_cast(l_presMbas[0]))); - const fapi::Target l_fapiMba1Target(TARGET_TYPE_MBA_CHIPLET, - (const_cast(l_presMbas[1]))); - - // Call the HWP with each fapi::Target - FAPI_INVOKE_HWP(l_err, mss_power_cleanup, l_fapiCentaurTarget, - l_fapiMba0Target, l_fapiMba1Target); - - if (l_err) - { - TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, - "mss_power_cleanup HWP failed to perform" - " cleanup on centaur: 0x%.8X HWP_ERROR: 0x%.8X", - l_currCentaurHuid,l_err->reasonCode()); - // Capture the target data in the error log - ErrlUserDetailsTarget(l_pCentaur).addToLog(l_err); - // Create IStep error log and cross reference error that occurred - l_stepError.addErrorDetails(l_err); - // Commit error - errlCommit(l_err, HWPF_COMP_ID); - } - else - { - // Success - TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, - "Successfully ran mss_power_cleanup HWP on " - "Centaur HUID %.8X, MBA0 HUID %.8X, " - "MBA1 HUID %.8X, ", l_currCentaurHuid, - l_currMBA0Huid, l_currMBA1Huid); - } - } - - TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - "call_mss_power_cleanup exit" ); - - // end task, returning any errorlogs to IStepDisp - return l_stepError.getErrorHandle(); -} - - -// -// Wrapper function to call proc_setup_bars -// -void* call_proc_setup_bars( void *io_pArgs ) -{ - errlHndl_t l_errl = NULL; - - IStepError l_stepError; - - TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - "call_proc_setup_bars entry" ); - - - // @@@@@ CUSTOM BLOCK: @@@@@ - // Get all Centaur targets - TARGETING::TargetHandleList l_cpuTargetList; - getAllChips(l_cpuTargetList, TYPE_PROC ); - - // -------------------------------------------------------------------- - // run mss_setup_bars on all CPUs. - // -------------------------------------------------------------------- - for (TargetHandleList::const_iterator - l_cpu_iter = l_cpuTargetList.begin(); - l_cpu_iter != l_cpuTargetList.end(); - ++l_cpu_iter) - { - // make a local copy of the target for ease of use - const TARGETING::Target* l_pCpuTarget = *l_cpu_iter; - - // write HUID of target - TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, - "mss_setup_bars: proc " - "target HUID %.8X", TARGETING::get_huid(l_pCpuTarget)); - - // cast OUR type of target to a FAPI type of target. - const fapi::Target l_fapi_pCpuTarget( TARGET_TYPE_PROC_CHIP, - (const_cast (l_pCpuTarget)) ); - - TARGETING::TargetHandleList l_membufsList; - getChildAffinityTargets(l_membufsList, l_pCpuTarget, - CLASS_CHIP, TYPE_MEMBUF); - std::vector l_associated_centaurs; - - for (TargetHandleList::const_iterator - l_membuf_iter = l_membufsList.begin(); - l_membuf_iter != l_membufsList.end(); - ++l_membuf_iter) - { - // make a local copy of the target for ease of use - const TARGETING::Target* l_pTarget = *l_membuf_iter; - - // cast OUR type of target to a FAPI type of target. - const fapi::Target l_fapi_centaur_target(fapi::TARGET_TYPE_MEMBUF_CHIP, - (const_cast(l_pTarget)) ); - - TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, - "target HUID %.8X", TARGETING::get_huid(l_pTarget)); - - l_associated_centaurs.push_back(l_fapi_centaur_target); - } - - // call the HWP with each fapi::Target - FAPI_INVOKE_HWP(l_errl, - mss_setup_bars, - l_fapi_pCpuTarget, l_associated_centaurs ); - - if ( l_errl ) - { - // capture the target data in the elog - ErrlUserDetailsTarget(l_pCpuTarget).addToLog( l_errl ); - - // Create IStep error log and cross reference to error that occurred - l_stepError.addErrorDetails( l_errl ); - - // Commit Error - errlCommit( l_errl, HWPF_COMP_ID ); - - TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, - "ERROR : mss_setup_bars" ); - // break and return with error - break; - } - else - { - TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - "SUCCESS : mss_setup-bars" ); - } - } // endfor - - - if ( l_stepError.isNull() ) - { - //---------------------------------------------------------------------- - // run proc_setup_bars on all CPUs - //---------------------------------------------------------------------- - std::vector l_proc_chips; - - TargetPairs_t l_abusLinks; - l_errl = PbusLinkSvc::getTheInstance().getPbusConnections( - l_abusLinks, TYPE_ABUS, false ); - - for (TargetHandleList::const_iterator - l_cpu_iter = l_cpuTargetList.begin(); - l_cpu_iter != l_cpuTargetList.end() && !l_errl; - ++l_cpu_iter) - { - // make a local copy of the target for ease of use - const TARGETING::Target* l_pCpuTarget = *l_cpu_iter; - - // cast OUR type of target to a FAPI type of target. - const fapi::Target l_fapi_pCpuTarget( TARGET_TYPE_PROC_CHIP, - (const_cast (l_pCpuTarget)) ); - - proc_setup_bars_proc_chip l_proc_chip ; - l_proc_chip.this_chip = l_fapi_pCpuTarget; - l_proc_chip.process_f0 = true; - l_proc_chip.process_f1 = true; - - TARGETING::TargetHandleList l_abuses; - getChildChiplets( l_abuses, l_pCpuTarget, TYPE_ABUS ); - - for (TargetHandleList::const_iterator - l_abus_iter = l_abuses.begin(); - l_abus_iter != l_abuses.end(); - ++l_abus_iter) - { - const TARGETING::Target* l_target = *l_abus_iter; - uint8_t l_srcID = l_target->getAttr(); - TargetPairs_t::iterator l_itr = l_abusLinks.find(l_target); - if ( l_itr == l_abusLinks.end() ) - { - continue; - } - - const TARGETING::Target *l_pParent = NULL; - l_pParent = getParentChip( - (const_cast(l_itr->second))); - fapi::Target l_fapiproc_parent( TARGET_TYPE_PROC_CHIP, - (void *)l_pParent ); - - switch (l_srcID) - { - case 0: l_proc_chip.a0_chip = l_fapiproc_parent; break; - case 1: l_proc_chip.a1_chip = l_fapiproc_parent; break; - case 2: l_proc_chip.a2_chip = l_fapiproc_parent; break; - default: break; - } - } - - l_proc_chips.push_back( l_proc_chip ); - - } // endfor - - if (!l_errl) - { - TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - "call proc_setup_bars"); - - // call the HWP with each fapi::Target - FAPI_INVOKE_HWP( l_errl, proc_setup_bars, l_proc_chips, true ); - - if ( l_errl ) - { - TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, - "ERROR : proc_setup_bars" ); - } - else - { - TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - "SUCCESS : proc_setup_bars" ); - } - } - } // end if !l_errl - - // @@@@@ END CUSTOM BLOCK: @@@@@ - - if ( l_errl ) - { - - // Create IStep error log and cross reference to error that occurred - l_stepError.addErrorDetails( l_errl); - - // Commit Error - errlCommit( l_errl, HWPF_COMP_ID ); - } - - TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - "call_proc_setup_bars exit" ); - - // end task, returning any errorlogs to IStepDisp - return l_stepError.getErrorHandle(); -} - - -// -// Wrapper function to call proc_exit_cache_contained -// -void* call_proc_exit_cache_contained( void *io_pArgs ) -{ - errlHndl_t l_errl = NULL; - - IStepError l_stepError; - - TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - "call_proc_exit_cache_contained entry" ); - - // @@@@@ CUSTOM BLOCK: @@@@@ - // figure out what targets we need - // customize any other inputs - // set up loops to go through all targets (if parallel, spin off a task) - // extend the memory space from 8MEG to 32Meg - - //if mirrored then check that there is going to be memory at that location. - //For sapphire with mirrored location flipped and at zero, - //this also insures there is memory available to 'exit_cache' to. - //Also set ATTR_PAYLOAD_BASE here. - TARGETING::Target* l_sys = NULL; - targetService().getTopLevelTarget(l_sys); - assert( l_sys != NULL ); - - uint8_t l_mpipl = l_sys->getAttr(); - ATTR_PAYLOAD_BASE_type payloadBase = 0; - - if(!l_mpipl) - { - ATTR_PAYLOAD_IN_MIRROR_MEM_type l_mirrored = false; - - // In Sapphire mode disable mirroring for now - @todo-RTC:108314 - // and force payload to zero - if(!is_sapphire_load()) - { - payloadBase = l_sys->getAttr(); - l_mirrored = l_sys->getAttr(); - } - - if(l_mirrored) - { - ATTR_MIRROR_BASE_ADDRESS_type l_mirrorBaseAddr = 0; - if(!is_sapphire_load()) - { - uint64_t hrmor_base = - l_sys->getAttr(); - - l_mirrorBaseAddr = - l_sys->getAttr(); - - // For single-node systems, the non-master processors can be - // in a different logical (powerbus) node. - // Need to migrate task to master. - task_affinity_pin(); - task_affinity_migrate_to_master(); - uint64_t this_node = INTR::PIR_t(task_getcpuid()).nodeId; - task_affinity_unpin(); - - l_mirrorBaseAddr += (this_node * hrmor_base)/2; - - } - - // Verify there is memory at the mirrored location - bool mirroredMemExists = false; - TARGETING::TargetHandleList l_procList; - getAllChips(l_procList, TYPE_PROC); - - for (TargetHandleList::const_iterator proc = l_procList.begin(); - proc != l_procList.end() && !mirroredMemExists; - ++proc) - { - uint64_t mirrorBase[4]; - uint64_t mirrorSize[4]; - bool rc = (*proc)-> - tryGetAttr(mirrorBase); - if(false == rc) - { - TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, - "Failed to get ATTR_PROC_MIRROR_BASES"); - assert(0); - } - - rc = (*proc)-> - tryGetAttr(mirrorSize); - if(false == rc) - { - TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, - "Failed to get ATTR_PROC_MIRROR_SIZES"); - assert(0); - } - - for(uint64_t i = 0; i < 4 && !mirroredMemExists; ++i) - { - if(mirrorSize[i] != 0 && - l_mirrorBaseAddr >= mirrorBase[i] && - l_mirrorBaseAddr < (mirrorBase[i] + mirrorSize[i])) - { - mirroredMemExists = true; - } - } - } - - if (mirroredMemExists) - { - // ATTR_PAYLOAD_BASE is in MB - payloadBase += l_mirrorBaseAddr/MEGABYTE; - } - else - { - TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, ERR_MRK - "Request to load payload into mirrored memory," - " but no memory exists at address 0x%016lx", - l_mirrorBaseAddr); - - /*@ - * @errortype ERRL_SEV_CRITICAL_SYS_TERM - * @moduleid fapi::MOD_EXIT_CACHE_CONTAINED, - * @reasoncode fapi::RC_NO_MIRRORED_MEMORY, - * @userdata1 Mirrored Memory Address - * @userdata2 0 - * - * @devdesc Request given to load payload into mirrored - * memory, but no mirrored memory exists at - * that location. - */ - l_errl = new ERRORLOG::ErrlEntry - ( - ERRORLOG::ERRL_SEV_CRITICAL_SYS_TERM, - fapi::MOD_EXIT_CACHE_CONTAINED, - fapi::RC_NO_MIRRORED_MEMORY, - l_mirrorBaseAddr, - 0, - true); // callout firmware - } - } - // If we're not mirrored, payloadBase is the lowest mem_base. - // Note that if we are mirrored, finding the correct mirror - // base yields the proper payloadBase. This should also work - // for sapphire as a single (working) node will return 0 for - // bottom_mem_addr. - else { - payloadBase += get_bottom_mem_addr()/MEGABYTE; - } - } - - if(!l_errl) - { - if(!l_mpipl) - { - TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, - "Payload base address is 0x%016lx", - payloadBase * MEGABYTE); - - l_sys->setAttr(payloadBase); - } - - // call the HWP with each fapi::Target - FAPI_INVOKE_HWP( l_errl, - proc_exit_cache_contained - ); - - - - if ( l_errl ) - { - TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, - "ERROR : call_proc_exit_cache_contained, " - "errorlog PLID=0x%x", - l_errl->plid() ); - } - // no errors so extend VMM. - else - { - TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - "SUCCESS : call_proc_exit_cache_contained" ); - - - - // Call the function to extend VMM to 32MEG - int rc = mm_extend(); - - if (rc!=0) - { - /*@ - * @errortype - * @moduleid fapi::MOD_EXIT_CACHE_CONTAINED - * @reasoncode fapi::RC_MM_EXTEND_FAILED - * @userdata1 rc from mm_extend - * @userdata2 - * - * @devdesc Failure extending memory to 32MEG after - * exiting cache contained mode. - */ - l_errl = new ERRORLOG::ErrlEntry - (ERRORLOG::ERRL_SEV_UNRECOVERABLE, - fapi::MOD_EXIT_CACHE_CONTAINED, - fapi::RC_MM_EXTEND_FAILED, - rc, - 0); - - TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, - "ERROR : call_proc_exit_cache_contained" - " - extendVMM, rc=0x%x", - rc ); - } - else - { - // trace out the extend VMM was successful - TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, - "SUCCESS : call_proc_exit_cache_contained" - " - extendVMM"); - } - } - } - if ( l_errl ) - { - // Create IStep error log and cross reference to error that occurred - l_stepError.addErrorDetails( l_errl ); - - // Commit Error - errlCommit( l_errl, HWPF_COMP_ID ); - } - - TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - "call_proc_exit_cache_contained exit" ); - - // @@@@@ END CUSTOM BLOCK: @@@@@ - - // end task, returning any errorlogs to IStepDisp - return l_stepError.getErrorHandle(); -} - - -// -// Wrapper function to call call_host_mpipl_service -// -void* call_host_mpipl_service( void *io_pArgs ) -{ - - IStepError l_StepError; - - errlHndl_t l_err = NULL; - - TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - "call_host_mpipl_service entry" ); - - // call proc_mpipl_chip_cleanup.C - TARGETING::TargetHandleList l_procTargetList; - getAllChips(l_procTargetList, TYPE_PROC ); - - // --------------------------------------------------------------- - // run proc_mpipl_chip_cleanup.C on all proc chips - // --------------------------------------------------------------- - for (TargetHandleList::const_iterator - l_iter = l_procTargetList.begin(); - l_iter != l_procTargetList.end(); - ++l_iter) - { - // make a local copy of the target for ease of use - const TARGETING::Target* l_pProcTarget = *l_iter; - - // write HUID of target - TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, - "target HUID %.8X", TARGETING::get_huid(l_pProcTarget)); - - // cast OUR type of target to a FAPI type of target. - const fapi::Target l_fapi_pProcTarget( TARGET_TYPE_PROC_CHIP, - (const_cast (l_pProcTarget)) ); - - // call the HWP with each fapi::Target - FAPI_INVOKE_HWP(l_err, proc_mpipl_chip_cleanup, - l_fapi_pProcTarget ); - - if ( l_err ) - { - TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, - "ERROR : returned from proc_mpipl_chip_cleanup" ); - - // capture the target data in the elog - ERRORLOG::ErrlUserDetailsTarget(l_pProcTarget).addToLog( l_err ); - - // since we are doing an mpipl break out, the mpipl has failed - break; - } - - // --------------------------------------------------------------- - // run proc_mpipl_ex_cleanup.C on all proc chips - // --------------------------------------------------------------- - // call the HWP with each fapi::Target - FAPI_INVOKE_HWP(l_err, - proc_mpipl_ex_cleanup, - l_fapi_pProcTarget ); - - if ( l_err ) - { - TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, - "ERROR : returned from proc_mpipl_ex_cleanup" ); - - // capture the target data in the elog - ERRORLOG::ErrlUserDetailsTarget(l_pProcTarget).addToLog( l_err ); - - // since we are doing an mpipl break out, the mpipl has failed - break; - } - } - - //Determine if we should perform dump ops - //Note that this is only called in MPIPL context, so don't - //have to check MPIPL - bool collect_dump = false; - TARGETING::Target * sys = NULL; - TARGETING::targetService().getTopLevelTarget( sys ); - TARGETING::CecIplType type; - if(sys && - sys->tryGetAttr(type) && - type.PostDump) - { - collect_dump = true; - } - - TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - "Ready to collect dump -- yes/no [%d]", collect_dump); - - // No error on the procedure.. proceed to collect the dump. - if (!l_err && collect_dump) - { - - TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - "SUCCESS : proc_mpipl_ex_cleanup" ); - - // currently according to Adriana, the dump calls should only cause an - // istep failure when the dump collect portion of this step fails.. We - // will not fail the istep on any mbox message failures. instead we will - // simply commit the errorlog and continue. - - errlHndl_t l_errMsg = NULL; - - // Dump relies upon the runtime module - // Not declaring in istep DEP list cause if we load it - // we want it to stay loaded - if ( !VFS::module_is_loaded( "libruntime.so" ) ) - { - l_err = VFS::module_load( "libruntime.so" ); - - if ( l_err ) - { - // load module returned with errl set - TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - "Could not load runtime module" ); - } - } - - // If dump module successfull loaded then continue with DumpCollect and - // messaging - if (!l_err) - { - do - { - // send the start message - l_errMsg = DUMP::sendMboxMsg(DUMP::DUMP_MSG_START_MSG_TYPE); - - // If error, commit and send error message. - if (l_errMsg) - { - TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, - "ERROR : returned from DUMP::sendMboxMsg - dump start" ); - - errlCommit( l_errMsg, HWPF_COMP_ID ); - - // don't break in this case because we not want to fail the - // istep on the dump collect so we will continue after we - // log the errhandle that we can't send a message. - } - - // Call the dump collect - l_err = DUMP::doDumpCollect(); - - // Got a Dump Collect error.. Commit the dumpCollect - // errorlog and then send an dump Error mbox message - // and FSP will decide what to do. - // We do not want dump Collect failures to terminate the istep. - if (l_err) - { - TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, - "ERROR : returned from DUMP::HbDumpCopySrcToDest" ); - - break; - } - - } while(0); - - DUMP::DUMP_MSG_TYPE msgType = DUMP::DUMP_MSG_END_MSG_TYPE; - - // Send dumpCollect success trace - if (!l_err) - { - TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - "SUCCESS : doDumpCollect" ); - } - // got an error that we need to send a ERROR message to FSP - // and commit the errorlog from dumpCollect. - else - { - msgType = DUMP::DUMP_MSG_ERROR_MSG_TYPE; - - // Commit the dumpCollect errorlog from above as - // we dont want dump collect to kill the istep - errlCommit( l_err, HWPF_COMP_ID ); - - } - - // Send an Error mbox msg to FSP (either end or error) - l_errMsg = DUMP::sendMboxMsg(msgType); - - if (l_errMsg) - { - TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, - "ERROR : returned from DUMP::sendMboxMsg" ); - - errlCommit( l_errMsg, HWPF_COMP_ID ); - } - - - // Need to unload the runtime module regardless of whether we have - // an error or not. - errlHndl_t l_errUnLoad = VFS::module_unload( "libruntime.so" ); - - if (l_errUnLoad) - { - TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, - "ERROR : returned from VFS::module_unload (libruntime.so)" ); - - errlCommit( l_errUnLoad, HWPF_COMP_ID ); - } - - } - else - { - TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, - "ERROR : returned from VFS::module_load (libruntime.so)" ); - } - } - - // If got an error in the procedure or collection of the dump kill the istep - if( l_err ) - { - // Create IStep error log and cross reference to error that occurred - l_StepError.addErrorDetails( l_err ); - - // Commit Error - errlCommit( l_err, HWPF_COMP_ID ); - } - - TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - "call_host_mpipl_service exit" ); - - return l_StepError.getErrorHandle(); -} - }; // end namespace diff --git a/src/usr/hwpf/hwp/establish_system_smp/establish_system_smp.C b/src/usr/hwpf/hwp/establish_system_smp/establish_system_smp.C index 17960bc3e..633bc4a62 100644 --- a/src/usr/hwpf/hwp/establish_system_smp/establish_system_smp.C +++ b/src/usr/hwpf/hwp/establish_system_smp/establish_system_smp.C @@ -63,7 +63,7 @@ // fapi support #include #include -#include +#include #include "establish_system_smp.H" #include diff --git a/src/usr/hwpf/hwp/occ/occ.C b/src/usr/hwpf/hwp/occ/occ.C index 3b2db4596..8c7e67e9d 100644 --- a/src/usr/hwpf/hwp/occ/occ.C +++ b/src/usr/hwpf/hwp/occ/occ.C @@ -49,7 +49,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/usr/hwpf/hwp/occ/occAccess.C b/src/usr/hwpf/hwp/occ/occAccess.C index abbc00ebf..01d555cad 100644 --- a/src/usr/hwpf/hwp/occ/occAccess.C +++ b/src/usr/hwpf/hwp/occ/occAccess.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2014 */ +/* Contributors Listed Below - COPYRIGHT 2014,2015 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -32,7 +32,7 @@ // Fapi #include #include -#include +#include // Procedures #include diff --git a/src/usr/hwpf/hwp/occ/occ_common.C b/src/usr/hwpf/hwp/occ/occ_common.C index 1a88532ca..33ab95e0d 100644 --- a/src/usr/hwpf/hwp/occ/occ_common.C +++ b/src/usr/hwpf/hwp/occ/occ_common.C @@ -48,7 +48,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/usr/hwpf/hwp/occ/runtime/rt_occ.C b/src/usr/hwpf/hwp/occ/runtime/rt_occ.C index cb68f46f6..cb7a1b45a 100644 --- a/src/usr/hwpf/hwp/occ/runtime/rt_occ.C +++ b/src/usr/hwpf/hwp/occ/runtime/rt_occ.C @@ -47,7 +47,7 @@ #include #include #include -#include +#include // Procedures #include diff --git a/src/usr/hwpf/hwp/pstates/pstates/freqVoltageSvc.C b/src/usr/hwpf/hwp/pstates/pstates/freqVoltageSvc.C index 8b27f89ce..f3fcaa94b 100644 --- a/src/usr/hwpf/hwp/pstates/pstates/freqVoltageSvc.C +++ b/src/usr/hwpf/hwp/pstates/pstates/freqVoltageSvc.C @@ -42,7 +42,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/src/usr/hwpf/hwp/thread_activate/thread_activate.C b/src/usr/hwpf/hwp/thread_activate/thread_activate.C index 5c8bc4639..efb3ab186 100644 --- a/src/usr/hwpf/hwp/thread_activate/thread_activate.C +++ b/src/usr/hwpf/hwp/thread_activate/thread_activate.C @@ -5,7 +5,9 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* COPYRIGHT International Business Machines Corp. 2012,2014 */ +/* 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. */ @@ -50,7 +52,7 @@ #include #include #include -#include +#include #include "p8_cpu_special_wakeup.H" #include diff --git a/src/usr/hwpf/plat/fapiPlatAttrOverrideSync.C b/src/usr/hwpf/plat/fapiPlatAttrOverrideSync.C index 0833b0699..66bbbda1f 100644 --- a/src/usr/hwpf/plat/fapiPlatAttrOverrideSync.C +++ b/src/usr/hwpf/plat/fapiPlatAttrOverrideSync.C @@ -5,7 +5,9 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* COPYRIGHT International Business Machines Corp. 2012,2014 */ +/* 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. */ @@ -40,7 +42,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/usr/hwpf/plat/fapiPlatAttributeService.C b/src/usr/hwpf/plat/fapiPlatAttributeService.C index 790428008..1d693e896 100644 --- a/src/usr/hwpf/plat/fapiPlatAttributeService.C +++ b/src/usr/hwpf/plat/fapiPlatAttributeService.C @@ -40,7 +40,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/src/usr/hwpf/plat/fapiPlatHwAccess.C b/src/usr/hwpf/plat/fapiPlatHwAccess.C index d4501aef5..28e313697 100644 --- a/src/usr/hwpf/plat/fapiPlatHwAccess.C +++ b/src/usr/hwpf/plat/fapiPlatHwAccess.C @@ -5,7 +5,9 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* COPYRIGHT International Business Machines Corp. 2011,2014 */ +/* Contributors Listed Below - COPYRIGHT 2011,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. */ @@ -31,7 +33,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/src/usr/hwpf/plat/fapiPlatHwpInvoker.C b/src/usr/hwpf/plat/fapiPlatHwpInvoker.C index 27c8e54ff..09a2815df 100644 --- a/src/usr/hwpf/plat/fapiPlatHwpInvoker.C +++ b/src/usr/hwpf/plat/fapiPlatHwpInvoker.C @@ -33,7 +33,7 @@ #include #include #include -#include +#include #include #include diff --git a/src/usr/hwpf/plat/fapiPlatMBvpdAccess.C b/src/usr/hwpf/plat/fapiPlatMBvpdAccess.C index 7d5eee7aa..184093b4b 100644 --- a/src/usr/hwpf/plat/fapiPlatMBvpdAccess.C +++ b/src/usr/hwpf/plat/fapiPlatMBvpdAccess.C @@ -32,7 +32,7 @@ #include // fapi support -#include +#include #include // MBVPD diff --git a/src/usr/hwpf/plat/fapiPlatMvpdAccess.C b/src/usr/hwpf/plat/fapiPlatMvpdAccess.C index 274a63d47..ce2b5b6fc 100644 --- a/src/usr/hwpf/plat/fapiPlatMvpdAccess.C +++ b/src/usr/hwpf/plat/fapiPlatMvpdAccess.C @@ -36,7 +36,7 @@ #include #include #include -#include +#include // MVPD #include diff --git a/src/usr/hwpf/plat/fapiPlatSystemConfig.C b/src/usr/hwpf/plat/fapiPlatSystemConfig.C index 0ba70b916..55820824c 100644 --- a/src/usr/hwpf/plat/fapiPlatSystemConfig.C +++ b/src/usr/hwpf/plat/fapiPlatSystemConfig.C @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2011,2014 */ +/* Contributors Listed Below - COPYRIGHT 2011,2015 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -32,7 +32,7 @@ #include #include -#include +#include #include #include #include diff --git a/src/usr/hwpf/plat/fapiPlatUtil.C b/src/usr/hwpf/plat/fapiPlatUtil.C index 269c36fe0..a61cd012a 100644 --- a/src/usr/hwpf/plat/fapiPlatUtil.C +++ b/src/usr/hwpf/plat/fapiPlatUtil.C @@ -47,7 +47,7 @@ #include #include #include -#include +#include #include "handleSpecialWakeup.H" #endif diff --git a/src/usr/hwpf/test/occAccessTest.H b/src/usr/hwpf/test/occAccessTest.H index 143c0439c..6c037ec61 100644 --- a/src/usr/hwpf/test/occAccessTest.H +++ b/src/usr/hwpf/test/occAccessTest.H @@ -5,7 +5,7 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2014 */ +/* Contributors Listed Below - COPYRIGHT 2014,2015 */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -31,7 +31,7 @@ #include #include #include -#include +#include // fapi support #include diff --git a/src/usr/isteps/hwpistepud.C b/src/usr/isteps/hwpistepud.C index 8bed5a84f..63e168c16 100644 --- a/src/usr/isteps/hwpistepud.C +++ b/src/usr/isteps/hwpistepud.C @@ -29,7 +29,7 @@ */ #include #include -#include +#include using namespace ISTEP_ERROR; diff --git a/src/usr/isteps/istep13/hbVddrMsg.H b/src/usr/isteps/istep13/hbVddrMsg.H index 2b14c0c00..22c3557c2 100644 --- a/src/usr/isteps/istep13/hbVddrMsg.H +++ b/src/usr/isteps/istep13/hbVddrMsg.H @@ -46,7 +46,7 @@ #include #include #include -#include +#include #include /*****************************************************************************/ diff --git a/src/usr/isteps/istep13/palmetto_vddr.C b/src/usr/isteps/istep13/palmetto_vddr.C index d67d753a8..b3307a63f 100644 --- a/src/usr/isteps/istep13/palmetto_vddr.C +++ b/src/usr/isteps/istep13/palmetto_vddr.C @@ -30,7 +30,7 @@ #include -#include +#include #include #include diff --git a/src/usr/isteps/istep14/call_host_mpipl_service.C b/src/usr/isteps/istep14/call_host_mpipl_service.C new file mode 100644 index 000000000..cce2910f6 --- /dev/null +++ b/src/usr/isteps/istep14/call_host_mpipl_service.C @@ -0,0 +1,270 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/isteps/istep14/call_host_mpipl_service.C $ */ +/* */ +/* OpenPOWER HostBoot Project */ +/* */ +/* Contributors Listed Below - COPYRIGHT 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 */ +#include +#include +#include + +#include +#include + +// targeting support +#include +#include +#include + +#include +#include + +using namespace ISTEP; +using namespace ISTEP_ERROR; +using namespace ERRORLOG; +using namespace TARGETING; + +namespace ISTEP_14 +{ +void* call_host_mpipl_service (void *io_pArgs) +{ + + IStepError l_StepError; + + errlHndl_t l_err = NULL; + + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "call_host_mpipl_service entry" ); + + // call proc_mpipl_chip_cleanup.C + TARGETING::TargetHandleList l_procTargetList; + getAllChips(l_procTargetList, TYPE_PROC ); + + // --------------------------------------------------------------- + // run proc_mpipl_chip_cleanup.C on all proc chips + // --------------------------------------------------------------- + for (TargetHandleList::const_iterator + l_iter = l_procTargetList.begin(); + l_iter != l_procTargetList.end(); + ++l_iter) + { + // make a local copy of the target for ease of use + const TARGETING::Target* l_pProcTarget = *l_iter; + + // write HUID of target + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "target HUID %.8X", TARGETING::get_huid(l_pProcTarget)); + + //@TODO RTC:133831 cast OUR type of target to a FAPI type of target. + //const fapi::Target l_fapi_pProcTarget( TARGET_TYPE_PROC_CHIP, + // (const_cast (l_pProcTarget)) ); + + // call the HWP with each fapi::Target + //FAPI_INVOKE_HWP(l_err, proc_mpipl_chip_cleanup, + // l_fapi_pProcTarget ); + + if ( l_err ) + { + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "ERROR : returned from proc_mpipl_chip_cleanup" ); + + // capture the target data in the elog + ERRORLOG::ErrlUserDetailsTarget(l_pProcTarget).addToLog( l_err ); + + // since we are doing an mpipl break out, the mpipl has failed + break; + } + + // --------------------------------------------------------------- + // run proc_mpipl_ex_cleanup.C on all proc chips + // --------------------------------------------------------------- + //@TODO RTC:133831 call the HWP with each fapi::Target + //FAPI_INVOKE_HWP(l_err, + // proc_mpipl_ex_cleanup, + // l_fapi_pProcTarget ); + + if ( l_err ) + { + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "ERROR : returned from proc_mpipl_ex_cleanup" ); + + // capture the target data in the elog + ERRORLOG::ErrlUserDetailsTarget(l_pProcTarget).addToLog( l_err ); + + // since we are doing an mpipl break out, the mpipl has failed + break; + } + } + + //Determine if we should perform dump ops + //Note that this is only called in MPIPL context, so don't + //have to check MPIPL + bool collect_dump = false; + TARGETING::Target * sys = NULL; + TARGETING::targetService().getTopLevelTarget( sys ); + TARGETING::CecIplType type; + if(sys && + sys->tryGetAttr(type) && + type.PostDump) + { + collect_dump = true; + } + + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "Ready to collect dump -- yes/no [%d]", collect_dump); + + // No error on the procedure.. proceed to collect the dump. + if (!l_err && collect_dump) + { + + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "SUCCESS : proc_mpipl_ex_cleanup" ); + + // currently according to Adriana, the dump calls should only cause an + // istep failure when the dump collect portion of this step fails.. We + // will not fail the istep on any mbox message failures. instead we will + // simply commit the errorlog and continue. + + errlHndl_t l_errMsg = NULL; + + // Dump relies upon the runtime module + // Not declaring in istep DEP list cause if we load it + // we want it to stay loaded + if ( !VFS::module_is_loaded( "libruntime.so" ) ) + { + l_err = VFS::module_load( "libruntime.so" ); + + if ( l_err ) + { + // load module returned with errl set + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "Could not load runtime module" ); + } + } + + // If dump module successfull loaded then continue with DumpCollect and + // messaging + if (!l_err) + { + do + { + // send the start message + l_errMsg = DUMP::sendMboxMsg(DUMP::DUMP_MSG_START_MSG_TYPE); + + // If error, commit and send error message. + if (l_errMsg) + { + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "ERROR : returned from DUMP::sendMboxMsg - dump start" ); + + errlCommit( l_errMsg, HWPF_COMP_ID ); + + // don't break in this case because we not want to fail the + // istep on the dump collect so we will continue after we + // log the errhandle that we can't send a message. + } + + // Call the dump collect + l_err = DUMP::doDumpCollect(); + + // Got a Dump Collect error.. Commit the dumpCollect + // errorlog and then send an dump Error mbox message + // and FSP will decide what to do. + // We do not want dump Collect failures to terminate the istep. + if (l_err) + { + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "ERROR : returned from DUMP::HbDumpCopySrcToDest" ); + + break; + } + + } while(0); + + DUMP::DUMP_MSG_TYPE msgType = DUMP::DUMP_MSG_END_MSG_TYPE; + + // Send dumpCollect success trace + if (!l_err) + { + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "SUCCESS : doDumpCollect" ); + } + // got an error that we need to send a ERROR message to FSP + // and commit the errorlog from dumpCollect. + else + { + msgType = DUMP::DUMP_MSG_ERROR_MSG_TYPE; + + // Commit the dumpCollect errorlog from above as + // we dont want dump collect to kill the istep + errlCommit( l_err, HWPF_COMP_ID ); + + } + + // Send an Error mbox msg to FSP (either end or error) + l_errMsg = DUMP::sendMboxMsg(msgType); + + if (l_errMsg) + { + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "ERROR : returned from DUMP::sendMboxMsg" ); + + errlCommit( l_errMsg, HWPF_COMP_ID ); + } + + + // Need to unload the runtime module regardless of whether we have + // an error or not. + errlHndl_t l_errUnLoad = VFS::module_unload( "libruntime.so" ); + + if (l_errUnLoad) + { + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "ERROR : returned from VFS::module_unload (libruntime.so)" ); + + errlCommit( l_errUnLoad, HWPF_COMP_ID ); + } + + } + else + { + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "ERROR : returned from VFS::module_load (libruntime.so)" ); + } + } + + // If got an error in the procedure or collection of the dump kill the istep + if( l_err ) + { + // Create IStep error log and cross reference to error that occurred + l_StepError.addErrorDetails( l_err ); + + // Commit Error + errlCommit( l_err, HWPF_COMP_ID ); + } + + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "call_host_mpipl_service exit" ); + + return l_StepError.getErrorHandle(); +} + +}; diff --git a/src/usr/isteps/istep14/call_host_startprd_dram.C b/src/usr/isteps/istep14/call_host_startprd_dram.C new file mode 100644 index 000000000..094293111 --- /dev/null +++ b/src/usr/isteps/istep14/call_host_startprd_dram.C @@ -0,0 +1,88 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/isteps/istep14/call_host_startprd_dram.C $ */ +/* */ +/* OpenPOWER HostBoot Project */ +/* */ +/* Contributors Listed Below - COPYRIGHT 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 */ +#include + +using namespace ERRORLOG; + +namespace ISTEP_14 +{ +void* call_host_startprd_dram (void *io_pArgs) +{ + errlHndl_t l_errl = NULL; + + TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "call_host_startPRD_dram entry" ); + +#if 0 + // @@@@@ CUSTOM BLOCK: @@@@@ + // figure out what targets we need + // customize any other inputs + // set up loops to go through all targets (if parallel, spin off a task) + + // write HUID of target + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "target HUID %.8X", TARGETING::get_huid(l_@targetN_target)); + + // cast OUR type of target to a FAPI type of target. + const fapi::Target l_fapi_@targetN_target( TARGET_TYPE_MEMBUF_CHIP, + (const_cast(l_@targetN_target)) ); + + // call the HWP with each fapi::Target + FAPI_INVOKE_HWP( l_errl, host_startPRD_dram, _args_...); + if ( l_errl ) + { + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "ERROR : .........." ); + errlCommit( l_errl, HWPF_COMP_ID ); + } + else + { + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "SUCCESS : .........." ); + } + // @@@@@ END CUSTOM BLOCK: @@@@@ +#endif + +#ifdef CONFIG_IPLTIME_CHECKSTOP_ANALYSIS + // update firdata inputs for OCC + TARGETING::Target* masterproc = NULL; + TARGETING::targetService().masterProcChipTargetHandle(masterproc); + l_errl = HBOCC::loadHostDataToSRAM(masterproc, + PRDF::ALL_PROC_MEM_MASTER_CORE); + if (l_errl) + { + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "Error returned from call to HBOCC::loadHostDataToSRAM"); + } +#endif + + TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "call_host_startPRD_dram exit" ); + + // end task, returning any errorlogs to IStepDisp + return l_errl; +} + +}; diff --git a/src/usr/isteps/istep14/call_mss_memdiag.C b/src/usr/isteps/istep14/call_mss_memdiag.C new file mode 100644 index 000000000..c03550463 --- /dev/null +++ b/src/usr/isteps/istep14/call_mss_memdiag.C @@ -0,0 +1,73 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/isteps/istep14/call_mss_memdiag.C $ */ +/* */ +/* OpenPOWER HostBoot Project */ +/* */ +/* Contributors Listed Below - COPYRIGHT 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 */ +#include +#include +#include +#include + +using namespace ISTEP; +using namespace ISTEP_ERROR; +using namespace ERRORLOG; + +namespace ISTEP_14 +{ +void* call_mss_memdiag (void *io_pArgs) +{ + errlHndl_t l_errl = NULL; + + IStepError l_stepError; + + TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "call_mss_extent_setup entry" ); + + //@TODO RTC:133831 call the HWP + //FAPI_INVOKE_HWP( l_errl, mss_extent_setup ); + + if ( l_errl ) + { + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "ERROR : failed executing mss_extent_setup returning error" ); + + // Create IStep error log and cross reference to error that occurred + l_stepError.addErrorDetails( l_errl ); + + // Commit Error + errlCommit( l_errl, HWPF_COMP_ID ); + } + else + { + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "SUCCESS : mss_extent_setup completed ok" ); + } + + + TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "call_mss_extent_setup exit" ); + + // end task, returning any errorlogs to IStepDisp + return l_stepError.getErrorHandle(); +} + +}; diff --git a/src/usr/isteps/istep14/call_mss_power_cleanup.C b/src/usr/isteps/istep14/call_mss_power_cleanup.C new file mode 100644 index 000000000..c0e517983 --- /dev/null +++ b/src/usr/isteps/istep14/call_mss_power_cleanup.C @@ -0,0 +1,143 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/isteps/istep14/call_mss_power_cleanup.C $ */ +/* */ +/* OpenPOWER HostBoot Project */ +/* */ +/* Contributors Listed Below - COPYRIGHT 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 */ +#include +#include +#include + +#include +#include + +// targeting support +#include +#include +#include + + +using namespace ISTEP; +using namespace ISTEP_ERROR; +using namespace ERRORLOG; +using namespace TARGETING; + +namespace ISTEP_14 +{ +void* call_mss_power_cleanup (void *io_pArgs) +{ + errlHndl_t l_err = NULL; + IStepError l_stepError; + + TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "call_mss_power_cleanup entry" ); + + // Get a list of all present Centaurs + TargetHandleList l_presCentaurs; + getChipResources(l_presCentaurs, TYPE_MEMBUF, UTIL_FILTER_PRESENT); + + // For each present Centaur + for (TargetHandleList::const_iterator + l_cenIter = l_presCentaurs.begin(); + l_cenIter != l_presCentaurs.end(); + ++l_cenIter) + { + // Make a local copy of the target for ease of use + TARGETING::Target * l_pCentaur = *l_cenIter; + // Retrieve HUID of current Centaur + TARGETING::ATTR_HUID_type l_currCentaurHuid = + TARGETING::get_huid(l_pCentaur); + + // Find all present MBAs associated with this Centaur + TARGETING::TargetHandleList l_presMbas; + getChildAffinityTargetsByState(l_presMbas, + l_pCentaur, + CLASS_UNIT, + TYPE_MBA, + UTIL_FILTER_PRESENT); + + // If not at least two MBAs found + if (l_presMbas.size() < 2) + { + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "Not enough MBAs found for Centaur target HUID %.8X, " + "skipping this Centaur.", + l_currCentaurHuid); + continue; + } + + // Cache current MBA HUIDs for tracing + TARGETING::ATTR_HUID_type l_currMBA0Huid = + TARGETING::get_huid(l_presMbas[0]); + TARGETING::ATTR_HUID_type l_currMBA1Huid = + TARGETING::get_huid(l_presMbas[1]); + + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "Running mss_power_cleanup HWP on " + "Centaur HUID %.8X, MBA0 HUID %.8X, " + "MBA1 HUID %.8X, ", l_currCentaurHuid, + l_currMBA0Huid, l_currMBA1Huid); + + // Create FAPI Targets. + // @TODO RTC:133831 + /*const fapi::Target l_fapiCentaurTarget(TARGET_TYPE_MEMBUF_CHIP, + (const_cast(l_pCentaur))); + const fapi::Target l_fapiMba0Target(TARGET_TYPE_MBA_CHIPLET, + (const_cast(l_presMbas[0]))); + const fapi::Target l_fapiMba1Target(TARGET_TYPE_MBA_CHIPLET, + (const_cast(l_presMbas[1]))); + + // Call the HWP with each fapi::Target + FAPI_INVOKE_HWP(l_err, mss_power_cleanup, l_fapiCentaurTarget, + l_fapiMba0Target, l_fapiMba1Target); + */ + if (l_err) + { + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "mss_power_cleanup HWP failed to perform" + " cleanup on centaur: 0x%.8X HWP_ERROR: 0x%.8X", + l_currCentaurHuid,l_err->reasonCode()); + // Capture the target data in the error log + ErrlUserDetailsTarget(l_pCentaur).addToLog(l_err); + // Create IStep error log and cross reference error that occurred + l_stepError.addErrorDetails(l_err); + // Commit error + errlCommit(l_err, HWPF_COMP_ID); + } + else + { + // Success + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "Successfully ran mss_power_cleanup HWP on " + "Centaur HUID %.8X, MBA0 HUID %.8X, " + "MBA1 HUID %.8X, ", l_currCentaurHuid, + l_currMBA0Huid, l_currMBA1Huid); + } + } + + TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "call_mss_power_cleanup exit" ); + + // end task, returning any errorlogs to IStepDisp + return l_stepError.getErrorHandle(); +} + +}; diff --git a/src/usr/isteps/istep14/call_mss_thermal_init.C b/src/usr/isteps/istep14/call_mss_thermal_init.C new file mode 100644 index 000000000..51633ba84 --- /dev/null +++ b/src/usr/isteps/istep14/call_mss_thermal_init.C @@ -0,0 +1,174 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/isteps/istep14/call_mss_thermal_init.C $ */ +/* */ +/* OpenPOWER HostBoot Project */ +/* */ +/* Contributors Listed Below - COPYRIGHT 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 */ +#include +#include +#include + +#include +#include + +// targeting support +#include +#include +#include + + +using namespace ISTEP; +using namespace ISTEP_ERROR; +using namespace ERRORLOG; +using namespace TARGETING; + +namespace ISTEP_14 +{ +void* call_mss_thermal_init (void *io_pArgs) +{ + errlHndl_t l_errl = NULL; + IStepError l_StepError; + + do + { + // Get all Centaur targets + TARGETING::TargetHandleList l_memBufTargetList; + getAllChips(l_memBufTargetList, TYPE_MEMBUF ); + + // -------------------------------------------------------------------- + // run mss_thermal_init on all Centaurs + // -------------------------------------------------------------------- + for (TargetHandleList::const_iterator + l_iter = l_memBufTargetList.begin(); + l_iter != l_memBufTargetList.end(); + ++l_iter) + { + // make a local copy of the target for ease of use + const TARGETING::Target* l_pCentaur = *l_iter; + + // write HUID of target + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "target HUID %.8X", TARGETING::get_huid(l_pCentaur)); + + //@TODO RTC:133831 cast OUR type of target to a FAPI type of target. + //const fapi::Target l_fapi_pCentaur( TARGET_TYPE_MEMBUF_CHIP, + // (const_cast(l_pCentaur)) ); + + // Current run on target + //TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + // "Running call_mss_thermal_init HWP on " + // "target HUID %.8X", TARGETING::get_huid(l_pCentaur)); + + + // call the HWP with each fapi::Target + //FAPI_INVOKE_HWP( l_errl, mss_thermal_init, l_fapi_pCentaur ); + + if ( l_errl ) + { + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "ERROR 0x%.8X: mss_thermal_init HWP returns error", + l_errl->reasonCode()); + + // capture the target data in the elog + ErrlUserDetailsTarget(l_pCentaur).addToLog( l_errl ); + + // Create IStep error log and cross reference + // to error that occurred + l_StepError.addErrorDetails( l_errl ); + + // Commit Error + errlCommit( l_errl, HWPF_COMP_ID ); + + break; + } + else + { + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "SUCCESS : mss_thermal_init HWP( )" ); + } + } + if (l_errl) + { + break; + } + + // Run proc throttle sync + // Get all functional proc chip targets + TARGETING::TargetHandleList l_cpuTargetList; + getAllChips(l_cpuTargetList, TYPE_PROC); + + for (TARGETING::TargetHandleList::const_iterator + l_cpuIter = l_cpuTargetList.begin(); + l_cpuIter != l_cpuTargetList.end(); + ++l_cpuIter) + { + const TARGETING::Target* l_pTarget = *l_cpuIter; + + //@TODO RTC:133831 + //fapi::Target l_fapiproc_target( TARGET_TYPE_PROC_CHIP, + // (const_cast(l_pTarget))); + + //TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + // "Running proc_throttle_sync HWP on " + // "target HUID %.8X", TARGETING::get_huid(l_pTarget)); + + // Call proc_throttle_sync + //FAPI_INVOKE_HWP( l_errl, proc_throttle_sync, l_fapiproc_target ); + + if (l_errl) + { + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "ERROR 0x%.8X: proc_throttle_sync HWP returns error", + l_errl->reasonCode()); + + // Capture the target data in the elog + ErrlUserDetailsTarget(l_pTarget).addToLog(l_errl); + + // Create IStep error log and cross reference + // to error that occurred + l_StepError.addErrorDetails( l_errl ); + + // Commit Error + errlCommit( l_errl, HWPF_COMP_ID ); + + break; + } + else + { + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "SUCCESS : proc_throttle_sync HWP( )" ); + } + } + + } while (0); + + + if(l_StepError.isNull()) + { + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "SUCCESS : call_mss_thermal_init" ); + } + + // end task, returning any errorlogs to IStepDisp + return l_StepError.getErrorHandle(); +} + +}; diff --git a/src/usr/isteps/istep14/call_proc_exit_cache_contained.C b/src/usr/isteps/istep14/call_proc_exit_cache_contained.C new file mode 100644 index 000000000..0703ae0bf --- /dev/null +++ b/src/usr/isteps/istep14/call_proc_exit_cache_contained.C @@ -0,0 +1,282 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/isteps/istep14/call_proc_exit_cache_contained.C $ */ +/* */ +/* OpenPOWER HostBoot Project */ +/* */ +/* Contributors Listed Below - COPYRIGHT 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 */ +#include +#include +#include + +#include +#include +#include + +// targeting support +#include +#include +#include + +#include +#include +#include + +using namespace ISTEP; +using namespace ISTEP_ERROR; +using namespace ERRORLOG; +using namespace TARGETING; + +namespace ISTEP_14 +{ +void* call_proc_exit_cache_contained (void *io_pArgs) +{ + + IStepError l_stepError; + + TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "call_proc_exit_cache_contained entry" ); + + // @@@@@ CUSTOM BLOCK: @@@@@ + // figure out what targets we need + // customize any other inputs + // set up loops to go through all targets (if parallel, spin off a task) + // extend the memory space from 8MEG to 32Meg + + //if mirrored then check that there is going to be memory at that location. + //For sapphire with mirrored location flipped and at zero, + //this also insures there is memory available to 'exit_cache' to. + //Also set ATTR_PAYLOAD_BASE here. + TARGETING::Target* l_sys = NULL; + targetService().getTopLevelTarget(l_sys); + assert( l_sys != NULL ); + + //@TODO RTC:133831 Commenting out due to missing attributes +#if 0 + errlHndl_t l_errl = NULL; + uint8_t l_mpipl = l_sys->getAttr(); + ATTR_PAYLOAD_BASE_type payloadBase = 0; + + if(!l_mpipl) + { + ATTR_PAYLOAD_IN_MIRROR_MEM_type l_mirrored = false; + + // In Sapphire mode disable mirroring for now - @todo-RTC:108314 + // and force payload to zero + if(!is_sapphire_load()) + { + payloadBase = l_sys->getAttr(); + l_mirrored = l_sys->getAttr(); + } + + if(l_mirrored) + { + ATTR_MIRROR_BASE_ADDRESS_type l_mirrorBaseAddr = 0; + if(!is_sapphire_load()) + { + uint64_t hrmor_base = + l_sys->getAttr(); + + l_mirrorBaseAddr = + l_sys->getAttr(); + + // For single-node systems, the non-master processors can be + // in a different logical (powerbus) node. + // Need to migrate task to master. + task_affinity_pin(); + task_affinity_migrate_to_master(); + uint64_t this_node = INTR::PIR_t(task_getcpuid()).nodeId; + task_affinity_unpin(); + + l_mirrorBaseAddr += (this_node * hrmor_base)/2; + + } + + // Verify there is memory at the mirrored location + bool mirroredMemExists = false; + TARGETING::TargetHandleList l_procList; + getAllChips(l_procList, TYPE_PROC); + + for (TargetHandleList::const_iterator proc = l_procList.begin(); + proc != l_procList.end() && !mirroredMemExists; + ++proc) + { + uint64_t mirrorBase[4]; + uint64_t mirrorSize[4]; + bool rc = (*proc)-> + tryGetAttr(mirrorBase); + if(false == rc) + { + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "Failed to get ATTR_PROC_MIRROR_BASES"); + assert(0); + } + + rc = (*proc)-> + tryGetAttr(mirrorSize); + if(false == rc) + { + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "Failed to get ATTR_PROC_MIRROR_SIZES"); + assert(0); + } + + for(uint64_t i = 0; i < 4 && !mirroredMemExists; ++i) + { + if(mirrorSize[i] != 0 && + l_mirrorBaseAddr >= mirrorBase[i] && + l_mirrorBaseAddr < (mirrorBase[i] + mirrorSize[i])) + { + mirroredMemExists = true; + } + } + } + + if (mirroredMemExists) + { + // ATTR_PAYLOAD_BASE is in MB + payloadBase += l_mirrorBaseAddr/MEGABYTE; + } + else + { + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, ERR_MRK + "Request to load payload into mirrored memory," + " but no memory exists at address 0x%016lx", + l_mirrorBaseAddr); + + /*@ + * @errortype ERRL_SEV_CRITICAL_SYS_TERM + * @moduleid fapi::MOD_EXIT_CACHE_CONTAINED, + * @reasoncode fapi::RC_NO_MIRRORED_MEMORY, + * @userdata1 Mirrored Memory Address + * @userdata2 0 + * + * @devdesc Request given to load payload into mirrored + * memory, but no mirrored memory exists at + * that location. + */ + l_errl = new ERRORLOG::ErrlEntry + ( + ERRORLOG::ERRL_SEV_CRITICAL_SYS_TERM, + fapi::MOD_EXIT_CACHE_CONTAINED, + fapi::RC_NO_MIRRORED_MEMORY, + l_mirrorBaseAddr, + 0, + true); // callout firmware + } + } + // If we're not mirrored, payloadBase is the lowest mem_base. + // Note that if we are mirrored, finding the correct mirror + // base yields the proper payloadBase. This should also work + // for sapphire as a single (working) node will return 0 for + // bottom_mem_addr. + else { + payloadBase += get_bottom_mem_addr()/MEGABYTE; + } + } + + if(!l_errl) + { + if(!l_mpipl) + { + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "Payload base address is 0x%016lx", + payloadBase * MEGABYTE); + + l_sys->setAttr(payloadBase); + } + + //@TODO RTC:133831 call the HWP with each fapi::Target + //FAPI_INVOKE_HWP( l_errl, + // proc_exit_cache_contained + // ); + + + + if ( l_errl ) + { + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "ERROR : call_proc_exit_cache_contained, " + "errorlog PLID=0x%x", + l_errl->plid() ); + } + // no errors so extend VMM. + else + { + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "SUCCESS : call_proc_exit_cache_contained" ); + + + + // Call the function to extend VMM to 32MEG + int rc = mm_extend(); + + if (rc!=0) + { + /*@ + * @errortype + * @moduleid fapi::MOD_EXIT_CACHE_CONTAINED + * @reasoncode fapi::RC_MM_EXTEND_FAILED + * @userdata1 rc from mm_extend + * @userdata2 + * + * @devdesc Failure extending memory to 32MEG after + * exiting cache contained mode. + */ + l_errl = new ERRORLOG::ErrlEntry + (ERRORLOG::ERRL_SEV_UNRECOVERABLE, + fapi::MOD_EXIT_CACHE_CONTAINED, + fapi::RC_MM_EXTEND_FAILED, + rc, + 0); + + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "ERROR : call_proc_exit_cache_contained" + " - extendVMM, rc=0x%x", + rc ); + } + else + { + // trace out the extend VMM was successful + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "SUCCESS : call_proc_exit_cache_contained" + " - extendVMM"); + } + } + } + if ( l_errl ) + { + // Create IStep error log and cross reference to error that occurred + l_stepError.addErrorDetails( l_errl ); + + // Commit Error + errlCommit( l_errl, HWPF_COMP_ID ); + } + + TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "call_proc_exit_cache_contained exit" ); +#endif + // @@@@@ END CUSTOM BLOCK: @@@@@ + + // end task, returning any errorlogs to IStepDisp + return l_stepError.getErrorHandle(); +} + +}; diff --git a/src/usr/isteps/istep14/call_proc_htm_setup.C b/src/usr/isteps/istep14/call_proc_htm_setup.C new file mode 100644 index 000000000..5979f0c83 --- /dev/null +++ b/src/usr/isteps/istep14/call_proc_htm_setup.C @@ -0,0 +1,40 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/isteps/istep14/call_proc_htm_setup.C $ */ +/* */ +/* OpenPOWER HostBoot Project */ +/* */ +/* Contributors Listed Below - COPYRIGHT 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 */ +#include + +using namespace ERRORLOG; + +namespace ISTEP_14 +{ +void* call_proc_htm_setup (void *io_pArgs) +{ + errlHndl_t l_err = NULL; + + //@TODO RTC:33831 call p9_htm_setup.C HWP + + return l_err; +} + +}; diff --git a/src/usr/isteps/istep14/call_proc_pcie_config.C b/src/usr/isteps/istep14/call_proc_pcie_config.C new file mode 100644 index 000000000..7eb44fb6c --- /dev/null +++ b/src/usr/isteps/istep14/call_proc_pcie_config.C @@ -0,0 +1,106 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/isteps/istep14/call_proc_pcie_config.C $ */ +/* */ +/* OpenPOWER HostBoot Project */ +/* */ +/* Contributors Listed Below - COPYRIGHT 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 */ +#include +#include +#include + +#include +#include + +// targeting support +#include +#include +#include + + +using namespace ISTEP; +using namespace ISTEP_ERROR; +using namespace ERRORLOG; +using namespace TARGETING; + +namespace ISTEP_14 +{ +void* call_proc_pcie_config (void *io_pArgs) +{ + errlHndl_t l_errl = NULL; + + IStepError l_stepError; + + TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "call_proc_pcie_config entry" ); + + TARGETING::TargetHandleList l_procTargetList; + getAllChips(l_procTargetList, TYPE_PROC ); + + for ( TargetHandleList::const_iterator + l_iter = l_procTargetList.begin(); + l_iter != l_procTargetList.end(); + ++l_iter ) + { + const TARGETING::Target* l_pTarget = *l_iter; + + // write HUID of target + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "target HUID %.8X", TARGETING::get_huid(l_pTarget)); + + //@TODO RTC:133831 + // build a FAPI type of target. + //const fapi::Target l_fapi_pTarget( TARGET_TYPE_PROC_CHIP, + // (const_cast(l_pTarget)) ); + + // call the HWP with each fapi::Target + //FAPI_INVOKE_HWP( l_errl, proc_pcie_config, l_fapi_pTarget ); + + if ( l_errl ) + { + // capture the target data in the elog + ErrlUserDetailsTarget(l_pTarget).addToLog( l_errl ); + + // Create IStep error log and cross reference to error that occurred + l_stepError.addErrorDetails( l_errl ); + + // Commit Error + errlCommit( l_errl, HWPF_COMP_ID ); + + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "ERROR : proc_pcie_config" ); + + break; + } + else + { + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "SUCCESS : proc_pcie_config" ); + } + } + + TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "call_proc_pcie_config exit" ); + + // end task, returning any errorlogs to IStepDisp + return l_stepError.getErrorHandle(); +} + +}; diff --git a/src/usr/isteps/istep14/call_proc_setup_bars.C b/src/usr/isteps/istep14/call_proc_setup_bars.C new file mode 100644 index 000000000..536cd5da4 --- /dev/null +++ b/src/usr/isteps/istep14/call_proc_setup_bars.C @@ -0,0 +1,225 @@ +/* IBM_PROLOG_BEGIN_TAG */ +/* This is an automatically generated prolog. */ +/* */ +/* $Source: src/usr/isteps/istep14/call_proc_setup_bars.C $ */ +/* */ +/* OpenPOWER HostBoot Project */ +/* */ +/* Contributors Listed Below - COPYRIGHT 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 */ +#include +#include +#include + +using namespace ISTEP_ERROR; +using namespace ERRORLOG; + +namespace ISTEP_14 +{ +void* call_proc_setup_bars (void *io_pArgs) +{ + IStepError l_stepError; +/* + @TODO RTC:133831 + errlHndl_t l_errl = NULL; + + TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "call_proc_setup_bars entry" ); + + + // @@@@@ CUSTOM BLOCK: @@@@@ + // Get all Centaur targets + TARGETING::TargetHandleList l_cpuTargetList; + getAllChips(l_cpuTargetList, TYPE_PROC ); + + // -------------------------------------------------------------------- + // run mss_setup_bars on all CPUs. + // -------------------------------------------------------------------- + for (TargetHandleList::const_iterator + l_cpu_iter = l_cpuTargetList.begin(); + l_cpu_iter != l_cpuTargetList.end(); + ++l_cpu_iter) + { + // make a local copy of the target for ease of use + const TARGETING::Target* l_pCpuTarget = *l_cpu_iter; + + // write HUID of target + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "mss_setup_bars: proc " + "target HUID %.8X", TARGETING::get_huid(l_pCpuTarget)); + + // cast OUR type of target to a FAPI type of target. + const fapi::Target l_fapi_pCpuTarget( TARGET_TYPE_PROC_CHIP, + (const_cast (l_pCpuTarget)) ); + + TARGETING::TargetHandleList l_membufsList; + getChildAffinityTargets(l_membufsList, l_pCpuTarget, + CLASS_CHIP, TYPE_MEMBUF); + std::vector l_associated_centaurs; + + for (TargetHandleList::const_iterator + l_membuf_iter = l_membufsList.begin(); + l_membuf_iter != l_membufsList.end(); + ++l_membuf_iter) + { + // make a local copy of the target for ease of use + const TARGETING::Target* l_pTarget = *l_membuf_iter; + + // cast OUR type of target to a FAPI type of target. + const fapi::Target l_fapi_centaur_target + (fapi::TARGET_TYPE_MEMBUF_CHIP, + (const_cast(l_pTarget)) ); + + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "target HUID %.8X", TARGETING::get_huid(l_pTarget)); + + l_associated_centaurs.push_back(l_fapi_centaur_target); + } + + // call the HWP with each fapi::Target + FAPI_INVOKE_HWP(l_errl, + mss_setup_bars, + l_fapi_pCpuTarget, l_associated_centaurs ); + if ( l_errl ) + { + // capture the target data in the elog + ErrlUserDetailsTarget(l_pCpuTarget).addToLog( l_errl ); + + // Create IStep error log and cross reference to error that occurred + l_stepError.addErrorDetails( l_errl ); + + // Commit Error + errlCommit( l_errl, HWPF_COMP_ID ); + + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "ERROR : mss_setup_bars" ); + // break and return with error + break; + } + else + { + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "SUCCESS : mss_setup-bars" ); + } + } // endfor + + + if ( l_stepError.isNull() ) + { + //---------------------------------------------------------------------- + // run proc_setup_bars on all CPUs + //---------------------------------------------------------------------- + std::vector l_proc_chips; + + TargetPairs_t l_abusLinks; + l_errl = PbusLinkSvc::getTheInstance().getPbusConnections( + l_abusLinks, TYPE_ABUS, false ); + + for (TargetHandleList::const_iterator + l_cpu_iter = l_cpuTargetList.begin(); + l_cpu_iter != l_cpuTargetList.end() && !l_errl; + ++l_cpu_iter) + { + // make a local copy of the target for ease of use + const TARGETING::Target* l_pCpuTarget = *l_cpu_iter; + + // cast OUR type of target to a FAPI type of target. + const fapi::Target l_fapi_pCpuTarget( TARGET_TYPE_PROC_CHIP, + (const_cast (l_pCpuTarget)) ); + + proc_setup_bars_proc_chip l_proc_chip ; + l_proc_chip.this_chip = l_fapi_pCpuTarget; + l_proc_chip.process_f0 = true; + l_proc_chip.process_f1 = true; + + TARGETING::TargetHandleList l_abuses; + getChildChiplets( l_abuses, l_pCpuTarget, TYPE_ABUS ); + + for (TargetHandleList::const_iterator + l_abus_iter = l_abuses.begin(); + l_abus_iter != l_abuses.end(); + ++l_abus_iter) + { + const TARGETING::Target* l_target = *l_abus_iter; + uint8_t l_srcID = l_target->getAttr(); + TargetPairs_t::iterator l_itr = l_abusLinks.find(l_target); + if ( l_itr == l_abusLinks.end() ) + { + continue; + } + + const TARGETING::Target *l_pParent = NULL; + l_pParent = getParentChip( + (const_cast(l_itr->second))); + fapi::Target l_fapiproc_parent( TARGET_TYPE_PROC_CHIP, + (void *)l_pParent ); + + switch (l_srcID) + { + case 0: l_proc_chip.a0_chip = l_fapiproc_parent; break; + case 1: l_proc_chip.a1_chip = l_fapiproc_parent; break; + case 2: l_proc_chip.a2_chip = l_fapiproc_parent; break; + default: break; + } + } + + l_proc_chips.push_back( l_proc_chip ); + + } // endfor + + if (!l_errl) + { + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "call proc_setup_bars"); + + // call the HWP with each fapi::Target + FAPI_INVOKE_HWP( l_errl, proc_setup_bars, l_proc_chips, true ); + + if ( l_errl ) + { + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "ERROR : proc_setup_bars" ); + } + else + { + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "SUCCESS : proc_setup_bars" ); + } + } + } // end if !l_errl + + // @@@@@ END CUSTOM BLOCK: @@@@@ + + if ( l_errl ) + { + + // Create IStep error log and cross reference to error that occurred + l_stepError.addErrorDetails( l_errl); + + // Commit Error + errlCommit( l_errl, HWPF_COMP_ID ); + } + + TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "call_proc_setup_bars exit" ); +*/ + // end task, returning any errorlogs to IStepDisp + return l_stepError.getErrorHandle(); +} + +}; diff --git a/src/usr/isteps/istep14/makefile b/src/usr/isteps/istep14/makefile new file mode 100644 index 000000000..bfeae4023 --- /dev/null +++ b/src/usr/isteps/istep14/makefile @@ -0,0 +1,38 @@ +# IBM_PROLOG_BEGIN_TAG +# This is an automatically generated prolog. +# +# $Source: src/usr/isteps/istep14/makefile $ +# +# OpenPOWER HostBoot Project +# +# Contributors Listed Below - COPYRIGHT 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 +ROOTPATH = ../../../.. +MODULE = istep14 + +OBJS += call_host_startprd_dram.o +OBJS += call_mss_memdiag.o +OBJS += call_mss_thermal_init.o +OBJS += call_proc_pcie_config.o +OBJS += call_mss_power_cleanup.o +OBJS += call_proc_setup_bars.o +OBJS += call_proc_htm_setup.o +OBJS += call_proc_exit_cache_contained.o +OBJS += call_host_mpipl_service.o + +include ${ROOTPATH}/config.mk diff --git a/src/usr/isteps/makefile b/src/usr/isteps/makefile index c52bda4a0..66705fd8b 100644 --- a/src/usr/isteps/makefile +++ b/src/usr/isteps/makefile @@ -33,6 +33,7 @@ SUBDIRS+=istep10.d SUBDIRS+=istep11.d SUBDIRS+=istep12.d SUBDIRS+=istep13.d +SUBDIRS+=istep14.d OBJS += hwpisteperror.o OBJS += hwpistepud.o -- cgit v1.2.1