|
@@ -789,16 +789,25 @@ int i915_save_state(struct drm_device *dev)
|
|
|
dev_priv->saveSWF2[i] = I915_READ(SWF30 + (i << 2));
|
|
|
|
|
|
/* Fences */
|
|
|
- if (IS_I965G(dev)) {
|
|
|
+ switch (INTEL_INFO(dev)->gen) {
|
|
|
+ case 6:
|
|
|
+ for (i = 0; i < 16; i++)
|
|
|
+ dev_priv->saveFENCE[i] = I915_READ64(FENCE_REG_SANDYBRIDGE_0 + (i * 8));
|
|
|
+ break;
|
|
|
+ case 5:
|
|
|
+ case 4:
|
|
|
for (i = 0; i < 16; i++)
|
|
|
dev_priv->saveFENCE[i] = I915_READ64(FENCE_REG_965_0 + (i * 8));
|
|
|
- } else {
|
|
|
- for (i = 0; i < 8; i++)
|
|
|
- dev_priv->saveFENCE[i] = I915_READ(FENCE_REG_830_0 + (i * 4));
|
|
|
-
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
if (IS_I945G(dev) || IS_I945GM(dev) || IS_G33(dev))
|
|
|
for (i = 0; i < 8; i++)
|
|
|
dev_priv->saveFENCE[i+8] = I915_READ(FENCE_REG_945_8 + (i * 4));
|
|
|
+ case 2:
|
|
|
+ for (i = 0; i < 8; i++)
|
|
|
+ dev_priv->saveFENCE[i] = I915_READ(FENCE_REG_830_0 + (i * 4));
|
|
|
+ break;
|
|
|
+
|
|
|
}
|
|
|
|
|
|
return 0;
|
|
@@ -815,15 +824,24 @@ int i915_restore_state(struct drm_device *dev)
|
|
|
I915_WRITE(HWS_PGA, dev_priv->saveHWS);
|
|
|
|
|
|
/* Fences */
|
|
|
- if (IS_I965G(dev)) {
|
|
|
+ switch (INTEL_INFO(dev)->gen) {
|
|
|
+ case 6:
|
|
|
+ for (i = 0; i < 16; i++)
|
|
|
+ I915_WRITE64(FENCE_REG_SANDYBRIDGE_0 + (i * 8), dev_priv->saveFENCE[i]);
|
|
|
+ break;
|
|
|
+ case 5:
|
|
|
+ case 4:
|
|
|
for (i = 0; i < 16; i++)
|
|
|
I915_WRITE64(FENCE_REG_965_0 + (i * 8), dev_priv->saveFENCE[i]);
|
|
|
- } else {
|
|
|
- for (i = 0; i < 8; i++)
|
|
|
- I915_WRITE(FENCE_REG_830_0 + (i * 4), dev_priv->saveFENCE[i]);
|
|
|
+ break;
|
|
|
+ case 3:
|
|
|
+ case 2:
|
|
|
if (IS_I945G(dev) || IS_I945GM(dev) || IS_G33(dev))
|
|
|
for (i = 0; i < 8; i++)
|
|
|
I915_WRITE(FENCE_REG_945_8 + (i * 4), dev_priv->saveFENCE[i+8]);
|
|
|
+ for (i = 0; i < 8; i++)
|
|
|
+ I915_WRITE(FENCE_REG_830_0 + (i * 4), dev_priv->saveFENCE[i]);
|
|
|
+ break;
|
|
|
}
|
|
|
|
|
|
i915_restore_display(dev);
|