summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugeni Dodonov <eugeni.dodonov@intel.com>2012-01-17 16:16:37 -0200
committerChris Wilson <chris@chris-wilson.co.uk>2012-01-17 18:40:04 +0000
commitbbd6c8123635899e89911104bf84e1b7d11d66a1 (patch)
tree2f0ba9c2e1aa40afcbad32a6b8de55a469ce6274
parente4efde920bcab980451e79df7d645d1814e5f78d (diff)
sna: check for LLC support
Instead of checking for CPU generation, use the libdrm-provided I915_PARAM_HAS_LLC instead. v2: use a define check to verify if we have I915_PARAM_HAS_LLC. Signed-off-by: Eugeni Dodonov <eugeni.dodonov@intel.com> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r--src/sna/kgem.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index 9c43d96c..c7e6aac0 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -523,7 +523,7 @@ cpu_cache_size(void)
static int gem_param(struct kgem *kgem, int name)
{
drm_i915_getparam_t gp;
- int v = 0;
+ int v = -1; /* No param uses the sign bit, reserve it for errors */
VG_CLEAR(gp);
gp.param = name;
@@ -597,7 +597,7 @@ void kgem_init(struct kgem *kgem, int fd, struct pci_device *dev, int gen)
if (gen < 40) {
if (!DBG_NO_RELAXED_FENCING) {
kgem->has_relaxed_fencing =
- gem_param(kgem, I915_PARAM_HAS_RELAXED_FENCING);
+ gem_param(kgem, I915_PARAM_HAS_RELAXED_FENCING) > 0;
}
} else
kgem->has_relaxed_fencing = 1;
@@ -605,8 +605,17 @@ void kgem_init(struct kgem *kgem, int fd, struct pci_device *dev, int gen)
kgem->has_relaxed_fencing));
kgem->has_llc = false;
- if (!DBG_NO_LLC && gen >= 60)
- kgem->has_llc = true;
+ if (!DBG_NO_LLC) {
+ int has_llc = -1;
+#if defined(I915_PARAM_HAS_LLC) /* Expected in libdrm-2.4.31 */
+ has_llc = gem_param(kgem, I915_PARAM_HAS_LLC);
+#endif
+ if (has_llc == -1) {
+ DBG(("%s: no kernel/drm support for HAS_LLC, assuming support for LLC based on GPU generation\n", __FUNCTION__));
+ has_llc = gen >= 60;
+ }
+ kgem->has_llc = has_llc;
+ }
kgem->has_cpu_bo = kgem->has_llc;
DBG(("%s: cpu bo enabled %d: llc? %d\n", __FUNCTION__,
kgem->has_cpu_bo, kgem->has_llc));