diff options
Diffstat (limited to 'src/usr/isteps/istep13/call_mss_draminit.C')
-rw-r--r-- | src/usr/isteps/istep13/call_mss_draminit.C | 285 |
1 files changed, 201 insertions, 84 deletions
diff --git a/src/usr/isteps/istep13/call_mss_draminit.C b/src/usr/isteps/istep13/call_mss_draminit.C index 915bc992b..012d3111a 100644 --- a/src/usr/isteps/istep13/call_mss_draminit.C +++ b/src/usr/isteps/istep13/call_mss_draminit.C @@ -23,7 +23,7 @@ /* */ /* IBM_PROLOG_END_TAG */ -//Error handling and tracing +// Error Handling and Tracing Support #include <errl/errlentry.H> #include <errl/errlmanager.H> #include <errl/errludtarget.H> @@ -32,12 +32,15 @@ #include <initservice/initserviceif.H> #include <plat_trace.H> -//Istep 13 framework +// Generated files +#include <config.h> + +// Istep 13 framework #include <istepHelperFuncs.H> #include "istep13consts.H" #include "platform_vddr.H" -// targeting support +// Targeting support #include <targeting/common/commontargeting.H> #include <targeting/common/util.H> #include <targeting/common/utilFilter.H> @@ -47,14 +50,21 @@ //From Import Directory (EKB Repository) #include <fapi2.H> -#include <p9_mss_draminit.H> -#include <p9c_mss_draminit.H> +#ifndef CONFIG_AXONE + #include <p9_mss_draminit.H> + #include <p9c_mss_draminit.H> +#else +#include <chipids.H> + #include <exp_draminit.H> + #include <gem_draminit.H> +#endif -#ifdef CONFIG_NVDIMM // NVDIMM support +#ifdef CONFIG_NVDIMM #include <isteps/nvdimm/nvdimm.H> #endif + using namespace ERRORLOG; using namespace ISTEP; using namespace ISTEP_ERROR; @@ -62,8 +72,49 @@ using namespace TARGETING; namespace ISTEP_13 { +// Declare local functions +void nimbus_mss_draminit(IStepError & io_istepError); +void cumulus_mss_draminit(IStepError & io_istepError); +void axone_mss_draminit(IStepError & io_istepError); +void mss_post_draminit( IStepError & io_stepError ); -void mss_post_draminit( IStepError & io_stepError ) +void* call_mss_draminit (void *io_pArgs) +{ + IStepError l_stepError; + + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_draminit entry" ); + auto l_procModel = TARGETING::targetService().getProcessorModel(); + + switch (l_procModel) + { + case TARGETING::MODEL_CUMULUS: + cumulus_mss_draminit(l_stepError); + break; + case TARGETING::MODEL_AXONE: + axone_mss_draminit(l_stepError); + break; + case TARGETING::MODEL_NIMBUS: + nimbus_mss_draminit(l_stepError); + break; + default: + assert(0, "call_mss_draminit: Unsupported model type 0x%04X", + l_procModel); + break; + } + + // call POST_DRAM_INIT function, if nothing failed above + if( INITSERVICE::spBaseServicesEnabled() && + (l_stepError.getErrorHandle() == nullptr) ) + { + mss_post_draminit(l_stepError); + } + + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_draminit exit" ); + + return l_stepError.getErrorHandle(); +} + +void mss_post_draminit( IStepError & io_stepError ) { errlHndl_t l_err = NULL; bool rerun_vddr = false; @@ -144,14 +195,11 @@ void mss_post_draminit( IStepError & io_stepError ) return; } -void* call_mss_draminit (void *io_pArgs) +#ifndef CONFIG_AXONE +void nimbus_mss_draminit(IStepError & io_istepError) { errlHndl_t l_err = NULL; - IStepError l_stepError; - - TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_draminit entry" ); - // Get all MCBIST targets TARGETING::TargetHandleList l_mcbistTargetList; getAllChiplets(l_mcbistTargetList, TYPE_MCBIST); @@ -171,6 +219,10 @@ void* call_mss_draminit (void *io_pArgs) TARGETING::TargetHandleList l_dimmTargetList; getChildAffinityTargets(l_dimmTargetList, l_mcbist_target, CLASS_NA, TYPE_DIMM); + // Generate valid encryption keys + NVDIMM::nvdimm_gen_keys(); + + // Walk the dimm list and init nvdimms for (const auto & l_dimm : l_dimmTargetList) { if (isNVDIMM(l_dimm)) @@ -178,7 +230,12 @@ void* call_mss_draminit (void *io_pArgs) NVDIMM::nvdimm_init(l_dimm); } } + // After nvdimm init + // - nvdimm controller initialized + // - nvdimm encryption unlocked + // - nvdimms disarmed #endif + FAPI_INVOKE_HWP(l_err, p9_mss_draminit, l_fapi_mcbist_target); if (l_err) @@ -191,12 +248,12 @@ void* call_mss_draminit (void *io_pArgs) ErrlUserDetailsTarget(l_mcbist_target).addToLog(l_err); // Create IStep error log and cross reference to error that occurred - l_stepError.addErrorDetails( l_err ); - - break; + io_istepError.addErrorDetails( l_err ); // Commit Error errlCommit( l_err, HWPF_COMP_ID ); + + break; } else { @@ -206,85 +263,145 @@ void* call_mss_draminit (void *io_pArgs) } } // endfor mcbist's +} +void cumulus_mss_draminit(IStepError & io_istepError) +{ + errlHndl_t l_err = NULL; + // Get all Centaur targets + TARGETING::TargetHandleList l_membufTargetList; + getAllChips(l_membufTargetList, TYPE_MEMBUF); - if(l_stepError.getErrorHandle() == NULL) + for (const auto & l_membufTarget : l_membufTargetList ) { - // Get all Centaur targets - TARGETING::TargetHandleList l_membufTargetList; - getAllChips(l_membufTargetList, TYPE_MEMBUF); - - for (TargetHandleList::const_iterator - l_membuf_iter = l_membufTargetList.begin(); - l_membuf_iter != l_membufTargetList.end(); - ++l_membuf_iter) + TARGETING::TargetHandleList l_mbaTargetList; + getChildChiplets(l_mbaTargetList, l_membufTarget, TYPE_MBA); + + for (const auto & l_mbaTarget : l_mbaTargetList ) { - // make a local copy of the target for ease of use - TARGETING::Target* l_pCentaur = *l_membuf_iter; - - TARGETING::TargetHandleList l_mbaTargetList; - getChildChiplets(l_mbaTargetList, - l_pCentaur, - TYPE_MBA); - - for (TargetHandleList::const_iterator - l_mba_iter = l_mbaTargetList.begin(); - l_mba_iter != l_mbaTargetList.end(); - ++l_mba_iter) - { - // Make a local copy of the target for ease of use - TARGETING::Target* l_mbaTarget = *l_mba_iter; - - // Dump current run on target - TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - "Running p9c_mss_draminit HWP on " - "target HUID %.8X", TARGETING::get_huid(l_mbaTarget)); - - // call the HWP with each target - fapi2::Target <fapi2::TARGET_TYPE_MBA_CHIPLET> l_fapi_mba_target(l_mbaTarget); - - FAPI_INVOKE_HWP(l_err, p9c_mss_draminit, l_fapi_mba_target); - - // process return code. - if ( l_err ) - { - TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, - "ERROR 0x%.8X : p9c_mss_draminit HWP returns error", - l_err->reasonCode()); - - // capture the target data in the elog - ErrlUserDetailsTarget(l_mbaTarget).addToLog(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 ); - - break; - } - else - { - TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, - "SUCCESS running p9c_mss_draminit HWP on " - "target HUID %.8X", TARGETING::get_huid(l_mbaTarget)); - } - - } - } + // Dump current run on target + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "Running p9c_mss_draminit HWP on " + "target HUID %.8X", TARGETING::get_huid(l_mbaTarget)); - } + // call the HWP with each target + fapi2::Target <fapi2::TARGET_TYPE_MBA_CHIPLET> l_fapi_mba_target(l_mbaTarget); + + FAPI_INVOKE_HWP(l_err, p9c_mss_draminit, l_fapi_mba_target); + + // process return code. + if ( l_err ) + { + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "ERROR 0x%.8X : p9c_mss_draminit HWP returns error", + l_err->reasonCode()); + + // capture the target data in the elog + ErrlUserDetailsTarget(l_mbaTarget).addToLog(l_err); + + // Create IStep error log and cross reference to error that occurred + io_istepError.addErrorDetails( l_err ); + + // Commit Error + errlCommit( l_err, HWPF_COMP_ID ); - // call POST_DRAM_INIT function - if(INITSERVICE::spBaseServicesEnabled()) + break; + } + else + { + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "SUCCESS running p9c_mss_draminit HWP on " + "target HUID %.8X", TARGETING::get_huid(l_mbaTarget)); + } + } // end MBA loop + } // end MEMBUF loop +} + +#else +void nimbus_mss_draminit(IStepError & io_istepError) +{ + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "Error: Trying to call 'p9_mss_draminit' but Nimbus code is not compiled in"); + assert(0, "Calling wrong Model's HWPs"); +} + +void cumulus_mss_draminit(IStepError & io_istepError) +{ + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "Error: Trying to call 'p9c_mss_draminit' but Cumulus code is not compiled in"); + assert(0, "Calling wrong Model's HWPs"); +} +#endif + +#ifdef CONFIG_AXONE +void axone_mss_draminit(IStepError & io_istepError) +{ + errlHndl_t l_err = NULL; + + // Get all OCMB targets + TARGETING::TargetHandleList l_ocmbTargetList; + getAllChips(l_ocmbTargetList, TYPE_OCMB_CHIP); + + bool isGeminiChip = false; + for ( const auto & l_ocmb : l_ocmbTargetList ) { - mss_post_draminit(l_stepError); - } + fapi2::Target <fapi2::TARGET_TYPE_OCMB_CHIP> l_fapi_ocmb_target(l_ocmb); - TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_draminit exit" ); + // check EXPLORER first as this is most likely the configuration + uint32_t chipId = l_ocmb->getAttr< TARGETING::ATTR_CHIP_ID>(); + if (chipId == POWER_CHIPID::EXPLORER_16) + { + isGeminiChip = false; + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "Running exp_draminit HWP on target HUID 0x%.8X", + TARGETING::get_huid(l_ocmb) ); + FAPI_INVOKE_HWP(l_err, exp_draminit, l_fapi_ocmb_target); + } + else + { + isGeminiChip = true; + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "Running gem_draminit HWP on target HUID 0x%.8X, chipId 0x%.4X", + TARGETING::get_huid(l_ocmb), chipId ); + FAPI_INVOKE_HWP(l_err, gem_draminit, l_fapi_ocmb_target); + } - return l_stepError.getErrorHandle(); + // process return code. + if ( l_err ) + { + TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, + "ERROR 0x%.8X : %s_draminit HWP returned error", + l_err->reasonCode(), isGeminiChip?"gem":"exp"); + + // capture the target data in the elog + ErrlUserDetailsTarget(l_ocmb).addToLog(l_err); + + // Create IStep error log and cross reference to error that occurred + io_istepError.addErrorDetails( l_err ); + + // Commit Error + errlCommit( l_err, HWPF_COMP_ID ); + + break; + } + else + { + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "SUCCESS running %s_draminit HWP on target HUID 0x%.8X", + isGeminiChip?"gem":"exp", TARGETING::get_huid(l_ocmb) ); + } + } // end of OCMB loop +} + +#else + +void axone_mss_draminit(IStepError & io_istepError) +{ + TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, + "Error: Trying to call 'exp_draminit' or 'gem_draminit' but Axone code is not compiled in"); + assert(0, "Calling wrong Model's HWPs"); } +#endif }; |