diff options
| author | Christian Geddes <crgeddes@us.ibm.com> | 2019-02-20 10:31:12 -0600 |
|---|---|---|
| committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2019-03-27 13:14:50 -0500 |
| commit | c6677251ee3d516df397c1fb467756b261b50a92 (patch) | |
| tree | c7ea0b7d25c37e963522ec9aeb4f8034fcb30956 /src | |
| parent | a52d457421511c41a02e835006eb0150e722d5c1 (diff) | |
| download | talos-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.C | 382 | ||||
| -rw-r--r-- | src/usr/isteps/istep07/makefile | 6 | ||||
| -rw-r--r-- | src/usr/isteps/mss/makefile | 4 |
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)) |

