summaryrefslogtreecommitdiffstats
path: root/src/import
diff options
context:
space:
mode:
Diffstat (limited to 'src/import')
-rw-r--r--src/import/chips/ocmb/common/include/pmic_regs_fld.H37
-rw-r--r--src/import/chips/ocmb/common/procedures/hwp/pmic/lib/utils/pmic_common_utils.C22
-rw-r--r--src/import/chips/ocmb/common/procedures/hwp/pmic/lib/utils/pmic_common_utils.H35
3 files changed, 80 insertions, 14 deletions
diff --git a/src/import/chips/ocmb/common/include/pmic_regs_fld.H b/src/import/chips/ocmb/common/include/pmic_regs_fld.H
index 16946f491..cd4ee9532 100644
--- a/src/import/chips/ocmb/common/include/pmic_regs_fld.H
+++ b/src/import/chips/ocmb/common/include/pmic_regs_fld.H
@@ -133,12 +133,47 @@ struct pmicFields<mss::pmic::product::JEDEC_COMPLIANT>
static constexpr uint8_t R0B_SWC_OUTPUT_UNDER_VOLTAGE_LOCKOUT_STATUS = 0x01;
static constexpr uint8_t R0B_SWD_OUTPUT_UNDER_VOLTAGE_LOCKOUT_STATUS = 0x00;
- // 0x14
+ // R14
static constexpr uint8_t R14_GLOBAL_CLEAR_STATUS = 0x00;
+ // R1A
+ static constexpr uint8_t R1A_OUTPUT_POWER_SELECT = 0x01;
+
+ // R1B
+ static constexpr uint8_t R1B_CURRENT_OR_POWER_METER_SELECT = 0x06;
+
+ // R2B - bit positions flipped (0 is for bit7, 1 is for bit6, etc)
+ static constexpr uint8_t R2B_LDO_1P8_VOLT_SETTING_START = 0x00;
+ static constexpr uint8_t R2B_LDO_1P8_VOLT_SETTING_LENGTH = 0x02;
+ static constexpr uint8_t R2B_LDO_1P0_VOLT_SETTING_START = 0x05;
+ static constexpr uint8_t R2B_LDO_1P0_VOLT_SETTING_LENGTH = 0x02;
+
+ // R2F
+ static constexpr uint8_t R2F_SWA_REGULATOR_CONTROL = 0x06;
+ static constexpr uint8_t R2F_SWB_REGULATOR_CONTROL = 0x05;
+ static constexpr uint8_t R2F_SWC_REGULATOR_CONTROL = 0x04;
+ static constexpr uint8_t R2F_SWD_REGULATOR_CONTROL = 0x03;
+
+ // R4F
+ static constexpr uint8_t R4F_SWA_SWB_PHASE_MODE_SELECT = 0x00;
+
+ // R30 - bit positions flipped (0 is for bit7, 1 is for bit6, etc)
+ static constexpr uint8_t R30_ADC_ENABLE = 0x00;
+ static constexpr uint8_t R30_ADC_SELECT_START = 0x01;
+ static constexpr uint8_t R30_ADC_SELECT_LENGTH = 0x04;
+
+ // R31 - bit positions flipped (0 is for bit7, 1 is for bit6, etc)
+ static constexpr uint8_t R31_ADC_READ_SETTING_START = 0x00;
+ static constexpr uint8_t R31_ADC_READ_SETTING_LENGTH = 0x08;
+
+ // R33 - bit positions flipped (0 is for bit7, 1 is for bit6, etc)
+ static constexpr uint8_t R33_TEMPERATURE_SETTING_START = 0x00;
+ static constexpr uint8_t R33_TEMPERATURE_SETTING_LENGTH = 0x03;
+
static constexpr uint8_t DELAY_FLD_LENGTH = 3;
static constexpr uint8_t VOLTAGE_SETTING_START = 0;
static constexpr uint8_t VOLTAGE_SETTING_LENGTH = 7;
+
};
#endif
diff --git a/src/import/chips/ocmb/common/procedures/hwp/pmic/lib/utils/pmic_common_utils.C b/src/import/chips/ocmb/common/procedures/hwp/pmic/lib/utils/pmic_common_utils.C
index fe5e54c0d..f89559dde 100644
--- a/src/import/chips/ocmb/common/procedures/hwp/pmic/lib/utils/pmic_common_utils.C
+++ b/src/import/chips/ocmb/common/procedures/hwp/pmic/lib/utils/pmic_common_utils.C
@@ -167,6 +167,28 @@ fapi_try_exit:
return fapi2::current_err;
}
+///
+/// @brief Check if PMIC is TI vendor
+///
+/// @param[in] i_pmic_target PMIC target
+/// @param[out] o_is_ti true/false
+/// @return fapi2::ReturnCode FAPI2_RC_SUCCESS iff success, else error code
+/// @note Can't unit test this properly as R3D is hardcoded in simics
+///
+fapi2::ReturnCode pmic_is_ti(const fapi2::Target<fapi2::TARGET_TYPE_PMIC>& i_pmic_target, bool& o_is_ti)
+{
+ o_is_ti = false;
+ using REGS = pmicRegs<mss::pmic::product::JEDEC_COMPLIANT>;
+ fapi2::buffer<uint8_t> l_reg_contents;
+
+ FAPI_TRY(mss::pmic::i2c::reg_read(i_pmic_target, REGS::R3D_VENDOR_ID_BYTE_1, l_reg_contents));
+
+ o_is_ti = (l_reg_contents == mss::pmic::vendor::TI_SHORT);
+
+fapi_try_exit:
+ return fapi2::current_err;
+}
+
namespace status
{
diff --git a/src/import/chips/ocmb/common/procedures/hwp/pmic/lib/utils/pmic_common_utils.H b/src/import/chips/ocmb/common/procedures/hwp/pmic/lib/utils/pmic_common_utils.H
index b2a7c60d7..1bc3aea1a 100644
--- a/src/import/chips/ocmb/common/procedures/hwp/pmic/lib/utils/pmic_common_utils.H
+++ b/src/import/chips/ocmb/common/procedures/hwp/pmic/lib/utils/pmic_common_utils.H
@@ -56,7 +56,7 @@ typedef fapi2::ReturnCode (*mfg_id_attr_ptr)(const fapi2::Target<fapi2::TARGET_T
static constexpr mfg_id_attr_ptr get_mfg_id[] =
{
mss::attr::get_pmic0_mfg_id,
- mss::attr::get_pmic1_mfg_id
+ mss::attr::get_pmic1_mfg_id,
};
using REGS = pmicRegs<mss::pmic::product::JEDEC_COMPLIANT>;
@@ -69,7 +69,7 @@ static constexpr uint8_t const VOLT_SETTING_ACTIVE_REGS[] =
REGS::R21_SWA_VOLTAGE_SETTING,
REGS::R23_SWB_VOLTAGE_SETTING,
REGS::R25_SWC_VOLTAGE_SETTING,
- REGS::R27_SWD_VOLTAGE_SETTING
+ REGS::R27_SWD_VOLTAGE_SETTING,
};
static constexpr uint8_t const VOLT_SETTING_VENDOR_REGS[] =
@@ -77,7 +77,7 @@ static constexpr uint8_t const VOLT_SETTING_VENDOR_REGS[] =
REGS::R45_SWA_VOLTAGE_SETTING,
REGS::R47_SWB_VOLTAGE_SETTING,
REGS::R49_SWC_VOLTAGE_SETTING,
- REGS::R4B_SWD_VOLTAGE_SETTING
+ REGS::R4B_SWD_VOLTAGE_SETTING,
};
static constexpr uint8_t const VOLT_RANGE_FLDS[] =
@@ -85,7 +85,7 @@ static constexpr uint8_t const VOLT_RANGE_FLDS[] =
FIELDS::SWA_VOLTAGE_RANGE,
FIELDS::SWB_VOLTAGE_RANGE,
FIELDS::SWC_VOLTAGE_RANGE,
- FIELDS::SWD_VOLTAGE_RANGE
+ FIELDS::SWD_VOLTAGE_RANGE,
};
static constexpr uint32_t const VOLT_RANGE_MINS[][CONSTS::NUM_RANGES] =
@@ -93,7 +93,7 @@ static constexpr uint32_t const VOLT_RANGE_MINS[][CONSTS::NUM_RANGES] =
{CONSTS::SWABC_VOLT_RANGE0_MIN, CONSTS::SWABC_VOLT_RANGE1_MIN},
{CONSTS::SWABC_VOLT_RANGE0_MIN, CONSTS::SWABC_VOLT_RANGE1_MIN},
{CONSTS::SWABC_VOLT_RANGE0_MIN, CONSTS::SWABC_VOLT_RANGE1_MIN},
- {CONSTS::SWD_VOLT_RANGE0_MIN, CONSTS::SWD_VOLT_RANGE1_MIN}
+ {CONSTS::SWD_VOLT_RANGE0_MIN, CONSTS::SWD_VOLT_RANGE1_MIN},
};
static constexpr uint32_t const VOLT_RANGE_MAXES[][CONSTS::NUM_RANGES] =
@@ -101,7 +101,7 @@ static constexpr uint32_t const VOLT_RANGE_MAXES[][CONSTS::NUM_RANGES] =
{CONSTS::SWABC_VOLT_RANGE0_MAX, CONSTS::SWABC_VOLT_RANGE1_MAX},
{CONSTS::SWABC_VOLT_RANGE0_MAX, CONSTS::SWABC_VOLT_RANGE1_MAX},
{CONSTS::SWABC_VOLT_RANGE0_MAX, CONSTS::SWABC_VOLT_RANGE1_MAX},
- {CONSTS::SWD_VOLT_RANGE0_MAX, CONSTS::SWD_VOLT_RANGE1_MAX}
+ {CONSTS::SWD_VOLT_RANGE0_MAX, CONSTS::SWD_VOLT_RANGE1_MAX},
};
///
@@ -168,6 +168,15 @@ fapi2::ReturnCode lock_vendor_region(const fapi2::Target<fapi2::TargetType::TARG
///
fapi2::ReturnCode pmic_is_idt(const fapi2::Target<fapi2::TARGET_TYPE_PMIC>& i_pmic_target, bool& o_is_idt);
+///
+/// @brief Check if PMIC is TI vendor
+///
+/// @param[in] i_pmic_target PMIC target
+/// @param[out] o_is_ti true/false
+/// @return fapi2::ReturnCode FAPI2_RC_SUCCESS iff success, else error code
+///
+fapi2::ReturnCode pmic_is_ti(const fapi2::Target<fapi2::TARGET_TYPE_PMIC>& i_pmic_target, bool& o_is_ti);
+
namespace status
{
@@ -187,7 +196,7 @@ static const std::vector<std::pair<uint8_t, std::vector<status_field>>> IDT_SPEC
{ {FIELDS::R04_GLOBAL_ERROR_COUNT, "GLOBAL_ERROR_COUNT: >1 error count since last erase operation"},
{FIELDS::R04_GLOBAL_ERROR_LOG_BUCK_OV_OR_UV, "GLOBAL_ERROR_LOG: BUCK OV/UV: Error occurred"},
{FIELDS::R04_GLOBAL_ERROR_LOG_VIN_BULK_OVER_VOLTAGE, "GLOBAL_ERROR_LOG: VIN_BULK_OVER_VOLTAGE"},
- {FIELDS::R04_GLOBAL_ERROR_LOG_CRITICAL_TEMPERATURE, "GLOBAL_ERROR_LOG: CRITICAL_TEMPERATURE"}
+ {FIELDS::R04_GLOBAL_ERROR_LOG_CRITICAL_TEMPERATURE, "GLOBAL_ERROR_LOG: CRITICAL_TEMPERATURE"},
}
},
@@ -196,7 +205,7 @@ static const std::vector<std::pair<uint8_t, std::vector<status_field>>> IDT_SPEC
{ {FIELDS::R05_SWA_POWER_GOOD, "PMIC POWER ON: SWA_PWR_NOT_GOOD"},
{FIELDS::R05_SWB_POWER_GOOD, "PMIC POWER ON: SWB_PWR_NOT_GOOD"},
{FIELDS::R05_SWC_POWER_GOOD, "PMIC POWER ON: SWC_PWR_NOT_GOOD"},
- {FIELDS::R05_SWD_POWER_GOOD, "PMIC POWER ON: SWD_PWR_NOT_GOOD"}
+ {FIELDS::R05_SWD_POWER_GOOD, "PMIC POWER ON: SWD_PWR_NOT_GOOD"},
}
},
@@ -209,7 +218,7 @@ static const std::vector<std::pair<uint8_t, std::vector<status_field>>> IDT_SPEC
{FIELDS::R06_SWA_OVER_VOLTAGE, "SWA_OVER_VOLTAGE"},
{FIELDS::R06_SWB_OVER_VOLTAGE, "SWB_OVER_VOLTAGE"},
{FIELDS::R06_SWC_OVER_VOLTAGE, "SWC_OVER_VOLTAGE"},
- {FIELDS::R06_SWD_OVER_VOLTAGE, "SWD_OVER_VOLTAGE"}
+ {FIELDS::R06_SWD_OVER_VOLTAGE, "SWD_OVER_VOLTAGE"},
}
}
};
@@ -228,7 +237,7 @@ static const std::vector<std::pair<uint8_t, std::vector<status_field>>> STATUS_F
{FIELDS::R08_SWC_PWR_GOOD_STATUS, "SWC_PWR_NOT_GOOD"},
{FIELDS::R08_SWD_PWR_GOOD_STATUS, "SWD_PWR_NOT_GOOD"},
{FIELDS::R08_VIN_MGMT_INPUT_OVER_VOLTAGE, "VIN_MGMT_INPUT_OVER_VOLTAGE"},
- {FIELDS::R08_VIN_BULK_INPUT_OVER_VOLTAGE, "VIN_BULK_INPUT_OVER_VOLTAGE"}
+ {FIELDS::R08_VIN_BULK_INPUT_OVER_VOLTAGE, "VIN_BULK_INPUT_OVER_VOLTAGE"},
}
},
@@ -241,7 +250,7 @@ static const std::vector<std::pair<uint8_t, std::vector<status_field>>> STATUS_F
{FIELDS::R09_SWA_HIGH_OUTPUT_CURRENT_CONSUMPTION_WARNING_STATUS, "SWA_HIGH_OUTPUT_CURRENT_CONSUMPTION_WARNING"},
{FIELDS::R09_SWB_HIGH_OUTPUT_CURRENT_CONSUMPTION_WARNING_STATUS, "SWB_HIGH_OUTPUT_CURRENT_CONSUMPTION_WARNING"},
{FIELDS::R09_SWC_HIGH_OUTPUT_CURRENT_CONSUMPTION_WARNING_STATUS, "SWC_HIGH_OUTPUT_CURRENT_CONSUMPTION_WARNING"},
- {FIELDS::R09_SWD_HIGH_OUTPUT_CURRENT_CONSUMPTION_WARNING_STATUS, "SWD_HIGH_OUTPUT_CURRENT_CONSUMPTION_WARNING"}
+ {FIELDS::R09_SWD_HIGH_OUTPUT_CURRENT_CONSUMPTION_WARNING_STATUS, "SWD_HIGH_OUTPUT_CURRENT_CONSUMPTION_WARNING"},
}
},
@@ -253,7 +262,7 @@ static const std::vector<std::pair<uint8_t, std::vector<status_field>>> STATUS_F
{FIELDS::R0A_SWD_OUTPUT_OVER_VOLTAGE_STATUS, "SWD_OUTPUT_OVER_VOLTAGE"},
{FIELDS::R0A_PEC_ERROR_STATUS, "PEC_ERROR"},
{FIELDS::R0A_PARITY_ERROR_STATUS, "PARITY_ERROR"},
- {FIELDS::R0A_IBI_STATUS, "PENDING_IBI"}
+ {FIELDS::R0A_IBI_STATUS, "PENDING_IBI"},
}
},
@@ -266,7 +275,7 @@ static const std::vector<std::pair<uint8_t, std::vector<status_field>>> STATUS_F
{FIELDS::R0B_SWA_OUTPUT_UNDER_VOLTAGE_LOCKOUT_STATUS , "SWA_OUTPUT_UNDER_VOLTAGE_LOCKOUT"},
{FIELDS::R0B_SWB_OUTPUT_UNDER_VOLTAGE_LOCKOUT_STATUS , "SWB_OUTPUT_UNDER_VOLTAGE_LOCKOUT"},
{FIELDS::R0B_SWC_OUTPUT_UNDER_VOLTAGE_LOCKOUT_STATUS , "SWC_OUTPUT_UNDER_VOLTAGE_LOCKOUT"},
- {FIELDS::R0B_SWD_OUTPUT_UNDER_VOLTAGE_LOCKOUT_STATUS , "SWD_OUTPUT_UNDER_VOLTAGE_LOCKOUT"}
+ {FIELDS::R0B_SWD_OUTPUT_UNDER_VOLTAGE_LOCKOUT_STATUS , "SWD_OUTPUT_UNDER_VOLTAGE_LOCKOUT"},
}
}
};
OpenPOWER on IntegriCloud