On 02/13/2017 11:20 PM, Deucher, Alexander wrote: >> -----Original Message----- >> From: amd-gfx [mailto:amd-gfx-bounces at lists.freedesktop.org] On Behalf >> Of Samuel Pitoiset >> Sent: Monday, February 13, 2017 5:02 PM >> To: amd-gfx at lists.freedesktop.org >> Cc: Samuel Pitoiset >> Subject: [PATCH 2/2] drm/amdgpu: expose the current temperature and >> shader/memory clocks >> >> The clocks are returned in Mhz and the temperature in millidegrees. >> >> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com> >> --- >> drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 3 ++- >> drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 27 >> +++++++++++++++++++++++++++ >> include/uapi/drm/amdgpu_drm.h | 8 +++++++- >> 3 files changed, 36 insertions(+), 2 deletions(-) >> >> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c >> b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c >> index f275a6b54e9f..bae3ab8407b0 100644 >> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c >> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c >> @@ -59,9 +59,10 @@ >> * - 3.7.0 - Add support for VCE clock list packet >> * - 3.8.0 - Add support raster config init in the kernel >> * - 3.9.0 - Add support for memory query info about VRAM and GTT. >> + * - 3.10.0 - Add support for clocks/temperature query info. >> */ >> #define KMS_DRIVER_MAJOR 3 >> -#define KMS_DRIVER_MINOR 9 >> +#define KMS_DRIVER_MINOR 10 >> #define KMS_DRIVER_PATCHLEVEL 0 >> >> int amdgpu_vram_limit = 0; >> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c >> b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c >> index d5f9d6a4b661..f032d0882bc5 100644 >> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c >> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c >> @@ -241,6 +241,7 @@ static int amdgpu_info_ioctl(struct drm_device *dev, >> void *data, struct drm_file >> uint32_t ui32 = 0; >> uint64_t ui64 = 0; >> int i, found; >> + int ui32_size = sizeof(ui32); >> >> if (!info->return_size || !info->return_pointer) >> return -EINVAL; >> @@ -597,6 +598,32 @@ static int amdgpu_info_ioctl(struct drm_device >> *dev, void *data, struct drm_file >> return -EINVAL; >> } >> } >> + case AMDGPU_INFO_CURRENT_GPU_SCLK: >> + /* get sclk in Mhz */ >> + if (!amdgpu_dpm_read_sensor(adev, >> AMDGPU_PP_SENSOR_GFX_SCLK, >> + (void *)&ui32, &ui32_size)) { >> + ui32 /= 100; >> + return copy_to_user(out, &ui32, >> + min(size, 4u)) ? -EFAULT : 0; >> + } >> + return -EINVAL; >> + case AMDGPU_INFO_CURRENT_GPU_MCLK: >> + /* get mclk in Mhz */ >> + if (!amdgpu_dpm_read_sensor(adev, >> AMDGPU_PP_SENSOR_GFX_MCLK, >> + (void *)&ui32, &ui32_size)) { >> + ui32 /= 100; >> + return copy_to_user(out, &ui32, >> + min(size, 4u)) ? -EFAULT : 0; >> + } >> + return -EINVAL; >> + case AMDGPU_INFO_CURRENT_GPU_TEMP: >> + /* get temperature in millidegrees C */ >> + if (!amdgpu_dpm_read_sensor(adev, >> AMDGPU_PP_SENSOR_GPU_TEMP, >> + (void *)&ui32, &ui32_size)) { >> + return copy_to_user(out, &ui32, >> + min(size, 4u)) ? -EFAULT : 0; >> + } >> + return -EINVAL; >> default: >> DRM_DEBUG_KMS("Invalid request %d\n", info->query); >> return -EINVAL; >> diff --git a/include/uapi/drm/amdgpu_drm.h >> b/include/uapi/drm/amdgpu_drm.h >> index 07e3710f91cc..0db7a481046a 100644 >> --- a/include/uapi/drm/amdgpu_drm.h >> +++ b/include/uapi/drm/amdgpu_drm.h >> @@ -532,8 +532,14 @@ struct drm_amdgpu_cs_chunk_data { >> #define AMDGPU_INFO_VBIOS_SIZE 0x1 >> /* Subquery id: Query vbios image */ >> #define AMDGPU_INFO_VBIOS_IMAGE 0x2 >> +/* Query the current shader clock */ >> +#define AMDGPU_INFO_CURRENT_GPU_SCLK 0x1c >> +/* Query the current memory clock */ >> +#define AMDGPU_INFO_CURRENT_GPU_MCLK 0x1d >> +/* Query the current temperature */ >> +#define AMDGPU_INFO_CURRENT_GPU_TEMP 0x1e > > I would suggest adding a single query for power related items. E.g., AMDGPU_INFO_GPU_SENSOR and then add sub-queries for the different things you might want to query (temp, sclk, mclk, gpu load, voltages, etc.). E.g., AMDGPU_INFO_GPU_SENSOR_SCLK, AMDGPU_INFO_GPU_SENSOR_MCLK, etc. Ok. > >> /* Query UVD handles */ >> -#define AMDGPU_INFO_NUM_HANDLES 0x1C >> +#define AMDGPU_INFO_NUM_HANDLES 0x1f > > Can't change an existing query. New ones should be added to the end. I thought this was just the total number of queries... But yeah, I shouldn't break the ABI. Thanks for reviewing. > >> >> #define AMDGPU_INFO_MMR_SE_INDEX_SHIFT 0 >> #define AMDGPU_INFO_MMR_SE_INDEX_MASK 0xff >> -- >> 2.11.1 >> >> _______________________________________________ >> amd-gfx mailing list >> amd-gfx at lists.freedesktop.org >> https://lists.freedesktop.org/mailman/listinfo/amd-gfx