@@ -54,6 +54,7 @@ static rsmi_status_t (*xrsmi_dev_pci_id_get)(uint32_t, uint64_t*);
5454static rsmi_status_t (* xrsmi_dev_perf_level_get )(uint32_t , rsmi_dev_perf_level_t * );
5555static rsmi_status_t (* xrsmi_dev_power_cap_get )(uint32_t , uint32_t , uint64_t * );
5656static rsmi_status_t (* xrsmi_dev_power_cap_range_get )(uint32_t , uint32_t , uint64_t * , uint64_t * );
57+ static rsmi_status_t (* xrsmi_dev_power_get )(uint32_t , uint64_t * , uint32_t * );
5758static rsmi_status_t (* xrsmi_dev_serial_number_get )(uint32_t , char * , uint32_t );
5859static rsmi_status_t (* xrsmi_dev_temp_metric_get )(
5960 uint32_t , uint32_t , rsmi_temperature_metric_t , int64_t * );
@@ -118,6 +119,7 @@ static int load_rsmi() {
118119 DLSYM (xrsmi_dev_perf_level_get , "rsmi_dev_perf_level_get" );
119120 DLSYM (xrsmi_dev_power_cap_get , "rsmi_dev_power_cap_get" );
120121 DLSYM (xrsmi_dev_power_cap_range_get , "rsmi_dev_power_cap_range_get" );
122+ DLSYM (xrsmi_dev_power_get , "rsmi_dev_power_get" );
121123 DLSYM (xrsmi_dev_serial_number_get , "rsmi_dev_serial_number_get" );
122124 DLSYM (xrsmi_dev_temp_metric_get , "rsmi_dev_temp_metric_get" );
123125 DLSYM (xrsmi_dev_unique_id_get , "rsmi_dev_unique_id_get" );
@@ -244,9 +246,15 @@ int amdml_device_get_card_state(uint32_t device, struct amdml_card_state_t* info
244246 xrsmi_dev_memory_usage_get (device , RSMI_MEM_TYPE_VRAM , & infobuf -> mem_used );
245247
246248 uint64_t power ;
249+ // Power types: RSMI_AVERAGE_POWER, RSMI_CURRENT_POWER, RSMI_INVALID_POWER
250+ uint32_t power_type ;
251+
247252 if (xrsmi_dev_current_socket_power_get (device , & power ) == 0 ) {
248253 infobuf -> power = (unsigned )(power / 1000 );
254+ } else if (xrsmi_dev_power_get (device , & power , & power_type ) == 0 ) {
255+ infobuf -> power = (unsigned )(power / 1000 );
249256 }
257+
250258 if (xrsmi_dev_power_cap_get (device , 0 , & power ) == 0 ) {
251259 infobuf -> power_limit = (unsigned )(power / 1000 );
252260 }
0 commit comments