aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
diff options
context:
space:
mode:
authorTom St Denis <tom.stdenis@amd.com>2017-02-09 14:29:01 -0500
committerAlex Deucher <alexander.deucher@amd.com>2017-03-29 23:52:59 -0400
commit9f8df7d71e382c9afa808a08c11a990e90ac7df4 (patch)
tree9002abe9daf71a55c7bcde6022f4ed6b67d657e6 /drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
parent603adfe83a568d50542c9e7b9829d7baa497f0de (diff)
drm/amd/amdgpu: Update read_sensor calls to have size parameter (v3)
This update allows sensors to return more than 1 value and indicates to the caller how many bytes are written. The debugfs interface has been updated to handle reading all of the values. Simply seek to the enum value (multiplied by 4) and then read as many bytes as the sensor provides. (v2): Don't set size to 4 before reading GPU_POWER (v3): agd: rebase Signed-off-by: Tom St Denis <tom.stdenis@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c28
1 files changed, 16 insertions, 12 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
index 8a9a75a44b62..da877f3c10fc 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c
@@ -1534,6 +1534,7 @@ static int amdgpu_debugfs_pm_info_pp(struct seq_file *m, struct amdgpu_device *a
1534{ 1534{
1535 uint32_t value; 1535 uint32_t value;
1536 struct pp_gpu_power query = {0}; 1536 struct pp_gpu_power query = {0};
1537 int size;
1537 1538
1538 /* sanity check PP is enabled */ 1539 /* sanity check PP is enabled */
1539 if (!(adev->powerplay.pp_funcs && 1540 if (!(adev->powerplay.pp_funcs &&
@@ -1541,16 +1542,18 @@ static int amdgpu_debugfs_pm_info_pp(struct seq_file *m, struct amdgpu_device *a
1541 return -EINVAL; 1542 return -EINVAL;
1542 1543
1543 /* GPU Clocks */ 1544 /* GPU Clocks */
1545 size = sizeof(value);
1544 seq_printf(m, "GFX Clocks and Power:\n"); 1546 seq_printf(m, "GFX Clocks and Power:\n");
1545 if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_GFX_MCLK, (void *)&value)) 1547 if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_GFX_MCLK, (void *)&value, &size))
1546 seq_printf(m, "\t%u MHz (MCLK)\n", value/100); 1548 seq_printf(m, "\t%u MHz (MCLK)\n", value/100);
1547 if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_GFX_SCLK, (void *)&value)) 1549 if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_GFX_SCLK, (void *)&value, &size))
1548 seq_printf(m, "\t%u MHz (SCLK)\n", value/100); 1550 seq_printf(m, "\t%u MHz (SCLK)\n", value/100);
1549 if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_VDDGFX, (void *)&value)) 1551 if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_VDDGFX, (void *)&value, &size))
1550 seq_printf(m, "\t%u mV (VDDGFX)\n", value); 1552 seq_printf(m, "\t%u mV (VDDGFX)\n", value);
1551 if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_VDDNB, (void *)&value)) 1553 if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_VDDNB, (void *)&value, &size))
1552 seq_printf(m, "\t%u mV (VDDNB)\n", value); 1554 seq_printf(m, "\t%u mV (VDDNB)\n", value);
1553 if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_GPU_POWER, (void *)&query)) { 1555 size = sizeof(query);
1556 if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_GPU_POWER, (void *)&query, &size)) {
1554 seq_printf(m, "\t%u.%u W (VDDC)\n", query.vddc_power >> 8, 1557 seq_printf(m, "\t%u.%u W (VDDC)\n", query.vddc_power >> 8,
1555 query.vddc_power & 0xff); 1558 query.vddc_power & 0xff);
1556 seq_printf(m, "\t%u.%u W (VDDCI)\n", query.vddci_power >> 8, 1559 seq_printf(m, "\t%u.%u W (VDDCI)\n", query.vddci_power >> 8,
@@ -1560,38 +1563,39 @@ static int amdgpu_debugfs_pm_info_pp(struct seq_file *m, struct amdgpu_device *a
1560 seq_printf(m, "\t%u.%u W (average GPU)\n", query.average_gpu_power >> 8, 1563 seq_printf(m, "\t%u.%u W (average GPU)\n", query.average_gpu_power >> 8,
1561 query.average_gpu_power & 0xff); 1564 query.average_gpu_power & 0xff);
1562 } 1565 }
1566 size = sizeof(value);
1563 seq_printf(m, "\n"); 1567 seq_printf(m, "\n");
1564 1568
1565 /* GPU Temp */ 1569 /* GPU Temp */
1566 if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_GPU_TEMP, (void *)&value)) 1570 if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_GPU_TEMP, (void *)&value, &size))
1567 seq_printf(m, "GPU Temperature: %u C\n", value/1000); 1571 seq_printf(m, "GPU Temperature: %u C\n", value/1000);
1568 1572
1569 /* GPU Load */ 1573 /* GPU Load */
1570 if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_GPU_LOAD, (void *)&value)) 1574 if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_GPU_LOAD, (void *)&value, &size))
1571 seq_printf(m, "GPU Load: %u %%\n", value); 1575 seq_printf(m, "GPU Load: %u %%\n", value);
1572 seq_printf(m, "\n"); 1576 seq_printf(m, "\n");
1573 1577
1574 /* UVD clocks */ 1578 /* UVD clocks */
1575 if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_UVD_POWER, (void *)&value)) { 1579 if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_UVD_POWER, (void *)&value, &size)) {
1576 if (!value) { 1580 if (!value) {
1577 seq_printf(m, "UVD: Disabled\n"); 1581 seq_printf(m, "UVD: Disabled\n");
1578 } else { 1582 } else {
1579 seq_printf(m, "UVD: Enabled\n"); 1583 seq_printf(m, "UVD: Enabled\n");
1580 if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_UVD_DCLK, (void *)&value)) 1584 if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_UVD_DCLK, (void *)&value, &size))
1581 seq_printf(m, "\t%u MHz (DCLK)\n", value/100); 1585 seq_printf(m, "\t%u MHz (DCLK)\n", value/100);
1582 if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_UVD_VCLK, (void *)&value)) 1586 if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_UVD_VCLK, (void *)&value, &size))
1583 seq_printf(m, "\t%u MHz (VCLK)\n", value/100); 1587 seq_printf(m, "\t%u MHz (VCLK)\n", value/100);
1584 } 1588 }
1585 } 1589 }
1586 seq_printf(m, "\n"); 1590 seq_printf(m, "\n");
1587 1591
1588 /* VCE clocks */ 1592 /* VCE clocks */
1589 if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_VCE_POWER, (void *)&value)) { 1593 if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_VCE_POWER, (void *)&value, &size)) {
1590 if (!value) { 1594 if (!value) {
1591 seq_printf(m, "VCE: Disabled\n"); 1595 seq_printf(m, "VCE: Disabled\n");
1592 } else { 1596 } else {
1593 seq_printf(m, "VCE: Enabled\n"); 1597 seq_printf(m, "VCE: Enabled\n");
1594 if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_VCE_ECCLK, (void *)&value)) 1598 if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_VCE_ECCLK, (void *)&value, &size))
1595 seq_printf(m, "\t%u MHz (ECCLK)\n", value/100); 1599 seq_printf(m, "\t%u MHz (ECCLK)\n", value/100);
1596 } 1600 }
1597 } 1601 }