Commit 72bcb2690927f04c0479cd0d83825f09f3bf4d4f
Committed by
Eric Anholt
1 parent
d5dd96cb28
Exists in
master
and in
7 other branches
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>
Showing 1 changed file with 18 additions and 9 deletions Side-by-side Diff
drivers/gpu/drm/i915/i915_suspend.c
... | ... | @@ -395,16 +395,20 @@ |
395 | 395 | if (dev_priv->saveDPLL_A & DPLL_VCO_ENABLE) { |
396 | 396 | I915_WRITE(dpll_a_reg, dev_priv->saveDPLL_A & |
397 | 397 | ~DPLL_VCO_ENABLE); |
398 | - DRM_UDELAY(150); | |
398 | + POSTING_READ(dpll_a_reg); | |
399 | + udelay(150); | |
399 | 400 | } |
400 | 401 | I915_WRITE(fpa0_reg, dev_priv->saveFPA0); |
401 | 402 | I915_WRITE(fpa1_reg, dev_priv->saveFPA1); |
402 | 403 | /* Actually enable it */ |
403 | 404 | I915_WRITE(dpll_a_reg, dev_priv->saveDPLL_A); |
404 | - DRM_UDELAY(150); | |
405 | - if (IS_I965G(dev) && !IS_IRONLAKE(dev)) | |
405 | + POSTING_READ(dpll_a_reg); | |
406 | + udelay(150); | |
407 | + if (IS_I965G(dev) && !IS_IRONLAKE(dev)) { | |
406 | 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 | 413 | /* Restore mode */ |
410 | 414 | I915_WRITE(HTOTAL_A, dev_priv->saveHTOTAL_A); |
411 | 415 | |
412 | 416 | |
... | ... | @@ -460,16 +464,20 @@ |
460 | 464 | if (dev_priv->saveDPLL_B & DPLL_VCO_ENABLE) { |
461 | 465 | I915_WRITE(dpll_b_reg, dev_priv->saveDPLL_B & |
462 | 466 | ~DPLL_VCO_ENABLE); |
463 | - DRM_UDELAY(150); | |
467 | + POSTING_READ(dpll_b_reg); | |
468 | + udelay(150); | |
464 | 469 | } |
465 | 470 | I915_WRITE(fpb0_reg, dev_priv->saveFPB0); |
466 | 471 | I915_WRITE(fpb1_reg, dev_priv->saveFPB1); |
467 | 472 | /* Actually enable it */ |
468 | 473 | I915_WRITE(dpll_b_reg, dev_priv->saveDPLL_B); |
469 | - DRM_UDELAY(150); | |
470 | - if (IS_I965G(dev) && !IS_IRONLAKE(dev)) | |
474 | + POSTING_READ(dpll_b_reg); | |
475 | + udelay(150); | |
476 | + if (IS_I965G(dev) && !IS_IRONLAKE(dev)) { | |
471 | 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 | 482 | /* Restore mode */ |
475 | 483 | I915_WRITE(HTOTAL_B, dev_priv->saveHTOTAL_B); |
... | ... | @@ -730,7 +738,8 @@ |
730 | 738 | I915_WRITE(VGA0, dev_priv->saveVGA0); |
731 | 739 | I915_WRITE(VGA1, dev_priv->saveVGA1); |
732 | 740 | I915_WRITE(VGA_PD, dev_priv->saveVGA_PD); |
733 | - DRM_UDELAY(150); | |
741 | + POSTING_READ(VGA_PD); | |
742 | + udelay(150); | |
734 | 743 | |
735 | 744 | i915_restore_vga(dev); |
736 | 745 | } |