Skip to content

Commit 6f31fb4

Browse files
authored
gpuapi: amd: use fallback function for getting power (#503)
1 parent dc5fe1b commit 6f31fb4

1 file changed

Lines changed: 8 additions & 0 deletions

File tree

gpuapi/sonar-amd.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ static rsmi_status_t (*xrsmi_dev_pci_id_get)(uint32_t, uint64_t*);
5454
static rsmi_status_t (*xrsmi_dev_perf_level_get)(uint32_t, rsmi_dev_perf_level_t*);
5555
static rsmi_status_t (*xrsmi_dev_power_cap_get)(uint32_t, uint32_t, uint64_t*);
5656
static 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*);
5758
static rsmi_status_t (*xrsmi_dev_serial_number_get)(uint32_t, char*, uint32_t);
5859
static 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

Comments
 (0)