[PATCH 2/2] drm/amdgpu: expose the current temperature and shader/memory clocks

Samuel Pitoiset samuel.pitoiset at gmail.com
Mon Feb 13 22:23:08 UTC 2017



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


More information about the amd-gfx mailing list