summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorChristian Geddes <crgeddes@us.ibm.com>2019-02-20 10:31:12 -0600
committerDaniel M. Crowell <dcrowell@us.ibm.com>2019-03-27 13:14:50 -0500
commitc6677251ee3d516df397c1fb467756b261b50a92 (patch)
treec7ea0b7d25c37e963522ec9aeb4f8034fcb30956 /src
parenta52d457421511c41a02e835006eb0150e722d5c1 (diff)
downloadtalos-hostboot-c6677251ee3d516df397c1fb467756b261b50a92.tar.gz
talos-hostboot-c6677251ee3d516df397c1fb467756b261b50a92.zip
Call p9a_mss_volt if MEM_PORT targets are available in istep 7.2
As per the P9A IPL Flow document the hwp p9a_mss_volt must be called on all MEM_PORT targets during istep 7.2. Change-Id: Id31e30cd1d46daedfcdca0c12da4f4ed5e7b399b RTC: 195552 Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/72190 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Matt Derksen <mderkse1@us.ibm.com> Reviewed-by: Corey V. Swenson <cswenson@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src')
-rw-r--r--src/usr/isteps/istep07/call_mss_volt.C382
-rw-r--r--src/usr/isteps/istep07/makefile6
-rw-r--r--src/usr/isteps/mss/makefile4
3 files changed, 232 insertions, 160 deletions
diff --git a/src/usr/isteps/istep07/call_mss_volt.C b/src/usr/isteps/istep07/call_mss_volt.C
index 8a7ae5f6d..6bc1cb4ba 100644
--- a/src/usr/isteps/istep07/call_mss_volt.C
+++ b/src/usr/isteps/istep07/call_mss_volt.C
@@ -5,7 +5,7 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* Contributors Listed Below - COPYRIGHT 2015,2018 */
+/* Contributors Listed Below - COPYRIGHT 2015,2019 */
/* [+] International Business Machines Corp. */
/* */
/* */
@@ -43,6 +43,7 @@
#include <initservice/isteps_trace.H>
// targeting support
+#include <targeting/common/targetservice.H>
#include <targeting/common/commontargeting.H>
#include <targeting/common/utilFilter.H>
#include <attributetraits.H>
@@ -63,6 +64,7 @@
#include <p9c_mss_volt.H>
#include <p9c_mss_volt_vddr_offset.H>
#include <p9c_mss_volt_dimm_count.H>
+#include <p9a_mss_volt.H>
namespace ISTEP_07
{
@@ -95,7 +97,7 @@ void call_mss_volt_hwps (p9c_mss_volt_FP_t i_mss_volt_hwps,
{
TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "Calling %s hwp with list of membuf targets"
+ "Calling %s hwp with list of MEMBUF targets"
" with VDDR_ID=%d, list size=%d",
i_mss_volt_hwp_str, l_vddr,
i_membufFapiTargetMap[l_vddr].size());
@@ -179,166 +181,234 @@ void* call_mss_volt( void *io_pArgs )
do
{
- TargetHandleList l_membufTargetList;
- getAllChips(l_membufTargetList, TYPE_MEMBUF);
-
- if (l_membufTargetList.size() > 0)
- {
-
- MembufTargetMap_t l_membufFapiTargetMap {};
- VDDR_ID_vect_t l_unique_vddrs {};
- buildMembufLists(l_membufTargetList, l_membufFapiTargetMap,
- l_unique_vddrs);
-
- FAPI_MSS_VOLT_CALL_MACRO(p9c_mss_volt,
- l_membufFapiTargetMap,
- l_unique_vddrs,
- l_StepError);
- if (l_StepError.getErrorHandle())
- {
+ ATTR_MODEL_type l_procModel = targetService().getProcessorModel();
+
+ if(l_procModel == MODEL_CUMULUS)
+ {
+ TargetHandleList l_membufTargetList;
+ getAllChips(l_membufTargetList, TYPE_MEMBUF);
+
+ if (l_membufTargetList.size() == 0)
+ {
TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "ERROR: p9c_mss_volt HWP failed");
+ "ERROR: No MEMBUF targets found, skipping p9c_mss_volt HWP");
break;
- }
-
- FAPI_MSS_VOLT_CALL_MACRO(p9c_mss_volt_vddr_offset,
- l_membufFapiTargetMap,
- l_unique_vddrs,
- l_StepError);
- if (l_StepError.getErrorHandle())
- {
+ }
+
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "Calling p9c_mss_volt HWPs on list of MEMBUF %d targets",
+ l_membufTargetList.size());
+
+ MembufTargetMap_t l_membufFapiTargetMap {};
+ VDDR_ID_vect_t l_unique_vddrs {};
+ buildMembufLists(l_membufTargetList, l_membufFapiTargetMap,
+ l_unique_vddrs);
+
+ FAPI_MSS_VOLT_CALL_MACRO(p9c_mss_volt,
+ l_membufFapiTargetMap,
+ l_unique_vddrs,
+ l_StepError);
+ if (l_StepError.getErrorHandle())
+ {
+ TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
+ "ERROR: p9c_mss_volt HWP failed");
+ break;
+ }
+
+ FAPI_MSS_VOLT_CALL_MACRO(p9c_mss_volt_vddr_offset,
+ l_membufFapiTargetMap,
+ l_unique_vddrs,
+ l_StepError);
+ if (l_StepError.getErrorHandle())
+ {
+ TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
+ "ERROR: p9c_mss_volt_vddr_offset HWP failed");
+ break;
+ }
+
+ FAPI_MSS_VOLT_CALL_MACRO(p9c_mss_volt_dimm_count,
+ l_membufFapiTargetMap,
+ l_unique_vddrs,
+ l_StepError);
+ if (l_StepError.getErrorHandle())
+ {
+ TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
+ "ERROR: p9c_mss_volt_vddr_offset HWP failed");
+ break;
+ }
+ }
+ else if(l_procModel == MODEL_NIMBUS)
+ {
+
+ TargetHandleList l_mcsTargetList;
+ getAllChiplets(l_mcsTargetList, TYPE_MCS);
+
+ if (l_mcsTargetList.size() == 0)
+ {
TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "ERROR: p9c_mss_volt_vddr_offset HWP failed");
+ "ERROR: No MCS targets found, skipping p9_mss_volt HWP");
break;
- }
-
- FAPI_MSS_VOLT_CALL_MACRO(p9c_mss_volt_dimm_count,
- l_membufFapiTargetMap,
- l_unique_vddrs,
- l_StepError);
- if (l_StepError.getErrorHandle())
- {
+ }
+
+ std::vector< fapi2::Target<fapi2::TARGET_TYPE_MCS> >
+ l_mcsFapiTargetsList;
+
+ for(auto & l_mcs_target : l_mcsTargetList)
+ {
+ fapi2::Target <fapi2::TARGET_TYPE_MCS>
+ l_mcs_fapi_target (l_mcs_target);
+
+ l_mcsFapiTargetsList.push_back( l_mcs_fapi_target );
+ }
+
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "Calling p9_mss_volt on list of %d MCS targets",
+ l_mcsTargetList.size());
+
+ FAPI_INVOKE_HWP(l_err, p9_mss_volt, l_mcsFapiTargetsList);
+
+ // process return code
+ if ( l_err )
+ {
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "ERROR 0x%.8X: p9_mss_volt HWP() failed",
+ l_err->reasonCode());
+
+ // 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
+ {
+ // No need to compute dynamic values if mss_volt failed
+
+ // Calculate Dynamic Offset voltages for each domain
+ Target* pSysTarget = NULL;
+ targetService().getTopLevelTarget(pSysTarget);
+ assert(
+ (pSysTarget != NULL),
+ "call_mss_volt: Code bug! System target was NULL.");
+
+ // only calculate if system supports dynamic voltage
+ if (pSysTarget->getAttr<ATTR_SUPPORTS_DYNAMIC_MEM_VOLT >() == 1)
+ {
+ l_err = computeDynamicMemoryVoltage<
+ ATTR_MSS_VDD_PROGRAM,
+ ATTR_VDD_ID>();
+ if(l_err)
+ {
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "ERROR 0x%08X: computeDynamicMemoryVoltage for "
+ "VDD domain",
+ l_err->reasonCode());
+ l_StepError.addErrorDetails(l_err);
+ errlCommit(l_err,HWPF_COMP_ID);
+ }
+
+ l_err = computeDynamicMemoryVoltage<
+ ATTR_MSS_AVDD_PROGRAM,
+ ATTR_AVDD_ID>();
+ if(l_err)
+ {
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "ERROR 0x%08X: computeDynamicMemoryVoltage for "
+ "AVDD domain",
+ l_err->reasonCode());
+ l_StepError.addErrorDetails(l_err);
+ errlCommit(l_err,HWPF_COMP_ID);
+ }
+
+ l_err = computeDynamicMemoryVoltage<
+ ATTR_MSS_VCS_PROGRAM,
+ ATTR_VCS_ID>();
+ if(l_err)
+ {
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "ERROR 0x%08X: computeDynamicMemoryVoltage for "
+ "VCS domain",
+ l_err->reasonCode());
+ l_StepError.addErrorDetails(l_err);
+ errlCommit(l_err,HWPF_COMP_ID);
+ }
+
+ l_err = computeDynamicMemoryVoltage<
+ ATTR_MSS_VPP_PROGRAM,
+ ATTR_VPP_ID>();
+ if(l_err)
+ {
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "ERROR 0x%08X: computeDynamicMemoryVoltage for "
+ "VPP domain",
+ l_err->reasonCode());
+ l_StepError.addErrorDetails(l_err);
+ errlCommit(l_err,HWPF_COMP_ID);
+ }
+
+ l_err = computeDynamicMemoryVoltage<
+ ATTR_MSS_VDDR_PROGRAM,
+ ATTR_VDDR_ID>();
+ if(l_err)
+ {
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "ERROR 0x%08X: computeDynamicMemoryVoltage for "
+ "VDDR domain",
+ l_err->reasonCode());
+ l_StepError.addErrorDetails(l_err);
+ errlCommit(l_err,HWPF_COMP_ID);
+ }
+ }
+ }
+ }
+ else if( l_procModel == MODEL_AXONE)
+ {
+ TargetHandleList l_memportTargetList;
+ getAllChiplets(l_memportTargetList, TYPE_MEM_PORT);
+
+ if (l_memportTargetList.size() == 0)
+ {
TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
- "ERROR: p9c_mss_volt_vddr_offset HWP failed");
+ "ERROR: No MEM_PORT targets found, skipping p9a_mss_volt HWP");
break;
- }
- }
- else
- {
- TargetHandleList l_mcsTargetList;
- getAllChiplets(l_mcsTargetList, TYPE_MCS);
-
- std::vector< fapi2::Target<fapi2::TARGET_TYPE_MCS> >
- l_mcsFapiTargetsList;
-
- for(auto & l_mcs_target : l_mcsTargetList)
- {
- fapi2::Target <fapi2::TARGET_TYPE_MCS>
- l_mcs_fapi_target (l_mcs_target);
-
- l_mcsFapiTargetsList.push_back( l_mcs_fapi_target );
- }
-
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "Calling p9_mss_volt on list of mcs targets");
-
- FAPI_INVOKE_HWP(l_err, p9_mss_volt, l_mcsFapiTargetsList);
-
- // process return code
- if ( l_err )
- {
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "ERROR 0x%.8X: p9_mss_volt HWP() failed",
- l_err->reasonCode());
-
- // 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
- {
- // No need to compute dynamic values if mss_volt failed
-
- // Calculate Dynamic Offset voltages for each domain
- Target* pSysTarget = NULL;
- targetService().getTopLevelTarget(pSysTarget);
- assert(
- (pSysTarget != NULL),
- "call_mss_volt: Code bug! System target was NULL.");
-
- // only calculate if system supports dynamic voltage
- if (pSysTarget->getAttr<ATTR_SUPPORTS_DYNAMIC_MEM_VOLT >() == 1)
- {
- l_err = computeDynamicMemoryVoltage<
- ATTR_MSS_VDD_PROGRAM,
- ATTR_VDD_ID>();
- if(l_err)
- {
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "ERROR 0x%08X: computeDynamicMemoryVoltage for "
- "VDD domain",
- l_err->reasonCode());
- l_StepError.addErrorDetails(l_err);
- errlCommit(l_err,HWPF_COMP_ID);
- }
-
- l_err = computeDynamicMemoryVoltage<
- ATTR_MSS_AVDD_PROGRAM,
- ATTR_AVDD_ID>();
- if(l_err)
- {
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "ERROR 0x%08X: computeDynamicMemoryVoltage for "
- "AVDD domain",
- l_err->reasonCode());
- l_StepError.addErrorDetails(l_err);
- errlCommit(l_err,HWPF_COMP_ID);
- }
-
- l_err = computeDynamicMemoryVoltage<
- ATTR_MSS_VCS_PROGRAM,
- ATTR_VCS_ID>();
- if(l_err)
- {
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "ERROR 0x%08X: computeDynamicMemoryVoltage for "
- "VCS domain",
- l_err->reasonCode());
- l_StepError.addErrorDetails(l_err);
- errlCommit(l_err,HWPF_COMP_ID);
- }
-
- l_err = computeDynamicMemoryVoltage<
- ATTR_MSS_VPP_PROGRAM,
- ATTR_VPP_ID>();
- if(l_err)
- {
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "ERROR 0x%08X: computeDynamicMemoryVoltage for "
- "VPP domain",
- l_err->reasonCode());
- l_StepError.addErrorDetails(l_err);
- errlCommit(l_err,HWPF_COMP_ID);
- }
-
- l_err = computeDynamicMemoryVoltage<
- ATTR_MSS_VDDR_PROGRAM,
- ATTR_VDDR_ID>();
- if(l_err)
- {
- TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "ERROR 0x%08X: computeDynamicMemoryVoltage for "
- "VDDR domain",
- l_err->reasonCode());
- l_StepError.addErrorDetails(l_err);
- errlCommit(l_err,HWPF_COMP_ID);
- }
- }
- }
- }
+ }
+
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "Calling p9a_mss_volt HWPs on list %d of MEM_PORT targets",
+ l_memportTargetList.size());
+
+ std::vector< fapi2::Target<fapi2::TARGET_TYPE_MEM_PORT> >
+ l_memportFapiTargetsList;
+
+ for(auto & l_memport_target : l_memportTargetList)
+ {
+ fapi2::Target <fapi2::TARGET_TYPE_MEM_PORT>
+ l_memport_fapi_target (l_memport_target);
+
+ l_memportFapiTargetsList.push_back(l_memport_fapi_target);
+
+ FAPI_INVOKE_HWP(l_err, p9a_mss_volt, l_memportFapiTargetsList);
+
+ if ( l_err )
+ {
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "ERROR 0x%.8X: p9a_mss_volt HWP() failed on target 0x%.08X",
+ l_err->reasonCode(), get_huid(l_memport_target));
+
+ // Create IStep error log and cross reference to error
+ // that occurred
+ l_StepError.addErrorDetails(l_err);
+
+ // Commit Error
+ errlCommit( l_err, HWPF_COMP_ID );
+ }
+
+ l_memportFapiTargetsList.clear();
+ }
+
+
+ }
}while(0);
TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_volt exit" );
diff --git a/src/usr/isteps/istep07/makefile b/src/usr/isteps/istep07/makefile
index 144f4c1a0..f034650d4 100644
--- a/src/usr/isteps/istep07/makefile
+++ b/src/usr/isteps/istep07/makefile
@@ -5,7 +5,7 @@
#
# OpenPOWER HostBoot Project
#
-# Contributors Listed Below - COPYRIGHT 2015,2018
+# Contributors Listed Below - COPYRIGHT 2015,2019
# [+] International Business Machines Corp.
#
#
@@ -27,7 +27,8 @@ MODULE = istep07
PROCEDURES_PATH = ${ROOTPATH}/src/import/chips/p9/procedures
HWP_PATH_1 += ${ROOTPATH}/src/import/chips/p9/procedures/hwp/memory
HWP_PATH_2 += ${ROOTPATH}/src/import/chips/centaur/procedures/hwp/memory
-HWP_PATH += ${HWP_PATH_1}/ ${HWP_PATH_2}/
+HWP_PATH_3 += ${ROOTPATH}/src/import/chips/p9a/procedures/hwp/memory
+HWP_PATH += ${HWP_PATH_1}/ ${HWP_PATH_2}/ ${HWP_PATH_3}/
#Add all the object files required for istep07 module
OBJS += call_mss_volt.o
@@ -79,6 +80,7 @@ include $(HWP_PATH_2)/p9c_mss_volt.mk
include $(HWP_PATH_2)/p9c_mss_volt_vddr_offset.mk
include $(HWP_PATH_2)/p9c_mss_volt_dimm_count.mk
include $(HWP_PATH_2)/mss_dynamic_vid_utils.mk
+include $(HWP_PATH_3)/p9a_mss_volt.mk
#mss_freq : Calc dimm frequency
include $(HWP_PATH_1)/p9_mss_freq.mk
diff --git a/src/usr/isteps/mss/makefile b/src/usr/isteps/mss/makefile
index 1606b03b1..4aa82fd8d 100644
--- a/src/usr/isteps/mss/makefile
+++ b/src/usr/isteps/mss/makefile
@@ -46,6 +46,8 @@ MSS_LIB += ${PROCEDURES_PATH}/hwp/memory/lib/dimm/
MSS_LIB += ${PROCEDURES_PATH}/hwp/memory/lib/dimm/ddr4/
MSS_LIB += ${PROCEDURES_PATH}/hwp/memory/lib/ecc/
MSS_LIB += ${PROCEDURES_PATH}/hwp/memory/lib/eff_config/
+MSS_LIB += ${AXONE_PROCEDURES_PATH}/hwp/memory/lib/eff_config/
+MSS_LIB += ${AXONE_PROCEDURES_PATH}/hwp/memory/lib/utils
MSS_LIB += ${PROCEDURES_PATH}/hwp/memory/lib/fir/
MSS_LIB += ${PROCEDURES_PATH}/hwp/memory/lib/freq/
MSS_LIB += ${PROCEDURES_PATH}/hwp/memory/lib/mc/
@@ -151,8 +153,6 @@ MSS_MODULE_OBJS += $(patsubst %.C,%.o,$(MSS_GENERIC_MEMORY_SOURCE))
MSS_PATH_AXONE := $(AXONE_PROCEDURES_PATH)/hwp/memory/lib
MSS_AXONE_SOURCE := $(shell find $(MSS_PATH_AXONE) -name '*.C' -exec basename {} \;)
- # TODO RTC:206774 remove when MSS team changes filename
- MSS_AXONE_SOURCE := $(filter-out sync.o,$(MSS_AXONE_SOURCE))
MSS_MODULE_OBJS += $(patsubst %.C,%.o,$(MSS_AXONE_SOURCE))
OpenPOWER on IntegriCloud