summaryrefslogtreecommitdiffstats
path: root/src/import/chips/ocmb/common/procedures/hwp/pmic/pmic_bias.C
diff options
context:
space:
mode:
authorMark Pizzutillo <Mark.Pizzutillo@ibm.com>2019-04-10 17:25:23 -0400
committerChristian R. Geddes <crgeddes@us.ibm.com>2019-05-29 15:21:13 -0500
commitee52194d04b1a2449e49cb759ea0e7e82bb1b75a (patch)
treea972edd0ab2bc746a6f92f6abd150af07988988d /src/import/chips/ocmb/common/procedures/hwp/pmic/pmic_bias.C
parent678ca9786f8a7425db0b7d43331d074220d96794 (diff)
downloadtalos-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.C58
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
OpenPOWER on IntegriCloud