diff options
Diffstat (limited to 'drivers/gpu/drm/i915/i915_suspend.c')
-rw-r--r-- | drivers/gpu/drm/i915/i915_suspend.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/i915_suspend.c b/drivers/gpu/drm/i915/i915_suspend.c index d669cc2b42c0..ce8a21344a71 100644 --- a/drivers/gpu/drm/i915/i915_suspend.c +++ b/drivers/gpu/drm/i915/i915_suspend.c | |||
@@ -349,6 +349,18 @@ int i915_save_state(struct drm_device *dev) | |||
349 | for (i = 0; i < 3; i++) | 349 | for (i = 0; i < 3; i++) |
350 | dev_priv->saveSWF2[i] = I915_READ(SWF30 + (i << 2)); | 350 | dev_priv->saveSWF2[i] = I915_READ(SWF30 + (i << 2)); |
351 | 351 | ||
352 | /* Fences */ | ||
353 | if (IS_I965G(dev)) { | ||
354 | for (i = 0; i < 16; i++) | ||
355 | dev_priv->saveFENCE[i] = I915_READ64(FENCE_REG_965_0 + (i * 8)); | ||
356 | } else { | ||
357 | for (i = 0; i < 8; i++) | ||
358 | dev_priv->saveFENCE[i] = I915_READ(FENCE_REG_830_0 + (i * 4)); | ||
359 | |||
360 | if (IS_I945G(dev) || IS_I945GM(dev) || IS_G33(dev)) | ||
361 | for (i = 0; i < 8; i++) | ||
362 | dev_priv->saveFENCE[i+8] = I915_READ(FENCE_REG_945_8 + (i * 4)); | ||
363 | } | ||
352 | i915_save_vga(dev); | 364 | i915_save_vga(dev); |
353 | 365 | ||
354 | return 0; | 366 | return 0; |
@@ -371,6 +383,18 @@ int i915_restore_state(struct drm_device *dev) | |||
371 | /* Display arbitration */ | 383 | /* Display arbitration */ |
372 | I915_WRITE(DSPARB, dev_priv->saveDSPARB); | 384 | I915_WRITE(DSPARB, dev_priv->saveDSPARB); |
373 | 385 | ||
386 | /* Fences */ | ||
387 | if (IS_I965G(dev)) { | ||
388 | for (i = 0; i < 16; i++) | ||
389 | I915_WRITE64(FENCE_REG_965_0 + (i * 8), dev_priv->saveFENCE[i]); | ||
390 | } else { | ||
391 | for (i = 0; i < 8; i++) | ||
392 | I915_WRITE(FENCE_REG_830_0 + (i * 4), dev_priv->saveFENCE[i]); | ||
393 | if (IS_I945G(dev) || IS_I945GM(dev) || IS_G33(dev)) | ||
394 | for (i = 0; i < 8; i++) | ||
395 | I915_WRITE(FENCE_REG_945_8 + (i * 4), dev_priv->saveFENCE[i+8]); | ||
396 | } | ||
397 | |||
374 | /* Pipe & plane A info */ | 398 | /* Pipe & plane A info */ |
375 | /* Prime the clock */ | 399 | /* Prime the clock */ |
376 | if (dev_priv->saveDPLL_A & DPLL_VCO_ENABLE) { | 400 | if (dev_priv->saveDPLL_A & DPLL_VCO_ENABLE) { |