summaryrefslogtreecommitdiffstats
path: root/src/usr/isteps/istep13/call_mss_draminit.C
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/isteps/istep13/call_mss_draminit.C')
-rw-r--r--src/usr/isteps/istep13/call_mss_draminit.C285
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
};
OpenPOWER on IntegriCloud