@@ -979,18 +979,25 @@ static enum ec_status get_gpu_serial(struct host_cmd_handler_args *args)
979
979
{
980
980
const struct ec_params_gpu_serial * p = args -> params ;
981
981
struct ec_response_get_gpu_serial * r = args -> response ;
982
- if (!gpu_cfg_descriptor_valid ) {
983
- return EC_RES_UNAVAILABLE ;
984
- }
985
982
986
- r -> idx = p -> idx ;
987
- r -> valid = true;
988
- if (p -> idx == 0 ) {
989
- memcpy (r -> serial , gpu_descriptor .serial , sizeof (r -> serial ));
990
- } else if (p -> idx < GPU_SUBSYS_MAX ){
991
- memcpy (r -> serial , gpu_subsys_serials [p -> idx - 1 ], sizeof (r -> serial ));
983
+ memset (r -> serial , 0x00 , GPU_SERIAL_LEN );
984
+ if (gpu_cfg_descriptor_valid ) {
985
+ r -> idx = p -> idx ;
986
+ r -> valid = true;
987
+ if (p -> idx == 0 ) {
988
+ memcpy (r -> serial , gpu_descriptor .serial , sizeof (r -> serial ));
989
+ } else if (p -> idx < GPU_SUBSYS_MAX ) {
990
+ memcpy (r -> serial , gpu_subsys_serials [p -> idx - 1 ], sizeof (r -> serial ));
991
+ }
992
+ } else if (gpu_fan_board_present ()) {
993
+ r -> idx = 0 ;
994
+ r -> valid = true;
995
+ memcpy (r -> serial , "UMA FAN" , sizeof ("UMA FAN" ));
996
+ } else {
997
+ r -> idx = 0 ;
998
+ r -> valid = true;
999
+ memcpy (r -> serial , "Not detected" , sizeof ("Not detected" ));
992
1000
}
993
-
994
1001
args -> response_size = sizeof (* r );
995
1002
996
1003
return EC_RES_SUCCESS ;
@@ -1040,7 +1047,6 @@ static int program_eeprom(const char * serial, struct gpu_cfg_descriptor * descr
1040
1047
k_msleep (5 );
1041
1048
rv = i2c_read8 (I2C_PORT_GPU0 , 0x50 , 0x00 , & d );
1042
1049
} while (++ i < 32 && rv != EC_SUCCESS );
1043
-
1044
1050
}
1045
1051
return rv ;
1046
1052
}
@@ -1052,14 +1058,17 @@ static enum ec_status hc_program_gpu_eeprom(struct host_cmd_handler_args *args)
1052
1058
1053
1059
if (p -> magic == 0x0D ) {
1054
1060
r -> valid = 1 ;
1061
+ /* copy PCBA serial to output struct */
1062
+ if (gpu_cfg_descriptor_valid ) {
1063
+ memcpy (gpu_cfg .pcba_serial .serial , gpu_subsys_serials [0 ], GPU_SERIAL_LEN );
1064
+ }
1055
1065
program_eeprom (p -> serial , (void * )& gpu_cfg , sizeof (gpu_cfg ));
1056
1066
} else if (p -> magic == 0x55 ) {
1057
1067
r -> valid = 1 ;
1058
1068
program_eeprom (p -> serial , (void * )& ssd_cfg , sizeof (ssd_cfg ));
1059
1069
} else {
1060
1070
r -> valid = 0 ;
1061
1071
}
1062
-
1063
1072
1064
1073
args -> response_size = sizeof (* r );
1065
1074
0 commit comments