diff --git a/meta-facebook/sb-rb/boards/npcm400f_evb.overlay b/meta-facebook/sb-rb/boards/npcm400f_evb.overlay index 87bf0403e5..1e460d462c 100644 --- a/meta-facebook/sb-rb/boards/npcm400f_evb.overlay +++ b/meta-facebook/sb-rb/boards/npcm400f_evb.overlay @@ -51,7 +51,9 @@ }; &i2c6a { - clock-frequency = ; + clock-frequency = ; + scllt = <65>; + sclht = <60>; status = "okay"; multi-master = <1>; wait_free_time = <1000>; diff --git a/meta-facebook/sb-rb/prj.conf b/meta-facebook/sb-rb/prj.conf index 9f32e7e083..c7c45ae2b0 100644 --- a/meta-facebook/sb-rb/prj.conf +++ b/meta-facebook/sb-rb/prj.conf @@ -32,7 +32,7 @@ CONFIG_FLASH_SHELL=y CONFIG_SENSOR=y CONFIG_SENSOR_SHELL=n CONFIG_HWINFO=y -CONFIG_MINIMAL_LIBC_MALLOC_ARENA_SIZE=133120 +CONFIG_MINIMAL_LIBC_MALLOC_ARENA_SIZE=131072 CONFIG_REBOOT=y CONFIG_POSIX_CLOCK=y CONFIG_STACK_SENTINEL=y diff --git a/meta-facebook/sb-rb/src/platform/plat_adc.c b/meta-facebook/sb-rb/src/platform/plat_adc.c index aeae5e9b9b..03715b11c7 100644 --- a/meta-facebook/sb-rb/src/platform/plat_adc.c +++ b/meta-facebook/sb-rb/src/platform/plat_adc.c @@ -756,7 +756,7 @@ void ads7066_mode_init() ads7066_write_reg(0, 0x1, i); // if rainbow board revid >= EVT1B, disable internal Volt reference if (get_asic_board_id() == ASIC_BOARD_ID_RAINBOW && - get_board_rev_id() >= REV_ID_DVT) + get_board_rev_id() >= REV_ID_DVT_FAB3) ads7066_write_reg(0x1, 0x2, i); else ads7066_write_reg(0x1, 0x82, i); diff --git a/meta-facebook/sb-rb/src/platform/plat_class.c b/meta-facebook/sb-rb/src/platform/plat_class.c index 12026416b6..d591d2b9f8 100644 --- a/meta-facebook/sb-rb/src/platform/plat_class.c +++ b/meta-facebook/sb-rb/src/platform/plat_class.c @@ -26,17 +26,19 @@ #include "plat_util.h" #include "plat_mctp.h" #include "plat_hook.h" +#include "plat_gpio.h" LOG_MODULE_REGISTER(plat_class); static uint8_t vr_module = VR_MODULE_UNKNOWN; static uint8_t ubc_module = UBC_MODULE_UNKNOWN; -static uint8_t tmp_module = TMP_TMP432; static uint8_t vr_vendor_module = VENDOR_TYPE_UNKNOWN; static uint8_t mmc_slot = 0; static uint8_t asic_board_id = 0; static uint8_t tray_location = 0; static uint8_t board_rev_id = 0; +static uint8_t tmp_type = TMP_TYPE_UNKNOWN; +static uint8_t asic_type = ASIC_TYPE_UNKNOWN; bool plat_cpld_eerprom_read(uint8_t *data, uint16_t offset, uint8_t len) { @@ -99,6 +101,46 @@ void init_vr_vendor_module(void) LOG_INF("vr_vendor_module=%d (ubc=%d, vr=%d)", vr_vendor_module, ubc_module, vr_module); } +void init_tmp_type() +{ + I2C_MSG i2c_msg = { 0 }; + uint8_t retry = 5; + i2c_msg.bus = I2C_BUS3; + i2c_msg.target_addr = ASIC_MEDHA0_SENSOR0_ADDR; //tmp sensor address + i2c_msg.tx_len = 1; + i2c_msg.rx_len = 1; + i2c_msg.data[0] = 0xFE; //MFG ID REG + + if (i2c_master_read(&i2c_msg, retry)) { + LOG_INF("Assume TMP is EMC1413 by address check"); + tmp_type = TMP_EMC1413; + return; + } else { + LOG_INF("Assume TMP is TMP432 by register check"); + tmp_type = TMP_TMP432; + return; + } +} + +void init_asic_type() +{ + uint8_t rev_id = get_board_rev_id(); + if (rev_id <= REV_ID_DVT_FAB3) { + asic_type = ASIC_TYPE_QCP1; + } else { + // after FAB3: gpio ASIC_TYPE_ID1 and ASIC_TYPE_ID0: 01: qcp1, 10: qcp2 + if (gpio_get(ASIC_TYPE_ID1) == GPIO_LOW && gpio_get(ASIC_TYPE_ID0) == GPIO_HIGH) { + asic_type = ASIC_TYPE_QCP1; + } else if (gpio_get(ASIC_TYPE_ID1) == GPIO_HIGH && + gpio_get(ASIC_TYPE_ID0) == GPIO_LOW) { + asic_type = ASIC_TYPE_QCP2; + } else { + asic_type = ASIC_TYPE_UNKNOWN; + } + } + return; +} + void init_plat_config() { uint8_t module = 0; @@ -113,6 +155,9 @@ void init_plat_config() asic_board_id = board_id & 0x03; init_vr_vendor_module(); change_sensor_cfg(asic_board_id, vr_module, ubc_module, board_rev_id); + // check temp sensor + init_tmp_type(); + check_temp_sensor(tmp_type); // cpld fru offset 0: slot plat_cpld_eerprom_read(&mmc_slot, 0, 1); // mmc slot 1-4 * 0x0A @@ -121,6 +166,7 @@ void init_plat_config() // cpld fru offset 0x3FF: tray location plat_cpld_eerprom_read(&tray_location, 1023, 1); set_delta_ubc_time_of_vout_rise(); + init_asic_type(); LOG_INF("init_plat_eid: 0x%x", init_plat_eid); } @@ -154,6 +200,11 @@ uint8_t get_tray_location() return tray_location; } +uint8_t get_asic_type() +{ + return asic_type; +} + // clang-format off void pal_show_board_types(const struct shell *shell) @@ -171,18 +222,20 @@ void pal_show_board_types(const struct shell *shell) (board_rev_id == REV_ID_EVT1A) ? "REV_ID_EVT1A" : (board_rev_id == REV_ID_EVT1B) ? "REV_ID_EVT1B" : (board_rev_id == REV_ID_EVT2) ? "REV_ID_EVT2" : - (board_rev_id == REV_ID_DVT) ? "REV_ID_DVT" : - (board_rev_id == REV_ID_PVT) ? "REV_ID_PVT" : - (board_rev_id == REV_ID_MP) ? "REV_ID_MP" : + (board_rev_id == REV_ID_DVT_FAB3) ? "REV_ID_DVT_FAB3" : + (board_rev_id == REV_ID_DVT_FAB4) ? "REV_ID_DVT_FAB4" : + (board_rev_id == REV_ID_PVT) ? "REV_ID_PVT" : + (board_rev_id == REV_ID_MP) ? "REV_ID_MP" : "not supported"); } else if (asic_board_id == ASIC_BOARD_ID_RAINBOW) { shell_print(shell, "* BOARD_STAGE: (0x%02X)%s", board_rev_id, (board_rev_id == REV_ID_EVT1A) ? "REV_ID_EVT1A" : (board_rev_id == REV_ID_EVT1B) ? "REV_ID_EVT1B" : (board_rev_id == REV_ID_EVT2) ? "REV_ID_EVT2" : - (board_rev_id == REV_ID_DVT) ? "REV_ID_DVT" : - (board_rev_id == REV_ID_PVT) ? "REV_ID_PVT" : - (board_rev_id == REV_ID_MP) ? "REV_ID_MP" : + (board_rev_id == REV_ID_DVT_FAB3) ? "REV_ID_DVT_FAB3" : + (board_rev_id == REV_ID_DVT_FAB4) ? "REV_ID_DVT_FAB4" : + (board_rev_id == REV_ID_PVT) ? "REV_ID_PVT" : + (board_rev_id == REV_ID_MP) ? "REV_ID_MP" : "not supported"); } @@ -205,12 +258,17 @@ void pal_show_board_types(const struct shell *shell) (vr_module == VR_MODULE_RNS) ? "VR_RNS_RAA229140_RAA228249" : "not supported"); - shell_print(shell, "* TMP_TYPE: (0x%02X)%s", tmp_module, - (tmp_module == TMP_TMP432) ? "TMP_TMP75_TMP432" : "not supported"); + shell_print(shell, "* TMP_TYPE: (0x%02X)%s", tmp_type, + (tmp_type == TMP_TMP432) ? "TMP_TMP75_TMP432" : + (tmp_type == TMP_EMC1413) ? "TMP_TMP75_EMC1413" : "not supported"); shell_print(shell, "* ADC_TYPE: (0x%02X)%s", adc_type, (adc_type == ADI_AD4058) ? "ADI_AD4058" : (adc_type == TIC_ADS7066) ? "TI_ADS7066" : "not supported"); + + shell_print(shell, "* ASIC_TYPE: (0x%02X)%s", asic_type, + (asic_type == ASIC_TYPE_QCP1) ? "ASIC_TYPE_QCP1" : + (asic_type == ASIC_TYPE_QCP2) ? "ASIC_TYPE_QCP2" : "not supported"); shell_print(shell, "* I2C connection for MEDHA0/1 to MMC: Enable"); return; diff --git a/meta-facebook/sb-rb/src/platform/plat_class.h b/meta-facebook/sb-rb/src/platform/plat_class.h index 4a5a80bf7d..331b9c73cc 100644 --- a/meta-facebook/sb-rb/src/platform/plat_class.h +++ b/meta-facebook/sb-rb/src/platform/plat_class.h @@ -45,6 +45,7 @@ enum UBC_MODULE { enum TMP_MODULE { TMP_TMP432, + TMP_EMC1413, TMP_TYPE_UNKNOWN, }; @@ -56,15 +57,20 @@ enum ASIC_BOARD_ID { ASIC_BOARD_ID_UNKNOWN, }; +enum ASIC_TYPE { + ASIC_TYPE_QCP1, + ASIC_TYPE_QCP2, + ASIC_TYPE_UNKNOWN, +}; + enum REV_ID { REV_ID_EVT1A, REV_ID_EVT1B, REV_ID_EVT2, - REV_ID_DVT, + REV_ID_DVT_FAB3, + REV_ID_DVT_FAB4, REV_ID_PVT, REV_ID_MP, - REV_ID_RSVD1, - REV_ID_RSVD2, MAX_REV_ID, }; @@ -75,5 +81,6 @@ uint8_t get_mmc_slot(); uint8_t get_asic_board_id(); uint8_t get_board_rev_id(); uint8_t get_tray_location(); +uint8_t get_asic_type(); bool plat_cpld_eerprom_read(uint8_t *data, uint16_t offset, uint8_t len); #endif diff --git a/meta-facebook/sb-rb/src/platform/plat_gpio.c b/meta-facebook/sb-rb/src/platform/plat_gpio.c index 3ddc55be18..4a3679c5aa 100644 --- a/meta-facebook/sb-rb/src/platform/plat_gpio.c +++ b/meta-facebook/sb-rb/src/platform/plat_gpio.c @@ -53,10 +53,10 @@ GPIO_CFG plat_gpio_cfg[] = { ISR_GPIO_FM_PLD_UBC_EN_R }, // GPIO 1 group { CHIP_GPIO, 8, DISABLE, DISABLE, GPIO_INPUT, GPIO_LOW, PUSH_PULL, GPIO_INT_DISABLE, NULL }, - { CHIP_GPIO, 9, DISABLE, DISABLE, GPIO_INPUT, GPIO_LOW, PUSH_PULL, GPIO_INT_DISABLE, NULL }, + { CHIP_GPIO, 9, ENABLE, DISABLE, GPIO_INPUT, GPIO_LOW, PUSH_PULL, GPIO_INT_DISABLE, NULL }, { CHIP_GPIO, 10, DISABLE, DISABLE, GPIO_INPUT, GPIO_LOW, PUSH_PULL, GPIO_INT_DISABLE, NULL }, - { CHIP_GPIO, 11, DISABLE, DISABLE, GPIO_INPUT, GPIO_LOW, PUSH_PULL, GPIO_INT_DISABLE, + { CHIP_GPIO, 11, ENABLE, DISABLE, GPIO_INPUT, GPIO_LOW, PUSH_PULL, GPIO_INT_DISABLE, NULL }, { CHIP_GPIO, 12, DISABLE, DISABLE, GPIO_INPUT, GPIO_LOW, PUSH_PULL, GPIO_INT_DISABLE, NULL }, diff --git a/meta-facebook/sb-rb/src/platform/plat_gpio.h b/meta-facebook/sb-rb/src/platform/plat_gpio.h index d646685a2c..ae2d160035 100644 --- a/meta-facebook/sb-rb/src/platform/plat_gpio.h +++ b/meta-facebook/sb-rb/src/platform/plat_gpio.h @@ -37,9 +37,9 @@ void gpio_int_default(); gpio_name_to_num(FM_PLD_UBC_EN_R) #define name_gpio1 \ gpio_name_to_num(Reserve_GPIO10) \ - gpio_name_to_num(Reserve_GPIO11) \ + gpio_name_to_num(ASIC_TYPE_ID1) \ gpio_name_to_num(Reserve_GPIO12) \ - gpio_name_to_num(Reserve_GPIO13) \ + gpio_name_to_num(ASIC_TYPE_ID0) \ gpio_name_to_num(Reserve_GPIO14) \ gpio_name_to_num(Reserve_GPIO15) \ gpio_name_to_num(Reserve_GPIO16) \ diff --git a/meta-facebook/sb-rb/src/platform/plat_hook.c b/meta-facebook/sb-rb/src/platform/plat_hook.c index c1283bddf2..0da38405d7 100644 --- a/meta-facebook/sb-rb/src/platform/plat_hook.c +++ b/meta-facebook/sb-rb/src/platform/plat_hook.c @@ -32,6 +32,7 @@ #include "shell_plat_average_power.h" #include "plat_ioexp.h" #include "tmp431.h" +#include "emc1413.h" #include "plat_util.h" LOG_MODULE_REGISTER(plat_hook); @@ -120,22 +121,103 @@ bool post_common_sensor_read(sensor_cfg *cfg, void *args, int *const reading) return true; } +uint8_t emc1413_cache_status_0 = 0; +uint8_t emc1413_cache_status_1 = 0; +uint8_t emc1413_cache_status_2 = 0; +uint8_t emc1413_cache_status_3 = 0; + +bool emc1413_check_open_status(sensor_cfg *cfg, uint8_t status) +{ + uint8_t bit = (cfg->offset == EMC1413_REMOTE_TEMPERATRUE_1) ? BIT(1) : + (cfg->offset == EMC1413_REMOTE_TEMPERATRUE_2) ? BIT(2) : + 0; + // only check BIT(1), BIT(2) + if (status & bit) { + cfg->cache_status = SENSOR_OPEN_CIRCUIT; + return false; + } + return true; +} + bool post_tmp432_read(sensor_cfg *cfg, void *args, int *reading) { CHECK_NULL_ARG_WITH_RETURN(cfg, false); ARG_UNUSED(args); ARG_UNUSED(reading); + uint8_t bit = 0; - uint8_t status = 0; - - if (tmp432_get_temp_open_status(cfg, &status)) { - uint8_t bit = (cfg->offset == TMP432_REMOTE_TEMPERATRUE_1) ? BIT(1) : + if (cfg->type == sensor_dev_tmp431) { + uint8_t status = 0; + if (tmp432_get_temp_open_status(cfg, &status)) { + bit = (cfg->offset == TMP432_REMOTE_TEMPERATRUE_1) ? BIT(1) : (cfg->offset == TMP432_REMOTE_TEMPERATRUE_2) ? BIT(2) : 0; - // only check BIT(1), BIT(2) - if (status & bit) { - cfg->cache_status = SENSOR_OPEN_CIRCUIT; - return false; + // only check BIT(1), BIT(2) + if (status & bit) { + cfg->cache_status = SENSOR_OPEN_CIRCUIT; + return false; + } + } + } + + if (cfg->type == sensor_dev_emc1413) { + switch (cfg->num) { + /* + SENSOR_NUM_ASIC_MEDHA0_SENSOR0_TEMP_C + SENSOR_NUM_ASIC_MEDHA0_SENSOR1_TEMP_C + SENSOR_NUM_ASIC_OWL_W_TEMP_C + SENSOR_NUM_ASIC_OWL_E_TEMP_C + SENSOR_NUM_ASIC_MEDHA1_SENSOR0_TEMP_C + SENSOR_NUM_ASIC_MEDHA1_SENSOR1_TEMP_C + SENSOR_NUM_ASIC_HAMSA_CRM_TEMP_C + SENSOR_NUM_ASIC_HAMSA_LS_TEMP_C + */ + case SENSOR_NUM_ASIC_MEDHA0_SENSOR0_TEMP_C: + if (emc1413_get_temp_open_status(cfg, &emc1413_cache_status_0)) { + // update the open status to cache + if (!emc1413_check_open_status(cfg, emc1413_cache_status_0)) + return false; + } + break; + case SENSOR_NUM_ASIC_MEDHA0_SENSOR1_TEMP_C: + if (!emc1413_check_open_status(cfg, emc1413_cache_status_0)) + return false; + break; + case SENSOR_NUM_ASIC_OWL_W_TEMP_C: + if (emc1413_get_temp_open_status(cfg, &emc1413_cache_status_1)) { + // update the open status to cache + if (!emc1413_check_open_status(cfg, emc1413_cache_status_1)) + return false; + } + break; + case SENSOR_NUM_ASIC_OWL_E_TEMP_C: + if (!emc1413_check_open_status(cfg, emc1413_cache_status_1)) + return false; + break; + case SENSOR_NUM_ASIC_MEDHA1_SENSOR0_TEMP_C: + if (emc1413_get_temp_open_status(cfg, &emc1413_cache_status_2)) { + // update the open status to cache + if (!emc1413_check_open_status(cfg, emc1413_cache_status_2)) + return false; + } + break; + case SENSOR_NUM_ASIC_MEDHA1_SENSOR1_TEMP_C: + if (!emc1413_check_open_status(cfg, emc1413_cache_status_2)) + return false; + break; + case SENSOR_NUM_ASIC_HAMSA_CRM_TEMP_C: + if (emc1413_get_temp_open_status(cfg, &emc1413_cache_status_3)) { + // update the open status to cache + if (!emc1413_check_open_status(cfg, emc1413_cache_status_3)) + return false; + } + break; + case SENSOR_NUM_ASIC_HAMSA_LS_TEMP_C: + if (!emc1413_check_open_status(cfg, emc1413_cache_status_3)) + return false; + break; + default: + break; } } @@ -899,12 +981,22 @@ bool bootstrap_default_settings_init(void) HAMSA_LS_STRAP_0 = 0x0 MEDHA0_CHIP_STRAP_0 = 0x0 MEDHA1_CHIP_STRAP_0 = 0x0 + + ASIC_TYPE_QCP1: + HAMSA_MFIO9 = 1 + HAMSA_MFIO18 = 1 + ASIC_TYPE_QCP2: + HAMSA_MFIO9 = 0 + HAMSA_MFIO18 = 0 */ uint8_t asic_board_id = get_asic_board_id(); uint8_t rev_id = get_board_rev_id(); + uint8_t asic_type = get_asic_type(); uint8_t hamsa_ls_strap_defauilt_setting = 0; uint8_t medha0_chip_strap_defauilt_setting = 0; uint8_t medha1_chip_strap_defauilt_setting = 0; + uint8_t hamsa_mfio9_strap_defauilt_setting = 0; + uint8_t hamsa_mfio18_strap_defauilt_setting = 0; if (asic_board_id == ASIC_BOARD_ID_RAINBOW) { if (rev_id <= REV_ID_EVT2) { hamsa_ls_strap_defauilt_setting = 0x1; @@ -916,6 +1008,15 @@ bool bootstrap_default_settings_init(void) medha1_chip_strap_defauilt_setting = 0x0; } } + + if (asic_type == ASIC_TYPE_QCP2) { + hamsa_mfio9_strap_defauilt_setting = 0x0; + hamsa_mfio18_strap_defauilt_setting = 0x0; + } else { + hamsa_mfio9_strap_defauilt_setting = 0x1; + hamsa_mfio18_strap_defauilt_setting = 0x1; + } + if (bootstrap_table[i].index == STRAP_INDEX_HAMSA_LS_STRAP_0) { bootstrap_table[i].default_setting_value = hamsa_ls_strap_defauilt_setting; if (!set_cpld_bit(bootstrap_table[i].cpld_offsets, @@ -947,6 +1048,28 @@ bool bootstrap_default_settings_init(void) } } + if (bootstrap_table[i].index == STRAP_INDEX_HAMSA_MFIO9) { + bootstrap_table[i].default_setting_value = + hamsa_mfio9_strap_defauilt_setting; + if (!set_cpld_bit(bootstrap_table[i].cpld_offsets, + bootstrap_table[i].bit_offset, + bootstrap_table[i].default_setting_value)) { + LOG_ERR("Failed to set cpld bit for HAMSA_MFIO9"); + return false; + } + } + + if (bootstrap_table[i].index == STRAP_INDEX_HAMSA_MFIO18) { + bootstrap_table[i].default_setting_value = + hamsa_mfio18_strap_defauilt_setting; + if (!set_cpld_bit(bootstrap_table[i].cpld_offsets, + bootstrap_table[i].bit_offset, + bootstrap_table[i].default_setting_value)) { + LOG_ERR("Failed to set cpld bit for HAMSA_MFIO18"); + return false; + } + } + uint8_t data = 0; if (!plat_read_cpld(bootstrap_table[i].cpld_offsets, &data, 1)) { LOG_ERR("Can't find bootstrap default by rail index from cpld: %d", i); @@ -1676,4 +1799,14 @@ void set_delta_ubc_time_of_vout_rise() LOG_INF("save UBC command bus: %d, address: 0x%x", bus, addr); } } +} +uint8_t get_emc1413_cache_status(uint8_t idx) +{ + uint8_t const cache_status[4] = { emc1413_cache_status_0, emc1413_cache_status_1, + emc1413_cache_status_2, emc1413_cache_status_3 }; + if (idx > 3) { + LOG_ERR("Invalid emc1413 cache status index %u", idx); + return 0; + } + return cache_status[idx]; } \ No newline at end of file diff --git a/meta-facebook/sb-rb/src/platform/plat_hook.h b/meta-facebook/sb-rb/src/platform/plat_hook.h index 089f5a0e0d..1de288ef01 100644 --- a/meta-facebook/sb-rb/src/platform/plat_hook.h +++ b/meta-facebook/sb-rb/src/platform/plat_hook.h @@ -293,4 +293,5 @@ int set_vr_mp29816a_reg(uint8_t rail, uint16_t *set_value, uint8_t set_reg); int get_vr_mp2971_reg(uint8_t rail, uint16_t *get_data, uint8_t get_reg); int set_vr_mp2971_reg(uint8_t rail, uint16_t *set_data, uint8_t set_reg); void set_delta_ubc_time_of_vout_rise(); +uint8_t get_emc1413_cache_status(uint8_t idx); #endif diff --git a/meta-facebook/sb-rb/src/platform/plat_log.c b/meta-facebook/sb-rb/src/platform/plat_log.c index 5763e092fc..989e24ce4d 100644 --- a/meta-facebook/sb-rb/src/platform/plat_log.c +++ b/meta-facebook/sb-rb/src/platform/plat_log.c @@ -29,6 +29,7 @@ #include "plat_class.h" #include "plat_pldm_sensor.h" #include "tmp431.h" +#include "emc1413.h" #include "plat_gpio.h" #include "plat_thermal.h" #include "shell_plat_power_sequence.h" @@ -315,9 +316,21 @@ bool get_error_data(uint16_t error_code, uint8_t *data) sensor_cfg *cfg = get_sensor_cfg_by_sensor_id(temperature_sensoor_num); data[0] = get_thermal_status_val_for_log(temperature_sensoor_num); if (data[0] & TEMP_STATUS_OPEN) { - if (!tmp432_get_temp_open_status(cfg, &data[1])) { - LOG_ERR("Failed to get 0x%02x temperature open status", - temperature_sensoor_num); + if (cfg->type == sensor_dev_tmp431) { + if (!tmp432_get_temp_open_status(cfg, &data[1])) { + LOG_ERR("Failed to get tmp432 0x%02x temperature open status", + temperature_sensoor_num); + return false; + } + } else if (cfg->type == sensor_dev_emc1413) { + if (!emc1413_get_temp_open_status(cfg, &data[1])) { + LOG_ERR("Failed to get emc14130x%02x temperature open status", + temperature_sensoor_num); + return false; + } + } else { + LOG_ERR("Unsupported sensor type 0x%x for sensor num 0x%02x", + cfg->type, temperature_sensoor_num); return false; } } else { diff --git a/meta-facebook/sb-rb/src/platform/plat_pldm_fw_update.c b/meta-facebook/sb-rb/src/platform/plat_pldm_fw_update.c index f4df4f1a99..2abcfd1459 100644 --- a/meta-facebook/sb-rb/src/platform/plat_pldm_fw_update.c +++ b/meta-facebook/sb-rb/src/platform/plat_pldm_fw_update.c @@ -51,8 +51,8 @@ static bool get_boot0_hamsa_fw_version(void *info_p, uint8_t *buf, uint8_t *len) static bool get_boot0_medha0_fw_version(void *info_p, uint8_t *buf, uint8_t *len); static bool get_boot0_medha1_fw_version(void *info_p, uint8_t *buf, uint8_t *len); -static uint32_t crc_boot0[3] = { 0 }; -static uint32_t version_boot0[3] = { 0 }; +static uint32_t crc_boot0[BOOT0_MAX] = { 0 }; +static uint32_t version_boot0[BOOT0_MAX] = { 0 }; const struct device *i2c_dev; uint8_t slave_id = HAMSA_BOOT1_ADDR; static uint32_t write_addr = HAMSA_BOOT1_ASIC_MEM_ADDR; @@ -171,15 +171,6 @@ uint8_t pldm_mtia_flash_update(void *fw_update_param) return pldm_fw_update(fw_update_param, DEVSPI_SPI1_CS1); } -uint32_t plat_get_image_crc_checksum(uint8_t index) -{ - if (index >= BOOT0_MAX) { - return 0; - } else { - return crc_boot0[index]; - } -} - uint32_t plat_get_image_version(uint8_t index) { if (index >= BOOT0_MAX) { @@ -690,7 +681,7 @@ void get_fw_version_boot0_from_asic() { I2C_MSG i2c_msg = { .bus = I2C_BUS12, .target_addr = 0x32 }; i2c_msg.tx_len = 1; - i2c_msg.rx_len = 11; + i2c_msg.rx_len = 10; i2c_msg.data[0] = ASIC_VERSION_BYTE; i2c_master_read(&i2c_msg, I2C_MAX_RETRY); @@ -700,15 +691,25 @@ void get_fw_version_boot0_from_asic() // update temp data LOG_INF("update boot0 version read from asic"); version_boot0[0] = data_p; - version_boot0[1] = data_p; - version_boot0[2] = data_p; + } + i2c_msg.tx_len = 1; + i2c_msg.rx_len = 5; + i2c_msg.data[0] = CIP_VERSION_BYTE; + i2c_master_read(&i2c_msg, I2C_MAX_RETRY); + + LOG_INF(" boot0 VER : %02d.%02d.%02d", i2c_msg.data[1], i2c_msg.data[2], i2c_msg.data[3]); + uint32_t data_cip = i2c_msg.data[1] << 16 | i2c_msg.data[2] << 8 | i2c_msg.data[3]; + if (data_cip) { + LOG_INF("update cip boot0 version read from asic"); + version_boot0[1] = data_cip; + version_boot0[2] = data_cip; } } uint32_t get_fw_version_boot1_from_asic() { I2C_MSG i2c_msg = { .bus = I2C_BUS12, .target_addr = 0x32 }; i2c_msg.tx_len = 1; - i2c_msg.rx_len = 11; + i2c_msg.rx_len = 10; i2c_msg.data[0] = ASIC_VERSION_BYTE; i2c_master_read(&i2c_msg, I2C_MAX_RETRY); LOG_INF(" boot1 VER : %02d.%02d.%02d", i2c_msg.data[1], i2c_msg.data[2], i2c_msg.data[3]); diff --git a/meta-facebook/sb-rb/src/platform/plat_pldm_fw_update.h b/meta-facebook/sb-rb/src/platform/plat_pldm_fw_update.h index facbb44c9d..9d16e109c5 100644 --- a/meta-facebook/sb-rb/src/platform/plat_pldm_fw_update.h +++ b/meta-facebook/sb-rb/src/platform/plat_pldm_fw_update.h @@ -23,10 +23,13 @@ #define RESET_CPLD_ON 0x3F #define RESET_CPLD_OFF 0x00 -enum ASIC_BOOT0_COMPONENT { +#define CIP_VERSION_BYTE 0x69 + +enum ASIC_BOOT_COMPONENT { BOOT0_HAMSA, BOOT0_MEDHA0, BOOT0_MEDHA1, + BOOT1_HAMSA, BOOT0_MAX, }; diff --git a/meta-facebook/sb-rb/src/platform/plat_pldm_sensor.c b/meta-facebook/sb-rb/src/platform/plat_pldm_sensor.c index b8a7846008..ac6d728f40 100644 --- a/meta-facebook/sb-rb/src/platform/plat_pldm_sensor.c +++ b/meta-facebook/sb-rb/src/platform/plat_pldm_sensor.c @@ -17,6 +17,7 @@ #include "pmbus.h" #include "sensor.h" #include "tmp431.h" +#include "emc1413.h" #include "pldm_sensor.h" #include "plat_hook.h" #include "plat_i2c.h" @@ -12815,3 +12816,42 @@ uint8_t sensor_polling_cmd(void *mctp_inst, uint8_t *buf, uint16_t len, uint8_t *resp_len = sizeof(struct _sensor_polling_cmd_resp); return PLDM_SUCCESS; } + +temp_sensor_change_cfg change_mapping_table[] = { + { SENSOR_NUM_ASIC_MEDHA0_SENSOR0_TEMP_C, ASIC_MEDHA0_SENSOR0_2ND_ADDR, + EMC1413_REMOTE_TEMPERATRUE_1 }, + { SENSOR_NUM_ASIC_MEDHA0_SENSOR1_TEMP_C, ASIC_MEDHA0_SENSOR1_2ND_ADDR, + EMC1413_REMOTE_TEMPERATRUE_2 }, + { SENSOR_NUM_ASIC_OWL_W_TEMP_C, ASIC_OWL_W_2ND_ADDR, EMC1413_REMOTE_TEMPERATRUE_1 }, + { SENSOR_NUM_ASIC_OWL_E_TEMP_C, ASIC_OWL_E_2ND_ADDR, EMC1413_REMOTE_TEMPERATRUE_2 }, + { SENSOR_NUM_ASIC_MEDHA1_SENSOR0_TEMP_C, ASIC_MEDHA1_SENSOR0_2ND_ADDR, + EMC1413_REMOTE_TEMPERATRUE_1 }, + { SENSOR_NUM_ASIC_MEDHA1_SENSOR1_TEMP_C, ASIC_MEDHA1_SENSOR1_2ND_ADDR, + EMC1413_REMOTE_TEMPERATRUE_2 }, + { SENSOR_NUM_ASIC_HAMSA_CRM_TEMP_C, ASIC_HAMSA_CRM_2ND_ADDR, EMC1413_REMOTE_TEMPERATRUE_1 }, + { SENSOR_NUM_ASIC_HAMSA_LS_TEMP_C, ASIC_HAMSA_LS_2ND_ADDR, EMC1413_REMOTE_TEMPERATRUE_2 }, +}; +void check_temp_sensor(uint8_t tmp_module) +{ + if (tmp_module == TMP_EMC1413) { + //change temp sensor type and address to em1413 + uint8_t table_size = sizeof(plat_pldm_sensor_temp_table) / + sizeof(plat_pldm_sensor_temp_table[0]); + for (int i = 0; i < table_size; i++) { + for (int j = 0; + j < sizeof(change_mapping_table) / sizeof(temp_sensor_change_cfg); + j++) { + if (plat_pldm_sensor_temp_table[i].pldm_sensor_cfg.num == + change_mapping_table[j].sensor_id) { + plat_pldm_sensor_temp_table[i].pldm_sensor_cfg.type = + sensor_dev_emc1413; + plat_pldm_sensor_temp_table[i].pldm_sensor_cfg.target_addr = + change_mapping_table[j].address; + plat_pldm_sensor_temp_table[i].pldm_sensor_cfg.offset = + change_mapping_table[j].offset; + break; + } + } + } + } +} \ No newline at end of file diff --git a/meta-facebook/sb-rb/src/platform/plat_pldm_sensor.h b/meta-facebook/sb-rb/src/platform/plat_pldm_sensor.h index 9d1495b5ac..9079066f16 100644 --- a/meta-facebook/sb-rb/src/platform/plat_pldm_sensor.h +++ b/meta-facebook/sb-rb/src/platform/plat_pldm_sensor.h @@ -38,6 +38,15 @@ #define ASIC_MEDHA1_SENSOR0_ADDR (0x9A >> 1) #define ASIC_MEDHA1_SENSOR1_ADDR (0x9A >> 1) +#define ASIC_MEDHA0_SENSOR0_2ND_ADDR (0xD8 >> 1) +#define ASIC_MEDHA0_SENSOR1_2ND_ADDR (0xD8 >> 1) +#define ASIC_OWL_W_2ND_ADDR (0x38 >> 1) +#define ASIC_OWL_E_2ND_ADDR (0x38 >> 1) +#define ASIC_HAMSA_CRM_2ND_ADDR (0xD8 >> 1) +#define ASIC_HAMSA_LS_2ND_ADDR (0xD8 >> 1) +#define ASIC_MEDHA1_SENSOR0_2ND_ADDR (0x38 >> 1) +#define ASIC_MEDHA1_SENSOR1_2ND_ADDR (0x38 >> 1) + #define ASIC_P0V85_MEDHA0_VDD_ADDR (0x50 >> 1) #define ASIC_P0V85_MEDHA1_VDD_ADDR (0x4C >> 1) #define ASIC_P0V9_OWL_E_TRVDD_ADDR (0xEE >> 1) @@ -325,6 +334,12 @@ typedef struct _power_capping_time_setting { uint16_t case_time_ms[8]; } power_capping_time_setting; +typedef struct _temp_sensor_change_cfg { + uint8_t sensor_id; + uint8_t address; + uint16_t offset; +} temp_sensor_change_cfg; + enum SENSOR_THREAD_LIST { TEMP_SENSOR_THREAD_ID = 0, VR_SENSOR_THREAD_ID, @@ -373,4 +388,5 @@ uint8_t get_ioe_init_flag(); PDR_numeric_sensor *get_pdr_numeric_sensor_by_sensor_id(uint8_t sensor_id); uint8_t get_pwr_capping_polling_rate_type(); uint16_t get_quick_medha_polling_rate(); +void check_temp_sensor(uint8_t tmp_module); #endif diff --git a/meta-facebook/sb-rb/src/platform/plat_thermal.c b/meta-facebook/sb-rb/src/platform/plat_thermal.c index 3b0e403cd6..5d07d78e79 100644 --- a/meta-facebook/sb-rb/src/platform/plat_thermal.c +++ b/meta-facebook/sb-rb/src/platform/plat_thermal.c @@ -17,6 +17,7 @@ #include #include "plat_thermal.h" #include "tmp431.h" +#include "emc1413.h" #include "sensor.h" #include "plat_log.h" #include "plat_user_setting.h" @@ -24,10 +25,11 @@ #include "plat_i2c.h" #include "plat_pldm_sensor.h" #include "plat_led.h" +#include "plat_hook.h" LOG_MODULE_REGISTER(plat_thermal); -#define TMP432_HIGH_LIMIT_STATUS_REG 0x35 +#define TMP_HIGH_LIMIT_STATUS_REG 0x35 struct k_thread check_thermal_thread; K_KERNEL_STACK_MEMBER(check_thermal_thread_stack, 1024); @@ -72,7 +74,7 @@ void read_temp_status(uint8_t bus, uint8_t target_addr) { uint8_t clear_status_data[1]; LOG_DBG("bus is %d, target_addr is 0x%x", bus, target_addr); - plat_i2c_read(bus, target_addr, TMP432_HIGH_LIMIT_STATUS_REG, clear_status_data, 1); + plat_i2c_read(bus, target_addr, TMP_HIGH_LIMIT_STATUS_REG, clear_status_data, 1); LOG_DBG("temp status is 0x%x", clear_status_data[0]); } @@ -118,9 +120,9 @@ void check_thermal_handler(void *arg1, void *arg2, void *arg3) continue; } uint8_t status_data; + uint8_t remote_bit = 0; //idx will base on 3 plat_get_temp_status(temp_alert_index_table[i].index + 3, &status_data); - // check status open if (status_data & TEMP_STATUS_OPEN) { // check sensor @@ -135,13 +137,24 @@ void check_thermal_handler(void *arg1, void *arg2, void *arg3) } } } - // if status BIT(3), BIT(4) is high than send error log; if (status_data & TEMP_LIMIT_STATUS) { - uint8_t remote_bit = - (temp_cfg->offset == TMP432_REMOTE_TEMPERATRUE_1) ? BIT(1) : - (temp_cfg->offset == TMP432_REMOTE_TEMPERATRUE_2) ? BIT(2) : - 0; + if (temp_cfg->type == sensor_dev_tmp431) { + remote_bit = + (temp_cfg->offset == TMP432_REMOTE_TEMPERATRUE_1) ? + BIT(1) : + (temp_cfg->offset == TMP432_REMOTE_TEMPERATRUE_2) ? + BIT(2) : + 0; + } + if (temp_cfg->type == sensor_dev_emc1413) { + remote_bit = + (temp_cfg->offset == EMC1413_REMOTE_TEMPERATRUE_1) ? + BIT(1) : + (temp_cfg->offset == EMC1413_REMOTE_TEMPERATRUE_2) ? + BIT(2) : + 0; + } uint8_t limit_status_reg = (status_data & TEMP_STATUS_H_LIMIT) ? H_LIMIT_STATUS : (status_data & TEMP_STATUS_L_LIMIT) ? L_LIMIT_STATUS : diff --git a/meta-facebook/sb-rb/src/platform/plat_user_setting.c b/meta-facebook/sb-rb/src/platform/plat_user_setting.c index 6fc88aeb2c..df867e2ed4 100644 --- a/meta-facebook/sb-rb/src/platform/plat_user_setting.c +++ b/meta-facebook/sb-rb/src/platform/plat_user_setting.c @@ -29,6 +29,7 @@ #include "sensor.h" #include "tmp75.h" #include "tmp431.h" +#include "emc1413.h" #include "plat_class.h" #include "shell_plat_average_power.h" #include "shell_plat_throttle_switch.h" @@ -201,6 +202,51 @@ bool plat_get_temp_status(uint8_t rail, uint8_t *temp_status) goto err; } break; + case sensor_dev_emc1413: + switch (cfg->num) { + /* + SENSOR_NUM_ASIC_MEDHA0_SENSOR0_TEMP_C + SENSOR_NUM_ASIC_MEDHA0_SENSOR1_TEMP_C + SENSOR_NUM_ASIC_OWL_W_TEMP_C + SENSOR_NUM_ASIC_OWL_E_TEMP_C + SENSOR_NUM_ASIC_MEDHA1_SENSOR0_TEMP_C + SENSOR_NUM_ASIC_MEDHA1_SENSOR1_TEMP_C + SENSOR_NUM_ASIC_HAMSA_CRM_TEMP_C + SENSOR_NUM_ASIC_HAMSA_LS_TEMP_C + */ + case SENSOR_NUM_ASIC_MEDHA0_SENSOR0_TEMP_C: + case SENSOR_NUM_ASIC_MEDHA0_SENSOR1_TEMP_C: + if (!emc1413_get_temp_status(cfg, temp_status)) { + LOG_ERR("The EMC1413 MEDHA0 sensor0/1 temp status reading failed"); + goto err; + } + break; + case SENSOR_NUM_ASIC_OWL_W_TEMP_C: + case SENSOR_NUM_ASIC_OWL_E_TEMP_C: + if (!emc1413_get_temp_status(cfg, temp_status)) { + LOG_ERR("The EMC1413 OWL W/E temp status reading failed"); + goto err; + } + break; + case SENSOR_NUM_ASIC_MEDHA1_SENSOR0_TEMP_C: + case SENSOR_NUM_ASIC_MEDHA1_SENSOR1_TEMP_C: + if (!emc1413_get_temp_status(cfg, temp_status)) { + LOG_ERR("The EMC1413 MEDHA1 sensor0/1 temp status reading failed"); + goto err; + } + break; + case SENSOR_NUM_ASIC_HAMSA_CRM_TEMP_C: + case SENSOR_NUM_ASIC_HAMSA_LS_TEMP_C: + if (!emc1413_get_temp_status(cfg, temp_status)) { + LOG_ERR("The EMC1413 HAMSA CRM/LS temp status reading failed"); + goto err; + } + break; + default: + break; + } + //LOG_INF("Get temp status 0x%02x for sensor %d", *temp_status, cfg->num); + break; default: LOG_ERR("Unsupport TEMP type(%x)", cfg->type); goto err; @@ -332,6 +378,13 @@ bool set_plat_temp_threshold(uint8_t temp_index_threshold_type, uint32_t *millid return false; } break; + case sensor_dev_emc1413: + if (!emc1413_set_temp_threshold(cfg, temp_threshold_type_tmp, + millidegree_celsius)) { + LOG_ERR("The EMC1413 temp threshold setting failed"); + return false; + } + break; default: LOG_ERR("Unsupport temp type(%x)", cfg->type); return false; @@ -379,6 +432,13 @@ bool get_plat_temp_threshold(uint8_t temp_index_threshold_type, int32_t *millide return false; } break; + case sensor_dev_emc1413: + if (!emc1413_get_temp_threshold(cfg, temp_threshold_type_tmp, + millidegree_celsius)) { + LOG_ERR("The EMC1413 temp threshold reading failed"); + return false; + } + break; default: LOG_ERR("Unsupport temp type(%x)", cfg->type); return false; @@ -437,6 +497,13 @@ bool plat_clear_temp_status(uint8_t rail) case sensor_dev_tmp75: { LOG_DBG("TMP75 temp_status cannot be cleared; its behavior depends on the temp_threshold settings."); } break; + case sensor_dev_emc1413: { + if (!emc1413_clear_temp_status(cfg)) { + LOG_ERR("The TEMP EMC1413 temp status clear failed"); + goto err; + } + break; + } default: LOG_ERR("Unsupport TEMP type(%x)", cfg->type); goto err; @@ -489,6 +556,13 @@ bool plat_set_temp_threshold(uint8_t temp_index_threshold_type, uint32_t *millid return false; } break; + case sensor_dev_emc1413: + if (!emc1413_set_temp_threshold(cfg, temp_threshold_type_tmp, + millidegree_celsius)) { + LOG_ERR("The EMC1413 temp threshold setting failed"); + return false; + } + break; default: LOG_ERR("Unsupport temp type(%x)", cfg->type); return false; @@ -596,6 +670,13 @@ bool plat_get_temp_threshold(uint8_t temp_index_threshold_type, uint32_t *millid return false; } break; + case sensor_dev_emc1413: + if (!emc1413_get_temp_threshold(cfg, temp_threshold_type_tmp, + millidegree_celsius)) { + LOG_ERR("The EMC1413 temp threshold reading failed"); + return false; + } + break; default: LOG_ERR("Unsupport temp type(%x)", cfg->type); return false; diff --git a/meta-facebook/sb-rb/src/platform/plat_version.h b/meta-facebook/sb-rb/src/platform/plat_version.h index 9e9b304477..6baf6d4e1b 100644 --- a/meta-facebook/sb-rb/src/platform/plat_version.h +++ b/meta-facebook/sb-rb/src/platform/plat_version.h @@ -28,7 +28,7 @@ #define DEVICE_REVISION 0x80 #define FIRMWARE_REVISION_1 GET_FW_VERSION1(BOARD_ID, PROJECT_STAGE) -#define FIRMWARE_REVISION_2 0x1e +#define FIRMWARE_REVISION_2 0x1f #define IPMI_VERSION 0x02 #define ADDITIONAL_DEVICE_SUPPORT 0xBF @@ -37,7 +37,7 @@ #define BIC_FW_YEAR_MSB 0x20 #define BIC_FW_YEAR_LSB 0x26 -#define BIC_FW_WEEK 0x13 +#define BIC_FW_WEEK 0x15 #define BIC_FW_VER 0x01 #define BIC_FW_platform_0 0x73 // char: s #define BIC_FW_platform_1 0x72 // char: r diff --git a/meta-facebook/sb-rb/src/shell/shell_fw_version.c b/meta-facebook/sb-rb/src/shell/shell_fw_version.c index bf50913eed..60fb1f9ce0 100644 --- a/meta-facebook/sb-rb/src/shell/shell_fw_version.c +++ b/meta-facebook/sb-rb/src/shell/shell_fw_version.c @@ -150,29 +150,51 @@ void cmd_get_fw_version_cpld(const struct shell *shell, size_t argc, char **argv return; } +void cmd_get_fw_version_cip(const struct shell *shell) +{ + I2C_MSG i2c_msg = { .bus = asic_list[BOOT0_HAMSA].bus, + .target_addr = asic_list[BOOT0_HAMSA].addr }; + i2c_msg.tx_len = 1; + i2c_msg.rx_len = 5; + i2c_msg.data[0] = CIP_VERSION_BYTE; + if (i2c_master_read(&i2c_msg, I2C_MAX_RETRY)) { + shell_warn(shell, "Can't get MEDHA0/1 boot0 version from ASIC"); + return; + } + shell_print(shell, "MEDHA0/1 boot0 VER from asic: %02d.%02d.%02d", i2c_msg.data[1], + i2c_msg.data[2], i2c_msg.data[3]); + const uint32_t version = i2c_msg.data[1] << 16 | i2c_msg.data[2] << 8 | i2c_msg.data[3]; + update_temp_boot0_version(version, BOOT0_MEDHA0); + update_temp_boot0_version(version, BOOT0_MEDHA1); +} + void cmd_get_fw_version_asic(const struct shell *shell, size_t argc, char **argv) { I2C_MSG i2c_msg = { .bus = asic_list[BOOT0_HAMSA].bus, .target_addr = asic_list[BOOT0_HAMSA].addr }; i2c_msg.tx_len = 1; - i2c_msg.rx_len = 11; + i2c_msg.rx_len = 10; i2c_msg.data[0] = ASIC_VERSION_BYTE; if (i2c_master_read(&i2c_msg, I2C_MAX_RETRY)) { shell_warn(shell, "Can't get boot0, boot1 version from ASIC"); return; } - shell_print(shell, " boot1 VER from asic: %02d.%02d.%02d", i2c_msg.data[1], i2c_msg.data[2], - i2c_msg.data[3]); - shell_print(shell, " boot0 VER from asic: %02d.%02d.%02d", i2c_msg.data[8], i2c_msg.data[7], - i2c_msg.data[6]); - uint32_t tmp_version_boot0 = i2c_msg.data[8] << 16 | i2c_msg.data[7] << 8 | i2c_msg.data[6]; + shell_print(shell, "HAMSA boot1 VER from asic: %02d.%02d.%02d", i2c_msg.data[1], + i2c_msg.data[2], i2c_msg.data[3]); + shell_print(shell, "HAMSA boot0 VER from asic: %02d.%02d.%02d", i2c_msg.data[8], + i2c_msg.data[7], i2c_msg.data[6]); + cmd_get_fw_version_cip(shell); + uint32_t tmp_version = i2c_msg.data[8] << 16 | i2c_msg.data[7] << 8 | i2c_msg.data[6]; // if boot0 version is not 0, update temp data - if (tmp_version_boot0) { + if (tmp_version) { // update temp data shell_print(shell, "update boot0 version read from asic"); - for (int i = 0; i < BOOT0_MAX; i++) { - update_temp_boot0_version(tmp_version_boot0, i); - } + update_temp_boot0_version(tmp_version, BOOT0_HAMSA); + } + tmp_version = i2c_msg.data[1] << 16 | i2c_msg.data[2] << 8 | i2c_msg.data[3]; + if (tmp_version) { + shell_print(shell, "update boot1 version read from asic"); + update_temp_boot0_version(tmp_version, BOOT1_HAMSA); } // get temp version from temp array for (int i = 0; i < BOOT0_MAX; i++) { @@ -182,8 +204,24 @@ void cmd_get_fw_version_asic(const struct shell *shell, size_t argc, char **argv tmp_bytes[1] = (version_tmp >> 16) & 0xFF; tmp_bytes[2] = (version_tmp >> 8) & 0xFF; tmp_bytes[3] = version_tmp & 0xFF; - shell_print(shell, " boot0 VER from temp array: %02d.%02d.%02d.%02d", tmp_bytes[0], - tmp_bytes[1], tmp_bytes[2], tmp_bytes[3]); + if (i == BOOT0_HAMSA) { + shell_print(shell, "HAMSA boot0 VER from temp array: %02d.%02d.%02d.%02d", + tmp_bytes[0], tmp_bytes[1], tmp_bytes[2], tmp_bytes[3]); + } else if (i == BOOT1_HAMSA) { + shell_print(shell, "HAMSA boot1 VER from temp array: %02d.%02d.%02d.%02d", + tmp_bytes[0], tmp_bytes[1], tmp_bytes[2], tmp_bytes[3]); + } else if (i == BOOT0_MEDHA0) { + shell_print(shell, " MEDHA0 boot0 VER from temp array: %02d.%02d.%02d.%02d", + tmp_bytes[0], tmp_bytes[1], tmp_bytes[2], tmp_bytes[3]); + } else if (i == BOOT0_MEDHA1) { + shell_print(shell, " MEDHA1 boot0 VER from temp array: %02d.%02d.%02d.%02d", + tmp_bytes[0], tmp_bytes[1], tmp_bytes[2], tmp_bytes[3]); + } else { + shell_print( + shell, + "Unknown component %d version from temp array: %02d.%02d.%02d.%02d", + i, tmp_bytes[0], tmp_bytes[1], tmp_bytes[2], tmp_bytes[3]); + } } return; } diff --git a/meta-facebook/sb-rb/src/shell/shell_plat_temp_status.c b/meta-facebook/sb-rb/src/shell/shell_plat_temp_status.c index 60fa42540a..83f33b3e84 100644 --- a/meta-facebook/sb-rb/src/shell/shell_plat_temp_status.c +++ b/meta-facebook/sb-rb/src/shell/shell_plat_temp_status.c @@ -33,22 +33,33 @@ static int cmd_temp_status_get(const struct shell *shell, size_t argc, char **ar } uint8_t temp_status = 0xFF; - uint8_t *name = argv[1]; + uint8_t const *name = argv[1]; uint8_t rail = 0; for (int i = 0; i < TEMP_INDEX_MAX; i++) { - if (strcmp(name, temp_index_table[i].sensor_name) == 0 || strcmp(name,"all") == 0) { + if (strcmp(name, temp_index_table[i].sensor_name) == 0 || + strcmp(name, "all") == 0) { rail = temp_index_table[i].index; + const sensor_cfg *temp_cfg = + get_sensor_cfg_by_sensor_id(temp_index_table[i].sensor_id); if (!plat_get_temp_status(rail, &temp_status)) { - shell_error(shell, "Can't find temp status by rail index: %x", rail); + shell_error(shell, "Can't find temp status by rail index: %x", + rail); return -1; } if (rail == TEMP_INDEX_TOP_INLET || rail == TEMP_INDEX_BOT_INLET || - rail == TEMP_INDEX_BOT_OUTLET) { - shell_print(shell, "%s %s: 0x%02x (ALERT_N)", temp_index_table[i].sensor_name, "(TMP75)", temp_status); - } else { - shell_print(shell, "%s %s: 0x%02x", temp_index_table[i].sensor_name, "(TMP432)", temp_status); + rail == TEMP_INDEX_BOT_OUTLET) { + shell_print(shell, "%s %s: 0x%02x (ALERT_N)", + temp_index_table[i].sensor_name, "(TMP75)", + temp_status); + } else if (temp_cfg->type == sensor_dev_tmp431) { + shell_print(shell, "%s %s: 0x%02x", temp_index_table[i].sensor_name, + "(TMP432)", temp_status); + } else if (temp_cfg->type == sensor_dev_emc1413) { + shell_print(shell, "%s %s: 0x%02x", temp_index_table[i].sensor_name, + "(EMC1413)", temp_status); } - if(strcmp(name,"all") != 0){ + + if (strcmp(name, "all") != 0) { return 0; } } diff --git a/meta-facebook/sb-rb/src/shell/shell_rainbow_asic.c b/meta-facebook/sb-rb/src/shell/shell_rainbow_asic.c index f80a2714a9..130ad017f0 100644 --- a/meta-facebook/sb-rb/src/shell/shell_rainbow_asic.c +++ b/meta-facebook/sb-rb/src/shell/shell_rainbow_asic.c @@ -33,7 +33,7 @@ #define ASIC_VERSION_REG 0x68 //asic reg len #define ASIC_STATUS_REG_LEN 8 -#define ASIC_VERSION_REG_LEN 11 +#define ASIC_VERSION_REG_LEN 10 #define ASIC_MONITOR_TEMP_REG_LEN 10 #define ASIC_MONITOR_HBM_TEMP_REG_LEN 10