Only the Radeon kernel driver exposed the GPU temperature and
the shader/memory clocks, this implements the same functionality
for the AMDGPU kernel driver.

These queries will return 0 if the DRM version is less than 3.10,
I don't explicitely check the version here because the query
codepath is already a bit messy.

Signed-off-by: Samuel Pitoiset <samuel.pitoi...@gmail.com>
---
 src/gallium/drivers/radeon/r600_query.c       | 12 ++++++------
 src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c | 19 ++++++++++++++++++-
 2 files changed, 24 insertions(+), 7 deletions(-)

diff --git a/src/gallium/drivers/radeon/r600_query.c 
b/src/gallium/drivers/radeon/r600_query.c
index 05741d33c9..4959621e11 100644
--- a/src/gallium/drivers/radeon/r600_query.c
+++ b/src/gallium/drivers/radeon/r600_query.c
@@ -1768,6 +1768,10 @@ static struct pipe_driver_query_info 
r600_driver_query_list[] = {
        XG(GPIN, "GPIN_003",            GPIN_NUM_SPI,           UINT, AVERAGE),
        XG(GPIN, "GPIN_004",            GPIN_NUM_SE,            UINT, AVERAGE),
 
+       X("temperature",                GPU_TEMPERATURE,        UINT64, 
AVERAGE),
+       X("shader-clock",               CURRENT_GPU_SCLK,       HZ, AVERAGE),
+       X("memory-clock",               CURRENT_GPU_MCLK,       HZ, AVERAGE),
+
        /* The following queries must be at the end of the list because their
         * availability is adjusted dynamically based on the DRM version. */
        X("GPU-load",                   GPU_LOAD,               UINT64, 
AVERAGE),
@@ -1792,10 +1796,6 @@ static struct pipe_driver_query_info 
r600_driver_query_list[] = {
        X("GPU-dma-busy",               GPU_DMA_BUSY,           UINT64, 
AVERAGE),
        X("GPU-scratch-ram-busy",       GPU_SCRATCH_RAM_BUSY,   UINT64, 
AVERAGE),
        X("GPU-ce-busy",                GPU_CE_BUSY,            UINT64, 
AVERAGE),
-
-       X("temperature",                GPU_TEMPERATURE,        UINT64, 
AVERAGE),
-       X("shader-clock",               CURRENT_GPU_SCLK,       HZ, AVERAGE),
-       X("memory-clock",               CURRENT_GPU_MCLK,       HZ, AVERAGE),
 };
 
 #undef X
@@ -1808,9 +1808,9 @@ static unsigned r600_get_num_queries(struct 
r600_common_screen *rscreen)
                return ARRAY_SIZE(r600_driver_query_list);
        else if (rscreen->info.drm_major == 3) {
                if (rscreen->chip_class >= VI)
-                       return ARRAY_SIZE(r600_driver_query_list) - 3;
+                       return ARRAY_SIZE(r600_driver_query_list);
                else
-                       return ARRAY_SIZE(r600_driver_query_list) - 10;
+                       return ARRAY_SIZE(r600_driver_query_list) - 7;
        }
        else
                return ARRAY_SIZE(r600_driver_query_list) - 25;
diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c 
b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c
index c3dfda53f0..d99df9e941 100644
--- a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c
+++ b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c
@@ -63,6 +63,18 @@
 #define AMDGPU_INFO_NUM_EVICTIONS              0x18
 #endif
 
+#ifndef AMDGPU_INFO_CURRENT_GPU_SCLK
+#define AMDGPU_INFO_CURRENT_GPU_SCLK   0x1c
+#endif
+
+#ifndef AMDGPU_INFO_CURRENT_GPU_MCLK
+#define AMDGPU_INFO_CURRENT_GPU_MCLK   0x1d
+#endif
+
+#ifndef AMDGPU_INFO_CURRENT_GPU_TEMP
+#define AMDGPU_INFO_CURRENT_GPU_TEMP   0x1e
+#endif
+
 static struct util_hash_table *dev_tab = NULL;
 pipe_static_mutex(dev_tab_mutex);
 
@@ -459,9 +471,14 @@ static uint64_t amdgpu_query_value(struct radeon_winsys 
*rws,
       amdgpu_query_heap_info(ws->dev, AMDGPU_GEM_DOMAIN_GTT, 0, &heap);
       return heap.heap_usage;
    case RADEON_GPU_TEMPERATURE:
+      amdgpu_query_info(ws->dev, AMDGPU_INFO_CURRENT_GPU_TEMP, 4, &retval);
+      return retval;
    case RADEON_CURRENT_SCLK:
+      amdgpu_query_info(ws->dev, AMDGPU_INFO_CURRENT_GPU_SCLK, 4, &retval);
+      return retval;
    case RADEON_CURRENT_MCLK:
-      return 0;
+      amdgpu_query_info(ws->dev, AMDGPU_INFO_CURRENT_GPU_MCLK, 4, &retval);
+      return retval;
    case RADEON_GPU_RESET_COUNTER:
       assert(0);
       return 0;
-- 
2.11.1

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to