On 14.02.2017 18:20, Marek Olšák wrote:
On Tue, Feb 14, 2017 at 9:23 AM, Nicolai Hähnle <nhaeh...@gmail.com> wrote:
On 13.02.2017 23:08, Samuel Pitoiset wrote:

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;


I think these should be guarded with a DRM (kernel) version check. Also,
what Emil said.

Let's ignore the DRM version if the query doesn't send any messages to
dmesg. Reporting 0 in the HUD is already self-explanatory. (at least
for us) We don't even check the DRM version for older queries that are
not universally supported.

Fair enough, as long as it doesn't result in dmesg spam it's no big deal.

Cheers,
Nicolai


Marek


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

Reply via email to