Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

drm/amd/pm: Add read sensor support

Add read sensor support for smu_v15_0_8

v2: Remove gfx voltage support (Lijo)

Signed-off-by: Asad Kamal <asad.kamal@amd.com>
Reviewed-by: Lijo Lazar <lijo.lazar@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Asad Kamal and committed by
Alex Deucher
1415503d a6c2ecd9

+112
+112
drivers/gpu/drm/amd/pm/swsmu/smu15/smu_v15_0_8_ppt.c
··· 434 434 return smu_v15_0_8_get_smu_metrics_data(smu, member_type, value); 435 435 } 436 436 437 + static int smu_v15_0_8_get_current_activity_percent(struct smu_context *smu, 438 + enum amd_pp_sensors sensor, 439 + uint32_t *value) 440 + { 441 + int ret = 0; 442 + 443 + if (!value) 444 + return -EINVAL; 445 + 446 + switch (sensor) { 447 + case AMDGPU_PP_SENSOR_GPU_LOAD: 448 + ret = smu_v15_0_8_get_smu_metrics_data(smu, 449 + METRICS_AVERAGE_GFXACTIVITY, value); 450 + break; 451 + case AMDGPU_PP_SENSOR_MEM_LOAD: 452 + ret = smu_v15_0_8_get_smu_metrics_data(smu, 453 + METRICS_AVERAGE_MEMACTIVITY, value); 454 + break; 455 + default: 456 + dev_err(smu->adev->dev, 457 + "Invalid sensor for retrieving clock activity\n"); 458 + return -EINVAL; 459 + } 460 + 461 + return ret; 462 + } 463 + 464 + static int smu_v15_0_8_thermal_get_temperature(struct smu_context *smu, 465 + enum amd_pp_sensors sensor, 466 + uint32_t *value) 467 + { 468 + int ret = 0; 469 + 470 + if (!value) 471 + return -EINVAL; 472 + 473 + switch (sensor) { 474 + case AMDGPU_PP_SENSOR_HOTSPOT_TEMP: 475 + ret = smu_v15_0_8_get_smu_metrics_data(smu, 476 + METRICS_TEMPERATURE_HOTSPOT, value); 477 + break; 478 + case AMDGPU_PP_SENSOR_MEM_TEMP: 479 + ret = smu_v15_0_8_get_smu_metrics_data(smu, 480 + METRICS_TEMPERATURE_MEM, value); 481 + break; 482 + default: 483 + dev_err(smu->adev->dev, "Invalid sensor for retrieving temp\n"); 484 + return -EINVAL; 485 + } 486 + 487 + return ret; 488 + } 489 + 490 + static int smu_v15_0_8_read_sensor(struct smu_context *smu, 491 + enum amd_pp_sensors sensor, void *data, 492 + uint32_t *size) 493 + { 494 + struct smu_15_0_dpm_context *dpm_context = smu->smu_dpm.dpm_context; 495 + int ret = 0; 496 + 497 + if (amdgpu_ras_intr_triggered()) 498 + return 0; 499 + 500 + if (!data || !size) 501 + return -EINVAL; 502 + 503 + switch (sensor) { 504 + case AMDGPU_PP_SENSOR_MEM_LOAD: 505 + case AMDGPU_PP_SENSOR_GPU_LOAD: 506 + ret = smu_v15_0_8_get_current_activity_percent(smu, sensor, 507 + (uint32_t *)data); 508 + *size = 4; 509 + break; 510 + case AMDGPU_PP_SENSOR_GPU_INPUT_POWER: 511 + ret = smu_v15_0_8_get_smu_metrics_data(smu, 512 + METRICS_CURR_SOCKETPOWER, 513 + (uint32_t *)data); 514 + *size = 4; 515 + break; 516 + case AMDGPU_PP_SENSOR_HOTSPOT_TEMP: 517 + case AMDGPU_PP_SENSOR_MEM_TEMP: 518 + ret = smu_v15_0_8_thermal_get_temperature(smu, sensor, 519 + (uint32_t *)data); 520 + *size = 4; 521 + break; 522 + case AMDGPU_PP_SENSOR_GFX_MCLK: 523 + ret = smu_v15_0_8_get_current_clk_freq_by_table(smu, 524 + SMU_UCLK, (uint32_t *)data); 525 + /* the output clock frequency in 10K unit */ 526 + *(uint32_t *)data *= 100; 527 + *size = 4; 528 + break; 529 + case AMDGPU_PP_SENSOR_GFX_SCLK: 530 + ret = smu_v15_0_8_get_current_clk_freq_by_table(smu, 531 + SMU_GFXCLK, (uint32_t *)data); 532 + *(uint32_t *)data *= 100; 533 + *size = 4; 534 + break; 535 + case AMDGPU_PP_SENSOR_VDDBOARD: 536 + *(uint32_t *)data = dpm_context->board_volt; 537 + *size = 4; 538 + break; 539 + case AMDGPU_PP_SENSOR_GPU_AVG_POWER: 540 + default: 541 + ret = -EOPNOTSUPP; 542 + break; 543 + } 544 + 545 + return ret; 546 + } 547 + 437 548 static int smu_v15_0_8_emit_clk_levels(struct smu_context *smu, 438 549 enum smu_clk_type type, char *buf, 439 550 int *offset) ··· 1927 1816 .set_power_limit = smu_v15_0_8_set_power_limit, 1928 1817 .get_ppt_limit = smu_v15_0_8_get_ppt_limit, 1929 1818 .emit_clk_levels = smu_v15_0_8_emit_clk_levels, 1819 + .read_sensor = smu_v15_0_8_read_sensor, 1930 1820 .populate_umd_state_clk = smu_v15_0_8_populate_umd_state_clk, 1931 1821 .set_performance_level = smu_v15_0_8_set_performance_level, 1932 1822 .od_edit_dpm_table = smu_v15_0_8_od_edit_dpm_table,