diff options
author | Corey Swenson <cswenson@us.ibm.com> | 2018-02-05 17:09:52 -0600 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2018-03-27 13:19:16 -0400 |
commit | 579e63b60e50df4cbef126c306e1aa742d2c9f09 (patch) | |
tree | f467a15b40c193cbecf6afeeb247562fcf5533db /src/usr/fapi2 | |
parent | 8a783ea89563b0e452caab5c5900add8cc99e358 (diff) | |
download | talos-hostboot-579e63b60e50df4cbef126c306e1aa742d2c9f09.tar.gz talos-hostboot-579e63b60e50df4cbef126c306e1aa742d2c9f09.zip |
Add support for ATTR_FREQ_MCA_MHZ
When accessing the attribute, return value for ATTR_FREQ_PB_MHZ.
Change-Id: I41a2f39582d76b3ea949d8998300b64c7622a671
RTC:179826
CMVC-Prereq: 1049714
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/53408
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/usr/fapi2')
-rw-r--r-- | src/usr/fapi2/attribute_service.C | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/src/usr/fapi2/attribute_service.C b/src/usr/fapi2/attribute_service.C index fa3de0bf7..08ed1b877 100644 --- a/src/usr/fapi2/attribute_service.C +++ b/src/usr/fapi2/attribute_service.C @@ -2204,6 +2204,73 @@ ReturnCode platGetMBvpdSlopeInterceptData( return rc; } +//****************************************************************************** +// fapi::platAttrSvc::platGetFreqMcaMhz function +//****************************************************************************** +ReturnCode platGetFreqMcaMhz(const Target<TARGET_TYPE_ALL>& i_fapiTarget, + uint32_t & o_val) +{ + // The POR config for Cumulus is to run the MC/DMI clocks directly + // off of the NEST PLL in 'sync' mode. To support 'sync' mode FW + // can pin ATTR_FREQ_MCA_MHZ == ATTR_FREQ_PB_MHZ. + + fapi2::ReturnCode l_rc; + errlHndl_t l_errl = nullptr; + + TARGETING::Target * l_chipTarget = nullptr; + l_errl = getTargetingTarget(i_fapiTarget, l_chipTarget); + if(l_errl) + { + FAPI_ERR("platGetFreqMcaMhz: Error from getTargetingTarget"); + l_rc.setPlatDataPtr(reinterpret_cast<void *> (l_errl)); + } + else + { + o_val = l_chipTarget->getAttr<TARGETING::ATTR_FREQ_PB_MHZ>(); + } + return l_rc; +} + +//****************************************************************************** +// fapi::platAttrSvc::platSetFreqMcaMhz function +//****************************************************************************** +ReturnCode platSetFreqMcaMhz(const Target<TARGET_TYPE_ALL>& i_fapiTarget, + uint32_t i_val) +{ + fapi2::ReturnCode l_rc; + + TARGETING::Target * l_pTarget = NULL; + errlHndl_t l_errl = getTargetingTarget(i_fapiTarget, l_pTarget); + if (l_errl) + { + FAPI_ERR("platSetFreqMcaMhz: Error from getTargetingTarget"); + l_rc.setPlatDataPtr(reinterpret_cast<void *> (l_errl)); + } + else + { + /*@ + * @errortype + * @moduleid fapi2::MOD_FAPI2_SET_ATTR_FREQ_MCA_MHZ + * @reasoncode fapi2::RC_SET_ATTR_NOT_VALID + * @userdata1 HUID + * @userdata2 Requested attr value + * @devdesc platSetFreqMcaMhz should never be called + */ + l_errl = new ERRORLOG::ErrlEntry( + ERRORLOG::ERRL_SEV_UNRECOVERABLE, + fapi2::MOD_FAPI2_SET_ATTR_FREQ_MCA_MHZ, + fapi2::RC_SET_ATTR_NOT_VALID, + TARGETING::get_huid(l_pTarget), + i_val, + true); + + FAPI_ERR("platSetFreqMcaMhz: Function should never be called"); + l_rc.setPlatDataPtr(reinterpret_cast<void *> (l_errl)); + } + + return l_rc; +} + } // End platAttrSvc namespace |