ilo: print a warning when PPGTT is disabled
authorChia-I Wu <olvaffe@gmail.com>
Mon, 10 Mar 2014 04:40:29 +0000 (12:40 +0800)
committerChia-I Wu <olvaffe@gmail.com>
Mon, 10 Mar 2014 08:42:42 +0000 (16:42 +0800)
Despite what the PRMs say, the driver appears to work fine when PPGTT is
disabled.  But at least print a warning in that case.

src/gallium/drivers/ilo/ilo_common.h
src/gallium/drivers/ilo/ilo_screen.c
src/gallium/winsys/intel/drm/intel_drm_winsys.c
src/gallium/winsys/intel/intel_winsys.h

index db7fdc7f1fa97e37e3c5ee9bbbeaba4f73b4e298..dd31f749bbfc4de27e70ce9eeed8c5544166a0fd 100644 (file)
@@ -72,6 +72,7 @@ struct ilo_dev_info {
    bool has_llc;
    bool has_address_swizzling;
    bool has_logical_context;
+   bool has_ppgtt;
    bool has_timestamp;
    bool has_gen7_sol_reset;
 
index 5d652e4ad73ebfdf87eaaff8d72e9e3fdfe49a3f..442e704615dfbc9c5a6b534aa5347d15d2632a24 100644 (file)
@@ -652,6 +652,7 @@ init_dev(struct ilo_dev_info *dev, const struct intel_winsys_info *info)
    dev->has_llc = info->has_llc;
    dev->has_address_swizzling = info->has_address_swizzling;
    dev->has_logical_context = info->has_logical_context;
+   dev->has_ppgtt = info->has_ppgtt;
    dev->has_timestamp = info->has_timestamp;
    dev->has_gen7_sol_reset = info->has_gen7_sol_reset;
 
@@ -660,6 +661,24 @@ init_dev(struct ilo_dev_info *dev, const struct intel_winsys_info *info)
       return false;
    }
 
+   /*
+    * PIPE_CONTROL and MI_* use PPGTT writes on GEN7+ and privileged GGTT
+    * writes on GEN6.
+    *
+    * From the Sandy Bridge PRM, volume 1 part 3, page 101:
+    *
+    *     "[DevSNB] When Per-Process GTT Enable is set, it is assumed that all
+    *      code is in a secure environment, independent of address space.
+    *      Under this condition, this bit only specifies the address space
+    *      (GGTT or PPGTT). All commands are executed "as-is""
+    *
+    * We need PPGTT to be enabled on GEN6 too.
+    */
+   if (!dev->has_ppgtt) {
+      /* experiments show that it does not really matter... */
+      ilo_warn("PPGTT disabled\n");
+   }
+
    /*
     * From the Sandy Bridge PRM, volume 4 part 2, page 18:
     *
index dfef9f4a9141f3fd1fadb30bedab34dfb92ec88f..250b36f524b8949003d4b3f9bcb261f613e00ee1 100644 (file)
@@ -149,6 +149,9 @@ probe_winsys(struct intel_winsys *winsys)
    winsys->first_gem_ctx = drm_intel_gem_context_create(winsys->bufmgr);
    info->has_logical_context = (winsys->first_gem_ctx != NULL);
 
+   get_param(winsys, I915_PARAM_HAS_ALIASING_PPGTT, &val);
+   info->has_ppgtt = val;
+
    /* test TIMESTAMP read */
    info->has_timestamp = test_reg_read(winsys, 0x2358);
 
index 3c9e6f267beaf04253595f650968dec2078c8c76..6571719d1139883e8dd384aea38325bba31ac791 100644 (file)
@@ -73,6 +73,7 @@ struct intel_winsys_info {
    bool has_llc;
    bool has_address_swizzling;
    bool has_logical_context;
+   bool has_ppgtt;
 
    /* valid registers for intel_winsys_read_reg() */
    bool has_timestamp;