summaryrefslogtreecommitdiffstats
path: root/src/import/chips/ocmb/common/procedures/hwp/pmic/lib/utils/pmic_enable_utils.H
diff options
context:
space:
mode:
Diffstat (limited to 'src/import/chips/ocmb/common/procedures/hwp/pmic/lib/utils/pmic_enable_utils.H')
-rw-r--r--src/import/chips/ocmb/common/procedures/hwp/pmic/lib/utils/pmic_enable_utils.H183
1 files changed, 80 insertions, 103 deletions
diff --git a/src/import/chips/ocmb/common/procedures/hwp/pmic/lib/utils/pmic_enable_utils.H b/src/import/chips/ocmb/common/procedures/hwp/pmic/lib/utils/pmic_enable_utils.H
index ba93774bb..835eb907c 100644
--- a/src/import/chips/ocmb/common/procedures/hwp/pmic/lib/utils/pmic_enable_utils.H
+++ b/src/import/chips/ocmb/common/procedures/hwp/pmic/lib/utils/pmic_enable_utils.H
@@ -63,7 +63,8 @@ enum enable_mode
/// @brief pointer to PMIC attribute getters for DIMM target
typedef fapi2::ReturnCode (*pmic_attr_ptr)(const fapi2::Target<fapi2::TARGET_TYPE_DIMM>& i_target, uint8_t& o_value);
-
+typedef fapi2::ReturnCode (*pmic_attr_ptr_signed)(const fapi2::Target<fapi2::TARGET_TYPE_DIMM>& i_target,
+ int8_t& o_value);
// Pointers below allow for run-time attribute getter selection by PMIC ID (0,1)
// Voltage Setting
@@ -111,49 +112,27 @@ static constexpr pmic_attr_ptr get_swd_voltage_range_select[] =
};
// Voltage Offset
-static constexpr pmic_attr_ptr get_swa_voltage_offset[] =
+static constexpr pmic_attr_ptr_signed get_swa_voltage_offset[] =
{
mss::attr::get_pmic0_swa_voltage_offset,
mss::attr::get_pmic1_swa_voltage_offset
};
-static constexpr pmic_attr_ptr get_swb_voltage_offset[] =
+static constexpr pmic_attr_ptr_signed get_swb_voltage_offset[] =
{
mss::attr::get_pmic0_swb_voltage_offset,
mss::attr::get_pmic1_swb_voltage_offset
};
-static constexpr pmic_attr_ptr get_swc_voltage_offset[] =
+static constexpr pmic_attr_ptr_signed get_swc_voltage_offset[] =
{
mss::attr::get_pmic0_swc_voltage_offset,
mss::attr::get_pmic1_swc_voltage_offset
};
-static constexpr pmic_attr_ptr get_swd_voltage_offset[] =
+static constexpr pmic_attr_ptr_signed get_swd_voltage_offset[] =
{
mss::attr::get_pmic0_swd_voltage_offset,
mss::attr::get_pmic1_swd_voltage_offset
};
-// Voltage Offset Direction
-static constexpr pmic_attr_ptr get_swa_voltage_offset_direction[] =
-{
- mss::attr::get_pmic0_swa_voltage_offset_direction,
- mss::attr::get_pmic1_swa_voltage_offset_direction
-};
-static constexpr pmic_attr_ptr get_swb_voltage_offset_direction[] =
-{
- mss::attr::get_pmic0_swb_voltage_offset_direction,
- mss::attr::get_pmic1_swb_voltage_offset_direction
-};
-static constexpr pmic_attr_ptr get_swc_voltage_offset_direction[] =
-{
- mss::attr::get_pmic0_swc_voltage_offset_direction,
- mss::attr::get_pmic1_swc_voltage_offset_direction
-};
-static constexpr pmic_attr_ptr get_swd_voltage_offset_direction[] =
-{
- mss::attr::get_pmic0_swd_voltage_offset_direction,
- mss::attr::get_pmic1_swd_voltage_offset_direction
-};
-
// Sequence Delay
static constexpr pmic_attr_ptr get_swa_sequence_delay[] =
{
@@ -205,8 +184,35 @@ static constexpr pmic_attr_ptr get_phase_comb[] =
mss::attr::get_pmic1_phase_comb
};
+// EFD Fields
+
+// Offset
+static constexpr pmic_attr_ptr_signed get_efd_swa_voltage_offset[] =
+{
+ mss::attr::get_efd_pmic0_swa_voltage_offset,
+ mss::attr::get_efd_pmic1_swa_voltage_offset
+};
+
+static constexpr pmic_attr_ptr_signed get_efd_swb_voltage_offset[] =
+{
+ mss::attr::get_efd_pmic0_swb_voltage_offset,
+ mss::attr::get_efd_pmic1_swb_voltage_offset
+};
+
+static constexpr pmic_attr_ptr_signed get_efd_swc_voltage_offset[] =
+{
+ mss::attr::get_efd_pmic0_swc_voltage_offset,
+ mss::attr::get_efd_pmic1_swc_voltage_offset
+};
+
+static constexpr pmic_attr_ptr_signed get_efd_swd_voltage_offset[] =
+{
+ mss::attr::get_efd_pmic0_swd_voltage_offset,
+ mss::attr::get_efd_pmic1_swd_voltage_offset
+};
+
// These arrays allow us to dynamically choose the right attribute getter at runtime based on the rail and mss::pmic::id
-static const pmic_attr_ptr* l_get_volt_setting[] =
+static const pmic_attr_ptr* get_volt_setting[] =
{
mss::pmic::get_swa_voltage_setting,
mss::pmic::get_swb_voltage_setting,
@@ -214,7 +220,7 @@ static const pmic_attr_ptr* l_get_volt_setting[] =
mss::pmic::get_swd_voltage_setting
};
-static const pmic_attr_ptr* l_get_volt_range_select[] =
+static const pmic_attr_ptr* get_volt_range_select[] =
{
mss::pmic::get_swa_voltage_range_select,
mss::pmic::get_swb_voltage_range_select,
@@ -222,7 +228,7 @@ static const pmic_attr_ptr* l_get_volt_range_select[] =
mss::pmic::get_swd_voltage_range_select
};
-static const pmic_attr_ptr* l_get_volt_offset[] =
+static const pmic_attr_ptr_signed* get_volt_offset[] =
{
mss::pmic::get_swa_voltage_offset,
mss::pmic::get_swb_voltage_offset,
@@ -230,12 +236,13 @@ static const pmic_attr_ptr* l_get_volt_offset[] =
mss::pmic::get_swd_voltage_offset
};
-static const pmic_attr_ptr* l_get_volt_offset_direction[] =
+// EFD Offset + Direction functions
+static const pmic_attr_ptr_signed* get_efd_volt_offset[] =
{
- mss::pmic::get_swa_voltage_offset_direction,
- mss::pmic::get_swb_voltage_offset_direction,
- mss::pmic::get_swc_voltage_offset_direction,
- mss::pmic::get_swd_voltage_offset_direction
+ mss::pmic::get_efd_swa_voltage_offset,
+ mss::pmic::get_efd_swb_voltage_offset,
+ mss::pmic::get_efd_swc_voltage_offset,
+ mss::pmic::get_efd_swd_voltage_offset
};
// For output traces
@@ -244,6 +251,8 @@ static const std::vector<const char*> PMIC_RAIL_NAMES = {"SWA", "SWB", "SWC", "S
// Attribute setter FP type
typedef fapi2::ReturnCode (*pmic_attr_setter_ptr)(const fapi2::Target<fapi2::TARGET_TYPE_DIMM>& i_target,
uint8_t i_value);
+typedef fapi2::ReturnCode (*pmic_attr_setter_ptr_signed)(const fapi2::Target<fapi2::TARGET_TYPE_DIMM>& i_target,
+ int8_t i_value);
// Voltage Setting
static constexpr pmic_attr_setter_ptr set_swa_voltage_setting[] =
@@ -290,49 +299,27 @@ static constexpr pmic_attr_setter_ptr set_swd_voltage_range_select[] =
};
// Voltage Offset
-static constexpr pmic_attr_setter_ptr set_swa_voltage_offset[] =
+static constexpr pmic_attr_setter_ptr_signed set_swa_voltage_offset[] =
{
mss::attr::set_pmic0_swa_voltage_offset,
mss::attr::set_pmic1_swa_voltage_offset
};
-static constexpr pmic_attr_setter_ptr set_swb_voltage_offset[] =
+static constexpr pmic_attr_setter_ptr_signed set_swb_voltage_offset[] =
{
mss::attr::set_pmic0_swb_voltage_offset,
mss::attr::set_pmic1_swb_voltage_offset
};
-static constexpr pmic_attr_setter_ptr set_swc_voltage_offset[] =
+static constexpr pmic_attr_setter_ptr_signed set_swc_voltage_offset[] =
{
mss::attr::set_pmic0_swc_voltage_offset,
mss::attr::set_pmic1_swc_voltage_offset
};
-static constexpr pmic_attr_setter_ptr set_swd_voltage_offset[] =
+static constexpr pmic_attr_setter_ptr_signed set_swd_voltage_offset[] =
{
mss::attr::set_pmic0_swd_voltage_offset,
mss::attr::set_pmic1_swd_voltage_offset
};
-// Voltage Offset Direction
-static constexpr pmic_attr_setter_ptr set_swa_voltage_offset_direction[] =
-{
- mss::attr::set_pmic0_swa_voltage_offset_direction,
- mss::attr::set_pmic1_swa_voltage_offset_direction
-};
-static constexpr pmic_attr_setter_ptr set_swb_voltage_offset_direction[] =
-{
- mss::attr::set_pmic0_swb_voltage_offset_direction,
- mss::attr::set_pmic1_swb_voltage_offset_direction
-};
-static constexpr pmic_attr_setter_ptr set_swc_voltage_offset_direction[] =
-{
- mss::attr::set_pmic0_swc_voltage_offset_direction,
- mss::attr::set_pmic1_swc_voltage_offset_direction
-};
-static constexpr pmic_attr_setter_ptr set_swd_voltage_offset_direction[] =
-{
- mss::attr::set_pmic0_swd_voltage_offset_direction,
- mss::attr::set_pmic1_swd_voltage_offset_direction
-};
-
// Sequence Delay
static constexpr pmic_attr_setter_ptr set_swa_sequence_delay[] =
{
@@ -384,40 +371,30 @@ static constexpr pmic_attr_setter_ptr set_phase_comb[] =
mss::attr::set_pmic1_phase_comb
};
-// TK - these will be needed in the next commit (pmic_bias).
-
-// These arrays allow us to dynamically choose the right attribute setter at runtime based on the rail and mss::pmic::id
-// static const pmic_attr_setter_ptr* l_set_volt_setting[] =
-// {
-// mss::pmic::set_swa_voltage_setting,
-// mss::pmic::set_swb_voltage_setting,
-// mss::pmic::set_swc_voltage_setting,
-// mss::pmic::set_swd_voltage_setting
-// };
-
-// static const pmic_attr_setter_ptr* l_set_volt_range_select[] =
-// {
-// mss::pmic::set_swa_voltage_range_select,
-// mss::pmic::set_swb_voltage_range_select,
-// mss::pmic::set_swc_voltage_range_select,
-// mss::pmic::set_swd_voltage_range_select
-// };
-
-// static const pmic_attr_setter_ptr* l_set_volt_offset[] =
-// {
-// mss::pmic::set_swa_voltage_offset,
-// mss::pmic::set_swb_voltage_offset,
-// mss::pmic::set_swc_voltage_offset,
-// mss::pmic::set_swd_voltage_offset
-// };
-
-// static const pmic_attr_setter_ptr* l_set_volt_offset_direction[] =
-// {
-// mss::pmic::set_swa_voltage_offset_direction,
-// mss::pmic::set_swb_voltage_offset_direction,
-// mss::pmic::set_swc_voltage_offset_direction,
-// mss::pmic::set_swd_voltage_offset_direction
-// };
+// Offset
+static constexpr pmic_attr_setter_ptr_signed set_efd_swa_voltage_offset[] =
+{
+ mss::attr::set_efd_pmic0_swa_voltage_offset,
+ mss::attr::set_efd_pmic1_swa_voltage_offset
+};
+
+static constexpr pmic_attr_setter_ptr_signed set_efd_swb_voltage_offset[] =
+{
+ mss::attr::set_efd_pmic0_swb_voltage_offset,
+ mss::attr::set_efd_pmic1_swb_voltage_offset
+};
+
+static constexpr pmic_attr_setter_ptr_signed set_efd_swc_voltage_offset[] =
+{
+ mss::attr::set_efd_pmic0_swc_voltage_offset,
+ mss::attr::set_efd_pmic1_swc_voltage_offset
+};
+
+static constexpr pmic_attr_setter_ptr_signed set_efd_swd_voltage_offset[] =
+{
+ mss::attr::set_efd_pmic0_swd_voltage_offset,
+ mss::attr::set_efd_pmic1_swd_voltage_offset
+};
//-----------------------------------
// SPD Biasing functions
@@ -521,16 +498,16 @@ inline fapi2::ReturnCode calculate_voltage_write_buffer(
fapi2::buffer<uint8_t>& o_volt_buffer)
{
uint8_t l_volt = 0;
- uint8_t l_volt_offset = 0;
- uint8_t l_volt_offset_direction = 0;
+ int8_t l_volt_offset = 0;
+ int8_t l_efd_volt_offset = 0;
// Get the attributes corresponding to the rail and PMIC indices
- FAPI_TRY(l_get_volt_setting[i_rail][i_id](i_dimm_target, l_volt));
- FAPI_TRY(l_get_volt_offset[i_rail][i_id](i_dimm_target, l_volt_offset));
- FAPI_TRY(l_get_volt_offset_direction[i_rail][i_id](i_dimm_target, l_volt_offset_direction));
+ FAPI_TRY(get_volt_setting[i_rail][i_id](i_dimm_target, l_volt));
+ FAPI_TRY(get_volt_offset[i_rail][i_id](i_dimm_target, l_volt_offset));
+ FAPI_TRY(get_efd_volt_offset[i_rail][i_id](i_dimm_target, l_efd_volt_offset));
- o_volt_buffer = (l_volt_offset_direction == CONSTS::OFFSET_PLUS) ?
- l_volt + l_volt_offset : l_volt - l_volt_offset;
+ // Set output buffer
+ o_volt_buffer = l_volt + l_volt_offset + l_efd_volt_offset;
fapi_try_exit:
return fapi2::current_err;
@@ -603,7 +580,7 @@ inline fapi2::ReturnCode bias_with_spd_voltages<mss::pmic::vendor::TI>(
bool l_overflow = false;
uint8_t l_volt_range_select = 0;
- FAPI_TRY(l_get_volt_range_select[l_rail_index][i_id](i_dimm_target, l_volt_range_select));
+ FAPI_TRY(get_volt_range_select[l_rail_index][i_id](i_dimm_target, l_volt_range_select));
// SWD supports a RANGE 1, but NOT SWA-C
if (l_rail_index == mss::pmic::rail::SWD)
OpenPOWER on IntegriCloud