diff options
| author | Chris Wilson <chris@chris-wilson.co.uk> | 2010-08-14 09:41:22 -0400 |
|---|---|---|
| committer | Eric Anholt <eric@anholt.net> | 2010-08-22 02:20:17 -0400 |
| commit | 72bcb2690927f04c0479cd0d83825f09f3bf4d4f (patch) | |
| tree | 19a53b4d114b896aa03af8da7aa5b11e3546965c /drivers/gpu | |
| parent | d5dd96cb280993a6096b42ab082f9cfd9c7ae0bd (diff) | |
drm/i915/suspend: Flush register writes before busy-waiting.
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Eric Anholt <eric@anholt.net>
Diffstat (limited to 'drivers/gpu')
| -rw-r--r-- | drivers/gpu/drm/i915/i915_suspend.c | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/drivers/gpu/drm/i915/i915_suspend.c b/drivers/gpu/drm/i915/i915_suspend.c index 6e2025274db5..05acc26fabf7 100644 --- a/drivers/gpu/drm/i915/i915_suspend.c +++ b/drivers/gpu/drm/i915/i915_suspend.c | |||
| @@ -395,16 +395,20 @@ static void i915_restore_modeset_reg(struct drm_device *dev) | |||
| 395 | if (dev_priv->saveDPLL_A & DPLL_VCO_ENABLE) { | 395 | if (dev_priv->saveDPLL_A & DPLL_VCO_ENABLE) { |
| 396 | I915_WRITE(dpll_a_reg, dev_priv->saveDPLL_A & | 396 | I915_WRITE(dpll_a_reg, dev_priv->saveDPLL_A & |
| 397 | ~DPLL_VCO_ENABLE); | 397 | ~DPLL_VCO_ENABLE); |
| 398 | DRM_UDELAY(150); | 398 | POSTING_READ(dpll_a_reg); |
| 399 | udelay(150); | ||
| 399 | } | 400 | } |
| 400 | I915_WRITE(fpa0_reg, dev_priv->saveFPA0); | 401 | I915_WRITE(fpa0_reg, dev_priv->saveFPA0); |
| 401 | I915_WRITE(fpa1_reg, dev_priv->saveFPA1); | 402 | I915_WRITE(fpa1_reg, dev_priv->saveFPA1); |
| 402 | /* Actually enable it */ | 403 | /* Actually enable it */ |
| 403 | I915_WRITE(dpll_a_reg, dev_priv->saveDPLL_A); | 404 | I915_WRITE(dpll_a_reg, dev_priv->saveDPLL_A); |
| 404 | DRM_UDELAY(150); | 405 | POSTING_READ(dpll_a_reg); |
| 405 | if (IS_I965G(dev) && !IS_IRONLAKE(dev)) | 406 | udelay(150); |
| 407 | if (IS_I965G(dev) && !IS_IRONLAKE(dev)) { | ||
| 406 | I915_WRITE(DPLL_A_MD, dev_priv->saveDPLL_A_MD); | 408 | I915_WRITE(DPLL_A_MD, dev_priv->saveDPLL_A_MD); |
| 407 | DRM_UDELAY(150); | 409 | POSTING_READ(DPLL_A_MD); |
| 410 | } | ||
| 411 | udelay(150); | ||
| 408 | 412 | ||
| 409 | /* Restore mode */ | 413 | /* Restore mode */ |
| 410 | I915_WRITE(HTOTAL_A, dev_priv->saveHTOTAL_A); | 414 | I915_WRITE(HTOTAL_A, dev_priv->saveHTOTAL_A); |
| @@ -460,16 +464,20 @@ static void i915_restore_modeset_reg(struct drm_device *dev) | |||
| 460 | if (dev_priv->saveDPLL_B & DPLL_VCO_ENABLE) { | 464 | if (dev_priv->saveDPLL_B & DPLL_VCO_ENABLE) { |
| 461 | I915_WRITE(dpll_b_reg, dev_priv->saveDPLL_B & | 465 | I915_WRITE(dpll_b_reg, dev_priv->saveDPLL_B & |
| 462 | ~DPLL_VCO_ENABLE); | 466 | ~DPLL_VCO_ENABLE); |
| 463 | DRM_UDELAY(150); | 467 | POSTING_READ(dpll_b_reg); |
| 468 | udelay(150); | ||
| 464 | } | 469 | } |
| 465 | I915_WRITE(fpb0_reg, dev_priv->saveFPB0); | 470 | I915_WRITE(fpb0_reg, dev_priv->saveFPB0); |
| 466 | I915_WRITE(fpb1_reg, dev_priv->saveFPB1); | 471 | I915_WRITE(fpb1_reg, dev_priv->saveFPB1); |
| 467 | /* Actually enable it */ | 472 | /* Actually enable it */ |
| 468 | I915_WRITE(dpll_b_reg, dev_priv->saveDPLL_B); | 473 | I915_WRITE(dpll_b_reg, dev_priv->saveDPLL_B); |
| 469 | DRM_UDELAY(150); | 474 | POSTING_READ(dpll_b_reg); |
| 470 | if (IS_I965G(dev) && !IS_IRONLAKE(dev)) | 475 | udelay(150); |
| 476 | if (IS_I965G(dev) && !IS_IRONLAKE(dev)) { | ||
| 471 | I915_WRITE(DPLL_B_MD, dev_priv->saveDPLL_B_MD); | 477 | I915_WRITE(DPLL_B_MD, dev_priv->saveDPLL_B_MD); |
| 472 | DRM_UDELAY(150); | 478 | POSTING_READ(DPLL_B_MD); |
| 479 | } | ||
| 480 | udelay(150); | ||
| 473 | 481 | ||
| 474 | /* Restore mode */ | 482 | /* Restore mode */ |
| 475 | I915_WRITE(HTOTAL_B, dev_priv->saveHTOTAL_B); | 483 | I915_WRITE(HTOTAL_B, dev_priv->saveHTOTAL_B); |
| @@ -730,7 +738,8 @@ void i915_restore_display(struct drm_device *dev) | |||
| 730 | I915_WRITE(VGA0, dev_priv->saveVGA0); | 738 | I915_WRITE(VGA0, dev_priv->saveVGA0); |
| 731 | I915_WRITE(VGA1, dev_priv->saveVGA1); | 739 | I915_WRITE(VGA1, dev_priv->saveVGA1); |
| 732 | I915_WRITE(VGA_PD, dev_priv->saveVGA_PD); | 740 | I915_WRITE(VGA_PD, dev_priv->saveVGA_PD); |
| 733 | DRM_UDELAY(150); | 741 | POSTING_READ(VGA_PD); |
| 742 | udelay(150); | ||
| 734 | 743 | ||
| 735 | i915_restore_vga(dev); | 744 | i915_restore_vga(dev); |
| 736 | } | 745 | } |
