From 0548b044daba3013b66cacd54a09e383e6aae4ec Mon Sep 17 00:00:00 2001 From: Billy Date: Mon, 21 Jul 2025 14:31:30 +0800 Subject: [PATCH 1/9] sb: sitv3: enable heartbeat GPIO Summary: - Enable LED_NPCM_HEARTBEAT_R GPIO to indicate BIC heartbeat Test Plan: - Build: Pass - Verified heartbeat GPIO toggles as expected on BIC --- meta-facebook/sb-si/src/platform/plat_gpio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-facebook/sb-si/src/platform/plat_gpio.c b/meta-facebook/sb-si/src/platform/plat_gpio.c index 6429df5e7a..935d729241 100644 --- a/meta-facebook/sb-si/src/platform/plat_gpio.c +++ b/meta-facebook/sb-si/src/platform/plat_gpio.c @@ -169,7 +169,7 @@ GPIO_CFG plat_gpio_cfg[] = { NULL }, { CHIP_GPIO, 65, DISABLE, DISABLE, GPIO_INPUT, GPIO_HIGH, OPEN_DRAIN, GPIO_INT_EDGE_BOTH, NULL }, - { CHIP_GPIO, 66, DISABLE, DISABLE, GPIO_OUTPUT, GPIO_LOW, PUSH_PULL, GPIO_INT_DISABLE, + { CHIP_GPIO, 66, ENABLE, DISABLE, GPIO_OUTPUT, GPIO_LOW, PUSH_PULL, GPIO_INT_DISABLE, NULL }, { CHIP_GPIO, 67, DISABLE, DISABLE, GPIO_INPUT, GPIO_LOW, PUSH_PULL, GPIO_INT_DISABLE, NULL }, From 4fd546195531563cb88c20970e3af03c0fccaf34 Mon Sep 17 00:00:00 2001 From: adamHSU Date: Mon, 28 Jul 2025 15:21:30 +0800 Subject: [PATCH 2/9] sb: sitv3: fix VR redundant component issue Summary: - Fixed VR redundant component issue Test Plan: - Build: Pass - The VR FW update function works normally --- .../sb-si/src/platform/plat_pldm_fw_update.c | 38 ------------------- .../sb-si/src/platform/plat_pldm_fw_update.h | 2 - 2 files changed, 40 deletions(-) diff --git a/meta-facebook/sb-si/src/platform/plat_pldm_fw_update.c b/meta-facebook/sb-si/src/platform/plat_pldm_fw_update.c index 82edaecac5..e2979832bc 100755 --- a/meta-facebook/sb-si/src/platform/plat_pldm_fw_update.c +++ b/meta-facebook/sb-si/src/platform/plat_pldm_fw_update.c @@ -54,9 +54,7 @@ typedef struct si_compnt_mapping_sensor { si_compnt_mapping_sensor si_vr_compnt_mapping_sensor_table[] = { { SI_COMPNT_P0V895_PEX, SENSOR_NUM_VR_ASIC_P0V895_PEX_TEMP_C, "SI_P0V895_PEX" }, - { SI_COMPNT_P0V825_A0, SENSOR_NUM_VR_ASIC_P0V825_A0_TEMP_C, "SI_P0V825_A0" }, { SI_COMPNT_P0V825_A1, SENSOR_NUM_VR_ASIC_P0V825_A1_TEMP_C, "SI_P0V825_A1" }, - { SI_COMPNT_P0V825_A2, SENSOR_NUM_VR_ASIC_P0V825_A2_TEMP_C, "SI_P0V825_A2" }, }; /* PLDM FW update table */ @@ -91,21 +89,6 @@ pldm_fw_update_info_t PLDMUPDATE_FW_CONFIG_TABLE[] = { .self_apply_work_func = NULL, .comp_version_str = NULL, }, - { - .enable = true, - .comp_classification = COMP_CLASS_TYPE_DOWNSTREAM, - .comp_identifier = SI_COMPNT_P0V825_A0, - .comp_classification_index = 0x00, - .pre_update_func = pldm_pre_vr_update, - .update_func = pldm_vr_update, - .pos_update_func = pldm_post_vr_update, - .inf = COMP_UPDATE_VIA_I2C, - .activate_method = COMP_ACT_AC_PWR_CYCLE, - .self_act_func = NULL, - .get_fw_version_fn = get_vr_fw_version, - .self_apply_work_func = NULL, - .comp_version_str = NULL, - }, { .enable = true, .comp_classification = COMP_CLASS_TYPE_DOWNSTREAM, @@ -121,21 +104,6 @@ pldm_fw_update_info_t PLDMUPDATE_FW_CONFIG_TABLE[] = { .self_apply_work_func = NULL, .comp_version_str = NULL, }, - { - .enable = true, - .comp_classification = COMP_CLASS_TYPE_DOWNSTREAM, - .comp_identifier = SI_COMPNT_P0V825_A2, - .comp_classification_index = 0x00, - .pre_update_func = pldm_pre_vr_update, - .update_func = pldm_vr_update, - .pos_update_func = pldm_post_vr_update, - .inf = COMP_UPDATE_VIA_I2C, - .activate_method = COMP_ACT_AC_PWR_CYCLE, - .self_act_func = NULL, - .get_fw_version_fn = get_vr_fw_version, - .self_apply_work_func = NULL, - .comp_version_str = NULL, - }, { .enable = true, .comp_classification = COMP_CLASS_TYPE_DOWNSTREAM, @@ -329,15 +297,9 @@ static struct k_mutex *get_vr_mutex_by_comp_id(uint8_t comp_id) case SI_COMPNT_P0V895_PEX: vr_mutex_id = VR_INDEX_E_P0V895; break; - case SI_COMPNT_P0V825_A0: - vr_mutex_id = VR_INDEX_E_P0V825; - break; case SI_COMPNT_P0V825_A1: vr_mutex_id = VR_INDEX_E_P0V825; break; - case SI_COMPNT_P0V825_A2: - vr_mutex_id = VR_INDEX_E_P0V825; - break; default: LOG_ERR("Invalid component id(%d)", comp_id); break; diff --git a/meta-facebook/sb-si/src/platform/plat_pldm_fw_update.h b/meta-facebook/sb-si/src/platform/plat_pldm_fw_update.h index ce98aab185..74c1ee641d 100755 --- a/meta-facebook/sb-si/src/platform/plat_pldm_fw_update.h +++ b/meta-facebook/sb-si/src/platform/plat_pldm_fw_update.h @@ -24,9 +24,7 @@ enum FIRMWARE_COMPONENT { SI_COMPNT_BIC, SI_COMPNT_P0V895_PEX, - SI_COMPNT_P0V825_A0, SI_COMPNT_P0V825_A1, - SI_COMPNT_P0V825_A2, SI_COMPNT_PCIE_SWITCH, }; From 17ce6233e4e2ea386b57728cfb209845eeb7da51 Mon Sep 17 00:00:00 2001 From: adamHSU Date: Tue, 29 Jul 2025 14:02:23 +0800 Subject: [PATCH 3/9] sb: sitv3: rename EID_ADDRESS and ADC sensors Summary: - Rename EID_ADDRESS to FLASH_EID_ADDRESS for clarity - Rename ADC sensor names Test Plan: - Build: Pass --- .../sb-si/src/platform/plat_i2c_target.c | 2 +- .../sb-si/src/platform/plat_i2c_target.h | 2 +- meta-facebook/sb-si/src/platform/plat_mctp.c | 2 +- .../sb-si/src/platform/plat_pldm_sensor.c | 56 +++++++++---------- .../sb-si/src/platform/plat_pldm_sensor.h | 12 ++-- 5 files changed, 37 insertions(+), 37 deletions(-) mode change 100755 => 100644 meta-facebook/sb-si/src/platform/plat_pldm_sensor.c mode change 100755 => 100644 meta-facebook/sb-si/src/platform/plat_pldm_sensor.h diff --git a/meta-facebook/sb-si/src/platform/plat_i2c_target.c b/meta-facebook/sb-si/src/platform/plat_i2c_target.c index 2ee4b26e48..8f4f9bc49e 100644 --- a/meta-facebook/sb-si/src/platform/plat_i2c_target.c +++ b/meta-facebook/sb-si/src/platform/plat_i2c_target.c @@ -119,7 +119,7 @@ void set_eid_handle(struct k_work *work) struct mmc_info *info = CONTAINER_OF(work, struct mmc_info, set_eid_work); uint8_t slot = info->slot; uint8_t eid = eid_table[slot]; - uint32_t op_addr = EID_ADDRESS; + uint32_t op_addr = FLASH_EID_ADDRESS; uint32_t erase_sz = FLASH_SECTOR; uint8_t write_buf = eid; uint8_t read_back_buf = 0xFF; diff --git a/meta-facebook/sb-si/src/platform/plat_i2c_target.h b/meta-facebook/sb-si/src/platform/plat_i2c_target.h index 852a568c42..257899fd69 100644 --- a/meta-facebook/sb-si/src/platform/plat_i2c_target.h +++ b/meta-facebook/sb-si/src/platform/plat_i2c_target.h @@ -22,7 +22,7 @@ #define MAX_SLOT 4 -#define EID_ADDRESS 0x0FF000 +#define FLASH_EID_ADDRESS 0x0FF000 #define FLASH_SECTOR 0x1000 static const uint8_t eid_table[MAX_SLOT] = { diff --git a/meta-facebook/sb-si/src/platform/plat_mctp.c b/meta-facebook/sb-si/src/platform/plat_mctp.c index 77640ec401..c344f80508 100644 --- a/meta-facebook/sb-si/src/platform/plat_mctp.c +++ b/meta-facebook/sb-si/src/platform/plat_mctp.c @@ -206,7 +206,7 @@ mctp_port *plat_get_mctp_port(uint8_t index) void plat_init_set_eid() { const struct device *flash_dev; - uint32_t op_addr = EID_ADDRESS; + uint32_t op_addr = FLASH_EID_ADDRESS; uint8_t read_back_buf = 255; flash_dev = device_get_binding("spi_spim0_cs0"); if (flash_dev == NULL) { diff --git a/meta-facebook/sb-si/src/platform/plat_pldm_sensor.c b/meta-facebook/sb-si/src/platform/plat_pldm_sensor.c old mode 100755 new mode 100644 index 0814e05d40..10449f99d5 --- a/meta-facebook/sb-si/src/platform/plat_pldm_sensor.c +++ b/meta-facebook/sb-si/src/platform/plat_pldm_sensor.c @@ -1392,7 +1392,7 @@ pldm_sensor_info plat_pldm_sensor_adc_table[] = { /*** numeric sensor format ***/ 0x0000, // uint16_t PLDM_terminus_handle; - SENSOR_NUM_ADC_P12V_SCALED, // uint16_t sensor_id; + SENSOR_NUM_ADC_P12V_SCALED_VOLT_V, // uint16_t sensor_id; 0x0000, // uint16_t entity_type; 0x0013, // uint16_t entity_instance_number; 0x0000, // uint16_t container_id; @@ -1435,7 +1435,7 @@ pldm_sensor_info plat_pldm_sensor_adc_table[] = { }, .update_time = 0, { - .num = SENSOR_NUM_ADC_P12V_SCALED, + .num = SENSOR_NUM_ADC_P12V_SCALED_VOLT_V, .type = sensor_dev_ads7830, .port = I2C_BUS1, .target_addr = ADS7830_I2C_ADDR, @@ -1462,7 +1462,7 @@ pldm_sensor_info plat_pldm_sensor_adc_table[] = { /*** numeric sensor format ***/ 0x0000, // uint16_t PLDM_terminus_handle; - SENSOR_NUM_ADC_P5V_STBY_SCALED, // uint16_t sensor_id; + SENSOR_NUM_ADC_P5V_STBY_SCALED_VOLT_V, // uint16_t sensor_id; 0x0000, // uint16_t entity_type; 0x0014, // uint16_t entity_instance_number; 0x0000, // uint16_t container_id; @@ -1505,7 +1505,7 @@ pldm_sensor_info plat_pldm_sensor_adc_table[] = { }, .update_time = 0, { - .num = SENSOR_NUM_ADC_P5V_STBY_SCALED, + .num = SENSOR_NUM_ADC_P5V_STBY_SCALED_VOLT_V, .type = sensor_dev_ads7830, .port = I2C_BUS1, .target_addr = ADS7830_I2C_ADDR, @@ -1532,7 +1532,7 @@ pldm_sensor_info plat_pldm_sensor_adc_table[] = { /*** numeric sensor format ***/ 0x0000, // uint16_t PLDM_terminus_handle; - SENSOR_NUM_ADC_P3V3_AUX_SCALED, // uint16_t sensor_id; + SENSOR_NUM_ADC_P3V3_AUX_SCALED_VOLT_V, // uint16_t sensor_id; 0x0000, // uint16_t entity_type; 0x0015, // uint16_t entity_instance_number; 0x0000, // uint16_t container_id; @@ -1575,7 +1575,7 @@ pldm_sensor_info plat_pldm_sensor_adc_table[] = { }, .update_time = 0, { - .num = SENSOR_NUM_ADC_P3V3_AUX_SCALED, + .num = SENSOR_NUM_ADC_P3V3_AUX_SCALED_VOLT_V, .type = sensor_dev_ads7830, .port = I2C_BUS1, .target_addr = ADS7830_I2C_ADDR, @@ -1602,7 +1602,7 @@ pldm_sensor_info plat_pldm_sensor_adc_table[] = { /*** numeric sensor format ***/ 0x0000, // uint16_t PLDM_terminus_handle; - SENSOR_NUM_ADC_P1V5_PEX_SCALED, // uint16_t sensor_id; + SENSOR_NUM_ADC_P1V5_PEX_SCALED_VOLT_V, // uint16_t sensor_id; 0x0000, // uint16_t entity_type; 0x0016, // uint16_t entity_instance_number; 0x0000, // uint16_t container_id; @@ -1645,7 +1645,7 @@ pldm_sensor_info plat_pldm_sensor_adc_table[] = { }, .update_time = 0, { - .num = SENSOR_NUM_ADC_P1V5_PEX_SCALED, + .num = SENSOR_NUM_ADC_P1V5_PEX_SCALED_VOLT_V, .type = sensor_dev_ads7830, .port = I2C_BUS1, .target_addr = ADS7830_I2C_ADDR, @@ -1672,7 +1672,7 @@ pldm_sensor_info plat_pldm_sensor_adc_table[] = { /*** numeric sensor format ***/ 0x0000, // uint16_t PLDM_terminus_handle; - SENSOR_NUM_ADC_P1V2_PEX_SCALED, // uint16_t sensor_id; + SENSOR_NUM_ADC_P1V2_PEX_SCALED_VOLT_V, // uint16_t sensor_id; 0x0000, // uint16_t entity_type; 0x0017, // uint16_t entity_instance_number; 0x0000, // uint16_t container_id; @@ -1715,7 +1715,7 @@ pldm_sensor_info plat_pldm_sensor_adc_table[] = { }, .update_time = 0, { - .num = SENSOR_NUM_ADC_P1V2_PEX_SCALED, + .num = SENSOR_NUM_ADC_P1V2_PEX_SCALED_VOLT_V, .type = sensor_dev_ads7830, .port = I2C_BUS1, .target_addr = ADS7830_I2C_ADDR, @@ -1742,7 +1742,7 @@ pldm_sensor_info plat_pldm_sensor_adc_table[] = { /*** numeric sensor format ***/ 0x0000, // uint16_t PLDM_terminus_handle; - SENSOR_NUM_ADC_P1V8_PEX_SCALED, // uint16_t sensor_id; + SENSOR_NUM_ADC_P1V8_PEX_SCALED_VOLT_V, // uint16_t sensor_id; 0x0000, // uint16_t entity_type; 0x0018, // uint16_t entity_instance_number; 0x0000, // uint16_t container_id; @@ -1785,7 +1785,7 @@ pldm_sensor_info plat_pldm_sensor_adc_table[] = { }, .update_time = 0, { - .num = SENSOR_NUM_ADC_P1V8_PEX_SCALED, + .num = SENSOR_NUM_ADC_P1V8_PEX_SCALED_VOLT_V, .type = sensor_dev_ads7830, .port = I2C_BUS1, .target_addr = ADS7830_I2C_ADDR, @@ -2137,11 +2137,11 @@ PDR_sensor_auxiliary_names plat_pdr_sensor_aux_names_table[] = { .data_length = 0x0000, }, .terminus_handle = 0x0000, - .sensor_id = SENSOR_NUM_ADC_P12V_SCALED, + .sensor_id = SENSOR_NUM_ADC_P12V_SCALED_VOLT_V, .sensor_count = 0x1, .nameStringCount = 0x1, .nameLanguageTag = "en", - .sensorName = u"ADC_P12V_SCALED", + .sensorName = u"ADC_P12V_SCALED_VOLT_V", }, { @@ -2155,11 +2155,11 @@ PDR_sensor_auxiliary_names plat_pdr_sensor_aux_names_table[] = { .data_length = 0x0000, }, .terminus_handle = 0x0000, - .sensor_id = SENSOR_NUM_ADC_P5V_STBY_SCALED, + .sensor_id = SENSOR_NUM_ADC_P5V_STBY_SCALED_VOLT_V, .sensor_count = 0x1, .nameStringCount = 0x1, .nameLanguageTag = "en", - .sensorName = u"ADC_P5V_STBY_SCALED", + .sensorName = u"ADC_P5V_STBY_SCALED_VOLT_V", }, { @@ -2173,11 +2173,11 @@ PDR_sensor_auxiliary_names plat_pdr_sensor_aux_names_table[] = { .data_length = 0x0000, }, .terminus_handle = 0x0000, - .sensor_id = SENSOR_NUM_ADC_P3V3_AUX_SCALED, + .sensor_id = SENSOR_NUM_ADC_P3V3_AUX_SCALED_VOLT_V, .sensor_count = 0x1, .nameStringCount = 0x1, .nameLanguageTag = "en", - .sensorName = u"ADC_P3V3_AUX_SCALED", + .sensorName = u"ADC_P3V3_AUX_SCALED_VOLT_V", }, { @@ -2191,11 +2191,11 @@ PDR_sensor_auxiliary_names plat_pdr_sensor_aux_names_table[] = { .data_length = 0x0000, }, .terminus_handle = 0x0000, - .sensor_id = SENSOR_NUM_ADC_P1V5_PEX_SCALED, + .sensor_id = SENSOR_NUM_ADC_P1V5_PEX_SCALED_VOLT_V, .sensor_count = 0x1, .nameStringCount = 0x1, .nameLanguageTag = "en", - .sensorName = u"ADC_P1V5_PEX_SCALED", + .sensorName = u"ADC_P1V5_PEX_SCALED_VOLT_V", }, { @@ -2209,11 +2209,11 @@ PDR_sensor_auxiliary_names plat_pdr_sensor_aux_names_table[] = { .data_length = 0x0000, }, .terminus_handle = 0x0000, - .sensor_id = SENSOR_NUM_ADC_P1V2_PEX_SCALED, + .sensor_id = SENSOR_NUM_ADC_P1V2_PEX_SCALED_VOLT_V, .sensor_count = 0x1, .nameStringCount = 0x1, .nameLanguageTag = "en", - .sensorName = u"ADC_P1V2_PEX_SCALED", + .sensorName = u"ADC_P1V2_PEX_SCALED_VOLT_V", }, { @@ -2227,11 +2227,11 @@ PDR_sensor_auxiliary_names plat_pdr_sensor_aux_names_table[] = { .data_length = 0x0000, }, .terminus_handle = 0x0000, - .sensor_id = SENSOR_NUM_ADC_P1V8_PEX_SCALED, + .sensor_id = SENSOR_NUM_ADC_P1V8_PEX_SCALED_VOLT_V, .sensor_count = 0x1, .nameStringCount = 0x1, .nameLanguageTag = "en", - .sensorName = u"ADC_P1V8_PEX_SCALED", + .sensorName = u"ADC_P1V8_PEX_SCALED_VOLT_V", }, }; @@ -2577,8 +2577,8 @@ bool get_sensor_info_by_sensor_id(uint8_t sensor_id, uint8_t *vr_bus, uint8_t *v return true; } } - } else if (sensor_id >= SENSOR_NUM_ADC_P12V_SCALED && - sensor_id <= SENSOR_NUM_ADC_P1V8_PEX_SCALED) { + } else if (sensor_id >= SENSOR_NUM_ADC_P12V_SCALED_VOLT_V && + sensor_id <= SENSOR_NUM_ADC_P1V8_PEX_SCALED_VOLT_V) { pldm_sensor_count = plat_pldm_sensor_get_sensor_count(ADC_SENSOR_THREAD_ID); for (int index = 0; index < pldm_sensor_count; index++) { if (plat_pldm_sensor_adc_table[index].pldm_sensor_cfg.num == sensor_id) { @@ -2614,8 +2614,8 @@ sensor_cfg *get_sensor_cfg_by_sensor_id(uint8_t sensor_id) return &plat_pldm_sensor_vr_table[index].pldm_sensor_cfg; } } - } else if (sensor_id >= SENSOR_NUM_ADC_P12V_SCALED && - sensor_id <= SENSOR_NUM_ADC_P1V8_PEX_SCALED) { + } else if (sensor_id >= SENSOR_NUM_ADC_P12V_SCALED_VOLT_V && + sensor_id <= SENSOR_NUM_ADC_P1V8_PEX_SCALED_VOLT_V) { pldm_sensor_count = plat_pldm_sensor_get_sensor_count(ADC_SENSOR_THREAD_ID); for (int index = 0; index < pldm_sensor_count; index++) { if (plat_pldm_sensor_adc_table[index].pldm_sensor_cfg.num == sensor_id) { diff --git a/meta-facebook/sb-si/src/platform/plat_pldm_sensor.h b/meta-facebook/sb-si/src/platform/plat_pldm_sensor.h old mode 100755 new mode 100644 index beb2e1ec04..3dbcf7958f --- a/meta-facebook/sb-si/src/platform/plat_pldm_sensor.h +++ b/meta-facebook/sb-si/src/platform/plat_pldm_sensor.h @@ -59,12 +59,12 @@ enum SENSOR_NUM_LIST { SENSOR_NUM_VR_ASIC_P0V825_A2_VOLT_V, SENSOR_NUM_VR_ASIC_P0V825_A2_CURR_A, SENSOR_NUM_VR_ASIC_P0V825_A2_PWR_W, - SENSOR_NUM_ADC_P12V_SCALED, - SENSOR_NUM_ADC_P5V_STBY_SCALED, - SENSOR_NUM_ADC_P3V3_AUX_SCALED, - SENSOR_NUM_ADC_P1V5_PEX_SCALED, - SENSOR_NUM_ADC_P1V2_PEX_SCALED, - SENSOR_NUM_ADC_P1V8_PEX_SCALED, + SENSOR_NUM_ADC_P12V_SCALED_VOLT_V, + SENSOR_NUM_ADC_P5V_STBY_SCALED_VOLT_V, + SENSOR_NUM_ADC_P3V3_AUX_SCALED_VOLT_V, + SENSOR_NUM_ADC_P1V5_PEX_SCALED_VOLT_V, + SENSOR_NUM_ADC_P1V2_PEX_SCALED_VOLT_V, + SENSOR_NUM_ADC_P1V8_PEX_SCALED_VOLT_V, }; #define TMP75_TEMP_OFFSET 0x00 From e95e6d6b295c3f5987e5f099fc4023aea00b3aeb Mon Sep 17 00:00:00 2001 From: Billy Date: Wed, 30 Jul 2025 11:07:26 +0800 Subject: [PATCH 4/9] sb: sitv3: integrate mmc_info for slot-based configuration Summary: - Introduce mmc_info struct to manage slot/EID/PID mapping - Add mmc_info_table with predefined entries for 4 slots - Use slot ID read from flash to set EID and PID dynamically - Refactor related logic in plat_class.c, plat_i2c_target.c, and plat_mctp.c Test Plan: - Build: Pass - Flash read/write: Verified slot ID can be correctly written to and read back from flash - EID/PID setting functions based on flash slot ID function correctly --- meta-facebook/sb-si/src/platform/plat_class.c | 33 +++++++++- meta-facebook/sb-si/src/platform/plat_class.h | 12 ++++ .../sb-si/src/platform/plat_i2c_target.c | 64 +++++++++++-------- .../sb-si/src/platform/plat_i2c_target.h | 26 ++------ meta-facebook/sb-si/src/platform/plat_i3c.h | 2 +- meta-facebook/sb-si/src/platform/plat_mctp.c | 29 ++++++--- 6 files changed, 110 insertions(+), 56 deletions(-) diff --git a/meta-facebook/sb-si/src/platform/plat_class.c b/meta-facebook/sb-si/src/platform/plat_class.c index b5b386d291..07ae34a23a 100644 --- a/meta-facebook/sb-si/src/platform/plat_class.c +++ b/meta-facebook/sb-si/src/platform/plat_class.c @@ -25,15 +25,25 @@ #include "plat_pldm_sensor.h" #include "hal_i3c.h" #include "plat_i3c.h" +#include LOG_MODULE_REGISTER(plat_class); #define I2C_BUS_TMP I2C_BUS1 #define TMP_EMC1413_SMSC_ID_DEFAULT 0x5D +uint16_t BIC_PID = PLAT_DEFAULT_PID; + static uint8_t vr_type = VR_UNKNOWN; static uint8_t tmp_type = TMP_TYPE_UNKNOWN; +const mmc_info_t mmc_info_table[MAX_SLOT] = { + { .slot = 0, .eid = MCTP_DEFAULT_ENDPOINT, .pid = PLAT_DEFAULT_PID }, + { .slot = 1, .eid = 0x14, .pid = 0x520 }, + { .slot = 2, .eid = 0x1E, .pid = 0x530 }, + { .slot = 3, .eid = 0x28, .pid = 0x540 }, +}; + void init_vr_vendor_type(void) { I2C_MSG i2c_msg = { 0 }; @@ -91,7 +101,28 @@ void init_platform_config() void plat_i3c_set_pid() { - I3C_MSG i3c_msg; + const struct device *flash_dev = device_get_binding("spi_spim0_cs0"); + if (!flash_dev) { + LOG_ERR("Failed to get flash device for PID setting."); + return; + } + + uint8_t slot_id = 0xFF; + uint32_t op_addr = FLASH_SLOT_ADDRESS; + + if (flash_read(flash_dev, op_addr, &slot_id, 1) != 0) { + LOG_ERR("Failed to read slot_id from flash."); + return; + } + + if (slot_id < MAX_SLOT) { + BIC_PID = mmc_info_table[slot_id].pid; + LOG_INF("Slot ID %d valid, set BIC_PID = 0x%02x", slot_id, BIC_PID); + } else { + LOG_WRN("Invalid slot ID (%d), keep default BIC_PID = 0x%02x", slot_id, BIC_PID); + } + + I3C_MSG i3c_msg = { 0 }; i3c_msg.bus = I3C_BUS6; i3c_set_pid(&i3c_msg, BIC_PID); } \ No newline at end of file diff --git a/meta-facebook/sb-si/src/platform/plat_class.h b/meta-facebook/sb-si/src/platform/plat_class.h index 4cce40c986..d4c80c06bf 100755 --- a/meta-facebook/sb-si/src/platform/plat_class.h +++ b/meta-facebook/sb-si/src/platform/plat_class.h @@ -17,6 +17,10 @@ #ifndef PLAT_CLASS_H #define PLAT_CLASS_H +#define MAX_SLOT 4 +#define FLASH_SLOT_ADDRESS 0x0FF000 +#define FLASH_SECTOR 0x1000 + typedef enum { VR_MPS_MP2971_MP2891, VR_MPS_MP2971_MP29816A, @@ -25,6 +29,14 @@ typedef enum { VR_UNKNOWN, } si_vr_type_t; +typedef struct { + uint8_t slot; + uint8_t eid; + uint16_t pid; +} mmc_info_t; + +extern const mmc_info_t mmc_info_table[MAX_SLOT]; + typedef enum { TMP_TMP432, TMP_EMC1413, diff --git a/meta-facebook/sb-si/src/platform/plat_i2c_target.c b/meta-facebook/sb-si/src/platform/plat_i2c_target.c index 8f4f9bc49e..8f048db163 100644 --- a/meta-facebook/sb-si/src/platform/plat_i2c_target.c +++ b/meta-facebook/sb-si/src/platform/plat_i2c_target.c @@ -30,15 +30,16 @@ #include #include "plat_i2c_target.h" #include "plat_mctp.h" +#include "plat_class.h" #include LOG_MODULE_REGISTER(plat_i2c_target); static bool command_reply_data_handle(void *arg); -static void command_set_eid_handle(void *arg); -void set_eid_handle(struct k_work *work); -void plat_set_eid_init(int slot_id); -K_WORK_DELAYABLE_DEFINE(set_eid_work, set_eid_handle); +static void command_set_slot_handle(void *arg); +void set_slot_handle(struct k_work *work); +void plat_set_slot_init(int slot_id); +K_WORK_DELAYABLE_DEFINE(set_slot_work, set_slot_handle); /* I2C target init-enable table */ const bool I2C_TARGET_ENABLE_TABLE[MAX_TARGET_NUM] = { @@ -59,7 +60,7 @@ const struct _i2c_target_config I2C_TARGET_CONFIG_TABLE[MAX_TARGET_NUM] = { { 0xFF, 0xA }, { 0xFF, 0xA }, { 0xFF, 0xA }, - { 0x42, 0xA, NULL, command_set_eid_handle }, + { 0x42, 0xA, NULL, command_set_slot_handle }, { 0xFF, 0xA }, }; @@ -70,7 +71,7 @@ static bool command_reply_data_handle(void *arg) return false; } -static void command_set_eid_handle(void *arg) +static void command_set_slot_handle(void *arg) { struct i2c_target_data *data = (struct i2c_target_data *)arg; data->skip_msg_wr = true; @@ -87,18 +88,26 @@ static void command_set_eid_handle(void *arg) LOG_INF("Received reg_offset: 0x%02x", reg_offset); switch (reg_offset) { - case SLOT_0_I2C_SET_EID_REG: - plat_set_eid_init(0); + case SLOT_0_I2C_SET_SLOT_REG: { + const mmc_info_t *cfg = &mmc_info_table[0]; + plat_set_slot_init(cfg->slot); break; - case SLOT_1_I2C_SET_EID_REG: - plat_set_eid_init(1); + } + case SLOT_1_I2C_SET_SLOT_REG: { + const mmc_info_t *cfg = &mmc_info_table[1]; + plat_set_slot_init(cfg->slot); break; - case SLOT_2_I2C_SET_EID_REG: - plat_set_eid_init(2); + } + case SLOT_2_I2C_SET_SLOT_REG: { + const mmc_info_t *cfg = &mmc_info_table[2]; + plat_set_slot_init(cfg->slot); break; - case SLOT_3_I2C_SET_EID_REG: - plat_set_eid_init(3); + } + case SLOT_3_I2C_SET_SLOT_REG: { + const mmc_info_t *cfg = &mmc_info_table[3]; + plat_set_slot_init(cfg->slot); break; + } default: LOG_ERR("Unknown reg offset: 0x%02x", reg_offset); data->target_rd_msg.msg_length = 1; @@ -114,14 +123,20 @@ static void command_set_eid_handle(void *arg) return; } -void set_eid_handle(struct k_work *work) +void set_slot_handle(struct k_work *work) { - struct mmc_info *info = CONTAINER_OF(work, struct mmc_info, set_eid_work); + mmc_work_info_t *info = CONTAINER_OF(work, mmc_work_info_t, set_slot_work); uint8_t slot = info->slot; - uint8_t eid = eid_table[slot]; - uint32_t op_addr = FLASH_EID_ADDRESS; + uint8_t eid = mmc_info_table[slot].eid; + + if (slot >= MAX_SLOT) { + LOG_ERR("Invalid slot_id: %d", slot); + free(info); + return; + } + uint32_t op_addr = FLASH_SLOT_ADDRESS; uint32_t erase_sz = FLASH_SECTOR; - uint8_t write_buf = eid; + uint8_t write_buf = slot; uint8_t read_back_buf = 0xFF; uint32_t ret = 0; @@ -132,7 +147,6 @@ void set_eid_handle(struct k_work *work) } LOG_INF("Setting EID %d for slot %d", eid, slot); - plat_set_eid(eid); LOG_INF("EID after set: %d", plat_get_eid()); @@ -163,7 +177,7 @@ void set_eid_handle(struct k_work *work) LOG_ERR("Failed to read %u.\n", op_addr); } - LOG_INF("EID:%d get from flash", read_back_buf); + LOG_INF("SLOT:%d get from flash", read_back_buf); if (memcmp(&write_buf, &read_back_buf, 1) != 0) { LOG_ERR("Failed to write flash at 0x%x.", op_addr); @@ -175,15 +189,15 @@ void set_eid_handle(struct k_work *work) return; } -void plat_set_eid_init(int slot_id) +void plat_set_slot_init(int slot_id) { - struct mmc_info *info = malloc(sizeof(struct mmc_info)); + mmc_work_info_t *info = malloc(sizeof(mmc_work_info_t)); if (!info) { LOG_ERR("Failed to allocate memory for mmc_info"); return; } info->slot = slot_id; - k_work_init(&info->set_eid_work, set_eid_handle); - k_work_submit(&info->set_eid_work); + k_work_init(&info->set_slot_work, set_slot_handle); + k_work_submit(&info->set_slot_work); } diff --git a/meta-facebook/sb-si/src/platform/plat_i2c_target.h b/meta-facebook/sb-si/src/platform/plat_i2c_target.h index 257899fd69..168b3f2caa 100644 --- a/meta-facebook/sb-si/src/platform/plat_i2c_target.h +++ b/meta-facebook/sb-si/src/platform/plat_i2c_target.h @@ -20,27 +20,15 @@ #include #include "hal_i2c_target.h" -#define MAX_SLOT 4 - -#define FLASH_EID_ADDRESS 0x0FF000 -#define FLASH_SECTOR 0x1000 - -static const uint8_t eid_table[MAX_SLOT] = { - 10, // SLOT 0 - 20, // SLOT 1 - 30, // SLOT 2 - 40 // SLOT 3 -}; - -struct mmc_info { - struct k_work set_eid_work; +typedef struct { + struct k_work set_slot_work; int slot; -}; +} mmc_work_info_t; -#define SLOT_0_I2C_SET_EID_REG 0x40 -#define SLOT_1_I2C_SET_EID_REG 0x41 -#define SLOT_2_I2C_SET_EID_REG 0x42 -#define SLOT_3_I2C_SET_EID_REG 0x43 +#define SLOT_0_I2C_SET_SLOT_REG 0x40 +#define SLOT_1_I2C_SET_SLOT_REG 0x41 +#define SLOT_2_I2C_SET_SLOT_REG 0x42 +#define SLOT_3_I2C_SET_SLOT_REG 0x43 #define TARGET_ENABLE 1 #define TARGET_DISABLE 0 diff --git a/meta-facebook/sb-si/src/platform/plat_i3c.h b/meta-facebook/sb-si/src/platform/plat_i3c.h index b67887f82e..473569c549 100644 --- a/meta-facebook/sb-si/src/platform/plat_i3c.h +++ b/meta-facebook/sb-si/src/platform/plat_i3c.h @@ -30,6 +30,6 @@ #define I3C_BUS_MAX_NUM 6 -#define BIC_PID 0x567 +#define PLAT_DEFAULT_PID 0x510 #endif diff --git a/meta-facebook/sb-si/src/platform/plat_mctp.c b/meta-facebook/sb-si/src/platform/plat_mctp.c index c344f80508..c4fe77f6d5 100644 --- a/meta-facebook/sb-si/src/platform/plat_mctp.c +++ b/meta-facebook/sb-si/src/platform/plat_mctp.c @@ -35,6 +35,7 @@ #include "plat_hook.h" #include "plat_mctp.h" #include "plat_gpio.h" +#include "plat_class.h" #include "plat_i2c_target.h" #include @@ -206,22 +207,30 @@ mctp_port *plat_get_mctp_port(uint8_t index) void plat_init_set_eid() { const struct device *flash_dev; - uint32_t op_addr = FLASH_EID_ADDRESS; - uint8_t read_back_buf = 255; + uint32_t op_addr = FLASH_SLOT_ADDRESS; + uint8_t slot_id = 0xFF; + flash_dev = device_get_binding("spi_spim0_cs0"); if (flash_dev == NULL) { - printf("Failed to get device.\n"); + LOG_ERR("Failed to get flash device."); + return; } - if (flash_read(flash_dev, op_addr, &read_back_buf, 1) != 0) { - LOG_ERR("Failed to read %u.\n", op_addr); + if (flash_read(flash_dev, op_addr, &slot_id, 1) != 0) { + LOG_ERR("Failed to read slot ID from flash at 0x%x", op_addr); + return; } - if (read_back_buf != 255) { - plat_eid = read_back_buf; + + if (slot_id >= MAX_SLOT) { + LOG_ERR("Invalid slot ID (%d) read from flash, fallback to default EID", slot_id); + slot_id = 0; } - LOG_INF("EID:%d get from flash", read_back_buf); - LOG_INF("EID:%d", plat_get_eid()); - return; + + const mmc_info_t *cfg = &mmc_info_table[slot_id]; + plat_set_eid(cfg->eid); + + LOG_INF("Slot ID %d read from flash", slot_id); + LOG_INF("Set EID to 0x%02x for slot %d", cfg->eid, slot_id); } uint8_t plat_get_eid() From 74429db99b4aacc2ebf2f469240e3ae124ac7e1f Mon Sep 17 00:00:00 2001 From: Billy Date: Wed, 30 Jul 2025 15:38:51 +0800 Subject: [PATCH 5/9] sb: sitv3: add get_slot_id for slot-based configuration Summary: - Introduce get_slot_id() to centralize slot ID retrieval from flash - Replace direct flash reads in related functions with get_slot_id() - Use slot ID to generate standard entity name in "SI_SLOT_" format Test Plan: - Build: Pass - Verified slot ID read and name assignment behavior --- meta-facebook/sb-si/src/platform/plat_class.c | 40 +++++++++++++------ meta-facebook/sb-si/src/platform/plat_class.h | 1 + .../sb-si/src/platform/plat_i2c_target.c | 29 ++++++-------- meta-facebook/sb-si/src/platform/plat_mctp.c | 18 +-------- .../sb-si/src/platform/plat_pldm_sensor.c | 16 +++++--- .../sb-si/src/platform/plat_pldm_sensor.h | 2 +- 6 files changed, 54 insertions(+), 52 deletions(-) diff --git a/meta-facebook/sb-si/src/platform/plat_class.c b/meta-facebook/sb-si/src/platform/plat_class.c index 07ae34a23a..d0b27911d6 100644 --- a/meta-facebook/sb-si/src/platform/plat_class.c +++ b/meta-facebook/sb-si/src/platform/plat_class.c @@ -31,6 +31,7 @@ LOG_MODULE_REGISTER(plat_class); #define I2C_BUS_TMP I2C_BUS1 #define TMP_EMC1413_SMSC_ID_DEFAULT 0x5D +#define INVALID_SLOT_ID 0xFF uint16_t BIC_PID = PLAT_DEFAULT_PID; @@ -101,19 +102,7 @@ void init_platform_config() void plat_i3c_set_pid() { - const struct device *flash_dev = device_get_binding("spi_spim0_cs0"); - if (!flash_dev) { - LOG_ERR("Failed to get flash device for PID setting."); - return; - } - - uint8_t slot_id = 0xFF; - uint32_t op_addr = FLASH_SLOT_ADDRESS; - - if (flash_read(flash_dev, op_addr, &slot_id, 1) != 0) { - LOG_ERR("Failed to read slot_id from flash."); - return; - } + uint8_t slot_id = get_slot_id(); if (slot_id < MAX_SLOT) { BIC_PID = mmc_info_table[slot_id].pid; @@ -125,4 +114,29 @@ void plat_i3c_set_pid() I3C_MSG i3c_msg = { 0 }; i3c_msg.bus = I3C_BUS6; i3c_set_pid(&i3c_msg, BIC_PID); +} + +uint8_t get_slot_id() +{ + const struct device *flash_dev = device_get_binding("spi_spim0_cs0"); + if (!flash_dev) { + LOG_ERR("Failed to get flash device for slot ID."); + return INVALID_SLOT_ID; + } + + uint8_t slot_id = INVALID_SLOT_ID; + uint32_t op_addr = FLASH_SLOT_ADDRESS; + + if (flash_read(flash_dev, op_addr, &slot_id, 1) != 0) { + LOG_ERR("Failed to read slot ID from flash at 0x%x", op_addr); + return INVALID_SLOT_ID; + } + + if (slot_id >= MAX_SLOT) { + LOG_ERR("Slot ID read from flash is invalid: %d", slot_id); + return INVALID_SLOT_ID; + } + + LOG_INF("Read slot ID %d from flash", slot_id); + return slot_id; } \ No newline at end of file diff --git a/meta-facebook/sb-si/src/platform/plat_class.h b/meta-facebook/sb-si/src/platform/plat_class.h index d4c80c06bf..ad151a3bab 100755 --- a/meta-facebook/sb-si/src/platform/plat_class.h +++ b/meta-facebook/sb-si/src/platform/plat_class.h @@ -48,5 +48,6 @@ void init_tmp_type(); uint8_t get_vr_type(); uint8_t get_tmp_type(); void plat_i3c_set_pid(); +uint8_t get_slot_id(); #endif diff --git a/meta-facebook/sb-si/src/platform/plat_i2c_target.c b/meta-facebook/sb-si/src/platform/plat_i2c_target.c index 8f048db163..fc2c41e30c 100644 --- a/meta-facebook/sb-si/src/platform/plat_i2c_target.c +++ b/meta-facebook/sb-si/src/platform/plat_i2c_target.c @@ -85,29 +85,26 @@ static void command_set_slot_handle(void *arg) if (data->wr_buffer_idx == 1) { uint8_t reg_offset = data->target_wr_msg.msg[0]; + const mmc_info_t *cfg = &mmc_info_table[0]; LOG_INF("Received reg_offset: 0x%02x", reg_offset); switch (reg_offset) { - case SLOT_0_I2C_SET_SLOT_REG: { - const mmc_info_t *cfg = &mmc_info_table[0]; + case SLOT_0_I2C_SET_SLOT_REG: + cfg = &mmc_info_table[0]; plat_set_slot_init(cfg->slot); break; - } - case SLOT_1_I2C_SET_SLOT_REG: { - const mmc_info_t *cfg = &mmc_info_table[1]; + case SLOT_1_I2C_SET_SLOT_REG: + cfg = &mmc_info_table[1]; plat_set_slot_init(cfg->slot); break; - } - case SLOT_2_I2C_SET_SLOT_REG: { - const mmc_info_t *cfg = &mmc_info_table[2]; + case SLOT_2_I2C_SET_SLOT_REG: + cfg = &mmc_info_table[2]; plat_set_slot_init(cfg->slot); break; - } - case SLOT_3_I2C_SET_SLOT_REG: { - const mmc_info_t *cfg = &mmc_info_table[3]; + case SLOT_3_I2C_SET_SLOT_REG: + cfg = &mmc_info_table[3]; plat_set_slot_init(cfg->slot); break; - } default: LOG_ERR("Unknown reg offset: 0x%02x", reg_offset); data->target_rd_msg.msg_length = 1; @@ -146,10 +143,6 @@ void set_slot_handle(struct k_work *work) return; } - LOG_INF("Setting EID %d for slot %d", eid, slot); - plat_set_eid(eid); - LOG_INF("EID after set: %d", plat_get_eid()); - const struct device *flash_dev = device_get_binding("spi_spim0_cs0"); if (!flash_dev) { LOG_ERR("Failed to get flash device."); @@ -185,6 +178,10 @@ void set_slot_handle(struct k_work *work) LOG_ERR("readback:%d", read_back_buf); } + LOG_INF("Setting EID %d for slot %d", eid, slot); + plat_set_eid(eid); + LOG_INF("EID after set: %d", plat_get_eid()); + free(info); return; } diff --git a/meta-facebook/sb-si/src/platform/plat_mctp.c b/meta-facebook/sb-si/src/platform/plat_mctp.c index c4fe77f6d5..83fe1eeeb8 100644 --- a/meta-facebook/sb-si/src/platform/plat_mctp.c +++ b/meta-facebook/sb-si/src/platform/plat_mctp.c @@ -206,30 +206,16 @@ mctp_port *plat_get_mctp_port(uint8_t index) void plat_init_set_eid() { - const struct device *flash_dev; - uint32_t op_addr = FLASH_SLOT_ADDRESS; - uint8_t slot_id = 0xFF; - - flash_dev = device_get_binding("spi_spim0_cs0"); - if (flash_dev == NULL) { - LOG_ERR("Failed to get flash device."); - return; - } - - if (flash_read(flash_dev, op_addr, &slot_id, 1) != 0) { - LOG_ERR("Failed to read slot ID from flash at 0x%x", op_addr); - return; - } + uint8_t slot_id = get_slot_id(); if (slot_id >= MAX_SLOT) { - LOG_ERR("Invalid slot ID (%d) read from flash, fallback to default EID", slot_id); + LOG_ERR("Invalid slot ID (%d), fallback to slot 0 EID", slot_id); slot_id = 0; } const mmc_info_t *cfg = &mmc_info_table[slot_id]; plat_set_eid(cfg->eid); - LOG_INF("Slot ID %d read from flash", slot_id); LOG_INF("Set EID to 0x%02x for slot %d", cfg->eid, slot_id); } diff --git a/meta-facebook/sb-si/src/platform/plat_pldm_sensor.c b/meta-facebook/sb-si/src/platform/plat_pldm_sensor.c index 10449f99d5..5cf9603e62 100644 --- a/meta-facebook/sb-si/src/platform/plat_pldm_sensor.c +++ b/meta-facebook/sb-si/src/platform/plat_pldm_sensor.c @@ -2387,23 +2387,27 @@ char16_t *char16_strcpy(char16_t *dest, const char16_t *src) } // Custom function to concatenate a char16_t character to a string -char16_t *char16_strcat_char(char16_t *dest) +char16_t *char16_strcat_char(char16_t *dest, char16_t ch) { size_t len = char16_strlen(dest); - dest[len] = u'\0'; + dest[len] = ch; + dest[len + 1] = u'\0'; return dest; } void plat_init_entity_aux_names_pdr_table() { // Base name - const char16_t base_name[] = u"SI"; + const char16_t base_name[] = u"SI_SLOT_"; + + // Get slot ID + uint8_t slot_id = get_slot_id(); // Calculate the length of the base name size_t base_len = char16_strlen(base_name); - // Calculate the required length for the final string (base name + null terminator) - size_t total_len = base_len + 1; // +1 for the null terminator + // Calculate the required length for the final string (base name + 1 digit + null terminator) + size_t total_len = base_len + 2; // +2 for the slot ID digit and null terminator // Ensure the final length does not exceed MAX_AUX_SENSOR_NAME_LEN if (total_len > MAX_AUX_SENSOR_NAME_LEN) { @@ -2418,7 +2422,7 @@ void plat_init_entity_aux_names_pdr_table() // Append slot ID as a character, ensuring it fits within the buffer if (base_len + 1 < MAX_AUX_SENSOR_NAME_LEN) { - char16_strcat_char(full_name); + char16_strcat_char(full_name, u'0' + slot_id); } // Now copy the full name to the entityName field of your structure diff --git a/meta-facebook/sb-si/src/platform/plat_pldm_sensor.h b/meta-facebook/sb-si/src/platform/plat_pldm_sensor.h index 3dbcf7958f..91dc7bdbe0 100644 --- a/meta-facebook/sb-si/src/platform/plat_pldm_sensor.h +++ b/meta-facebook/sb-si/src/platform/plat_pldm_sensor.h @@ -106,6 +106,6 @@ bool get_sensor_info_by_sensor_id(uint8_t sensor_id, uint8_t *vr_bus, uint8_t *v uint8_t *sensor_dev); size_t char16_strlen(const char16_t *str); char16_t *char16_strcpy(char16_t *dest, const char16_t *src); -char16_t *char16_strcat_char(char16_t *dest); +char16_t *char16_strcat_char(char16_t *dest, char16_t ch); #endif From cc882c1cbf80e4232da9e812ebe25218ff0f406c Mon Sep 17 00:00:00 2001 From: adamHSU Date: Thu, 31 Jul 2025 10:26:23 +0800 Subject: [PATCH 6/9] sb: sitv3: modify PLDM timeout duration Summary: - Modify PLDM timeout duration to 5s Test Plan: - Build code: Pass --- meta-facebook/sb-si/src/platform/plat_def.h | 1 + 1 file changed, 1 insertion(+) diff --git a/meta-facebook/sb-si/src/platform/plat_def.h b/meta-facebook/sb-si/src/platform/plat_def.h index 79aa2860c0..1110e69df0 100755 --- a/meta-facebook/sb-si/src/platform/plat_def.h +++ b/meta-facebook/sb-si/src/platform/plat_def.h @@ -23,6 +23,7 @@ #define ENABLE_PLDM_SENSOR #define MCTP_SMBUS_WRITE_MAX_RETRY 4 #define RAA229621_MAX_CMD_LINE 1500 +#define PLDM_MSG_TIMEOUT_MS 5000 #define MAX_AUX_SENSOR_NAME_LEN 42 From 1b27a115c8cf5eee06daccf619151dc00400a374 Mon Sep 17 00:00:00 2001 From: Billy Date: Thu, 31 Jul 2025 10:53:29 +0800 Subject: [PATCH 7/9] sb: sitv3: add GET_MMC_INFO_REG for reading slot ID and EID Summary: - Define I2C register GET_MMC_INFO_REG (0x50) for MMC info query - Handle register in command_reply_data_handle() - Return slot ID from flash and current EID (2 bytes total) Test Plan: - Build: Pass - Verified correct data returned from I2C read --- .../sb-si/src/platform/plat_i2c_target.c | 43 +++++++++++++++++-- .../sb-si/src/platform/plat_i2c_target.h | 2 + 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/meta-facebook/sb-si/src/platform/plat_i2c_target.c b/meta-facebook/sb-si/src/platform/plat_i2c_target.c index fc2c41e30c..3085c3c90b 100644 --- a/meta-facebook/sb-si/src/platform/plat_i2c_target.c +++ b/meta-facebook/sb-si/src/platform/plat_i2c_target.c @@ -55,20 +55,55 @@ const struct _i2c_target_config I2C_TARGET_CONFIG_TABLE[MAX_TARGET_NUM] = { { 0xFF, 0xA }, { 0x40, 0xA }, { 0xFF, 0xA }, - { 0x40, 0xA, command_reply_data_handle }, + { 0x40, 0xA }, { 0xFF, 0xA }, { 0xFF, 0xA }, { 0xFF, 0xA }, { 0xFF, 0xA }, - { 0x42, 0xA, NULL, command_set_slot_handle }, + { 0x42, 0xA, command_reply_data_handle, command_set_slot_handle }, { 0xFF, 0xA }, }; static bool command_reply_data_handle(void *arg) { - /*TODO: put board telemetry here*/ + struct i2c_target_data *data = (struct i2c_target_data *)arg; + + if (data->wr_buffer_idx < 1) { + LOG_ERR("No register offset received before read"); + data->target_rd_msg.msg_length = 1; + data->target_rd_msg.msg[0] = 0xFF; + return false; + } + + uint8_t reg_offset = data->target_wr_msg.msg[0]; + + switch (reg_offset) { + case GET_MMC_INFO_REG: { + uint8_t slot = get_slot_id(); + if (slot == 0xFF) { + data->target_rd_msg.msg_length = 1; + data->target_rd_msg.msg[0] = 0xFF; + return false; + } + + uint8_t eid = plat_get_eid(); + + data->target_rd_msg.msg_length = 2; + data->target_rd_msg.msg[0] = slot; + data->target_rd_msg.msg[1] = eid; + + LOG_DBG("Reply SLOT=%d, EID=%d", slot, eid); + break; + } + + default: + LOG_WRN("Unsupported read register: 0x%02x", reg_offset); + data->target_rd_msg.msg_length = 1; + data->target_rd_msg.msg[0] = 0xFF; + break; + } - return false; + return true; } static void command_set_slot_handle(void *arg) diff --git a/meta-facebook/sb-si/src/platform/plat_i2c_target.h b/meta-facebook/sb-si/src/platform/plat_i2c_target.h index 168b3f2caa..645f5bdf29 100644 --- a/meta-facebook/sb-si/src/platform/plat_i2c_target.h +++ b/meta-facebook/sb-si/src/platform/plat_i2c_target.h @@ -30,6 +30,8 @@ typedef struct { #define SLOT_2_I2C_SET_SLOT_REG 0x42 #define SLOT_3_I2C_SET_SLOT_REG 0x43 +#define GET_MMC_INFO_REG 0x50 + #define TARGET_ENABLE 1 #define TARGET_DISABLE 0 From 9af62b0c25bcea6baa6591d59bb7f0602e381982 Mon Sep 17 00:00:00 2001 From: adamHSU Date: Fri, 1 Aug 2025 09:50:01 +0800 Subject: [PATCH 8/9] sb: sitv3: modify platform version for 2025.31.01 release Summary: - Version Commit for 2025.31.01 Test Plan: - Build: Pass - Check BIC version: Pass --- meta-facebook/sb-si/src/platform/plat_version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-facebook/sb-si/src/platform/plat_version.h b/meta-facebook/sb-si/src/platform/plat_version.h index 7c979329de..b27f5c37cc 100755 --- a/meta-facebook/sb-si/src/platform/plat_version.h +++ b/meta-facebook/sb-si/src/platform/plat_version.h @@ -37,7 +37,7 @@ #define BIC_FW_YEAR_MSB 0x20 #define BIC_FW_YEAR_LSB 0x25 -#define BIC_FW_WEEK 0x29 +#define BIC_FW_WEEK 0x31 #define BIC_FW_VER 0x01 #define BIC_FW_platform_0 0x73 // char: s #define BIC_FW_platform_1 0x69 // char: i From 399841a087fcaaea5de2fb33a4d748a15ac24e2f Mon Sep 17 00:00:00 2001 From: adamHSU Date: Fri, 1 Aug 2025 13:53:22 +0800 Subject: [PATCH 9/9] sb: sitv3: format code to follow clang-format style Summary: - Apply clang-format to standardize code style. - No functional change. Test Plan: - Build code: Pass --- .../sb-si/src/platform/plat_pldm_fw_update.c | 3 +- .../sb-si/src/platform/plat_pldm_sensor.c | 85 ++++++++++--------- 2 files changed, 44 insertions(+), 44 deletions(-) mode change 100755 => 100644 meta-facebook/sb-si/src/platform/plat_pldm_fw_update.c diff --git a/meta-facebook/sb-si/src/platform/plat_pldm_fw_update.c b/meta-facebook/sb-si/src/platform/plat_pldm_fw_update.c old mode 100755 new mode 100644 index e2979832bc..427492f7e4 --- a/meta-facebook/sb-si/src/platform/plat_pldm_fw_update.c +++ b/meta-facebook/sb-si/src/platform/plat_pldm_fw_update.c @@ -221,7 +221,6 @@ void load_pldmupdate_comp_config(void) static uint8_t plat_pldm_pre_pcie_switch_update(void *fw_update_param) { - int pos = pal_get_pcie_switch_flash_position(); if (pos == -1) { return -1; @@ -242,7 +241,7 @@ static uint8_t plat_pldm_post_pcie_switch_update(void *fw_update_param) if (!ret) { return -1; } - + return 0; } diff --git a/meta-facebook/sb-si/src/platform/plat_pldm_sensor.c b/meta-facebook/sb-si/src/platform/plat_pldm_sensor.c index 5cf9603e62..0e9873d953 100644 --- a/meta-facebook/sb-si/src/platform/plat_pldm_sensor.c +++ b/meta-facebook/sb-si/src/platform/plat_pldm_sensor.c @@ -73,8 +73,7 @@ plat_sensor_vr_extend_info plat_sensor_vr_extend_table[] = { }; -plat_sensor_tmp_extend_info plat_sensor_tmp_extend_table[] = { -}; +plat_sensor_tmp_extend_info plat_sensor_tmp_extend_table[] = {}; static struct pldm_sensor_thread pal_pldm_sensor_thread[MAX_SENSOR_THREAD_ID] = { // thread id, thread name @@ -1445,9 +1444,9 @@ pldm_sensor_info plat_pldm_sensor_adc_table[] = { .cache = 0, .cache_status = PLDM_SENSOR_INITIALIZING, .arg0 = 158, // R1 = 15.8kΩ - .arg1 = 18, // R2 = 1.8kΩ + .arg1 = 18, // R2 = 1.8kΩ }, - }, + }, { { // ADC_P5V_STBY_SCALED @@ -1517,7 +1516,7 @@ pldm_sensor_info plat_pldm_sensor_adc_table[] = { .arg0 = 536, .arg1 = 180, }, - }, + }, { { // ADC_P3V3_AUX_SCALED @@ -1587,7 +1586,7 @@ pldm_sensor_info plat_pldm_sensor_adc_table[] = { .arg0 = 287, .arg1 = 180, }, - }, + }, { { // ADC_P1V5_PEX_SCALED @@ -1657,7 +1656,7 @@ pldm_sensor_info plat_pldm_sensor_adc_table[] = { .arg0 = 0, .arg1 = 1, }, - }, + }, { { // ADC_P1V2_PEX_SCALED @@ -1727,7 +1726,7 @@ pldm_sensor_info plat_pldm_sensor_adc_table[] = { .arg0 = 0, .arg1 = 1, }, - }, + }, { { // ADC_P1V8_PEX_SCALED @@ -1797,7 +1796,7 @@ pldm_sensor_info plat_pldm_sensor_adc_table[] = { .arg0 = 0, .arg1 = 1, }, - }, + }, }; PDR_sensor_auxiliary_names plat_pdr_sensor_aux_names_table[] = { @@ -2507,33 +2506,35 @@ bool get_plat_sensor_vr_polling_enable_flag() bool is_adc_access(uint8_t sensor_num) { - if (!get_plat_sensor_adc_polling_enable_flag() || !get_plat_sensor_polling_enable_flag()) { - LOG_DBG("Polling disabled: ADC polling enable flag=%d, general polling enable flag=%d", - get_plat_sensor_adc_polling_enable_flag(), get_plat_sensor_polling_enable_flag()); - return false; - } - - I2C_MSG msg = {0}; - uint8_t retry = 3; - - // Step 1: Write command byte to select CH0 - msg.bus = I2C_BUS1; - msg.target_addr = ADS7830_I2C_ADDR; - msg.tx_len = 1; - msg.rx_len = 1; - msg.data[0] = 0x8C; // Command byte for CH0 (single-ended, with power-down between conversions) - - // Step 2: Read ADC data (1 byte) - if (i2c_master_read(&msg, retry) != 0) { - LOG_ERR("ADS7830 read failed at addr 0x%x, bus %d (sensor_num=0x%x)", - ADS7830_I2C_ADDR, I2C_BUS1, sensor_num); - return false; - } - - // You can log the value if needed: - LOG_DBG("ADS7830 read CH0 success: value = %d (sensor_num=0x%x)", msg.data[0], sensor_num); - - return true; + if (!get_plat_sensor_adc_polling_enable_flag() || !get_plat_sensor_polling_enable_flag()) { + LOG_DBG("Polling disabled: ADC polling enable flag=%d, general polling enable flag=%d", + get_plat_sensor_adc_polling_enable_flag(), + get_plat_sensor_polling_enable_flag()); + return false; + } + + I2C_MSG msg = { 0 }; + uint8_t retry = 3; + + // Step 1: Write command byte to select CH0 + msg.bus = I2C_BUS1; + msg.target_addr = ADS7830_I2C_ADDR; + msg.tx_len = 1; + msg.rx_len = 1; + msg.data[0] = + 0x8C; // Command byte for CH0 (single-ended, with power-down between conversions) + + // Step 2: Read ADC data (1 byte) + if (i2c_master_read(&msg, retry) != 0) { + LOG_ERR("ADS7830 read failed at addr 0x%x, bus %d (sensor_num=0x%x)", + ADS7830_I2C_ADDR, I2C_BUS1, sensor_num); + return false; + } + + // You can log the value if needed: + LOG_DBG("ADS7830 read CH0 success: value = %d (sensor_num=0x%x)", msg.data[0], sensor_num); + + return true; } bool is_temp_access(uint8_t cfg_idx) @@ -2557,7 +2558,7 @@ bool get_sensor_info_by_sensor_id(uint8_t sensor_id, uint8_t *vr_bus, uint8_t *v int pldm_sensor_count = 0; if (sensor_id >= SENSOR_NUM_THERMAL_SENSOR_1_TEMP_C && - sensor_id <= SENSOR_NUM_THERMAL_SENSOR_2_TEMP_C) { + sensor_id <= SENSOR_NUM_THERMAL_SENSOR_2_TEMP_C) { pldm_sensor_count = plat_pldm_sensor_get_sensor_count(TEMP_SENSOR_THREAD_ID); for (int index = 0; index < pldm_sensor_count; index++) { if (plat_pldm_sensor_temp_table[index].pldm_sensor_cfg.num == sensor_id) { @@ -2586,10 +2587,11 @@ bool get_sensor_info_by_sensor_id(uint8_t sensor_id, uint8_t *vr_bus, uint8_t *v pldm_sensor_count = plat_pldm_sensor_get_sensor_count(ADC_SENSOR_THREAD_ID); for (int index = 0; index < pldm_sensor_count; index++) { if (plat_pldm_sensor_adc_table[index].pldm_sensor_cfg.num == sensor_id) { - *vr_addr = - plat_pldm_sensor_adc_table[index].pldm_sensor_cfg.target_addr; + *vr_addr = plat_pldm_sensor_adc_table[index] + .pldm_sensor_cfg.target_addr; *vr_bus = plat_pldm_sensor_adc_table[index].pldm_sensor_cfg.port; - *sensor_dev = plat_pldm_sensor_adc_table[index].pldm_sensor_cfg.type; + *sensor_dev = + plat_pldm_sensor_adc_table[index].pldm_sensor_cfg.type; return true; } } @@ -2603,7 +2605,7 @@ sensor_cfg *get_sensor_cfg_by_sensor_id(uint8_t sensor_id) int pldm_sensor_count = 0; if (sensor_id >= SENSOR_NUM_THERMAL_SENSOR_1_TEMP_C && - sensor_id <= SENSOR_NUM_THERMAL_SENSOR_2_TEMP_C) { + sensor_id <= SENSOR_NUM_THERMAL_SENSOR_2_TEMP_C) { pldm_sensor_count = plat_pldm_sensor_get_sensor_count(TEMP_SENSOR_THREAD_ID); for (int index = 0; index < pldm_sensor_count; index++) { if (plat_pldm_sensor_temp_table[index].pldm_sensor_cfg.num == sensor_id) { @@ -2627,7 +2629,6 @@ sensor_cfg *get_sensor_cfg_by_sensor_id(uint8_t sensor_id) } } } - return NULL; }