Skip to content

Commit

Permalink
pmic status tool updates
Browse files Browse the repository at this point in the history
added checks for when items are applicable
added in power reporting
added in voltage reporting
added in ADC data reporting
added in temperature reporting

Change-Id: I764d28c93bf097369d1e060a09178bb672b8002e
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/85181
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@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: Louis Stermole <stermole@us.ibm.com>
Reviewed-by: STEPHEN GLANCY <sglancy@us.ibm.com>
Reviewed-by: Mark Pizzutillo <mark.pizzutillo@ibm.com>
Reviewed-by: Jennifer A Stofer <stofer@us.ibm.com>
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/85186
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>
  • Loading branch information
pardeik authored and crgeddes committed Oct 28, 2019
1 parent 8b1553d commit 333d66b
Show file tree
Hide file tree
Showing 3 changed files with 80 additions and 14 deletions.
37 changes: 36 additions & 1 deletion src/import/chips/ocmb/common/include/pmic_regs_fld.H
Expand Up @@ -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
Expand Up @@ -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
{

Expand Down
Expand Up @@ -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>;
Expand All @@ -69,39 +69,39 @@ 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[] =
{
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[] =
{
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] =
{
{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] =
{
{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},
};

///
Expand Down Expand Up @@ -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
{

Expand All @@ -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"},
}
},

Expand All @@ -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"},
}
},

Expand All @@ -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"},
}
}
};
Expand All @@ -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"},
}
},

Expand All @@ -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"},
}
},

Expand All @@ -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"},
}
},

Expand All @@ -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"},
}
}
};
Expand Down

0 comments on commit 333d66b

Please sign in to comment.