intel: query for LLC support
authorEugeni Dodonov <eugeni.dodonov@intel.com>
Tue, 17 Jan 2012 17:20:19 +0000 (15:20 -0200)
committerEugeni Dodonov <eugeni@dodonov.net>
Wed, 1 Feb 2012 17:54:02 +0000 (15:54 -0200)
This adds support for querying the kernel about the LLC support in the
hardware.

In case the ioctl fails, we assume that it is present on GEN6 and GEN7.

v2: fix the return code checking

Signed-off-by: Eugeni Dodonov <eugeni.dodonov@intel.com>
include/drm/i915_drm.h
intel/intel_bufmgr_gem.c

index de724964617fdecca97941f68f92b95a607eba1c..af3ce1745b3feab9884f4d0aa1fb4f9fb3fdf8e2 100644 (file)
@@ -287,6 +287,7 @@ typedef struct drm_i915_irq_wait {
 #define I915_PARAM_HAS_EXEC_CONSTANTS   14
 #define I915_PARAM_HAS_RELAXED_DELTA    15
 #define I915_PARAM_HAS_GEN7_SOL_RESET   16
+#define I915_PARAM_HAS_LLC              17
 
 typedef struct drm_i915_getparam {
        int param;
index 26e3a5ce2808244677be40b5a7fa3fbdeff2add0..187e8ec9ca8684b5c99cbcb50f72fd095fbe2879 100644 (file)
@@ -107,6 +107,7 @@ typedef struct _drm_intel_bufmgr_gem {
        unsigned int has_bsd : 1;
        unsigned int has_blt : 1;
        unsigned int has_relaxed_fencing : 1;
+       unsigned int has_llc : 1;
        unsigned int bo_reuse : 1;
        bool fenced_relocs;
 } drm_intel_bufmgr_gem;
@@ -2358,6 +2359,17 @@ drm_intel_bufmgr_gem_init(int fd, int batch_size)
        ret = drmIoctl(bufmgr_gem->fd, DRM_IOCTL_I915_GETPARAM, &gp);
        bufmgr_gem->has_relaxed_fencing = ret == 0;
 
+       gp.param = I915_PARAM_HAS_LLC;
+       ret = drmIoctl(bufmgr_gem->fd, DRM_IOCTL_I915_GETPARAM, &gp);
+       if (ret == -EINVAL) {
+               /* Kernel does not supports HAS_LLC query, fallback to GPU
+                * generation detection and assume that we have LLC on GEN6/7
+                */
+               bufmgr_gem->has_llc = (IS_GEN6(bufmgr_gem->pci_device) |
+                               IS_GEN7(bufmgr_gem->pci_device));
+       } else
+               bufmgr_gem->has_llc = ret == 0;
+
        if (bufmgr_gem->gen < 4) {
                gp.param = I915_PARAM_NUM_FENCES_AVAIL;
                gp.value = &bufmgr_gem->available_fences;