From 047aba169731b32ca80b612e6e0d71e4b4e11937 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Tue, 4 Apr 2017 16:34:56 +0200 Subject: [PATCH] amdgpu: allow to query GPU sensor related information MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This exposes amdgpu_query_sensor_info(). v2: - add amdgpu_query_sensor_info() to the symbols list Signed-off-by: Samuel Pitoiset Reviewed-by: Marek Olšák --- amdgpu/amdgpu-symbol-check | 1 + amdgpu/amdgpu.h | 18 ++++++++++++++++++ amdgpu/amdgpu_gpu_info.c | 15 +++++++++++++++ 3 files changed, 34 insertions(+) diff --git a/amdgpu/amdgpu-symbol-check b/amdgpu/amdgpu-symbol-check index 8e06474d..4d1ae65c 100755 --- a/amdgpu/amdgpu-symbol-check +++ b/amdgpu/amdgpu-symbol-check @@ -46,6 +46,7 @@ amdgpu_query_heap_info amdgpu_query_hw_ip_count amdgpu_query_hw_ip_info amdgpu_query_info +amdgpu_query_sensor_info amdgpu_read_mm_registers amdgpu_va_range_alloc amdgpu_va_range_free diff --git a/amdgpu/amdgpu.h b/amdgpu/amdgpu.h index 6b2ded83..55884b24 100644 --- a/amdgpu/amdgpu.h +++ b/amdgpu/amdgpu.h @@ -1059,6 +1059,24 @@ int amdgpu_query_gds_info(amdgpu_device_handle dev, struct amdgpu_gds_resource_info *gds_info); /** + * Query information about sensor. + * + * The return size is query-specific and depends on the "sensor_type" + * parameter. No more than "size" bytes is returned. + * + * \param dev - \c [in] Device handle. See #amdgpu_device_initialize() + * \param sensor_type - \c [in] AMDGPU_INFO_SENSOR_* + * \param size - \c [in] Size of the returned value. + * \param value - \c [out] Pointer to the return value. + * + * \return 0 on success\n + * <0 - Negative POSIX Error code + * +*/ +int amdgpu_query_sensor_info(amdgpu_device_handle dev, unsigned sensor_type, + unsigned size, void *value); + +/** * Read a set of consecutive memory-mapped registers. * Not all registers are allowed to be read by userspace. * diff --git a/amdgpu/amdgpu_gpu_info.c b/amdgpu/amdgpu_gpu_info.c index c5f5f6f4..f4b94c9e 100644 --- a/amdgpu/amdgpu_gpu_info.c +++ b/amdgpu/amdgpu_gpu_info.c @@ -318,3 +318,18 @@ int amdgpu_query_gds_info(amdgpu_device_handle dev, return 0; } + +int amdgpu_query_sensor_info(amdgpu_device_handle dev, unsigned sensor_type, + unsigned size, void *value) +{ + struct drm_amdgpu_info request; + + memset(&request, 0, sizeof(request)); + request.return_pointer = (uintptr_t)value; + request.return_size = size; + request.query = AMDGPU_INFO_SENSOR; + request.sensor_info.type = sensor_type; + + return drmCommandWrite(dev->fd, DRM_AMDGPU_INFO, &request, + sizeof(struct drm_amdgpu_info)); +} -- 2.11.0