summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPrachi Gupta <pragupta@us.ibm.com>2015-10-14 13:23:26 -0500
committerPatrick Williams <iawillia@us.ibm.com>2015-12-11 15:30:26 -0600
commita4ccd3d722669446c136632b6b501c0748ca3be3 (patch)
tree8721885a550276781b44cf52f896d468995293bd
parent3187da27c464de6422ecb1bc12a085fc5b31f610 (diff)
downloadtalos-hostboot-a4ccd3d722669446c136632b6b501c0748ca3be3.tar.gz
talos-hostboot-a4ccd3d722669446c136632b6b501c0748ca3be3.zip
P9 Isteps: Created directory structure for istep 6/7 wrappers
Change-Id: I8ac216444270b1ea5a2fd550f4e1ea8861de7c4d RTC:137652 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/21458 Tested-by: Jenkins Server Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
-rwxr-xr-xsrc/build/tools/listdeps.pl14
-rw-r--r--src/include/usr/hwas/hostbootIstep.H137
-rw-r--r--src/include/usr/isteps/hwpisteperror.H (renamed from src/include/usr/hwpf/hwp/hwpisteperror.H)2
-rw-r--r--src/include/usr/isteps/hwpistepud.H (renamed from src/include/usr/hwpf/hwp/hwpistepud.H)6
-rw-r--r--src/include/usr/isteps/istep06list.H155
-rw-r--r--src/include/usr/isteps/istep07list.H88
-rw-r--r--src/include/usr/isteps/istep12list.H1
-rw-r--r--src/makefile3
-rw-r--r--src/usr/hwas/makefile1
-rw-r--r--src/usr/hwpf/hwp/activate_powerbus/activate_powerbus.C2
-rw-r--r--src/usr/hwpf/hwp/build_winkle_images/build_winkle_images.C4
-rw-r--r--src/usr/hwpf/hwp/core_activate/core_activate.C2
-rw-r--r--src/usr/hwpf/hwp/dmi_training/dmi_training.C2
-rw-r--r--src/usr/hwpf/hwp/dram_initialization/dram_initialization.C2
-rw-r--r--src/usr/hwpf/hwp/dram_training/dram_training.C15
-rw-r--r--src/usr/hwpf/hwp/edi_ei_initialization/edi_ei_initialization.C2
-rw-r--r--src/usr/hwpf/hwp/establish_system_smp/establish_system_smp.C6
-rw-r--r--src/usr/hwpf/hwp/makefile8
-rw-r--r--src/usr/hwpf/hwp/mc_config/makefile14
-rw-r--r--src/usr/hwpf/hwp/mc_config/mc_config.C1703
-rw-r--r--src/usr/hwpf/hwp/mc_config/mc_config.H214
-rw-r--r--src/usr/hwpf/hwp/mc_config/mss_attr_cleanup/mss_attr_cleanup.C231
-rw-r--r--src/usr/hwpf/hwp/mc_config/mss_attr_cleanup/mss_attr_cleanup.H87
-rwxr-xr-xsrc/usr/hwpf/hwp/mc_config/mss_eff_mb_interleave/memory_mss_eff_mb_interleave.xml36
-rwxr-xr-xsrc/usr/hwpf/hwp/mc_config/mss_eff_mb_interleave/mss_eff_mb_interleave.C529
-rwxr-xr-xsrc/usr/hwpf/hwp/mc_config/mss_eff_mb_interleave/mss_eff_mb_interleave.H71
-rw-r--r--src/usr/hwpf/hwp/mc_config/mss_freq/memory_mss_freq.xml127
-rw-r--r--src/usr/hwpf/hwp/mc_config/mss_freq/mss_freq.C1025
-rw-r--r--src/usr/hwpf/hwp/mc_config/mss_freq/mss_freq.H73
-rw-r--r--src/usr/hwpf/hwp/mc_config/mss_volt/HBconfig4
-rw-r--r--src/usr/hwpf/hwp/mc_config/mss_volt/memory_mss_volt.xml121
-rw-r--r--src/usr/hwpf/hwp/mc_config/mss_volt/memory_mss_volt_avdd_offset.xml45
-rw-r--r--src/usr/hwpf/hwp/mc_config/mss_volt/memory_mss_volt_vcs_offset.xml45
-rw-r--r--src/usr/hwpf/hwp/mc_config/mss_volt/memory_mss_volt_vdd_offset.xml45
-rw-r--r--src/usr/hwpf/hwp/mc_config/mss_volt/memory_mss_volt_vddr_offset.xml103
-rw-r--r--src/usr/hwpf/hwp/mc_config/mss_volt/memory_mss_volt_vpp_offset.xml105
-rw-r--r--src/usr/hwpf/hwp/mc_config/mss_volt/mss_count_active_centaurs.C95
-rw-r--r--src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt.C514
-rw-r--r--src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt.H72
-rw-r--r--src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_avdd_offset.C129
-rw-r--r--src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_avdd_offset.H73
-rw-r--r--src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_dimm_count.C140
-rw-r--r--src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_vcs_offset.C154
-rw-r--r--src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_vcs_offset.H72
-rw-r--r--src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_vdd_offset.C134
-rw-r--r--src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_vdd_offset.H72
-rw-r--r--src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_vddr_offset.C393
-rw-r--r--src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_vddr_offset.H72
-rw-r--r--src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_vpp_offset.C407
-rw-r--r--src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_vpp_offset.H79
-rw-r--r--src/usr/hwpf/hwp/nest_chiplets/nest_chiplets.C2
-rw-r--r--src/usr/hwpf/hwp/sbe_centaur_init/sbe_centaur_init.C2
-rw-r--r--src/usr/hwpf/hwp/slave_sbe/slave_sbe.C2
-rw-r--r--src/usr/hwpf/hwp/start_payload/start_payload.C2
-rw-r--r--src/usr/hwpf/makefile16
-rw-r--r--src/usr/hwpf/test/hwpisteperrortest.H6
-rw-r--r--src/usr/initservice/istepdispatcher/istepdispatcher.C2
-rw-r--r--src/usr/isteps/hwpisteperror.C (renamed from src/usr/hwpf/hwp/hwpisteperror.C)8
-rw-r--r--src/usr/isteps/hwpistepud.C (renamed from src/usr/hwpf/hwp/hwpistepud.C)8
-rw-r--r--src/usr/isteps/istep06/istep06.C (renamed from src/usr/hwas/hostbootIstep.C)197
-rw-r--r--src/usr/isteps/istep06/makefile32
-rw-r--r--src/usr/isteps/istep07/call_mss_attr_update.C (renamed from src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_dimm_count.H)89
-rw-r--r--src/usr/isteps/istep07/call_mss_eff_config.C363
-rw-r--r--src/usr/isteps/istep07/call_mss_freq.C125
-rw-r--r--src/usr/isteps/istep07/call_mss_volt.C265
-rw-r--r--src/usr/isteps/istep07/host_collect_dimm_spd.C155
-rw-r--r--src/usr/isteps/istep07/makefile34
-rw-r--r--src/usr/isteps/istepHelperFuncs.C267
-rw-r--r--src/usr/isteps/istepHelperFuncs.H323
-rw-r--r--src/usr/isteps/makefile37
-rw-r--r--src/usr/makefile1
71 files changed, 1947 insertions, 7423 deletions
diff --git a/src/build/tools/listdeps.pl b/src/build/tools/listdeps.pl
index 34d5cda67..cc88c6843 100755
--- a/src/build/tools/listdeps.pl
+++ b/src/build/tools/listdeps.pl
@@ -166,10 +166,10 @@ elsif ( $list_all )
else
{
@istep_modules = (
- "libslave_sbe.so",
+ "libistep06.so",
+ "libistep07.so",
"libnest_chiplets.so" ,
"libedi_ei_initialization.so" ,
- "libmc_config.so" ,
"libbuild_winkle_images.so" ,
"libcore_activate.so" ,
"libstart_payload.so" ,
@@ -216,16 +216,16 @@ my $resident_modules = {
# A list of the dependent libraries in each istep.
# These must be included in the istep file as a dependency.
-my $istepFiles = {
- "libslave_sbe.so" => "istep06list.H" ,
- "libmc_config.so" => "istep07list.H" ,
+my %istepFiles = (
+ "libistep06.so" => "istep06list.H" ,
+ "libistep07.so" => "istep07list.H" ,
"libnest_chiplets.so" => "istep08list.H" ,
"libedi_ei_initialization.so" => "istep09list.H" ,
"libocc.so" => "istep15list.H" ,
"libbuild_winkle_images.so" => "istep15list.H" ,
"libcore_activate.so" => "istep16list.H" ,
"libstart_payload.so" => "istep21list.H" ,
-};
+);
# array to hold list of dependent libraries
my @Dependencies;
@@ -272,7 +272,7 @@ foreach my $module_name (@istep_modules )
# should we validate?
if( $validate_deps )
{
- validate( $module_name, $istepFiles->{$module_name} );
+ validate( $module_name, $istepFiles{$module_name} );
}
# does user want us to print the dependencies to the screen?
diff --git a/src/include/usr/hwas/hostbootIstep.H b/src/include/usr/hwas/hostbootIstep.H
deleted file mode 100644
index 4d1702d5c..000000000
--- a/src/include/usr/hwas/hostbootIstep.H
+++ /dev/null
@@ -1,137 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG */
-/* This is an automatically generated prolog. */
-/* */
-/* $Source: src/include/usr/hwas/hostbootIstep.H $ */
-/* */
-/* OpenPOWER HostBoot Project */
-/* */
-/* Contributors Listed Below - COPYRIGHT 2012,2015 */
-/* [+] International Business Machines Corp. */
-/* */
-/* */
-/* Licensed under the Apache License, Version 2.0 (the "License"); */
-/* you may not use this file except in compliance with the License. */
-/* You may obtain a copy of the License at */
-/* */
-/* http://www.apache.org/licenses/LICENSE-2.0 */
-/* */
-/* Unless required by applicable law or agreed to in writing, software */
-/* distributed under the License is distributed on an "AS IS" BASIS, */
-/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
-/* implied. See the License for the specific language governing */
-/* permissions and limitations under the License. */
-/* */
-/* IBM_PROLOG_END_TAG */
-/**
- * @file hostbootIstep.H
- *
- * @brief Defines hostboot functions that get called by the istep dispatcher
- * and call into the HWAS common interface
- */
-
-#ifndef HOSTBOOTISTEP_H_
-#define HOSTBOOTISTEP_H_
-
-namespace HWAS
-{
-/**
- * @brief host_stub empty function returning success
- *
- * stub function to be called for un-implemented host steps
- *
- * param[in,out] io_pArgs - (normally) a pointer to a TaskArgs struct,
- * or NULL.
- * return any error logs to istep
- */
-void* host_stub( void *io_pArgs );
-
-
-
-// hostboot only functions that are called by the istep dispatcher
-// and then call the HWAS common functions
-
-/**
- * @brief host_init_fsi Setup the FSI links to slave chips
- *
- * Call into the hwas platform-specific initHardware() function
- * to init the FSI hardware.
- *
- * param[in,out] io_pArgs - (normally) a pointer to a TaskArgs struct,
- * or NULL.
- * return any error logs to istep
- */
-void* host_init_fsi( void *io_pArgs );
-
-/**
- * @brief host_set_ipl_parms Build ipl parameters
- *
- * TBD
- *
- * param[in,out] io_pArgs - (normally) a pointer to a TaskArgs struct,
- * or NULL.
- * return any error logs to istep
- */
-void* host_set_ipl_parms( void *io_pArgs );
-
-/**
- * @brief host_discover_targets Builds targeting
- *
- * This routine will walk through all the targets and initialize HWAS STATE
- * to a known default value.
- *
- * Currently everything is initialized to powered off, etc.
- *
- * Call into the hwas platform-specific presenceDetect() function to
- * read the hardware information, and apply it to the target states.
- *
- * param[in,out] io_pArgs - (normally) a pointer to a TaskArgs struct,
- * or NULL.
- * return any error logs to istep
- */
-void* host_discover_targets( void *io_pArgs );
-
-/**
- * @brief host_gard Do Gard
- *
- * Collect GARD information and apply it to the target states.
- *
- * param[in,out] io_pArgs - (normally) a pointer to a TaskArgs struct,
- * or NULL.
- * return any error logs to istep
- */
-void* host_gard( void *io_pArgs );
-
-/**
- * @brief p9_revert_sbe_mcs_setup
- *
- * Clean up MCS Extent regs
- * param[in,out] - pointer to any arguments, usually NULL
- *
- * return any error logs to istep
- */
-void* call_p9_revert_sbe_mcs_setup(void *io_pArgs);
-
-/**
- * @brief host_cancontinue_clear Clear deconfigured status
- *
- * TBD
- *
- * param[in,out] io_pArgs - (normally) a pointer to a TaskArgs struct,
- * or NULL.
- * return any error logs to istep
- */
-void* host_cancontinue_clear( void *io_pArgs );
-
-/**
- * @brief host_prd_hwreconfig Hook for PRD to handle reconfigure
- *
- * TBD
- *
- * param[in,out] io_pArgs - (normally) a pointer to a TaskArgs struct,
- * or NULL.
- * return any error logs to istep
- */
-void* host_prd_hwreconfig( void *io_pArgs );
-
-} // namespace HWAS
-#endif // HOSTBOOTISTEP_H_
diff --git a/src/include/usr/hwpf/hwp/hwpisteperror.H b/src/include/usr/isteps/hwpisteperror.H
index cb06fe878..6a906e823 100644
--- a/src/include/usr/hwpf/hwp/hwpisteperror.H
+++ b/src/include/usr/isteps/hwpisteperror.H
@@ -1,7 +1,7 @@
/* IBM_PROLOG_BEGIN_TAG */
/* This is an automatically generated prolog. */
/* */
-/* $Source: src/include/usr/hwpf/hwp/hwpisteperror.H $ */
+/* $Source: src/include/usr/isteps/hwpisteperror.H $ */
/* */
/* OpenPOWER HostBoot Project */
/* */
diff --git a/src/include/usr/hwpf/hwp/hwpistepud.H b/src/include/usr/isteps/hwpistepud.H
index ad96c7e1f..444a96abf 100644
--- a/src/include/usr/hwpf/hwp/hwpistepud.H
+++ b/src/include/usr/isteps/hwpistepud.H
@@ -1,11 +1,13 @@
/* IBM_PROLOG_BEGIN_TAG */
/* This is an automatically generated prolog. */
/* */
-/* $Source: src/include/usr/hwpf/hwp/hwpistepud.H $ */
+/* $Source: src/include/usr/isteps/hwpistepud.H $ */
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* COPYRIGHT International Business Machines Corp. 2012,2014 */
+/* 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. */
diff --git a/src/include/usr/isteps/istep06list.H b/src/include/usr/isteps/istep06list.H
index d776c1f31..840ac56b1 100644
--- a/src/include/usr/isteps/istep06list.H
+++ b/src/include/usr/isteps/istep06list.H
@@ -26,31 +26,12 @@
#define __ISTEPS_ISTEP6LIST_H
/**
- * @file istep6list.H
- *
- * list of functions called by HWAS (ISTEP 6) - "named isteps"
- *
- * Please see the note in initsvcstructs.H for description of
- * the ISTEPNAME macro.
- *
- */
-
-#include <initservice/initsvcstructs.H>
-#include <initservice/initsvcreasoncodes.H>
-#include <hwas/common/hwas.H>
-#include <hwas/hostbootIstep.H>
-#include "../../../usr/hwpf/hwp/slave_sbe/slave_sbe.H"
-
-namespace INITSERVICE
-{
-
-/**
* @file istep06list.H
*
* @note IStep definition for Hostboot - Slave SBE
*
* IStep 06 Slave SBE
- * IPL FLow Doc v0.60 (06/02/15)
+ * IPL FLow Doc v0.67 (11/02/15)
*
* 06.1 host_bootloader
* : Host Bootloader (non-executable istep)
@@ -64,12 +45,109 @@ namespace INITSERVICE
* : Build ipl parameters
* 06.6 host_discover_targets
* : Builds targeting
- * 06.7 host_gard
+ * 06.7 host_update_master_tpm
+ * : Update master TPM
+ * 06.8 host_gard
* : Do Gard
- * 06.8 host_revert_sbe_mcs_setup
+ * 06.9 host_revert_sbe_mcs_setup
* : Clean up MCS extent regs
+ * 06.10 host_start_occ_xstop_handler
+ * :
+ *
+ */
+
+#include <initservice/initsvcstructs.H>
+#include <initservice/initsvcreasoncodes.H>
+
+namespace ISTEP_06
+{
+/**
+ * @brief host_init_fsi Setup the FSI links to slave chips (istep 6.4)
+ *
+ * Call into the hwas platform-specific initHardware() function
+ * to init the FSI hardware.
+ *
+ * param[in,out] io_pArgs - (normally) a pointer to a TaskArgs struct,
+ * or NULL.
+ * return any error logs to istep
+ */
+void* host_init_fsi( void *io_pArgs );
+
+/**
+ * @brief host_set_ipl_parms Build ipl parameters (istep 6.5)
+ *
+ * TBD
*
+ * param[in,out] io_pArgs - (normally) a pointer to a TaskArgs struct,
+ * or NULL.
+ * return any error logs to istep
*/
+void* host_set_ipl_parms( void *io_pArgs );
+
+/**
+ * @brief host_discover_targets Builds targeting (istep 6.6)
+ *
+ * This routine will walk through all the targets and initialize HWAS STATE
+ * to a known default value.
+ *
+ * Currently everything is initialized to powered off, etc.
+ *
+ * Call into the hwas platform-specific presenceDetect() function to
+ * read the hardware information, and apply it to the target states.
+ *
+ * param[in,out] io_pArgs - (normally) a pointer to a TaskArgs struct,
+ * or NULL.
+ * return any error logs to istep
+ */
+void* host_discover_targets( void *io_pArgs );
+
+/**
+ * @brief host_update_master_tpm (istep 6.7)
+ *
+ *
+ * param[in,out] io_pArgs - (normally) a pointer to a TaskArgs struct,
+ * or NULL.
+ * return any error logs to istep
+ */
+void* host_update_master_tpm( void *io_pArgs );
+
+/**
+ * @brief host_gard Do Gard (istep 6.8)
+ *
+ * Collect GARD information and apply it to the target states.
+ *
+ * param[in,out] io_pArgs - (normally) a pointer to a TaskArgs struct,
+ * or NULL.
+ * return any error logs to istep
+ */
+void* host_gard( void *io_pArgs );
+
+/**
+ * @brief host_revert_sbe_mcs_setup (istep 6.9)
+ *
+ * param[in,out] io_pArgs - (normally) a pointer to a TaskArgs struct,
+ * or NULL.
+ * return any error logs to istep
+ */
+void* host_revert_sbe_mcs_setup (void * io_pArgs);
+
+/**
+ * @brief host_start_occ_xstop_handler (istep 6.10)
+ *
+ * param[in,out] io_pArgs - (normally) a pointer to a TaskArgs struct,
+ * or NULL.
+ * return any error logs to istep
+ */
+void* host_start_occ_xstop_handler (void * io_pArgs);
+
+
+
+};
+
+
+namespace INITSERVICE
+{
+
const TaskInfo g_istep06[] = {
{
"", // dummy, index 0
@@ -93,41 +171,46 @@ const TaskInfo g_istep06[] = {
},
{
ISTEPNAME(06,04,"host_init_fsi"),
- HWAS::host_init_fsi,
+ ISTEP_06::host_init_fsi,
{ START_FN, EXT_IMAGE, NORMAL_IPL_OP | MPIPL_OP, false,
BASE_INITIALIZATION }
},
{
ISTEPNAME(06,05,"host_set_ipl_parms"),
- HWAS::host_set_ipl_parms,
+ ISTEP_06::host_set_ipl_parms,
{ START_FN, EXT_IMAGE, NORMAL_IPL_OP | MPIPL_OP, false }
},
{
ISTEPNAME(06,06,"host_discover_targets"),
- HWAS::host_discover_targets,
+ ISTEP_06::host_discover_targets,
+ { START_FN, EXT_IMAGE, NORMAL_IPL_OP | MPIPL_OP, false }
+ },
+ {
+ ISTEPNAME(06,07,"host_update_master_tpm"),
+ ISTEP_06::host_update_master_tpm,
{ START_FN, EXT_IMAGE, NORMAL_IPL_OP | MPIPL_OP, false }
},
{
- ISTEPNAME(06,07, "host_gard"),
- HWAS::host_gard,
+ ISTEPNAME(06,08, "host_gard"),
+ ISTEP_06::host_gard,
{ START_FN, EXT_IMAGE, NORMAL_IPL_OP | MPIPL_OP, false }
},
{
- ISTEPNAME(06,08,"host_revert_sbe_mcs_setup"),
- HWAS::call_p9_revert_sbe_mcs_setup,
+ ISTEPNAME(06,09,"host_revert_sbe_mcs_setup"),
+ ISTEP_06::host_revert_sbe_mcs_setup,
{ START_FN, EXT_IMAGE, NORMAL_IPL_OP, false }
},
+ {
+ ISTEPNAME(06,10,"host_start_occ_xstop_handler"),
+ ISTEP_06::host_start_occ_xstop_handler,
+ { START_FN, EXT_IMAGE, NORMAL_IPL_OP, false }
+ },
+
};
const DepModInfo g_istep06Dependancies = {
{
- DEP_LIB(libbuild_winkle_images.so), //proc_mailbox_utils
- DEP_LIB(libslave_sbe.so),
- DEP_LIB(libsbe.so),
- DEP_LIB(libporeve.so),
- DEP_LIB(libpstates.so),
- DEP_LIB(libcore_activate.so),
- DEP_LIB(libsecure_boot.so),
+ DEP_LIB(libistep06.so),
#ifdef CONFIG_IPLTIME_CHECKSTOP_ANALYSIS
DEP_LIB(libocc.so),
#endif
diff --git a/src/include/usr/isteps/istep07list.H b/src/include/usr/isteps/istep07list.H
index 7520bdbed..17333e0b5 100644
--- a/src/include/usr/isteps/istep07list.H
+++ b/src/include/usr/isteps/istep07list.H
@@ -29,7 +29,7 @@
* @file istep07list.H
*
* IStep 07 Nest Chiplets
- * IPL FLow Doc v0.60 (06/02/15)
+ * IPL FLow Doc v0.67 (11/02/15)
*
* 07.1 host_collect_dimm_spd
* : Collect Master dimm SPD
@@ -50,8 +50,77 @@
#include <initservice/initsvcstructs.H>
#include <initservice/initsvcreasoncodes.H>
-// include prototypes file
-#include "../../../usr/hwpf/hwp/mc_config/mc_config.H"
+
+namespace ISTEP_07
+{
+/**
+ * @brief host_collect_dimm_spd
+ *
+ * Collect Master dimm SPD
+ *
+ * param[in,out] io_pArgs - (normally) a pointer to a TaskArgs struct,
+ * or NULL.
+ * return any error logs to istep
+ *
+ */
+void* call_host_collect_dimm_spd( void * io_pArgs );
+
+/**
+ * @brief mss_volt
+ *
+ * Calc dimm voltage
+ *
+ * param[in,out] io_pArgs - (normally) a pointer to a TaskArgs struct,
+ * or NULL.
+ * return any error logs to istep
+ *
+ */
+void* call_mss_volt( void * io_pArgs );
+
+
+
+/**
+ * @brief mss_freq
+ *
+ * Calc dimm frequency
+ *
+ * param[in,out] io_pArgs - (normally) a pointer to a TaskArgs struct,
+ * or NULL.
+ * return any error logs to istep
+ *
+ */
+void* call_mss_freq( void * io_pArgs );
+
+
+
+/**
+ * @brief mss_eff_config
+ *
+ * Determine effective config
+ *
+ * param[in,out] io_pArgs - (normally) a pointer to a TaskArgs struct,
+ * or NULL.
+ * return any error logs to istep
+ *
+ */
+void* call_mss_eff_config( void * io_pArgs );
+
+/**
+ * @brief mss_attr_update
+ *
+ * Stub HWP to allow FW to override attributes programmatically
+ *
+ * param[in,out] io_pArgs - (normally) a pointer to a TaskArgs struct,
+ * or NULL.
+ * return any error logs to istep
+ *
+ */
+void* call_mss_attr_update( void *io_pArgs );
+
+}; // end namespace
+
+
+
namespace INITSERVICE
{
@@ -63,27 +132,27 @@ namespace INITSERVICE
},
{
ISTEPNAME(07,01,"host_collect_dimm_spd"),
- MC_CONFIG::call_host_collect_dimm_spd,
+ ISTEP_07::call_host_collect_dimm_spd,
{ START_FN, EXT_IMAGE, NORMAL_IPL_OP, true }
},
{
ISTEPNAME(07,02,"mss_volt"),
- MC_CONFIG::call_mss_volt,
+ ISTEP_07::call_mss_volt,
{ START_FN, EXT_IMAGE, NORMAL_IPL_OP, true }
},
{
ISTEPNAME(07,03,"mss_freq"),
- MC_CONFIG::call_mss_freq,
+ ISTEP_07::call_mss_freq,
{ START_FN, EXT_IMAGE, NORMAL_IPL_OP, true }
},
{
ISTEPNAME(07,04,"mss_eff_config"),
- MC_CONFIG::call_mss_eff_config,
+ ISTEP_07::call_mss_eff_config,
{ START_FN, EXT_IMAGE, NORMAL_IPL_OP, true }
},
{
ISTEPNAME(07,05,"mss_attr_update"),
- MC_CONFIG::call_mss_attr_update,
+ ISTEP_07::call_mss_attr_update,
{ START_FN, EXT_IMAGE, NORMAL_IPL_OP, true }
},
};
@@ -91,8 +160,7 @@ namespace INITSERVICE
const DepModInfo g_istep07Dependancies = {
{
- DEP_LIB(libmc_config.so),
- DEP_LIB(libsbe.so),
+ DEP_LIB(libistep07.so),
NULL
}
};
diff --git a/src/include/usr/isteps/istep12list.H b/src/include/usr/isteps/istep12list.H
index 111a16b58..20fb8d113 100644
--- a/src/include/usr/isteps/istep12list.H
+++ b/src/include/usr/isteps/istep12list.H
@@ -41,7 +41,6 @@
#include <initservice/initsvcreasoncodes.H>
// include prototypes file
-#include "../../../usr/hwpf/hwp/mc_config/mc_config.H"
#include <config.h>
diff --git a/src/makefile b/src/makefile
index 7ad26c31e..83e139371 100644
--- a/src/makefile
+++ b/src/makefile
@@ -117,6 +117,8 @@ BASE_MODULES += pnor
BASE_MODULES += vfs
BASE_MODULES += $(if $(CONFIG_AST2400), sio)
+EXTENDED_MODULES += istep06
+EXTENDED_MODULES += istep07
EXTENDED_MODULES += targeting
EXTENDED_MODULES += ecmddatabuffer
EXTENDED_MODULES += fapi
@@ -137,7 +139,6 @@ EXTENDED_MODULES += poreve
EXTENDED_MODULES += util
EXTENDED_MODULES += tracedaemon
EXTENDED_MODULES += $(if $(CONFIG_VPO_COMPILE),,sbe_centaur_init)
-EXTENDED_MODULES += $(if $(CONFIG_VPO_COMPILE),,mc_config)
EXTENDED_MODULES += $(if $(CONFIG_VPO_COMPILE),,dram_training)
EXTENDED_MODULES += $(if $(CONFIG_VPO_COMPILE),,mdia)
EXTENDED_MODULES += mbox
diff --git a/src/usr/hwas/makefile b/src/usr/hwas/makefile
index 46ad8e32e..1617df6e8 100644
--- a/src/usr/hwas/makefile
+++ b/src/usr/hwas/makefile
@@ -51,7 +51,6 @@ OBJS += deconfigGard.o
# files in this directory
OBJS += hwasPlat.o
-OBJS += hostbootIstep.o
OBJS += hwasPlatError.o
OBJS += hwasPlatCallout.o
OBJS += hwasPlatDeconfigGard.o
diff --git a/src/usr/hwpf/hwp/activate_powerbus/activate_powerbus.C b/src/usr/hwpf/hwp/activate_powerbus/activate_powerbus.C
index 642b53996..c8724222a 100644
--- a/src/usr/hwpf/hwp/activate_powerbus/activate_powerbus.C
+++ b/src/usr/hwpf/hwp/activate_powerbus/activate_powerbus.C
@@ -45,7 +45,7 @@
#include <errl/errludtarget.H>
#include <initservice/isteps_trace.H>
-#include <hwpisteperror.H>
+#include <isteps/hwpisteperror.H>
#include <sbe/sbeif.H>
#include <pnor/pnorif.H>
diff --git a/src/usr/hwpf/hwp/build_winkle_images/build_winkle_images.C b/src/usr/hwpf/hwp/build_winkle_images/build_winkle_images.C
index a32a84aff..858c2bbcd 100644
--- a/src/usr/hwpf/hwp/build_winkle_images/build_winkle_images.C
+++ b/src/usr/hwpf/hwp/build_winkle_images/build_winkle_images.C
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2012,2014 */
+/* Contributors Listed Below - COPYRIGHT 2012,2015 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -46,7 +46,7 @@
#include <initservice/taskargs.H>
#include <errl/errlentry.H>
-#include <hwpisteperror.H>
+#include <isteps/hwpisteperror.H>
#include <errl/errludtarget.H>
#include <initservice/isteps_trace.H>
diff --git a/src/usr/hwpf/hwp/core_activate/core_activate.C b/src/usr/hwpf/hwp/core_activate/core_activate.C
index e9c729b5f..65df5792a 100644
--- a/src/usr/hwpf/hwp/core_activate/core_activate.C
+++ b/src/usr/hwpf/hwp/core_activate/core_activate.C
@@ -46,7 +46,7 @@
#include <initservice/isteps_trace.H>
#include <initservice/istepdispatcherif.H>
-#include <hwpisteperror.H>
+#include <isteps/hwpisteperror.H>
#include <errl/errludtarget.H>
#include <intr/interrupt.H>
diff --git a/src/usr/hwpf/hwp/dmi_training/dmi_training.C b/src/usr/hwpf/hwp/dmi_training/dmi_training.C
index 99ee702f7..bd1b37efd 100644
--- a/src/usr/hwpf/hwp/dmi_training/dmi_training.C
+++ b/src/usr/hwpf/hwp/dmi_training/dmi_training.C
@@ -51,7 +51,7 @@
#include <initservice/isteps_trace.H>
-#include <hwpisteperror.H>
+#include <isteps/hwpisteperror.H>
#include <errl/errludtarget.H>
#include <hwas/common/deconfigGard.H>
diff --git a/src/usr/hwpf/hwp/dram_initialization/dram_initialization.C b/src/usr/hwpf/hwp/dram_initialization/dram_initialization.C
index 970286666..edf2732e1 100644
--- a/src/usr/hwpf/hwp/dram_initialization/dram_initialization.C
+++ b/src/usr/hwpf/hwp/dram_initialization/dram_initialization.C
@@ -43,7 +43,7 @@
#include <diag/mdia/mdia.H>
#include <diag/attn/attn.H>
#include <initservice/isteps_trace.H>
-#include <hwpisteperror.H>
+#include <isteps/hwpisteperror.H>
#include <errl/errludtarget.H>
#include <intr/interrupt.H> // for PIR_t structure
diff --git a/src/usr/hwpf/hwp/dram_training/dram_training.C b/src/usr/hwpf/hwp/dram_training/dram_training.C
index 0f811cfc0..8613a46aa 100644
--- a/src/usr/hwpf/hwp/dram_training/dram_training.C
+++ b/src/usr/hwpf/hwp/dram_training/dram_training.C
@@ -49,7 +49,7 @@
#include <targeting/common/util.H>
#include <targeting/common/utilFilter.H>
-#include <hwpisteperror.H>
+#include <isteps/hwpisteperror.H>
#include <errl/errludtarget.H>
// fapi support
@@ -79,7 +79,6 @@ const uint8_t VPO_NUM_OF_MEMBUF_TO_RUN = UNLIMITED_RUN;
#include "mss_draminit_trainadv/mss_draminit_training_advanced.H"
#include "mss_draminit_mc/mss_draminit_mc.H"
#include "proc_throttle_sync.H"
-#include "../mc_config/mc_config.H"
namespace DRAM_TRAINING
@@ -544,7 +543,10 @@ void mss_post_draminit( IStepError & l_stepError )
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "mss_post_draminit entry" );
- set_eff_config_attrs_helper(MC_CONFIG::POST_DRAM_INIT, rerun_vddr);
+ //@TODO RTC: 133831. The helper function is currently commented out because
+ //some of the attributes don't exist. uncomment it once attribute support is
+ //in place
+// set_eff_config_attrs_helper(ISTEP_07::POST_DRAM_INIT, rerun_vddr);
if ( rerun_vddr == false )
{
@@ -554,11 +556,13 @@ void mss_post_draminit( IStepError & l_stepError )
}
// Call mss_volt_vddr_offset to recalculate VDDR voltage
-
- l_err = MC_CONFIG::setMemoryVoltageDomainOffsetVoltage<
+ // @TODO RTC: 133831 Uncomment once attribute support is in place
+ /*
+ l_err = ISTEP_07::setMemoryVoltageDomainOffsetVoltage<
TARGETING::ATTR_MSS_VOLT_VDDR_OFFSET_DISABLE,
TARGETING::ATTR_MEM_VDDR_OFFSET_MILLIVOLTS,
TARGETING::ATTR_VMEM_ID>();
+ */
if(l_err)
{
TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "mss_post_draminit: "
@@ -596,7 +600,6 @@ void mss_post_draminit( IStepError & l_stepError )
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"mss_post_draminit exit" );
-
return;
}
diff --git a/src/usr/hwpf/hwp/edi_ei_initialization/edi_ei_initialization.C b/src/usr/hwpf/hwp/edi_ei_initialization/edi_ei_initialization.C
index 29b4937e8..deb6b2af1 100644
--- a/src/usr/hwpf/hwp/edi_ei_initialization/edi_ei_initialization.C
+++ b/src/usr/hwpf/hwp/edi_ei_initialization/edi_ei_initialization.C
@@ -43,7 +43,7 @@
#include <initservice/taskargs.H>
#include <errl/errlentry.H>
-#include <hwpisteperror.H>
+#include <isteps/hwpisteperror.H>
#include <errl/errludtarget.H>
#include <initservice/isteps_trace.H>
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 912ababed..17960bc3e 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
@@ -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. */
@@ -46,7 +48,7 @@
#include <initservice/isteps_trace.H>
-#include <hwpisteperror.H>
+#include <isteps/hwpisteperror.H>
#include <errl/errludtarget.H>
#include <istep_mbox_msgs.H>
diff --git a/src/usr/hwpf/hwp/makefile b/src/usr/hwpf/hwp/makefile
index 823faac1c..15d759cd0 100644
--- a/src/usr/hwpf/hwp/makefile
+++ b/src/usr/hwpf/hwp/makefile
@@ -33,12 +33,14 @@ include hwp.mk
OBJS += fapiTestHwp.o
OBJS += fapiTestHwpDq.o
OBJS += fapiHwpExecInitFile.o
-OBJS += hwpisteperror.o
-OBJS += hwpistepud.o
+
+#Temporarily compiling these here to avoid linker errors
+#This file will eventually be deleted when we delete hwpf/
+OBJS += ../isteps/hwpisteperror.o
+OBJS += ../isteps/hwpistepud.o
SUBDIRS += dmi_training.d
SUBDIRS += sbe_centaur_init.d
-SUBDIRS += mc_config.d
SUBDIRS += dram_training.d
SUBDIRS += activate_powerbus.d
SUBDIRS += build_winkle_images.d
diff --git a/src/usr/hwpf/hwp/mc_config/makefile b/src/usr/hwpf/hwp/mc_config/makefile
index 2ed7e8398..908d9983f 100644
--- a/src/usr/hwpf/hwp/mc_config/makefile
+++ b/src/usr/hwpf/hwp/mc_config/makefile
@@ -51,10 +51,6 @@ EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/mc_config/mss_eff_pre_config
EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/mc_config/mss_attr_cleanup
EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/mc_config/mss_eff_mb_interleave
-OBJS += mc_config.o
-OBJS += mss_volt.o
-OBJS += mss_volt_dimm_count.o
-OBJS += mss_freq.o
OBJS += mss_eff_config.o
OBJS += mss_eff_grouping.o
OBJS += opt_memmap.o
@@ -68,22 +64,12 @@ OBJS += mss_throttle_to_power.o
OBJS += mss_eff_config_shmoo.o
OBJS += mss_error_support.o
OBJS += mss_eff_pre_config.o
-OBJS += mss_attr_cleanup.o
-OBJS += mss_eff_mb_interleave.o
-OBJS += mss_volt_vdd_offset.o
-OBJS += mss_volt_avdd_offset.o
-OBJS += mss_volt_vcs_offset.o
-OBJS += mss_volt_vpp_offset.o
-OBJS += mss_volt_vddr_offset.o
OBJS += mss_count_active_centaurs.o
## NOTE: add a new directory onto the vpaths when you add a new HWP
##@ VPATH += ${ROOTPATH}/src/usr/hwpf/hwp/???
VPATH += ${ROOTPATH}/src/usr/hwpf/hwp/mc_config/mss_eff_config
-VPATH += ${ROOTPATH}/src/usr/hwpf/hwp/mc_config/mss_volt
-VPATH += ${ROOTPATH}/src/usr/hwpf/hwp/mc_config/mss_freq
VPATH += ${ROOTPATH}/src/usr/hwpf/hwp/mc_config/mss_eff_pre_config
-VPATH += ${ROOTPATH}/src/usr/hwpf/hwp/mc_config/mss_attr_cleanup
VPATH += ${ROOTPATH}/src/usr/hwpf/hwp/mc_config/mss_eff_mb_interleave
include ${ROOTPATH}/config.mk
diff --git a/src/usr/hwpf/hwp/mc_config/mc_config.C b/src/usr/hwpf/hwp/mc_config/mc_config.C
deleted file mode 100644
index f6e8c1028..000000000
--- a/src/usr/hwpf/hwp/mc_config/mc_config.C
+++ /dev/null
@@ -1,1703 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG */
-/* This is an automatically generated prolog. */
-/* */
-/* $Source: src/usr/hwpf/hwp/mc_config/mc_config.C $ */
-/* */
-/* OpenPOWER HostBoot Project */
-/* */
-/* Contributors Listed Below - COPYRIGHT 2012,2015 */
-/* [+] Google Inc. */
-/* [+] International Business Machines Corp. */
-/* */
-/* */
-/* Licensed under the Apache License, Version 2.0 (the "License"); */
-/* you may not use this file except in compliance with the License. */
-/* You may obtain a copy of the License at */
-/* */
-/* http://www.apache.org/licenses/LICENSE-2.0 */
-/* */
-/* Unless required by applicable law or agreed to in writing, software */
-/* distributed under the License is distributed on an "AS IS" BASIS, */
-/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
-/* implied. See the License for the specific language governing */
-/* permissions and limitations under the License. */
-/* */
-/* IBM_PROLOG_END_TAG */
-/**
- * @file mc_config.C
- *
- * Support file for IStep: mc_config
- * Step 12 MC Config
- *
- * *****************************************************************
- * THIS FILE WAS GENERATED ON 2012-03-01:1032
- * *****************************************************************
- *
- * HWP_IGNORE_VERSION_CHECK
- *
- */
-
-/******************************************************************************/
-// Includes
-/******************************************************************************/
-#include <stdint.h>
-
-#include <trace/interface.H>
-#include <initservice/taskargs.H>
-#include <initservice/initserviceif.H>
-#include <errl/errlentry.H>
-
-#include <hwpisteperror.H>
-#include <hwpf/hwpf_reasoncodes.H>
-#include <errl/errludtarget.H>
-
-#include <initservice/isteps_trace.H>
-#include <sbe/sbeif.H>
-// targeting support
-#include <targeting/common/commontargeting.H>
-#include <targeting/common/utilFilter.H>
-#include <attributetraits.H>
-
-// fapi support
-#include <fapi.H>
-#include <fapiPlatHwpInvoker.H>
-#include <fapiAttributeIds.H>
-#include <fapiAttributeService.H>
-
-#include "mc_config.H"
-
-#include "mss_volt/mss_volt.H"
-#include "mss_freq/mss_freq.H"
-#include "mss_eff_config/mss_eff_config.H"
-#include "mss_eff_config/mss_eff_config_thermal.H"
-#include "mss_eff_config/mss_eff_grouping.H"
-#include "mss_eff_config/opt_memmap.H"
-#include "mss_attr_cleanup/mss_attr_cleanup.H"
-#include "mss_eff_mb_interleave/mss_eff_mb_interleave.H"
-#include "mss_volt/mss_volt_avdd_offset.H"
-#include "mss_volt/mss_volt_vcs_offset.H"
-#include "mss_volt/mss_volt_vdd_offset.H"
-#include "mss_volt/mss_volt_vddr_offset.H"
-#include "mss_volt/mss_volt_vpp_offset.H"
-#include "mss_volt/mss_volt_dimm_count.H"
-
-#include <config.h>
-#include <util/align.H>
-#include <util/algorithm.H>
-
-namespace MC_CONFIG
-{
-
-using namespace ISTEP;
-using namespace ISTEP_ERROR;
-using namespace ERRORLOG;
-using namespace TARGETING;
-using namespace fapi;
-
-
-//
-// Helper function to set _EFF_CONFIG attributes for HWPs
-//
-void set_eff_config_attrs_helper( const EFF_CONFIG_ATTRIBUTES_BASE i_base,
- bool & o_post_dram_inits_found)
-{
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "set_eff_config_attrs_helper: setting _EFF_CONFIG attributes "
- "enter: i_base=%d", i_base);
-
- o_post_dram_inits_found = false;
-
- // Local Variables ('pdi_' means 'post dram init')
- uint32_t pdi_ddr3_vddr_slope=0;
- uint32_t pdi_ddr3_vddr_intercept=0;
- uint32_t pdi_ddr3_vddr_max_limit=0;
- uint32_t pdi_ddr4_vddr_slope=0;
- uint32_t pdi_ddr4_vddr_intercept=0;
- uint32_t pdi_ddr4_vddr_max_limit=0;
- uint32_t pdi_vpp_slope=0;
- uint32_t pdi_vpp_intercept=0;
-
- uint32_t eff_conf_ddr3_vddr_slope=0;
- uint32_t eff_conf_ddr3_vddr_intercept=0;
- uint32_t eff_conf_ddr3_vddr_max_limit=0;
- uint32_t eff_conf_ddr4_vddr_slope=0;
- uint32_t eff_conf_ddr4_vddr_intercept=0;
- uint32_t eff_conf_ddr4_vddr_max_limit=0;
- uint32_t eff_conf_vpp_slope=0;
- uint32_t eff_conf_vpp_intercept=0;
-
- // Check input base
- assert( ( i_base == DEFAULT ) || (i_base == POST_DRAM_INIT ),
- "set_eff_config_attrs_helper: Invalid i_base passed in: %d",
- i_base);
-
- // Get Node Target
- TARGETING::Target* sysTgt = NULL;
- TARGETING::targetService().getTopLevelTarget(sysTgt);
- assert(sysTgt != NULL,"set_eff_config_attrs_helper: "
- "System target was NULL.");
-
- TARGETING::TargetHandleList l_nodeList;
-
- TARGETING::PredicateCTM isaNode(TARGETING::CLASS_ENC,
- TARGETING::TYPE_NODE);
-
- TARGETING::targetService().getAssociated(
- l_nodeList,
- sysTgt,
- TARGETING::TargetService::CHILD,
- TARGETING::TargetService::IMMEDIATE,
- &isaNode);
-
- // Node list should only have 1 tgt
- assert ( l_nodeList.size() == 1,
- "System target returned multiple or zero nodes ");
- TARGETING::Target* nodeTgt=l_nodeList[0];
-
-
-
- // Look for POST_DRAM_INIT Attributes if requested
- if ( i_base == POST_DRAM_INIT )
- {
- // POST_DRAM_INIT DDR3 VDDR
- pdi_ddr3_vddr_slope =
- nodeTgt->getAttr<
- TARGETING::ATTR_MSS_VOLT_DDR3_VDDR_SLOPE_POST_DRAM_INIT>();
-
- pdi_ddr3_vddr_intercept =
- nodeTgt->getAttr<
- TARGETING::ATTR_MSS_VOLT_DDR3_VDDR_INTERCEPT_POST_DRAM_INIT>();
-
- pdi_ddr3_vddr_max_limit =
- nodeTgt->getAttr<
- TARGETING::ATTR_MRW_DDR3_VDDR_MAX_LIMIT_POST_DRAM_INIT>();
-
- // POST_DRAM_INIT DDR4 VDDR
- pdi_ddr4_vddr_slope =
- nodeTgt->getAttr<
- TARGETING::ATTR_MSS_VOLT_DDR4_VDDR_SLOPE_POST_DRAM_INIT>();
-
- pdi_ddr4_vddr_intercept =
- nodeTgt->getAttr<
- TARGETING::ATTR_MSS_VOLT_DDR4_VDDR_INTERCEPT_POST_DRAM_INIT>();
-
- pdi_ddr4_vddr_max_limit =
- nodeTgt->getAttr<
- TARGETING::ATTR_MRW_DDR4_VDDR_MAX_LIMIT_POST_DRAM_INIT>();
-
-
- // POST_DRAM_INIT VPP
- pdi_vpp_slope =
- nodeTgt->getAttr<
- TARGETING::ATTR_MSS_VOLT_VPP_SLOPE_POST_DRAM_INIT>();
-
- pdi_vpp_intercept =
- nodeTgt->getAttr<
- TARGETING::ATTR_MSS_VOLT_VPP_INTERCEPT_POST_DRAM_INIT>();
- }
- o_post_dram_inits_found = ( pdi_ddr3_vddr_slope || pdi_ddr3_vddr_intercept ||
- pdi_ddr3_vddr_max_limit ||
- pdi_ddr4_vddr_slope || pdi_ddr4_vddr_intercept ||
- pdi_ddr4_vddr_max_limit ||
- pdi_vpp_slope || pdi_vpp_intercept )
- ? true : false;
-
- // -----------------------------------
- // EFF CONFIG: DDR3 VDDR
- if ( o_post_dram_inits_found == false )
- {
- // Use default system values
- eff_conf_ddr3_vddr_slope =
- sysTgt->getAttr<TARGETING::ATTR_MSS_VOLT_DDR3_VDDR_SLOPE>();
-
- eff_conf_ddr3_vddr_intercept =
- sysTgt->getAttr<
- TARGETING::ATTR_MSS_VOLT_DDR3_VDDR_INTERCEPT>();
-
- eff_conf_ddr3_vddr_max_limit =
- sysTgt->getAttr<
- TARGETING::ATTR_MRW_DDR3_VDDR_MAX_LIMIT>();
- }
- else
- {
- // Use POST_DRAM INIT values
- eff_conf_ddr3_vddr_slope = pdi_ddr3_vddr_slope;
- eff_conf_ddr3_vddr_intercept = pdi_ddr3_vddr_intercept;
- eff_conf_ddr3_vddr_max_limit = pdi_ddr3_vddr_max_limit;
- }
-
- nodeTgt->setAttr<TARGETING::ATTR_MSS_VOLT_DDR3_VDDR_SLOPE_EFF_CONFIG>\
- (eff_conf_ddr3_vddr_slope);
-
- nodeTgt->setAttr<TARGETING::ATTR_MSS_VOLT_DDR3_VDDR_INTERCEPT_EFF_CONFIG>\
- (eff_conf_ddr3_vddr_intercept);
-
- nodeTgt->setAttr<TARGETING::ATTR_MRW_DDR3_VDDR_MAX_LIMIT_EFF_CONFIG>\
- (eff_conf_ddr3_vddr_max_limit);
-
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,"set_eff_config_attrs_helper: "
- "DDR3 _EFF_CONFIG(%d, %d): slope=%d, intercept=%d, max_limit=%d",
- i_base, o_post_dram_inits_found,
- eff_conf_ddr3_vddr_slope,
- eff_conf_ddr3_vddr_intercept,
- eff_conf_ddr3_vddr_max_limit);
-
-
- // -----------------------------------
- // EFF CONFIG: DDR4 VDDR
- if ( o_post_dram_inits_found == false )
- {
- // Use default system value
- eff_conf_ddr4_vddr_slope =
- sysTgt->getAttr<TARGETING::ATTR_MSS_VOLT_DDR4_VDDR_SLOPE>();
-
- eff_conf_ddr4_vddr_intercept =
- sysTgt->getAttr<
- TARGETING::ATTR_MSS_VOLT_DDR4_VDDR_INTERCEPT>();
-
- eff_conf_ddr4_vddr_max_limit =
- sysTgt->getAttr<
- TARGETING::ATTR_MRW_DDR4_VDDR_MAX_LIMIT>();
- }
- else
- {
- // Use POST_DRAM INIT value
- eff_conf_ddr4_vddr_slope = pdi_ddr4_vddr_slope;
- eff_conf_ddr4_vddr_intercept = pdi_ddr4_vddr_intercept;
- eff_conf_ddr4_vddr_max_limit = pdi_ddr4_vddr_max_limit;
- }
- nodeTgt->setAttr<TARGETING::ATTR_MSS_VOLT_DDR4_VDDR_SLOPE_EFF_CONFIG>\
- (eff_conf_ddr4_vddr_slope);
-
- nodeTgt->setAttr<TARGETING::ATTR_MSS_VOLT_DDR4_VDDR_INTERCEPT_EFF_CONFIG>\
- (eff_conf_ddr4_vddr_intercept);
-
- nodeTgt->setAttr<TARGETING::ATTR_MRW_DDR4_VDDR_MAX_LIMIT_EFF_CONFIG>\
- (eff_conf_ddr4_vddr_max_limit);
-
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,"set_eff_config_attrs_helper: "
- "DDR4 _EFF_CONFIG(%d, %d): slope=%d, intercept=%d, max_limit=%d",
- i_base, o_post_dram_inits_found,
- eff_conf_ddr4_vddr_slope,
- eff_conf_ddr4_vddr_intercept,
- eff_conf_ddr4_vddr_max_limit);
-
- // -----------------------------------
- // EFF CONFIG: VPP
- if ( o_post_dram_inits_found == false )
- {
- // Use default system value
- eff_conf_vpp_slope =
- sysTgt->getAttr<TARGETING::ATTR_MSS_VOLT_VPP_SLOPE>();
-
- eff_conf_vpp_intercept =
- sysTgt->getAttr<
- TARGETING::ATTR_MSS_VOLT_VPP_INTERCEPT>();
- }
- else
- {
- // Use POST_DRAM INIT value
- eff_conf_vpp_slope = pdi_vpp_slope;
- eff_conf_vpp_intercept = pdi_vpp_intercept;
- }
- nodeTgt->setAttr<TARGETING::ATTR_MSS_VOLT_VPP_SLOPE_EFF_CONFIG>\
- (eff_conf_vpp_slope);
-
- nodeTgt->setAttr<TARGETING::ATTR_MSS_VOLT_VPP_INTERCEPT_EFF_CONFIG>\
- (eff_conf_vpp_intercept);
-
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,"set_eff_config_attrs_helper: "
- "VPP _EFF_CONFIG(%d, %d): slope=%d, intercept=%d",
- i_base, o_post_dram_inits_found,
- eff_conf_vpp_slope,
- eff_conf_vpp_intercept);
-
-
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "set_eff_config_attrs_helper: setting _EFF_CONFIG "
- "attributes exit");
-
-}
-
-//
-// Wrapper function to call host_collect_dimm_spd
-//
-void* call_host_collect_dimm_spd( void *io_pArgs )
-{
- errlHndl_t l_err = NULL;
- IStepError l_stepError;
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "call_host_collect_dimm_spd entry" );
-
- // Get a list of all present Centaurs
- TargetHandleList l_presCentaurs;
- getChipResources(l_presCentaurs, TYPE_MEMBUF, UTIL_FILTER_PRESENT);
- // Associated MBA targets
- TARGETING::TargetHandleList l_mbaList;
-
- // Define predicate for associated MBAs
- PredicateCTM predMba(CLASS_UNIT, TYPE_MBA);
- PredicatePostfixExpr presMba;
- PredicateHwas predPres;
- predPres.present(true);
- presMba.push(&predMba).push(&predPres).And();
-
- 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);
-
- // Dump current run on target
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "Running mss_attr_cleanup HWP on "
- "target HUID %.8X", l_currCentaurHuid);
-
- // find all present MBAs associated with this Centaur
- TARGETING::TargetHandleList l_presMbas;
- targetService().getAssociated(l_presMbas,
- l_pCentaur,
- TargetService::CHILD,
- TargetService::IMMEDIATE,
- &presMba);
-
- // 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;
- }
-
- // Create FAPI Targets.
- const fapi::Target l_fapiCentaurTarget(TARGET_TYPE_MEMBUF_CHIP,
- (const_cast<TARGETING::Target*>(l_pCentaur)));
- const fapi::Target l_fapiMba0Target(TARGET_TYPE_MBA_CHIPLET,
- (const_cast<TARGETING::Target*>(l_presMbas[0])));
- const fapi::Target l_fapiMba1Target(TARGET_TYPE_MBA_CHIPLET,
- (const_cast<TARGETING::Target*>(l_presMbas[1])));
- // call the HWP with each fapi::Target
- //FAPI_INVOKE_HWP(l_err, p9_mss_attr_cleanup, l_fapiCentaurTarget,
- // l_fapiMba0Target, l_fapiMba1Target);
- //Remove when above HWP is working:
- FAPI_INVOKE_HWP(l_err, mss_attr_cleanup, l_fapiCentaurTarget,
- l_fapiMba0Target, l_fapiMba1Target);
- if (l_err)
- {
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "ERROR 0x%.8X: mss_attr_cleanup HWP returns error",
- l_err->reasonCode());
- // capture the target data in the elog
- 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_attr_cleanup HWP on "
- "CENTAUR target HUID %.8X "
- "and associated MBAs",
- l_currCentaurHuid);
- }
- }
-
-
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "call_host_collect_dimm_spd exit" );
-
- // end task, returning any errorlogs to IStepDisp
- return l_stepError.getErrorHandle();
-}
-
-/**
- * @brief Compares two memory buffer targets based on the voltage domain ID for
- * the voltage domain given by the template parameter. Used for sorting
- * memory buffer targets within containers. API should be called in well
- * controlled conditions where the input restrictions can be guaranteed.
- *
- * @param[in] i_pMembufLhs
- * Left hand side memory buffer target. Must be a memory buffer target,
- * and must not be NULL. These conditions are not enforced internally.
- *
- * @param[in] i_pMembufRhs
- * Right hand side memory buffer target. Must be a memory buffer target,
- * and must not be NULL. These conditions are not enforced internally.
- *
- * @tparam VOLTAGE_DOMAIN_ID_ATTR
- * Attribute corresponding to voltage domain to compare
- *
- * @return Bool indicating whether LHS memory buffer target's voltage domain ID
- * for the specified domain logically precedes the RHS memory buffer
- * target's voltage domain ID for the same domain
- */
-template < const TARGETING::ATTRIBUTE_ID VOLTAGE_DOMAIN_ID_ATTR>
-bool _compareMembufWrtVoltageDomain(
- TARGETING::Target* i_pMembufLhs,
- TARGETING::Target* i_pMembufRhs)
-{
- typename TARGETING::AttributeTraits< VOLTAGE_DOMAIN_ID_ATTR >::Type
- lhsDomain = i_pMembufLhs->getAttr<VOLTAGE_DOMAIN_ID_ATTR>();
- typename TARGETING::AttributeTraits< VOLTAGE_DOMAIN_ID_ATTR >::Type
- rhsDomain = i_pMembufRhs->getAttr<VOLTAGE_DOMAIN_ID_ATTR>();
-
- return lhsDomain < rhsDomain;
-}
-
-//******************************************************************************
-// setMemoryVoltageDomainOffsetVoltage
-//******************************************************************************
-
-// TODO via RTC: 110777
-// Optimize setMemoryVoltageDomainOffsetVoltage into templated and non-templated
-// pieces to reduce code size
-
-template< const ATTRIBUTE_ID OFFSET_DISABLEMENT_ATTR,
- const ATTRIBUTE_ID OFFSET_VOLTAGE_ATTR,
- const ATTRIBUTE_ID VOLTAGE_DOMAIN_ID_ATTR >
-errlHndl_t setMemoryVoltageDomainOffsetVoltage()
-{
- TRACDCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "setMemoryVoltageDomainOffsetVoltage enter");
-
- errlHndl_t pError = NULL;
-
- do {
-
- TARGETING::Target* pSysTarget = NULL;
- TARGETING::targetService().getTopLevelTarget(pSysTarget);
- assert(pSysTarget != NULL,"setMemoryVoltageDomainOffsetVoltage: "
- "System target was NULL.");
-
- typename AttributeTraits< OFFSET_DISABLEMENT_ATTR >::Type
- disableOffsetVoltage =
- pSysTarget->getAttr< OFFSET_DISABLEMENT_ATTR >();
-
- if(disableOffsetVoltage)
- {
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "INFO: Offset voltage processing disabled for domain type 0x%08X.",
- OFFSET_DISABLEMENT_ATTR);
- break;
- }
-
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "INFO: Offset voltage processing enabled for domain type 0x%08X.",
- OFFSET_DISABLEMENT_ATTR);
-
- typedef fapi::ReturnCode (*pOffsetFn_t)(std::vector<fapi::Target>&);
-
- struct {
-
- TARGETING::ATTRIBUTE_ID domain;
- pOffsetFn_t fn;
- const char* fnName;
- bool callIfAllNonFunc;
-
- } fnMap[] = {
-
- {TARGETING::ATTR_AVDD_ID,
- mss_volt_avdd_offset,"mss_volt_avdd_offset", true},
- {TARGETING::ATTR_VDD_ID ,
- mss_volt_vdd_offset ,"mss_volt_vdd_offset", true},
- {TARGETING::ATTR_VCS_ID ,
- mss_volt_vcs_offset ,"mss_volt_vcs_offset", true},
- {TARGETING::ATTR_VMEM_ID,
- mss_volt_vddr_offset,"mss_volt_vddr_offset", false},
- {TARGETING::ATTR_VPP_ID ,
- mss_volt_vpp_offset ,"mss_volt_vpp_offset", false}
- };
-
- size_t recordIndex = 0;
- const size_t records = sizeof(fnMap)/sizeof(fnMap[0]);
- for(; recordIndex<records; ++recordIndex)
- {
- if(VOLTAGE_DOMAIN_ID_ATTR == fnMap[recordIndex].domain)
- {
- break;
- }
- }
-
- if(recordIndex >= records)
- {
- assert(recordIndex < records,
- "Code bug! Called setMemoryVoltageDomainOffsetVoltage "
- "using unsupported voltage offset attribute type of 0x%08X.",
- VOLTAGE_DOMAIN_ID_ATTR);
- break;
- }
-
- TARGETING::TargetHandleList membufTargetList;
-
- // Must pull ALL present memory buffers (not just functional) for these
- // computations
- getChipResources(membufTargetList, TYPE_MEMBUF,
- TARGETING::UTIL_FILTER_PRESENT);
-
- std::sort(membufTargetList.begin(), membufTargetList.end(),
- _compareMembufWrtVoltageDomain< VOLTAGE_DOMAIN_ID_ATTR >);
-
- std::vector<fapi::Target> membufFapiTargetsList;
- typename AttributeTraits< VOLTAGE_DOMAIN_ID_ATTR >::Type lastDomainId
- = 0;
-
- if(!membufTargetList.empty())
- {
- lastDomainId =
- (*membufTargetList.begin())->getAttr<VOLTAGE_DOMAIN_ID_ATTR>();
- }
-
- // O(n) algorithm to execute HWPs on groups of memory buffers. As the
- // memory buffers are sorted in order of domain ID (several records in a row
- // might have same domain ID), walk down the list accumulating targets for
- // the HWP until the domain ID changes. The first record is not considered
- // a change. At the time the change is detected, run the HWP on the set of
- // accumulated targets, clear the list, and accumulate the target with a new
- // domain ID as the start of the new list. When we hit end of list, we
- // might add this last target to a new accumulation, so we have to go back
- // through the loop one more time to process it (being careful not to do
- // unholy things to the iterator, etc.)
-
- // Prevent running the HWP on the first target. Var is used to push us
- // through the loop after we exhausted all the targets
- bool last = membufTargetList.empty();
- for (TargetHandleList::const_iterator
- ppPresentMembuf = membufTargetList.begin();
- ((ppPresentMembuf != membufTargetList.end()) || (last == false));
- ++ppPresentMembuf)
- {
- // If no valid target to process, this is our last time through the loop
- last = (ppPresentMembuf == membufTargetList.end());
-
- typename AttributeTraits< VOLTAGE_DOMAIN_ID_ATTR >::Type
- currentDomainId = last ? lastDomainId :
- (*ppPresentMembuf)->getAttr<VOLTAGE_DOMAIN_ID_ATTR>();
-
- // Invoke the HWP if the domain ID in the sorted list change relative to
- // prior entry or this is our final time through the loop (and there is
- // a list entry to process)
- if( ( (currentDomainId != lastDomainId)
- || (last))
- && (!membufFapiTargetsList.empty()) )
- {
- // Skip HWP if this domain has all deconfigured membufs and the
- // domain rule specifies not running the HWP for that case
- bool invokeHwp = true;
- if(fnMap[recordIndex].callIfAllNonFunc == false)
- {
- invokeHwp = false;
- TARGETING::PredicateIsFunctional funcPred;
- std::vector<fapi::Target>::const_iterator pFapiTarget =
- membufFapiTargetsList.begin();
- for(;pFapiTarget != membufFapiTargetsList.end();++pFapiTarget)
- {
- if(funcPred(
- reinterpret_cast<const TARGETING::Target*>(
- pFapiTarget->get())))
- {
- invokeHwp = true;
- break;
- }
- }
- }
-
- if(invokeHwp)
- {
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "INFO invoking %s on domain type 0x%08X, ID 0x%08X",
- fnMap[recordIndex].fnName,
- VOLTAGE_DOMAIN_ID_ATTR, lastDomainId);
-
- FAPI_INVOKE_HWP(
- pError,
- fnMap[recordIndex].fn,
- membufFapiTargetsList);
-
- if (pError)
- {
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "ERROR 0x%.8X: %s",
- pError->reasonCode(),fnMap[recordIndex].fnName);
- break;
- }
- else
- {
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "SUCCESS : %s",fnMap[recordIndex].fnName );
- }
- }
- else
- {
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "INFO not invoking %s on domain type 0x%08X, ID 0x%08X "
- "since domain has no functional memory buffers.",
- fnMap[recordIndex].fnName,
- VOLTAGE_DOMAIN_ID_ATTR, lastDomainId);
- }
-
- membufFapiTargetsList.clear();
-
- lastDomainId = currentDomainId;
- }
-
- // If not the last time through loop, there is a new target to
- // accumulate
- if(!last)
- {
- const TARGETING::Target* pPresentMembuf = *ppPresentMembuf;
-
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "===== add to fapi::Target vector attr type=0x%08X, "
- "id=0x%08X, target HUID=0x%08X",
- VOLTAGE_DOMAIN_ID_ATTR,
- pPresentMembuf->getAttr<VOLTAGE_DOMAIN_ID_ATTR>(),
- TARGETING::get_huid(pPresentMembuf));
-
- fapi::Target membufFapiTarget(fapi::TARGET_TYPE_MEMBUF_CHIP,
- (const_cast<TARGETING::Target*>(pPresentMembuf)) );
-
- membufFapiTargetsList.push_back(membufFapiTarget);
- }
- // Otherwise need to bail, lest we increment the iterator again, which
- // is undefined
- else
- {
- break;
- }
- }
-
- if(pError)
- {
- break;
- }
-
- } while(0);
-
- TRACDCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "setMemoryVoltageDomainOffsetVoltage exit");
-
- return pError;
-}
-
-// helper function to call multiple mss_volt_hwps
-void call_mss_volt_hwp (std::vector<TARGETING::ATTR_VMEM_ID_type>& i_VmemList,
- TARGETING::TargetHandleList& i_membufTargetList,
- IStepError& io_StepError,
- fapi::ReturnCode(*mss_volt_hwp)(std::vector<fapi::Target>&))
-{
- errlHndl_t l_err;
- //for each unique VmemId filter it out of the list of membuf targets
- //to create a subsetlist of membufs with just that vmemid
- std::vector<TARGETING::ATTR_VMEM_ID_type>::iterator l_vmem_iter;
- for (l_vmem_iter = i_VmemList.begin();
- l_vmem_iter != i_VmemList.end();
- ++l_vmem_iter)
- {
- // declare a vector of fapi targets to pass to mss_volt procedures
- std::vector<fapi::Target> l_membufFapiTargets;
-
- for (TargetHandleList::const_iterator
- l_membuf_iter = i_membufTargetList.begin();
- l_membuf_iter != i_membufTargetList.end();
- ++l_membuf_iter)
- {
- // make a local copy of the target for ease of use
- const TARGETING::Target* l_membuf_target = *l_membuf_iter;
- if (l_membuf_target->getAttr<ATTR_VMEM_ID>()==*l_vmem_iter)
- {
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "===== add to fapi::Target vector vmem_id=0x%08X "
- "target HUID %.8X",
- l_membuf_target->getAttr<ATTR_VMEM_ID>(),
- TARGETING::get_huid(l_membuf_target));
-
- fapi::Target l_membuf_fapi_target(fapi::TARGET_TYPE_MEMBUF_CHIP,
- (const_cast<TARGETING::Target*>(l_membuf_target)) );
-
- l_membufFapiTargets.push_back( l_membuf_fapi_target );
- }
- }
-
- //now have the a list of fapi membufs with just the one VmemId
- //call the HWP on the list of fapi targets
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "===== mss_volt HWP( vector )" );
- //FAPI_INVOKE_HWP(l_err, p9_mss_volt, l_membufFapiTargets);
- //Remove when above HWP is working:
- FAPI_INVOKE_HWP(l_err, mss_volt, l_membufFapiTargets);
-
- // process return code.
- if ( l_err )
- {
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "ERROR 0x%.8X: mss_volt HWP( ) ",
- l_err->reasonCode());
-
- // Create IStep error log and cross reference to error that occurred
- io_StepError.addErrorDetails( l_err );
-
- // Commit Error
- errlCommit( l_err, HWPF_COMP_ID );
-
- }
- else
- {
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "SUCCESS : mss_volt_dimm_count HWP( )" );
- }
- }
-}
-
-//
-// Wrapper function to call mss_volt
-//
-void* call_mss_volt( void *io_pArgs )
-{
- errlHndl_t l_err = NULL;
-
- IStepError l_StepError;
-
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_volt entry" );
-
- // Check that VPP, DDR3 VDDR, and DDR4 VDDR _EFF_CONFIG attributes are set
- bool unused = false;
- set_eff_config_attrs_helper(DEFAULT, unused);
-
- TARGETING::TargetHandleList l_membufTargetList;
- getAllChips(l_membufTargetList, TYPE_MEMBUF);
-
- //get a list of unique VmemIds
- std::vector<TARGETING::ATTR_VMEM_ID_type> l_VmemList;
-
- //fapi Return Code
- fapi::ReturnCode l_fapirc;
-
- for (TargetHandleList::const_iterator
- l_membuf_iter = l_membufTargetList.begin();
- l_membuf_iter != l_membufTargetList.end();
- ++l_membuf_iter)
- {
- TARGETING::ATTR_VMEM_ID_type l_VmemID =
- (*l_membuf_iter)->getAttr<ATTR_VMEM_ID>();
- l_VmemList.push_back(l_VmemID);
-
- }
-
-#ifdef CONFIG_ALLOW_NON_COMPLIANT_DIMM
- // Set ATTR_MSS_VOLT_COMPLIANT_DIMMS to ALL
- // Value of ALL value in attribute enum
- uint8_t l_allowNonCompliantDimms =
- ENUM_ATTR_MSS_VOLT_COMPLIANT_DIMMS_ALL_VOLTAGES;
-
- TARGETING::Target* l_sys = NULL;
- targetService().getTopLevelTarget(l_sys);
- l_sys->setAttr<TARGETING::ATTR_MSS_VOLT_COMPLIANT_DIMMS>
- (l_allowNonCompliantDimms);
-
-#endif
-
-
-
- std::sort(l_VmemList.begin(), l_VmemList.end());
-
- std::vector<TARGETING::ATTR_VMEM_ID_type>::iterator objItr;
- objItr=std::unique(l_VmemList.begin(), l_VmemList.end());
- l_VmemList.erase(objItr,l_VmemList.end());
-
- //call mss_volt hwps
- call_mss_volt_hwp (l_VmemList, l_membufTargetList,l_StepError, mss_volt);
- call_mss_volt_hwp (l_VmemList, l_membufTargetList,l_StepError,
- mss_volt_dimm_count);
-
-
- l_err = setMemoryVoltageDomainOffsetVoltage<
- TARGETING::ATTR_MSS_CENT_VDD_OFFSET_DISABLE,
- TARGETING::ATTR_MEM_VDD_OFFSET_MILLIVOLTS,
- TARGETING::ATTR_VDD_ID>();
- if(l_err)
- {
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "ERROR 0x%08X: setMemoryVoltageDomainOffsetVoltage for VDD domain",
- l_err->reasonCode());
- l_StepError.addErrorDetails(l_err);
- errlCommit(l_err,HWPF_COMP_ID);
- }
-
- l_err = setMemoryVoltageDomainOffsetVoltage<
- TARGETING::ATTR_MSS_CENT_AVDD_OFFSET_DISABLE,
- TARGETING::ATTR_MEM_AVDD_OFFSET_MILLIVOLTS,
- TARGETING::ATTR_AVDD_ID>();
- if(l_err)
- {
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "ERROR 0x%08X: setMemoryVoltageDomainOffsetVoltage for AVDD domain",
- l_err->reasonCode());
- l_StepError.addErrorDetails(l_err);
- errlCommit(l_err,HWPF_COMP_ID);
- }
-
- l_err = setMemoryVoltageDomainOffsetVoltage<
- TARGETING::ATTR_MSS_CENT_VCS_OFFSET_DISABLE,
- TARGETING::ATTR_MEM_VCS_OFFSET_MILLIVOLTS,
- TARGETING::ATTR_VCS_ID>();
- if(l_err)
- {
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "ERROR 0x%08X: setMemoryVoltageDomainOffsetVoltage for VCS domain",
- l_err->reasonCode());
- l_StepError.addErrorDetails(l_err);
- errlCommit(l_err,HWPF_COMP_ID);
- }
-
- l_err = setMemoryVoltageDomainOffsetVoltage<
- TARGETING::ATTR_MSS_VOLT_VPP_OFFSET_DISABLE,
- TARGETING::ATTR_MEM_VPP_OFFSET_MILLIVOLTS,
- TARGETING::ATTR_VPP_ID>();
- if(l_err)
- {
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "ERROR 0x%08X: setMemoryVoltageDomainOffsetVoltage for VPP domain",
- l_err->reasonCode());
- l_StepError.addErrorDetails(l_err);
- errlCommit(l_err,HWPF_COMP_ID);
- }
-
- l_err = setMemoryVoltageDomainOffsetVoltage<
- TARGETING::ATTR_MSS_VOLT_VDDR_OFFSET_DISABLE,
- TARGETING::ATTR_MEM_VDDR_OFFSET_MILLIVOLTS,
- TARGETING::ATTR_VMEM_ID>();
- if(l_err)
- {
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "ERROR 0x%08X: setMemoryVoltageDomainOffsetVoltage for VDDR domain",
- l_err->reasonCode());
- l_StepError.addErrorDetails(l_err);
- errlCommit(l_err,HWPF_COMP_ID);
- }
-
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_volt exit" );
-
- return l_StepError.getErrorHandle();
-}
-/**
- * @brief - this utility function takes in the frequency in
- * ATTR_MRW_NEST_CAPABLE_FREQUENCIES_SYS and returns the corresponding
- * dmi bus speed from ATTR_MSS_NEST_CAPABLE_FREQUENCIES
- *
- * @param[in] i_freq - the input frequency
- * @param[in/out] io_speed - the corresponding dmi bus speed
- */
-void sysFreq_to_dmiSpeed(ATTR_MRW_NEST_CAPABLE_FREQUENCIES_SYS_type i_freq,
- ATTR_MSS_NEST_CAPABLE_FREQUENCIES_type & io_speed)
-{
- switch(i_freq)
- {
- case TARGETING::MRW_NEST_CAPABLE_FREQUENCIES_SYS_UNSUPPORTED_FREQ:
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,"Unsupported nest freq!");
- io_speed = 0;
- break;
- case TARGETING::MRW_NEST_CAPABLE_FREQUENCIES_SYS_2000_MHZ:
- io_speed=fapi::ENUM_ATTR_MSS_NEST_CAPABLE_FREQUENCIES_8_0G;
- break;
- case TARGETING::MRW_NEST_CAPABLE_FREQUENCIES_SYS_2400_MHZ:
- io_speed=fapi::ENUM_ATTR_MSS_NEST_CAPABLE_FREQUENCIES_9_6G;
- break;
- case TARGETING::MRW_NEST_CAPABLE_FREQUENCIES_SYS_2000_MHZ_OR_2400_MHZ:
- io_speed=fapi::ENUM_ATTR_MSS_NEST_CAPABLE_FREQUENCIES_8_0G_OR_9_6G;
- break;
- default:
- io_speed = 0;
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,"Invalid nest freq!");
- }
-}
-
-/**
- * @brief - this utility function takes in the dmi bus speed enumeration
- * value as described in MSS_NEST_CAPABLE_FREQUENCIES and outputs
- * the actual corresponding nest frequency in MHz supported by the
- * given dmi bus speed.
- *
- * @param[in] i_speed - the input dmi bus speed
- * @param[in/out] io_freq - the corresponding frequency in MHz
- *
- */
-void dmiSpeed_to_sysFreq(ATTR_MSS_NEST_CAPABLE_FREQUENCIES_type i_speed,
- ATTR_NEST_FREQ_MHZ_type & io_freq)
-{
- switch(i_speed)
- {
- case fapi::ENUM_ATTR_MSS_NEST_CAPABLE_FREQUENCIES_8_0G:
- io_freq = 2000;
- break;
- case fapi::ENUM_ATTR_MSS_NEST_CAPABLE_FREQUENCIES_9_6G:
- io_freq = 2400;
- break;
- default:
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, "Invalid dmi speed!");
- io_freq = 0;
- }
-}
-
-
-
-//
-// calloutChildDimms
-//
-void calloutChildDimms(errlHndl_t & io_errl, const TARGETING::Target * i_membuf)
-{
- TargetHandleList l_dimmList;
-
- // Get child dimms
- getChildAffinityTargets( l_dimmList,
- i_membuf,
- CLASS_NA,
- TYPE_DIMM );
-
- if( !l_dimmList.empty())
- {
- // iterate over the DIMMs and call them out
- TargetHandleList::iterator l_iter = l_dimmList.begin();
-
- for(;l_iter != l_dimmList.end(); ++l_iter)
- {
-
- io_errl->addHwCallout( *l_iter,
- HWAS::SRCI_PRIORITY_MED,
- HWAS::DELAYED_DECONFIG,
- HWAS::GARD_NULL );
- }
- }
- else
- {
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace, "No child DIMMs found!");
- }
-}
-
-
-/**
- * @brief - Recursive utility function for finding the min dmi
- * bus speed to run at based on the nest dmi bus speed
- * and the membuf's dmi bus speed
- *
- * @param[in] i_iter - Iterator over the list of membufs.
- * @param[in] i_membufs - Pointer to the list of membufs.
- * @param[in/out] io_currentMinSpeed - The speed to run at will be returned here
- * @param[in] i_capableNestDmiBusSpeed - The nest capable dmi bus speed.
- */
-void findMinSpdAndDeconfigIncompatible(TargetHandleList::iterator i_iter,
- TargetHandleList * i_membufs,
- ATTR_MSS_NEST_CAPABLE_FREQUENCIES_type & io_currentMinSpeed,
- ATTR_MSS_NEST_CAPABLE_FREQUENCIES_type i_capableNestDmiBusSpeed )
-{
- do
- {
- // Base Case: If we are at the end of the membuf list return
- if(i_iter == i_membufs->end())
- {
- // If the Minimum speed found across the nest and all membufs
- // can support multiple frequencies, we want to boot at the fastest
- // capable speed.
- if(io_currentMinSpeed ==
- fapi::ENUM_ATTR_MSS_NEST_CAPABLE_FREQUENCIES_8_0G_OR_9_6G)
- {
- // find the left most bit which represents the fastest
- // speed we are capable of running at
- io_currentMinSpeed = ALIGN_POW2_DOWN(io_currentMinSpeed);
- }
- else
- {
- // find the right most bit of the min speed found. This bit
- // represents the lowest dmi bus speed setting we can support
- // across the nest and all membufs and the speed we will boot with.
- io_currentMinSpeed = ALIGN_RIGHTMOST_POW2(io_currentMinSpeed);
- }
- break;
- }
-
- // Get the current membuf's dmi bus speed
- ATTR_MSS_NEST_CAPABLE_FREQUENCIES_type l_currentMembufSpd =
- (*i_iter)->getAttr<TARGETING::ATTR_MSS_NEST_CAPABLE_FREQUENCIES>();
-
- // update current min speed.
- // Min is restricted by nest capable dmi bus speed
- if(((l_currentMembufSpd & i_capableNestDmiBusSpeed) != 0) &&
- (l_currentMembufSpd < io_currentMinSpeed))
- {
- io_currentMinSpeed = l_currentMembufSpd;
- }
-
- //Save the current membuf for when we come back from recursive call.
- TARGETING::Target * l_currentMembuf = (*i_iter);
-
- // Recursive call to go down the list of membufs and find the min
- // capable dmi speed across the nest and membufs.
- findMinSpdAndDeconfigIncompatible(++i_iter,
- i_membufs,
- io_currentMinSpeed,
- i_capableNestDmiBusSpeed );
-
- // deconfigure any membufs with incompatible
- // speeds on the way up the stack
- if((l_currentMembufSpd & io_currentMinSpeed) == 0)
- {
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "Deconfiguring Membuf Huid: %X, membuf speed: %d",
- TARGETING::get_huid(l_currentMembuf),
- l_currentMembufSpd);
- // Membuf has incompatible frequency. Deconfigure it.
- /*@
- * @errortype
- * @moduleid MOD_FIND_MIN_DMI_SPD
- * @reasoncode RC_INVALID_FREQ
- * @userdata1 HUID of membuf
- * @userdata2 [0:7] membuf frequency enumeration value
- * @userdata2 [8:15] dmi bus speed enumeration value
- * @devdesc Invalid nest frequency found for given membuf
- * @custdesc Invalid memory configuration
- */
- errlHndl_t l_err = new ERRORLOG::ErrlEntry(
- ERRORLOG::ERRL_SEV_UNRECOVERABLE,
- fapi::MOD_FIND_MIN_DMI_SPD,
- fapi::RC_INVALID_FREQ,
- TARGETING::get_huid(l_currentMembuf),
- TO_UINT64(TWO_UINT8_TO_UINT16
- (l_currentMembufSpd,
- i_capableNestDmiBusSpeed)));
-
- l_err->addProcedureCallout(
- HWAS::EPUB_PRC_MEMORY_PLUGGING_ERROR,
- HWAS::SRCI_PRIORITY_HIGH );
-
-
- // add hw callouts for current membuf child DIMMs
- calloutChildDimms( l_err, l_currentMembuf );
-
- errlCommit( l_err, HWPF_COMP_ID );
- l_err = NULL;
- }
- }while( 0 );
-}
-
-
-//
-// setNestBasedOffDimms
-//
-errlHndl_t setNestBasedOffDimms()
-{
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, ENTER_MRK"mc_config::setNestBasedOffDimms()");
- errlHndl_t l_err = NULL;
- bool l_isGoldenSide = false;
- ATTR_MRW_NEST_CAPABLE_FREQUENCIES_SYS_type l_capableNestFreq =
- MRW_NEST_CAPABLE_FREQUENCIES_SYS_UNSUPPORTED_FREQ;
-
- ATTR_MSS_NEST_CAPABLE_FREQUENCIES_type l_selectedBootSpeed =
- fapi::ENUM_ATTR_MSS_NEST_CAPABLE_FREQUENCIES_8_0G_OR_9_6G;
-
- ATTR_MSS_NEST_CAPABLE_FREQUENCIES_type l_capableNestDmiBusSpeed =
- fapi::ENUM_ATTR_MSS_NEST_CAPABLE_FREQUENCIES_NONE;
-
- ATTR_MSS_NEST_CAPABLE_FREQUENCIES_type l_compatibleSpeed =
- fapi::ENUM_ATTR_MSS_NEST_CAPABLE_FREQUENCIES_NONE;
-
- ATTR_NEST_FREQ_MHZ_type l_minFreqMhz = 0;
-
- l_isGoldenSide = false;
-
- do
- {
- // First, get the systems capable nest frequency. If 0, then stick with
- // already set nest frequency
- TARGETING::Target * l_sys = NULL;
- targetService().getTopLevelTarget(l_sys);
-
- uint32_t l_currentSysNestFreq =
- l_sys->getAttr<TARGETING::ATTR_NEST_FREQ_MHZ>();
-
- // Check to see if we booted from the Golden side
- l_err = SBE::isGoldenSide(l_isGoldenSide);
-
- if(l_err)
- {
- // Error getting Golden side. Proceeding as if booting from safe Golden side
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- ERR_MRK"setNestBasedOffDimms::isGoldenSide returned an error");
- errlCommit( l_err, HWPF_COMP_ID );
- l_isGoldenSide = true;
- }
-
- if(!l_isGoldenSide)
- {
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- INFO_MRK"Booting from normal side. use "
- "MRW_NEST_CAPABLE_FREQUENCIES_SYS to calculate best freq "
- "across membufs");
- l_capableNestFreq = l_sys->getAttr
- <ATTR_MRW_NEST_CAPABLE_FREQUENCIES_SYS>();
- }
- else
- {
- // We booted using the Golden Side. Use NEST_FREQ_MHZ
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- INFO_MRK"Booting from Golden Side. Use default NEST_FREQ"
- "to calculate best freq across membufs");
- if(l_currentSysNestFreq == 2000)
- {
- l_capableNestFreq =
- TARGETING::MRW_NEST_CAPABLE_FREQUENCIES_SYS_2000_MHZ;
- }
- else if( l_currentSysNestFreq == 2400 )
- {
- l_capableNestFreq =
- TARGETING::MRW_NEST_CAPABLE_FREQUENCIES_SYS_2400_MHZ;
- }
- else
- {
- l_capableNestFreq =
- TARGETING::MRW_NEST_CAPABLE_FREQUENCIES_SYS_UNSUPPORTED_FREQ;
- }
-
- }
-
- // convert the frequency to its corresponding dmi bus speed
- sysFreq_to_dmiSpeed( l_capableNestFreq, l_capableNestDmiBusSpeed );
-
- if(!l_capableNestDmiBusSpeed)
- {
- // Unknown frequency was given to sysFreq_to_dmiSpeed
- // break out of function and proceed with value already in
- // ATTR_NEST_FREQ_MHZ
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,"Invalid dmi speed. Proceeding with default value in NEST_FREQ_MHZ.");
- break;
- }
-
- // Get a list of all the membufs
- TargetHandleList l_membufs;
- TARGETING::getAllChips(l_membufs, TYPE_MEMBUF);
- TargetHandleList::iterator l_iter = l_membufs.begin();
-
-
- // If the nest capable dmi bus speed can only support one setting,
- // that speed is the speed we want to boot with.
- // Deconfigure all membufs with incompatible speeds
- if(Util::Algorithm::isPow2(l_capableNestDmiBusSpeed))
- {
- // We are forced to boot with the nest freq.
- // Save boot freq for later.
- l_selectedBootSpeed = l_capableNestDmiBusSpeed;
-
-
- ATTR_MSS_NEST_CAPABLE_FREQUENCIES_type l_membufDmiBusSpeed = 0;
- for(;l_iter != l_membufs.end(); ++l_iter )
- {
- l_membufDmiBusSpeed = (*l_iter)->getAttr
- <TARGETING::ATTR_MSS_NEST_CAPABLE_FREQUENCIES>();
-
- // if the intersection of the membuf's and nest's dmi speed
- // is zero, the membuf is incompatible with the nest and must be
- // deconfigured.
- l_compatibleSpeed = l_membufDmiBusSpeed &
- l_capableNestDmiBusSpeed;
-
- if(l_compatibleSpeed ==
- fapi::ENUM_ATTR_MSS_NEST_CAPABLE_FREQUENCIES_NONE )
- {
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "Deconfiguring Membuf Huid: %X, membuf speed: %d",
- TARGETING::get_huid(*l_iter),
- l_membufDmiBusSpeed);
- // Membuf has incompatible frequency. Deconfigure it.
- /*@
- * @errortype
- * @moduleid MOD_SET_NEST_FREQ
- * @reasoncode RC_INVALID_FREQ
- * @userdata1 HUID of membuf
- * @userdata2 [0:7] membuf frequency enumeration value
- * @userdata2 [8:15] dmi bus speed enumeration value
- * @devdesc Invalid nest found for given membuf
- * @custdesc Invalid memory configuration
- */
- l_err = new ERRORLOG::ErrlEntry(
- ERRORLOG::ERRL_SEV_UNRECOVERABLE,
- fapi::MOD_SET_NEST_FREQ,
- fapi::RC_INVALID_FREQ,
- TARGETING::get_huid(*l_iter),
- TO_UINT64(TWO_UINT8_TO_UINT16
- (l_membufDmiBusSpeed,
- l_capableNestDmiBusSpeed)));
-
- // add hw callouts for current membufs child DIMMs
- calloutChildDimms( l_err, *l_iter);
-
- errlCommit( l_err, HWPF_COMP_ID );
- l_err = NULL;
- continue;
- }
-
- } // end for-loop
-
- }
- else
- {
- // The nest supports multiple frequencies. Find the min dmi bus
- // speed shared by the nest and at least 1 membuf and boot with that
- // speed.
- findMinSpdAndDeconfigIncompatible(l_iter,
- &l_membufs,
- l_selectedBootSpeed,
- l_capableNestDmiBusSpeed);
-
- }
-
- //Convert the selected boot speed to frequency
- dmiSpeed_to_sysFreq(l_selectedBootSpeed, l_minFreqMhz);
-
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "The max supported frequency across the processor and all dimms "
- "is %d", l_minFreqMhz );
-
- if( l_minFreqMhz == l_currentSysNestFreq)
- {
- //do nothing. go with current Nest freq, break.
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "Nest did not need to change. Proceeding with default NEST_FREQ");
- break;
- }
- else
- {
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "DIMM config determined NEST_FREQ needs to be changed to %d",
- l_minFreqMhz );
- //set all the attributes and trigger an sbe update
- TARGETING::setFrequencyAttributes(l_sys, l_minFreqMhz);
- //trigger sbe update so we can update all the frequency attributes
- l_err = SBE::updateProcessorSbeSeeproms(
- SBE::SBE_UPDATE_ONLY_CHECK_NEST_FREQ);
-
- if( l_err )
- {
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "Error triggering sbe update.");
- }
- }
- }while( 0 );
-
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "setNestBasedOffDimms exit" );
- return l_err;
-}
-//
-// Wrapper function to call mss_freq
-//
-void* call_mss_freq( void *io_pArgs )
-{
- errlHndl_t l_err = NULL;
-
- IStepError l_StepError;
-
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_freq entry" );
-
- 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)
- {
- // make a local copy of the target for ease of use
- const TARGETING::Target* l_membuf_target = *l_membuf_iter;
-
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "===== mss_freq HWP "
- "target HUID %.8X",
- TARGETING::get_huid(l_membuf_target));
-
- // call the HWP with each target ( if parallel, spin off a task )
- // $$const fapi::Target l_fapi_membuf_target(
- fapi::Target l_fapi_membuf_target(fapi::TARGET_TYPE_MEMBUF_CHIP,
- (const_cast<TARGETING::Target*>(l_membuf_target)) );
-
- //FAPI_INVOKE_HWP(l_err, p9_mss_freq, l_fapi_membuf_target);
- //Remove when above HWP is working:
- FAPI_INVOKE_HWP(l_err, mss_freq, l_fapi_membuf_target);
-
- // process return code.
- if ( l_err )
- {
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "ERROR 0x%.8X: mss_freq HWP ",
- l_err->reasonCode());
-
- // capture the target data in the elog
- ErrlUserDetailsTarget(l_membuf_target).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 );
-
- }
- else
- {
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "SUCCESS : mss_freq HWP");
- }
- } // End memBuf loop
-
- if(! INITSERVICE::spBaseServicesEnabled() )
- {
- //set nest frequency based off present membufs
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- INFO_MRK"Setting Nest Frequency based off Membuf capability.");
- l_err = setNestBasedOffDimms();
-
- if( l_err )
- {
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- ERR_MRK"Error: call_mss_freq()::setNestBasedOffDimms()");
- l_StepError.addErrorDetails(l_err);
- }
- }
-
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_freq exit" );
-
- return l_StepError.getErrorHandle();
-}
-
-errlHndl_t call_mss_eff_grouping()
-{
- errlHndl_t l_err = NULL;
-
- TARGETING::TargetHandleList l_procsList;
- getAllChips(l_procsList, TYPE_PROC);
-
- for (TargetHandleList::const_iterator
- l_proc_iter = l_procsList.begin();
- l_proc_iter != l_procsList.end();
- ++l_proc_iter)
- {
- // make a local copy of the target for ease of use
- const TARGETING::Target* l_cpu_target = *l_proc_iter;
-
- // print call to hwp and write HUID of the target(s)
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "===== mss_eff_grouping HWP cpu "
- "target HUID %.8X",
- TARGETING::get_huid(l_cpu_target));
-
- // cast OUR type of target to a FAPI type of target.
- const fapi::Target l_fapi_cpu_target(fapi::TARGET_TYPE_PROC_CHIP,
- (const_cast<TARGETING::Target*>(l_cpu_target)) );
-
- TARGETING::TargetHandleList l_membufsList;
- getChildAffinityTargets(l_membufsList, l_cpu_target,
- CLASS_CHIP, TYPE_MEMBUF);
- std::vector<fapi::Target> 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<TARGETING::Target*>(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);
- }
-
- //FAPI_INVOKE_HWP(l_err, p9_mss_eff_grouping,
- //l_fapi_cpu_target, l_associated_centaurs);
- //Remove when above HWP is working
- FAPI_INVOKE_HWP(l_err,mss_eff_grouping,
- l_fapi_cpu_target, l_associated_centaurs);
-
- // process return code.
- if ( l_err )
- {
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "ERROR 0x%.8X: mss_eff_grouping HWP",
- l_err->reasonCode());
-
- // capture the target data in the elog
- ErrlUserDetailsTarget(l_cpu_target).addToLog(l_err);
-
- break; // break out mba loop
- }
- else
- {
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "SUCCESS : mss_eff_grouping HWP");
- }
- } // endfor
-
- return l_err;
-}
-
-errlHndl_t call_opt_memmap( bool i_initBase )
-{
- errlHndl_t l_err = NULL;
-
- TARGETING::TargetHandleList l_procs;
- getAllChips(l_procs, TYPE_PROC);
-
- std::vector<fapi::Target> l_fapi_procs;
-
- for ( TARGETING::TargetHandleList::const_iterator
- l_iter = l_procs.begin();
- l_iter != l_procs.end();
- ++l_iter )
- {
- // make a local copy of the target for ease of use
- const TARGETING::Target* l_target = *l_iter;
-
- // cast OUR type of target to a FAPI type of target.
- const fapi::Target l_fapi_target(fapi::TARGET_TYPE_PROC_CHIP,
- (const_cast<TARGETING::Target*>(l_target)) );
-
- l_fapi_procs.push_back(l_fapi_target);
- }
-
- //FAPI_INVOKE_HWP(l_err, p9_opt_memmap, l_fapi_procs, i_initBase);
- //Remove when above HWP is working
- FAPI_INVOKE_HWP(l_err,opt_memmap, l_fapi_procs,i_initBase);
-
- if ( l_err )
- {
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "ERROR 0x%.8X: opt_memmap HWP", l_err->reasonCode());
- }
- else
- {
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "SUCCESS : opt_memmap HWP");
- }
-
- return l_err;
-}
-
-errlHndl_t call_mss_eff_mb_interleave()
-{
- errlHndl_t l_err = NULL;
-
- 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)
- {
- const TARGETING::Target* l_membuf_target = *l_membuf_iter;
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "===== Running mss_eff_mb_interleave HWP on HUID %.8X",
- TARGETING::get_huid(l_membuf_target));
- fapi::Target l_membuf_fapi_target(fapi::TARGET_TYPE_MEMBUF_CHIP,
- (const_cast<TARGETING::Target*>(l_membuf_target)) );
- FAPI_INVOKE_HWP(l_err, mss_eff_mb_interleave, l_membuf_fapi_target);
- if (l_err)
- {
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "ERROR 0x%.8X: mss_eff_mb_interleave HWP returns error",
- l_err->reasonCode());
- }
- else
- {
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "Successfully ran mss_eff_mb_interleave HWP on HUID %.8X",
- TARGETING::get_huid(l_membuf_target));
- }
- }
- return l_err;
-}
-
-
-//
-// Wrapper function to call mss_eff_config
-//
-void* call_mss_eff_config( void *io_pArgs )
-{
- errlHndl_t l_err = NULL;
- IStepError l_StepError;
-
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_eff_config entry" );
-
- TARGETING::Target* l_sys = NULL;
- targetService().getTopLevelTarget(l_sys);
- assert( l_sys != NULL );
-
- // The attribute ATTR_MEM_MIRROR_PLACEMENT_POLICY should already be
- // correctly set by default for all platforms except for sapphire.
- // Don't allow mirroring on sapphire yet @todo-RTC:108314
- //
- //ATTR_PAYLOAD_IN_MIRROR_MEM_type l_mirrored =
- // l_sys->getAttr<ATTR_PAYLOAD_IN_MIRROR_MEM>();
- //
- //if(l_mirrored && is_sapphire_load())
- //{
- // TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "Mirroring is enabled");
-
- // uint8_t l_mmPolicy =
- // fapi::ENUM_ATTR_MEM_MIRROR_PLACEMENT_POLICY_FLIPPED;
- // l_sys->
- // setAttr<TARGETING::ATTR_MEM_MIRROR_PLACEMENT_POLICY>(l_mmPolicy);
- //}
-
- // Get all functional MBA chiplets
- TARGETING::TargetHandleList l_mbaTargetList;
- getAllChiplets(l_mbaTargetList, TYPE_MBA);
-
- // Iterate over all MBAs, calling mss_eff_config and mss_eff_config_thermal
- for (TargetHandleList::const_iterator l_mba_iter = l_mbaTargetList.begin();
- l_mba_iter != l_mbaTargetList.end(); ++l_mba_iter)
- {
- // Get the TARGETING::Target pointer and its HUID
- const TARGETING::Target* l_mba_target = *l_mba_iter;
- uint32_t l_huid = TARGETING::get_huid(l_mba_target);
-
- // Create a FAPI target representing the MBA
- const fapi::Target l_fapi_mba_target(fapi::TARGET_TYPE_MBA_CHIPLET,
- (const_cast<TARGETING::Target*>(l_mba_target)));
-
- // Call the mss_eff_config_vpd_decode HWP
- //FAPI_INVOKE_HWP(l_err,p9_mss_eff_config_vpd_decode,
- //l_fapi_mba_target);
-
- // Call the mss_eff_config HWP
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "===== mss_eff_config HWP. MBA HUID %.8X", l_huid);
- //FAPI_INVOKE_HWP(l_err, p9_mss_eff_config, l_fapi_mba_target);
- //Remove when above HWP is working:
- FAPI_INVOKE_HWP(l_err, mss_eff_config, l_fapi_mba_target);
-
- if (l_err)
- {
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "ERROR 0x%.8X: mss_eff_config HWP ", l_err->reasonCode());
-
- // Ensure istep error created and has same plid as this error
- ErrlUserDetailsTarget(l_mba_target).addToLog(l_err);
- l_StepError.addErrorDetails(l_err);
- errlCommit(l_err, HWPF_COMP_ID);
- }
- else
- {
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "SUCCESS : mss_eff_config HWP");
-
- // Call the mss_eff_config_thermal HWP
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "===== mss_eff_config_thermal HWP. MBA HUID %.8X", l_huid);
- //FAPI_INVOKE_HWP(l_err, p9_mss_eff_config_thermal,
- //l_fapi_mba_target);
-
- if (l_err)
- {
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "ERROR 0x%.8X: mss_eff_config_thermal HWP ", l_err->reasonCode());
-
- // Ensure istep error created and has same plid as this error
- ErrlUserDetailsTarget(l_mba_target).addToLog(l_err);
- l_StepError.addErrorDetails(l_err);
- errlCommit(l_err, HWPF_COMP_ID);
- }
- else
- {
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "SUCCESS : mss_eff_config_thermal HWP");
- }
- }
- }
-
- if (l_StepError.isNull())
- {
- // Flush out BASE attributes to starting values
- l_err = call_opt_memmap(true);
-
- if (!l_err)
- {
- // Stack the memory on each chip
- l_err = call_mss_eff_grouping();
-
- if (!l_err)
- {
- // Move the BASES around to the real final values
- l_err = call_opt_memmap(false);
-
- if (!l_err)
- {
- // Stack the memory again based on system-wide positions
- l_err = call_mss_eff_grouping();
-
- /*if(!l_err) //Cumulus only
- {
- l_err = call_mss_eff_mb_interleave();
- }*/
-
- }
- }
- }
-
- if (l_err)
- {
- // Ensure istep error created and has same plid as this error
- l_StepError.addErrorDetails( l_err );
- errlCommit( l_err, HWPF_COMP_ID );
- }
- }
-
- // Calling mss_eff_mb_interleave
- if (l_StepError.isNull())
- {
- l_err = call_mss_eff_mb_interleave();
- if(l_err)
- {
- l_StepError.addErrorDetails(l_err);
- errlCommit( l_err, HWPF_COMP_ID );
- }
- }
-
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_eff_config exit" );
-
- return l_StepError.getErrorHandle();
-}
-//
-// Wrapper function to call mss_attr_update
-//
-void* call_mss_attr_update( void *io_pArgs )
-{
-
- IStepError l_StepError;
- errlHndl_t l_err = NULL;
-
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_attr_update entry");
- //FAPI_INVOKE_HWP(l_err, p9_mss_attr_update);
- if(l_err)
- {
- l_StepError.addErrorDetails(l_err);
- errlCommit( l_err, HWPF_COMP_ID );
- }
-
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_attr_update exit" );
-
- return l_StepError.getErrorHandle();
-}
-
-
-
-}; // end namespace
diff --git a/src/usr/hwpf/hwp/mc_config/mc_config.H b/src/usr/hwpf/hwp/mc_config/mc_config.H
deleted file mode 100644
index 8e53cdbd1..000000000
--- a/src/usr/hwpf/hwp/mc_config/mc_config.H
+++ /dev/null
@@ -1,214 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG */
-/* This is an automatically generated prolog. */
-/* */
-/* $Source: src/usr/hwpf/hwp/mc_config/mc_config.H $ */
-/* */
-/* OpenPOWER HostBoot Project */
-/* */
-/* Contributors Listed Below - COPYRIGHT 2012,2015 */
-/* [+] International Business Machines Corp. */
-/* */
-/* */
-/* Licensed under the Apache License, Version 2.0 (the "License"); */
-/* you may not use this file except in compliance with the License. */
-/* You may obtain a copy of the License at */
-/* */
-/* http://www.apache.org/licenses/LICENSE-2.0 */
-/* */
-/* Unless required by applicable law or agreed to in writing, software */
-/* distributed under the License is distributed on an "AS IS" BASIS, */
-/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
-/* implied. See the License for the specific language governing */
-/* permissions and limitations under the License. */
-/* */
-/* IBM_PROLOG_END_TAG */
-#ifndef __MC_CONFIG_MC_CONFIG_H
-#define __MC_CONFIG_MC_CONFIG_H
-
-/**
- * @file mc_config.H
- *
- * Step 12 MC Config
- *
- * All of the following routines are "named isteps" - they are invoked as
- * tasks by the @ref IStepDispatcher.
- *
- * *****************************************************************
- * THIS FILE WAS GENERATED ON 2012-03-01:1032
- * *****************************************************************
- *
- * HWP_IGNORE_VERSION_CHECK
- *
- */
-
-/* @tag isteplist
- * @docversion v1.28 (12/03/12)
- * @istepname mc_config
- * @istepnum 12
- * @istepdesc Step 12 MC Config
- *
- * @{
- * @substepnum 1
- * @substepname host_collect_dimm_spd
- * @substepdesc : Collect Master dimm SPD
- * @target_sched serial
- * @}
- * @{
- * @substepnum 2
- * @substepname mss_volt
- * @substepdesc : Calc dimm voltage
- * @target_sched serial
- * @}
- * @{
- * @substepnum 3
- * @substepname mss_freq
- * @substepdesc : Calc dimm frequency
- * @target_sched serial
- * @}
- * @{
- * @substepnum 4
- * @substepname mss_eff_config
- * @substepdesc : Determine effective config
- * @target_sched serial
- * @}
- */
-/******************************************************************************/
-// Includes
-/******************************************************************************/
-#include <stdint.h>
-#include <errl/errlentry.H>
-namespace MC_CONFIG
-{
-
-
-
-/**
- * @brief host_collect_dimm_spd
- *
- * Collect Master dimm SPD
- *
- * param[in,out] io_pArgs - (normally) a pointer to a TaskArgs struct,
- * or NULL.
- * return any error logs to istep
- *
- */
-void* call_host_collect_dimm_spd( void * io_pArgs );
-
-/**
- * @brief For a given memory voltage domain, program the domain's offset
- * voltage if this behavior is enabled, otherwise program 0
- *
- * @tparam OFFSET_DISABLEMENT_ATTR
- * ID of the attribute to read to determine if a given memory voltage
- * domain offset voltage should be applied or not. Should be one of
- * the TARGETING::ATTR_*_ID attribute IDs, where * = VMEM, VPP, VCS,
- * VDD, or AVDD.
- *
- * @tparam OFFSET_VOLTAGE_ATTR
- * ID of the attribute to receive the given voltage domain's offset voltage
- * value. Should be one of the TARGETING::ATTR_MEM_*_OFFSET_MILLIVOLTS
- * attribute IDs, where * = VMEM, VPP, VCS, VDD, or AVDD. Only set to
- * non-zero when memory voltage domain's offset voltage is enabled.
- *
- * @tparam VOLTAGE_DOMAIN_ID_ATTR
- * ID of the attribute which should be read to obtain the given memory
- * voltage domain's ID. IDs are only unique within the same memory voltage
- * domain type. Must be one of the ATTR_*_ID attributes, where * = VPP,
- * AVDD, VMEM, VDD, VCS.
- *
- * @note: This function does not ensure that all permutations of the above
- * template parameters are valid.
- *
- * @return Error log handle indicating the status of the request.
- *
- * @retval NULL Offset voltage successfully programmed or set to 0
- * @retval Failed setting correct offset voltage
- */
-template< const TARGETING::ATTRIBUTE_ID OFFSET_DISABLEMENT_ATTR,
- const TARGETING::ATTRIBUTE_ID OFFSET_VOLTAGE_ATTR,
- const TARGETING::ATTRIBUTE_ID VOLTAGE_DOMAIN_ID_ATTR >
-errlHndl_t setMemoryVoltageDomainOffsetVoltage();
-
-/**
- * @brief mss_volt
- *
- * Calc dimm voltage
- *
- * param[in,out] io_pArgs - (normally) a pointer to a TaskArgs struct,
- * or NULL.
- * return any error logs to istep
- *
- */
-void* call_mss_volt( void * io_pArgs );
-
-
-
-/**
- * @brief mss_freq
- *
- * Calc dimm frequency
- *
- * param[in,out] io_pArgs - (normally) a pointer to a TaskArgs struct,
- * or NULL.
- * return any error logs to istep
- *
- */
-void* call_mss_freq( void * io_pArgs );
-
-
-
-/**
- * @brief mss_eff_config
- *
- * Determine effective config
- *
- * param[in,out] io_pArgs - (normally) a pointer to a TaskArgs struct,
- * or NULL.
- * return any error logs to istep
- *
- */
-void* call_mss_eff_config( void * io_pArgs );
-
-/**
- * @brief mss_attr_update
- *
- * Stub HWP to allow FW to override attributes programmatically
- *
- * param[in,out] io_pArgs - (normally) a pointer to a TaskArgs struct,
- * or NULL.
- * return any error logs to istep
- *
- */
-void* call_mss_attr_update( void *io_pArgs );
-
-
-/**
- * @brief Enum specifying what attributes should be used to set the
- * memory _EFF_CONFIG attributes
- *
- */
-enum EFF_CONFIG_ATTRIBUTES_BASE
-{
- DEFAULT = 0x00, ///< Use System Defaults
- POST_DRAM_INIT = 0x01, ///< Use POST_DRAM_INIT attributes if non-zero
-};
-
-
-/**
- * @brief Helper function to set memory _EFF_CONFIG attributes for HWPs
- *
- * param[in] i_base - Determines base of EFF_CONFIG attributes values
- *
- * param[out] o_post_dram_inits_found - if i_base==POST_DRAM_INIT and
- * POST_DRAM_INIT attributes were
- * found return TRUE;
- * else, return FALSE
- */
-void set_eff_config_attrs_helper( const EFF_CONFIG_ATTRIBUTES_BASE i_base,
- bool & o_post_dram_inits_found);
-
-
-}; // end namespace
-
-#endif
-
diff --git a/src/usr/hwpf/hwp/mc_config/mss_attr_cleanup/mss_attr_cleanup.C b/src/usr/hwpf/hwp/mc_config/mss_attr_cleanup/mss_attr_cleanup.C
deleted file mode 100644
index 032737b3e..000000000
--- a/src/usr/hwpf/hwp/mc_config/mss_attr_cleanup/mss_attr_cleanup.C
+++ /dev/null
@@ -1,231 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG */
-/* This is an automatically generated prolog. */
-/* */
-/* $Source: src/usr/hwpf/hwp/mc_config/mss_attr_cleanup/mss_attr_cleanup.C $ */
-/* */
-/* OpenPOWER HostBoot Project */
-/* */
-/* Contributors Listed Below - COPYRIGHT 2013,2014 */
-/* [+] International Business Machines Corp. */
-/* */
-/* */
-/* Licensed under the Apache License, Version 2.0 (the "License"); */
-/* you may not use this file except in compliance with the License. */
-/* 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 */
-// $Id: mss_attr_cleanup.C,v 1.3 2014/02/19 13:41:22 bellows Exp $
-// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/centaur/working/procedures/ipl/fapi/mss_attr_cleanup.C,v $
-//------------------------------------------------------------------------------
-// *! (C) Copyright International Business Machines Corp. 2012
-// *! All Rights Reserved -- Property of IBM
-// *! *** ***
-//------------------------------------------------------------------------------
-// *! TITLE : mss_attr_cleanup
-// *! DESCRIPTION : see additional comments below
-// *! OWNER NAME : Mark Bellows Email: bellows@us.ibm.com
-// *! BACKUP NAME : Anuwat Saetow Email: asaetow@us.ibm.com
-
-// *! ADDITIONAL COMMENTS :
-//
-// clean up any centaur and mba attributes if a centaur is not in the system.
-// The main attributes are the ones relating to grouping - other attributes may have settings
-// but aren't going to be used by initfiles
-//
-// There is a sub function that cleans up an mba that needs to be called if we deconfigure an mba
-// this procedure writes attributes and write hardware
-//
-//------------------------------------------------------------------------------
-// Don't forget to create CVS comments when you check in your changes!
-//------------------------------------------------------------------------------
-// CHANGE HISTORY:
-//------------------------------------------------------------------------------
-// Version:| Author: | Date: | Comment:
-//---------|----------|---------|-----------------------------------------------
-// 1.3 | bellows |17-FEB-14| RAS Review Comments
-// 1.2 | bellows |11-NOV-13| Gerrit Review Comments
-// 1.1 | bellows |28-NOV-12| First Draft. Functions implemented
-//------------------------------------------------------------------------------
-
-
-//------------------------------------------------------------------------------
-// My Includes
-//------------------------------------------------------------------------------
-#include <mss_attr_cleanup.H>
-#include <cen_scom_addresses.H>
-#include <mss_eff_config.H>
-
-//------------------------------------------------------------------------------
-// Includes
-//------------------------------------------------------------------------------
-#include <fapi.H>
-
-//------------------------------------------------------------------------------
-// Constants
-//------------------------------------------------------------------------------
-
-const uint8_t PORT_SIZE = 2;
-const uint8_t DIMM_SIZE = 2;
-
-
-//------------------------------------------------------------------------------
-// extern encapsulation
-//------------------------------------------------------------------------------
-extern "C"
-{
-
-//------------------------------------------------------------------------------
-// @brief mss_attr_cleanup(): This function will disable a centaur - fencing it and powering it down
-//
-// @param const fapi::Target i_target_centaur: the fapi target of the centaur
-// @param const fapi::Target i_target_mba0: the mba0 target
-// @param const fapi::Target i_target_mba1: the mba1 target
-//
-// @return fapi::ReturnCode
-//------------------------------------------------------------------------------
- fapi::ReturnCode mss_attr_cleanup(const fapi::Target & i_target_centaur, const fapi::Target & i_target_mba0, const fapi::Target & i_target_mba1)
- {
- fapi::ReturnCode rc;
-
- FAPI_INF("Running mss_attr_cleanup on %s\n", i_target_centaur.toEcmdString());
-
- do
- {
-
- rc = mss_attr_cleanup_mba_attributes(i_target_mba0);
- if(rc) break;
- rc = mss_attr_cleanup_mba_attributes(i_target_mba1);
- if(rc) break;
-
- /* need to add code that fences and centaur and powers off clocks */
- } while(0);
-
- return rc;
- } // end mss_attr_cleanup()
-
-
- fapi::ReturnCode mss_attr_cleanup_mba_attributes(const fapi::Target & i_target_mba)
- {
- // turn off functional vector
- fapi::ReturnCode rc;
- uint8_t dimm_functional_vector=0x00; // ready to set all DIMMs to non functional
- uint8_t mba_functional;
- uint8_t eff_dimm_size[PORT_SIZE][DIMM_SIZE];
- int i,j;
- uint8_t dimm_ranks[PORT_SIZE][DIMM_SIZE]; // Number of ranks for each configured DIMM in each MBA
- uint8_t dimm_type;
- uint8_t spd_dimm_ranks[PORT_SIZE][DIMM_SIZE];
- uint8_t module_type = fapi::ENUM_ATTR_EFF_DIMM_TYPE_UDIMM;
- uint8_t custom = fapi::ENUM_ATTR_SPD_CUSTOM_YES;
- uint8_t mba_port;
- uint8_t mba_dimm;
-
- do
- {
- rc = FAPI_ATTR_GET(ATTR_FUNCTIONAL, &i_target_mba, mba_functional);
- if(rc) break;
-
- if(! mba_functional )
- {
-
-// read in some SPD attributes that are used in thermal (non functional DIMM/MBA, yet uses power)
-// we do this because we are cleaning up a DIMM that may not be functional any more due to whatever reason
- std::vector<fapi::Target> target_dimm_array;
- rc = fapiGetAssociatedDimms(i_target_mba, target_dimm_array);
- if(rc) break;
-
- for (uint8_t dimm_index = 0; dimm_index <
- target_dimm_array.size(); dimm_index += 1)
- {
- rc = FAPI_ATTR_GET(ATTR_MBA_PORT, &target_dimm_array[dimm_index], mba_port);
- if(rc) break;
- rc = FAPI_ATTR_GET(ATTR_MBA_DIMM, &target_dimm_array[dimm_index], mba_dimm);
- if(rc) break;
-
- if(mba_port == 0 && mba_dimm == 0)
- {
- rc = FAPI_ATTR_GET(ATTR_SPD_CUSTOM, &target_dimm_array[dimm_index], custom);
- if (rc) break;
-
- rc = FAPI_ATTR_GET(ATTR_SPD_MODULE_TYPE, &target_dimm_array[dimm_index], module_type);
- if(rc) break;
- }
- //should there be an else check that leads to HWP error?
-
- rc = FAPI_ATTR_GET(ATTR_SPD_NUM_RANKS, &target_dimm_array[dimm_index], spd_dimm_ranks[mba_port][mba_dimm]);
- if(rc) break;
- }
-
- // now szap the functional vector and dimm_size
- rc = FAPI_ATTR_SET(ATTR_MSS_EFF_DIMM_FUNCTIONAL_VECTOR, &i_target_mba,
- dimm_functional_vector);
- if (rc) break;
-
- for(i=0;i<PORT_SIZE;i++)
- {
- for(j=0;j<DIMM_SIZE;j++)
- {
- eff_dimm_size[i][j]=0;
- switch (spd_dimm_ranks[i][j])
- {
- case fapi::ENUM_ATTR_SPD_NUM_RANKS_R4:
- dimm_ranks[i][j]=4;
- break;
- case fapi::ENUM_ATTR_SPD_NUM_RANKS_R2:
- dimm_ranks[i][j]=2;
- break;
- case fapi::ENUM_ATTR_SPD_NUM_RANKS_R1:
- dimm_ranks[i][j]=1;
- break;
- default:
- dimm_ranks[i][j]=0;
- break;
- }
- switch(module_type)
- {
- case fapi::ENUM_ATTR_SPD_MODULE_TYPE_RDIMM:
- dimm_type = fapi::ENUM_ATTR_EFF_DIMM_TYPE_RDIMM;
- break;
- case fapi::ENUM_ATTR_SPD_MODULE_TYPE_UDIMM:
- dimm_type = fapi::ENUM_ATTR_EFF_DIMM_TYPE_UDIMM;
- break;
- case fapi::ENUM_ATTR_SPD_MODULE_TYPE_LRDIMM:
- dimm_type = fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM;
- break;
- default:
- FAPI_INF("DIMM type set to %d on %s", fapi::ENUM_ATTR_EFF_DIMM_TYPE_UDIMM, i_target_mba.toEcmdString());
- dimm_type = fapi::ENUM_ATTR_EFF_DIMM_TYPE_UDIMM;
- break;
- }
- }
- }
- rc = FAPI_ATTR_SET(ATTR_EFF_DIMM_SIZE, &i_target_mba, eff_dimm_size);
- if (rc) break;
-
- rc = FAPI_ATTR_SET(ATTR_EFF_NUM_RANKS_PER_DIMM, &i_target_mba, dimm_ranks);
- if (rc) break;
-
- rc = FAPI_ATTR_SET(ATTR_EFF_DIMM_TYPE, &i_target_mba, dimm_type);
- if (rc) break;
-
- }
- else
- { // reenable -reverse everything
-
- }
- } while(0);
-
- if(rc) { FAPI_ERR("ERROR: Bad RC in mss_attr_cleanup_mba_attributes"); }
- return rc;
- } // end of mss_attr_cleanup_mba_attributes
-
-} // extern "C"
-
diff --git a/src/usr/hwpf/hwp/mc_config/mss_attr_cleanup/mss_attr_cleanup.H b/src/usr/hwpf/hwp/mc_config/mss_attr_cleanup/mss_attr_cleanup.H
deleted file mode 100644
index f56b63f3a..000000000
--- a/src/usr/hwpf/hwp/mc_config/mss_attr_cleanup/mss_attr_cleanup.H
+++ /dev/null
@@ -1,87 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG */
-/* This is an automatically generated prolog. */
-/* */
-/* $Source: src/usr/hwpf/hwp/mc_config/mss_attr_cleanup/mss_attr_cleanup.H $ */
-/* */
-/* OpenPOWER HostBoot Project */
-/* */
-/* Contributors Listed Below - COPYRIGHT 2013,2014 */
-/* [+] International Business Machines Corp. */
-/* */
-/* */
-/* Licensed under the Apache License, Version 2.0 (the "License"); */
-/* you may not use this file except in compliance with the License. */
-/* 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 */
-// $Id: mss_attr_cleanup.H,v 1.3 2014/02/19 13:41:26 bellows Exp $
-// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/centaur/working/procedures/ipl/fapi/mss_attr_cleanup.H,v $
-//------------------------------------------------------------------------------
-// *! (C) Copyright International Business Machines Corp. 2013
-// *! All Rights Reserved -- Property of IBM
-// *! *** ***
-//------------------------------------------------------------------------------
-// *! TITLE : mss_attr_cleanup.H
-// *! DESCRIPTION : Header file for mss_attr_cleanup.
-// *! OWNER NAME : Mark Bellows Email: bellows@us.ibm.com
-// *! BACKUP NAME : Anuwat Saetow Email: asaetow@us.ibm.com
-// *! ADDITIONAL COMMENTS :
-//
-//
-//
-//------------------------------------------------------------------------------
-// Don't forget to create CVS comments when you check in your changes!
-//------------------------------------------------------------------------------
-// CHANGE HISTORY:
-//------------------------------------------------------------------------------
-// Version:| Author: | Date: | Comment:
-//---------|----------|---------|-----------------------------------------------
-// 1.3 | bellows |19-FEB-14| RAS Review Updates
-// 1.2 | bellows |11-NOV-13| Gerrit Review Comments
-// 1.1 | bellows |13-JUN-13| First Draft
-//------------------------------------------------------------------------------
-
-
-#ifndef MSS_ATTR_CLEANUP_H_
-#define MSS_ATTR_CLEANUP_H_
-
-//------------------------------------------------------------------------------
-// My Includes
-//------------------------------------------------------------------------------
-
-//------------------------------------------------------------------------------
-// Includes
-//------------------------------------------------------------------------------
-#include <fapi.H>
-
-typedef fapi::ReturnCode (*mss_attr_cleanup_FP_t)(const fapi::Target & i_target_centaur,
- const fapi::Target & i_target_mba0, const fapi::Target & i_target_mba1);
-
-extern "C" {
-
-//------------------------------------------------------------------------------
-// @brief mss_attr_cleanup(): Clean up attributes of a centaur and also MBAs,
-//
-// @param const fapi::Target i_target_centaur: the centaur
-// @param const fapi::Target i_target_mba0: the mba0
-// @param const fapi::Target i_target_mba1: the mba1
-//
-// @return fapi::ReturnCode
-//------------------------------------------------------------------------------
-fapi::ReturnCode mss_attr_cleanup(const fapi::Target & i_target_centaur,
- const fapi::Target & i_target_mba0, const fapi::Target & i_target_mba1);
-
-
-fapi::ReturnCode mss_attr_cleanup_mba_attributes(const fapi::Target & i_target_mba);
-} // extern "C"
-
-#endif // MSS_ATTR_CLEANUP_H
-
diff --git a/src/usr/hwpf/hwp/mc_config/mss_eff_mb_interleave/memory_mss_eff_mb_interleave.xml b/src/usr/hwpf/hwp/mc_config/mss_eff_mb_interleave/memory_mss_eff_mb_interleave.xml
deleted file mode 100755
index 51785c9c4..000000000
--- a/src/usr/hwpf/hwp/mc_config/mss_eff_mb_interleave/memory_mss_eff_mb_interleave.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<!-- IBM_PROLOG_BEGIN_TAG -->
-<!-- This is an automatically generated prolog. -->
-<!-- -->
-<!-- $Source: src/usr/hwpf/hwp/mc_config/mss_eff_mb_interleave/memory_mss_eff_mb_interleave.xml $ -->
-<!-- -->
-<!-- OpenPOWER HostBoot Project -->
-<!-- -->
-<!-- COPYRIGHT International Business Machines Corp. 2014 -->
-<!-- -->
-<!-- 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 -->
-<hwpErrors>
-<!-- $Id: memory_mss_eff_mb_interleave.xml,v 1.2 2014/02/18 20:20:15 bellows Exp $ -->
-<!-- For file ../../ipl/fapi/mss_mss_eff_mb_interleave.C -->
-<!-- // *! OWNER NAME : Mark Bellows (bellows@us.ibm.com) -->
-<!-- // *! BACKUP NAME : -->
-
-<hwpError>
- <rc>RC_MSS_EFF_MB_INTERLEAVE_PLUG_DECONFIG_DIMM</rc>
- <description>This DIMM violated a plugging rules for MBA interleaving.</description>
- <deconfigure><target>DIMM</target></deconfigure>
- <ffdc>CASE</ffdc>
-</hwpError>
-
-</hwpErrors>
diff --git a/src/usr/hwpf/hwp/mc_config/mss_eff_mb_interleave/mss_eff_mb_interleave.C b/src/usr/hwpf/hwp/mc_config/mss_eff_mb_interleave/mss_eff_mb_interleave.C
deleted file mode 100755
index 4de7937d8..000000000
--- a/src/usr/hwpf/hwp/mc_config/mss_eff_mb_interleave/mss_eff_mb_interleave.C
+++ /dev/null
@@ -1,529 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG */
-/* This is an automatically generated prolog. */
-/* */
-/* $Source: src/usr/hwpf/hwp/mc_config/mss_eff_mb_interleave/mss_eff_mb_interleave.C $ */
-/* */
-/* OpenPOWER HostBoot Project */
-/* */
-/* Contributors Listed Below - COPYRIGHT 2014 */
-/* [+] International Business Machines Corp. */
-/* */
-/* */
-/* Licensed under the Apache License, Version 2.0 (the "License"); */
-/* you may not use this file except in compliance with the License. */
-/* 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 */
-// $Id: mss_eff_mb_interleave.C,v 1.7 2014/02/26 21:47:44 thi Exp $
-// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/centaur/working/procedures/ipl/fapi/mss_eff_mb_interleave.C,v $
-//------------------------------------------------------------------------------
-// *! (C) Copyright International Business Machines Corp. 2014
-// *! All Rights Reserved -- Property of IBM
-// *! *** ***
-// *! Licensed material - Program property of IBM
-// *! Refer to copyright instructions form no. G120-2083
-// *! Created on Wed Jan 8 2014 at 07:56:26
-//------------------------------------------------------------------------------
-// *! TITLE : mss_eff_mb_interleave
-// *! DESCRIPTION : Set up centaur internal interleaving (between mba's)
-// *| Checks and Sets ATTR_MSS_DERIVED_MBA_CACHELINE_INTERLEAVE_MODE
-// *| ATTR_MSS_DERIVED_MBA_ADDR_INTERLEAVE_BIT
-// *|
-// *! OWNER NAME : Bellows Mark D. (Mark D),319432 Email: bellows@us.ibm.com
-// *! BACKUP NAME : Email: ______@us.ibm.com
-
-// *! ADDITIONAL COMMENTS :
-//
-//------------------------------------------------------------------------------
-// Don't forget to create CVS comments when you check in your changes!
-//------------------------------------------------------------------------------
-// CHANGE HISTORY:
-//------------------------------------------------------------------------------
-// Version:| Author: | Date: | Comment:
-//---------|----------|---------|-----------------------------------------------
-// 1.7 | thi |26-FEB-14| Add explanation for 1.6 in this header
-// 1.6 | thi |26-FEB-14| Add rc checking for attribute get
-// 1.5 | bellows |21-FEB-14| Move interleave rule checkking to system level
-// 1.4 | bellows |19-FEB-14| More RAS updates
-// 1.3 | bellows |17-FEB-14| Additional RAS review updates
-// 1.2 | bellows |14-FEB-14| Revamped Plug checking, RAS Review pass #1 comments added
-// 1.1 | bellows |08-JAN-14| Created.
-
-#include <mss_eff_mb_interleave.H>
-#include <fapi.H>
-
-extern "C" {
-
- enum DECONFIG_TYPES { DECONFIG_PORT_1_SLOT_0_IS_EMPTY_PORT_0_SLOT_0_IS_NOT=0,
- DECONFIG_PORT_1_SLOT_0_IS_NOT_EQUAL_TO_PORT_0_SLOT_0_A=1,
- DECONFIG_PORT_1_SLOT_0_IS_NOT_EQUAL_TO_PORT_0_SLOT_0_B=2,
- DECONFIG_PORT_0_SLOT_1_DECONFIGURED_BECAUSE_PORT_0_SLOT_0_WAS_DECONFIGURED=3,
- DECONFIG_PORT_1_SLOT_1_DECONFIGURED_BECAUSE_PORT_0_SLOT_0_WAS_DECONFIGURED=4,
- DECONFIG_PORT_0_SLOT_1_DECONFIGURED_BECAUSE_PORT_1_SLOT_1_IS_NOT_EQUAL=5,
- DECONFIG_PORT_1_SLOT_1_DECONFIGURED_BECAUSE_PORT_0_SLOT_1_IS_NOT_EQAUL=6,
- DECONFIG_PORT_0_SLOT_1_DECONFIGURED_BECAUSE_PORT_0_SLOT_0_IS_NOT_EQUAL=7,
- DECONFIG_PORT_1_SLOT_1_DECONFIGURED_BECAUSE_PORT_0_SLOT_0_IS_NOT_EQUAL=8,
- DECONFIG_PORT_0_SLOT_1_DECONFIGURED_BECAUSE_PORT_1_SLOT_1_IS_NOT_VALID=9,
- DECONFIG_PORT_1_SLOT_1_DECONFIGURED_BECAUSE_PORT_0_SLOT_1_IS_NOT_VALID=10,
- DECONFIG_PORT_1_HAS_SOMETHING_BUT_PORT_0_SLOT_0_IS_EMPTY=11,
- DECONFIG_PORT_0_SLOT_1_HAS_SOMETHING_BUT_PORT_0_SLOT_0_IS_EMPTY=12,
- DECONFIG_SLOT_1_HAS_SOMETHING_BUT_PORT_0_SLOT_0_IS_EMPTY=13,
- DECONFIG_INTERLEAVE_MODE_CONTROL_IS_REQUIRED=99 };
-
-
- const uint8_t MSS_MBA_ADDR_INTERLEAVE_BIT = 24; // From Eric Retter:
- // the prefetch and cleaner assume that bit 24 is the interleave bit.
- // We put other interleave options in for other settings that could be
- // tried in performance testing
-
- using namespace fapi;
-
- class mss_eff_mb_dimm {
- public:
- uint8_t module_type;
- uint8_t dram_gen;
- uint8_t device_density;
- uint8_t num_of_ranks;
- uint8_t device_width;
- uint8_t module_width;
- uint8_t thermal_sensor;
- uint8_t size;
- Target mydimm_target;
- bool valid;
- uint8_t side;
- uint8_t port;
- uint8_t slot;
-
- mss_eff_mb_dimm();
- ReturnCode load(fapi::Target & i_dimms, uint32_t size);
- bool is_valid();
- ReturnCode deconfig(uint8_t i_case);
- bool operator!=(const mss_eff_mb_dimm &) const;
- };
-
-//----------------------------------------------
-// MSS EFF GROUPING FUNCTIONs............
-//----------------------------------------------------
-
- ReturnCode mss_eff_mb_interleave(const fapi::Target & i_cen_target) {
- ReturnCode rc;
-
- mss_eff_mb_dimm l_dimm_array[2][2][2]; // side, port, dimm
- std::vector<fapi::Target> l_target_dimm_array[2];
- std::vector<fapi::Target> l_mba_chiplets;
- uint8_t mba_i;
- uint8_t mba;
- uint8_t l_cur_mba_port;
- uint8_t l_cur_mba_dimm;
- uint8_t side,port,slot;
- uint8_t hadadeconfig[2];
- uint8_t l_mss_derived_mba_cacheline_interleave_mode;
- uint8_t l_mss_mba_addr_interleave_bit;
- uint8_t mrw_mba_cacheline_interleave_mode_control;
- uint32_t size[2];
- uint8_t eff_dimm_size[2][2];
- uint8_t l_attr_mrw_strict_mba_plug_rule_checking;
- uint8_t l_deconfig_0_0;
-
-
- do {
-// first step, load up the dimms connected to this centaur
- for(side=0;side<2;side++) {
- for(port=0;port<2;port++) {
- for(slot=0;slot<2;slot++) {
- l_dimm_array[side][port][slot].side = side;
- l_dimm_array[side][port][slot].port = port;
- l_dimm_array[side][port][slot].slot = slot;
- }
- }
- }
-
- rc = fapiGetChildChiplets(i_cen_target, fapi::TARGET_TYPE_MBA_CHIPLET, l_mba_chiplets);
- if(rc) {
- FAPI_ERR("Error retrieving fapiGetChildChiplets");
- break;
- }
-
- rc = FAPI_ATTR_GET(ATTR_MRW_STRICT_MBA_PLUG_RULE_CHECKING, NULL, l_attr_mrw_strict_mba_plug_rule_checking);
- if(rc)
- {
- FAPI_ERR("Error retrieving ATTR_MRW_STRICT_MBA_PLUG_RULE_CHECKING");
- break;
- }
-
- if(l_attr_mrw_strict_mba_plug_rule_checking == ENUM_ATTR_MRW_STRICT_MBA_PLUG_RULE_CHECKING_TRUE) {
- for(mba_i=0; mba_i<l_mba_chiplets.size(); mba_i++) {
-
- rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, &l_mba_chiplets[mba_i], mba);
- if(rc)
- {
- FAPI_ERR("Error retrieving ATTR_CHIP_UNIT_POS");
- break;
- }
-
- rc = fapiGetAssociatedDimms(l_mba_chiplets[mba_i], l_target_dimm_array[mba]);
- if(rc)
- {
- FAPI_ERR("Error retrieving assodiated dimms");
- break;
- }
-
- for (uint8_t l_dimm_index = 0; l_dimm_index <
- l_target_dimm_array[mba].size(); l_dimm_index += 1)
- {
- rc = FAPI_ATTR_GET(ATTR_MBA_PORT, &l_target_dimm_array[mba][l_dimm_index],
- l_cur_mba_port);
- if(rc)
- {
- FAPI_ERR("Error retrieving ATTR_MBA_PORT");
- break;
- }
- rc = FAPI_ATTR_GET(ATTR_MBA_DIMM, &l_target_dimm_array[mba][l_dimm_index
- ], l_cur_mba_dimm);
- if(rc)
- {
- FAPI_ERR("Error retrieving ATTR_MBA_DIMM");
- break;
- }
-
- rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_SIZE, &l_mba_chiplets[mba_i], eff_dimm_size);
- if(rc)
- {
- FAPI_ERR("Error retrieving ATTR_EFF_DIMM_SIZE");
- break;
- }
-
- FAPI_INF("Loading up information about dimm for mba %d port %d dimm %d", mba, l_cur_mba_port, l_cur_mba_dimm);
-
- FAPI_INF("DIMM size is eff_dimm_size[%d][%d] = %d", l_cur_mba_port, l_cur_mba_dimm, eff_dimm_size[l_cur_mba_port][l_cur_mba_dimm]);
-
- rc = l_dimm_array[mba][l_cur_mba_port][l_cur_mba_dimm].load(l_target_dimm_array[mba][l_dimm_index], eff_dimm_size[l_cur_mba_port][l_cur_mba_dimm]);
- if(rc) break;
- } // Each DIMM off this MBA
- if(rc) break;
- } // Each MBA
- if(rc) break;
-
-// - Logical DIMMs are considered to be identical if they have the following attributes in common: Module Type (RDIMM or LRDIMM), Architecture (DDR3 vs DDR4), Device Density, Number of Ranks, Device Width, Module Width, and Thermal Sensor.
-
-// Plug Rule 4.1 - Logical DIMMs have to be plugged in pairs on either Port A & B or on Port C & D. Paired DIMMs must be identical.
-
-// Plug Rule 4.2 - If there is a Logical DIMM plugged in Slot 1 then an identical DIMM must be plugged in Slot0
-
-// Plug rules 4.1 and 4.2 define valid configurations which are:
-// - DIMM type X populated in slot0 only, slot1 is not populated
-// - DIMM type X populated in slot0 and slot1
- for(side=0;side<2;side++) {
- hadadeconfig[side]=0;
- }
-
- for(side=0;side<2;side++) {
- hadadeconfig[side]=0;
- if(l_dimm_array[side][0][0].is_valid()) { // there is a dimm on port 0, slot 0, this is a must
- l_deconfig_0_0=0;
-
- // case 0, you don't have a pair of dimms on port 0 and port 1, kill port0,0
- if(! l_dimm_array[side][1][0].is_valid()) {
- FAPI_ERR("Deconfig Rule 4.1 :Plug Rule 4.1 violated, Port 1 on Side %d slot 0 is empty Port 0 slot 0 is not",side);
- rc = l_dimm_array[side][0][0].deconfig(DECONFIG_PORT_1_SLOT_0_IS_EMPTY_PORT_0_SLOT_0_IS_NOT);
- fapiLogError(rc);
- hadadeconfig[side]=1;
- l_deconfig_0_0=1;
- }
-
- // case 1, you did not kill dimm 0,0, so now check that 0,0 == 1,0
- if( l_deconfig_0_0 == 0 &&
- ( l_dimm_array[side][0][0] != l_dimm_array[side][1][0])) {
- FAPI_ERR("Deconfig Rule 4.1 :Plug Rule 4.1 violated, Port 1 on Side %d slot 0 is not equal to Port 0 slot 0",side);
- rc = l_dimm_array[side][0][0].deconfig(DECONFIG_PORT_1_SLOT_0_IS_NOT_EQUAL_TO_PORT_0_SLOT_0_A);
- fapiLogError(rc);
- rc = l_dimm_array[side][1][0].deconfig(DECONFIG_PORT_1_SLOT_0_IS_NOT_EQUAL_TO_PORT_0_SLOT_0_B);
- fapiLogError(rc);
- hadadeconfig[side]=1;
- l_deconfig_0_0=1;
- }
-
- // if dimm 0,0 is gone, then blow away any dimm 0,1 and 1,1
- if(l_deconfig_0_0 ) {
- if(l_dimm_array[side][0][1].is_valid()) {
- FAPI_ERR("Deconfig Rule 4.1 :Plug Rule 4.1 violated, Port 0 on Side %d slot 1 deconfigured because Port 0 slot 0 was deconfigured",side);
- rc =l_dimm_array[side][0][1].deconfig(DECONFIG_PORT_0_SLOT_1_DECONFIGURED_BECAUSE_PORT_0_SLOT_0_WAS_DECONFIGURED);
- fapiLogError(rc);
- hadadeconfig[side]=1;
- }
- if(l_dimm_array[side][1][1].is_valid()) {
- FAPI_ERR("Deconfig Rule 4.1 :Plug Rule 4.1 violated, Port 1 on Side %d slot 1 deconfigured because Port 0 slot 0 was deconfigured",side);
- rc = l_dimm_array[side][1][1].deconfig(DECONFIG_PORT_1_SLOT_1_DECONFIGURED_BECAUSE_PORT_0_SLOT_0_WAS_DECONFIGURED);
- fapiLogError(rc);
- hadadeconfig[side]=1;
- }
- }
- else { // you have 0,0, so check if there is a 0,1 and 1,1 and they are equal
- // and 0,0 must equal 0,1, otherwise, get rid of 0,1 and 1,1
- if(l_dimm_array[side][0][1].is_valid() && l_dimm_array[side][1][1].is_valid()) {
- if(l_dimm_array[side][0][1] != l_dimm_array[side][1][1]) {
- FAPI_ERR("Deconfig Rule 4.1 :Plug Rule 4.1 violated, Port 0 on Side %d slot 1 deconfigured because Port 1 slot 1 is not equal",side);
- rc =l_dimm_array[side][0][1].deconfig(DECONFIG_PORT_0_SLOT_1_DECONFIGURED_BECAUSE_PORT_1_SLOT_1_IS_NOT_EQUAL);
- fapiLogError(rc);
- FAPI_ERR("Deconfig Rule 4.1 :Plug Rule 4.1 violated, Port 1 on Side %d slot 1 deconfigured because Port 0 slot 1 is not eqaul",side);
- rc =l_dimm_array[side][1][1].deconfig(DECONFIG_PORT_1_SLOT_1_DECONFIGURED_BECAUSE_PORT_0_SLOT_1_IS_NOT_EQAUL);
- fapiLogError(rc);
- hadadeconfig[side]=1;
- }
- else {
- if(l_dimm_array[side][0][0] != l_dimm_array[side][0][1]) {
- FAPI_ERR("Deconfig Rule 4.2 :Plug Rule 4.2 violated, Port 0 on Side %d slot 1 deconfigured because Port 0 slot 0 is not equal",side);
- rc =l_dimm_array[side][0][1].deconfig(DECONFIG_PORT_0_SLOT_1_DECONFIGURED_BECAUSE_PORT_0_SLOT_0_IS_NOT_EQUAL);
- fapiLogError(rc);
- FAPI_ERR("Deconfig Rule 4.2 :Plug Rule 4.1 violated, Port 1 on Side %d slot 1 deconfigured because Port 0 slot 0 is not equal",side);
- rc =l_dimm_array[side][1][1].deconfig(DECONFIG_PORT_1_SLOT_1_DECONFIGURED_BECAUSE_PORT_0_SLOT_0_IS_NOT_EQUAL);
- fapiLogError(rc);
- hadadeconfig[side]=1;
- }
- }
- }
- else {
- if(l_dimm_array[side][0][1].is_valid()) {
- FAPI_ERR("Deconfig Rule 4.1 :Plug Rule 4.1 violated, Port 0 on Side %d slot 1 deconfigured because Port 1 slot 1 is not valid",side);
- rc =l_dimm_array[side][0][1].deconfig(DECONFIG_PORT_0_SLOT_1_DECONFIGURED_BECAUSE_PORT_1_SLOT_1_IS_NOT_VALID);
- fapiLogError(rc);
- }
- if(l_dimm_array[side][1][1].is_valid()) {
- FAPI_ERR("Deconfig Rule 4.1 :Plug Rule 4.1 violated, Port 1 on Side %d slot 1 deconfigured because Port 0 slot 1 is not valid",side);
- rc = l_dimm_array[side][1][1].deconfig(DECONFIG_PORT_1_SLOT_1_DECONFIGURED_BECAUSE_PORT_0_SLOT_1_IS_NOT_VALID);
- fapiLogError(rc);
- hadadeconfig[side]=1;
- }
-
- }
- }
- }
- else { // if there is no slot 0,0, then everything else is invalid
- if(l_dimm_array[side][1][0].is_valid()) {
- FAPI_ERR("Deconfig Rule 4.1 :Plug Rule 4.1 violated, Port 1 on Side %d has something but Port 0 slot 0 is empty",side);
- rc = l_dimm_array[side][1][0].deconfig(DECONFIG_PORT_1_HAS_SOMETHING_BUT_PORT_0_SLOT_0_IS_EMPTY);
- fapiLogError(rc);
- hadadeconfig[side]=1;
- }
- if(l_dimm_array[side][0][1].is_valid()) { // there is a dimm slot 1, but slot 0 is empty
- FAPI_ERR("Deconfig Rule 4.1 :Plug Rule 4.2 violated, Port 0 on Side %d slot 1 has something but Port 0 slot 0 is empty",side);
- rc = l_dimm_array[side][0][1].deconfig(DECONFIG_PORT_0_SLOT_1_HAS_SOMETHING_BUT_PORT_0_SLOT_0_IS_EMPTY);
- fapiLogError(rc);
- hadadeconfig[side]=1;
- }
- if(l_dimm_array[side][1][1].is_valid()) { // there is a dimm slot 1, but slot 0 is empty
- FAPI_ERR("Deconfig Rule 4.1 :Plug Rule 4.2 violated, Port 0 on Side %d slot 1 has something but Port 0 slot 0 is empty",side);
- rc = l_dimm_array[side][1][1].deconfig(DECONFIG_SLOT_1_HAS_SOMETHING_BUT_PORT_0_SLOT_0_IS_EMPTY);
- fapiLogError(rc);
- hadadeconfig[side]=1;
- }
- }
- if(hadadeconfig[side]) {
- FAPI_INF("There was a Deconfig on side %d due to a plug rule 4.1 and/or 4.2", side);
- }
- else {
- FAPI_INF("No Deconfig on side %d so far", side);
- }
- }
-
-// Deconfig Rule 4.1 - When Plug rules 4.1 or 4.2 are violated all Logical DIMMs behind the MBA in violation are deconfiged. This error will be redetected on the next IPL no Persistent guard required. This rule is enforced by mss_eff_cnfg HW procedure.
-//
-//
-// Deconfig by Association Rule 4.1 - If a logical DIMM is deconfigured; all logical DIMMs on the same MBA must also be deconfigured by association. Since MBAs with no configured DIMMs are also deconfigured this will lead to the MBA also being deconfigured. This error will be redetected on the next IPL no Persistent guard required.
-//
-// Deconfig by Association Rule 4.2 MBAs with no configured DIMMs are deconfigured this will lead to the MBA also being deconfigured. This error will be redetected on the next IPL no Persistent guard required.
-
-// for(side=0;side<2;side++) {
-// if(hadadeconfig[side]) {
-// for(port=0;port<2;port++) {
-// for(slot=0;slot<2;slot++) {
-// if(l_dimm_array[side][port][slot].is_valid()) {
-// FAPI_ERR("Deconfig by Association Rule 4.1 has been called on Side %d",side);
-// l_dimm_array[side][port][slot].deconfig(11);
-// }
-// }
-// }
-// FAPI_ERR("Deconfig by Association Rule 4.2 has been called on Side %d",side);
-// const fapi::Target & MBA = l_mba_chiplets[side];
-// FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_MB_INTERLEAVE_PLUG_DECONFIG_MBA_BY_ASSOCIATION);
-// }
-// }
-// }
-
-// Note - In an IS DIMM system that is running in interleave mode: due to the interactions between Plug rules 4.1, 4.2 and 3.3 the IS DIMM will need to be plugged in quads. This means an identical pair of a total size behind one half of a Centaur Pair and another identical pair of the same total size behind the other Centaur in the Pair. Note that the 2 pairs of DIMMs need not be identical to each other just have the same total size.
- } // end of strict checking
-
- for(side=0;side<2;side++) {
- size[side]=0;
- }
-
- for(side=0;side<2;side++) {
- for(port=0;port<2;port++) {
- for(slot=0;slot<2;slot++) {
- size[side]+=l_dimm_array[side][port][slot].size;
- }
- }
- }
-
- FAPI_INF("Sizes on each side %d %d", size[0], size[1]);
-
- rc=FAPI_ATTR_GET(ATTR_MRW_MBA_CACHELINE_INTERLEAVE_MODE_CONTROL, NULL, mrw_mba_cacheline_interleave_mode_control);
- if(rc) return rc;
-
- switch(mrw_mba_cacheline_interleave_mode_control) {
- case ENUM_ATTR_MRW_MBA_CACHELINE_INTERLEAVE_MODE_CONTROL_NEVER:
- l_mss_derived_mba_cacheline_interleave_mode=ENUM_ATTR_MSS_DERIVED_MBA_CACHELINE_INTERLEAVE_MODE_OFF;
- l_mss_mba_addr_interleave_bit=0;
- break;
- case ENUM_ATTR_MRW_MBA_CACHELINE_INTERLEAVE_MODE_CONTROL_REQUIRED:
- if(size[0] != size[1]) {
- FAPI_ERR("ATTR_MRW_MBA_CACHELINE_INTERLEAVE_MODE_CONTROL is REQUIRED, but size on side 0 does not match size on side 1 sizes %d %d", size[0], size[1]);
- l_mss_derived_mba_cacheline_interleave_mode=ENUM_ATTR_MSS_DERIVED_MBA_CACHELINE_INTERLEAVE_MODE_OFF;
- l_mss_mba_addr_interleave_bit=0;
- for(side=0;side<2;side++) {
- for(port=0;port<2;port++) {
- for(slot=0;slot<2;slot++) {
- if(l_dimm_array[side][port][slot].is_valid()) {
- FAPI_ERR("Deconfig INTERLEAVE_MODE_CONTROL is REQUIRED violated Port %d on Side %d slot %d", port, side, slot);
- rc = l_dimm_array[side][port][slot].deconfig(DECONFIG_INTERLEAVE_MODE_CONTROL_IS_REQUIRED);
- fapiLogError(rc);
- }
- }
- }
- }
- }
- else {
- l_mss_derived_mba_cacheline_interleave_mode=ENUM_ATTR_MSS_DERIVED_MBA_CACHELINE_INTERLEAVE_MODE_ON;
- l_mss_mba_addr_interleave_bit=MSS_MBA_ADDR_INTERLEAVE_BIT;
- }
- break;
- case ENUM_ATTR_MRW_MBA_CACHELINE_INTERLEAVE_MODE_CONTROL_REQUESTED:
- if(size[0] != size[1]) {
- l_mss_derived_mba_cacheline_interleave_mode=ENUM_ATTR_MSS_DERIVED_MBA_CACHELINE_INTERLEAVE_MODE_OFF;
- l_mss_mba_addr_interleave_bit=0;
- }
- else {
- l_mss_derived_mba_cacheline_interleave_mode=ENUM_ATTR_MSS_DERIVED_MBA_CACHELINE_INTERLEAVE_MODE_ON;
- l_mss_mba_addr_interleave_bit=MSS_MBA_ADDR_INTERLEAVE_BIT;
- }
- break;
- default:
- FAPI_ERR("Internal Error: ATTR_MRW_MBA_CACHELINE_INTERLEAVE_MODE_CONTROL is not a known value");
- l_mss_derived_mba_cacheline_interleave_mode=ENUM_ATTR_MSS_DERIVED_MBA_CACHELINE_INTERLEAVE_MODE_OFF;
- l_mss_mba_addr_interleave_bit=0;
- break;
-
- }
-
- rc=FAPI_ATTR_SET(ATTR_MSS_DERIVED_MBA_CACHELINE_INTERLEAVE_MODE, &i_cen_target, l_mss_derived_mba_cacheline_interleave_mode);
- if (rc)
- {
- FAPI_ERR("mss_eff_mb_interleave: Error from FAPI_ATTR_SET(ATTR_MSS_DERIVED_MBA_CACHELINE_INTERLEAVE_MODE)");
- break;
- }
-
- rc=FAPI_ATTR_SET(ATTR_MSS_DERIVED_MBA_ADDR_INTERLEAVE_BIT, &i_cen_target, l_mss_mba_addr_interleave_bit);
- if (rc)
- {
- FAPI_ERR("mss_eff_mb_interleave: Error from FAPI_ATTR_SET(ATTR_MSS_DERIVED_MBA_ADDR_INTERLEAVE_BIT)");
- break;
- }
-
- } while(0);
-
- return rc;
- }
-
- // default constructor
- mss_eff_mb_dimm::mss_eff_mb_dimm() {
- module_type=0;
- dram_gen=0;
- device_density=0;
- num_of_ranks=0;
- device_width=0;
- module_width=0;
- thermal_sensor=0;
- size=0;
- valid=0;
- }
-
- ReturnCode mss_eff_mb_dimm::load(fapi::Target & i_dimm, uint32_t i_size) {
- ReturnCode rc;
- do {
- rc = FAPI_ATTR_GET(ATTR_SPD_MODULE_TYPE, &i_dimm, module_type);
- if(rc) break;
-
- rc = FAPI_ATTR_GET(ATTR_SPD_SDRAM_DEVICE_TYPE, &i_dimm, dram_gen);
- if(rc) break;
-
- rc = FAPI_ATTR_GET(ATTR_SPD_SDRAM_DENSITY, &i_dimm, device_density);
- if(rc) break;
-
- rc = FAPI_ATTR_GET(ATTR_SPD_NUM_RANKS, &i_dimm, num_of_ranks);
- if(rc) break;
-
- rc = FAPI_ATTR_GET(ATTR_SPD_DRAM_WIDTH, &i_dimm, device_width);
- if(rc) break;
-
- rc = FAPI_ATTR_GET(ATTR_SPD_MODULE_MEMORY_BUS_WIDTH, &i_dimm, module_width);
- if(rc) break;
-
- rc = FAPI_ATTR_GET(ATTR_SPD_MODULE_THERMAL_SENSOR, &i_dimm, thermal_sensor);
- if(rc) break;
-
- mydimm_target=i_dimm;
-
- size=i_size;
-
- if(i_size != 0) {
- valid=1;
- }
- else {
- valid = 0;
- }
- }
- while (0);
-
- return rc;
- }
-
- bool mss_eff_mb_dimm::is_valid() {
- return valid;
- }
-
- ReturnCode mss_eff_mb_dimm::deconfig(uint8_t i_case){
- ReturnCode rc;
- FAPI_ERR("Deconfiguring a dimm due to a plugging rule violation at centuar/mba level case num %d (%d%d%d)", i_case, side, port, slot);
- const fapi::Target & DIMM = mydimm_target;
- const uint8_t CASE = i_case;
- FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_MB_INTERLEAVE_PLUG_DECONFIG_DIMM);
- valid=0;
- size=0;
- return rc;
- }
-
- bool mss_eff_mb_dimm::operator!=(const mss_eff_mb_dimm &a) const {
- if( module_type == a.module_type &&
- dram_gen == a.dram_gen &&
- device_density == a.device_density &&
- num_of_ranks == a.num_of_ranks &&
- device_width == a.device_width &&
- module_width == a.module_width &&
- thermal_sensor == a.thermal_sensor &&
- size == a.size ){
- return 0;
- }
- else {
- return 1;
- }
-
- }
-}
diff --git a/src/usr/hwpf/hwp/mc_config/mss_eff_mb_interleave/mss_eff_mb_interleave.H b/src/usr/hwpf/hwp/mc_config/mss_eff_mb_interleave/mss_eff_mb_interleave.H
deleted file mode 100755
index e7a76687a..000000000
--- a/src/usr/hwpf/hwp/mc_config/mss_eff_mb_interleave/mss_eff_mb_interleave.H
+++ /dev/null
@@ -1,71 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG */
-/* This is an automatically generated prolog. */
-/* */
-/* $Source: src/usr/hwpf/hwp/mc_config/mss_eff_mb_interleave/mss_eff_mb_interleave.H $ */
-/* */
-/* OpenPOWER HostBoot Project */
-/* */
-/* Contributors Listed Below - COPYRIGHT 2014 */
-/* [+] International Business Machines Corp. */
-/* */
-/* */
-/* Licensed under the Apache License, Version 2.0 (the "License"); */
-/* you may not use this file except in compliance with the License. */
-/* 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 */
-// $Id: mss_eff_mb_interleave.H,v 1.3 2014/02/19 20:06:18 bellows Exp $
-// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/centaur/working/procedures/ipl/fapi/mss_eff_mb_interleave.H,v $
-//------------------------------------------------------------------------------
-// *! (C) Copyright International Business Machines Corp. 2014
-// *! All Rights Reserved -- Property of IBM
-// *! *** ***
-// *! Licensed material - Program property of IBM
-// *! Refer to copyright instructions form no. G120-2083
-// *! Created on Wed Jan 8 2014 at 07:56:37
-//------------------------------------------------------------------------------
-// *! TITLE : mss_eff_mb_interleave
-// *! DESCRIPTION : see additional comments below
-// *! OWNER NAME : Bellows Mark D. (Mark D),319432 Email: bellows@us.ibm.com
-// *! BACKUP NAME : Email: ______@us.ibm.com
-
-// *! ADDITIONAL COMMENTS :
-//
-//------------------------------------------------------------------------------
-// Don't forget to create CVS comments when you check in your changes!
-//------------------------------------------------------------------------------
-// CHANGE HISTORY:
-//------------------------------------------------------------------------------
-// Version:| Author: | Date: | Comment:
-//---------|----------|---------|-----------------------------------------------
-// 1.3 | bellows |19-JAN-14| Additional RAS updates
-// 1.2 | bellows |17-JAN-14| RAS
-// 1.1 | bellows |08-JAN-14| Created.
-#ifndef __MSS_EFF_MB_INTERLEAVE_H
-#define __MSS_EFF_MB_INTERLEAVE_H
-
-#include <fapi.H>
-
-typedef fapi::ReturnCode (*mss_eff_mb_interleave_FP_t)(const fapi::Target& centaur );
-
-extern "C"
-{
-
-// This hardware procedure checks the plugging rules for a centaur and works with interleaving within the centaur
-// if various plug rules are violated at this level of the memory stack, error logs and deconfigures will happen
-// Many deconfig by assoication rules are not checked here. Just 4.1 and 4.2 plus a required Interleaving check
-fapi::ReturnCode mss_eff_mb_interleave(const fapi::Target & i_cen_target);
-
-
-
-} // extern "C"
-
-#endif
diff --git a/src/usr/hwpf/hwp/mc_config/mss_freq/memory_mss_freq.xml b/src/usr/hwpf/hwp/mc_config/mss_freq/memory_mss_freq.xml
deleted file mode 100644
index 177258ed8..000000000
--- a/src/usr/hwpf/hwp/mc_config/mss_freq/memory_mss_freq.xml
+++ /dev/null
@@ -1,127 +0,0 @@
-<!-- IBM_PROLOG_BEGIN_TAG -->
-<!-- This is an automatically generated prolog. -->
-<!-- -->
-<!-- $Source: src/usr/hwpf/hwp/mc_config/mss_freq/memory_mss_freq.xml $ -->
-<!-- -->
-<!-- OpenPOWER HostBoot Project -->
-<!-- -->
-<!-- COPYRIGHT International Business Machines Corp. 2013,2014 -->
-<!-- -->
-<!-- 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 -->
-<hwpErrors>
-
-<!-- $Id: memory_mss_freq.xml,v 1.2 2014/03/06 00:11:49 jdsloat Exp $ -->
-<!-- For file ../../ipl/fapi/mss_freq.C -->
-<!-- // *! OWNER NAME : Jacob Sloat (jdsloat@us.ibm.com) -->
-<!-- // *! BACKUP NAME : -->
-
-<!-- Original Source for RC_MSS_UNSUPPORTED_SPD_DATA_DDR4 memory_errors.xml -->
- <hwpError>
- <rc>RC_MSS_UNSUPPORTED_SPD_DATA_DDR4</rc>
- <description>Invalid SPD data returned.</description>
- <ffdc>MTB_DDR4</ffdc>
- <ffdc>FTB_DDR4</ffdc>
- <callout>
- <target>DIMM_TARGET</target>
- <priority>HIGH</priority>
- </callout>
- <deconfigure>
- <target>DIMM_TARGET</target>
- </deconfigure>
-</hwpError>
-
-<!-- Original Source for RC_MSS_UNSUPPORTED_SPD_DATA_DDR3 memory_errors.xml -->
- <hwpError>
- <rc>RC_MSS_UNSUPPORTED_SPD_DATA_DDR3</rc>
- <description>Invalid SPD data returned.</description>
- <ffdc>MTB_DIVIDEND</ffdc>
- <ffdc>MTB_DIVISOR</ffdc>
- <ffdc>FTB_DIVIDEND</ffdc>
- <ffdc>FTB_DIVISOR</ffdc>
- <callout>
- <target>DIMM_TARGET</target>
- <priority>HIGH</priority>
- </callout>
- <deconfigure>
- <target>DIMM_TARGET</target>
- </deconfigure>
-</hwpError>
-
-<!-- Original Source for RC_MSS_UNSUPPORTED_SPD_DATA_COMMON memory_errors.xml -->
- <hwpError>
- <rc>RC_MSS_UNSUPPORTED_SPD_DATA_COMMON</rc>
- <description>Invalid SPD data returned.</description>
- <ffdc>MIN_TCK</ffdc>
- <ffdc>MIN_TAA</ffdc>
- <callout>
- <target>TARGET</target>
- <priority>HIGH</priority>
- </callout>
- <deconfigure>
- <target>DIMM_TARGET</target>
- </deconfigure>
-</hwpError>
-
-<!-- Original Source for RC_MSS_MODULE_TYPE_MIX memory_errors.xml -->
- <hwpError>
- <rc>RC_MSS_MODULE_TYPE_MIX</rc>
- <description>Differing DIMM types in the same configuration.</description>
- <ffdc>MODULE_TYPE</ffdc>
- <callout>
- <target>DIMM_TARGET</target>
- <priority>HIGH</priority>
- </callout>
- <deconfigure>
- <target>DIMM_TARGET</target>
- </deconfigure>
-</hwpError>
-
-<!-- Original Source for RC_MSS_NO_COMMON_SUPPORTED_CL memory_errors.xml -->
- <hwpError>
- <rc>RC_MSS_NO_COMMON_SUPPORTED_CL</rc>
- <description>Current Configuration has no common supported CL Values.</description>
- <ffdc>CL_SUPPORTED</ffdc>
- <callout>
- <target>DIMM_TARGET</target>
- <priority>HIGH</priority>
- </callout>
- <deconfigure>
- <target>DIMM_TARGET</target>
- </deconfigure>
-</hwpError>
-
-<!-- Original Source for RC_MSS_EXCEED_TAA_MAX_NO_CL memory_errors.xml -->
- <hwpError>
- <rc>RC_MSS_EXCEED_TAA_MAX_NO_CL</rc>
- <description>Exceeded TAA MAX with Lowest frequency. No compatable CL.</description>
- <ffdc>CL_SUPPORTED</ffdc>
- <callout>
- <target>DIMM_TARGET</target>
- <priority>HIGH</priority>
- </callout>
- <deconfigure>
- <target>DIMM_TARGET</target>
- </deconfigure>
-</hwpError>
-
-<!-- Original Source for RC_MSS_UNSUPPORTED_FREQ_CALCULATED memory_errors.xml -->
- <hwpError>
- <rc>RC_MSS_UNSUPPORTED_FREQ_CALCULATED</rc>
- <description>The frequency calculated with spd data is not supported by the jedec standards.</description>
- <ffdc>DIMM_MIN_FREQ</ffdc>
-</hwpError>
-
-
-</hwpErrors>
diff --git a/src/usr/hwpf/hwp/mc_config/mss_freq/mss_freq.C b/src/usr/hwpf/hwp/mc_config/mss_freq/mss_freq.C
deleted file mode 100644
index 42fb34b81..000000000
--- a/src/usr/hwpf/hwp/mc_config/mss_freq/mss_freq.C
+++ /dev/null
@@ -1,1025 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG */
-/* This is an automatically generated prolog. */
-/* */
-/* $Source: src/usr/hwpf/hwp/mc_config/mss_freq/mss_freq.C $ */
-/* */
-/* OpenPOWER HostBoot Project */
-/* */
-/* Contributors Listed Below - COPYRIGHT 2012,2015 */
-/* [+] International Business Machines Corp. */
-/* */
-/* */
-/* Licensed under the Apache License, Version 2.0 (the "License"); */
-/* you may not use this file except in compliance with the License. */
-/* You may obtain a copy of the License at */
-/* */
-/* http://www.apache.org/licenses/LICENSE-2.0 */
-/* */
-/* Unless required by applicable law or agreed to in writing, software */
-/* distributed under the License is distributed on an "AS IS" BASIS, */
-/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
-/* implied. See the License for the specific language governing */
-/* permissions and limitations under the License. */
-/* */
-/* IBM_PROLOG_END_TAG */
-// $Id: mss_freq.C,v 1.31 2015/09/16 15:27:04 sglancy Exp $
-/* File mss_freq.C created by JEFF SABROWSKI on Fri 21 Oct 2011. */
-
-//------------------------------------------------------------------------------
-// *! (C) Copyright International Business Machines Corp. 2007
-// *! All Rights Reserved -- Property of IBM
-// *! *** ***
-//------------------------------------------------------------------------------
-// *! TITLE : mss_freq.C
-// *! DESCRIPTION : Tools for centaur procedures
-// *! OWNER NAME : Andre Marin (aamarin@us.ibm.com)
-// *! BACKUP NAME : Stephen Glancy (sglancy@us.ibm.com)
-// #! ADDITIONAL COMMENTS :
-//
-// General purpose funcs
-
-//------------------------------------------------------------------------------
-// Don't forget to create CVS comments when you check in your changes!
-//------------------------------------------------------------------------------
-// CHANGE HISTORY:
-//------------------------------------------------------------------------------
-// Version:| Author: | Date: | Comment:
-//---------|----------|----------|----------------------------------------------
-// 1.1 | jsabrow | 09/30/11 | Initial draft.
-// 1.2 | bellows | 12/21/11 | fixed function call to mss_freq
-// 1.4 | jsabrow |
-// 1.6 | jdsloat | 05/03/12 | Fixed per Firmware request, added CL calc
-// 1.7 | jdsloat | 05/03/12 | Uncommented Set Attributes
-// 1.8 | jdsloat | 05/07/12 | fixed per Firmware request
-// 1.9 | jdsloat | 05/07/12 | Unused Variables removed
-// 1.11 | jdsloat | 05/07/12 | Uncommented Set Attributes
-// 1.12 | jdsloat | 05/08/12 | Fixed per Firmware request, fixed CL attribute set, fixed MTB usage.
-// 1.13 | jdsloat | 05/09/12 | Fixed per Firmware request
-// 1.14 | jdsloat | 05/10/12 | Fixed per Firmware Request, RC checks, 0 checks
-// 1.15 | jdsloat | 06/04/12 | Added a Configuration check
-// 1.16 | jdsloat | 06/08/12 | Updates per Firware request
-// 1.17 | bellows | 07/16/12 | added in Id tag
-// 1.18 | jdsloat | 09/07/12 | Added FTB offset to TAA and TCK
-// 1.19 | jdsloat | 01/30/13 | Added Check for l_spd_min_tck_max
-// 1.20 | jdsloat | 02/12/13 | Added path for freq_override
-// 1.21 | jdsloat | 02/12/13 | Added Debug messages
-// 1.22 | jdsloat | 06/27/13 | Fixed overridng RC error that results in coredump on no centaur SPD info.
-// 1.23 | jdsloat | 02/05/14 | Added support for DMI capable frequecies via ATTR_MSS_NEST_CAPABLE_FREQUENCIES
-// 1.24 | jdsloat | 02/18/14 | Added support for DDR4
-// 1.25 | jdsloat | 03/05/14 | RAS review Edits -- Error HW callouts
-// 1.26 | jdsloat | 03/12/14 | Fixed an assignment within a boolean expression.
-// 1.27 | jdsloat | 03/12/14 | Fixed inf loop bug associated with edit 1.26
-// 1.28 | jdsloat | 04/30/14 | Fixed a divide by 0 error opened up by RAS review Edits -- Error HW callouts v1.25
-// 1.29 | jdsloat | 12/10/14 | Fixed 1333 speed limitation for config/ Habenero
-// 1.30 | jdsloat | 01/29/14 | Fixed 1600 speed limitation for DDR4
-// 1.31 | sglancy | 09/16/15 | Changed DMI capable values to allow for 8.0GBits/s or 9.6GBits/s if not specifically needing 8.0GBits/s
-
-// Add continues to logerrors to lines 650, 560. IN order to avoid possible future problems.
-//
-// This procedure takes CENTAUR as argument. for each DIMM (under each MBA)
-// DIMM SPD attributes are read to determine optimal DRAM frequency
-// frequency bins: 800*, 1066*, 1333, 1600, 1866, 2133, 2400*, 2666*
-// (*=not supported in product as of feb'12)
-
-//----------------------------------------------------------------------
-// Includes - FAPI
-//----------------------------------------------------------------------
-#include <fapi.H>
-#include <mss_freq.H>
-
-//----------------------------------------------------------------------
-// ENUMs
-//----------------------------------------------------------------------
-enum {
- MSS_FREQ_EMPTY = 0,
- MSS_FREQ_SINGLE_DROP = 1,
- MSS_FREQ_DUAL_DROP = 2,
- MSS_FREQ_VALID = 255,
-};
-
-//----------------------------------------------------------------------
-// Constants
-//----------------------------------------------------------------------
-const uint8_t DDR4_MTB_DIVIDEND = 1;
-const uint8_t DDR4_MTB_DIVISOR = 8;
-const uint8_t DDR4_FTB_DIVIDEND = 1;
-const uint8_t DDR4_FTB_DIVISOR = 1;
-
-
-
-using namespace fapi;
-
-fapi::ReturnCode mss_freq(const fapi::Target &i_target_memb)
-{
-
- // Define attribute array size
- const uint8_t PORT_SIZE = 2;
- const uint8_t DIMM_SIZE = 2;
- const uint8_t MBA_SIZE = 2;
-
- fapi::ReturnCode l_rc;
- std::vector<fapi::Target> l_mbaChiplets;
- std::vector<fapi::Target> l_dimm_targets;
- std::vector<fapi::Target> l_dimm_targets_deconfig;
- uint8_t l_spd_mtb_dividend=0;
- uint8_t l_spd_mtb_divisor=0;
- uint8_t l_spd_ftb_dividend=0;
- uint8_t l_spd_ftb_divisor=0;
- uint32_t l_dimm_freq_calc=0;
- uint32_t l_dimm_freq_min=9999;
- uint8_t l_spd_min_tck_MTB=0;
- uint8_t l_spd_tck_offset_FTB=0;
- uint8_t l_spd_tck_offset=0;
- uint32_t l_spd_min_tck=0;
- uint32_t l_spd_min_tck_max=0;
- uint8_t l_spd_min_taa_MTB=0;
- uint8_t l_spd_taa_offset_FTB=0;
- uint8_t l_spd_taa_offset=0;
- uint32_t l_spd_min_taa=0;
- uint32_t l_spd_min_taa_max=0;
- uint32_t l_selected_dimm_freq=0;
- uint32_t l_spd_cas_lat_supported = 0xFFFFFFFF;
- uint32_t l_spd_cas_lat_supported_all = 0xFFFFFFFF;
- uint8_t l_cas_latency = 0;
- uint32_t l_cl_mult_tck = 0;
- uint8_t cur_mba_port = 0;
- uint8_t cur_mba_dimm = 0;
- uint8_t cur_mba = 0;
- uint8_t cur_dimm_spd_valid_u8array[MBA_SIZE][PORT_SIZE][DIMM_SIZE] = {{{0}}};
- uint8_t plug_config = 0;
- uint8_t module_type = 0;
- uint8_t module_type_deconfig = 0;
- uint8_t module_type_group_1 = 0;
- uint8_t module_type_group_2 = 0;
- uint8_t module_type_group_1_total = 0;
- uint8_t module_type_group_2_total = 0;
- uint8_t num_ranks[MBA_SIZE][PORT_SIZE][DIMM_SIZE] = {{{0}}};
- //uint8_t num_ranks = 0;
- uint8_t num_ranks_total = 0;
- uint32_t l_freq_override = 0;
- uint8_t l_override_path = 0;
- uint8_t l_nest_capable_frequencies = 0;
- uint8_t l_spd_dram_dev_type;
- uint8_t l_spd_tb_mtb_ddr4=0;
- uint8_t l_spd_tb_ftb_ddr4=0;
- uint8_t l_spd_tckmax_ddr4=0;
- uint8_t cl_count_array[20];
- uint8_t highest_common_cl = 0;
- uint8_t highest_cl_count = 0;
- uint8_t lowest_common_cl = 0;
- uint32_t lowest_cl_count = 0xFFFFFFFF;
-
- for(uint8_t i=0;i<20;i++)
- {
- cl_count_array[i] = 0; // Initializing each element separately
- }
- do
- {
- // Get associated MBA's on this centaur
- l_rc=fapiGetChildChiplets(i_target_memb, fapi::TARGET_TYPE_MBA_CHIPLET, l_mbaChiplets);
- if (l_rc)
- {
- FAPI_ERR("Error Getting MBA targets.");
- break;
- }
- // Loop through the 2 MBA's
- for (uint32_t i=0; i < l_mbaChiplets.size(); i++)
- {
- // Get a vector of DIMM targets
- l_rc = fapiGetAssociatedDimms(l_mbaChiplets[i], l_dimm_targets);
- if (l_rc)
- {
- FAPI_ERR("Error Getting DIMM targets.");
- break;
- }
- for (uint32_t j=0; j < l_dimm_targets.size(); j++)
- {
-
- l_rc = FAPI_ATTR_GET(ATTR_SPD_DRAM_DEVICE_TYPE, &l_dimm_targets[j], l_spd_dram_dev_type);
- if (l_rc)
- {
- FAPI_ERR("Unable to read SPD Dram Device Type.");
- break;
- }
- if (l_spd_dram_dev_type == fapi::ENUM_ATTR_SPD_DRAM_DEVICE_TYPE_DDR4)
- {
- // DDR4 ONLY
- FAPI_DBG("DDR4 detected");
-
- l_rc = FAPI_ATTR_GET(ATTR_SPD_TIMEBASE_MTB_DDR4, &l_dimm_targets[j], l_spd_tb_mtb_ddr4);
- if (l_rc)
- {
- FAPI_ERR("Unable to read SPD DDR4 Medium Timebase");
- break;
- }
-
- l_rc = FAPI_ATTR_GET(ATTR_SPD_TIMEBASE_FTB_DDR4, &l_dimm_targets[j], l_spd_tb_ftb_ddr4);
- if (l_rc)
- {
- FAPI_ERR("Unable to read SPD DDR4 Fine Timebase");
- break;
- }
-
- l_rc = FAPI_ATTR_GET(ATTR_SPD_TCKMAX_DDR4, &l_dimm_targets[j], l_spd_tckmax_ddr4);
- if (l_rc)
- {
- FAPI_ERR("Unable to read SPD DDR4 TCK Max");
- break;
- }
-
- if ( (l_spd_tb_mtb_ddr4 == 0)&&(l_spd_tb_ftb_ddr4 == 0))
- {
- // These are now considered constant within DDR4
- // If DDR4 spec changes to include other values, these const's need to be updated
- l_spd_mtb_dividend = DDR4_MTB_DIVIDEND;
- l_spd_mtb_divisor = DDR4_MTB_DIVISOR;
- l_spd_ftb_dividend = DDR4_FTB_DIVIDEND;
- l_spd_ftb_divisor = DDR4_FTB_DIVISOR;
- }
- else
- {
-
- //Invalid due to the fact that JEDEC dictates that these should be zero.
- // Log error and continue to next DIMM
- FAPI_ERR("Invalid data received from SPD DDR4 MTB/FTB Timebase");
- const uint8_t &MTB_DDR4 = l_spd_tb_mtb_ddr4;
- const uint8_t &FTB_DDR4 = l_spd_tb_ftb_ddr4;
- const fapi::Target &DIMM_TARGET = l_dimm_targets[j];
- FAPI_SET_HWP_ERROR(l_rc, RC_MSS_UNSUPPORTED_SPD_DATA_DDR4);
- fapiLogError(l_rc);
- continue;
- }
-
- }
- else
- {
- // DDR3 ONLY
- FAPI_DBG("DDR3 detected");
-
- l_rc = FAPI_ATTR_GET(ATTR_SPD_MTB_DIVIDEND, &l_dimm_targets[j], l_spd_mtb_dividend);
- if (l_rc)
- {
- FAPI_ERR("Unable to read SPD Medium Timebase Dividend.");
- break;
- }
-
- l_rc = FAPI_ATTR_GET(ATTR_SPD_MTB_DIVISOR, &l_dimm_targets[j], l_spd_mtb_divisor);
- if (l_rc)
- {
- FAPI_ERR("Unable to read SPD Medium Timebase Divisor.");
- break;
- }
-
- l_rc = FAPI_ATTR_GET(ATTR_SPD_FTB_DIVIDEND, &l_dimm_targets[j], l_spd_ftb_dividend);
- if (l_rc)
- {
- FAPI_ERR("Unable to read the SPD FTB dividend");
- break;
- }
- l_rc = FAPI_ATTR_GET(ATTR_SPD_FTB_DIVISOR, &l_dimm_targets[j], l_spd_ftb_divisor);
- if (l_rc)
- {
- FAPI_ERR("Unable to read the SPD FTB divisor");
- break;
- }
- if ( (l_spd_mtb_dividend == 0)||(l_spd_mtb_divisor == 0)||(l_spd_ftb_dividend == 0)||(l_spd_ftb_divisor == 0))
- {
- //Invalid due to the fact that JEDEC dictates that these should be non-zero.
- // Log error and continue to next DIMM
- FAPI_ERR("Invalid data received from SPD within MTB/FTB Dividend, MTB/FTB Divisor");
- const uint8_t &MTB_DIVIDEND = l_spd_mtb_dividend;
- const uint8_t &MTB_DIVISOR = l_spd_mtb_divisor;
- const uint8_t &FTB_DIVIDEND = l_spd_ftb_dividend;
- const uint8_t &FTB_DIVISOR = l_spd_ftb_divisor;
- const fapi::Target &DIMM_TARGET = l_dimm_targets[j];
- FAPI_SET_HWP_ERROR(l_rc, RC_MSS_UNSUPPORTED_SPD_DATA_DDR3);
- fapiLogError(l_rc);
- continue;
- }
- }
- // common to both DDR3 & DDR4
- l_rc = FAPI_ATTR_GET(ATTR_SPD_TCKMIN, &l_dimm_targets[j], l_spd_min_tck_MTB);
- if (l_rc)
- {
- FAPI_ERR("Unable to read SPD Minimum TCK (Min Clock Cycle).");
- break;
- }
-
- l_rc = FAPI_ATTR_GET(ATTR_SPD_TAAMIN, &l_dimm_targets[j], l_spd_min_taa_MTB);
- if (l_rc)
- {
- FAPI_ERR("Unable to read SPD Minimum TA std::vector<fapi::Target> l_target_dimm_array;A (Min CAS Latency Time).");
- break;
- }
- l_rc = FAPI_ATTR_GET(ATTR_SPD_CAS_LATENCIES_SUPPORTED, &l_dimm_targets[j], l_spd_cas_lat_supported);
- if (l_rc)
- {
- FAPI_ERR("Unable to read SPD Supported CAS Latencies.");
- break;
- }
-
- l_rc = FAPI_ATTR_GET(ATTR_MBA_PORT, &l_dimm_targets[j], cur_mba_port);
- if (l_rc)
- {
- FAPI_ERR("Unable to read the Port Info in order to determine configuration.");
- break;
- }
- l_rc = FAPI_ATTR_GET(ATTR_MBA_DIMM, &l_dimm_targets[j], cur_mba_dimm);
- if (l_rc)
- {
- FAPI_ERR("Unable to read the DIMM Info in order to determine configuration.");
- break;
- }
- l_rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, &l_mbaChiplets[i], cur_mba);
- if (l_rc)
- {
- FAPI_ERR("Unable to read the DIMM Info in order to determine configuration.");
- break;
- }
-
- l_rc = FAPI_ATTR_GET(ATTR_SPD_MODULE_TYPE, &l_dimm_targets[j], module_type);
- if (l_rc)
- {
- FAPI_ERR("Unable to read the SPD module type.");
- break;
- }
-
- // from dimm_spd_attributes.xml, R1 = 0x00, R2 = 0x01, R3 = 0x02, R4 = 0x03
- l_rc = FAPI_ATTR_GET(ATTR_SPD_NUM_RANKS, &l_dimm_targets[j], num_ranks[cur_mba][cur_mba_port][cur_mba_dimm]);
- if (l_rc)
- {
- FAPI_ERR("Unable to read the SPD number of ranks");
- break;
- }
- l_rc = FAPI_ATTR_GET(ATTR_SPD_FINE_OFFSET_TAAMIN, &l_dimm_targets[j], l_spd_taa_offset_FTB);
- if (l_rc)
- {
- FAPI_ERR("Unable to read the SPD TAA offset (FTB)");
- break;
- }
- l_rc = FAPI_ATTR_GET(ATTR_SPD_FINE_OFFSET_TCKMIN, &l_dimm_targets[j], l_spd_tck_offset_FTB);
- if (l_rc)
- {
- FAPI_ERR("Unable to read the SPD TCK offset (FTB)");
- break;
- }
-
- cur_dimm_spd_valid_u8array[cur_mba][cur_mba_port][cur_mba_dimm] = MSS_FREQ_VALID;
-
- if ((l_spd_min_tck_MTB == 0)||(l_spd_min_taa_MTB == 0))
- {
- //Invalid due to the fact that JEDEC dictates that these should be non-zero.
- // Log error and continue to next DIMM
- FAPI_ERR("Invalid data received from SPD within TCK Min, or TAA Min");
- const uint8_t &MIN_TCK = l_spd_min_tck_MTB;
- const uint8_t &MIN_TAA = l_spd_min_taa_MTB;
- const fapi::Target &DIMM_TARGET = l_dimm_targets[j];
- const fapi::Target &TARGET = i_target_memb;
- FAPI_SET_HWP_ERROR(l_rc, RC_MSS_UNSUPPORTED_SPD_DATA_COMMON);
- fapiLogError(l_rc);
- continue;
- }
-
- // Calc done on PS units (the multiplication of 1000) to avoid rounding errors.
- // Frequency listed with multiplication of 2 as clocking data on both +- edges
- l_spd_min_tck = ( 1000 * l_spd_min_tck_MTB * l_spd_mtb_dividend ) / l_spd_mtb_divisor;
- l_spd_min_taa = ( 1000 * l_spd_min_taa_MTB * l_spd_mtb_dividend ) / l_spd_mtb_divisor;
-
- FAPI_INF("min tck = %i, taa = %i", l_spd_min_tck, l_spd_min_taa);
- FAPI_INF("FTB tck 0x%x, taa 0x%x",l_spd_tck_offset_FTB,l_spd_taa_offset_FTB);
- // Adjusting by tck offset -- tck offset represented in 2's compliment as it could be positive or negative adjustment
- // No multiplication of 1000 as it is already in picoseconds.
- if (l_spd_tck_offset_FTB & 0x80)
- {
- l_spd_tck_offset_FTB = ~( l_spd_tck_offset_FTB ) + 1;
- l_spd_tck_offset = (l_spd_tck_offset_FTB * l_spd_ftb_dividend ) / l_spd_ftb_divisor;
- l_spd_min_tck = l_spd_min_tck - l_spd_tck_offset;
- FAPI_INF("FTB minus offset %i, min tck %i",l_spd_tck_offset,l_spd_min_tck);
- }
- else
- {
- l_spd_tck_offset = (l_spd_tck_offset_FTB * l_spd_ftb_dividend ) / l_spd_ftb_divisor;
- l_spd_min_tck = l_spd_min_tck + l_spd_tck_offset;
- FAPI_INF("FTB plus offset %i, min tck %i",l_spd_tck_offset,l_spd_min_tck);
- }
-
- // Adjusting by taa offset -- taa offset represented in 2's compliment as it could be positive or negative adjustment
- if (l_spd_taa_offset_FTB & 0x80)
- {
- l_spd_taa_offset_FTB = ~( l_spd_taa_offset_FTB) + 1;
- l_spd_taa_offset = (l_spd_taa_offset_FTB * l_spd_ftb_dividend ) / l_spd_ftb_divisor;
- l_spd_min_taa = l_spd_min_taa - l_spd_taa_offset;
- }
- else
- {
- l_spd_taa_offset = (l_spd_taa_offset_FTB * l_spd_ftb_dividend ) / l_spd_ftb_divisor;
- l_spd_min_taa = l_spd_min_taa + l_spd_taa_offset;
- }
-
- if ((l_spd_min_tck == 0)||(l_spd_min_taa == 0))
- {
- //Invalid due to the fact that JEDEC dictates that these should be non-zero.
- // Log error and continue to next DIMM
- FAPI_ERR("Invalid data received from SPD causing TCK Min or TAA Min to be 0");
- const uint8_t &MIN_TCK = l_spd_min_tck_MTB;
- const uint8_t &MIN_TAA = l_spd_min_taa_MTB;
- const fapi::Target &DIMM_TARGET = l_dimm_targets[j];
- const fapi::Target &TARGET = i_target_memb;
- FAPI_SET_HWP_ERROR(l_rc, RC_MSS_UNSUPPORTED_SPD_DATA_COMMON);
- fapiLogError(l_rc);
- continue;
- }
- l_dimm_freq_calc = 2000000 / l_spd_min_tck;
-
- FAPI_INF( "TAA(ps): %d TCK(ps): %d Calc'ed Freq for this dimm: %d", l_spd_min_taa, l_spd_min_tck, l_dimm_freq_calc);
-
- //is this the slowest dimm?
- if (l_dimm_freq_calc < l_dimm_freq_min)
- {
- l_dimm_freq_min = l_dimm_freq_calc;
- }
-
- if (l_spd_min_tck > l_spd_min_tck_max)
- {
- l_spd_min_tck_max = l_spd_min_tck;
- }
-
- if (l_spd_min_taa > l_spd_min_taa_max)
- {
- l_spd_min_taa_max = l_spd_min_taa;
- }
-
- if ( l_spd_cas_lat_supported & 0x00000001 )
- {
- cl_count_array[0]++;
- }
- else if ( l_spd_cas_lat_supported & 0x00000002 )
- {
- cl_count_array[1]++;
- }
- else if ( l_spd_cas_lat_supported & 0x00000004 )
- {
- cl_count_array[2]++;
- }
- else if ( l_spd_cas_lat_supported & 0x00000008 )
- {
- cl_count_array[3]++;
- }
- else if ( l_spd_cas_lat_supported & 0x00000010 )
- {
- cl_count_array[4]++;
- }
- else if ( l_spd_cas_lat_supported & 0x00000020 )
- {
- cl_count_array[5]++;
- }
- else if ( l_spd_cas_lat_supported & 0x00000040 )
- {
- cl_count_array[6]++;
- }
- else if ( l_spd_cas_lat_supported & 0x00000080 )
- {
- cl_count_array[7]++;
- }
- else if ( l_spd_cas_lat_supported & 0x00000100 )
- {
- cl_count_array[8]++;
- }
- else if ( l_spd_cas_lat_supported & 0x00000200 )
- {
- cl_count_array[9]++;
- }
- else if ( l_spd_cas_lat_supported & 0x00000400)
- {
- cl_count_array[10]++;
- }
- else if ( l_spd_cas_lat_supported & 0x00000800 )
- {
- cl_count_array[11]++;
- }
- else if ( l_spd_cas_lat_supported & 0x00001000 )
- {
- cl_count_array[12]++;
- }
- else if ( l_spd_cas_lat_supported & 0x00002000 )
- {
- cl_count_array[13]++;
- }
- else if ( l_spd_cas_lat_supported & 0x00004000)
- {
- cl_count_array[14]++;
- }
- else if ( l_spd_cas_lat_supported & 0x00008000 )
- {
- cl_count_array[15]++;
- }
- else if ( l_spd_cas_lat_supported & 0x00010000 )
- {
- cl_count_array[16]++;
- }
- else if ( l_spd_cas_lat_supported & 0x00020000 )
- {
- cl_count_array[17]++;
- }
- else if ( l_spd_cas_lat_supported & 0x00040000)
- {
- cl_count_array[18]++;
- }
- else if ( l_spd_cas_lat_supported & 0x00080000 )
- {
- cl_count_array[19]++;
- }
- else if ( l_spd_cas_lat_supported & 0x00100000 )
- {
- cl_count_array[20]++;
- }
-
-
- l_spd_cas_lat_supported_all = l_spd_cas_lat_supported_all & l_spd_cas_lat_supported;
-
-
- if ( (module_type_group_1 == module_type) || (module_type_group_1 == 0) )
- {
- module_type_group_1 = module_type;
- module_type_group_1_total++;
- }
- else if ( (module_type_group_2 == module_type) || (module_type_group_2 == 0) )
- {
- module_type_group_2 = module_type;
- module_type_group_2_total++;
- }
-
- } // DIMM
- if (l_rc)
- {
- break;
- }
- } // MBA
- if (l_rc)
- {
- // Break out of do...while(0)
- break;
- }
- // Check for DIMM Module Type Mixing
- if (module_type_group_2 != 0)
- {
- if (module_type_group_1_total > module_type_group_2_total)
- {
- module_type_deconfig = module_type_group_1;
- }
- else
- {
- module_type_deconfig = module_type_group_2;
- }
-
- // Loop through the 2 MBA's
- for (uint32_t i=0; i < l_mbaChiplets.size(); i++)
- {
- // Get a vector of DIMM targets
- l_rc = fapiGetAssociatedDimms(l_mbaChiplets[i], l_dimm_targets);
- if (l_rc)
- {
- FAPI_ERR("Error Getting DIMM targets.");
- break;
- }
- for (uint32_t j=0; j < l_dimm_targets.size(); j++)
- {
- l_rc = FAPI_ATTR_GET(ATTR_SPD_MODULE_TYPE, &l_dimm_targets[j], module_type);
- if (l_rc)
- {
- FAPI_ERR("Unable to read the SPD module type.");
- break;
- }
- if (module_type == module_type_deconfig)
- {
- const fapi::Target &DIMM_TARGET = l_dimm_targets[j];
- const uint8_t &MODULE_TYPE = module_type;
- FAPI_ERR("Mixing of DIMM Module Types (%d, %d) deconfiguring minority type: %d", module_type_group_1, module_type_group_2, module_type_deconfig);
- FAPI_SET_HWP_ERROR(l_rc, RC_MSS_MODULE_TYPE_MIX);
- fapiLogError(l_rc);
- }
- } // DIMM
- if (l_rc)
- {
- break;
- }
- } // MBA
- } // if
- if (l_rc)
- {
- // Break out of do...while(0)
- break;
- }
- FAPI_INF( "Highest Supported Frequency amongst DIMMs: %d", l_dimm_freq_min);
- FAPI_INF( "Minimum TAA(ps) amongst DIMMs: %d Minimum TCK(ps) amongst DIMMs: %d", l_spd_min_taa_max, l_spd_min_tck_max);
-
- //Determining the cnfg for imposing any cnfg speed limitations
- if (((cur_dimm_spd_valid_u8array[0][0][0] == MSS_FREQ_VALID) && (cur_dimm_spd_valid_u8array[0][0][1] == MSS_FREQ_EMPTY)) || ((cur_dimm_spd_valid_u8array[0][0][1] == MSS_FREQ_VALID) && (cur_dimm_spd_valid_u8array[0][0][0] == MSS_FREQ_EMPTY)))
- {
- plug_config = MSS_FREQ_SINGLE_DROP;
- num_ranks_total = num_ranks[0][0][0] + 1;
- }
- else if (((cur_dimm_spd_valid_u8array[1][0][0] == MSS_FREQ_VALID) && (cur_dimm_spd_valid_u8array[1][0][1] == MSS_FREQ_EMPTY)) || ((cur_dimm_spd_valid_u8array[1][0][1] == MSS_FREQ_VALID) && (cur_dimm_spd_valid_u8array[1][0][0] == MSS_FREQ_EMPTY)))
- {
- plug_config = MSS_FREQ_SINGLE_DROP;
- num_ranks_total = num_ranks[1][0][0] + 1;
- }
- else if ((cur_dimm_spd_valid_u8array[0][0][0] == MSS_FREQ_VALID) && (cur_dimm_spd_valid_u8array[0][0][1] == MSS_FREQ_VALID))
- {
- plug_config = MSS_FREQ_DUAL_DROP;
- num_ranks_total = (num_ranks[0][0][0] + 1) + (num_ranks[0][0][1] + 1);
- }
- else if ((cur_dimm_spd_valid_u8array[1][0][0] == MSS_FREQ_VALID) && (cur_dimm_spd_valid_u8array[1][0][1] == MSS_FREQ_VALID))
- {
- plug_config = MSS_FREQ_DUAL_DROP;
- num_ranks_total = (num_ranks[1][0][0] + 1) + (num_ranks[1][0][1] + 1);
- }
- else
- {
- plug_config = MSS_FREQ_EMPTY;
- }
-
-
- FAPI_INF( "PLUG CONFIG(from SPD): %d, Type of Dimm(from SPD): 0x%02X, Num Ranks(from SPD): %d", plug_config, module_type, num_ranks_total);
-
- // Impose configuration limitations
- // Single Drop RDIMMs Cnfgs cannot run faster than 1333
- // DDR4 min speed 1600 and Cen no longer supports 1866.
- if (l_spd_dram_dev_type == fapi::ENUM_ATTR_SPD_DRAM_DEVICE_TYPE_DDR4)
- {
- l_dimm_freq_min = 1600;
- l_spd_min_tck_max = 1250;
- FAPI_INF( "DDR4/Centaur limitation. Centaur no longer handles 1866 and 1600 is min speed of DDR4. New Freq: %d", l_dimm_freq_min);
- }
- else if ((module_type_group_1 == ENUM_ATTR_SPD_MODULE_TYPE_RDIMM)&&(plug_config == MSS_FREQ_SINGLE_DROP)&&(l_dimm_freq_min > 1333))
- {
- l_dimm_freq_min = 1333;
- l_spd_min_tck_max = 1500;
- FAPI_INF( "Single Drop RDIMM with more than 1 Rank Cnfg limitation. New Freq: %d", l_dimm_freq_min);
- }
- // Double Drop RDIMMs Cnfgs cannot run faster than 1333 with less than 8 ranks total per port
- else if ((module_type_group_1 == ENUM_ATTR_SPD_MODULE_TYPE_RDIMM)&&(plug_config == MSS_FREQ_DUAL_DROP)&&(num_ranks_total < 8)&&(l_dimm_freq_min > 1333))
- {
- l_dimm_freq_min = 1333;
- l_spd_min_tck_max = 1500;
- FAPI_INF( "Dual Drop RDIMM with more than 4 Rank Cnfg limitation. New Freq: %d", l_dimm_freq_min);
- }
- // Double Drop RDIMMs Cnfgs cannot run faster than 1066 with 8 ranks total per port
- else if ((module_type_group_1 == ENUM_ATTR_SPD_MODULE_TYPE_RDIMM)&&(plug_config == MSS_FREQ_DUAL_DROP)&&(num_ranks_total == 8)&&(l_dimm_freq_min > 1066))
- {
- l_dimm_freq_min = 1066;
- l_spd_min_tck_max = 1875;
- FAPI_INF( "Dual Drop RDIMM with more than 8 Rank Cnfg limitation. New Freq: %d", l_dimm_freq_min);
- }
-
-
-
- if ( l_spd_min_tck_max == 0)
- {
- // Loop through the 2 MBA's
- for (uint32_t i=0; i < l_mbaChiplets.size(); i++)
- {
- // Get a vector of DIMM targets
- l_rc = fapiGetAssociatedDimms(l_mbaChiplets[i], l_dimm_targets);
- if (l_rc)
- {
- FAPI_ERR("Error Getting DIMM targets.");
- break;
- }
- for (uint32_t j=0; j < l_dimm_targets.size(); j++)
- {
- l_rc = FAPI_ATTR_GET(ATTR_SPD_TCKMIN, &l_dimm_targets[j], l_spd_min_tck_MTB);
- if (l_rc)
- {
- FAPI_ERR("Unable to read SPD Minimum TCK (Min Clock Cycle).");
- break;
- }
- if ( l_spd_min_tck_MTB == 0 )
- {
- FAPI_ERR("l_spd_min_tck_max = 0 unable to calculate freq or cl. Possibly no centaurs configured. ");
- const uint32_t &MIN_TCK = l_spd_min_tck_max;
- const uint32_t &MIN_TAA = l_spd_min_taa_max;
- const fapi::Target &DIMM_TARGET = l_dimm_targets[j];
- const fapi::Target &TARGET = i_target_memb;
- FAPI_SET_HWP_ERROR(l_rc, RC_MSS_UNSUPPORTED_SPD_DATA_COMMON);
- fapiLogError(l_rc);
- }
- } // DIMM
- if (l_rc)
- {
- break;
- }
- } // MBA
- } // if
- if (l_rc)
- {
- // Break out of do...while(0)
- break;
- }
- if (!l_rc)
- {
- l_rc = FAPI_ATTR_GET(ATTR_MSS_FREQ_OVERRIDE, &i_target_memb, l_freq_override);
- if ( l_freq_override != 0)
- {
- // The relationship is as such
- // l_dimm_freq_min = 2000000 / l_spd_min_tck_max
-
- if (l_freq_override == 1866)
- {
- l_dimm_freq_min = 1866;
- l_spd_min_tck_max = 1072;
- }
-
- if (l_freq_override == 1600)
- {
- l_dimm_freq_min = 1600;
- l_spd_min_tck_max = 1250;
- }
-
- if (l_freq_override == 1333)
- {
- l_dimm_freq_min = 1333;
- l_spd_min_tck_max = 1500;
- }
-
- if (l_freq_override == 1066)
- {
- l_dimm_freq_min = 1066;
- l_spd_min_tck_max = 1875;
- }
-
- FAPI_INF( "Override Frequency Detected: %d", l_dimm_freq_min);
- }
- }
-
-
-
- //If no common supported CL get rid of the minority DIMMs
- if ((l_spd_cas_lat_supported_all == 0) && (!l_rc))
- {
- for(uint8_t i=0;i<20;i++)
- {
- if (cl_count_array[i] > highest_cl_count)
- {
- highest_common_cl = i;
- }
- }
-
-
- // Loop through the 2 MBA's
- for (uint32_t i=0; i < l_mbaChiplets.size(); i++)
- {
- // Get a vector of DIMM targets
- l_rc = fapiGetAssociatedDimms(l_mbaChiplets[i], l_dimm_targets);
- if (l_rc)
- {
- FAPI_ERR("Error Getting DIMM targets.");
- break;
- }
- for (uint32_t j=0; j < l_dimm_targets.size(); j++)
- {
- l_rc = FAPI_ATTR_GET(ATTR_SPD_CAS_LATENCIES_SUPPORTED, &l_dimm_targets[j], l_spd_cas_lat_supported);
- if (l_rc)
- {
- FAPI_ERR("Unable to read SPD Supported CAS Latencies.");
- break;
- }
- if ( !(l_spd_cas_lat_supported & 0x0000001 << highest_common_cl) )
- {
- const fapi::Target &DIMM_TARGET = l_dimm_targets[j];
- const uint32_t &CL_SUPPORTED = l_spd_cas_lat_supported;
- FAPI_ERR("No common supported CAS latencies between DIMMS.");
- FAPI_SET_HWP_ERROR(l_rc, RC_MSS_NO_COMMON_SUPPORTED_CL);
- fapiLogError(l_rc);
- }
- } // DIMM
- if (l_rc)
- {
- break;
- }
- } // MBA
- } // if
- if (l_rc)
- {
- // Break out of do...while(0)
- break;
- }
- if (!l_rc)
- {
-
- //Determine a proposed CAS latency
- l_cas_latency = l_spd_min_taa_max / l_spd_min_tck_max;
-
- FAPI_INF( "CL = TAA / TCK ... TAA(ps): %d TCK(ps): %d", l_spd_min_taa_max, l_spd_min_tck_max);
- FAPI_INF( "Calculated CL: %d", l_cas_latency);
-
- if ( l_spd_min_taa_max % l_spd_min_tck_max)
- {
- l_cas_latency++;
- FAPI_INF( "After rounding up ... CL: %d", l_cas_latency);
- }
-
- l_cl_mult_tck = l_cas_latency * l_spd_min_tck_max;
-
- // If the CL proposed is not supported or the TAA exceeds TAA max
- // Spec defines tAAmax as 20 ns for all DDR3 speed grades.
- // Break loop if we have an override condition without a solution.
-
- while ( ( (!( l_spd_cas_lat_supported_all & (0x00000001<<(l_cas_latency-4)))) || (l_cl_mult_tck > 20000) )
- && ( l_override_path == 0 ) )
- {
-
- FAPI_INF( "Warning calculated CL is not supported in VPD. Searching for a new CL.");
-
- // If not supported, increment the CL up to 18 (highest supported CL) looking for Supported CL
- while ((!( l_spd_cas_lat_supported_all & (0x00000001<<(l_cas_latency-4))))&&(l_cas_latency < 18))
- {
- l_cas_latency++;
- }
-
- // If still not supported CL or TAA is > 20 ns ... pick a slower TCK and start again
- l_cl_mult_tck = l_cas_latency * l_spd_min_tck_max;
-
- // Do not move freq if using an override freq. Just continue. Hence the overide in this if statement
- if ( ( (!( l_spd_cas_lat_supported_all & (0x00000001<<(l_cas_latency-4)))) || (l_cl_mult_tck > 20000) )
- && ( l_freq_override == 0) )
- {
- FAPI_INF( "No Supported CL works for calculating frequency. Lowering frequency and trying CL Algorithm again.");
-
- if (l_spd_min_tck_max < 1500)
- {
- //1600 to 1333
- l_spd_min_tck_max = 1500;
-
- }
- else if (l_spd_min_tck_max < 1875)
- {
- //1333 to 1066
- l_spd_min_tck_max = 1875;
- }
- else if (l_spd_min_tck_max < 2500)
- {
- //1066 to 800
- l_spd_min_tck_max = 2500;
- }
- else
- {
- //This is minimum frequency and cannot be lowered
- //Therefore we will deconfig the minority dimms.
- for(uint8_t i=0;i<20;i++)
- {
- if (cl_count_array[i] > lowest_cl_count)
- {
- lowest_common_cl = i;
- }
- }
-
-
- // Loop through the 2 MBA's
- for (uint32_t i=0; i < l_mbaChiplets.size(); i++)
- {
- // Get a vector of DIMM targets
- l_rc = fapiGetAssociatedDimms(l_mbaChiplets[i], l_dimm_targets);
- if (l_rc)
- {
- FAPI_ERR("Error Getting DIMM targets.");
- return l_rc;
- }
- for (uint32_t j=0; j < l_dimm_targets.size(); j++)
- {
- l_rc = FAPI_ATTR_GET(ATTR_SPD_CAS_LATENCIES_SUPPORTED, &l_dimm_targets[j], l_spd_cas_lat_supported);
- if (l_rc)
- {
- FAPI_ERR("Unable to read SPD Supported CAS Latencies.");
- break;
- }
- if (l_spd_cas_lat_supported & 0x0000001 << lowest_common_cl)
- {
- const fapi::Target &DIMM_TARGET = l_dimm_targets[j];
- const uint32_t &CL_SUPPORTED = l_spd_cas_lat_supported;
- FAPI_ERR("Lowered Frequency to TCLK MIN finding no supported CL without exceeding TAA MAX.");
- FAPI_SET_HWP_ERROR(l_rc, RC_MSS_EXCEED_TAA_MAX_NO_CL );
- fapiLogError(l_rc);
- }
- } // DIMM
- if (l_rc)
- {
- break;
- }
- } // MBA
- } // else
- if (l_rc)
- {
- // Break out of while loop
- break;
- }
- // Re-calculate with new tck
- l_cas_latency = l_spd_min_taa_max / l_spd_min_tck_max;
- if ( l_spd_min_taa_max % l_spd_min_tck_max)
- {
- l_cas_latency++;
- }
- l_cl_mult_tck = l_cas_latency * l_spd_min_tck_max;
- l_dimm_freq_min = 2000000 / l_spd_min_tck_max;
-
- } // if
- // Need to break the loop in case we reach this condition because no longer modify freq and CL
- // With an overrride
- if ( ( (!( l_spd_cas_lat_supported_all & (0x00000001<<(l_cas_latency-4)))) || (l_cl_mult_tck > 20000) )
- && ( l_freq_override != 0) )
- {
-
- FAPI_INF( "No Supported CL works for override frequency. Using override frequency with an unsupported CL.");
- l_override_path = 1;
- }
- } // while
- } // if
- if (l_rc)
- {
- // Break out of do...while(0)
- break;
- }
- //bucketize dimm freq.
- if (!l_rc)
- {
- if (l_dimm_freq_min < 1013)
- {
- FAPI_ERR("Unsupported frequency: DIMM Freq calculated < 1013 MHz");
- const uint32_t &DIMM_MIN_FREQ = l_dimm_freq_min;
- FAPI_SET_HWP_ERROR(l_rc, RC_MSS_UNSUPPORTED_FREQ_CALCULATED);
- break;
- }
- else if (l_dimm_freq_min < 1266)
- {
- // 1066
- l_selected_dimm_freq=1066;
- }
- else if (l_dimm_freq_min < 1520)
- {
- // 1333
- l_selected_dimm_freq=1333;
- }
- else if (l_dimm_freq_min < 1773)
- {
- // 1600
- l_selected_dimm_freq=1600;
- }
- else if (l_dimm_freq_min < 2026)
- {
- // 1866
- l_selected_dimm_freq=1866;
- }
- else if (l_dimm_freq_min < 2280)
- {
- // 2133
- l_selected_dimm_freq=2133;
- }
- else
- {
- FAPI_ERR("Unsupported frequency: DIMM Freq calculated > 2133 MHz: %d", l_dimm_freq_min);
- const uint32_t &DIMM_MIN_FREQ = l_dimm_freq_min;
- FAPI_SET_HWP_ERROR(l_rc, RC_MSS_UNSUPPORTED_FREQ_CALCULATED);
- break;
- }
- }
-
- if (!l_rc)
- {
- // 0x03 = capable of both 8.0G/9.6G, 0x01 = capable of 8.0G, 0x02 = capable 9.6G
- if ( l_selected_dimm_freq == 1066)
- {
- l_nest_capable_frequencies = 0x01;
- l_rc = FAPI_ATTR_SET(ATTR_MSS_NEST_CAPABLE_FREQUENCIES, &i_target_memb, l_nest_capable_frequencies);
- }
- else
- {
- l_nest_capable_frequencies = 0x03;
- l_rc = FAPI_ATTR_SET(ATTR_MSS_NEST_CAPABLE_FREQUENCIES, &i_target_memb, l_nest_capable_frequencies);
- }
-
- }
-
- // set frequency in centaur attribute ATTR_MSS_FREQ
- if (!l_rc)
- {
- l_rc = FAPI_ATTR_SET(ATTR_MSS_FREQ, &i_target_memb, l_selected_dimm_freq);
- if (l_rc)
- {
- break;
- }
- FAPI_INF( "Final Chosen Frequency: %d ", l_selected_dimm_freq);
- FAPI_INF( "Final Chosen CL: %d ", l_cas_latency);
- for (uint32_t k=0; k < l_mbaChiplets.size(); k++)
- {
- l_rc = FAPI_ATTR_SET(ATTR_EFF_DRAM_CL, &l_mbaChiplets[k], l_cas_latency);
- if (l_rc)
- {
- break;
- }
- }
- }
- }while(0);
- //all done.
- return l_rc;
-}
-
diff --git a/src/usr/hwpf/hwp/mc_config/mss_freq/mss_freq.H b/src/usr/hwpf/hwp/mc_config/mss_freq/mss_freq.H
deleted file mode 100644
index c2a096ab8..000000000
--- a/src/usr/hwpf/hwp/mc_config/mss_freq/mss_freq.H
+++ /dev/null
@@ -1,73 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG */
-/* This is an automatically generated prolog. */
-/* */
-/* $Source: src/usr/hwpf/hwp/mc_config/mss_freq/mss_freq.H $ */
-/* */
-/* OpenPOWER HostBoot Project */
-/* */
-/* Contributors Listed Below - COPYRIGHT 2012,2014 */
-/* [+] International Business Machines Corp. */
-/* */
-/* */
-/* Licensed under the Apache License, Version 2.0 (the "License"); */
-/* you may not use this file except in compliance with the License. */
-/* 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 */
-// $Id: mss_freq.H,v 1.5 2012/07/17 13:22:54 bellows Exp $
-//------------------------------------------------------------------------------
-// *! (C) Copyright International Business Machines Corp. 2011
-// *! All Rights Reserved -- Property of IBM
-// *! *** ***
-//------------------------------------------------------------------------------
-// *! TITLE : mss_freq.H
-// *! DESCRIPTION : see additional comments below
-// *! OWNER NAME : Jeff Sabrowski Email: jsabrow@us.ibm.com
-// *! BACKUP NAME : Mark Bellows Email: bellows@us.ibm.com
-// *! ADDITIONAL COMMENTS :
-//
-// Header file for mss_freq.
-//
-//------------------------------------------------------------------------------
-// Don't forget to create CVS comments when you check in your changes!
-//------------------------------------------------------------------------------
-// CHANGE HISTORY:
-//------------------------------------------------------------------------------
-// Version:| Author: | Date: | Comment:
-//---------|----------|---------_|-----------------------------------------------
-// 1.0 | jsabrow | 11/30/11 | initial drop
-// 1.2 | jsabrow | 02/14/12 | Updates for initial code review
-// 1.3 | jdsloat | 04/26/12 | Code review updates
-// 1.5 | bellows | 07/16/12 | added in Id tag
-
-#ifndef MSS_FREQHWPB_H_
-#define MSS_FREQHWPB_H_
-
-#include <fapi.H>
-
-typedef fapi::ReturnCode (*mss_freq_FP_t)(const fapi::Target &);
-
-extern "C"
-{
-
-/**
- * @brief mss_freq procedure. Determines operating frequency for dimms behind a centaur
- *
- * @param[in] fapi::Target &l_targets target type = centaur
- *
- * @return ReturnCode
- */
-
- fapi::ReturnCode mss_freq(const fapi::Target & i_target);
-
-} // extern "C"
-
-#endif // MSS_FREQHWPB_H_
diff --git a/src/usr/hwpf/hwp/mc_config/mss_volt/HBconfig b/src/usr/hwpf/hwp/mc_config/mss_volt/HBconfig
deleted file mode 100644
index 94cdb36aa..000000000
--- a/src/usr/hwpf/hwp/mc_config/mss_volt/HBconfig
+++ /dev/null
@@ -1,4 +0,0 @@
-config ALLOW_NON_COMPLIANT_DIMM
- default n
- help
- Set ATTR_MSS_VOLT_COMPLIANT_DIMMS to allow dimms that are not 1.35V
diff --git a/src/usr/hwpf/hwp/mc_config/mss_volt/memory_mss_volt.xml b/src/usr/hwpf/hwp/mc_config/mss_volt/memory_mss_volt.xml
deleted file mode 100644
index 4e347de14..000000000
--- a/src/usr/hwpf/hwp/mc_config/mss_volt/memory_mss_volt.xml
+++ /dev/null
@@ -1,121 +0,0 @@
-<!-- IBM_PROLOG_BEGIN_TAG -->
-<!-- This is an automatically generated prolog. -->
-<!-- -->
-<!-- $Source: src/usr/hwpf/hwp/mc_config/mss_volt/memory_mss_volt.xml $ -->
-<!-- -->
-<!-- OpenPOWER HostBoot Project -->
-<!-- -->
-<!-- Contributors Listed Below - COPYRIGHT 2013,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 -->
-<hwpErrors>
-
-<!-- $Id: memory_mss_volt.xml,v 1.4 2015/04/29 21:22:33 jdsloat Exp $ -->
-<!-- For file ../../ipl/fapi/mss_volt.C -->
-<!-- // *! OWNER NAME : Jacob Sloat (jdsloat@us.ibm.com) -->
-<!-- // *! BACKUP NAME : -->
-
-<!-- Original Source for RC_MSS_VOLT_UNRECOGNIZED_DRAM_DEVICE_TYPE memory_errors.xml -->
- <hwpError>
- <rc>RC_MSS_VOLT_UNRECOGNIZED_DRAM_DEVICE_TYPE</rc>
- <description>Unsupported DIMM type found. All dimms must be DDR3 or DDR4</description>
- <ffdc>DEVICE_TYPE</ffdc>
- <callout>
- <target>DIMM_TARGET</target>
- <priority>HIGH</priority>
- </callout>
- <deconfigure>
- <target>DIMM_TARGET</target>
- </deconfigure>
- </hwpError>
-
-<!-- Original Source for RC_MSS_VOLT_DDR_TYPE_MIXING_UNSUPPORTED memory_errors.xml -->
- <hwpError>
- <rc>RC_MSS_VOLT_DDR_TYPE_MIXING_UNSUPPORTED</rc>
- <description>Mixing of DDR3 and DDR4 not supported.</description>
- <ffdc>DEVICE_TYPE</ffdc>
- <callout>
- <target>DIMM_DDR4_TARGET</target>
- <priority>HIGH</priority>
- </callout>
- <deconfigure>
- <target>DIMM_DDR4_TARGET</target>
- </deconfigure>
- </hwpError>
-
-<!-- Original Source for RC_MSS_VOLT_DDR_TYPE_REQUIRED_VOLTAGE memory_errors.xml -->
- <hwpError>
- <rc>RC_MSS_VOLT_DDR_TYPE_REQUIRED_VOLTAGE</rc>
- <description>One or more DIMMs do not support required voltage for DDR type.</description>
- <ffdc>DIMM_VOLTAGE</ffdc>
- <callout>
- <target>DIMM_UV_TARGET</target>
- <priority>HIGH</priority>
- </callout>
- <deconfigure>
- <target>DIMM_UV_TARGET</target>
- </deconfigure>
- </hwpError>
-
-<!-- Original Source for RC_MSS_VOLT_DDR_TYPE_COMPLIANT_VOLTAGE memory_errors.xml -->
- <hwpError>
- <rc>RC_MSS_VOLT_DDR_TYPE_COMPLIANT_VOLTAGE</rc>
- <description>One or more DIMMs do not support compliant voltage for DDR type.</description>
- <ffdc>DIMM_VOLTAGE</ffdc>
- <callout>
- <target>DIMM_CV_TARGET</target>
- <priority>HIGH</priority>
- </callout>
- <deconfigure>
- <target>DIMM_CV_TARGET</target>
- </deconfigure>
- </hwpError>
-
-<!-- Original Source for RC_MSS_VOLT_TOLERATED_VOLTAGE_VIOLATION memory_errors.xml -->
- <hwpError>
- <rc>RC_MSS_VOLT_TOLERATED_VOLTAGE_VIOLATION</rc>
- <description>One or more DIMMs classified non-functional has a tolerated voltage below selected voltage.</description>
- <ffdc>DIMM_VOLTAGE</ffdc>
- <!-- Deconfigure DIMM or Centaur -->
- <deconfigure>
- <target>CHIP_TARGET</target>
- </deconfigure>
- </hwpError>
-
- <hwpError>
- <rc>RC_MSS_VOLT_OVERIDE_MIXING</rc>
- <description>An override is trying to be applied to only a part of the voltage domain. It needs to be applied to the entire domain.</description>
- <ffdc>OVERRIDE_TYPE</ffdc>
- <ffdc>OVERRIDE_DOMAIN_TYPE</ffdc>
- <callout>
- <target>MEMB_TARGET</target>
- <priority>HIGH</priority>
- </callout>
- </hwpError>
-
- <hwpError>
- <rc>RC_MSS_VOLT_OVERIDE_UKNOWN</rc>
- <description>An uknown override is trying to be applied to the voltage domain. It needs to be none, 1.2 or 1.35V. </description>
- <ffdc>OVERRIDE_TYPE</ffdc>
- <callout>
- <procedure>CODE</procedure>
- <priority>HIGH</priority>
- </callout>
- </hwpError>
-
-</hwpErrors>
-
diff --git a/src/usr/hwpf/hwp/mc_config/mss_volt/memory_mss_volt_avdd_offset.xml b/src/usr/hwpf/hwp/mc_config/mss_volt/memory_mss_volt_avdd_offset.xml
deleted file mode 100644
index a66d31391..000000000
--- a/src/usr/hwpf/hwp/mc_config/mss_volt/memory_mss_volt_avdd_offset.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<!-- IBM_PROLOG_BEGIN_TAG -->
-<!-- This is an automatically generated prolog. -->
-<!-- -->
-<!-- $Source: src/usr/hwpf/hwp/mc_config/mss_volt/memory_mss_volt_avdd_offset.xml $ -->
-<!-- -->
-<!-- OpenPOWER HostBoot Project -->
-<!-- -->
-<!-- COPYRIGHT International Business Machines Corp. 2014 -->
-<!-- -->
-<!-- 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 -->
-<hwpErrors>
-
-<!-- $Id: memory_mss_volt_avdd_offset.xml,v 1.2 2014/06/18 20:26:57 dcadiga Exp $ -->
-<!-- For file ../../ipl/fapi/mss_volt_avdd_offset.C -->
-<!-- // *! OWNER NAME : Stephen Glancy (sglancy@us.ibm.com) -->
-<!-- // *! BACKUP NAME : Jacob Sloat (jdsloat@us.ibm.com) -->
-
-
-<!-- Original Source for RC_MSS_VOLT_TOLERATED_VOLTAGE_VIOLATION memory_errors.xml -->
- <hwpError>
- <rc>RC_MSS_VOLT_AVDD_OFFSET_VALUE_ERROR</rc>
- <description>One or more dynamic AVDD attributes is 0.</description>
- <ffdc>AVDD_SLOPE_ACTIVE</ffdc>
- <ffdc>AVDD_SLOPE_INACTIVE</ffdc>
- <ffdc>AVDD_SLOPE_INTERCEPT</ffdc>
- <callout>
- <procedure>CODE</procedure>
- <priority>HIGH</priority>
- </callout>
- </hwpError>
-
-</hwpErrors>
-
diff --git a/src/usr/hwpf/hwp/mc_config/mss_volt/memory_mss_volt_vcs_offset.xml b/src/usr/hwpf/hwp/mc_config/mss_volt/memory_mss_volt_vcs_offset.xml
deleted file mode 100644
index 6784a184c..000000000
--- a/src/usr/hwpf/hwp/mc_config/mss_volt/memory_mss_volt_vcs_offset.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<!-- IBM_PROLOG_BEGIN_TAG -->
-<!-- This is an automatically generated prolog. -->
-<!-- -->
-<!-- $Source: src/usr/hwpf/hwp/mc_config/mss_volt/memory_mss_volt_vcs_offset.xml $ -->
-<!-- -->
-<!-- OpenPOWER HostBoot Project -->
-<!-- -->
-<!-- COPYRIGHT International Business Machines Corp. 2014 -->
-<!-- -->
-<!-- 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 -->
-<hwpErrors>
-
-<!-- $Id: memory_mss_volt_vcs_offset.xml,v 1.2 2014/06/18 20:27:01 dcadiga Exp $ -->
-<!-- For file ../../ipl/fapi/mss_volt_vcs_offset.C -->
-<!-- // *! OWNER NAME : Stephen Glancy (sglancy@us.ibm.com) -->
-<!-- // *! BACKUP NAME : Jacob Sloat (jdsloat@us.ibm.com) -->
-
-
-<!-- Original Source for RC_MSS_VOLT_TOLERATED_VOLTAGE_VIOLATION memory_errors.xml -->
- <hwpError>
- <rc>RC_MSS_VOLT_VCS_OFFSET_VALUE_ERROR</rc>
- <ffdc>VCS_SLOPE_ACTIVE</ffdc>
- <ffdc>VCS_SLOPE_INACTIVE</ffdc>
- <ffdc>VCS_SLOPE_INTERCEPT</ffdc>
- <description>One or more dynamic VCS attributes is 0.</description>
- <callout>
- <procedure>CODE</procedure>
- <priority>HIGH</priority>
- </callout>
- </hwpError>
-
-</hwpErrors>
-
diff --git a/src/usr/hwpf/hwp/mc_config/mss_volt/memory_mss_volt_vdd_offset.xml b/src/usr/hwpf/hwp/mc_config/mss_volt/memory_mss_volt_vdd_offset.xml
deleted file mode 100644
index d82b37123..000000000
--- a/src/usr/hwpf/hwp/mc_config/mss_volt/memory_mss_volt_vdd_offset.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<!-- IBM_PROLOG_BEGIN_TAG -->
-<!-- This is an automatically generated prolog. -->
-<!-- -->
-<!-- $Source: src/usr/hwpf/hwp/mc_config/mss_volt/memory_mss_volt_vdd_offset.xml $ -->
-<!-- -->
-<!-- OpenPOWER HostBoot Project -->
-<!-- -->
-<!-- COPYRIGHT International Business Machines Corp. 2014 -->
-<!-- -->
-<!-- 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 -->
-<hwpErrors>
-
-<!-- $Id: memory_mss_volt_vdd_offset.xml,v 1.2 2014/06/18 20:27:05 dcadiga Exp $ -->
-<!-- For file ../../ipl/fapi/mss_volt_vdd_offset.C -->
-<!-- // *! OWNER NAME : Stephen Glancy (sglancy@us.ibm.com) -->
-<!-- // *! BACKUP NAME : Jacob Sloat (jdsloat@us.ibm.com) -->
-
-
-<!-- Original Source for RC_MSS_VOLT_TOLERATED_VOLTAGE_VIOLATION memory_errors.xml -->
- <hwpError>
- <rc>RC_MSS_VOLT_VDD_OFFSET_VALUE_ERROR</rc>
- <ffdc>VDD_SLOPE_ACTIVE</ffdc>
- <ffdc>VDD_SLOPE_INACTIVE</ffdc>
- <ffdc>VDD_SLOPE_INTERCEPT</ffdc>
- <description>One or more dynamic VDD attributes is 0.</description>
- <callout>
- <procedure>CODE</procedure>
- <priority>HIGH</priority>
- </callout>
- </hwpError>
-
-</hwpErrors>
-
diff --git a/src/usr/hwpf/hwp/mc_config/mss_volt/memory_mss_volt_vddr_offset.xml b/src/usr/hwpf/hwp/mc_config/mss_volt/memory_mss_volt_vddr_offset.xml
deleted file mode 100644
index 79186ae46..000000000
--- a/src/usr/hwpf/hwp/mc_config/mss_volt/memory_mss_volt_vddr_offset.xml
+++ /dev/null
@@ -1,103 +0,0 @@
-<!-- IBM_PROLOG_BEGIN_TAG -->
-<!-- This is an automatically generated prolog. -->
-<!-- -->
-<!-- $Source: src/usr/hwpf/hwp/mc_config/mss_volt/memory_mss_volt_vddr_offset.xml $ -->
-<!-- -->
-<!-- OpenPOWER HostBoot Project -->
-<!-- -->
-<!-- Contributors Listed Below - COPYRIGHT 2014 -->
-<!-- [+] International Business Machines Corp. -->
-<!-- -->
-<!-- -->
-<!-- Licensed under the Apache License, Version 2.0 (the "License"); -->
-<!-- you may not use this file except in compliance with the License. -->
-<!-- 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 -->
-<hwpErrors>
-
-<!-- $Id: memory_mss_volt_vddr_offset.xml,v 1.5 2014/09/04 16:14:43 sglancy Exp $ -->
-<!-- For file ../../ipl/fapi/mss_volt_vddr_offset.C -->
-<!-- // *! OWNER NAME : Stephen Glancy (sglancy@us.ibm.com) -->
-<!-- // *! BACKUP NAME : Jacob Sloat (jdsloat@us.ibm.com) -->
-
-
-<!-- Original Source for RC_MSS_VOLT_TOLERATED_VOLTAGE_VIOLATION memory_errors.xml -->
- <hwpError>
- <rc>RC_MSS_VOLT_VDDR_OFFSET_DRAM_GEN_MISCOMPARE</rc>
- <description>One or more DIMMs has a different generation of DRAM technology level.</description>
- <ffdc>DRAM_GEN_MISCOMPARE</ffdc>
- <ffdc>DRAM_GEN_START</ffdc>
- <ffdc>CEN_MBA_NUM</ffdc>
- <ffdc>CEN_TARGET_NUM</ffdc>
- </hwpError>
-
- <hwpError>
- <rc>RC_VDDR_FUNCTIONAL_DIMM_VPD_READ_ERROR</rc>
- <description>Unable to read the VPD from a non-functional dimm.</description>
- <ffdc>TARGET_POSITION</ffdc>
- <ffdc>MBA_POSITION</ffdc>
- <ffdc>DIMM_POSITION</ffdc>
- <callout>
- <target>TARGET_DIMM_ERROR</target>
- <priority>HIGH</priority>
- </callout>
-
- <deconfigure>
- <target>MBA_TARGET</target>
- </deconfigure>
- </hwpError>
-
- <hwpError>
- <rc>RC_VOLT_VDDR_FUNCTIONAL_CENTAUR_NOT_FOUND</rc>
- <description>Code did not find a functional centaur.</description>
- <callout>
- <procedure>CODE</procedure>
- <priority>HIGH</priority>
- </callout>
- </hwpError>
-
- <hwpError>
- <rc>RC_VOLT_VDDR_DRAM_GEN_NOT_FOUND</rc>
- <description>Code did not find a DIMM with a readable attribute for DRAM_GEN.</description>
- <callout>
- <procedure>CODE</procedure>
- <priority>HIGH</priority>
- </callout>
- </hwpError>
-
-
- <hwpError>
- <rc>RC_MSS_VOLT_VDDR_OFFSET_VPD_VALUE_ERROR</rc>
- <description>one or more VPD voltage attributes is 0.</description>
- <ffdc>VPD_MASTER_POWER_SLOPE</ffdc>
- <ffdc>VPD_MASTER_POWER_INTERCEPT</ffdc>
- <ffdc>CEN_TARGET_NUM</ffdc>
- <deconfigure>
- <target>CHIP_TARGET</target>
- </deconfigure>
- </hwpError>
-
- <hwpError>
- <rc>RC_MSS_VOLT_VDDR_OFFSET_VALUE_ERROR</rc>
- <ffdc>VDDR_SLOPE_ACTIVE</ffdc>
- <ffdc>VDDR_SLOPE_INACTIVE</ffdc>
- <ffdc>VDDR_SLOPE_INTERCEPT</ffdc>
- <description>One or more dynamic VDDR attributes is 0.</description>
- <callout>
- <procedure>CODE</procedure>
- <priority>HIGH</priority>
- </callout>
- </hwpError>
-
-
-</hwpErrors>
-
diff --git a/src/usr/hwpf/hwp/mc_config/mss_volt/memory_mss_volt_vpp_offset.xml b/src/usr/hwpf/hwp/mc_config/mss_volt/memory_mss_volt_vpp_offset.xml
deleted file mode 100644
index 43f0014d7..000000000
--- a/src/usr/hwpf/hwp/mc_config/mss_volt/memory_mss_volt_vpp_offset.xml
+++ /dev/null
@@ -1,105 +0,0 @@
-<!-- IBM_PROLOG_BEGIN_TAG -->
-<!-- This is an automatically generated prolog. -->
-<!-- -->
-<!-- $Source: src/usr/hwpf/hwp/mc_config/mss_volt/memory_mss_volt_vpp_offset.xml $ -->
-<!-- -->
-<!-- OpenPOWER HostBoot Project -->
-<!-- -->
-<!-- Contributors Listed Below - COPYRIGHT 2014 -->
-<!-- [+] International Business Machines Corp. -->
-<!-- -->
-<!-- -->
-<!-- Licensed under the Apache License, Version 2.0 (the "License"); -->
-<!-- you may not use this file except in compliance with the License. -->
-<!-- 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 -->
-<hwpErrors>
-
-<!-- $Id: memory_mss_volt_vpp_offset.xml,v 1.6 2014/09/08 20:53:44 sglancy Exp $ -->
-<!-- For file ../../ipl/fapi/mss_volt_vpp_offset.C -->
-<!-- // *! OWNER NAME : Stephen Glancy (sglancy@us.ibm.com) -->
-<!-- // *! BACKUP NAME : Jacob Sloat (jdsloat@us.ibm.com) -->
-
-
-<!-- Original Source for RC_MSS_VOLT_TOLERATED_VOLTAGE_VIOLATION memory_errors.xml -->
-
- <hwpError>
- <rc>RC_VOLT_VPP_FUNCTIONAL_CENTAUR_NOT_FOUND</rc>
- <description>Code did not find a functional centaur.</description>
- <callout>
- <procedure>CODE</procedure>
- <priority>HIGH</priority>
- </callout>
- </hwpError>
-
- <hwpError>
- <rc>RC_MSS_VOLT_VPP_OFFSET_DRAM_GEN_MISCOMPARE</rc>
- <description>One or more DIMMs has a different generation of DRAM technology level.</description>
- <ffdc>DRAM_GEN_MISCOMPARE</ffdc>
- <ffdc>DRAM_GEN_START</ffdc>
- <ffdc>CEN_MBA_NUM</ffdc>
- <ffdc>CEN_TARGET_NUM</ffdc>
- </hwpError>
-
- <hwpError>
- <rc>RC_VPP_FUNCTIONAL_DIMM_VPD_READ_ERROR</rc>
- <description>Unable to read the VPD from a non-functional dimm.</description>
- <ffdc>TARGET_POSITION</ffdc>
- <ffdc>MBA_POSITION</ffdc>
- <ffdc>DIMM_POSITION</ffdc>
- <ffdc>FAILING_ATTRIBUTE</ffdc>
- <callout>
- <target>TARGET_DIMM_ERROR</target>
- <priority>HIGH</priority>
- </callout>
- <deconfigure>
- <target>MBA_TARGET</target>
- </deconfigure>
- </hwpError>
-
- <hwpError>
- <rc>RC_VPP_FUNCTIONAL_CENTAUR_VPD_READ_ERROR</rc>
- <description>Unable to read the VPD from a non-functional dimm.</description>
- <ffdc>TARGET_POSITION</ffdc>
- <ffdc>MBA_POSITION</ffdc>
- <ffdc>FAILING_ATTRIBUTE</ffdc>
- <callout>
- <target>TARGET_CEN_ERROR</target>
- <priority>HIGH</priority>
- </callout>
- <deconfigure>
- <target>MBA_TARGET</target>
- </deconfigure>
- </hwpError>
-
- <hwpError>
- <rc>RC_VOLT_VPP_DRAM_GEN_NOT_FOUND</rc>
- <description>Code did not find a DIMM with a readable attribute for DRAM_GEN.</description>
- <callout>
- <procedure>CODE</procedure>
- <priority>HIGH</priority>
- </callout>
- </hwpError>
-
- <hwpError>
- <rc>RC_MSS_VOLT_VPP_OFFSET_VALUE_ERROR</rc>
- <description>One or more dynamic VPP attributes is 0.</description>
- <ffdc>VPP_SLOPE</ffdc>
- <ffdc>VPP_INTERCEPT</ffdc>
- <callout>
- <procedure>CODE</procedure>
- <priority>HIGH</priority>
- </callout>
- </hwpError>
-
-</hwpErrors>
-
diff --git a/src/usr/hwpf/hwp/mc_config/mss_volt/mss_count_active_centaurs.C b/src/usr/hwpf/hwp/mc_config/mss_volt/mss_count_active_centaurs.C
deleted file mode 100644
index adb1ca83e..000000000
--- a/src/usr/hwpf/hwp/mc_config/mss_volt/mss_count_active_centaurs.C
+++ /dev/null
@@ -1,95 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG */
-/* This is an automatically generated prolog. */
-/* */
-/* $Source: src/usr/hwpf/hwp/mc_config/mss_volt/mss_count_active_centaurs.C $ */
-/* */
-/* OpenPOWER HostBoot Project */
-/* */
-/* Contributors Listed Below - COPYRIGHT 2014 */
-/* [+] International Business Machines Corp. */
-/* */
-/* */
-/* Licensed under the Apache License, Version 2.0 (the "License"); */
-/* you may not use this file except in compliance with the License. */
-/* 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 */
-// $Id: mss_count_active_centaurs.C,v 1.1 2014/06/16 16:06:23 dcadiga Exp $
-/* File mss_volt_vpp_offset.C created by Stephen Glancy on Tue 20 May 2014. */
-
-//------------------------------------------------------------------------------
-// *! (C) Copyright International Business Machines Corp. 2007
-// *! All Rights Reserved -- Property of IBM
-// *! *** ***
-//------------------------------------------------------------------------------
-// *! TITLE : mss_volt_vpp_offset.C
-// *! DESCRIPTION : Tools for centaur procedures
-// *! OWNER NAME : Stephen Glancy (sglancy@us.ibm.com)
-// *! BACKUP NAME : Jacob Sloat (jdsloat@us.ibm.com)
-// #! ADDITIONAL COMMENTS :
-//
-// General purpose funcs
-
-//------------------------------------------------------------------------------
-// Don't forget to create CVS comments when you check in your changes!
-//------------------------------------------------------------------------------
-// CHANGE HISTORY:
-//------------------------------------------------------------------------------
-// Version:| Author: | Date: | Comment:
-//---------|----------|----------|-----------------------------------------------
-// 1.1 | sglancy | 05/20/14 | File created
-
-// This procedure takes a vector of Centaurs and finds the total number of active and inactive centaurs
-
-
-//----------------------------------------------------------------------
-// Includes - FAPI
-//----------------------------------------------------------------------
-#include <fapi.H>
-#include <mss_count_active_centaurs.H>
-
-//----------------------------------------------------------------------
-// Constants
-//----------------------------------------------------------------------
-
-
-fapi::ReturnCode mss_count_active_centaurs(std::vector<fapi::Target> & i_targets, uint32_t & var_num_active_centaur, uint32_t &var_num_inactive_centaur)
-{
- fapi::ReturnCode l_rc;
- //sets up the variables
- uint8_t is_functional = 0;
- var_num_active_centaur = 0;
- var_num_inactive_centaur = 0;
-
- //loops through and generates the counts
- for(uint32_t i=0;i<i_targets.size();i++) {
- //gets the functional attribute to check for an active centaur
- l_rc = FAPI_ATTR_GET(ATTR_FUNCTIONAL,&i_targets[i],is_functional);
-
- //found an error
- if(l_rc) return l_rc;
-
- //found an active centaur
- if(is_functional == fapi::ENUM_ATTR_FUNCTIONAL_FUNCTIONAL) {
- var_num_active_centaur++;
- }
- //centaur must be inactive
- else {
- var_num_inactive_centaur++;
- }
- }
-
- //debug print
- FAPI_INF("RETURNING ACTIVE: %d INACTIVE: %d\n",var_num_active_centaur,var_num_inactive_centaur);
-
- //return
- return l_rc;
-}
diff --git a/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt.C b/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt.C
deleted file mode 100644
index a1a3a3f28..000000000
--- a/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt.C
+++ /dev/null
@@ -1,514 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG */
-/* This is an automatically generated prolog. */
-/* */
-/* $Source: src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt.C $ */
-/* */
-/* OpenPOWER HostBoot Project */
-/* */
-/* Contributors Listed Below - COPYRIGHT 2012,2015 */
-/* [+] International Business Machines Corp. */
-/* */
-/* */
-/* Licensed under the Apache License, Version 2.0 (the "License"); */
-/* you may not use this file except in compliance with the License. */
-/* You may obtain a copy of the License at */
-/* */
-/* http://www.apache.org/licenses/LICENSE-2.0 */
-/* */
-/* Unless required by applicable law or agreed to in writing, software */
-/* distributed under the License is distributed on an "AS IS" BASIS, */
-/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
-/* implied. See the License for the specific language governing */
-/* permissions and limitations under the License. */
-/* */
-/* IBM_PROLOG_END_TAG */
-// $Id: mss_volt.C,v 1.22 2015/05/01 15:14:45 jdsloat Exp $
-/* File mss_volt.C created by JEFF SABROWSKI on Fri 21 Oct 2011. */
-
-//------------------------------------------------------------------------------
-// *! (C) Copyright International Business Machines Corp. 2007
-// *! All Rights Reserved -- Property of IBM
-// *! *** ***
-//------------------------------------------------------------------------------
-// *! TITLE : mss_volt.C
-// *! DESCRIPTION : Tools for centaur procedures
-// *! OWNER NAME : Jacob Sloat (jdsloat@us.ibm.com)
-// *! BACKUP NAME :
-// #! ADDITIONAL COMMENTS :
-//
-// General purpose funcs
-
-//------------------------------------------------------------------------------
-// Don't forget to create CVS comments when you check in your changes!
-//------------------------------------------------------------------------------
-// CHANGE HISTORY:
-//------------------------------------------------------------------------------
-// Version:| Author: | Date: | Comment:
-//---------|----------|----------|-----------------------------------------------
-// 1.0 | jsabrow | 09/30/11 | Initial draft.
-// 1.1 | jsabrow | 12/13/11 | This version compiles. Attributes dont work yet.
-// 1.3 | bellows | 12/21/11 | fapiGetAssociatedDimms funciton does not work, added quick exit
-// 1.4 | jsabrow | 02/13/12 | Updates for code review
-// 1.5 | jsabrow | 03/26/12 | Updates for code review
-// 1.8 | jdsloat | 04/26/12 | fixed 1.5V issue
-// 1.9 | jdsloat | 05/08/12 | Removed debug message
-// 1.10 | jdsloat | 05/09/12 | Fixed typo
-// 1.11 | bellows | 07/16/12 | added in Id tag
-// 1.11 | jdsloat | 10/18/12 | Added check for violation of tolerant voltages of non-functional dimms.
-// 1.12 | jdsloat | 03/05/14 | RAS review Edits -- Error HW callouts
-// 1.13 | jdsloat | 06/05/14 | Added ATTR_MSS_VOLT_VPP being set, as well as ATTR_MSS_VOLT_OVERRIDE
-// 1.14 | jdsloat | 06/19/14 | Added error checking associated ATTR_MSS_VOLT_OVERRIDE
-// 1.16 | jdsloat | 11/05/14 | Fixed a if to else if in error checking of ATTR_MSS_VOLT_OVERRIDE
-// 1.17 | jdsloat | 11/19/14 | Fixed a variable not being set preventing use of ATTR_MSS_VOLT_OVERRIDE, fixed internal log numbering
-// 1.18 | pardeik | 02/17/15 | initialize ATTR_MSS_VMEM_REGULATOR_MAX_DIMM_COUNT
-// 1.19 | jdsloat | 04/07/15 | Called out dimms configured for 1.5V unless specified in ATTR_MSS_VOLT_COMPLIANT_DIMMS
-// 1.20 | jdsloat | 04/08/15 | Added fapi:: to Enums used with ATTR_MSS_VOLT_COMPLIANT_DIMMS
-// 1.21 | jdsloat | 04/29/15 | Made the error return for compliant unique and added a return RC
-// 1.22 | jdsloat | 05/01/15 | Fixed initialization of dimm_spd and Enum use for DDR4 dimms, Added FAPI_INF message
-
-// This procedure takes a vector of Centaurs behind a voltage domain,
-// reads in supported DIMM voltages from SPD and determines optimal
-// voltage bin for the DIMM voltage domain.
-// supported voltage bins: DDR3: 1.35 DDR4: 1.25V (expected)
-
-
-//----------------------------------------------------------------------
-// Includes - FAPI
-//----------------------------------------------------------------------
-#include <fapi.H>
-#include <mss_volt.H>
-
-//----------------------------------------------------------------------
-// Constants
-//----------------------------------------------------------------------
-const uint32_t MAX_TOLERATED_VOLT = 1500;
-const uint32_t MAX_TOLERATED_DDR3_VOLT = 1500;
-const uint32_t MAX_TOLERATED_DDR4_VOLT = 1200;
-const uint32_t DDR3_VPP_VOLT = 0000;
-const uint32_t DDR4_VPP_VOLT = 2500;
-
-fapi::ReturnCode mss_volt(std::vector<fapi::Target> & i_targets_memb)
-{
-
- fapi::ReturnCode l_rc;
- uint8_t l_dimm_functionality=0;
- uint8_t l_spd_dramtype=0;
- uint8_t l_spd_volts=0;
- uint8_t l_spd_volts_all_dimms=0xFF; //start assuming all voltages supported
- uint8_t l_dram_ddr3_found_flag=0;
- uint8_t l_dram_ddr4_found_flag=0;
- uint8_t l_volt_override = 0x00;
- uint8_t l_volt_override_domain = 0x00;
-
- uint32_t l_selected_dram_voltage=0; //this gets written into all centaurs when done.
- uint32_t l_selected_dram_voltage_vpp=0;
- uint32_t l_tolerated_dram_voltage = MAX_TOLERATED_VOLT; //initially set to the max tolerated voltage
- uint8_t l_dimm_count = 0;
- uint8_t l_compliant_dimm_voltages = 0;
-
- do
- {
- //Gather whether 1.5V only DIMMs supported
- l_rc = FAPI_ATTR_GET(ATTR_MSS_VOLT_COMPLIANT_DIMMS,NULL,l_compliant_dimm_voltages);
- if (l_rc) break;
-
- // Iterate through the list of centaurs
- for (uint32_t i=0; i < i_targets_memb.size(); i++)
- {
- std::vector<fapi::Target> l_mbaChiplets;
- // Get associated MBA's on this centaur
- l_rc=fapiGetChildChiplets(i_targets_memb[i], fapi::TARGET_TYPE_MBA_CHIPLET, l_mbaChiplets);
- if (l_rc) break;
-
-
- l_rc = FAPI_ATTR_GET(ATTR_MSS_VOLT_OVERRIDE, &i_targets_memb[i], l_volt_override);
- if (l_rc) break;
-
- // Note if there is an overrride being applied on the domain
- if ( (l_volt_override != fapi::ENUM_ATTR_MSS_VOLT_OVERRIDE_NONE) && (l_volt_override_domain == fapi::ENUM_ATTR_MSS_VOLT_OVERRIDE_NONE) )
- {
- l_volt_override_domain = l_volt_override;
- }
-
- // Error if our overides are not the same across the domain
- if (l_volt_override_domain != l_volt_override)
- {
- // this just needs to callout the mismatching memb.
- const uint8_t &OVERRIDE_TYPE = l_volt_override;
- const uint8_t &OVERRIDE_DOMAIN_TYPE = l_volt_override_domain;
- const fapi::Target &MEMB_TARGET = i_targets_memb[i];
- FAPI_ERR("Mismatch volt override request. Domain: 0x%x Current Target Requests: 0x%x", l_volt_override_domain, l_volt_override);
- FAPI_SET_HWP_ERROR(l_rc, RC_MSS_VOLT_OVERIDE_MIXING);
- fapiLogError(l_rc);
- }
-
- // Loop through the 2 MBA's
- for (uint32_t j=0; j < l_mbaChiplets.size(); j++)
- {
- std::vector<fapi::Target> l_dimm_targets;
- // Get a vector of DIMM targets
- l_rc = fapiGetAssociatedDimms(l_mbaChiplets[j], l_dimm_targets, fapi::TARGET_STATE_PRESENT);
- if (l_rc) break;
-
- for (uint32_t k=0; k < l_dimm_targets.size(); k++)
- {
- l_rc = FAPI_ATTR_GET(ATTR_SPD_DRAM_DEVICE_TYPE, &l_dimm_targets[k], l_spd_dramtype);
- if (l_rc) break;
- l_rc = FAPI_ATTR_GET(ATTR_SPD_MODULE_NOMINAL_VOLTAGE, &l_dimm_targets[k], l_spd_volts);
- if (l_rc) break;
- l_rc = FAPI_ATTR_GET(ATTR_FUNCTIONAL, &l_dimm_targets[k], l_dimm_functionality);
- if (l_rc) break;
-
- // spd_volts: bit0= NOT 1.5V bit1=1.35V bit2=1.25V, assume a 1.20V in future for DDR4
- // check for supported voltage/dram type combo DDR3=12, DDR4=13
- if (l_spd_dramtype == fapi::ENUM_ATTR_SPD_DRAM_DEVICE_TYPE_DDR3)
- {
- l_dram_ddr3_found_flag=1;
- }
- else if (l_spd_dramtype == fapi::ENUM_ATTR_SPD_DRAM_DEVICE_TYPE_DDR4)
- {
- l_dram_ddr4_found_flag=1;
- }
- else
- {
- // this just needs to be deconfiged at the dimm level
- const uint8_t &DEVICE_TYPE = l_spd_dramtype;
- const fapi::Target &DIMM_TARGET = l_dimm_targets[k];
- FAPI_ERR("Unknown DRAM Device Type 0x%x", l_spd_dramtype);
- FAPI_SET_HWP_ERROR(l_rc, RC_MSS_VOLT_UNRECOGNIZED_DRAM_DEVICE_TYPE);
- fapiLogError(l_rc);
- }
-
- if(l_dimm_functionality == fapi::ENUM_ATTR_FUNCTIONAL_FUNCTIONAL)
- {
- //AND dimm voltage capabilities together to find aggregate voltage support on all dimms
- l_spd_volts_all_dimms = l_spd_volts_all_dimms & l_spd_volts;
- }
-
- }//end of dimms loop
- if (l_rc)
- {
- break;
- }
- }//end of mba loop
- if (l_rc)
- {
- break;
- }
- }//end of centaur (memb) loop
- if (l_rc)
- {
- // Break out of do...while(0)
- break;
- }
-
- // now we figure out if we have a supported ddr type and voltage
- // note: only support DDR3=1.35V and DDR4=1.2xV
-
-
- // Mixed Dimms, Deconfig the DDR4.
- if (l_dram_ddr3_found_flag && l_dram_ddr4_found_flag)
- {
- std::vector<fapi::Target> l_dimm_targets_deconfig;
- // Iterate through the list of centaurs
- for (uint32_t i=0; i < i_targets_memb.size(); i++)
- {
- std::vector<fapi::Target> l_mbaChiplets;
- // Get associated MBA's on this centaur
- l_rc=fapiGetChildChiplets(i_targets_memb[i], fapi::TARGET_TYPE_MBA_CHIPLET, l_mbaChiplets);
- if (l_rc) break;
- // Loop through the 2 MBA's
- for (uint32_t j=0; j < l_mbaChiplets.size(); j++)
- {
- std::vector<fapi::Target> l_dimm_targets;
- // Get a vector of DIMM targets
- l_rc = fapiGetAssociatedDimms(l_mbaChiplets[j], l_dimm_targets, fapi::TARGET_STATE_PRESENT);
- if (l_rc) break;
- for (uint32_t k=0; k < l_dimm_targets.size(); k++)
- {
-
- l_rc = FAPI_ATTR_GET(ATTR_SPD_DRAM_DEVICE_TYPE, &l_dimm_targets[k], l_spd_dramtype);
- if (l_rc) break;
-
- if (l_spd_dramtype == fapi::ENUM_ATTR_SPD_DRAM_DEVICE_TYPE_DDR4)
- {
- const fapi::Target &DIMM_DDR4_TARGET = l_dimm_targets[k];
- const uint8_t &DEVICE_TYPE = l_spd_dramtype;
- FAPI_ERR("mss_volt: DDR3 and DDR4 mixing not allowed");
- FAPI_SET_HWP_ERROR(l_rc, RC_MSS_VOLT_DDR_TYPE_MIXING_UNSUPPORTED);
- fapiLogError(l_rc);
- }
-
- }//end of dimms loop
- if (l_rc)
- {
- break;
- }
- }//end of mba loop
- if (l_rc)
- {
- break;
- }
- }//end of centaur (memb) loop
-
- }
- if (l_rc)
- {
- // Break out of do...while(0)
- break;
- }
-
- FAPI_INF( "Bitwise and of all DIMM_SPD: 0x%02x", l_spd_volts_all_dimms);
-
- // If we are going to land on using 1.5V and we are not enabling that usage via attribute.
- if ( ((l_spd_volts_all_dimms & fapi::ENUM_ATTR_SPD_MODULE_NOMINAL_VOLTAGE_OP1_35) != fapi::ENUM_ATTR_SPD_MODULE_NOMINAL_VOLTAGE_OP1_35) &&
- ((l_spd_volts_all_dimms & fapi::ENUM_ATTR_SPD_MODULE_NOMINAL_VOLTAGE_OP1_2V) != fapi::ENUM_ATTR_SPD_MODULE_NOMINAL_VOLTAGE_OP1_2V) &&
- ((l_spd_volts_all_dimms & fapi::ENUM_ATTR_SPD_MODULE_NOMINAL_VOLTAGE_NOTOP1_5) != fapi::ENUM_ATTR_SPD_MODULE_NOMINAL_VOLTAGE_NOTOP1_5) &&
- (l_compliant_dimm_voltages == fapi::ENUM_ATTR_MSS_VOLT_COMPLIANT_DIMMS_PROCEDURE_DEFINED) )
- {
-
- std::vector<fapi::Target> l_dimm_targets_deconfig;
- // Iterate through the list of centaurs
- for (uint32_t i=0; i < i_targets_memb.size(); i++)
- {
- std::vector<fapi::Target> l_mbaChiplets;
- // Get associated MBA's on this centaur
- l_rc=fapiGetChildChiplets(i_targets_memb[i], fapi::TARGET_TYPE_MBA_CHIPLET, l_mbaChiplets);
- if (l_rc) break;
- // Loop through the 2 MBA's
- for (uint32_t j=0; j < l_mbaChiplets.size(); j++)
- {
- std::vector<fapi::Target> l_dimm_targets;
- // Get a vector of DIMM targets
- l_rc = fapiGetAssociatedDimms(l_mbaChiplets[j], l_dimm_targets, fapi::TARGET_STATE_PRESENT);
- if (l_rc) break;
- for (uint32_t k=0; k < l_dimm_targets.size(); k++)
- {
- l_rc = FAPI_ATTR_GET(ATTR_SPD_MODULE_NOMINAL_VOLTAGE, &l_dimm_targets[k], l_spd_volts);
- if (l_rc) break;
-
- if((l_spd_volts & fapi::ENUM_ATTR_SPD_MODULE_NOMINAL_VOLTAGE_NOTOP1_5) != fapi::ENUM_ATTR_SPD_MODULE_NOMINAL_VOLTAGE_NOTOP1_5)
- {
- const fapi::Target &DIMM_CV_TARGET = l_dimm_targets[k];
- const uint8_t &DIMM_VOLTAGE = l_spd_volts;
- FAPI_ERR("One or more DIMMs operate 1.5V which is not supported.");
- FAPI_SET_HWP_ERROR(l_rc, RC_MSS_VOLT_DDR_TYPE_COMPLIANT_VOLTAGE);
- fapiLogError(l_rc);
- }
-
- }//end of dimms loop
- if (l_rc)
- {
- break;
- }
- }//end of mba loop
- if (l_rc)
- {
- break;
- }
- }//end of centaur (memb) loop
- }
-
- if (l_rc)
- {
- break;
- }
-
- //Picking voltages based on overrides or supported voltages.
- if (l_volt_override != fapi::ENUM_ATTR_MSS_VOLT_OVERRIDE_NONE)
- {
- if (l_volt_override == fapi::ENUM_ATTR_MSS_VOLT_OVERRIDE_VOLT_135)
- {
- l_selected_dram_voltage = 1350;
- FAPI_INF( "mss_volt_overide being applied. MSS_VOLT_OVERRIDE: 1.35V");
- FAPI_INF( "NOTE: Still checking for violations of tolerated voltage. If DIMMs cannot tolerate, the override will not be applied.");
- }
- else if (l_volt_override == fapi::ENUM_ATTR_MSS_VOLT_OVERRIDE_VOLT_120)
- {
- l_selected_dram_voltage = 1200;
- FAPI_INF( "mss_volt_overide being applied. MSS_VOLT_OVERRIDE: 1.20V");
- FAPI_INF( "NOTE: Still checking for violations of tolerated voltage. If DIMMs cannot tolerate, the override will not be applied.");
- }
- else
- {
- const uint8_t &OVERRIDE_TYPE = l_volt_override;
- FAPI_ERR("Unknown volt override request. Override Request: 0x%x", l_volt_override);
- FAPI_SET_HWP_ERROR(l_rc, RC_MSS_VOLT_OVERIDE_UKNOWN);
- fapiLogError(l_rc);
- }
-
- }
- else if (l_dram_ddr3_found_flag && ((l_spd_volts_all_dimms & fapi::ENUM_ATTR_SPD_MODULE_NOMINAL_VOLTAGE_OP1_35) == fapi::ENUM_ATTR_SPD_MODULE_NOMINAL_VOLTAGE_OP1_35))
- {
- l_selected_dram_voltage=1350;
- l_selected_dram_voltage_vpp = DDR3_VPP_VOLT;
- }
- else if (l_dram_ddr4_found_flag && ((l_spd_volts_all_dimms & fapi::ENUM_ATTR_SPD_MODULE_NOMINAL_VOLTAGE_OP1_2V) == fapi::ENUM_ATTR_SPD_MODULE_NOMINAL_VOLTAGE_OP1_2V))
- {
- l_selected_dram_voltage=1200;
- l_selected_dram_voltage_vpp = DDR4_VPP_VOLT;
- }
- else if ( ((l_spd_volts_all_dimms & fapi::ENUM_ATTR_SPD_MODULE_NOMINAL_VOLTAGE_NOTOP1_5) != fapi::ENUM_ATTR_SPD_MODULE_NOMINAL_VOLTAGE_NOTOP1_5) &&
- (l_compliant_dimm_voltages == fapi::ENUM_ATTR_MSS_VOLT_COMPLIANT_DIMMS_ALL_VOLTAGES))
- {
- l_selected_dram_voltage=1500;
- l_selected_dram_voltage_vpp = DDR3_VPP_VOLT;
- }
- else
- {
-
- std::vector<fapi::Target> l_dimm_targets_deconfig;
- // Iterate through the list of centaurs
- for (uint32_t i=0; i < i_targets_memb.size(); i++)
- {
- std::vector<fapi::Target> l_mbaChiplets;
- // Get associated MBA's on this centaur
- l_rc=fapiGetChildChiplets(i_targets_memb[i], fapi::TARGET_TYPE_MBA_CHIPLET, l_mbaChiplets);
- if (l_rc) break;
- // Loop through the 2 MBA's
- for (uint32_t j=0; j < l_mbaChiplets.size(); j++)
- {
- std::vector<fapi::Target> l_dimm_targets;
- // Get a vector of DIMM targets
- l_rc = fapiGetAssociatedDimms(l_mbaChiplets[j], l_dimm_targets, fapi::TARGET_STATE_PRESENT);
- if (l_rc) break;
- for (uint32_t k=0; k < l_dimm_targets.size(); k++)
- {
- l_rc = FAPI_ATTR_GET(ATTR_SPD_MODULE_NOMINAL_VOLTAGE, &l_dimm_targets[k], l_spd_volts);
- if (l_rc) break;
-
- if((l_spd_volts & fapi::ENUM_ATTR_SPD_MODULE_NOMINAL_VOLTAGE_NOTOP1_5) == fapi::ENUM_ATTR_SPD_MODULE_NOMINAL_VOLTAGE_NOTOP1_5)
- {
- const fapi::Target &DIMM_UV_TARGET = l_dimm_targets[k];
- const uint8_t &DIMM_VOLTAGE = l_spd_volts;
- FAPI_ERR("One or more DIMMs do not support required voltage for DIMM type");
- FAPI_SET_HWP_ERROR(l_rc, RC_MSS_VOLT_DDR_TYPE_REQUIRED_VOLTAGE);
- fapiLogError(l_rc);
- }
-
- }//end of dimms loop
- if (l_rc)
- {
- break;
- }
- }//end of mba loop
- if (l_rc)
- {
- break;
- }
- }//end of centaur (memb) loop
- }
- if (l_rc)
- {
- // Break out of do...while(0)
- break;
- }
-
-
-
- // Must check to see if we violate Tolerent voltages of Non-functional Dimms
- // If so we must error/deconfigure on the dimm level primarily then centaur level.
- // Iterate through the list of centaurs
- for (uint32_t i=0; i < i_targets_memb.size(); i++)
- {
- std::vector<fapi::Target> l_dimm_targets_deconfig;
-
- l_tolerated_dram_voltage = MAX_TOLERATED_VOLT; // using 1.5 as this is the largest supported voltage
- std::vector<fapi::Target> l_mbaChiplets;
- // Get associated MBA's on this centaur
- l_rc=fapiGetChildChiplets(i_targets_memb[i], fapi::TARGET_TYPE_MBA_CHIPLET, l_mbaChiplets);
- if (l_rc) break;
- for (uint32_t j=0; j < l_mbaChiplets.size(); j++)
- {
- std::vector<fapi::Target> l_dimm_targets;
- // Get a vector of DIMM targets
- l_rc = fapiGetAssociatedDimms(l_mbaChiplets[j], l_dimm_targets, fapi::TARGET_STATE_PRESENT);
- if (l_rc) break;
- for (uint32_t k=0; k < l_dimm_targets.size(); k++)
- {
- l_rc = FAPI_ATTR_GET(ATTR_FUNCTIONAL, &l_dimm_targets[k], l_dimm_functionality);
- if (l_rc) break;
-
- if(l_dimm_functionality == fapi::ENUM_ATTR_FUNCTIONAL_NON_FUNCTIONAL)
- {
- if (l_spd_dramtype == fapi::ENUM_ATTR_SPD_DRAM_DEVICE_TYPE_DDR3)
- {
- if (l_tolerated_dram_voltage > MAX_TOLERATED_DDR3_VOLT)
- {
- l_tolerated_dram_voltage = MAX_TOLERATED_DDR3_VOLT;
- }
-
- if (MAX_TOLERATED_DDR3_VOLT < l_selected_dram_voltage)
- {
- FAPI_ERR("One or more DIMMs classified non-functional has a"
- " tolerated voltage below selected voltage.");
- const fapi::Target & CHIP_TARGET = l_dimm_targets[k];
- const uint8_t &DIMM_VOLTAGE = l_selected_dram_voltage;
- FAPI_SET_HWP_ERROR(l_rc, RC_MSS_VOLT_TOLERATED_VOLTAGE_VIOLATION);
- fapiLogError(l_rc);
- }
- }
- if (l_spd_dramtype == fapi::ENUM_ATTR_SPD_DRAM_DEVICE_TYPE_DDR4)
- {
- if (l_tolerated_dram_voltage > MAX_TOLERATED_DDR4_VOLT)
- {
- l_tolerated_dram_voltage = MAX_TOLERATED_DDR4_VOLT;
- }
-
- if (MAX_TOLERATED_DDR4_VOLT < l_selected_dram_voltage)
- {
- FAPI_ERR("One or more DIMMs classified non-functional has a"
- " tolerated voltage below selected voltage.");
- const fapi::Target & CHIP_TARGET = l_dimm_targets[k];
- const uint8_t &DIMM_VOLTAGE = l_selected_dram_voltage;
- FAPI_SET_HWP_ERROR(l_rc, RC_MSS_VOLT_TOLERATED_VOLTAGE_VIOLATION);
- fapiLogError(l_rc);
- }
- }
-
- }//End of functional check
- }//End of Dimm loop
- if (l_rc)
- {
- break;
- }
- }// End of MBA loop
- if (l_rc)
- {
- break;
- }
- if ( l_tolerated_dram_voltage < l_selected_dram_voltage )
- {
-
- FAPI_ERR("Deconfiguring the associated Centaur.");
- const fapi::Target & CHIP_TARGET = i_targets_memb[i];
- const uint8_t &DIMM_VOLTAGE = l_selected_dram_voltage;
- FAPI_SET_HWP_ERROR(l_rc, RC_MSS_VOLT_TOLERATED_VOLTAGE_VIOLATION);
- break;
- }
- }//End of Centaur (MEMB) loop
- if (l_rc)
- {
- // Break out of do...while(0)
- break;
- }
-
- // Iterate through the list of centaurs again, to update ATTR
- for (uint32_t i=0; i < i_targets_memb.size(); i++)
- {
- l_rc = FAPI_ATTR_SET(ATTR_MSS_VOLT, &i_targets_memb[i], l_selected_dram_voltage);
- FAPI_INF( "mss_volt calculation complete. MSS_VOLT: %d", l_selected_dram_voltage);
- if (l_rc) break;
-
- l_rc = FAPI_ATTR_SET(ATTR_MSS_VOLT_VPP, &i_targets_memb[i], l_selected_dram_voltage_vpp);
- FAPI_INF( "mss_volt calculation complete. MSS_VOLT_VPP: %d", l_selected_dram_voltage_vpp);
- if (l_rc) break;
-
- }
- // Initialize DIMM Count Attribute for mss_volt_dimm_count to use
- l_rc = FAPI_ATTR_SET(ATTR_MSS_VMEM_REGULATOR_MAX_DIMM_COUNT, NULL, l_dimm_count);
- if (l_rc) break;
-
- }while(0);
- return l_rc;
-}
diff --git a/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt.H b/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt.H
deleted file mode 100644
index 2821783fb..000000000
--- a/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt.H
+++ /dev/null
@@ -1,72 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG */
-/* This is an automatically generated prolog. */
-/* */
-/* $Source: src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt.H $ */
-/* */
-/* OpenPOWER HostBoot Project */
-/* */
-/* Contributors Listed Below - COPYRIGHT 2012,2014 */
-/* [+] International Business Machines Corp. */
-/* */
-/* */
-/* Licensed under the Apache License, Version 2.0 (the "License"); */
-/* you may not use this file except in compliance with the License. */
-/* 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 */
-// $Id: mss_volt.H,v 1.5 2012/07/17 13:23:39 bellows Exp $
-//------------------------------------------------------------------------------
-// *! (C) Copyright International Business Machines Corp. 2011
-// *! All Rights Reserved -- Property of IBM
-// *! *** ***
-//------------------------------------------------------------------------------
-// *! TITLE : mss_volt.H
-// *! DESCRIPTION : see additional comments below
-// *! OWNER NAME : Jeff Sabrowski Email: jsabrow@us.ibm.com
-// *! BACKUP NAME : Mark Bellows Email: bellows@us.ibm.com
-// *! ADDITIONAL COMMENTS :
-//
-// Header file for mss_volt.
-//
-//------------------------------------------------------------------------------
-// Don't forget to create CVS comments when you check in your changes!
-//------------------------------------------------------------------------------
-// CHANGE HISTORY:
-//------------------------------------------------------------------------------
-// Version:| Author: | Date: | Comment:
-//---------|----------|----------|-----------------------------------------------
-// 1.0 | jsabrow | 11/30/11 | initial drop
-// 1.2 | bellows | 12/21/11 | fixed missing ;
-// 1.4 | jsabrow | 02/14/12 | Updates for code review
-// 1.5 | bellows | 07/16/12 | added $Id tag
-#ifndef MSS_VOLTHWPB_H_
-#define MSS_VOLTHWPB_H_
-
-#include <fapi.H>
-
-typedef fapi::ReturnCode (*mss_volt_FP_t)(std::vector<fapi::Target> &);
-
-extern "C"
-{
-
-/**
- * @brief mss_volt procedure. Determines operating voltage for dimms behind a voltage domain
- *
- * @param[in] std::vector<fapi::Target> l_targets Reference to vector of Centaur Targets in a particular power domain
- *
- * @return ReturnCode
- */
-
- fapi::ReturnCode mss_volt(std::vector<fapi::Target> & l_targets_memb);
-
-} // extern "C"
-
-#endif // MSS_VOLTHWPB_H_
diff --git a/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_avdd_offset.C b/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_avdd_offset.C
deleted file mode 100644
index e92e650e9..000000000
--- a/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_avdd_offset.C
+++ /dev/null
@@ -1,129 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG */
-/* This is an automatically generated prolog. */
-/* */
-/* $Source: src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_avdd_offset.C $ */
-/* */
-/* OpenPOWER HostBoot Project */
-/* */
-/* Contributors Listed Below - COPYRIGHT 2014 */
-/* [+] International Business Machines Corp. */
-/* */
-/* */
-/* Licensed under the Apache License, Version 2.0 (the "License"); */
-/* you may not use this file except in compliance with the License. */
-/* 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 */
-// $Id: mss_volt_avdd_offset.C,v 1.6 2014/06/18 20:34:16 dcadiga Exp $
-/* File mss_volt_avdd_offset.C created by Stephen Glancy on Tue 20 May 2014. */
-
-//------------------------------------------------------------------------------
-// *! (C) Copyright International Business Machines Corp. 2007
-// *! All Rights Reserved -- Property of IBM
-// *! *** ***
-//------------------------------------------------------------------------------
-// *! TITLE : mss_volt_avdd_offset.C
-// *! DESCRIPTION : Tools for centaur procedures
-// *! OWNER NAME : Stephen Glancy (sglancy@us.ibm.com)
-// *! BACKUP NAME : Jacob Sloat (jdsloat@us.ibm.com)
-// #! ADDITIONAL COMMENTS :
-//
-// General purpose funcs
-
-//------------------------------------------------------------------------------
-// Don't forget to create CVS comments when you check in your changes!
-//------------------------------------------------------------------------------
-// CHANGE HISTORY:
-//------------------------------------------------------------------------------
-// Version:| Author: | Date: | Comment:
-//---------|----------|----------|-----------------------------------------------
-// 1.6 | sglancy | 06/18/14 | Updated errors
-// 1.5 | sglancy | 06/09/14 | Updated debug statements
-// 1.4 | sglancy | 06/04/14 | Updated to include output attribute
-// 1.3 | sglancy | 05/30/14 | Formatted code
-// 1.2 | sglancy | 05/29/14 | Fixed attributes units and equations
-// 1.1 | sglancy | 05/20/14 | File created
-
-// This procedure takes a vector of Centaurs behind the avdd voltage domain,
-// reads in supported DIMM voltages from SPD and determines optimal
-// voltage bin for the DIMM voltage domain.
-// supported voltage bins: 1.50 V
-
-
-//----------------------------------------------------------------------
-// Includes - FAPI
-//----------------------------------------------------------------------
-#include <fapi.H>
-#include <mss_volt_avdd_offset.H>
-#include <mss_count_active_centaurs.H>
-
-//----------------------------------------------------------------------
-// Constants
-//----------------------------------------------------------------------
-
-
-fapi::ReturnCode mss_volt_avdd_offset(std::vector<fapi::Target> & i_targets)
-{
- //declares variables
- fapi::ReturnCode l_rc;
- uint32_t var_num_active_centaur = 0;
- uint32_t var_num_inactive_centaur = 0;
- uint32_t slope_active, slope_inactive, intercept;
- uint8_t enable;
-
- //voltage should not be updated if the disable is set
- l_rc = FAPI_ATTR_GET(ATTR_MSS_AVDD_OFFSET_DISABLE,NULL,enable);
- if(l_rc) return l_rc;
- if(enable == fapi::ENUM_ATTR_MSS_AVDD_OFFSET_DISABLE_DISABLE) {
- FAPI_INF("ATTR_MSS_AVDD_OFFSET_DISABLE is set to be disabled. Exiting.....");
- return l_rc;
- }
-
- //computes avdd value
- //gets the necessary attributes and checks for errors
- l_rc = FAPI_ATTR_GET(ATTR_MSS_AVDD_SLOPE_ACTIVE,NULL,slope_active);
- if(l_rc) return l_rc;
- l_rc = FAPI_ATTR_GET(ATTR_MSS_AVDD_SLOPE_INACTIVE,NULL,slope_inactive);
- if(l_rc) return l_rc;
- l_rc = FAPI_ATTR_GET(ATTR_MSS_AVDD_SLOPE_INTERCEPT,NULL,intercept);
- if(l_rc) return l_rc;
-
- //checks to make sure that none of the values are zeros. If any of the values are 0's then 0 * any other value = 0
- if((slope_active * slope_inactive * intercept) == 0) {
- const uint32_t &AVDD_SLOPE_ACTIVE = slope_active;
- const uint32_t &AVDD_SLOPE_INACTIVE = slope_inactive;
- const uint32_t &AVDD_SLOPE_INTERCEPT = intercept;
- FAPI_SET_HWP_ERROR(l_rc, RC_MSS_VOLT_AVDD_OFFSET_VALUE_ERROR);
- FAPI_ERR("One or more dynamic AVDD attributes is 0.\nExiting....");
- return l_rc;
- }
-
- //debug print
- FAPI_INF("slope_active: %d uV/centaur slope_inactive: %d uV/centaur slope_intercept: %d mV",slope_active,slope_inactive,intercept);
-
- //generates the count of active and inactive centaurs
- l_rc = mss_count_active_centaurs(i_targets, var_num_active_centaur, var_num_inactive_centaur);
- if(l_rc) return l_rc;
- FAPI_INF("var_active: %d centaurs var_inactive: %d centaurs",var_num_active_centaur,var_num_inactive_centaur);
-
- //computes and sets the appropriate attribute
- uint32_t param_avdd_voltage_uv = (slope_active * var_num_active_centaur) + (slope_inactive * var_num_inactive_centaur) + 1000 * intercept;
- //rounds and converts the voltage offset into mV
- uint32_t param_avdd_voltage_mv = (500 + param_avdd_voltage_uv) / 1000;
- FAPI_INF("ATTR_MSS_AVDD_OFFSET: %d mV",param_avdd_voltage_mv);
-
- //sets the output attributes
- for(uint32_t i = 0; i< i_targets.size();i++) {
- l_rc = FAPI_ATTR_SET(ATTR_MSS_AVDD_OFFSET,&i_targets[i],param_avdd_voltage_mv);
- if(l_rc) return l_rc;
- }//end for
- return l_rc;
-}
diff --git a/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_avdd_offset.H b/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_avdd_offset.H
deleted file mode 100644
index eafcb89f0..000000000
--- a/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_avdd_offset.H
+++ /dev/null
@@ -1,73 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG */
-/* This is an automatically generated prolog. */
-/* */
-/* $Source: src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_avdd_offset.H $ */
-/* */
-/* OpenPOWER HostBoot Project */
-/* */
-/* Contributors Listed Below - COPYRIGHT 2014 */
-/* [+] International Business Machines Corp. */
-/* */
-/* */
-/* Licensed under the Apache License, Version 2.0 (the "License"); */
-/* you may not use this file except in compliance with the License. */
-/* 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 */
-// $Id: mss_volt_avdd_offset.H,v 1.4 2014/06/18 20:34:28 dcadiga Exp $
-//------------------------------------------------------------------------------
-// *! (C) Copyright International Business Machines Corp. 2011
-// *! All Rights Reserved -- Property of IBM
-// *! *** ***
-//------------------------------------------------------------------------------
-// *! TITLE : mss_volt_avdd_offset.H
-// *! DESCRIPTION : see additional comments below
-// *! OWNER NAME : Stephen Glancy Email: sglancy@us.ibm.com
-// *! BACKUP NAME : Jacob Sloat Email: jdsloat@us.ibm.com
-// *! ADDITIONAL COMMENTS :
-//
-// Header file for mss_volt_avdd_offset.
-//
-//------------------------------------------------------------------------------
-// Don't forget to create CVS comments when you check in your changes!
-//------------------------------------------------------------------------------
-// CHANGE HISTORY:
-//------------------------------------------------------------------------------
-// Version:| Author: | Date: | Comment:
-//---------|----------|----------|-----------------------------------------------
-// 1.4 | sglancy | 06/16/14 | Updated to include output attribute
-// 1.3 | sglancy | 06/04/14 | Updated to include output attribute
-// 1.2 | sglancy | 05/30/14 | changed function to return a value in uV
-// 1.1 | sglancy | 05/20/14 | initial drop
-#ifndef MSS_VOLT_AVDD_OFFSET_H_
-#define MSS_VOLT_AVDD_OFFSET_H_
-
-#include <fapi.H>
-
-typedef fapi::ReturnCode (*mss_volt_avdd_offset_FP_t)(std::vector<fapi::Target> & i_targets);
-
-extern "C"
-{
-
-/**
- * @brief mss_volt_avdd_offset procedure. Determines operating avdd voltage for dimms behind a avdd voltage domain
- *
- * @param[in] std::vector<fapi::Target> l_targets Reference to vector of Centaur Targets in a particular avdd power domain
- *
- * @return ReturnCode
- */
-
- fapi::ReturnCode mss_volt_avdd_offset(std::vector<fapi::Target> & i_targets
- );
-
-} // extern "C"
-
-#endif // MSS_VOLT_AVDD_OFFSET_H_
diff --git a/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_dimm_count.C b/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_dimm_count.C
deleted file mode 100644
index c581cae9a..000000000
--- a/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_dimm_count.C
+++ /dev/null
@@ -1,140 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG */
-/* This is an automatically generated prolog. */
-/* */
-/* $Source: src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_dimm_count.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 */
-// $Id: mss_volt_dimm_count.C,v 1.3 2015/04/06 22:33:05 pardeik Exp $
-// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/
-// centaur/working/procedures/ipl/fapi/mss_volt_dimm_count.C,v $
-
-//------------------------------------------------------------------------------
-// *! (C) Copyright International Business Machines Corp. 2007
-// *! All Rights Reserved -- Property of IBM
-// *! *** ***
-//------------------------------------------------------------------------------
-// *! TITLE : mss_volt_dimm_count.C
-// *! DESCRIPTION : Tools for centaur procedures
-// *! OWNER NAME : Michael Pardeik (pardeik@us.ibm.com)
-// *! BACKUP NAME : Jacob Sloat (jdsloat@us.ibm.com)
-// #! ADDITIONAL COMMENTS :
-//
-// applicable CQ component memory_screen
-//
-// DESCRIPTION:
-// This procedure takes a vector of Centaurs behind a vmem voltage domain,
-// and counts the number of dimms that are present. Only the highest
-// number of dimms found under any given vmem power domain will be saved away.
-// The array of centaur targets are to be present (configured and deconfigured).
-//
-//------------------------------------------------------------------------------
-// Don't forget to create CVS comments when you check in your changes!
-//------------------------------------------------------------------------------
-// CHANGE HISTORY:
-//------------------------------------------------------------------------------
-// Version:| Author: | Date: | Comment:
-//---------|----------|----------|-----------------------------------------------
-// 1.3 | pardeik | 04/06/15 | attribute name changed for adjustment enable
-// 1.2 | pardeik | 03/06/15 | Review update to check l_rc after for loops
-// 1.1 | pardeik | 02/17/15 | Initial draft.
-
-
-//----------------------------------------------------------------------
-// Includes - FAPI
-//----------------------------------------------------------------------
-#include <fapi.H>
-#include <mss_volt_dimm_count.H>
-
-fapi::ReturnCode mss_volt_dimm_count(std::vector<fapi::Target> & i_targets_memb)
-{
-
- fapi::ReturnCode l_rc;
- uint8_t l_memb_count=0;
- uint8_t l_dimm_count=0;
- uint8_t l_mrw_reg_power_limit_adj_enable;
- uint8_t l_mrw_max_number_dimms_per_reg;
- uint8_t l_spd_custom;
- uint8_t l_custom_dimm = 0;
- uint8_t l_dimm_count_under_reg;
- uint8_t l_max_dimm_count_per_reg;
-
- do {
- l_rc = FAPI_ATTR_GET(ATTR_MRW_VMEM_REGULATOR_POWER_LIMIT_PER_DIMM_ADJ_ENABLE, NULL, l_mrw_reg_power_limit_adj_enable);
- if (l_rc) break;
- if (l_mrw_reg_power_limit_adj_enable == fapi::ENUM_ATTR_MRW_VMEM_REGULATOR_POWER_LIMIT_PER_DIMM_ADJ_ENABLE_TRUE)
- {
- l_rc = FAPI_ATTR_GET(ATTR_MRW_MAX_NUMBER_DIMMS_POSSIBLE_PER_VMEM_REGULATOR, NULL, l_mrw_max_number_dimms_per_reg);
- if (l_rc) break;
- l_rc = FAPI_ATTR_GET(ATTR_MSS_VMEM_REGULATOR_MAX_DIMM_COUNT, NULL, l_max_dimm_count_per_reg);
- if (l_rc) break;
-
- // Iterate through the list of centaurs (configured and deconfigured)
- for (uint32_t i=0; i < i_targets_memb.size(); i++)
- {
- l_memb_count++;
- std::vector<fapi::Target> l_mbaChiplets;
- // Get associated MBA's on this centaur
- l_rc=fapiGetChildChiplets(i_targets_memb[i], fapi::TARGET_TYPE_MBA_CHIPLET, l_mbaChiplets, fapi::TARGET_STATE_PRESENT);
- if (l_rc) break;
- // Loop through the 2 MBA's
- for (uint32_t j=0; j < l_mbaChiplets.size(); j++)
- {
- l_dimm_count++;
- std::vector<fapi::Target> l_dimm_targets;
- // Get a vector of DIMM targets
- l_rc = fapiGetAssociatedDimms(l_mbaChiplets[j], l_dimm_targets, fapi::TARGET_STATE_PRESENT);
- if (l_rc) break;
-
- for (uint32_t k=0; k < l_dimm_targets.size(); k++)
- {
- l_rc = FAPI_ATTR_GET(ATTR_SPD_CUSTOM, &l_dimm_targets[k], l_spd_custom);
- if (l_rc) break;
- if (l_spd_custom == fapi::ENUM_ATTR_SPD_CUSTOM_YES)
- {
- l_custom_dimm=1;
- }
- }
- if (l_rc) break;
- }
- if (l_rc) break;
- }
- if (l_rc) break;
-
- // DIMM count will be number of centaurs for custom dimms
- // or number of dimms for non custom dimms
- if (l_custom_dimm == 1)
- {
- l_dimm_count_under_reg = l_memb_count;
- }
- else
- {
- l_dimm_count_under_reg = l_dimm_count;
- }
- FAPI_INF("mss_volt_dimm_count complete: DIMM Count %d/%d", l_dimm_count_under_reg, l_mrw_max_number_dimms_per_reg);
- if (l_dimm_count_under_reg > l_max_dimm_count_per_reg)
- {
- l_rc = FAPI_ATTR_SET(ATTR_MSS_VMEM_REGULATOR_MAX_DIMM_COUNT, NULL, l_dimm_count_under_reg);
- if (l_rc) break;
- }
- }
- }while(0);
- return(l_rc);
-}
diff --git a/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_vcs_offset.C b/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_vcs_offset.C
deleted file mode 100644
index 5fd0ed7d4..000000000
--- a/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_vcs_offset.C
+++ /dev/null
@@ -1,154 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG */
-/* This is an automatically generated prolog. */
-/* */
-/* $Source: src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_vcs_offset.C $ */
-/* */
-/* OpenPOWER HostBoot Project */
-/* */
-/* Contributors Listed Below - COPYRIGHT 2014,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 */
-// $Id: mss_volt_vcs_offset.C,v 1.8 2015/07/22 14:15:46 sglancy Exp $
-/* File mss_volt_vcs_offset.C created by Stephen Glancy on Tue 20 May 2014. */
-
-//------------------------------------------------------------------------------
-// *! (C) Copyright International Business Machines Corp. 2007
-// *! All Rights Reserved -- Property of IBM
-// *! *** ***
-//------------------------------------------------------------------------------
-// *! TITLE : mss_volt_vcs_offset.C
-// *! DESCRIPTION : Tools for centaur procedures
-// *! OWNER NAME : Stephen Glancy (sglancy@us.ibm.com)
-// *! BACKUP NAME : Jacob Sloat (jdsloat@us.ibm.com)
-// #! ADDITIONAL COMMENTS :
-//
-// General purpose funcs
-
-//------------------------------------------------------------------------------
-// Don't forget to create CVS comments when you check in your changes!
-//------------------------------------------------------------------------------
-// CHANGE HISTORY:
-//------------------------------------------------------------------------------
-// Version:| Author: | Date: | Comment:
-//---------|----------|----------|-----------------------------------------------
-// 1.8 | sglancy | 03/24/15 | Updated for 2Z/3Z ATTR update
-// 1.7 | sglancy | 06/19/14 | Includes update to force the VCS to be 100 mV higher than the VDD
-// 1.6 | sglancy | 06/18/14 | Updated errors
-// 1.5 | sglancy | 06/09/14 | Updated debug statements
-// 1.4 | sglancy | 06/04/14 | Updated to include output attribute
-// 1.3 | sglancy | 05/30/14 | Formatted code
-// 1.2 | sglancy | 05/29/14 | Fixed attributes units and equations
-// 1.1 | sglancy | 05/20/14 | File created
-
-// This procedure takes a vector of Centaurs behind the vcs voltage domain,
-// reads in supported DIMM voltages from SPD and determines optimal
-// voltage bin for the DIMM voltage domain.
-// supported voltage bins: 1.104 V
-
-
-//----------------------------------------------------------------------
-// Includes - FAPI
-//----------------------------------------------------------------------
-#include <fapi.H>
-#include <mss_volt_vcs_offset.H>
-#include <mss_count_active_centaurs.H>
-
-//----------------------------------------------------------------------
-// Constants
-//----------------------------------------------------------------------
-
-
-fapi::ReturnCode mss_volt_vcs_offset(std::vector<fapi::Target> & i_targets)
-{
- //declares variables
- fapi::ReturnCode l_rc;
- uint32_t var_num_active_centaur = 0;
- uint32_t var_num_inactive_centaur = 0;
- uint32_t slope_active, slope_inactive, intercept;
- uint8_t enable;
-
- //voltage should not be updated if the disable is set
- l_rc = FAPI_ATTR_GET(ATTR_MSS_VCS_OFFSET_DISABLE,NULL,enable);
- //error check
- if(l_rc) return l_rc;
- if(enable == fapi::ENUM_ATTR_MSS_VCS_OFFSET_DISABLE_DISABLE) {
- FAPI_INF("ATTR_MSS_VCS_OFFSET_DISABLE is set to be disabled. Exiting.....");
- return l_rc;
- }
-
- //computes vcs value
- //gets the necessary attributes and checks for errors - attributes should be the same accross each node
- //attributes are stored at the centaur level, only the first centaur in the vector is grabbed
- // this code should only be called with 1 or more centaur's configured, so this is a valid assumption to make
- l_rc = FAPI_ATTR_GET(ATTR_MSS_VCS_SLOPE_ACTIVE,&i_targets[0],slope_active);
- if(l_rc) return l_rc;
- l_rc = FAPI_ATTR_GET(ATTR_MSS_VCS_SLOPE_INACTIVE,&i_targets[0],slope_inactive);
- if(l_rc) return l_rc;
- l_rc = FAPI_ATTR_GET(ATTR_MSS_VCS_SLOPE_INTERCEPT,&i_targets[0],intercept);
- if(l_rc) return l_rc;
-
- //checks to make sure that none of the values are zeros. If any of the values are 0's then 0 * any other value = 0
- if((slope_active * slope_inactive * intercept) == 0) {
- const uint32_t &VCS_SLOPE_ACTIVE = slope_active;
- const uint32_t &VCS_SLOPE_INACTIVE = slope_inactive;
- const uint32_t &VCS_SLOPE_INTERCEPT = intercept;
- FAPI_SET_HWP_ERROR(l_rc, RC_MSS_VOLT_VCS_OFFSET_VALUE_ERROR);
- FAPI_ERR("One or more dynamic VCS attributes is 0.\nExiting....");
- return l_rc;
- }
-
- //debug print
- FAPI_INF("slope_active: %d uV/centaur slope_inactive: %d uV/centaur slope_intercept: %d mV\n",slope_active,slope_inactive,intercept);
-
- //generates the list of active and inactive centaurs
- l_rc = mss_count_active_centaurs(i_targets, var_num_active_centaur, var_num_inactive_centaur);
- if(l_rc) return l_rc;
- FAPI_INF("var_active: %d centaurs var_inactive: %d centaurs\n",var_num_active_centaur,var_num_inactive_centaur);
-
- //computes and sets the appropriate attribute
- uint32_t param_vcs_voltage_uv = (slope_active * var_num_active_centaur) + (slope_inactive * var_num_inactive_centaur) + 1000 * intercept;
- //rounds and converts the voltage offset into mV
- uint32_t param_vcs_voltage_mv = (500 + param_vcs_voltage_uv) / 1000;
- FAPI_INF("Post calculation ATTR_MSS_VCS_OFFSET: %d mV",param_vcs_voltage_mv);
-
- //checks to see if VDD is disabled, if so, skip the required VCS increase check
- l_rc = FAPI_ATTR_GET(ATTR_MSS_VDD_OFFSET_DISABLE,NULL,enable);
- //error check
- if(l_rc) return l_rc;
- if(enable == fapi::ENUM_ATTR_MSS_VDD_OFFSET_DISABLE_ENABLE) {
- FAPI_INF("ATTR_MSS_VDD_OFFSET_DISABLE is set to be enabled. Checking VCS levels");
- //adjusts the param_vcs_voltage_mv to be at least 100 mV higher than vcs
- for(uint32_t i = 0; i< i_targets.size();i++) {
- uint32_t param_vdd_voltage_mv = 0;
- l_rc = FAPI_ATTR_GET(ATTR_MSS_VDD_OFFSET,&i_targets[i],param_vdd_voltage_mv);
- if(l_rc) return l_rc;
- //adjusts the voltage accordingly
- if(param_vdd_voltage_mv + 100 > param_vcs_voltage_mv) {
- param_vcs_voltage_mv = 100 + param_vdd_voltage_mv;
- }
- }
- FAPI_INF("Post adjust ATTR_MSS_VCS_OFFSET: %d mV",param_vcs_voltage_mv);
- }
-
- //sets the output attributes
- for(uint32_t i = 0; i< i_targets.size();i++) {
- l_rc = FAPI_ATTR_SET(ATTR_MSS_VCS_OFFSET,&i_targets[i],param_vcs_voltage_mv);
- if(l_rc) return l_rc;
- }//end for
-
- return l_rc;
-}
diff --git a/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_vcs_offset.H b/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_vcs_offset.H
deleted file mode 100644
index c12b8e8be..000000000
--- a/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_vcs_offset.H
+++ /dev/null
@@ -1,72 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG */
-/* This is an automatically generated prolog. */
-/* */
-/* $Source: src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_vcs_offset.H $ */
-/* */
-/* OpenPOWER HostBoot Project */
-/* */
-/* Contributors Listed Below - COPYRIGHT 2014 */
-/* [+] International Business Machines Corp. */
-/* */
-/* */
-/* Licensed under the Apache License, Version 2.0 (the "License"); */
-/* you may not use this file except in compliance with the License. */
-/* 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 */
-// $Id: mss_volt_vcs_offset.H,v 1.4 2014/06/18 20:34:32 dcadiga Exp $
-//------------------------------------------------------------------------------
-// *! (C) Copyright International Business Machines Corp. 2011
-// *! All Rights Reserved -- Property of IBM
-// *! *** ***
-//------------------------------------------------------------------------------
-// *! TITLE : mss_volt_vcs_offset.H
-// *! DESCRIPTION : see additional comments below
-// *! OWNER NAME : Stephen Glancy Email: sglancy@us.ibm.com
-// *! BACKUP NAME : Jacob Sloat Email: jdsloat@us.ibm.com
-// *! ADDITIONAL COMMENTS :
-//
-// Header file for mss_volt_vcs_offset.
-//
-//------------------------------------------------------------------------------
-// Don't forget to create CVS comments when you check in your changes!
-//------------------------------------------------------------------------------
-// CHANGE HISTORY:
-//------------------------------------------------------------------------------
-// Version:| Author: | Date: | Comment:
-//---------|----------|----------|-----------------------------------------------
-// 1.4 | sglancy | 06/16/14 | Updated to fix define to be VCS and some formatting fixes
-// 1.3 | sglancy | 06/04/14 | Updated to include output attribute
-// 1.2 | sglancy | 05/30/14 | changed function to return a value in uV
-// 1.1 | sglancy | 05/20/14 | initial drop
-#ifndef MSS_VOLT_VCS_OFFSET_H_
-#define MSS_VOLT_VCS_OFFSET_H_
-
-#include <fapi.H>
-
-typedef fapi::ReturnCode (*mss_volt_vcs_offset_FP_t)(std::vector<fapi::Target> &);
-
-extern "C"
-{
-
-/**
- * @brief mss_volt_vcs_offset procedure. Determines operating vcs voltage for dimms behind a vcs voltage domain
- *
- * @param[in] std::vector<fapi::Target> l_targets Reference to vector of Centaur Targets in a particular vcs power domain
- *
- * @return ReturnCode
- */
-
- fapi::ReturnCode mss_volt_vcs_offset(std::vector<fapi::Target> & i_targets);
-
-} // extern "C"
-
-#endif // MSS_VOLT_VCS_OFFSET_H_
diff --git a/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_vdd_offset.C b/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_vdd_offset.C
deleted file mode 100644
index 950ebd6fb..000000000
--- a/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_vdd_offset.C
+++ /dev/null
@@ -1,134 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG */
-/* This is an automatically generated prolog. */
-/* */
-/* $Source: src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_vdd_offset.C $ */
-/* */
-/* OpenPOWER HostBoot Project */
-/* */
-/* Contributors Listed Below - COPYRIGHT 2014,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 */
-// $Id: mss_volt_vdd_offset.C,v 1.7 2015/07/22 14:15:53 sglancy Exp $
-/* File mss_volt_vdd_offset.C created by Stephen Glancy on Tue 20 May 2014. */
-
-//------------------------------------------------------------------------------
-// *! (C) Copyright International Business Machines Corp. 2007
-// *! All Rights Reserved -- Property of IBM
-// *! *** ***
-//------------------------------------------------------------------------------
-// *! TITLE : mss_volt_vdd_offset.C
-// *! DESCRIPTION : Tools for centaur procedures
-// *! OWNER NAME : Stephen Glancy (sglancy@us.ibm.com)
-// *! BACKUP NAME : Jacob Sloat (jdsloat@us.ibm.com)
-// #! ADDITIONAL COMMENTS :
-//
-// General purpose funcs
-
-//------------------------------------------------------------------------------
-// Don't forget to create CVS comments when you check in your changes!
-//------------------------------------------------------------------------------
-// CHANGE HISTORY:
-//------------------------------------------------------------------------------
-// Version:| Author: | Date: | Comment:
-//---------|----------|----------|-----------------------------------------------
-// 1.7 | sglancy | 03/24/15 | Updated for 2Z/3Z ATTR update
-// 1.6 | sglancy | 06/18/14 | Updated error flags
-// 1.5 | sglancy | 06/09/14 | Updated debug statements
-// 1.4 | sglancy | 06/04/14 | Updated to include output attribute
-// 1.3 | sglancy | 05/30/14 | Formatted code
-// 1.2 | sglancy | 05/29/14 | Fixed attributes units and equations
-// 1.1 | sglancy | 05/20/14 | File created
-
-// This procedure takes a vector of Centaurs behind the vdd voltage domain,
-// reads in supported DIMM voltages from SPD and determines optimal
-// voltage bin for the DIMM voltage domain.
-// supported voltage bins: 0.97V
-
-
-//----------------------------------------------------------------------
-// Includes - FAPI
-//----------------------------------------------------------------------
-#include <fapi.H>
-#include <mss_volt_vdd_offset.H>
-#include <mss_count_active_centaurs.H>
-
-//----------------------------------------------------------------------
-// Constants
-//----------------------------------------------------------------------
-
-
-fapi::ReturnCode mss_volt_vdd_offset(std::vector<fapi::Target> & i_targets)
-{
- //declares variables
- fapi::ReturnCode l_rc;
- uint32_t var_num_active_centaur = 0;
- uint32_t var_num_inactive_centaur = 0;
- uint32_t slope_active, slope_inactive, intercept;
- uint8_t enable;
-
- //voltage should not be updated if the disable is set
- l_rc = FAPI_ATTR_GET(ATTR_MSS_VDD_OFFSET_DISABLE,NULL,enable);
- //error check
- if(l_rc) return l_rc;
- if(enable == fapi::ENUM_ATTR_MSS_VDD_OFFSET_DISABLE_DISABLE) {
- FAPI_INF("ATTR_MSS_VCS_OFFSET_DISABLE is set to be disabled. Exiting.....");
- return l_rc;
- }
-
- //computes vdd value
- //gets the necessary attributes and checks for errors - attributes should be the same accross each node
- //attributes are stored at the centaur level, only the first centaur in the vector is grabbed
- // this code should only be called with 1 or more centaur's configured, so this is a valid assumption to make
- l_rc = FAPI_ATTR_GET(ATTR_MSS_VDD_SLOPE_ACTIVE,&i_targets[0],slope_active);
- if(l_rc) return l_rc;
- l_rc = FAPI_ATTR_GET(ATTR_MSS_VDD_SLOPE_INACTIVE,&i_targets[0],slope_inactive);
- if(l_rc) return l_rc;
- l_rc = FAPI_ATTR_GET(ATTR_MSS_VDD_SLOPE_INTERCEPT,&i_targets[0],intercept);
- if(l_rc) return l_rc;
-
- //checks to make sure that none of the values are zeros. If any of the values are 0's then 0 * any other value = 0
- if((slope_active * slope_inactive * intercept) == 0) {
- const uint32_t &VDD_SLOPE_ACTIVE = slope_active;
- const uint32_t &VDD_SLOPE_INACTIVE = slope_inactive;
- const uint32_t &VDD_SLOPE_INTERCEPT = intercept;
- FAPI_SET_HWP_ERROR(l_rc, RC_MSS_VOLT_VDD_OFFSET_VALUE_ERROR);
- FAPI_ERR("One or more dynamic VDD attributes is 0.\nExiting....");
- return l_rc;
- }
-
- //debug print
- FAPI_INF("slope_active: %d uV/centaur slope_inactive: %d uV/centaur slope_intercept: %d mV\n",slope_active,slope_inactive,intercept);
-
- //generates the list of active and inactive centaurs
- l_rc = mss_count_active_centaurs(i_targets, var_num_active_centaur, var_num_inactive_centaur);
- if(l_rc) return l_rc;
- FAPI_INF("var_active: %d centaurs var_inactive: %d centaurs\n",var_num_active_centaur,var_num_inactive_centaur);
-
- //computes and sets the appropriate attribute
- uint32_t param_vdd_voltage_uv = (slope_active * var_num_active_centaur) + (slope_inactive * var_num_inactive_centaur) + 1000 * intercept;
- //rounds and converts the voltage offset into mV
- uint32_t param_vdd_voltage_mv = (500 + param_vdd_voltage_uv) / 1000;
- FAPI_INF("ATTR_MSS_VDD_OFFSET: %d mV",param_vdd_voltage_mv);
-
- //sets the output attributes
- for(uint32_t i = 0; i< i_targets.size();i++) {
- l_rc = FAPI_ATTR_SET(ATTR_MSS_VDD_OFFSET,&i_targets[i],param_vdd_voltage_mv);
- if(l_rc) return l_rc;
- }//end for
-
- return l_rc;
-}
diff --git a/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_vdd_offset.H b/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_vdd_offset.H
deleted file mode 100644
index 32e0cf38e..000000000
--- a/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_vdd_offset.H
+++ /dev/null
@@ -1,72 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG */
-/* This is an automatically generated prolog. */
-/* */
-/* $Source: src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_vdd_offset.H $ */
-/* */
-/* OpenPOWER HostBoot Project */
-/* */
-/* Contributors Listed Below - COPYRIGHT 2014 */
-/* [+] International Business Machines Corp. */
-/* */
-/* */
-/* Licensed under the Apache License, Version 2.0 (the "License"); */
-/* you may not use this file except in compliance with the License. */
-/* 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 */
-// $Id: mss_volt_vdd_offset.H,v 1.4 2014/06/18 20:34:36 dcadiga Exp $
-//------------------------------------------------------------------------------
-// *! (C) Copyright International Business Machines Corp. 2011
-// *! All Rights Reserved -- Property of IBM
-// *! *** ***
-//------------------------------------------------------------------------------
-// *! TITLE : mss_volt_vdd_offset.H
-// *! DESCRIPTION : see additional comments below
-// *! OWNER NAME : Stephen Glancy Email: sglancy@us.ibm.com
-// *! BACKUP NAME : Jacob Sloat Email: jdsloat@us.ibm.com
-// *! ADDITIONAL COMMENTS :
-//
-// Header file for mss_volt_vdd_offset.
-//
-//------------------------------------------------------------------------------
-// Don't forget to create CVS comments when you check in your changes!
-//------------------------------------------------------------------------------
-// CHANGE HISTORY:
-//------------------------------------------------------------------------------
-// Version:| Author: | Date: | Comment:
-//---------|----------|----------|-----------------------------------------------
-// 1.4 | sglancy | 06/16/14 | Updated to fix some formatting issues
-// 1.3 | sglancy | 06/04/14 | Updated to include output attribute
-// 1.2 | sglancy | 05/30/14 | changed function to return a value in uV
-// 1.1 | sglancy | 05/20/14 | initial drop
-#ifndef MSS_VOLT_VDD_OFFSET_H_
-#define MSS_VOLT_VDD_OFFSET_H_
-
-#include <fapi.H>
-
-typedef fapi::ReturnCode (*mss_volt_vdd_offset_FP_t)(std::vector<fapi::Target> &);
-
-extern "C"
-{
-
-/**
- * @brief mss_volt_vdd_offset procedure. Determines operating vdd voltage for dimms behind a vdd voltage domain
- *
- * @param[in] std::vector<fapi::Target> l_targets Reference to vector of Centaur Targets in a particular vdd power domain
- *
- * @return ReturnCode
- */
-
- fapi::ReturnCode mss_volt_vdd_offset(std::vector<fapi::Target> & i_targets);
-
-} // extern "C"
-
-#endif // MSS_VOLT_VDD_OFFSET_H_
diff --git a/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_vddr_offset.C b/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_vddr_offset.C
deleted file mode 100644
index 120a0212b..000000000
--- a/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_vddr_offset.C
+++ /dev/null
@@ -1,393 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG */
-/* This is an automatically generated prolog. */
-/* */
-/* $Source: src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_vddr_offset.C $ */
-/* */
-/* OpenPOWER HostBoot Project */
-/* */
-/* Contributors Listed Below - COPYRIGHT 2014,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 */
-// $Id: mss_volt_vddr_offset.C,v 1.25 2015/07/22 14:16:02 sglancy Exp $
-/* File mss_volt_vddr_offset.C created by Stephen Glancy on Tue 20 May 2014. */
-
-//------------------------------------------------------------------------------
-// *! (C) Copyright International Business Machines Corp. 2007
-// *! All Rights Reserved -- Property of IBM
-// *! *** ***
-//------------------------------------------------------------------------------
-// *! TITLE : mss_volt_vddr_offset.C
-// *! DESCRIPTION : Tools for centaur procedures
-// *! OWNER NAME : Stephen Glancy (sglancy@us.ibm.com)
-// *! BACKUP NAME : Jacob Sloat (jdsloat@us.ibm.com)
-// #! ADDITIONAL COMMENTS :
-//
-// General purpose funcs
-
-//------------------------------------------------------------------------------
-// Don't forget to create CVS comments when you check in your changes!
-//------------------------------------------------------------------------------
-// CHANGE HISTORY:
-//------------------------------------------------------------------------------
-// Version:| Author: | Date: | Comment:
-//---------|----------|----------|-----------------------------------------------
-// 1.25 | sglancy | 07/22/15 | Updates for 2z/3z and DDR4
-// 1.24 | sglancy | 01/21/15 | Updated for addition of ATTR_CENTAUR_EC_DISABLE_VDDR_DYNAMIC_VID
-// 1.23 | sglancy | 11/20/14 | Updated for rounding
-// 1.22 | sglancy | 11/20/14 | Fixed compile issue
-// 1.21 | sglancy | 11/19/14 | Fixed a truncation issue
-// 1.20 | sglancy | 10/06/14 | Added in checks for going over voltage limits
-// 1.19 | sglancy | 09/12/14 | Removed references to EFF attributes
-// 1.18 | sglancy | 09/11/14 | Fixed bugs and fixed typos
-// 1.17 | sglancy | 09/10/14 | Added additional checks for bad master power values
-// 1.16 | sglancy | 09/08/14 | Updated to fix FW compile and logic bugs
-// 1.15 | sglancy | 09/03/14 | Updated to go with new HWP design and added updates to code for new idle uplift attribute
-// 1.14 | sglancy | 08/27/14 | Changed code to set VDDR offset value to 0 if code is unable to read the VPD of all DIMMs, which should disable the VDDR plane
-// 1.13 | sglancy | 08/22/14 | Changed code to make the risky assumption that the box is running DDR3 if code is unable to read the VPD of all DIMMs
-// 1.12 | sglancy | 07/16/14 | Fixed attribute name bug
-// 1.11 | sglancy | 06/30/14 | Adds DDR4 support
-// 1.10 | sglancy | 06/25/14 | Fixed targetting bug
-// 1.9 | sglancy | 06/25/14 | Removed all references to EFF attributes
-// 1.8 | sglancy | 06/25/14 | Commented out DRAM_GEN checking section of the code and forced it to default DDR3 - WILL UPDATE TO CHECK THE DRAM GENERATIONS FOR FUTURE CODE GENERATIONS
-// 1.7 | sglancy | 06/24/14 | Fixed bugs associated with empty returns from fapiGetChildChiplets
-// 1.6 | sglancy | 06/18/14 | Updated to add more debug information into error
-// 1.5 | sglancy | 06/09/14 | Updated to change output attribute name and update debug statements
-// 1.4 | sglancy | 06/04/14 | Updated to include output attribute
-// 1.3 | sglancy | 05/30/14 | Formatted code
-// 1.2 | sglancy | 05/29/14 | Fixed attributes units and equations
-// 1.1 | sglancy | 05/20/14 | File created
-
-// This procedure takes a vector of Centaurs behind the vddr voltage domain,
-// reads in supported DIMM voltages from SPD and determines optimal
-// voltage bin for the DIMM voltage domain.
-// supported voltage bins: DDR3 1.35V DDR4 1.20V
-
-
-//----------------------------------------------------------------------
-// Includes - FAPI
-//----------------------------------------------------------------------
-#include <fapi.H>
-#include <mss_volt_vddr_offset.H>
-#include <mss_count_active_centaurs.H>
-
-//----------------------------------------------------------------------
-// Constants
-//----------------------------------------------------------------------
-
-
-fapi::ReturnCode mss_volt_vddr_offset(std::vector<fapi::Target> & i_targets)
-{
-
- //declares variables
- fapi::ReturnCode l_rc, bad_vpd_rc;
- uint32_t vpd_master_power_slope, vpd_master_power_intercept, volt_util_active, volt_util_inactive, volt_slope, volt_intercept;
- uint32_t good_master_power_slope, good_master_power_intercept, num_dimms_to_add;
- good_master_power_slope = good_master_power_intercept = 0;
- vpd_master_power_slope = vpd_master_power_intercept = volt_util_active = volt_util_inactive = volt_slope = volt_intercept = 0;
- uint32_t var_power_on_vddr = 0;
- uint32_t data_bus_util;
- uint32_t num_logical_dimms;
- uint8_t dram_gen , cur_dram_gen;
- bool dram_gen_found = false;
- uint8_t enable, is_functional;
- uint8_t ec_disable_attr;
- uint8_t num_non_functional = 0;
- uint8_t percent_uplift,percent_uplift_idle;
- uint32_t vddr_max_limit_mv;
- uint32_t param_vddr_voltage_mv;
- std::vector<fapi::Target> l_mbaChiplets;
- std::vector<fapi::Target> l_dimm_targets;
-
- //checks to make sure that all of the DRAM generation attributes are the same, if not error out
- for(uint32_t i = 0; i < i_targets.size();i++) {
- //gets the functional attribute to check for an active centaur
- l_rc = FAPI_ATTR_GET(ATTR_FUNCTIONAL,&i_targets[i],is_functional);
- //found an error
- if(l_rc) return l_rc;
-
- //found a non-functional DIMM, add it to the count
- if(is_functional != fapi::ENUM_ATTR_FUNCTIONAL_FUNCTIONAL) {
- num_non_functional++;
- }
-
- //loops through all MBA chiplets to compare the DRAM technology generation attribute
- l_mbaChiplets.clear();
- l_rc=fapiGetChildChiplets(i_targets[i], fapi::TARGET_TYPE_MBA_CHIPLET, l_mbaChiplets, fapi::TARGET_STATE_PRESENT);
- if(l_rc) return l_rc;
- for(uint32_t mba=0;mba<l_mbaChiplets.size();mba++) {
- //gets the dimm level target
- l_dimm_targets.clear();
- //gets the number of declared dimms
- l_rc = fapiGetAssociatedDimms(l_mbaChiplets[mba], l_dimm_targets);
- if(l_rc) return l_rc;
- for(uint32_t dimm=0;dimm<l_dimm_targets.size();dimm++) {
- //gets the attributes and computes var_power_on based upon whether the DRAM type is DDR3 or DDR4
- l_rc = FAPI_ATTR_GET(ATTR_SPD_DRAM_DEVICE_TYPE,&l_dimm_targets[dimm],cur_dram_gen);
- //found an error reading the VPD
- if(l_rc) {
- //if the dimm is non-functional, assume that it's bad VPD was the reason that it crashed, then skip this DIMM with a FAPI INF note
- if(is_functional == fapi::ENUM_ATTR_FUNCTIONAL_FUNCTIONAL) {
- FAPI_ERR("Problem reading VPD on functional DIMM. Logging error and proceding to the next DIMM.");
- if(bad_vpd_rc) {
- fapiLogError(bad_vpd_rc);
- }
-
- const fapi::Target & TARGET_DIMM_ERROR = l_dimm_targets[dimm];
- const fapi::Target & MBA_TARGET = l_mbaChiplets[mba];
- const uint32_t MBA_POSITION = mba;
- const uint32_t TARGET_POSITION = i;
- const uint32_t DIMM_POSITION = dimm;
- FAPI_SET_HWP_ERROR(bad_vpd_rc, RC_VDDR_FUNCTIONAL_DIMM_VPD_READ_ERROR);
- continue;
- }
- else {
- FAPI_INF("Problem reading VPD on non-functional DIMM. Skipping current DIMM and proceding to the next DIMM.");
- continue;
- }
- }
- //if this is the first DIMM that has a valid DRAM Technology level, then set the level and continue
- //otherwise throw an error and exit
- if(!dram_gen_found) {
- dram_gen = cur_dram_gen;
- dram_gen_found = true;
- } //end if
- else {
- //values are not equal -> set the fapi RC and exit out
- if(cur_dram_gen != dram_gen){
- // this just needs to be deconfiged at the dimm level
- const uint8_t &DRAM_GEN_MISCOMPARE = cur_dram_gen;
- const uint8_t &DRAM_GEN_START = dram_gen;
- const uint32_t &CEN_MBA_NUM = mba;
- const uint32_t &CEN_TARGET_NUM = i;
- FAPI_SET_HWP_ERROR(l_rc, RC_MSS_VOLT_VDDR_OFFSET_DRAM_GEN_MISCOMPARE);
- FAPI_ERR("Not all DRAM technology generations are the same. Exiting....");
- return l_rc;
- }//end if
- }//end else
- }
- }//end for
- }//end for
-
- //found a bad VPD
- if(bad_vpd_rc) {
- FAPI_ERR("Bad VPD found on a functional DIMM");
- return bad_vpd_rc;
- }
-
- //did not find a valid DRAM generation
- if(num_non_functional >= i_targets.size()) {
- FAPI_ERR("No functional centaurs found! Exiting....");
- FAPI_SET_HWP_ERROR(l_rc, RC_VOLT_VDDR_FUNCTIONAL_CENTAUR_NOT_FOUND);
- return l_rc;
- }
-
- //checks to make sure that the code actually found a dimm with a value for its dram generation. if not, exit out
- if(!dram_gen_found) {
- FAPI_ERR("No DRAM generation found! Exiting....");
- FAPI_SET_HWP_ERROR(l_rc, RC_VOLT_VDDR_DRAM_GEN_NOT_FOUND);
- return l_rc;
- }
-
- //voltage should not be updated if the disable is set
- l_rc = FAPI_ATTR_GET(ATTR_MSS_VDDR_OFFSET_DISABLE,NULL,enable);
- //error check
- if(l_rc) return l_rc;
- if(enable == fapi::ENUM_ATTR_MSS_VDDR_OFFSET_DISABLE_DISABLE){
- FAPI_INF("ATTR_MSS_VDDR_OFFSET_DISABLE is set to be disabled. Exiting....., %d",enable);
- return l_rc;
- }
-
- //loops checks if any MC's have the disable attribute set, if so, set to MSS_VOLT value
- //if not, continue with the code
- for(uint32_t i = 0; i < i_targets.size();i++) {
- //reads in the attribute
- l_rc = FAPI_ATTR_GET(ATTR_CENTAUR_EC_DISABLE_VDDR_DYNAMIC_VID,&i_targets[i],ec_disable_attr);
- if(l_rc) return l_rc;
- //disable is set, read mss_volt and exit out of the code
- if(ec_disable_attr) break;
- }
-
- //disable is set, sets the enable attribute based upon MSS_VOLT attribute
- if(ec_disable_attr) {
- FAPI_INF("Found Centaur with EC disable attribute set. Setting ATTR_MSS_VDDR_OFFSET based upon ATTR_MSS_VOLT");
- //sets the output attributes
- for(uint32_t i = 0; i< i_targets.size();i++) {
- l_rc = FAPI_ATTR_GET(ATTR_MSS_VOLT,&i_targets[i],param_vddr_voltage_mv);
- if(l_rc) return l_rc;
- l_rc = FAPI_ATTR_SET(ATTR_MSS_VDDR_OFFSET,&i_targets[i],param_vddr_voltage_mv);
- if(l_rc) return l_rc;
- }//end for
- return l_rc;
- }
-
- //gets the attributes and computes var_power_on based upon whether the DRAM type is DDR3 or DDR4
- if(dram_gen == fapi::ENUM_ATTR_SPD_DRAM_DEVICE_TYPE_DDR3) {
- l_rc = FAPI_ATTR_GET(ATTR_MSS_DDR3_VDDR_SLOPE,&i_targets[0],volt_slope);
- if(l_rc) return l_rc;
- l_rc = FAPI_ATTR_GET(ATTR_MSS_DDR3_VDDR_INTERCEPT,&i_targets[0],volt_intercept);
- if(l_rc) return l_rc;
- l_rc = FAPI_ATTR_GET(ATTR_MRW_DDR3_VDDR_MAX_LIMIT,&i_targets[0],vddr_max_limit_mv);
- if(l_rc) return l_rc;
- }
- //ddr4
- else {
- l_rc = FAPI_ATTR_GET(ATTR_MSS_DDR4_VDDR_SLOPE,&i_targets[0],volt_slope);
- if(l_rc) return l_rc;
- l_rc = FAPI_ATTR_GET(ATTR_MSS_DDR4_VDDR_INTERCEPT,&i_targets[0],volt_intercept);
- if(l_rc) return l_rc;
- l_rc = FAPI_ATTR_GET(ATTR_MRW_DDR4_VDDR_MAX_LIMIT,&i_targets[0],vddr_max_limit_mv);
- if(l_rc) return l_rc;
- }
-
- //computes the active an inactive attribute values
- l_rc = FAPI_ATTR_GET(ATTR_MRW_MAX_DRAM_DATABUS_UTIL,NULL,data_bus_util);
- if(l_rc) return l_rc;
- l_rc = FAPI_ATTR_GET(ATTR_MRW_DIMM_POWER_CURVE_PERCENT_UPLIFT,NULL,percent_uplift);
- if(l_rc) return l_rc;
- l_rc = FAPI_ATTR_GET(ATTR_MRW_DIMM_POWER_CURVE_PERCENT_UPLIFT_IDLE,NULL,percent_uplift_idle);
- if(l_rc) return l_rc;
- volt_util_active = data_bus_util;
- volt_util_inactive = 0;
-
- //checks to make sure that none of the values that were read or computed were set to zeros. If any of the values are 0's then 0 * any other value = 0
- if((volt_util_active * volt_slope * volt_intercept) == 0) {
- const uint32_t &VDDR_SLOPE_ACTIVE = volt_util_active;
- const uint32_t &VDDR_SLOPE_INACTIVE = volt_slope;
- const uint32_t &VDDR_SLOPE_INTERCEPT = volt_intercept;
- FAPI_SET_HWP_ERROR(l_rc, RC_MSS_VOLT_VDDR_OFFSET_VALUE_ERROR);
- FAPI_ERR("One or more dynamic VDD attributes is 0. Exiting....");
- return l_rc;
- }
-
- //debug print
- FAPI_INF("data_bus_util %d per 10k volt_util_active: %d per 10k volt_util_inactive: %d per 10k",data_bus_util,volt_util_active,volt_util_inactive);
-
-
- num_dimms_to_add = 1;
- //computes the preliminary VDDR value
- for(uint32_t i=0;i<i_targets.size();i++) {
- //gets the functional attribute to check for an active centaur
- l_rc = FAPI_ATTR_GET(ATTR_FUNCTIONAL,&i_targets[i],is_functional);
- //found an error
- if(l_rc) return l_rc;
-
- //gets the power slope values and does error checks if this card is functional, as it should have good VPD. if the card is non-functional, continue using good VPD power slope values
- l_rc = FAPI_ATTR_GET(ATTR_CDIMM_VPD_MASTER_POWER_SLOPE,&i_targets[i],vpd_master_power_slope);
- if(l_rc && (is_functional == fapi::ENUM_ATTR_FUNCTIONAL_FUNCTIONAL)) return l_rc;
- l_rc = FAPI_ATTR_GET(ATTR_CDIMM_VPD_MASTER_POWER_INTERCEPT,&i_targets[i],vpd_master_power_intercept);
- if(l_rc && (is_functional == fapi::ENUM_ATTR_FUNCTIONAL_FUNCTIONAL)) return l_rc;
-
- //removes leading bits from the VPD MASTER POWER attributes, leaving only the values needed for the power calculations
- vpd_master_power_slope &= 0x1FFF;
- vpd_master_power_intercept &= 0x1FFF;
-
- //checks to make sure that the attribute values are non-zero - calls out all bad DIMMs
- if(((vpd_master_power_slope * vpd_master_power_intercept) == 0) && (is_functional == fapi::ENUM_ATTR_FUNCTIONAL_FUNCTIONAL)) {
- if(bad_vpd_rc) {
- fapiLogError(bad_vpd_rc);
- }
-
- const fapi::Target & CHIP_TARGET = i_targets[i];
- const uint32_t &VPD_MASTER_POWER_SLOPE = vpd_master_power_slope;
- const uint32_t &VPD_MASTER_POWER_INTERCEPT = vpd_master_power_intercept;
- const uint32_t &CEN_TARGET_NUM = i;
- FAPI_SET_HWP_ERROR(bad_vpd_rc, RC_MSS_VOLT_VDDR_OFFSET_VPD_VALUE_ERROR);
- FAPI_ERR("One or more VPD Power slope attributes is 0. Logging error and looking for additional bad DIMMs.");
- continue;
- }
- //one or more DIMM has already been called out, skip doing the calculation and continue to try to find bad DIMMs
- else if(bad_vpd_rc) {
- FAPI_INF("Already found a bad DIMM. Skipping calculations on this DIMM.");
- continue;
- }
- //has not found good master_power_slopes and has bad master power slopes
- else if(((good_master_power_slope * good_master_power_intercept) == 0) && ((vpd_master_power_slope * vpd_master_power_intercept) == 0)) {
- num_dimms_to_add++;
- FAPI_INF("Found bad vpd_master_power_slope or vpd_master_power_intercept values on non-functional DIMM. Program has not found good values yet, adding one more DIMM to run when good values are found. Currently going to run %d DIMMs in the next dimm.",num_dimms_to_add);
- continue;
- }
- //found bad master power slope or power intercept but has good master power slope or intercepts
- else if(((vpd_master_power_slope * vpd_master_power_intercept) == 0) && ((good_master_power_slope * good_master_power_intercept) > 0)) {
- //uses assumed (last good master power slope and intercept) values for these calculations
- FAPI_INF("Found bad vpd_master_power_slope or vpd_master_power_intercept values on non-functional DIMM. Program is using the last good values for the calculations for this DIMM.");
- vpd_master_power_slope = good_master_power_slope;
- vpd_master_power_intercept = good_master_power_intercept;
- }
- //found good master power slopes -> set the good master power slope values
- else if((vpd_master_power_slope * vpd_master_power_intercept) > 0 ){
- good_master_power_slope = vpd_master_power_slope;
- good_master_power_intercept = vpd_master_power_intercept;
- }
-
- //loops through all MBA chiplets to compare the compute the total number of logical dimms on a dimm
- l_mbaChiplets.clear();
- l_rc=fapiGetChildChiplets(i_targets[i], fapi::TARGET_TYPE_MBA_CHIPLET, l_mbaChiplets, fapi::TARGET_STATE_PRESENT);
- if(l_rc) return l_rc;
- num_logical_dimms = 0;
- for(uint32_t mba=0;mba<l_mbaChiplets.size();mba++) {
- l_dimm_targets.clear();
- //gets the number of declared dimms
- l_rc = fapiGetAssociatedDimms(l_mbaChiplets[mba], l_dimm_targets);
- if(l_rc) return l_rc;
- num_logical_dimms += l_dimm_targets.size();
- }//end for
-
- //found an active centaur
- //multiply by total number of active logical dimms
- if(is_functional == fapi::ENUM_ATTR_FUNCTIONAL_FUNCTIONAL) {
- var_power_on_vddr += (int)(num_dimms_to_add*(((float)vpd_master_power_slope*volt_util_active/10000+vpd_master_power_intercept)*num_logical_dimms*(100+percent_uplift)/100));
- FAPI_INF("var_power_on_vddr: %d cW vpd_master_power_slope: %d cW volt_util_active: %d per 10k vpd_master_power_intercept %d cW num_logical_dimms %d percent_uplift %d %%",var_power_on_vddr,vpd_master_power_slope,volt_util_active,vpd_master_power_intercept,num_logical_dimms,percent_uplift);
- }
- //centaur must be inactive
- else {
- var_power_on_vddr += (int)(num_dimms_to_add*(((float)vpd_master_power_slope*volt_util_inactive/10000+vpd_master_power_intercept)*num_logical_dimms*(100+percent_uplift_idle)/100));
- FAPI_INF("var_power_on_vddr: %d cW vpd_master_power_slope: %d cW volt_util_inactive: %d per 10k vpd_master_power_intercept %d cW num_logical_dimms %d percent_uplift_idle %d %%",var_power_on_vddr,vpd_master_power_slope,volt_util_inactive,vpd_master_power_intercept,num_logical_dimms,percent_uplift_idle);
- }
-
- //resets the number of DIMMs to add.
- num_dimms_to_add = 1;
- }//end for
-
- //found a bad DIMM, exit
- if(bad_vpd_rc) {
- FAPI_ERR("Found one or more functional DIMM with bad VPD. Exiting....");
- return bad_vpd_rc;
- }
-
- //debug print
- FAPI_INF("var_power_on_vddr: %d cW volt_slope: %d uV/W volt_intercept: %d mV",var_power_on_vddr,volt_slope,volt_intercept);
-
- //computes and converts the voltage offset into mV
- param_vddr_voltage_mv = (500 + var_power_on_vddr*volt_slope/100) / 1000 + volt_intercept;
- FAPI_INF("param_vddr_voltage_mv: %d mV",param_vddr_voltage_mv);
- //found that the VDDR voltage is over the maximum limit
- if(param_vddr_voltage_mv > vddr_max_limit_mv) {
- FAPI_INF("param_vddr_voltage_mv, %d mV, is over vddr_max_limit_mv of %d mV.",param_vddr_voltage_mv,vddr_max_limit_mv);
- FAPI_INF("Setting param_vddr_voltage_mv to vddr_max_limit_mv");
- param_vddr_voltage_mv = vddr_max_limit_mv;
- }
- //prints a debug statement
- FAPI_INF("ATTR_MSS_VDDR_OFFSET: %d mV",param_vddr_voltage_mv);
-
- //sets the output attributes
- for(uint32_t i = 0; i< i_targets.size();i++) {
- l_rc = FAPI_ATTR_SET(ATTR_MSS_VDDR_OFFSET,&i_targets[i],param_vddr_voltage_mv);
- if(l_rc) return l_rc;
- }//end for
-
- return l_rc;
-}
diff --git a/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_vddr_offset.H b/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_vddr_offset.H
deleted file mode 100644
index 40387dfd8..000000000
--- a/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_vddr_offset.H
+++ /dev/null
@@ -1,72 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG */
-/* This is an automatically generated prolog. */
-/* */
-/* $Source: src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_vddr_offset.H $ */
-/* */
-/* OpenPOWER HostBoot Project */
-/* */
-/* Contributors Listed Below - COPYRIGHT 2014 */
-/* [+] International Business Machines Corp. */
-/* */
-/* */
-/* Licensed under the Apache License, Version 2.0 (the "License"); */
-/* you may not use this file except in compliance with the License. */
-/* 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 */
-// $Id: mss_volt_vddr_offset.H,v 1.4 2014/06/18 20:34:39 dcadiga Exp $
-//------------------------------------------------------------------------------
-// *! (C) Copyright International Business Machines Corp. 2011
-// *! All Rights Reserved -- Property of IBM
-// *! *** ***
-//------------------------------------------------------------------------------
-// *! TITLE : mss_volt_vddr_offset.H
-// *! DESCRIPTION : see additional comments below
-// *! OWNER NAME : Stephen Glancy Email: sglancy@us.ibm.com
-// *! BACKUP NAME : Jacob Sloat Email: jdsloat@us.ibm.com
-// *! ADDITIONAL COMMENTS :
-//
-// Header file for mss_volt_vddr_offset.
-//
-//------------------------------------------------------------------------------
-// Don't forget to create CVS comments when you check in your changes!
-//------------------------------------------------------------------------------
-// CHANGE HISTORY:
-//------------------------------------------------------------------------------
-// Version:| Author: | Date: | Comment:
-//---------|----------|----------|-----------------------------------------------
-// 1.4 | sglancy | 06/16/14 | Updated to include output attribute
-// 1.3 | sglancy | 06/04/14 | Updated to include output attribute
-// 1.2 | sglancy | 05/30/14 | changed function to return a value in uV
-// 1.1 | sglancy | 05/20/14 | initial drop
-#ifndef MSS_VOLT_VDDR_OFFSET_H_
-#define MSS_VOLT_VDDR_OFFSET_H_
-
-#include <fapi.H>
-
-typedef fapi::ReturnCode (*mss_volt_vddr_offset_FP_t)(std::vector<fapi::Target> &);
-
-extern "C"
-{
-
-/**
- * @brief mss_volt_vddr_offset procedure. Determines operating vddr voltage for dimms behind a vddr voltage domain
- *
- * @param[in] std::vector<fapi::Target> l_targets Reference to vector of Centaur Targets in a particular vddr power domain
- *
- * @return ReturnCode
- */
-
- fapi::ReturnCode mss_volt_vddr_offset(std::vector<fapi::Target> & i_targets);
-
-} // extern "C"
-
-#endif // MSS_VOLT_VDDR_OFFSET_H_
diff --git a/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_vpp_offset.C b/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_vpp_offset.C
deleted file mode 100644
index b8740823b..000000000
--- a/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_vpp_offset.C
+++ /dev/null
@@ -1,407 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG */
-/* This is an automatically generated prolog. */
-/* */
-/* $Source: src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_vpp_offset.C $ */
-/* */
-/* OpenPOWER HostBoot Project */
-/* */
-/* Contributors Listed Below - COPYRIGHT 2014,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 */
-// $Id: mss_volt_vpp_offset.C,v 1.20 2015/07/22 14:15:06 sglancy Exp $
-/* File mss_volt_vpp_offset.C created by Stephen Glancy on Tue 20 May 2014. */
-
-//------------------------------------------------------------------------------
-// *! (C) Copyright International Business Machines Corp. 2007
-// *! All Rights Reserved -- Property of IBM
-// *! *** ***
-//------------------------------------------------------------------------------
-// *! TITLE : mss_volt_vpp_offset.C
-// *! DESCRIPTION : Tools for centaur procedures
-// *! OWNER NAME : Stephen Glancy (sglancy@us.ibm.com)
-// *! BACKUP NAME : Jacob Sloat (jdsloat@us.ibm.com)
-// #! ADDITIONAL COMMENTS :
-//
-// General purpose funcs
-
-//------------------------------------------------------------------------------
-// Don't forget to create CVS comments when you check in your changes!
-//------------------------------------------------------------------------------
-// CHANGE HISTORY:
-//------------------------------------------------------------------------------
-// Version:| Author: | Date: | Comment:
-//---------|----------|----------|-----------------------------------------------
-// 1.20 | sglancy | 07/22/15 | DDR4 updates allowing both DDR3 and DDR4 DIMMs on the same VPP plane
-// 1.19 | sglancy | 04/21/15 | Added support for mixed voltage plane configurations. still checks for mixed centaur bugs
-// 1.18 | sglancy | 09/12/14 | Removed references to EFF attributes
-// 1.17 | sglancy | 09/12/14 | Fixed bugs
-// 1.16 | sglancy | 09/11/14 | Fixed bugs
-// 1.15 | sglancy | 09/09/14 | Fixed bug
-// 1.14 | sglancy | 09/08/14 | Updated to fix FW compile and logic bugs
-// 1.13 | sglancy | 09/03/14 | Updated to go with a new HWP design
-// 1.12 | sglancy | 08/27/14 | Changed code to set VPP offset value to 0 if code is unable to read the VPD of all DIMMs, which should disable the VPP plane
-// 1.11 | sglancy | 08/22/14 | Changed code to make the risky assumption that the box is running DDR3 if code is unable to read the VPD of all DIMMs
-// 1.10 | sglancy | 07/16/14 | Fixed attribute name bug
-// 1.9 | sglancy | 07/01/14 | Included updates for DDR4
-// 1.8 | sglancy | 06/25/14 | Commented out DRAM_GEN checking section of the code and forced it to default DDR3 - WILL UPDATE TO CHECK THE DRAM GENERATIONS FOR FUTURE CODE GENERATIONS
-// 1.7 | sglancy | 06/24/14 | Fixed bugs associated with empty returns from fapiGetChildChiplets
-// 1.6 | sglancy | 06/18/14 | Deletes two unused variables and updated errors
-// 1.5 | sglancy | 06/09/14 | Updated debug statements
-// 1.4 | sglancy | 06/04/14 | Updated to include output attribute
-// 1.3 | sglancy | 05/30/14 | Formatted code
-// 1.2 | sglancy | 05/29/14 | Fixed attributes units and equations
-// 1.1 | sglancy | 05/20/14 | File created
-
-// This procedure takes a vector of Centaurs behind the vpp voltage domain,
-// reads in supported DIMM voltages from SPD and determines optimal
-// voltage bin for the DIMM voltage domain.
-// supported voltage bins: DDR3 0V DDR4 2.5V
-
-
-//----------------------------------------------------------------------
-// Includes - FAPI
-//----------------------------------------------------------------------
-#include <fapi.H>
-#include <mss_volt_vpp_offset.H>
-#include <mss_count_active_centaurs.H>
-
-//----------------------------------------------------------------------
-// Constants
-//----------------------------------------------------------------------
-
-
-fapi::ReturnCode mss_volt_vpp_offset(std::vector<fapi::Target> & i_targets)
-{
- //declares variables
- fapi::ReturnCode l_rc, bad_vpd_rc;
- uint32_t num_chips = 0;
- uint32_t vpp_slope, vpp_intercept;
- uint8_t dram_width, enable, dram_gen;
- uint8_t cur_dram_gen, is_functional;
- bool dram_gen_found_mc = false;
- bool dram_gen_found = false;
- bool dram_gen_ddr4 = false;
- uint8_t num_spares[2][2][4];
- uint8_t rank_config, num_non_functional;
- num_non_functional = 0;
- std::vector<fapi::Target> l_mbaChiplets;
- std::vector<fapi::Target> l_dimm_targets;
- std::vector<uint8_t> dram_gen_vector; //used to ID whether an MC needs to be used in the VPP offset calculations
-
- //checks to make sure that all of the DRAM generation attributes are the same, if not error out
- for(uint32_t i = 0; i < i_targets.size();i++) {
- //gets the functional attribute to check for an active centaur
- l_rc = FAPI_ATTR_GET(ATTR_FUNCTIONAL,&i_targets[i],is_functional);
- //found an error
- if(l_rc) return l_rc;
-
- //found a non-functional DIMM, add it to the count
- if(is_functional != fapi::ENUM_ATTR_FUNCTIONAL_FUNCTIONAL) {
- num_non_functional++;
- }
-
- dram_gen_found_mc = false;
-
- //loops through all MBA chiplets to compare the DRAM technology generation attribute
- l_mbaChiplets.clear();
- l_rc=fapiGetChildChiplets(i_targets[i], fapi::TARGET_TYPE_MBA_CHIPLET, l_mbaChiplets, fapi::TARGET_STATE_PRESENT);
- if(l_rc) return l_rc;
- for(uint32_t mba=0;mba<l_mbaChiplets.size();mba++) {
- //gets the dimm level target
- l_dimm_targets.clear();
- //gets the number of declared dimms
- l_rc = fapiGetAssociatedDimms(l_mbaChiplets[mba], l_dimm_targets);
- if(l_rc) return l_rc;
- for(uint32_t dimm=0;dimm<l_dimm_targets.size();dimm++) {
- //gets the attributes and computes var_power_on based upon whether the DRAM type is DDR3 or DDR4
- l_rc = FAPI_ATTR_GET(ATTR_SPD_DRAM_DEVICE_TYPE,&l_dimm_targets[dimm],cur_dram_gen);
- //found an error reading the VPD
- if(l_rc) {
- //if the dimm is non-functional, assume that it's bad VPD was the reason that it crashed, then skip this DIMM with a FAPI INF note
- if(is_functional == fapi::ENUM_ATTR_FUNCTIONAL_FUNCTIONAL) {
- FAPI_ERR("Problem reading VPD on functional DIMM. Logging error and proceding to the next DIMM.");
- if(bad_vpd_rc) {
- fapiLogError(bad_vpd_rc);
- }
-
- const fapi::Target & TARGET_DIMM_ERROR = l_dimm_targets[dimm];
- const fapi::Target & MBA_TARGET = l_mbaChiplets[mba];
- const uint32_t MBA_POSITION = mba;
- const uint32_t TARGET_POSITION = i;
- const uint32_t DIMM_POSITION = dimm;
- const uint32_t FAILING_ATTRIBUTE = fapi::ATTR_SPD_DRAM_DEVICE_TYPE;
- FAPI_SET_HWP_ERROR(bad_vpd_rc, RC_VPP_FUNCTIONAL_DIMM_VPD_READ_ERROR);
- continue;
- }
- else {
- FAPI_INF("Problem reading VPD on non-functional DIMM. Skipping current DIMM and proceding to the next DIMM.");
- continue;
- }
- }
- //if this is the first DIMM that has a valid DRAM Technology level, then set the level and continue
- //otherwise throw an error and exit
- if(!dram_gen_found_mc) {
- dram_gen = cur_dram_gen;
- dram_gen_found = true;
- dram_gen_found_mc = true;
- } //end if
- else {
- //values are not equal for one given centaur -> set the fapi RC and exit out
- if(cur_dram_gen != dram_gen){
- // this just needs to be deconfiged at the dimm level
- const uint8_t &DRAM_GEN_MISCOMPARE = cur_dram_gen;
- const uint8_t &DRAM_GEN_START = dram_gen;
- const uint32_t &CEN_MBA_NUM = mba;
- const uint32_t &CEN_TARGET_NUM = i;
- FAPI_SET_HWP_ERROR(l_rc, RC_MSS_VOLT_VPP_OFFSET_DRAM_GEN_MISCOMPARE);
- FAPI_ERR("Not all DRAM technology generations are the same.\nExiting....");
- return l_rc;
- }//end if
- //is a DDR4 type, go and set the DDR4 flag -> means that the vpp offset flag will be set
- if(cur_dram_gen == fapi::ENUM_ATTR_SPD_DRAM_DEVICE_TYPE_DDR4) {
- dram_gen_ddr4 = true;
- }
- }//end else
- }
- }//end for
-
- //if a DRAM gen was not found for this MC, then assume that this is a DDR4 DIMM to err on the side of caution
- //please note: dram_gen_ddr4 flag is not set here intentionally, this is because the voltage offset is only desirable if a card is confirmed as DDR4
- if(!dram_gen_found_mc) {
- dram_gen_vector.push_back(fapi::ENUM_ATTR_SPD_DRAM_DEVICE_TYPE_DDR4);
- }
- //otherwise, do the current DRAM gen for the card
- else {
- dram_gen_vector.push_back(cur_dram_gen);
- }
- }//end for
-
- //found a bad VPD
- if(bad_vpd_rc) {
- FAPI_ERR("Bad VPD found on a functional DIMM");
- return bad_vpd_rc;
- }
-
- //did not find a valid DRAM generation
- if(num_non_functional >= i_targets.size()) {
- FAPI_ERR("No functional centaurs found! Exiting....");
- FAPI_SET_HWP_ERROR(l_rc, RC_VOLT_VPP_FUNCTIONAL_CENTAUR_NOT_FOUND);
- return l_rc;
- }
-
- //checks to make sure that the code actually found a dimm with a value for its dram generation. if not, exit out
- if(!dram_gen_found) {
- FAPI_ERR("No DRAM generation found! Exiting....");
- FAPI_SET_HWP_ERROR(l_rc, RC_VOLT_VPP_DRAM_GEN_NOT_FOUND);
- return l_rc;
- }
-
- //checks to see if the DIMMs are DDR3 DIMMs if so, return 0 and exit
- if(!dram_gen_ddr4) {
- uint32_t param_vpp_voltage_mv = 0;
- //debug output statement
- FAPI_INF("ATTR_MSS_VPP_OFFSET: %d",param_vpp_voltage_mv);
- //sets the output attributes
- for(uint32_t i = 0; i< i_targets.size();i++) {
- l_rc = FAPI_ATTR_SET(ATTR_MSS_VPP_OFFSET,&i_targets[i],param_vpp_voltage_mv);
- if(l_rc) return l_rc;
- }
- return l_rc;
- }
-
- //voltage should not be updated if the disable is set
- l_rc = FAPI_ATTR_GET(ATTR_MSS_VPP_OFFSET_DISABLE,NULL,enable);
- //error check
- if(l_rc) return l_rc;
- //add print statement for enable/disable check
-
- if(enable == fapi::ENUM_ATTR_MSS_VPP_OFFSET_DISABLE_DISABLE) return l_rc;
-
- //gets the slope and intercepts
- l_rc = FAPI_ATTR_GET(ATTR_MSS_VPP_SLOPE,&i_targets[0],vpp_slope);
- if(l_rc) return l_rc;
- l_rc = FAPI_ATTR_GET(ATTR_MSS_VPP_SLOPE_INTERCEPT,&i_targets[0],vpp_intercept);
- if(l_rc) return l_rc;
- //checks to make sure that none of the values are zeros. If any of the values are 0's then 0 * any other value = 0
- if((vpp_slope * vpp_intercept) == 0) {
- const uint32_t &VPP_SLOPE = vpp_slope;
- const uint32_t &VPP_INTERCEPT = vpp_intercept;
- FAPI_SET_HWP_ERROR(l_rc, RC_MSS_VOLT_VPP_OFFSET_VALUE_ERROR);
- FAPI_ERR("One or more dynamic VPP attributes is 0.\nExiting....");
- return l_rc;
- }
-
-
- //continues computing VPP for DDR4
- //loops through all DIMMs
- num_chips=0;
- for(uint32_t i=0;i<i_targets.size();i++) {
- //skips the curent target if it's not DDR4 (no DRAMs drawing power)
- if(dram_gen_vector[i] != fapi::ENUM_ATTR_SPD_DRAM_DEVICE_TYPE_DDR4) continue;
-
- //resets the number of ranks and spares
- l_mbaChiplets.clear();
- l_rc=fapiGetChildChiplets(i_targets[i], fapi::TARGET_TYPE_MBA_CHIPLET, l_mbaChiplets, fapi::TARGET_STATE_PRESENT);
- if(l_rc) return l_rc;
- //loops through the each MBA chiplet to get the number of ranks and the number of spares
- for(uint32_t mba = 0;mba<l_mbaChiplets.size();mba++) {
- //gets the dimm level target
- l_rc = FAPI_ATTR_GET(ATTR_VPD_DIMM_SPARE,&l_mbaChiplets[mba],num_spares);
- //found an error reading the VPD
- if(l_rc) {
- //if the dimm is non-functional, assume that it's bad VPD was the reason that it crashed, then log an error and exit out
- if(is_functional != fapi::ENUM_ATTR_FUNCTIONAL_FUNCTIONAL) {
- FAPI_INF("Problem reading VPD on non-functional DIMM. Using default values for the number of spares");
- //uses assumed value
- for(uint32_t port=0;port<2;port++) {
- for(uint32_t dimm=0;dimm<2;dimm++) {
- for(uint32_t rank=0;rank<4;rank++) {
- num_spares[port][dimm][rank] = DIMM_SPARE_DEFAULT;
- }
- }
- }
- }
- //otherwise, just return the error code
- else {
- FAPI_ERR("Problem reading VPD on functional DIMM. Logging error and proceding to the next DIMM.");
- if(bad_vpd_rc) {
- fapiLogError(bad_vpd_rc);
- }
-
- const fapi::Target & TARGET_CEN_ERROR = i_targets[i];
- const fapi::Target & MBA_TARGET = l_mbaChiplets[mba];
- const uint32_t MBA_POSITION = mba;
- const uint32_t TARGET_POSITION = i;
- const uint32_t FAILING_ATTRIBUTE = fapi::ATTR_VPD_DIMM_SPARE;
- FAPI_SET_HWP_ERROR(bad_vpd_rc, RC_VPP_FUNCTIONAL_CENTAUR_VPD_READ_ERROR);
- continue;
- }
- }
-
- l_dimm_targets.clear();
- //gets the number of declared dimms
- l_rc = fapiGetAssociatedDimms(l_mbaChiplets[mba], l_dimm_targets);
- if(l_rc) return l_rc;
- for(uint32_t dimm=0;dimm<l_dimm_targets.size();dimm++) {
- //gets if the centaur is a x4 or a x8
- l_rc = FAPI_ATTR_GET(ATTR_SPD_DRAM_WIDTH,&l_dimm_targets[dimm],dram_width);
- //found an error reading the VPD
- if(l_rc) {
- //if the dimm is non-functional, assume that it's bad VPD was the reason that it crashed, then log an error and exit out
- if(is_functional != fapi::ENUM_ATTR_FUNCTIONAL_FUNCTIONAL) {
- FAPI_INF("Problem reading VPD on non-functional DIMM. Using default value for DRAM_WIDTH");
- //uses assumed value
- dram_width = DRAM_WIDTH_DEFAULT;
- }
- //otherwise, callout and deconfigure the DIMM
- else {
- FAPI_ERR("Problem reading VPD on functional DIMM. Logging error and proceding to the next DIMM.");
- if(bad_vpd_rc) {
- fapiLogError(bad_vpd_rc);
- }
-
- const fapi::Target & TARGET_DIMM_ERROR = l_dimm_targets[dimm];
- const fapi::Target & MBA_TARGET = l_mbaChiplets[mba];
- const uint32_t MBA_POSITION = mba;
- const uint32_t TARGET_POSITION = i;
- const uint32_t DIMM_POSITION = dimm;
- const uint32_t FAILING_ATTRIBUTE = fapi::ATTR_SPD_DRAM_WIDTH;
- FAPI_SET_HWP_ERROR(bad_vpd_rc, RC_VPP_FUNCTIONAL_DIMM_VPD_READ_ERROR);
- continue;
- }
- }
- l_rc = FAPI_ATTR_GET(ATTR_SPD_NUM_RANKS,&l_dimm_targets[dimm],rank_config);
- //found an error reading the VPD
- if(l_rc) {
- //if the dimm is non-functional, assume that it's bad VPD was the reason that it crashed, then log an error and exit out
- if(is_functional != fapi::ENUM_ATTR_FUNCTIONAL_FUNCTIONAL) {
- FAPI_INF("Problem reading VPD on non-functional DIMM. Using default value for DRAM_WIDTH");
- //uses assumed value
- rank_config = NUM_RANKS_PER_DIMM_DEFAULT;
- }
- //otherwise, callout and deconfigure the DIMM
- else {
- FAPI_ERR("Problem reading VPD on functional DIMM. Logging error and proceding to the next DIMM.");
- if(bad_vpd_rc) {
- fapiLogError(bad_vpd_rc);
- }
- const fapi::Target & TARGET_DIMM_ERROR = l_dimm_targets[dimm];
- const fapi::Target & MBA_TARGET = l_mbaChiplets[mba];
- const uint32_t MBA_POSITION = mba;
- const uint32_t TARGET_POSITION = i;
- const uint32_t DIMM_POSITION = dimm;
- const uint32_t FAILING_ATTRIBUTE = fapi::ATTR_SPD_NUM_RANKS;
- FAPI_SET_HWP_ERROR(bad_vpd_rc, RC_VPP_FUNCTIONAL_DIMM_VPD_READ_ERROR);
- continue;
- }
- }
- //adjusts the number of ranks so it's the actual number of ranks on the DIMM
- rank_config++;
-
- //adds the appropriate number of DRAM found per dimm for each rank
- if(dram_width == fapi::ENUM_ATTR_SPD_DRAM_WIDTH_W4) num_chips += 18*rank_config;
- else num_chips += 9*rank_config;
- }
- //loops through and computes the number of spares
- //assuming that all dram_widths are the same across the centaur and am using the last one
- for(uint32_t port=0;port<2;port++) {
- for(uint32_t dimm=0;dimm<2;dimm++) {
- for(uint32_t rank=0;rank<4;rank++) {
- if(dram_width == fapi::ENUM_ATTR_SPD_DRAM_WIDTH_W4) {
- if(num_spares[port][dimm][rank] == fapi::ENUM_ATTR_VPD_DIMM_SPARE_LOW_NIBBLE) {
- num_chips += 1;
- }
- if(num_spares[port][dimm][rank] == fapi::ENUM_ATTR_VPD_DIMM_SPARE_HIGH_NIBBLE) {
- num_chips += 1;
- }
- if(num_spares[port][dimm][rank] == fapi::ENUM_ATTR_VPD_DIMM_SPARE_FULL_BYTE) {
- num_chips += 2;
- }
- }
- else {
- if(num_spares[port][dimm][rank] == fapi::ENUM_ATTR_VPD_DIMM_SPARE_FULL_BYTE) {
- num_chips += 1;
- }
- }
- }
- }
- }
- }
- }
-
- //found a bad VPD
- if(bad_vpd_rc) {
- FAPI_ERR("Bad VPD found on a functional DIMM or centaur");
- return bad_vpd_rc;
- }
-
- FAPI_INF("vpp_slope: %d uV/DRAM chip vpp_intercept: %d mV num_chips: %d DRAM chips\n",vpp_slope,vpp_intercept,num_chips);
-
- //does the final computation
- uint32_t param_vpp_voltage_uv = vpp_slope*num_chips+1000*vpp_intercept;
- //rounds and converts the voltage offset into mV
- uint32_t param_vpp_voltage_mv = (500 + param_vpp_voltage_uv) / 1000;
- FAPI_INF("ATTR_MSS_VPP_OFFSET: %d mV",param_vpp_voltage_mv);
-
- //sets the output attributes
- for(uint32_t i = 0; i< i_targets.size();i++) {
- l_rc = FAPI_ATTR_SET(ATTR_MSS_VPP_OFFSET,&i_targets[i],param_vpp_voltage_mv);
- if(l_rc) return l_rc;
- }//end for
-
- return l_rc;
-}
diff --git a/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_vpp_offset.H b/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_vpp_offset.H
deleted file mode 100644
index 4d0453421..000000000
--- a/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_vpp_offset.H
+++ /dev/null
@@ -1,79 +0,0 @@
-/* IBM_PROLOG_BEGIN_TAG */
-/* This is an automatically generated prolog. */
-/* */
-/* $Source: src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_vpp_offset.H $ */
-/* */
-/* OpenPOWER HostBoot Project */
-/* */
-/* Contributors Listed Below - COPYRIGHT 2014 */
-/* [+] International Business Machines Corp. */
-/* */
-/* */
-/* Licensed under the Apache License, Version 2.0 (the "License"); */
-/* you may not use this file except in compliance with the License. */
-/* 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 */
-// $Id: mss_volt_vpp_offset.H,v 1.6 2014/09/10 15:48:07 sglancy Exp $
-//------------------------------------------------------------------------------
-// *! (C) Copyright International Business Machines Corp. 2011
-// *! All Rights Reserved -- Property of IBM
-// *! *** ***
-//------------------------------------------------------------------------------
-// *! TITLE : mss_volt_vpp_offset.H
-// *! DESCRIPTION : see additional comments below
-// *! OWNER NAME : Stephen Glancy Email: sglancy@us.ibm.com
-// *! BACKUP NAME : Jacob Sloat Email: jdsloat@us.ibm.com
-// *! ADDITIONAL COMMENTS :
-//
-// Header file for mss_volt_vpp_offset.
-//
-//------------------------------------------------------------------------------
-// Don't forget to create CVS comments when you check in your changes!
-//------------------------------------------------------------------------------
-// CHANGE HISTORY:
-//------------------------------------------------------------------------------
-// Version:| Author: | Date: | Comment:
-//---------|----------|----------|-----------------------------------------------
-// 1.6 | sglancy | 09/10/14 | Updated default attribute values
-// 1.5 | sglancy | 07/09/14 | Added Default attribute values
-// 1.4 | sglancy | 06/16/14 | Updated to fix formatting
-// 1.3 | sglancy | 06/04/14 | Updated to account for output attribute
-// 1.2 | sglancy | 05/30/14 | changed function to return a value in uV
-// 1.1 | sglancy | 05/20/14 | initial drop
-#ifndef MSS_VOLT_VPP_OFFSET_H_
-#define MSS_VOLT_VPP_OFFSET_H_
-
-#include <fapi.H>
-
-//assumes 128GB values except for spare byte -> uses a full spare byte in the case of x8 DRAM with good DRAM width but bad spare byte values
-#define DRAM_WIDTH_DEFAULT fapi::ENUM_ATTR_SPD_DRAM_WIDTH_W4
-#define NUM_RANKS_PER_DIMM_DEFAULT fapi::ENUM_ATTR_SPD_NUM_RANKS_R4
-#define DIMM_SPARE_DEFAULT fapi::ENUM_ATTR_VPD_DIMM_SPARE_FULL_BYTE
-
-typedef fapi::ReturnCode (*mss_volt_vpp_offset_FP_t)(std::vector<fapi::Target> &);
-
-extern "C"
-{
-
-/**
- * @brief mss_volt_vpp_offset procedure. Determines operating vpp voltage for dimms behind a vpp voltage domain
- *
- * @param[in] std::vector<fapi::Target> l_targets Reference to vector of Centaur Targets in a particular vpp power domain
- *
- * @return ReturnCode
- */
-
- fapi::ReturnCode mss_volt_vpp_offset(std::vector<fapi::Target> & i_targets);
-
-} // extern "C"
-
-#endif // MSS_VOLT_VPP_OFFSET_H_
diff --git a/src/usr/hwpf/hwp/nest_chiplets/nest_chiplets.C b/src/usr/hwpf/hwp/nest_chiplets/nest_chiplets.C
index b53199fce..237b28a32 100644
--- a/src/usr/hwpf/hwp/nest_chiplets/nest_chiplets.C
+++ b/src/usr/hwpf/hwp/nest_chiplets/nest_chiplets.C
@@ -41,7 +41,7 @@
#include <initservice/taskargs.H>
#include <errl/errlentry.H>
-#include <hwpisteperror.H>
+#include <isteps/hwpisteperror.H>
#include <errl/errludtarget.H>
#include <initservice/isteps_trace.H>
diff --git a/src/usr/hwpf/hwp/sbe_centaur_init/sbe_centaur_init.C b/src/usr/hwpf/hwp/sbe_centaur_init/sbe_centaur_init.C
index 57451cb4a..632ac48d2 100644
--- a/src/usr/hwpf/hwp/sbe_centaur_init/sbe_centaur_init.C
+++ b/src/usr/hwpf/hwp/sbe_centaur_init/sbe_centaur_init.C
@@ -53,7 +53,7 @@
#include <fapiPlatHwpInvoker.H>
#include <vfs/vfs.H>
#include "sbe_centaur_init.H"
-#include <hwpisteperror.H>
+#include <isteps/hwpisteperror.H>
#include <errl/errludtarget.H>
#include <sbe/sbeif.H>
#include "cen_xip_customize.H"
diff --git a/src/usr/hwpf/hwp/slave_sbe/slave_sbe.C b/src/usr/hwpf/hwp/slave_sbe/slave_sbe.C
index 5bdeee5e0..352998471 100644
--- a/src/usr/hwpf/hwp/slave_sbe/slave_sbe.C
+++ b/src/usr/hwpf/hwp/slave_sbe/slave_sbe.C
@@ -51,7 +51,7 @@
#include <targeting/namedtarget.H>
#include <targeting/attrsync.H>
-#include <hwpisteperror.H>
+#include <isteps/hwpisteperror.H>
#include <errl/errludtarget.H>
// fapi support
diff --git a/src/usr/hwpf/hwp/start_payload/start_payload.C b/src/usr/hwpf/hwp/start_payload/start_payload.C
index 27bf4b780..a373706cc 100644
--- a/src/usr/hwpf/hwp/start_payload/start_payload.C
+++ b/src/usr/hwpf/hwp/start_payload/start_payload.C
@@ -61,7 +61,7 @@
#include <util/misc.H>
#include <initservice/isteps_trace.H>
-#include <hwpisteperror.H>
+#include <isteps/hwpisteperror.H>
// targeting support
#include <targeting/common/commontargeting.H>
diff --git a/src/usr/hwpf/makefile b/src/usr/hwpf/makefile
index 6041b9db2..0b891bb7a 100644
--- a/src/usr/hwpf/makefile
+++ b/src/usr/hwpf/makefile
@@ -88,7 +88,6 @@ HWP_ERROR_XML_FILES += hwp/dmi_training/proc_dmi_scominit_errors.xml
HWP_ERROR_XML_FILES += hwp/dmi_training/cen_dmi_scominit_errors.xml
HWP_ERROR_XML_FILES += hwp/sbe_centaur_init/cen_xip_customize_errors.xml
HWP_ERROR_XML_FILES += hwp/tod_init/proc_tod_utils/proc_tod_utils.xml
-HWP_ERROR_XML_FILES += hwp/mc_config/mss_eff_config/opt_memmap_errors.xml
HWP_ERROR_XML_FILES += hwp/pstates/pstates/p8_build_pstate_datablock_errors.xml
HWP_ERROR_XML_FILES += hwp/pstates/pstates/proc_get_voltage_errors.xml
HWP_ERROR_XML_FILES += hwp/proc_cfam_registers.xml
@@ -96,16 +95,6 @@ HWP_ERROR_XML_FILES += hwp/p8_slw_registers.xml
HWP_ERROR_XML_FILES += hwp/utility_procedures/memory_mss_maint_cmds.xml
HWP_ERROR_XML_FILES += hwp/utility_procedures/proc_mpipl_force_winkle_errors.xml
-HWP_ERROR_XML_FILES += hwp/mc_config/mss_volt/memory_mss_volt.xml
-HWP_ERROR_XML_FILES += hwp/mc_config/mss_volt/memory_mss_volt_avdd_offset.xml
-HWP_ERROR_XML_FILES += hwp/mc_config/mss_volt/memory_mss_volt_vdd_offset.xml
-HWP_ERROR_XML_FILES += hwp/mc_config/mss_volt/memory_mss_volt_vcs_offset.xml
-HWP_ERROR_XML_FILES += hwp/mc_config/mss_volt/memory_mss_volt_vpp_offset.xml
-HWP_ERROR_XML_FILES += hwp/mc_config/mss_volt/memory_mss_volt_vddr_offset.xml
-HWP_ERROR_XML_FILES += hwp/mc_config/mss_freq/memory_mss_freq.xml
-HWP_ERROR_XML_FILES += hwp/mc_config/mss_eff_config/memory_mss_eff_grouping.xml
-HWP_ERROR_XML_FILES += hwp/mc_config/mss_eff_config/memory_mss_eff_config_thermal.xml
-HWP_ERROR_XML_FILES += hwp/mc_config/mss_eff_config/memory_mss_bulk_pwr_throttles.xml
HWP_ERROR_XML_FILES += hwp/dram_training/memory_mss_funcs.xml
HWP_ERROR_XML_FILES += hwp/dram_training/mss_draminit_training/memory_mss_draminit_training.xml
HWP_ERROR_XML_FILES += hwp/dram_training/mss_ddr_phy_reset/memory_mss_ddr_phy_reset.xml
@@ -124,10 +113,6 @@ HWP_ERROR_XML_FILES += hwp/dram_training/mss_draminit_trainadv/memory_mss_dramin
HWP_ERROR_XML_FILES += hwp/dram_training/mss_draminit_trainadv/memory_mss_mss_ddr4_pda_errors.xml
HWP_ERROR_XML_FILES += hwp/dram_training/mss_draminit_trainadv/memory_mss_generic_shmoo.xml
HWP_ERROR_XML_FILES += hwp/dram_training/mss_draminit_trainadv/memory_mss_mcbist.xml
-HWP_ERROR_XML_FILES += hwp/mc_config/mss_eff_config/memory_mss_eff_config.xml
-HWP_ERROR_XML_FILES += hwp/mc_config/mss_eff_config/memory_mss_eff_config_cke_map.xml
-HWP_ERROR_XML_FILES += hwp/mc_config/mss_eff_config/memory_mss_eff_config_rank_group.xml
-HWP_ERROR_XML_FILES += hwp/mc_config/mss_eff_config/memory_mss_eff_config_termination.xml
HWP_ERROR_XML_FILES += hwp/build_winkle_images/p8_block_wakeup_intr/p8_block_wakeup_intr_errors.xml
HWP_ERROR_XML_FILES += hwp/build_winkle_images/proc_mailbox_utils/p8_mailbox_utils_errors.xml
HWP_ERROR_XML_FILES += hwp/proc_otprom_registers.xml
@@ -141,7 +126,6 @@ HWP_ERROR_XML_FILES += hwp/core_activate/proc_check_slw_done/proc_check_slw_done
HWP_ERROR_XML_FILES += hwp/dram_initialization/proc_throttle_sync/proc_throttle_sync_errors.xml
HWP_ERROR_XML_FILES += hwp/dram_initialization/mss_power_cleanup/memory_mss_power_cleanup.xml
HWP_ERROR_XML_FILES += hwp/runtime_errors/p8_pstate_registers.xml
-HWP_ERROR_XML_FILES += hwp/mc_config/mss_eff_mb_interleave/memory_mss_eff_mb_interleave.xml
HWP_ERROR_XML_FILES += hwp/nest_chiplets/proc_a_x_pci_dmi_pll_registers.xml
HWP_ERROR_XML_FILES += hwp/dram_training/mss_lrdimm_funcs/memory_mss_lrdimm_funcs.xml
HWP_ERROR_XML_FILES += hwp/bus_training/gcr_funcs_errors.xml
diff --git a/src/usr/hwpf/test/hwpisteperrortest.H b/src/usr/hwpf/test/hwpisteperrortest.H
index 89deba479..f6337e393 100644
--- a/src/usr/hwpf/test/hwpisteperrortest.H
+++ b/src/usr/hwpf/test/hwpisteperrortest.H
@@ -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. */
@@ -25,7 +27,7 @@
#include <cxxtest/TestSuite.H>
#include <errl/errlentry.H>
-#include <hwpisteperror.H>
+#include <isteps/hwpisteperror.H>
#include <istepdispatcher.H>
using namespace ISTEP;
diff --git a/src/usr/initservice/istepdispatcher/istepdispatcher.C b/src/usr/initservice/istepdispatcher/istepdispatcher.C
index 794afc295..79fadae42 100644
--- a/src/usr/initservice/istepdispatcher/istepdispatcher.C
+++ b/src/usr/initservice/istepdispatcher/istepdispatcher.C
@@ -63,7 +63,7 @@
#include <hwas/hwasPlat.H>
#include <targeting/attrPlatOverride.H>
#include <console/consoleif.H>
-#include <hwpisteperror.H>
+#include <isteps/hwpisteperror.H>
#include <pnor/pnorif.H>
#include <ipmi/ipmiwatchdog.H> //IPMI watchdog timer
#include <ipmi/ipmipowerstate.H> //IPMI System ACPI Power State
diff --git a/src/usr/hwpf/hwp/hwpisteperror.C b/src/usr/isteps/hwpisteperror.C
index c89f77d7a..afa9e9294 100644
--- a/src/usr/hwpf/hwp/hwpisteperror.C
+++ b/src/usr/isteps/hwpisteperror.C
@@ -1,7 +1,7 @@
/* IBM_PROLOG_BEGIN_TAG */
/* This is an automatically generated prolog. */
/* */
-/* $Source: src/usr/hwpf/hwp/hwpisteperror.C $ */
+/* $Source: src/usr/isteps/hwpisteperror.C $ */
/* */
/* OpenPOWER HostBoot Project */
/* */
@@ -22,8 +22,8 @@
/* permissions and limitations under the License. */
/* */
/* IBM_PROLOG_END_TAG */
-#include <hwpisteperror.H>
-#include <hwpistepud.H>
+#include <isteps/hwpisteperror.H>
+#include <isteps/hwpistepud.H>
#include <istepdispatcher.H>
using namespace ISTEP;
@@ -31,7 +31,7 @@ using namespace ISTEP_ERROR;
// setup the internal elog pointer and capture error data for the first or
// add error data to top level elog
-void IStepError::addErrorDetails( const errlHndl_t i_err )
+void ISTEP_ERROR::IStepError::addErrorDetails( const errlHndl_t i_err )
{
mutex_lock( &iv_mutex );
diff --git a/src/usr/hwpf/hwp/hwpistepud.C b/src/usr/isteps/hwpistepud.C
index 9ba57d53c..8bed5a84f 100644
--- a/src/usr/hwpf/hwp/hwpistepud.C
+++ b/src/usr/isteps/hwpistepud.C
@@ -1,11 +1,13 @@
/* IBM_PROLOG_BEGIN_TAG */
/* This is an automatically generated prolog. */
/* */
-/* $Source: src/usr/hwpf/hwp/hwpistepud.C $ */
+/* $Source: src/usr/isteps/hwpistepud.C $ */
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* COPYRIGHT International Business Machines Corp. 2012,2014 */
+/* 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. */
@@ -26,7 +28,7 @@
* @brief Implementation of HwpSvcUserDetailsIstep
*/
#include <hbotcompid.H>
-#include <hwpistepud.H>
+#include <isteps/hwpistepud.H>
#include <hwpf/hwpf_reasoncodes.H>
using namespace ISTEP_ERROR;
diff --git a/src/usr/hwas/hostbootIstep.C b/src/usr/isteps/istep06/istep06.C
index 491d35db7..8ce7a491d 100644
--- a/src/usr/hwas/hostbootIstep.C
+++ b/src/usr/isteps/istep06/istep06.C
@@ -1,11 +1,11 @@
/* IBM_PROLOG_BEGIN_TAG */
/* This is an automatically generated prolog. */
/* */
-/* $Source: src/usr/hwas/hostbootIstep.C $ */
+/* $Source: src/usr/isteps/istep06/istep06.C $ */
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2012,2015 */
+/* Contributors Listed Below - COPYRIGHT 2015 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -22,25 +22,18 @@
/* permissions and limitations under the License. */
/* */
/* IBM_PROLOG_END_TAG */
-/**
- * @file hostbootIstep.C
- *
- * @brief hostboot istep-called functions
- */
-
#include <hwas/common/hwas.H>
#include <hwas/common/hwasCommon.H>
#include <hwas/common/hwas_reasoncodes.H>
#include <hwas/hwasPlat.H>
-#include <hwas/hostbootIstep.H>
#include <hwas/common/deconfigGard.H>
#include <fsi/fsiif.H>
#include <initservice/taskargs.H>
#include <initservice/isteps_trace.H>
#include <initservice/initserviceif.H>
-#include <hwpisteperror.H>
+#include <isteps/hwpisteperror.H>
#include <targeting/attrsync.H>
#include <targeting/namedtarget.H>
@@ -53,10 +46,6 @@
#include <sbe/sbeif.H>
#include <sbe_update.H>
-// fapi support
-#include <fapi.H>
-#include <fapiPlatHwpInvoker.H>
-
// targeting support.
#include <targeting/common/utilFilter.H>
#include <targeting/common/commontargeting.H>
@@ -64,8 +53,6 @@
#include <errl/errludtarget.H>
-#include <proc_enable_reconfig.H>
-
#include <console/consoleif.H>
#include <ipmi/ipmisensor.H>
@@ -85,18 +72,15 @@
#include <secureboot/trustedbootif.H>
#endif
-namespace HWAS
-{
-
+using namespace HWAS;
using namespace TARGETING;
-using namespace fapi;
using namespace ISTEP;
using namespace ISTEP_ERROR;
-// functions called from the istep dispatcher -- hostboot only
-
+namespace ISTEP_06
+{
//******************************************************************************
-// host_init_fsi function
+// host_init_fsi function -- istep 06.4
//******************************************************************************
void* host_init_fsi( void *io_pArgs )
{
@@ -130,7 +114,7 @@ void* host_init_fsi( void *io_pArgs )
}
//******************************************************************************
-// host_set_ipl_parms function
+// host_set_ipl_parms function -- istep 6.5
//******************************************************************************
void* host_set_ipl_parms( void *io_pArgs )
{
@@ -143,7 +127,7 @@ void* host_set_ipl_parms( void *io_pArgs )
}
//******************************************************************************
-// host_discover_targets function
+// host_discover_targets function -- istep 6.6
//******************************************************************************
void* host_discover_targets( void *io_pArgs )
{
@@ -226,7 +210,17 @@ void* host_discover_targets( void *io_pArgs )
}
//******************************************************************************
-// host_gard function
+// host_update_master_tpm -- istep 6.7
+//******************************************************************************
+void* host_update_master_tpm( void *io_pArgs )
+{
+ errlHndl_t l_err = NULL;
+
+ return l_err;
+}
+
+//******************************************************************************
+// host_gard function --istep 6.8
//******************************************************************************
void* host_gard( void *io_pArgs )
{
@@ -315,8 +309,8 @@ void* host_gard( void *io_pArgs )
/*@ errorlog tag
* @errortype ERRL_SEV_CRITICAL_SYS_TERM
- * @moduleid MOD_HOST_GARD
- * @reasoncode RC_MASTER_CORE_NULL
+ * @moduleid HWAS::MOD_HOST_GARD
+ * @reasoncode HWAS::RC_MASTER_CORE_NULL
* @userdata1 0
* @userdata2 0
* @devdesc HWAS host_gard: no masterCore found
@@ -364,58 +358,32 @@ void* host_gard( void *io_pArgs )
}
//******************************************************************************
-// call_p9_revert_sbe_mcs_setup function
+// host_revert_sbe_mcs_setup --istep 6.9
//******************************************************************************
-void* call_p9_revert_sbe_mcs_setup(void *io_pArgs)
+void* host_revert_sbe_mcs_setup ( void *io_pArgs )
{
- errlHndl_t l_errl = NULL;
- IStepError l_stepError;
+ errlHndl_t l_err = NULL;
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "call_p9_revert_sbe_mcs_setup entry" );
-
- TARGETING::Target* l_pProcTarget = NULL;
- TARGETING::targetService().masterProcChipTargetHandle(l_pProcTarget);
-
- fapi::Target l_fapiProcTarget(fapi::TARGET_TYPE_PROC_CHIP, l_pProcTarget);
-
- // Invoke the HWP
- // FAPI_INVOKE_HWP(l_errl, p9_revert_sbe_mcs_setup, l_fapiProcTarget);
+ "call p9_revert_sbe_mcs_setup entry" );
- if (l_errl)
- {
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "ERROR : failed executing p9_revert_sbe_mcs_setup "
- "returning error");
-
- // capture the target data in the elog
- ERRORLOG::ErrlUserDetailsTarget(l_pProcTarget).addToLog( l_errl );
+ //@TODO: RTC:133836 call p9_revert_sbe_mcs_setup HWP
- // Create IStep error log and cross reference error that occurred
- l_stepError.addErrorDetails( l_errl );
-
- errlCommit( l_errl, HWPF_COMP_ID );
- }
- else
- {
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "SUCCESS : p9_revert_sbe_mcs_setup completed ok");
- }
-
- TRACDCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "call_p9_revert_sbe_mcs_setup exit");
-
- // end task, returning any errorlogs to IStepDisp
- return l_stepError.getErrorHandle();
+ return l_err;
}
-
//******************************************************************************
-// host_cancontinue_clear function
+// host_start_occ_xstop_handler
//******************************************************************************
-void* host_cancontinue_clear( void *io_pArgs )
+void* host_start_occ_xstop_handler ( void *io_pArgs )
{
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ errlHndl_t l_err = NULL;
+
+#if 0
+/// This is a bunch of stuff that was put into P8 and git didn't handle
+/// merging correctly. Some of this may be a useful starting point for
+/// enabling OCC checkstop handling. -- Patrick
+
"host_cancontinue_clear entry" );
errlHndl_t errl = NULL;
@@ -431,83 +399,6 @@ void* host_cancontinue_clear( void *io_pArgs )
}
#endif
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "host_cancontinue_clear exit" );
-
- return errl;
-}
-
-//******************************************************************************
-// host_prd_hwreconfig function
-//******************************************************************************
-void* host_prd_hwreconfig( void *io_pArgs )
-{
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "host_prd_hwreconfig entry" );
-
- errlHndl_t errl = NULL;
- IStepError l_stepError;
- do
- {
- // Flip the scom path back to FSI in case we enabled IBSCOM previously
- IBSCOM::enableInbandScoms(IBSCOM_DISABLE);
-
- // Call PRDF to remove non-function chips from its system model
- errl = PRDF::refresh();
-
- if (errl)
- {
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "host_prd_hwreconfig ERROR 0x%.8X returned from"
- " call to PRDF::refresh", errl->reasonCode());
-
- // Create IStep error log and cross reference error that occurred
- l_stepError.addErrorDetails(errl);
-
- // Commit Error
- errlCommit(errl, HWPF_COMP_ID);
-
- break;
- }
-
- // Lists for present MCS
- TARGETING::TargetHandleList l_presMcsList;
-
- // find all present MCS chiplets of all procs
- getChipletResources(l_presMcsList, TYPE_MCS, UTIL_FILTER_PRESENT);
-
- for (TargetHandleList::const_iterator
- l_mcs_iter = l_presMcsList.begin();
- l_mcs_iter != l_presMcsList.end();
- ++l_mcs_iter)
- {
- // make a local copy of the MCS target
- const TARGETING::Target * l_pMcs = *l_mcs_iter;
- // Retrieve HUID of current MCS
- TARGETING::ATTR_HUID_type l_currMcsHuid =
- TARGETING::get_huid(l_pMcs);
-
- // Dump current run on target
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "Running proc_enable_reconfig HWP on "
- "MCS target HUID %.8X", l_currMcsHuid);
-
- // Create FAPI Targets.
- fapi::Target l_fapiMcsTarget(TARGET_TYPE_MCS_CHIPLET,
- (const_cast<TARGETING::Target*>(l_pMcs)));
-
- // Call the HWP with each fapi::Target
- FAPI_INVOKE_HWP(errl, proc_enable_reconfig, l_fapiMcsTarget);
-
- if (errl)
- {
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "ERROR 0x%.8X: proc_enable_reconfig HWP returns error",
- errl->reasonCode());
-
- // Capture the target data in the elog
- ERRORLOG::ErrlUserDetailsTarget(l_pMcs).addToLog( errl );
-
//Create IStep error log and cross reference error that occurred
l_stepError.addErrorDetails(errl);
@@ -551,16 +442,8 @@ void* host_prd_hwreconfig( void *io_pArgs )
"host_prd_hwreconfig exit" );
// end task, returning any errorlogs to IStepDisp
return l_stepError.getErrorHandle();
+#endif
+ return l_err;
}
-//******************************************************************************
-// host_stub function
-//******************************************************************************
-void* host_stub( void *io_pArgs )
-{
- errlHndl_t errl = NULL;
- // no function required
- return errl;
-}
-
-} // namespace HWAS
+};
diff --git a/src/usr/isteps/istep06/makefile b/src/usr/isteps/istep06/makefile
new file mode 100644
index 000000000..914c14c46
--- /dev/null
+++ b/src/usr/isteps/istep06/makefile
@@ -0,0 +1,32 @@
+# IBM_PROLOG_BEGIN_TAG
+# This is an automatically generated prolog.
+#
+# $Source: src/usr/isteps/istep06/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 = istep06
+
+OBJS += istep06.o
+
+EXTRAINCDIR += ${ROOTPATH}/src/usr/sbe
+
+include ${ROOTPATH}/config.mk
diff --git a/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_dimm_count.H b/src/usr/isteps/istep07/call_mss_attr_update.C
index 21161cdc8..501e1a633 100644
--- a/src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_dimm_count.H
+++ b/src/usr/isteps/istep07/call_mss_attr_update.C
@@ -1,7 +1,7 @@
/* IBM_PROLOG_BEGIN_TAG */
/* This is an automatically generated prolog. */
/* */
-/* $Source: src/usr/hwpf/hwp/mc_config/mss_volt/mss_volt_dimm_count.H $ */
+/* $Source: src/usr/isteps/istep07/call_mss_attr_update.C $ */
/* */
/* OpenPOWER HostBoot Project */
/* */
@@ -22,49 +22,62 @@
/* permissions and limitations under the License. */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: mss_volt_dimm_count.H,v 1.1 2015/02/17 19:33:58 pardeik Exp $
-//------------------------------------------------------------------------------
-// *! (C) Copyright International Business Machines Corp. 2011
-// *! All Rights Reserved -- Property of IBM
-// *! *** ***
-//------------------------------------------------------------------------------
-// *! TITLE : mss_volt_dimm_count.H
-// *! DESCRIPTION : see additional comments below
-// *! OWNER NAME : Michael Pardeik Email: pardeik@us.ibm.com
-// *! BACKUP NAME : Jacob Sloat Email: jdsloat@us.ibm.com
-// *! ADDITIONAL COMMENTS :
-//
-// Header file for mss_volt_dimm_count.
-//
-//------------------------------------------------------------------------------
-// Don't forget to create CVS comments when you check in your changes!
-//------------------------------------------------------------------------------
-// CHANGE HISTORY:
-//------------------------------------------------------------------------------
-// Version:| Author: | Date: | Comment:
-//---------|----------|----------|-----------------------------------------------
-// 1.1 | pardeik | 02/17/15 | initial drop
+/**
+ * @file call_mss_attr_update.C
+ * Contains the wrapper for istep 7.5
+ */
+
+/******************************************************************************/
+// Includes
+/******************************************************************************/
+#include <stdint.h>
-#ifndef MSS_VOLT_DIMM_COUNT_H_
-#define MSS_VOLT_DIMM_COUNT_H_
+#include <trace/interface.H>
+#include <initservice/taskargs.H>
+#include <errl/errlentry.H>
-#include <fapi.H>
+#include <isteps/hwpisteperror.H>
-typedef fapi::ReturnCode (*mss_volt_dimm_count_FP_t)(std::vector<fapi::Target> &);
+#include <errl/errludtarget.H>
+#include <initservice/isteps_trace.H>
-extern "C"
+// targeting support
+#include <targeting/common/commontargeting.H>
+#include <targeting/common/utilFilter.H>
+
+
+#include <config.h>
+
+namespace ISTEP_07
{
-/**
- * @brief mss_volt_dimm_count procedure. Determines number of dimms present behind a voltage domain
- *
- * @param[in] std::vector<fapi::Target> l_targets Reference to vector of present Centaur Targets in a particular power domain
- *
- * @return ReturnCode
- */
+using namespace ISTEP;
+using namespace ISTEP_ERROR;
+using namespace ERRORLOG;
+using namespace TARGETING;
+
+//
+// Wrapper function to call mss_attr_update
+//
+void* call_mss_attr_update( void *io_pArgs )
+{
+
+ IStepError l_StepError;
+
+ TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_attr_update entry");
+ errlHndl_t l_err = NULL;
+
+ //@TODO RTC:133830 add the procedure back in when ready
+ //FAPI_INVOKE_HWP(l_err, p9_mss_attr_update);
+ if(l_err)
+ {
+ l_StepError.addErrorDetails(l_err);
+ errlCommit( l_err, HWPF_COMP_ID );
+ }
- fapi::ReturnCode mss_volt_dimm_count(std::vector<fapi::Target> & i_targets_memb);
+ TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_attr_update exit" );
-} // extern "C"
+ return l_StepError.getErrorHandle();
+}
-#endif // MSS_VOLT_DIMM_COUNT_H_
+}; // end namespace
diff --git a/src/usr/isteps/istep07/call_mss_eff_config.C b/src/usr/isteps/istep07/call_mss_eff_config.C
new file mode 100644
index 000000000..07d49ad1f
--- /dev/null
+++ b/src/usr/isteps/istep07/call_mss_eff_config.C
@@ -0,0 +1,363 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/isteps/istep07/call_mss_eff_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 */
+/**
+ * @file call_mss_eff_config.C
+ * Contains all the wrappers for istep07
+ */
+
+/******************************************************************************/
+// Includes
+/******************************************************************************/
+#include <stdint.h>
+
+#include <trace/interface.H>
+#include <initservice/taskargs.H>
+#include <errl/errlentry.H>
+
+#include <isteps/hwpisteperror.H>
+#include <errl/errludtarget.H>
+
+#include <initservice/isteps_trace.H>
+
+// targeting support
+#include <targeting/common/commontargeting.H>
+#include <targeting/common/utilFilter.H>
+
+#include <config.h>
+
+namespace ISTEP_07
+{
+
+using namespace ISTEP;
+using namespace ISTEP_ERROR;
+using namespace ERRORLOG;
+using namespace TARGETING;
+
+errlHndl_t call_mss_eff_grouping()
+{
+ errlHndl_t l_err = NULL;
+/* @TODO RTC:133830 Add the wrapper when ready
+ TARGETING::TargetHandleList l_procsList;
+ getAllChips(l_procsList, TYPE_PROC);
+
+ for (TargetHandleList::const_iterator
+ l_proc_iter = l_procsList.begin();
+ l_proc_iter != l_procsList.end();
+ ++l_proc_iter)
+ {
+ // make a local copy of the target for ease of use
+ const TARGETING::Target* l_cpu_target = *l_proc_iter;
+
+ // print call to hwp and write HUID of the target(s)
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "===== mss_eff_grouping HWP cpu "
+ "target HUID %.8X",
+ TARGETING::get_huid(l_cpu_target));
+
+ // cast OUR type of target to a FAPI type of target.
+ const fapi::Target l_fapi_cpu_target(fapi::TARGET_TYPE_PROC_CHIP,
+ (const_cast<TARGETING::Target*>(l_cpu_target)) );
+
+ TARGETING::TargetHandleList l_membufsList;
+ getChildAffinityTargets(l_membufsList, l_cpu_target,
+ CLASS_CHIP, TYPE_MEMBUF);
+ std::vector<fapi::Target> 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<TARGETING::Target*>(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);
+ }
+
+ //FAPI_INVOKE_HWP(l_err, p9_mss_eff_grouping,
+ //l_fapi_cpu_target, l_associated_centaurs);
+ //Remove when above HWP is working
+ FAPI_INVOKE_HWP(l_err,mss_eff_grouping,
+ l_fapi_cpu_target, l_associated_centaurs);
+
+ // process return code.
+ if ( l_err )
+ {
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "ERROR 0x%.8X: mss_eff_grouping HWP",
+ l_err->reasonCode());
+
+ // capture the target data in the elog
+ ErrlUserDetailsTarget(l_cpu_target).addToLog(l_err);
+
+ break; // break out mba loop
+ }
+ else
+ {
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "SUCCESS : mss_eff_grouping HWP");
+ }
+ } // endfor
+*/
+ return l_err;
+}
+
+errlHndl_t call_opt_memmap( bool i_initBase )
+{
+ errlHndl_t l_err = NULL;
+/* @TODO RTC:133830 Add the wrapper when ready
+ TARGETING::TargetHandleList l_procs;
+ getAllChips(l_procs, TYPE_PROC);
+
+ std::vector<fapi::Target> l_fapi_procs;
+
+ for ( TARGETING::TargetHandleList::const_iterator
+ l_iter = l_procs.begin();
+ l_iter != l_procs.end();
+ ++l_iter )
+ {
+ // make a local copy of the target for ease of use
+ const TARGETING::Target* l_target = *l_iter;
+
+ // cast OUR type of target to a FAPI type of target.
+ const fapi::Target l_fapi_target(fapi::TARGET_TYPE_PROC_CHIP,
+ (const_cast<TARGETING::Target*>(l_target)) );
+
+ l_fapi_procs.push_back(l_fapi_target);
+ }
+
+ //FAPI_INVOKE_HWP(l_err, p9_opt_memmap, l_fapi_procs, i_initBase);
+ //Remove when above HWP is working
+ FAPI_INVOKE_HWP(l_err,opt_memmap, l_fapi_procs,i_initBase);
+
+ if ( l_err )
+ {
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "ERROR 0x%.8X: opt_memmap HWP", l_err->reasonCode());
+ }
+ else
+ {
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "SUCCESS : opt_memmap HWP");
+ }
+*/
+ return l_err;
+}
+
+errlHndl_t call_mss_eff_mb_interleave()
+{
+ errlHndl_t l_err = NULL;
+/* @TODO RTC:133830 Add the wrapper when ready
+ 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)
+ {
+ const TARGETING::Target* l_membuf_target = *l_membuf_iter;
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "===== Running mss_eff_mb_interleave HWP on HUID %.8X",
+ TARGETING::get_huid(l_membuf_target));
+ fapi::Target l_membuf_fapi_target(fapi::TARGET_TYPE_MEMBUF_CHIP,
+ (const_cast<TARGETING::Target*>(l_membuf_target)) );
+ FAPI_INVOKE_HWP(l_err, mss_eff_mb_interleave, l_membuf_fapi_target);
+ if (l_err)
+ {
+ TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
+ "ERROR 0x%.8X: mss_eff_mb_interleave HWP returns error",
+ l_err->reasonCode());
+ }
+ else
+ {
+ TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
+ "Successfully ran mss_eff_mb_interleave HWP on HUID %.8X",
+ TARGETING::get_huid(l_membuf_target));
+ }
+ }
+*/
+ return l_err;
+}
+
+
+//
+// Wrapper function to call mss_eff_config
+//
+void* call_mss_eff_config( void *io_pArgs )
+{
+ IStepError l_StepError;
+
+ TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_eff_config entry" );
+
+ //@TODO RTC:133830 Add the wrapper back in when ready
+/*
+ errlHndl_t l_err = NULL;
+ TARGETING::Target* l_sys = NULL;
+ targetService().getTopLevelTarget(l_sys);
+ assert( l_sys != NULL );
+
+ // The attribute ATTR_MEM_MIRROR_PLACEMENT_POLICY should already be
+ // correctly set by default for all platforms except for sapphire.
+ // Don't allow mirroring on sapphire yet @todo-RTC:108314
+ //
+ //ATTR_PAYLOAD_IN_MIRROR_MEM_type l_mirrored =
+ // l_sys->getAttr<ATTR_PAYLOAD_IN_MIRROR_MEM>();
+ //
+ //if(l_mirrored && is_sapphire_load())
+ //{
+ // TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "Mirroring is enabled");
+
+ // uint8_t l_mmPolicy =
+ // fapi::ENUM_ATTR_MEM_MIRROR_PLACEMENT_POLICY_FLIPPED;
+ // l_sys->
+ // setAttr<TARGETING::ATTR_MEM_MIRROR_PLACEMENT_POLICY>(l_mmPolicy);
+ //}
+
+ // Get all functional MBA chiplets
+ TARGETING::TargetHandleList l_mbaTargetList;
+ getAllChiplets(l_mbaTargetList, TYPE_MBA);
+
+ // Iterate over all MBAs, calling mss_eff_config and mss_eff_config_thermal
+ for (TargetHandleList::const_iterator l_mba_iter = l_mbaTargetList.begin();
+ l_mba_iter != l_mbaTargetList.end(); ++l_mba_iter)
+ {
+ // Get the TARGETING::Target pointer and its HUID
+ const TARGETING::Target* l_mba_target = *l_mba_iter;
+ uint32_t l_huid = TARGETING::get_huid(l_mba_target);
+
+ // Create a FAPI target representing the MBA
+ const fapi::Target l_fapi_mba_target(fapi::TARGET_TYPE_MBA_CHIPLET,
+ (const_cast<TARGETING::Target*>(l_mba_target)));
+
+ // Call the mss_eff_config_vpd_decode HWP
+ //FAPI_INVOKE_HWP(l_err,p9_mss_eff_config_vpd_decode,
+ //l_fapi_mba_target);
+
+ // Call the mss_eff_config HWP
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "===== mss_eff_config HWP. MBA HUID %.8X", l_huid);
+ //FAPI_INVOKE_HWP(l_err, p9_mss_eff_config, l_fapi_mba_target);
+ //Remove when above HWP is working:
+ FAPI_INVOKE_HWP(l_err, mss_eff_config, l_fapi_mba_target);
+
+ if (l_err)
+ {
+ TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
+ "ERROR 0x%.8X: mss_eff_config HWP ", l_err->reasonCode());
+
+ // Ensure istep error created and has same plid as this error
+ ErrlUserDetailsTarget(l_mba_target).addToLog(l_err);
+ l_StepError.addErrorDetails(l_err);
+ errlCommit(l_err, HWPF_COMP_ID);
+ }
+ else
+ {
+ TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
+ "SUCCESS : mss_eff_config HWP");
+
+ // Call the mss_eff_config_thermal HWP
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "===== mss_eff_config_thermal HWP. MBA HUID %.8X", l_huid);
+ //FAPI_INVOKE_HWP(l_err, p9_mss_eff_config_thermal,
+ //l_fapi_mba_target);
+
+ if (l_err)
+ {
+ TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
+ "ERROR 0x%.8X: mss_eff_config_thermal HWP ", l_err->reasonCode());
+
+ // Ensure istep error created and has same plid as this error
+ ErrlUserDetailsTarget(l_mba_target).addToLog(l_err);
+ l_StepError.addErrorDetails(l_err);
+ errlCommit(l_err, HWPF_COMP_ID);
+ }
+ else
+ {
+ TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
+ "SUCCESS : mss_eff_config_thermal HWP");
+ }
+ }
+ }
+
+ if (l_StepError.isNull())
+ {
+ // Flush out BASE attributes to starting values
+ l_err = call_opt_memmap(true);
+
+ if (!l_err)
+ {
+ // Stack the memory on each chip
+ l_err = call_mss_eff_grouping();
+
+ if (!l_err)
+ {
+ // Move the BASES around to the real final values
+ l_err = call_opt_memmap(false);
+
+ if (!l_err)
+ {
+ // Stack the memory again based on system-wide positions
+ l_err = call_mss_eff_grouping();
+
+ //if(!l_err) //Cumulus only
+ //{
+ // l_err = call_mss_eff_mb_interleave();
+ //}
+
+ }
+ }
+ }
+
+ if (l_err)
+ {
+ // Ensure istep error created and has same plid as this error
+ l_StepError.addErrorDetails( l_err );
+ errlCommit( l_err, HWPF_COMP_ID );
+ }
+ }
+
+ // Calling mss_eff_mb_interleave
+ if (l_StepError.isNull())
+ {
+ l_err = call_mss_eff_mb_interleave();
+ if(l_err)
+ {
+ l_StepError.addErrorDetails(l_err);
+ errlCommit( l_err, HWPF_COMP_ID );
+ }
+ }
+
+ TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_eff_config exit" );
+*/
+ return l_StepError.getErrorHandle();
+}
+}; // end namespace
diff --git a/src/usr/isteps/istep07/call_mss_freq.C b/src/usr/isteps/istep07/call_mss_freq.C
new file mode 100644
index 000000000..2ba73a9f7
--- /dev/null
+++ b/src/usr/isteps/istep07/call_mss_freq.C
@@ -0,0 +1,125 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/isteps/istep07/call_mss_freq.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 */
+/**
+ * @file call_mss_freq.C
+ * Contain the wrapper for istep 7.3
+ */
+
+/******************************************************************************/
+// Includes
+/******************************************************************************/
+#include <stdint.h>
+
+#include <trace/interface.H>
+#include <initservice/taskargs.H>
+#include <errl/errlentry.H>
+
+#include <isteps/hwpisteperror.H>
+#include <errl/errludtarget.H>
+
+#include <initservice/isteps_trace.H>
+
+// targeting support
+#include <targeting/common/commontargeting.H>
+#include <targeting/common/utilFilter.H>
+
+#include <config.h>
+
+namespace ISTEP_07
+{
+
+using namespace ISTEP;
+using namespace ISTEP_ERROR;
+using namespace ERRORLOG;
+using namespace TARGETING;
+using namespace fapi;
+
+//
+// Wrapper function to call mss_freq
+//
+void* call_mss_freq( void *io_pArgs )
+{
+
+ IStepError l_StepError;
+
+ TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_freq entry" );
+/*
+ //@TODO RTC: 133830 Add the wrapper back in when ready
+ errlHndl_t l_err = NULL;
+ 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)
+ {
+ // make a local copy of the target for ease of use
+ const TARGETING::Target* l_membuf_target = *l_membuf_iter;
+
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "===== mss_freq HWP "
+ "target HUID %.8X",
+ TARGETING::get_huid(l_membuf_target));
+
+ // call the HWP with each target ( if parallel, spin off a task )
+ // $$const fapi::Target l_fapi_membuf_target(
+ fapi::Target l_fapi_membuf_target(fapi::TARGET_TYPE_MEMBUF_CHIP,
+ (const_cast<TARGETING::Target*>(l_membuf_target)) );
+
+ //@TODO RTC:133830 FAPI_INVOKE_HWP(l_err, p9_mss_freq, l_fapi_membuf_target);
+ //Remove when above HWP is working:
+ FAPI_INVOKE_HWP(l_err, mss_freq, l_fapi_membuf_target);
+
+ // process return code.
+ if ( l_err )
+ {
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "ERROR 0x%.8X: mss_freq HWP ",
+ l_err->reasonCode());
+
+ // capture the target data in the elog
+ ErrlUserDetailsTarget(l_membuf_target).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 );
+
+ }
+ else
+ {
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "SUCCESS : mss_freq HWP");
+ }
+ } // End memBuf loop
+*/
+ TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_freq exit" );
+
+ return l_StepError.getErrorHandle();
+}
+
+}; // end namespace
diff --git a/src/usr/isteps/istep07/call_mss_volt.C b/src/usr/isteps/istep07/call_mss_volt.C
new file mode 100644
index 000000000..c6ef47aa8
--- /dev/null
+++ b/src/usr/isteps/istep07/call_mss_volt.C
@@ -0,0 +1,265 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/isteps/istep07/call_mss_volt.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 */
+/**
+ * @file call_mss_volt.C
+ * Contains the wrapper for istep 7.2
+ */
+
+/******************************************************************************/
+// Includes
+/******************************************************************************/
+#include <stdint.h>
+
+#include <trace/interface.H>
+#include <initservice/taskargs.H>
+#include <initservice/initserviceif.H>
+#include <errl/errlentry.H>
+
+#include <isteps/hwpisteperror.H>
+#include <errl/errludtarget.H>
+
+#include <initservice/isteps_trace.H>
+#include <sbe/sbeif.H>
+// targeting support
+#include <targeting/common/commontargeting.H>
+#include <targeting/common/utilFilter.H>
+#include <attributetraits.H>
+
+#include <config.h>
+#include <util/align.H>
+#include <util/algorithm.H>
+
+namespace ISTEP_07
+{
+
+using namespace ISTEP;
+using namespace ISTEP_ERROR;
+using namespace ERRORLOG;
+using namespace TARGETING;
+
+// helper function to call multiple mss_volt_hwps
+void call_mss_volt_hwp (std::vector<TARGETING::ATTR_VMEM_ID_type>& i_VmemList,
+ TARGETING::TargetHandleList& i_membufTargetList,
+ IStepError& io_StepError,
+ fapi::ReturnCode(*mss_volt_hwp)(std::vector<fapi::Target>&))
+{
+ /* @TODO: RTC:133830 Add wrapper back when ready
+ errlHndl_t l_err;
+ //for each unique VmemId filter it out of the list of membuf targets
+ //to create a subsetlist of membufs with just that vmemid
+ std::vector<TARGETING::ATTR_VMEM_ID_type>::iterator l_vmem_iter;
+ for (l_vmem_iter = i_VmemList.begin();
+ l_vmem_iter != i_VmemList.end();
+ ++l_vmem_iter)
+ {
+ // declare a vector of fapi targets to pass to mss_volt procedures
+ std::vector<fapi::Target> l_membufFapiTargets;
+
+ for (TargetHandleList::const_iterator
+ l_membuf_iter = i_membufTargetList.begin();
+ l_membuf_iter != i_membufTargetList.end();
+ ++l_membuf_iter)
+ {
+ // make a local copy of the target for ease of use
+ const TARGETING::Target* l_membuf_target = *l_membuf_iter;
+ if (l_membuf_target->getAttr<ATTR_VMEM_ID>()==*l_vmem_iter)
+ {
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "===== add to fapi::Target vector vmem_id=0x%08X "
+ "target HUID %.8X",
+ l_membuf_target->getAttr<ATTR_VMEM_ID>(),
+ TARGETING::get_huid(l_membuf_target));
+
+ fapi::Target l_membuf_fapi_target(fapi::TARGET_TYPE_MEMBUF_CHIP,
+ (const_cast<TARGETING::Target*>(l_membuf_target)) );
+
+ l_membufFapiTargets.push_back( l_membuf_fapi_target );
+ }
+ }
+
+ //now have the a list of fapi membufs with just the one VmemId
+ //call the HWP on the list of fapi targets
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "===== mss_volt HWP( vector )" );
+
+ FAPI_INVOKE_HWP(l_err, mss_volt_hwp, l_membufFapiTargets);
+
+ // process return code.
+ if ( l_err )
+ {
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "ERROR 0x%.8X: mss_volt HWP( ) ",
+ l_err->reasonCode());
+
+ // Create IStep error log and cross reference to error that occurred
+ io_StepError.addErrorDetails( l_err );
+
+ // Commit Error
+ errlCommit( l_err, HWPF_COMP_ID );
+
+ }
+ else
+ {
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "SUCCESS : mss_volt_dimm_count HWP( )" );
+ }
+ }
+ */
+}
+
+//
+// Wrapper function to call mss_volt
+//
+void* call_mss_volt( void *io_pArgs )
+{
+
+ IStepError l_StepError;
+
+ TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_volt entry" );
+
+ //@TODO RTC:133830 Add the wrapper back in when ready
+/* // Check that VPP, DDR3 VDDR, and DDR4 VDDR _EFF_CONFIG attributes are set
+ errlHndl_t l_err = NULL;
+ bool unused = false;
+ set_eff_config_attrs_helper(DEFAULT, unused);
+
+ TARGETING::TargetHandleList l_membufTargetList;
+ getAllChips(l_membufTargetList, TYPE_MEMBUF);
+
+ //get a list of unique VmemIds
+ std::vector<TARGETING::ATTR_VMEM_ID_type> l_VmemList;
+
+ //fapi Return Code
+ fapi::ReturnCode l_fapirc;
+
+ for (TargetHandleList::const_iterator
+ l_membuf_iter = l_membufTargetList.begin();
+ l_membuf_iter != l_membufTargetList.end();
+ ++l_membuf_iter)
+ {
+ TARGETING::ATTR_VMEM_ID_type l_VmemID =
+ (*l_membuf_iter)->getAttr<ATTR_VMEM_ID>();
+ l_VmemList.push_back(l_VmemID);
+
+ }
+
+#ifdef CONFIG_ALLOW_NON_COMPLIANT_DIMM
+ // Set ATTR_MSS_VOLT_COMPLIANT_DIMMS to ALL
+ // Value of ALL value in attribute enum
+ uint8_t l_allowNonCompliantDimms =
+ ENUM_ATTR_MSS_VOLT_COMPLIANT_DIMMS_ALL_VOLTAGES;
+
+ TARGETING::Target* l_sys = NULL;
+ targetService().getTopLevelTarget(l_sys);
+ l_sys->setAttr<TARGETING::ATTR_MSS_VOLT_COMPLIANT_DIMMS>
+ (l_allowNonCompliantDimms);
+
+#endif
+
+
+
+ std::sort(l_VmemList.begin(), l_VmemList.end());
+
+ std::vector<TARGETING::ATTR_VMEM_ID_type>::iterator objItr;
+ objItr=std::unique(l_VmemList.begin(), l_VmemList.end());
+ l_VmemList.erase(objItr,l_VmemList.end());
+
+ //call mss_volt hwps
+ call_mss_volt_hwp (l_VmemList, l_membufTargetList,l_StepError, mss_volt);
+ call_mss_volt_hwp (l_VmemList, l_membufTargetList,l_StepError,
+ mss_volt_dimm_count);
+
+ l_err = setMemoryVoltageDomainOffsetVoltage<
+ TARGETING::ATTR_MSS_CENT_VDD_OFFSET_DISABLE,
+ TARGETING::ATTR_MEM_VDD_OFFSET_MILLIVOLTS,
+ TARGETING::ATTR_VDD_ID>();
+ if(l_err)
+ {
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "ERROR 0x%08X: setMemoryVoltageDomainOffsetVoltage for VDD domain",
+ l_err->reasonCode());
+ l_StepError.addErrorDetails(l_err);
+ errlCommit(l_err,HWPF_COMP_ID);
+ }
+
+ l_err = setMemoryVoltageDomainOffsetVoltage<
+ TARGETING::ATTR_MSS_CENT_AVDD_OFFSET_DISABLE,
+ TARGETING::ATTR_MEM_AVDD_OFFSET_MILLIVOLTS,
+ TARGETING::ATTR_AVDD_ID>();
+ if(l_err)
+ {
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "ERROR 0x%08X: setMemoryVoltageDomainOffsetVoltage for AVDD domain",
+ l_err->reasonCode());
+ l_StepError.addErrorDetails(l_err);
+ errlCommit(l_err,HWPF_COMP_ID);
+ }
+
+ l_err = setMemoryVoltageDomainOffsetVoltage<
+ TARGETING::ATTR_MSS_CENT_VCS_OFFSET_DISABLE,
+ TARGETING::ATTR_MEM_VCS_OFFSET_MILLIVOLTS,
+ TARGETING::ATTR_VCS_ID>();
+ if(l_err)
+ {
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "ERROR 0x%08X: setMemoryVoltageDomainOffsetVoltage for VCS domain",
+ l_err->reasonCode());
+ l_StepError.addErrorDetails(l_err);
+ errlCommit(l_err,HWPF_COMP_ID);
+ }
+
+ l_err = setMemoryVoltageDomainOffsetVoltage<
+ TARGETING::ATTR_MSS_VOLT_VPP_OFFSET_DISABLE,
+ TARGETING::ATTR_MEM_VPP_OFFSET_MILLIVOLTS,
+ TARGETING::ATTR_VPP_ID>();
+ if(l_err)
+ {
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "ERROR 0x%08X: setMemoryVoltageDomainOffsetVoltage for VPP domain",
+ l_err->reasonCode());
+ l_StepError.addErrorDetails(l_err);
+ errlCommit(l_err,HWPF_COMP_ID);
+ }
+
+ l_err = setMemoryVoltageDomainOffsetVoltage<
+ TARGETING::ATTR_MSS_VOLT_VDDR_OFFSET_DISABLE,
+ TARGETING::ATTR_MEM_VDDR_OFFSET_MILLIVOLTS,
+ TARGETING::ATTR_VMEM_ID>();
+ if(l_err)
+ {
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "ERROR 0x%08X: setMemoryVoltageDomainOffsetVoltage for VDDR domain",
+ l_err->reasonCode());
+ l_StepError.addErrorDetails(l_err);
+ errlCommit(l_err,HWPF_COMP_ID);
+ }
+*/
+ TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_volt exit" );
+
+ return l_StepError.getErrorHandle();
+}
+
+
+};
diff --git a/src/usr/isteps/istep07/host_collect_dimm_spd.C b/src/usr/isteps/istep07/host_collect_dimm_spd.C
new file mode 100644
index 000000000..ae15e8a54
--- /dev/null
+++ b/src/usr/isteps/istep07/host_collect_dimm_spd.C
@@ -0,0 +1,155 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/isteps/istep07/host_collect_dimm_spd.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 */
+/**
+ * @file host_collect_dimm_spd.C
+ * Contains the wrapper for istep 7.1
+ */
+
+/******************************************************************************/
+// Includes
+/******************************************************************************/
+#include <stdint.h>
+
+#include <isteps/hwpisteperror.H>
+#include <trace/interface.H>
+#include <initservice/taskargs.H>
+#include <initservice/isteps_trace.H>
+
+#include <errl/errlentry.H>
+#include <errl/errludtarget.H>
+
+// targeting support
+#include <targeting/common/commontargeting.H>
+#include <targeting/common/utilFilter.H>
+#include <config.h>
+
+namespace ISTEP_07
+{
+
+using namespace ISTEP;
+using namespace ISTEP_ERROR;
+using namespace ERRORLOG;
+using namespace TARGETING;
+
+//
+// Wrapper function to call host_collect_dimm_spd
+//
+void* call_host_collect_dimm_spd( void *io_pArgs )
+{
+ errlHndl_t l_err = NULL;
+ IStepError l_stepError;
+ TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "call_host_collect_dimm_spd entry" );
+
+ // Get a list of all present Centaurs
+ TargetHandleList l_presCentaurs;
+ getChipResources(l_presCentaurs, TYPE_MEMBUF, UTIL_FILTER_PRESENT);
+ // Associated MBA targets
+ TARGETING::TargetHandleList l_mbaList;
+
+ // Define predicate for associated MBAs
+ PredicateCTM predMba(CLASS_UNIT, TYPE_MBA);
+ PredicatePostfixExpr presMba;
+ PredicateHwas predPres;
+ predPres.present(true);
+ presMba.push(&predMba).push(&predPres).And();
+
+ 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);
+
+ // Dump current run on target
+ TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
+ "Running mss_attr_cleanup HWP on "
+ "target HUID %.8X", l_currCentaurHuid);
+
+ // find all present MBAs associated with this Centaur
+ TARGETING::TargetHandleList l_presMbas;
+ targetService().getAssociated(l_presMbas,
+ l_pCentaur,
+ TargetService::CHILD,
+ TargetService::IMMEDIATE,
+ &presMba);
+
+ // 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;
+ }
+
+ // Create FAPI Targets.
+ /* @TODO: RTC:133830 use fapi2 targets
+ const fapi::Target l_fapiCentaurTarget(TARGET_TYPE_MEMBUF_CHIP,
+ (const_cast<TARGETING::Target*>(l_pCentaur)));
+ const fapi::Target l_fapiMba0Target(TARGET_TYPE_MBA_CHIPLET,
+ (const_cast<TARGETING::Target*>(l_presMbas[0])));
+ const fapi::Target l_fapiMba1Target(TARGET_TYPE_MBA_CHIPLET,
+ (const_cast<TARGETING::Target*>(l_presMbas[1])));
+ */
+ //@TODO RTC:133830 call the HWP with each fapi::Target
+ //FAPI_INVOKE_HWP(l_err, p9_mss_attr_cleanup, l_fapiCentaurTarget,
+ // l_fapiMba0Target, l_fapiMba1Target);
+ if (l_err)
+ {
+ TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
+ "ERROR 0x%.8X: mss_attr_cleanup HWP returns error",
+ l_err->reasonCode());
+ // capture the target data in the elog
+ 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_attr_cleanup HWP on "
+ "CENTAUR target HUID %.8X "
+ "and associated MBAs",
+ l_currCentaurHuid);
+ }
+ }
+
+
+ TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "call_host_collect_dimm_spd exit" );
+
+ // end task, returning any errorlogs to IStepDisp
+ return l_stepError.getErrorHandle();
+}
+};
diff --git a/src/usr/isteps/istep07/makefile b/src/usr/isteps/istep07/makefile
new file mode 100644
index 000000000..857381d3f
--- /dev/null
+++ b/src/usr/isteps/istep07/makefile
@@ -0,0 +1,34 @@
+# IBM_PROLOG_BEGIN_TAG
+# This is an automatically generated prolog.
+#
+# $Source: src/usr/isteps/istep07/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 = istep07
+
+OBJS += host_collect_dimm_spd.o
+OBJS += call_mss_volt.o
+OBJS += call_mss_freq.o
+OBJS += call_mss_eff_config.o
+OBJS += call_mss_attr_update.o
+
+include ${ROOTPATH}/config.mk
diff --git a/src/usr/isteps/istepHelperFuncs.C b/src/usr/isteps/istepHelperFuncs.C
new file mode 100644
index 000000000..e883420f5
--- /dev/null
+++ b/src/usr/isteps/istepHelperFuncs.C
@@ -0,0 +1,267 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/isteps/istepHelperFuncs.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 "istepHelperFuncs.H"
+#include <stdint.h>
+
+#include <trace/interface.H>
+#include <errl/errlentry.H>
+
+#include <isteps/hwpisteperror.H>
+#include <errl/errludtarget.H>
+
+#include <initservice/isteps_trace.H>
+
+// targeting support
+#include <targeting/common/commontargeting.H>
+#include <targeting/common/utilFilter.H>
+#include <attributetraits.H>
+#include <config.h>
+#include <util/align.H>
+#include <util/algorithm.H>
+
+//
+// Helper function to set _EFF_CONFIG attributes for HWPs
+//
+void set_eff_config_attrs_helper( const EFF_CONFIG_ATTRIBUTES_BASE i_base,
+ bool & o_post_dram_inits_found)
+{
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "set_eff_config_attrs_helper: setting _EFF_CONFIG attributes "
+ "enter: i_base=%d", i_base);
+/* @TODO: RTC:133830 Uncomment this once the attribute support is in place
+ o_post_dram_inits_found = false;
+
+ // Local Variables ('pdi_' means 'post dram init')
+ uint32_t pdi_ddr3_vddr_slope=0;
+ uint32_t pdi_ddr3_vddr_intercept=0;
+ uint32_t pdi_ddr3_vddr_max_limit=0;
+ uint32_t pdi_ddr4_vddr_slope=0;
+ uint32_t pdi_ddr4_vddr_intercept=0;
+ uint32_t pdi_ddr4_vddr_max_limit=0;
+ uint32_t pdi_vpp_slope=0;
+ uint32_t pdi_vpp_intercept=0;
+
+ uint32_t eff_conf_ddr3_vddr_slope=0;
+ uint32_t eff_conf_ddr3_vddr_intercept=0;
+ uint32_t eff_conf_ddr3_vddr_max_limit=0;
+ uint32_t eff_conf_ddr4_vddr_slope=0;
+ uint32_t eff_conf_ddr4_vddr_intercept=0;
+ uint32_t eff_conf_ddr4_vddr_max_limit=0;
+ uint32_t eff_conf_vpp_slope=0;
+ uint32_t eff_conf_vpp_intercept=0;
+
+ // Check input base
+ assert( ( i_base == DEFAULT ) || (i_base == POST_DRAM_INIT ),
+ "set_eff_config_attrs_helper: Invalid i_base passed in: %d",
+ i_base);
+
+ // Get Node Target
+ TARGETING::Target* sysTgt = NULL;
+ TARGETING::targetService().getTopLevelTarget(sysTgt);
+ assert(sysTgt != NULL,"set_eff_config_attrs_helper: "
+ "System target was NULL.");
+
+ TARGETING::TargetHandleList l_nodeList;
+
+ TARGETING::PredicateCTM isaNode(TARGETING::CLASS_ENC,
+ TARGETING::TYPE_NODE);
+
+ TARGETING::targetService().getAssociated(
+ l_nodeList,
+ sysTgt,
+ TARGETING::TargetService::CHILD,
+ TARGETING::TargetService::IMMEDIATE,
+ &isaNode);
+
+ // Node list should only have 1 tgt
+ assert ( l_nodeList.size() == 1,
+ "System target returned multiple or zero nodes ");
+ TARGETING::Target* nodeTgt=l_nodeList[0];
+
+
+
+ // Look for POST_DRAM_INIT Attributes if requested
+ if ( i_base == POST_DRAM_INIT )
+ {
+ // POST_DRAM_INIT DDR3 VDDR
+ pdi_ddr3_vddr_slope =
+ nodeTgt->getAttr<
+ TARGETING::ATTR_MSS_VOLT_DDR3_VDDR_SLOPE_POST_DRAM_INIT>();
+
+ pdi_ddr3_vddr_intercept =
+ nodeTgt->getAttr<
+ TARGETING::ATTR_MSS_VOLT_DDR3_VDDR_INTERCEPT_POST_DRAM_INIT>();
+
+ pdi_ddr3_vddr_max_limit =
+ nodeTgt->getAttr<
+ TARGETING::ATTR_MRW_DDR3_VDDR_MAX_LIMIT_POST_DRAM_INIT>();
+
+ // POST_DRAM_INIT DDR4 VDDR
+ pdi_ddr4_vddr_slope =
+ nodeTgt->getAttr<
+ TARGETING::ATTR_MSS_VOLT_DDR4_VDDR_SLOPE_POST_DRAM_INIT>();
+
+ pdi_ddr4_vddr_intercept =
+ nodeTgt->getAttr<
+ TARGETING::ATTR_MSS_VOLT_DDR4_VDDR_INTERCEPT_POST_DRAM_INIT>();
+
+ pdi_ddr4_vddr_max_limit =
+ nodeTgt->getAttr<
+ TARGETING::ATTR_MRW_DDR4_VDDR_MAX_LIMIT_POST_DRAM_INIT>();
+
+
+ // POST_DRAM_INIT VPP
+ pdi_vpp_slope =
+ nodeTgt->getAttr<
+ TARGETING::ATTR_MSS_VOLT_VPP_SLOPE_POST_DRAM_INIT>();
+
+ pdi_vpp_intercept =
+ nodeTgt->getAttr<
+ TARGETING::ATTR_MSS_VOLT_VPP_INTERCEPT_POST_DRAM_INIT>();
+ }
+ o_post_dram_inits_found = ( pdi_ddr3_vddr_slope || pdi_ddr3_vddr_intercept ||
+ pdi_ddr3_vddr_max_limit ||
+ pdi_ddr4_vddr_slope || pdi_ddr4_vddr_intercept ||
+ pdi_ddr4_vddr_max_limit ||
+ pdi_vpp_slope || pdi_vpp_intercept )
+ ? true : false;
+
+ // -----------------------------------
+ // EFF CONFIG: DDR3 VDDR
+ if ( o_post_dram_inits_found == false )
+ {
+ // Use default system values
+ eff_conf_ddr3_vddr_slope =
+ sysTgt->getAttr<TARGETING::ATTR_MSS_VOLT_DDR3_VDDR_SLOPE>();
+
+ eff_conf_ddr3_vddr_intercept =
+ sysTgt->getAttr<
+ TARGETING::ATTR_MSS_VOLT_DDR3_VDDR_INTERCEPT>();
+
+ eff_conf_ddr3_vddr_max_limit =
+ sysTgt->getAttr<
+ TARGETING::ATTR_MRW_DDR3_VDDR_MAX_LIMIT>();
+ }
+ else
+ {
+ // Use POST_DRAM INIT values
+ eff_conf_ddr3_vddr_slope = pdi_ddr3_vddr_slope;
+ eff_conf_ddr3_vddr_intercept = pdi_ddr3_vddr_intercept;
+ eff_conf_ddr3_vddr_max_limit = pdi_ddr3_vddr_max_limit;
+ }
+
+ nodeTgt->setAttr<TARGETING::ATTR_MSS_VOLT_DDR3_VDDR_SLOPE_EFF_CONFIG>\
+ (eff_conf_ddr3_vddr_slope);
+
+ nodeTgt->setAttr<TARGETING::ATTR_MSS_VOLT_DDR3_VDDR_INTERCEPT_EFF_CONFIG>\
+ (eff_conf_ddr3_vddr_intercept);
+
+ nodeTgt->setAttr<TARGETING::ATTR_MRW_DDR3_VDDR_MAX_LIMIT_EFF_CONFIG>\
+ (eff_conf_ddr3_vddr_max_limit);
+
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,"set_eff_config_attrs_helper: "
+ "DDR3 _EFF_CONFIG(%d, %d): slope=%d, intercept=%d, max_limit=%d",
+ i_base, o_post_dram_inits_found,
+ eff_conf_ddr3_vddr_slope,
+ eff_conf_ddr3_vddr_intercept,
+ eff_conf_ddr3_vddr_max_limit);
+
+
+ // -----------------------------------
+ // EFF CONFIG: DDR4 VDDR
+ if ( o_post_dram_inits_found == false )
+ {
+ // Use default system value
+ eff_conf_ddr4_vddr_slope =
+ sysTgt->getAttr<TARGETING::ATTR_MSS_VOLT_DDR4_VDDR_SLOPE>();
+
+ eff_conf_ddr4_vddr_intercept =
+ sysTgt->getAttr<
+ TARGETING::ATTR_MSS_VOLT_DDR4_VDDR_INTERCEPT>();
+
+ eff_conf_ddr4_vddr_max_limit =
+ sysTgt->getAttr<
+ TARGETING::ATTR_MRW_DDR4_VDDR_MAX_LIMIT>();
+ }
+ else
+ {
+ // Use POST_DRAM INIT value
+ eff_conf_ddr4_vddr_slope = pdi_ddr4_vddr_slope;
+ eff_conf_ddr4_vddr_intercept = pdi_ddr4_vddr_intercept;
+ eff_conf_ddr4_vddr_max_limit = pdi_ddr4_vddr_max_limit;
+ }
+ nodeTgt->setAttr<TARGETING::ATTR_MSS_VOLT_DDR4_VDDR_SLOPE_EFF_CONFIG>\
+ (eff_conf_ddr4_vddr_slope);
+
+ nodeTgt->setAttr<TARGETING::ATTR_MSS_VOLT_DDR4_VDDR_INTERCEPT_EFF_CONFIG>\
+ (eff_conf_ddr4_vddr_intercept);
+
+ nodeTgt->setAttr<TARGETING::ATTR_MRW_DDR4_VDDR_MAX_LIMIT_EFF_CONFIG>\
+ (eff_conf_ddr4_vddr_max_limit);
+
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,"set_eff_config_attrs_helper: "
+ "DDR4 _EFF_CONFIG(%d, %d): slope=%d, intercept=%d, max_limit=%d",
+ i_base, o_post_dram_inits_found,
+ eff_conf_ddr4_vddr_slope,
+ eff_conf_ddr4_vddr_intercept,
+ eff_conf_ddr4_vddr_max_limit);
+
+ // -----------------------------------
+ // EFF CONFIG: VPP
+ if ( o_post_dram_inits_found == false )
+ {
+ // Use default system value
+ eff_conf_vpp_slope =
+ sysTgt->getAttr<TARGETING::ATTR_MSS_VOLT_VPP_SLOPE>();
+
+ eff_conf_vpp_intercept =
+ sysTgt->getAttr<
+ TARGETING::ATTR_MSS_VOLT_VPP_INTERCEPT>();
+ }
+ else
+ {
+ // Use POST_DRAM INIT value
+ eff_conf_vpp_slope = pdi_vpp_slope;
+ eff_conf_vpp_intercept = pdi_vpp_intercept;
+ }
+ nodeTgt->setAttr<TARGETING::ATTR_MSS_VOLT_VPP_SLOPE_EFF_CONFIG>\
+ (eff_conf_vpp_slope);
+
+ nodeTgt->setAttr<TARGETING::ATTR_MSS_VOLT_VPP_INTERCEPT_EFF_CONFIG>\
+ (eff_conf_vpp_intercept);
+
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,"set_eff_config_attrs_helper: "
+ "VPP _EFF_CONFIG(%d, %d): slope=%d, intercept=%d",
+ i_base, o_post_dram_inits_found,
+ eff_conf_vpp_slope,
+ eff_conf_vpp_intercept);
+
+
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "set_eff_config_attrs_helper: setting _EFF_CONFIG "
+ "attributes exit");
+*/
+}
+
diff --git a/src/usr/isteps/istepHelperFuncs.H b/src/usr/isteps/istepHelperFuncs.H
new file mode 100644
index 000000000..6b877fe19
--- /dev/null
+++ b/src/usr/isteps/istepHelperFuncs.H
@@ -0,0 +1,323 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/usr/isteps/istepHelperFuncs.H $ */
+/* */
+/* 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 */
+
+#ifndef _ISTEP_HELPER_FUNCS_H
+#define _ISTEP_HELPER_FUNCS_H
+
+// targeting support
+#include <targeting/common/commontargeting.H>
+#include <targeting/common/utilFilter.H>
+#include <attributetraits.H>
+#include <attributeenums.H>
+/**
+ * @brief Enum specifying what attributes should be used to set the
+ * memory _EFF_CONFIG attributes
+ *
+ */
+enum EFF_CONFIG_ATTRIBUTES_BASE
+{
+ DEFAULT = 0x00, ///< Use System Defaults
+ POST_DRAM_INIT = 0x01, ///< Use POST_DRAM_INIT attributes if non-zero
+};
+
+
+//
+// Helper function to set _EFF_CONFIG attributes for HWPs
+//
+void set_eff_config_attrs_helper( const EFF_CONFIG_ATTRIBUTES_BASE i_base,
+ bool & o_post_dram_inits_found);
+
+
+/**
+ * @brief Compares two memory buffer targets based on the voltage domain ID for
+ * the voltage domain given by the template parameter. Used for sorting
+ * memory buffer targets within containers. API should be called in well
+ * controlled conditions where the input restrictions can be guaranteed.
+ *
+ * @param[in] i_pMembufLhs
+ * Left hand side memory buffer target. Must be a memory buffer target,
+ * and must not be NULL. These conditions are not enforced internally.
+ *
+ * @param[in] i_pMembufRhs
+ * Right hand side memory buffer target. Must be a memory buffer target,
+ * and must not be NULL. These conditions are not enforced internally.
+ *
+ * @tparam VOLTAGE_DOMAIN_ID_ATTR
+ * Attribute corresponding to voltage domain to compare
+ *
+ * @return Bool indicating whether LHS memory buffer target's voltage domain ID
+ * for the specified domain logically precedes the RHS memory buffer
+ * target's voltage domain ID for the same domain
+ */
+template < const TARGETING::ATTRIBUTE_ID VOLTAGE_DOMAIN_ID_ATTR>
+bool _compareMembufWrtVoltageDomain(
+ TARGETING::Target* i_pMembufLhs,
+ TARGETING::Target* i_pMembufRhs)
+{
+ typename TARGETING::AttributeTraits< VOLTAGE_DOMAIN_ID_ATTR >::Type
+ lhsDomain = i_pMembufLhs->getAttr<VOLTAGE_DOMAIN_ID_ATTR>();
+ typename TARGETING::AttributeTraits< VOLTAGE_DOMAIN_ID_ATTR >::Type
+ rhsDomain = i_pMembufRhs->getAttr<VOLTAGE_DOMAIN_ID_ATTR>();
+
+ return lhsDomain < rhsDomain;
+}
+//******************************************************************************
+// setMemoryVoltageDomainOffsetVoltage
+//******************************************************************************
+
+// TODO via RTC: 110777
+// Optimize setMemoryVoltageDomainOffsetVoltage into templated and non-templated
+// pieces to reduce code size
+/*
+ * TODO: RTC:133830 Re-enable this function, the following ATTRs don't seem to
+ * exist currently.
+template< const ATTRIBUTE_ID OFFSET_DISABLEMENT_ATTR,
+ const ATTRIBUTE_ID OFFSET_VOLTAGE_ATTR,
+ const ATTRIBUTE_ID VOLTAGE_DOMAIN_ID_ATTR >
+errlHndl_t setMemoryVoltageDomainOffsetVoltage()
+{
+ TRACDCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
+ "setMemoryVoltageDomainOffsetVoltage enter");
+
+ errlHndl_t pError = NULL;
+
+ do {
+
+ TARGETING::Target* pSysTarget = NULL;
+ TARGETING::targetService().getTopLevelTarget(pSysTarget);
+ assert(pSysTarget != NULL,"setMemoryVoltageDomainOffsetVoltage: "
+ "System target was NULL.");
+
+ typename AttributeTraits< OFFSET_DISABLEMENT_ATTR >::Type
+ disableOffsetVoltage =
+ pSysTarget->getAttr< OFFSET_DISABLEMENT_ATTR >();
+
+ if(disableOffsetVoltage)
+ {
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "INFO: Offset voltage processing disabled for domain type 0x%08X.",
+ OFFSET_DISABLEMENT_ATTR);
+ break;
+ }
+
+ TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "INFO: Offset voltage processing enabled for domain type 0x%08X.",
+ OFFSET_DISABLEMENT_ATTR);
+
+ typedef fapi::ReturnCode (*pOffsetFn_t)(std::vector<fapi::Target>&);
+
+ struct {
+
+ TARGETING::ATTRIBUTE_ID domain;
+ pOffsetFn_t fn;
+ const char* fnName;
+ bool callIfAllNonFunc;
+
+ } fnMap[] = {
+
+ {TARGETING::ATTR_AVDD_ID,
+ mss_volt_avdd_offset,"mss_volt_avdd_offset", true},
+ {TARGETING::ATTR_VDD_ID ,
+ mss_volt_vdd_offset ,"mss_volt_vdd_offset", true},
+ {TARGETING::ATTR_VCS_ID ,
+ mss_volt_vcs_offset ,"mss_volt_vcs_offset", true},
+ {TARGETING::ATTR_VMEM_ID,
+ mss_volt_vddr_offset,"mss_volt_vddr_offset", false},
+ {TARGETING::ATTR_VPP_ID ,
+ mss_volt_vpp_offset ,"mss_volt_vpp_offset", false}
+ };
+
+ size_t recordIndex = 0;
+ const size_t records = sizeof(fnMap)/sizeof(fnMap[0]);
+ for(; recordIndex<records; ++recordIndex)
+ {
+ if(VOLTAGE_DOMAIN_ID_ATTR == fnMap[recordIndex].domain)
+ {
+ break;
+ }
+ }
+
+ if(recordIndex >= records)
+ {
+ assert(recordIndex < records,
+ "Code bug! Called setMemoryVoltageDomainOffsetVoltage "
+ "using unsupported voltage offset attribute type of 0x%08X.",
+ VOLTAGE_DOMAIN_ID_ATTR);
+ break;
+ }
+
+ TARGETING::TargetHandleList membufTargetList;
+
+ // Must pull ALL present memory buffers (not just functional) for these
+ // computations
+ getChipResources(membufTargetList, TYPE_MEMBUF,
+ TARGETING::UTIL_FILTER_PRESENT);
+
+ std::sort(membufTargetList.begin(), membufTargetList.end(),
+ _compareMembufWrtVoltageDomain< VOLTAGE_DOMAIN_ID_ATTR >);
+
+ std::vector<fapi::Target> membufFapiTargetsList;
+ typename AttributeTraits< VOLTAGE_DOMAIN_ID_ATTR >::Type lastDomainId
+ = 0;
+
+ if(!membufTargetList.empty())
+ {
+ lastDomainId =
+ (*membufTargetList.begin())->getAttr<VOLTAGE_DOMAIN_ID_ATTR>();
+ }
+
+ // O(n) algorithm to execute HWPs on groups of memory buffers. As the
+ // memory buffers are sorted in order of domain ID (several records in a row
+ // might have same domain ID), walk down the list accumulating targets for
+ // the HWP until the domain ID changes. The first record is not considered
+ // a change. At the time the change is detected, run the HWP on the set of
+ // accumulated targets, clear the list, and accumulate the target with a new
+ // domain ID as the start of the new list. When we hit end of list, we
+ // might add this last target to a new accumulation, so we have to go back
+ // through the loop one more time to process it (being careful not to do
+ // unholy things to the iterator, etc.)
+
+ // Prevent running the HWP on the first target. Var is used to push us
+ // through the loop after we exhausted all the targets
+ bool last = membufTargetList.empty();
+ for (TargetHandleList::const_iterator
+ ppPresentMembuf = membufTargetList.begin();
+ ((ppPresentMembuf != membufTargetList.end()) || (last == false));
+ ++ppPresentMembuf)
+ {
+ // If no valid target to process, this is our last time through the loop
+ last = (ppPresentMembuf == membufTargetList.end());
+
+ typename AttributeTraits< VOLTAGE_DOMAIN_ID_ATTR >::Type
+ currentDomainId = last ? lastDomainId :
+ (*ppPresentMembuf)->getAttr<VOLTAGE_DOMAIN_ID_ATTR>();
+
+ // Invoke the HWP if the domain ID in the sorted list change relative to
+ // prior entry or this is our final time through the loop (and there is
+ // a list entry to process)
+ if( ( (currentDomainId != lastDomainId)
+ || (last))
+ && (!membufFapiTargetsList.empty()) )
+ {
+ // Skip HWP if this domain has all deconfigured membufs and the
+ // domain rule specifies not running the HWP for that case
+ bool invokeHwp = true;
+ if(fnMap[recordIndex].callIfAllNonFunc == false)
+ {
+ invokeHwp = false;
+ TARGETING::PredicateIsFunctional funcPred;
+ std::vector<fapi::Target>::const_iterator pFapiTarget =
+ membufFapiTargetsList.begin();
+ for(;pFapiTarget != membufFapiTargetsList.end();++pFapiTarget)
+ {
+ if(funcPred(
+ reinterpret_cast<const TARGETING::Target*>(
+ pFapiTarget->get())))
+ {
+ invokeHwp = true;
+ break;
+ }
+ }
+ }
+
+ if(invokeHwp)
+ {
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "INFO invoking %s on domain type 0x%08X, ID 0x%08X",
+ fnMap[recordIndex].fnName,
+ VOLTAGE_DOMAIN_ID_ATTR, lastDomainId);
+
+ FAPI_INVOKE_HWP(
+ pError,
+ fnMap[recordIndex].fn,
+ membufFapiTargetsList);
+
+ if (pError)
+ {
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "ERROR 0x%.8X: %s",
+ pError->reasonCode(),fnMap[recordIndex].fnName);
+ break;
+ }
+ else
+ {
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "SUCCESS : %s",fnMap[recordIndex].fnName );
+ }
+ }
+ else
+ {
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "INFO not invoking %s on domain type 0x%08X, ID 0x%08X "
+ "since domain has no functional memory buffers.",
+ fnMap[recordIndex].fnName,
+ VOLTAGE_DOMAIN_ID_ATTR, lastDomainId);
+ }
+
+ membufFapiTargetsList.clear();
+
+ lastDomainId = currentDomainId;
+ }
+
+ // If not the last time through loop, there is a new target to
+ // accumulate
+ if(!last)
+ {
+ const TARGETING::Target* pPresentMembuf = *ppPresentMembuf;
+
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "===== add to fapi::Target vector attr type=0x%08X, "
+ "id=0x%08X, target HUID=0x%08X",
+ VOLTAGE_DOMAIN_ID_ATTR,
+ pPresentMembuf->getAttr<VOLTAGE_DOMAIN_ID_ATTR>(),
+ TARGETING::get_huid(pPresentMembuf));
+
+ fapi::Target membufFapiTarget(fapi::TARGET_TYPE_MEMBUF_CHIP,
+ (const_cast<TARGETING::Target*>(pPresentMembuf)) );
+
+ membufFapiTargetsList.push_back(membufFapiTarget);
+ }
+ // Otherwise need to bail, lest we increment the iterator again, which
+ // is undefined
+ else
+ {
+ break;
+ }
+ }
+
+ if(pError)
+ {
+ break;
+ }
+
+ } while(0);
+
+ TRACDCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
+ "setMemoryVoltageDomainOffsetVoltage exit");
+
+ return pError;
+}
+*/
+#endif
diff --git a/src/usr/isteps/makefile b/src/usr/isteps/makefile
new file mode 100644
index 000000000..296b4ff56
--- /dev/null
+++ b/src/usr/isteps/makefile
@@ -0,0 +1,37 @@
+# IBM_PROLOG_BEGIN_TAG
+# This is an automatically generated prolog.
+#
+# $Source: src/usr/isteps/makefile $
+#
+# OpenPOWER HostBoot Project
+#
+# 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.
+# 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 = isteps
+
+SUBDIRS+=istep06.d
+SUBDIRS+=istep07.d
+
+OBJS += hwpisteperror.o
+OBJS += hwpistepud.o
+OBJS += istepHelperFuncs.o
+
+EXTRAINCDIR += ${ROOTPATH}/src/usr/initservice/istepdispatcher
+
+include ${ROOTPATH}/config.mk
diff --git a/src/usr/makefile b/src/usr/makefile
index d71b4b73c..1f7362c1e 100644
--- a/src/usr/makefile
+++ b/src/usr/makefile
@@ -30,6 +30,7 @@ HOSTBOOT_PROFILE_NO_INSTRUMENT = 1
OBJS += module_init.o
SUBDIRS += sio.d
+SUBDIRS += isteps.d
SUBDIRS += trace.d
SUBDIRS += cxxtest.d
SUBDIRS += testcore.d
OpenPOWER on IntegriCloud