diff options
author | Mark Pizzutillo <Mark.Pizzutillo@ibm.com> | 2019-04-10 17:25:23 -0400 |
---|---|---|
committer | Christian R. Geddes <crgeddes@us.ibm.com> | 2019-05-29 15:21:13 -0500 |
commit | ee52194d04b1a2449e49cb759ea0e7e82bb1b75a (patch) | |
tree | a972edd0ab2bc746a6f92f6abd150af07988988d /src/import/chips/ocmb/common/procedures/hwp/pmic/pmic_bias.C | |
parent | 678ca9786f8a7425db0b7d43331d074220d96794 (diff) | |
download | talos-hostboot-ee52194d04b1a2449e49cb759ea0e7e82bb1b75a.tar.gz talos-hostboot-ee52194d04b1a2449e49cb759ea0e7e82bb1b75a.zip |
Add code for PMIC bias procedure & UTs
Change-Id: I351c74f73624f46b195d37efbf407e1ff95006bf
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/77317
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Tested-by: HWSV CI <hwsv-ci+hostboot@us.ibm.com>
Reviewed-by: Louis Stermole <stermole@us.ibm.com>
Reviewed-by: STEPHEN GLANCY <sglancy@us.ibm.com>
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com>
Reviewed-by: Thi N. Tran <thi@us.ibm.com>
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/77775
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Reviewed-by: Christian R. Geddes <crgeddes@us.ibm.com>
Diffstat (limited to 'src/import/chips/ocmb/common/procedures/hwp/pmic/pmic_bias.C')
-rw-r--r-- | src/import/chips/ocmb/common/procedures/hwp/pmic/pmic_bias.C | 58 |
1 files changed, 55 insertions, 3 deletions
diff --git a/src/import/chips/ocmb/common/procedures/hwp/pmic/pmic_bias.C b/src/import/chips/ocmb/common/procedures/hwp/pmic/pmic_bias.C index a8da82dcd..c0b65f3ba 100644 --- a/src/import/chips/ocmb/common/procedures/hwp/pmic/pmic_bias.C +++ b/src/import/chips/ocmb/common/procedures/hwp/pmic/pmic_bias.C @@ -30,11 +30,20 @@ // *HWP HWP Owner: Mark Pizzutillo <mark.pizzutillo@ibm.com> // *HWP HWP Backup: Louis Stermole <stermole@us.ibm.com> // *HWP Team: Memory -// *HWP Level: 1 +// *HWP Level: 2 // *HWP Consumed by: FSP:HB #include <fapi2.H> #include <lib/utils/pmic_bias_utils.H> +#include <lib/utils/pmic_common_utils.H> +#include <pmic_bias.H> +#include <generic/memory/lib/utils/find.H> +#include <lib/i2c/i2c_pmic.H> +#include <pmic_regs.H> +#include <pmic_regs_fld.H> +#include <lib/utils/pmic_bias_utils.H> +#include <lib/utils/pmic_consts.H> +#include <generic/memory/lib/utils/c_str.H> extern "C" { @@ -42,6 +51,7 @@ extern "C" /// @brief Bias procedure for PMIC devices /// /// @param[in] i_ocmb_target explorer target + /// @param[in] i_id the PMIC to change (PMIC0,PMIC1) /// @param[in] i_setting setting to change (swa_volt, swb_volt, etc.) /// @param[in] i_amount amount to change by /// @param[in] i_unit percentage or value @@ -49,12 +59,54 @@ extern "C" /// @return fapi2::ReturnCode FAPI2_RC_SUCCESS iff success /// fapi2::ReturnCode pmic_bias(const fapi2::Target<fapi2::TARGET_TYPE_OCMB_CHIP>& i_ocmb_target, + const mss::pmic::id i_id, const mss::pmic::setting i_setting, const float i_amount, const mss::pmic::unit i_unit, const bool i_force) { - // TK - L1 implementation, function not filled in yet + // Check that our inputs are valid + FAPI_ASSERT(i_id != mss::pmic::id::UNKNOWN_ID, + fapi2::PMIC_NO_PMIC_SPECIFIED() + .set_TARGET(i_ocmb_target) + .set_PMIC_ID(uint8_t(i_id)), + "pmic_bias(): PMIC ID %u was unknown for bias procedure call on OCMB %s", + uint8_t(i_id), i_ocmb_target); + + FAPI_ASSERT(i_setting != mss::pmic::setting::NO_SETTING, + fapi2::PMIC_NO_SETTING_SPECIFIED() + .set_TARGET(i_ocmb_target) + .set_SETTING_ID(uint8_t(i_setting)), + "pmic_bias(): PMIC setting ID %u was unknown for bias procedure call on OCMB %s", + uint8_t(i_setting), i_ocmb_target); + + FAPI_ASSERT(i_unit != mss::pmic::unit::NO_UNIT, + fapi2::PMIC_NO_UNIT_SPECIFIED() + .set_TARGET(i_ocmb_target) + .set_UNIT_ID(uint8_t(i_unit)), + "pmic_bias(): Biasing unit ID %u was unknown for bias procedure call on OCMB %s", + uint8_t(i_unit), i_ocmb_target); + + for (const auto& l_pmic : mss::find_targets<fapi2::TARGET_TYPE_PMIC>(i_ocmb_target)) + { + // If matching ID (pmic0, pmic1), then we will bias it + if ((mss::index(l_pmic) % mss::pmic::consts<mss::pmic::product::JEDEC_COMPLIANT>::NUM_UNIQUE_PMICS) == i_id) + { + // Poll to make sure PBULK reports good, then we can be sure we can write/read registers + FAPI_TRY(mss::pmic::poll_for_pbulk_good(l_pmic), + "pmic_enable: poll for pbulk good either failed, or returned not good status on PMIC %s", + mss::c_str(l_pmic)); + + FAPI_INF("Performing BIAS on PMIC %s", mss::c_str(l_pmic)); + + // Now call the bias function + FAPI_TRY(mss::pmic::bias_chip(l_pmic, i_setting, i_amount, i_unit, i_force), + "Error biasing PMIC %s", mss::c_str(l_pmic)); + } + } + return fapi2::FAPI2_RC_SUCCESS; + fapi_try_exit: + return fapi2::current_err; } -} +} // extern C |