drm/i915: move DP save/restore into i915_ums.c
authorDaniel Vetter <daniel.vetter@ffwll.ch>
Fri, 25 Jan 2013 16:53:22 +0000 (17:53 +0100)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Thu, 31 Jan 2013 10:50:04 +0000 (11:50 +0100)
Note that this slightly changes the order, but we only move it within
the block of registers that restore encoder state. Specifically LVDS
is now restored after DP, whereas previously it was done before.

Legacy vga is still restored afterwards, which seems to be the
important thing (if there's anything important in this restore
ordering at all).

Reviewed-by: Imre Deak <imre.deak@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
drivers/gpu/drm/i915/i915_suspend.c
drivers/gpu/drm/i915/i915_ums.c

index 3b9baea9a4c2314a2a623037825dac4d3fa2622f..3911e0450bbe18385125d2256253cf4f489d6005 100644 (file)
@@ -240,24 +240,6 @@ static void i915_save_display(struct drm_device *dev)
                dev_priv->regfile.savePP_DIVISOR = I915_READ(PP_DIVISOR);
        }
 
-       if (!drm_core_check_feature(dev, DRIVER_MODESET)) {
-               /* Display Port state */
-               if (SUPPORTS_INTEGRATED_DP(dev)) {
-                       dev_priv->regfile.saveDP_B = I915_READ(DP_B);
-                       dev_priv->regfile.saveDP_C = I915_READ(DP_C);
-                       dev_priv->regfile.saveDP_D = I915_READ(DP_D);
-                       dev_priv->regfile.savePIPEA_GMCH_DATA_M = I915_READ(_PIPEA_GMCH_DATA_M);
-                       dev_priv->regfile.savePIPEB_GMCH_DATA_M = I915_READ(_PIPEB_GMCH_DATA_M);
-                       dev_priv->regfile.savePIPEA_GMCH_DATA_N = I915_READ(_PIPEA_GMCH_DATA_N);
-                       dev_priv->regfile.savePIPEB_GMCH_DATA_N = I915_READ(_PIPEB_GMCH_DATA_N);
-                       dev_priv->regfile.savePIPEA_DP_LINK_M = I915_READ(_PIPEA_DP_LINK_M);
-                       dev_priv->regfile.savePIPEB_DP_LINK_M = I915_READ(_PIPEB_DP_LINK_M);
-                       dev_priv->regfile.savePIPEA_DP_LINK_N = I915_READ(_PIPEA_DP_LINK_N);
-                       dev_priv->regfile.savePIPEB_DP_LINK_N = I915_READ(_PIPEB_DP_LINK_N);
-               }
-               /* FIXME: regfile.save TV & SDVO state */
-       }
-
        /* Only regfile.save FBC state on the platform that supports FBC */
        if (I915_HAS_FBC(dev)) {
                if (HAS_PCH_SPLIT(dev)) {
@@ -323,16 +305,6 @@ static void i915_restore_display(struct drm_device *dev)
                I915_WRITE(PP_CONTROL, dev_priv->regfile.savePP_CONTROL);
        }
 
-       if (!drm_core_check_feature(dev, DRIVER_MODESET)) {
-               /* Display Port state */
-               if (SUPPORTS_INTEGRATED_DP(dev)) {
-                       I915_WRITE(DP_B, dev_priv->regfile.saveDP_B);
-                       I915_WRITE(DP_C, dev_priv->regfile.saveDP_C);
-                       I915_WRITE(DP_D, dev_priv->regfile.saveDP_D);
-               }
-               /* FIXME: restore TV & SDVO state */
-       }
-
        /* only restore FBC info on the platform that supports FBC*/
        intel_disable_fbc(dev);
        if (I915_HAS_FBC(dev)) {
@@ -347,6 +319,7 @@ static void i915_restore_display(struct drm_device *dev)
                        I915_WRITE(FBC_CONTROL, dev_priv->regfile.saveFBC_CONTROL);
                }
        }
+
        if (!drm_core_check_feature(dev, DRIVER_MODESET))
                i915_restore_vga(dev);
        else
index 359c77b7b1b22b629cbed8839c362e0b89a63199..985a09716237ad023cb32ebecd09720f826d4c60 100644 (file)
@@ -254,6 +254,22 @@ void i915_save_display_reg(struct drm_device *dev)
        else
                dev_priv->regfile.saveADPA = I915_READ(ADPA);
 
+       /* Display Port state */
+       if (SUPPORTS_INTEGRATED_DP(dev)) {
+               dev_priv->regfile.saveDP_B = I915_READ(DP_B);
+               dev_priv->regfile.saveDP_C = I915_READ(DP_C);
+               dev_priv->regfile.saveDP_D = I915_READ(DP_D);
+               dev_priv->regfile.savePIPEA_GMCH_DATA_M = I915_READ(_PIPEA_GMCH_DATA_M);
+               dev_priv->regfile.savePIPEB_GMCH_DATA_M = I915_READ(_PIPEB_GMCH_DATA_M);
+               dev_priv->regfile.savePIPEA_GMCH_DATA_N = I915_READ(_PIPEA_GMCH_DATA_N);
+               dev_priv->regfile.savePIPEB_GMCH_DATA_N = I915_READ(_PIPEB_GMCH_DATA_N);
+               dev_priv->regfile.savePIPEA_DP_LINK_M = I915_READ(_PIPEA_DP_LINK_M);
+               dev_priv->regfile.savePIPEB_DP_LINK_M = I915_READ(_PIPEB_DP_LINK_M);
+               dev_priv->regfile.savePIPEA_DP_LINK_N = I915_READ(_PIPEA_DP_LINK_N);
+               dev_priv->regfile.savePIPEB_DP_LINK_N = I915_READ(_PIPEB_DP_LINK_N);
+       }
+       /* FIXME: regfile.save TV & SDVO state */
+
        return;
 }
 
@@ -475,5 +491,13 @@ void i915_restore_display_reg(struct drm_device *dev)
        else
                I915_WRITE(ADPA, dev_priv->regfile.saveADPA);
 
+       /* Display Port state */
+       if (SUPPORTS_INTEGRATED_DP(dev)) {
+               I915_WRITE(DP_B, dev_priv->regfile.saveDP_B);
+               I915_WRITE(DP_C, dev_priv->regfile.saveDP_C);
+               I915_WRITE(DP_D, dev_priv->regfile.saveDP_D);
+       }
+       /* FIXME: restore TV & SDVO state */
+
        return;
 }