Commit 4f9afc9b authored by Eric Huang's avatar Eric Huang Committed by Alex Deucher

drm/amd/powerplay: add power consumption display support in debugfs

The additional output are:
vddc power in Watt;
vddci power in Watt;
max gpu power in Watt;
average gpu power in Watt.
Signed-off-by: default avatarEric Huang <JinHuiEric.Huang@amd.com>
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent cd7b0c66
...@@ -1533,6 +1533,7 @@ void amdgpu_pm_compute_clocks(struct amdgpu_device *adev) ...@@ -1533,6 +1533,7 @@ void amdgpu_pm_compute_clocks(struct amdgpu_device *adev)
static int amdgpu_debugfs_pm_info_pp(struct seq_file *m, struct amdgpu_device *adev) static int amdgpu_debugfs_pm_info_pp(struct seq_file *m, struct amdgpu_device *adev)
{ {
uint32_t value; uint32_t value;
struct pp_gpu_power query = {0};
/* sanity check PP is enabled */ /* sanity check PP is enabled */
if (!(adev->powerplay.pp_funcs && if (!(adev->powerplay.pp_funcs &&
...@@ -1549,6 +1550,16 @@ static int amdgpu_debugfs_pm_info_pp(struct seq_file *m, struct amdgpu_device *a ...@@ -1549,6 +1550,16 @@ static int amdgpu_debugfs_pm_info_pp(struct seq_file *m, struct amdgpu_device *a
seq_printf(m, "\t%u mV (VDDGFX)\n", value); seq_printf(m, "\t%u mV (VDDGFX)\n", value);
if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_VDDNB, (void *)&value)) if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_VDDNB, (void *)&value))
seq_printf(m, "\t%u mV (VDDNB)\n", value); seq_printf(m, "\t%u mV (VDDNB)\n", value);
if (!amdgpu_dpm_read_sensor(adev, AMDGPU_PP_SENSOR_GPU_POWER, (void *)&query)) {
seq_printf(m, "\t%u.%u W (VDDC)\n", query.vddc_power >> 8,
query.vddc_power & 0xff);
seq_printf(m, "\t%u.%u W (VDDCI)\n", query.vddci_power >> 8,
query.vddci_power & 0xff);
seq_printf(m, "\t%u.%u W (max GPU)\n", query.max_gpu_power >> 8,
query.max_gpu_power & 0xff);
seq_printf(m, "\t%u.%u W (average GPU)\n", query.average_gpu_power >> 8,
query.average_gpu_power & 0xff);
}
seq_printf(m, "\n"); seq_printf(m, "\n");
/* GPU Temp */ /* GPU Temp */
......
...@@ -46,6 +46,7 @@ enum amd_pp_sensors { ...@@ -46,6 +46,7 @@ enum amd_pp_sensors {
AMDGPU_PP_SENSOR_GPU_TEMP, AMDGPU_PP_SENSOR_GPU_TEMP,
AMDGPU_PP_SENSOR_VCE_POWER, AMDGPU_PP_SENSOR_VCE_POWER,
AMDGPU_PP_SENSOR_UVD_POWER, AMDGPU_PP_SENSOR_UVD_POWER,
AMDGPU_PP_SENSOR_GPU_POWER,
}; };
enum amd_pp_event { enum amd_pp_event {
...@@ -295,6 +296,13 @@ struct pp_states_info { ...@@ -295,6 +296,13 @@ struct pp_states_info {
uint32_t states[16]; uint32_t states[16];
}; };
struct pp_gpu_power {
uint32_t vddc_power;
uint32_t vddci_power;
uint32_t max_gpu_power;
uint32_t average_gpu_power;
};
#define PP_GROUP_MASK 0xF0000000 #define PP_GROUP_MASK 0xF0000000
#define PP_GROUP_SHIFT 28 #define PP_GROUP_SHIFT 28
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment