From 0691b43922138372fd05974324d2c4b06f1728f3 Mon Sep 17 00:00:00 2001 From: Pablo Yang Date: Thu, 11 Dec 2025 08:34:36 +0000 Subject: [PATCH] gc2: es: Modify DIMM sensor [Task Description] This patch updates DIMM sensor naming convention to align with hardware configuration. The sensor names are modified from A0/A2/A4/A6 to A2/A3/A6/A7 to accurately reflect the actual DIMM slot positions on the motherboard. [Motivation] The original sensor naming (DIMMA0, DIMMA2, DIMMA4, DIMMA6) did not match the physical DIMM slot layout on GC2 platform. This caused confusion during system monitoring and debugging. The corrected naming (DIMMA2, DIMMA3, DIMMA6, DIMMA7) ensures sensor names correspond to actual hardware slots, improving maintainability and reducing potential misidentification of DIMM-related issues. [Design] 1. Modified DIMM temperature sensors via PECI (0x06, 0x07, 0x0A, 0x0B): - SENSOR_NUM_TEMP_DIMM_A2 (0x06): DIMM A2 channel 2 - SENSOR_NUM_TEMP_DIMM_A3 (0x07): DIMM A3 channel 3 - SENSOR_NUM_TEMP_DIMM_A6 (0x0A): DIMM A6 channel 6 - SENSOR_NUM_TEMP_DIMM_A7 (0x0B): DIMM A7 channel 7 Using Intel PECI interface with pre-read handlers for DIMM presence check 2. Modified DIMM PMIC power sensors (0x40-0x43): - SENSOR_NUM_PWR_DIMMA2_PMIC (0x40): DIMM A2 power - SENSOR_NUM_PWR_DIMMA3_PMIC (0x41): DIMM A3 power - SENSOR_NUM_PWR_DIMMA6_PMIC (0x42): DIMM A6 power - SENSOR_NUM_PWR_DIMMA7_PMIC (0x43): DIMM A7 power Using PMIC driver with proper initialization arguments [Test Result] Tested on GC2-ES platform, all DIMM sensors reporting correctly with proper naming : root@bmc-oob:~# sensor-util server server: MB_INLET_TEMP_C (0x1) : 21.000 C | (ok) MB_PCH_TEMP_C (0x4) : NA | (na) MB_SOC_CPU_TEMP_C (0x5) : 34.000 C | (ok) MB_DIMMA2_TEMP_C (0x6) : 28.000 C | (ok) MB_DIMMA3_TEMP_C (0x7) : 27.000 C | (ok) MB_DIMMA6_TEMP_C (0xA) : 28.000 C | (ok) MB_DIMMA7_TEMP_C (0xB) : 27.000 C | (ok) MB_E1S_TEMP_C (0xD) : NA | (na) MB_HSC_TEMP_C (0xE) : 25.000 C | (ok) MB_VR_VCCIN_TEMP_C (0xF) : 35.000 C | (ok) MB_VR_FIVRA_TEMP_C (0x10) : 32.000 C | (ok) MB_VR_EHV_TEMP_C (0x11) : 32.000 C | (ok) MB_VR_VCCD_TEMP_C (0x12) : 35.000 C | (ok) MB_VR_FAON_TEMP_C (0x13) : 35.000 C | (ok) MB_SOC_THERMAL_MARGIN_C (0x14) : 44.000 C | (ok) MB_SOC_TJMAX_C (0x15) : 78.000 C | (ok) MB_ADC_P12V_STBY_VOLT_V (0x20) : 12.159 Volts | (ok) MB_ADC_P3V3_STBY_VOLT_V (0x21) : 3.312 Volts | (ok) MB_ADC_P1V05_PCH_VOLT_V (0x22) : 1.050 Volts | (ok) MB_ADC_P3V_BAT_VOLT_V (0x23) : 3.120 Volts | (ok) MB_ADC_P5V_STBY_VOLT_V (0x24) : 4.995 Volts | (ok) MB_ADC_P12V_DIMM_VOLT_V (0x25) : 12.180 Volts | (ok) MB_ADC_P1V2_STBY_VOLT_V (0x26) : 1.194 Volts | (ok) MB_ADC_P1V8_STBY_VOLT_V (0x27) : 1.800 Volts | (ok) MB_HSC_INPUT_VOLT_V (0x29) : 12.159 Volts | (ok) MB_VR_VCCIN_VOLT_V (0x2A) : 1.620 Volts | (ok) MB_VR_FIVRA_VOLT_V (0x2B) : 1.810 Volts | (ok) MB_VR_EHV_VOLT_V (0x2C) : 1.790 Volts | (ok) MB_VR_VCCD_VOLT_V (0x2D) : 1.141 Volts | (ok) MB_VR_FAON_VOLT_V (0x2E) : 1.057 Volts | (ok) MB_HSC_OUTPUT_CURR_A (0x30) : 19.550 Amps | (ok) MB_VR_VCCIN_CURR_A (0x31) : 14.040 Amps | (ok) MB_VR_FIVRA_CURR_A (0x32) : 3.720 Amps | (ok) MB_VR_EHV_CURR_A (0x33) : 0.480 Amps | (ok) MB_VR_VCCD_CURR_A (0x34) : 0.380 Amps | (ok) MB_VR_FAON_CURR_A (0x35) : 5.720 Amps | (ok) MB_SOC_PACKAGE_PWR_W (0x38) : 33.000 Watts | (ok) MB_HSC_INPUT_PWR_W (0x39) : 243.040 Watts | (ok) MB_VR_VCCIN_PWR_W (0x3A) : 14.100 Watts | (ok) MB_VR_FIVRA_PWR_W (0x3C) : 6.840 Watts | (ok) MB_VR_EHV_PWR_W (0x3D) : 0.912 Watts | (ok) MB_VR_VCCD_PWR_W (0x3E) : 0.000 Watts | (ok) MB_VR_FAON_PWR_W (0x3F) : 5.880 Watts | (ok) MB_VR_DIMMA2_PMIC_PWR_W (0x40) : 0.280 Watts | (ok) MB_VR_DIMMA3_PMIC_PWR_W (0x41) : 1.120 Watts | (ok) MB_VR_DIMMA6_PMIC_PWR_W (0x42) : 0.700 Watts | (ok) MB_VR_DIMMA7_PMIC_PWR_W (0x43) : 0.420 Watts | (ok) --- .../gc2-es/src/platform/plat_sdr_table.c | 48 +++++++++---------- .../gc2-es/src/platform/plat_sensor_table.c | 28 +++++------ .../gc2-es/src/platform/plat_sensor_table.h | 24 +++++----- 3 files changed, 50 insertions(+), 50 deletions(-) diff --git a/meta-facebook/gc2-es/src/platform/plat_sdr_table.c b/meta-facebook/gc2-es/src/platform/plat_sdr_table.c index 7d83a394cf..fe8fc6d806 100644 --- a/meta-facebook/gc2-es/src/platform/plat_sdr_table.c +++ b/meta-facebook/gc2-es/src/platform/plat_sdr_table.c @@ -2043,7 +2043,7 @@ SDR_Full_sensor plat_sdr_table[] = { "MB_VR_FAON_VOLT_V", }, { - // DIMM A0 on board temperature + // DIMM A2 on board temperature 0x00, 0x00, // record ID IPMI_SDR_VER_15, // SDR ver @@ -2052,7 +2052,7 @@ SDR_Full_sensor plat_sdr_table[] = { SELF_I2C_ADDRESS << 1, // owner id 0x00, // owner lun - SENSOR_NUM_TEMP_DIMM_A0, // sensor number + SENSOR_NUM_TEMP_DIMM_A2, // sensor number IPMI_SDR_ENTITY_ID_SYS_BOARD, // entity id 0x00, // entity instance @@ -2101,10 +2101,10 @@ SDR_Full_sensor plat_sdr_table[] = { 0x00, // reserved 0x00, // OEM IPMI_SDR_STRING_TYPE_ASCII_8, // ID len, should be same as "size of struct" - "MB_DIMMA0_TEMP_C", + "MB_DIMMA2_TEMP_C", }, { - // DIMM A2 on board temperature + // DIMM A3 on board temperature 0x00, 0x00, // record ID IPMI_SDR_VER_15, // SDR ver @@ -2113,7 +2113,7 @@ SDR_Full_sensor plat_sdr_table[] = { SELF_I2C_ADDRESS << 1, // owner id 0x00, // owner lun - SENSOR_NUM_TEMP_DIMM_A2, // sensor number + SENSOR_NUM_TEMP_DIMM_A3, // sensor number IPMI_SDR_ENTITY_ID_SYS_BOARD, // entity id 0x00, // entity instance @@ -2162,10 +2162,10 @@ SDR_Full_sensor plat_sdr_table[] = { 0x00, // reserved 0x00, // OEM IPMI_SDR_STRING_TYPE_ASCII_8, // ID len, should be same as "size of struct" - "MB_DIMMA2_TEMP_C", + "MB_DIMMA3_TEMP_C", }, { - // DIMM A4 on board temperature + // DIMM A6 on board temperature 0x00, 0x00, // record ID IPMI_SDR_VER_15, // SDR ver @@ -2174,7 +2174,7 @@ SDR_Full_sensor plat_sdr_table[] = { SELF_I2C_ADDRESS << 1, // owner id 0x00, // owner lun - SENSOR_NUM_TEMP_DIMM_A4, // sensor number + SENSOR_NUM_TEMP_DIMM_A6, // sensor number IPMI_SDR_ENTITY_ID_SYS_BOARD, // entity id 0x00, // entity instance @@ -2223,10 +2223,10 @@ SDR_Full_sensor plat_sdr_table[] = { 0x00, // reserved 0x00, // OEM IPMI_SDR_STRING_TYPE_ASCII_8, // ID len, should be same as "size of struct" - "MB_DIMMA4_TEMP_C", + "MB_DIMMA6_TEMP_C", }, { - // DIMM A6 on board temperature + // DIMM A7 on board temperature 0x00, 0x00, // record ID IPMI_SDR_VER_15, // SDR ver @@ -2235,7 +2235,7 @@ SDR_Full_sensor plat_sdr_table[] = { SELF_I2C_ADDRESS << 1, // owner id 0x00, // owner lun - SENSOR_NUM_TEMP_DIMM_A6, // sensor number + SENSOR_NUM_TEMP_DIMM_A7, // sensor number IPMI_SDR_ENTITY_ID_SYS_BOARD, // entity id 0x00, // entity instance @@ -2284,10 +2284,10 @@ SDR_Full_sensor plat_sdr_table[] = { 0x00, // reserved 0x00, // OEM IPMI_SDR_STRING_TYPE_ASCII_8, // ID len, should be same as "size of struct" - "MB_DIMMA6_TEMP_C", + "MB_DIMMA7_TEMP_C", }, { - // DIMMA0 power + // DIMMA2 power 0x00, 0x00, // record ID IPMI_SDR_VER_15, // SDR ver @@ -2296,7 +2296,7 @@ SDR_Full_sensor plat_sdr_table[] = { SELF_I2C_ADDRESS << 1, // owner id 0x00, // owner lun - SENSOR_NUM_PWR_DIMMA0_PMIC, // sensor number + SENSOR_NUM_PWR_DIMMA2_PMIC, // sensor number IPMI_SDR_ENTITY_ID_SYS_BOARD, // entity id 0x00, // entity instance @@ -2345,10 +2345,10 @@ SDR_Full_sensor plat_sdr_table[] = { 0x00, // reserved 0x00, // OEM IPMI_SDR_STRING_TYPE_ASCII_8, // ID len, should be same as "size of struct" - "MB_VR_DIMMA0_PMIC_PWR_W", + "MB_VR_DIMMA2_PMIC_PWR_W", }, { - // DIMMA2 power + // DIMMA3 power 0x00, 0x00, // record ID IPMI_SDR_VER_15, // SDR ver @@ -2357,7 +2357,7 @@ SDR_Full_sensor plat_sdr_table[] = { SELF_I2C_ADDRESS << 1, // owner id 0x00, // owner lun - SENSOR_NUM_PWR_DIMMA2_PMIC, // sensor number + SENSOR_NUM_PWR_DIMMA3_PMIC, // sensor number IPMI_SDR_ENTITY_ID_SYS_BOARD, // entity id 0x00, // entity instance @@ -2406,10 +2406,10 @@ SDR_Full_sensor plat_sdr_table[] = { 0x00, // reserved 0x00, // OEM IPMI_SDR_STRING_TYPE_ASCII_8, // ID len, should be same as "size of struct" - "MB_VR_DIMMA2_PMIC_PWR_W", + "MB_VR_DIMMA3_PMIC_PWR_W", }, { - // DIMMA4 power + // DIMMA6 power 0x00, 0x00, // record ID IPMI_SDR_VER_15, // SDR ver @@ -2418,7 +2418,7 @@ SDR_Full_sensor plat_sdr_table[] = { SELF_I2C_ADDRESS << 1, // owner id 0x00, // owner lun - SENSOR_NUM_PWR_DIMMA4_PMIC, // sensor number + SENSOR_NUM_PWR_DIMMA6_PMIC, // sensor number IPMI_SDR_ENTITY_ID_SYS_BOARD, // entity id 0x00, // entity instance @@ -2467,10 +2467,10 @@ SDR_Full_sensor plat_sdr_table[] = { 0x00, // reserved 0x00, // OEM IPMI_SDR_STRING_TYPE_ASCII_8, // ID len, should be same as "size of struct" - "MB_VR_DIMMA4_PMIC_PWR_W", + "MB_VR_DIMMA6_PMIC_PWR_W", }, { - // DIMMA6 power + // DIMMA7 power 0x00, 0x00, // record ID IPMI_SDR_VER_15, // SDR ver @@ -2479,7 +2479,7 @@ SDR_Full_sensor plat_sdr_table[] = { SELF_I2C_ADDRESS << 1, // owner id 0x00, // owner lun - SENSOR_NUM_PWR_DIMMA6_PMIC, // sensor number + SENSOR_NUM_PWR_DIMMA7_PMIC, // sensor number IPMI_SDR_ENTITY_ID_SYS_BOARD, // entity id 0x00, // entity instance @@ -2528,7 +2528,7 @@ SDR_Full_sensor plat_sdr_table[] = { 0x00, // reserved 0x00, // OEM IPMI_SDR_STRING_TYPE_ASCII_8, // ID len, should be same as "size of struct" - "MB_VR_DIMMA6_PMIC_PWR_W", + "MB_VR_DIMMA7_PMIC_PWR_W", }, { // SSD0 temperature diff --git a/meta-facebook/gc2-es/src/platform/plat_sensor_table.c b/meta-facebook/gc2-es/src/platform/plat_sensor_table.c index f6fe661a3b..3e33c7c048 100644 --- a/meta-facebook/gc2-es/src/platform/plat_sensor_table.c +++ b/meta-facebook/gc2-es/src/platform/plat_sensor_table.c @@ -46,10 +46,10 @@ sensor_poll_time_cfg diff_poll_time_sensor_table[] = { dimm_pmic_mapping_cfg dimm_pmic_map_table[] = { // dimm_sensor_num, mapping_pmic_sensor_num - { SENSOR_NUM_TEMP_DIMM_A0, SENSOR_NUM_PWR_DIMMA0_PMIC }, { SENSOR_NUM_TEMP_DIMM_A2, SENSOR_NUM_PWR_DIMMA2_PMIC }, - { SENSOR_NUM_TEMP_DIMM_A4, SENSOR_NUM_PWR_DIMMA4_PMIC }, + { SENSOR_NUM_TEMP_DIMM_A3, SENSOR_NUM_PWR_DIMMA3_PMIC }, { SENSOR_NUM_TEMP_DIMM_A6, SENSOR_NUM_PWR_DIMMA6_PMIC }, + { SENSOR_NUM_TEMP_DIMM_A7, SENSOR_NUM_PWR_DIMMA7_PMIC }, }; bool m2_access(uint8_t sensor_num) @@ -92,22 +92,22 @@ sensor_cfg plat_sensor_config[] = { SENSOR_INIT_STATUS, NULL, NULL, NULL, NULL, NULL }, // DIMM temp - { SENSOR_NUM_TEMP_DIMM_A0, sensor_dev_intel_peci, NONE, CPU_PECI_ADDR, - PECI_TEMP_CHANNEL0_DIMM0, post_access, 0, 0, SAMPLE_COUNT_DEFAULT, POLL_TIME_DEFAULT, - ENABLE_SENSOR_POLLING, 0, SENSOR_INIT_STATUS, pre_intel_peci_dimm_read, - &dimm_pre_proc_args[0], NULL, NULL, NULL }, { SENSOR_NUM_TEMP_DIMM_A2, sensor_dev_intel_peci, NONE, CPU_PECI_ADDR, PECI_TEMP_CHANNEL2_DIMM0, post_access, 0, 0, SAMPLE_COUNT_DEFAULT, POLL_TIME_DEFAULT, ENABLE_SENSOR_POLLING, 0, SENSOR_INIT_STATUS, pre_intel_peci_dimm_read, &dimm_pre_proc_args[1], NULL, NULL, NULL }, - { SENSOR_NUM_TEMP_DIMM_A4, sensor_dev_intel_peci, NONE, CPU_PECI_ADDR, - PECI_TEMP_CHANNEL4_DIMM0, post_access, 0, 0, SAMPLE_COUNT_DEFAULT, POLL_TIME_DEFAULT, + { SENSOR_NUM_TEMP_DIMM_A3, sensor_dev_intel_peci, NONE, CPU_PECI_ADDR, + PECI_TEMP_CHANNEL3_DIMM0, post_access, 0, 0, SAMPLE_COUNT_DEFAULT, POLL_TIME_DEFAULT, ENABLE_SENSOR_POLLING, 0, SENSOR_INIT_STATUS, pre_intel_peci_dimm_read, - &dimm_pre_proc_args[3], NULL, NULL, NULL }, + &dimm_pre_proc_args[2], NULL, NULL, NULL }, { SENSOR_NUM_TEMP_DIMM_A6, sensor_dev_intel_peci, NONE, CPU_PECI_ADDR, PECI_TEMP_CHANNEL6_DIMM0, post_access, 0, 0, SAMPLE_COUNT_DEFAULT, POLL_TIME_DEFAULT, ENABLE_SENSOR_POLLING, 0, SENSOR_INIT_STATUS, pre_intel_peci_dimm_read, &dimm_pre_proc_args[4], NULL, NULL, NULL }, + { SENSOR_NUM_TEMP_DIMM_A7, sensor_dev_intel_peci, NONE, CPU_PECI_ADDR, + PECI_TEMP_CHANNEL7_DIMM0, post_access, 0, 0, SAMPLE_COUNT_DEFAULT, POLL_TIME_DEFAULT, + ENABLE_SENSOR_POLLING, 0, SENSOR_INIT_STATUS, pre_intel_peci_dimm_read, + &dimm_pre_proc_args[5], NULL, NULL, NULL }, // adc voltage { SENSOR_NUM_VOL_STBY12V, sensor_dev_ast_adc, ADC_PORT0, NONE, NONE, stby_access, 667, 100, @@ -213,18 +213,18 @@ sensor_cfg plat_sensor_config[] = { SENSOR_INIT_STATUS, NULL, NULL, NULL, NULL, NULL }, // DIMM PMIC power - { SENSOR_NUM_PWR_DIMMA0_PMIC, sensor_dev_pmic, I2C_BUS3, PCH_ADDR, NONE, me_access, 0, 0, - SAMPLE_COUNT_DEFAULT, POLL_TIME_DEFAULT, ENABLE_SENSOR_POLLING, 0, SENSOR_INIT_STATUS, - NULL, NULL, NULL, NULL, &pmic_init_args[0] }, { SENSOR_NUM_PWR_DIMMA2_PMIC, sensor_dev_pmic, I2C_BUS3, PCH_ADDR, NONE, me_access, 0, 0, SAMPLE_COUNT_DEFAULT, POLL_TIME_DEFAULT, ENABLE_SENSOR_POLLING, 0, SENSOR_INIT_STATUS, NULL, NULL, NULL, NULL, &pmic_init_args[1] }, - { SENSOR_NUM_PWR_DIMMA4_PMIC, sensor_dev_pmic, I2C_BUS3, PCH_ADDR, NONE, me_access, 0, 0, + { SENSOR_NUM_PWR_DIMMA3_PMIC, sensor_dev_pmic, I2C_BUS3, PCH_ADDR, NONE, me_access, 0, 0, SAMPLE_COUNT_DEFAULT, POLL_TIME_DEFAULT, ENABLE_SENSOR_POLLING, 0, SENSOR_INIT_STATUS, - NULL, NULL, NULL, NULL, &pmic_init_args[3] }, + NULL, NULL, NULL, NULL, &pmic_init_args[2] }, { SENSOR_NUM_PWR_DIMMA6_PMIC, sensor_dev_pmic, I2C_BUS3, PCH_ADDR, NONE, me_access, 0, 0, SAMPLE_COUNT_DEFAULT, POLL_TIME_DEFAULT, ENABLE_SENSOR_POLLING, 0, SENSOR_INIT_STATUS, NULL, NULL, NULL, NULL, &pmic_init_args[4] }, + { SENSOR_NUM_PWR_DIMMA7_PMIC, sensor_dev_pmic, I2C_BUS3, PCH_ADDR, NONE, me_access, 0, 0, + SAMPLE_COUNT_DEFAULT, POLL_TIME_DEFAULT, ENABLE_SENSOR_POLLING, 0, SENSOR_INIT_STATUS, + NULL, NULL, NULL, NULL, &pmic_init_args[5] }, }; sensor_cfg mp5990_sensor_config_table[] = { diff --git a/meta-facebook/gc2-es/src/platform/plat_sensor_table.h b/meta-facebook/gc2-es/src/platform/plat_sensor_table.h index 07087ee1ad..4f1ee7c7ab 100644 --- a/meta-facebook/gc2-es/src/platform/plat_sensor_table.h +++ b/meta-facebook/gc2-es/src/platform/plat_sensor_table.h @@ -65,12 +65,12 @@ #define SENSOR_NUM_TEMP_TMP75_FIO 0x03 #define SENSOR_NUM_TEMP_PCH 0x04 #define SENSOR_NUM_TEMP_CPU 0x05 -#define SENSOR_NUM_TEMP_DIMM_A0 0x06 -#define SENSOR_NUM_TEMP_DIMM_A2 0x07 -#define SENSOR_NUM_TEMP_DIMM_A3 0x09 -#define SENSOR_NUM_TEMP_DIMM_A4 0x0A -#define SENSOR_NUM_TEMP_DIMM_A6 0x0B -#define SENSOR_NUM_TEMP_DIMM_A7 0x0C +//#define SENSOR_NUM_TEMP_DIMM_A0 0x06 +#define SENSOR_NUM_TEMP_DIMM_A2 0x06 +#define SENSOR_NUM_TEMP_DIMM_A3 0x07 +//#define SENSOR_NUM_TEMP_DIMM_A4 0x0A +#define SENSOR_NUM_TEMP_DIMM_A6 0x0A +#define SENSOR_NUM_TEMP_DIMM_A7 0x0B #define SENSOR_NUM_TEMP_SSD0 0x0D #define SENSOR_NUM_TEMP_HSC 0x0E #define SENSOR_NUM_TEMP_CPU_MARGIN 0x14 @@ -111,12 +111,12 @@ #define SENSOR_NUM_PWR_PVCCFA_EHV 0x3D #define SENSOR_NUM_PWR_PVCCD_HV 0x3E #define SENSOR_NUM_PWR_PVCCINFAON 0x3F -#define SENSOR_NUM_PWR_DIMMA0_PMIC 0x40 -#define SENSOR_NUM_PWR_DIMMA2_PMIC 0x41 -//#define SENSOR_NUM_PWR_DIMMA3_PMIC 0x36 -#define SENSOR_NUM_PWR_DIMMA4_PMIC 0x42 -#define SENSOR_NUM_PWR_DIMMA6_PMIC 0x43 -#define SENSOR_NUM_PWR_DIMMA7_PMIC 0x47 +//#define SENSOR_NUM_PWR_DIMMA0_PMIC 0x40 +#define SENSOR_NUM_PWR_DIMMA2_PMIC 0x40 +#define SENSOR_NUM_PWR_DIMMA3_PMIC 0x41 +//#define SENSOR_NUM_PWR_DIMMA4_PMIC 0x41 +#define SENSOR_NUM_PWR_DIMMA6_PMIC 0x42 +#define SENSOR_NUM_PWR_DIMMA7_PMIC 0x43 #define SENSOR_NUM_SYSTEM_STATUS 0x10 #define SENSOR_NUM_POWER_ERROR 0x56