drm/i915: allow force wake at init time on VLV v2
authorJesse Barnes <jbarnes@virtuousgeek.org>
Fri, 8 Mar 2013 18:45:53 +0000 (10:45 -0800)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Tue, 19 Mar 2013 08:38:32 +0000 (09:38 +0100)
We need to set the 'allow force wake' bit to enable forcewake handling
later on.

v2: split from clock gating patch (Jani)
    check for allowwakeack (Ville)

Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/i915_gem.c
drivers/gpu/drm/i915/i915_reg.h

index 1417fc6c28ee4b940dbcca64d307732562c53de8..d554b2171df071380832b9ad6c7f95202821b2cc 100644 (file)
@@ -4010,7 +4010,16 @@ int i915_gem_init(struct drm_device *dev)
        int ret;
 
        mutex_lock(&dev->struct_mutex);
+
+       if (IS_VALLEYVIEW(dev)) {
+               /* VLVA0 (potential hack), BIOS isn't actually waking us */
+               I915_WRITE(VLV_GTLC_WAKE_CTRL, 1);
+               if (wait_for((I915_READ(VLV_GTLC_PW_STATUS) & 1) == 1, 10))
+                       DRM_DEBUG_DRIVER("allow wake ack timed out\n");
+       }
+
        i915_gem_init_global_gtt(dev);
+
        ret = i915_gem_init_hw(dev);
        mutex_unlock(&dev->struct_mutex);
        if (ret) {
index 4cf3eceb5153731d00eefbd266b482526ea5818e..f187b60739ed8e33a96540894e911f2e65465ae4 100644 (file)
 #define  FORCEWAKE_ACK_VLV                     0x1300b4
 #define  FORCEWAKE_ACK_HSW                     0x130044
 #define  FORCEWAKE_ACK                         0x130090
+#define  VLV_GTLC_WAKE_CTRL                    0x130090
+#define  VLV_GTLC_PW_STATUS                    0x130094
 #define  FORCEWAKE_MT                          0xa188 /* multi-threaded */
 #define   FORCEWAKE_KERNEL                     0x1
 #define   FORCEWAKE_USER                       0x2