diff options
Diffstat (limited to 'drivers/gpu/drm/i915/intel_display.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 39 |
1 files changed, 18 insertions, 21 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 3106c0dc838..432fc04c6bf 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
@@ -1516,9 +1516,10 @@ static void intel_enable_pipe(struct drm_i915_private *dev_priv, enum pipe pipe, | |||
1516 | 1516 | ||
1517 | reg = PIPECONF(pipe); | 1517 | reg = PIPECONF(pipe); |
1518 | val = I915_READ(reg); | 1518 | val = I915_READ(reg); |
1519 | val |= PIPECONF_ENABLE; | 1519 | if (val & PIPECONF_ENABLE) |
1520 | I915_WRITE(reg, val); | 1520 | return; |
1521 | POSTING_READ(reg); | 1521 | |
1522 | I915_WRITE(reg, val | PIPECONF_ENABLE); | ||
1522 | intel_wait_for_vblank(dev_priv->dev, pipe); | 1523 | intel_wait_for_vblank(dev_priv->dev, pipe); |
1523 | } | 1524 | } |
1524 | 1525 | ||
@@ -1552,9 +1553,10 @@ static void intel_disable_pipe(struct drm_i915_private *dev_priv, | |||
1552 | 1553 | ||
1553 | reg = PIPECONF(pipe); | 1554 | reg = PIPECONF(pipe); |
1554 | val = I915_READ(reg); | 1555 | val = I915_READ(reg); |
1555 | val &= ~PIPECONF_ENABLE; | 1556 | if ((val & PIPECONF_ENABLE) == 0) |
1556 | I915_WRITE(reg, val); | 1557 | return; |
1557 | POSTING_READ(reg); | 1558 | |
1559 | I915_WRITE(reg, val & ~PIPECONF_ENABLE); | ||
1558 | intel_wait_for_pipe_off(dev_priv->dev, pipe); | 1560 | intel_wait_for_pipe_off(dev_priv->dev, pipe); |
1559 | } | 1561 | } |
1560 | 1562 | ||
@@ -1577,9 +1579,10 @@ static void intel_enable_plane(struct drm_i915_private *dev_priv, | |||
1577 | 1579 | ||
1578 | reg = DSPCNTR(plane); | 1580 | reg = DSPCNTR(plane); |
1579 | val = I915_READ(reg); | 1581 | val = I915_READ(reg); |
1580 | val |= DISPLAY_PLANE_ENABLE; | 1582 | if (val & DISPLAY_PLANE_ENABLE) |
1581 | I915_WRITE(reg, val); | 1583 | return; |
1582 | POSTING_READ(reg); | 1584 | |
1585 | I915_WRITE(reg, val | DISPLAY_PLANE_ENABLE); | ||
1583 | intel_wait_for_vblank(dev_priv->dev, pipe); | 1586 | intel_wait_for_vblank(dev_priv->dev, pipe); |
1584 | } | 1587 | } |
1585 | 1588 | ||
@@ -1610,9 +1613,10 @@ static void intel_disable_plane(struct drm_i915_private *dev_priv, | |||
1610 | 1613 | ||
1611 | reg = DSPCNTR(plane); | 1614 | reg = DSPCNTR(plane); |
1612 | val = I915_READ(reg); | 1615 | val = I915_READ(reg); |
1613 | val &= ~DISPLAY_PLANE_ENABLE; | 1616 | if ((val & DISPLAY_PLANE_ENABLE) == 0) |
1614 | I915_WRITE(reg, val); | 1617 | return; |
1615 | POSTING_READ(reg); | 1618 | |
1619 | I915_WRITE(reg, val & ~DISPLAY_PLANE_ENABLE); | ||
1616 | intel_flush_display_plane(dev_priv, plane); | 1620 | intel_flush_display_plane(dev_priv, plane); |
1617 | intel_wait_for_vblank(dev_priv->dev, pipe); | 1621 | intel_wait_for_vblank(dev_priv->dev, pipe); |
1618 | } | 1622 | } |
@@ -1769,7 +1773,6 @@ static void g4x_enable_fbc(struct drm_crtc *crtc, unsigned long interval) | |||
1769 | return; | 1773 | return; |
1770 | 1774 | ||
1771 | I915_WRITE(DPFC_CONTROL, dpfc_ctl & ~DPFC_CTL_EN); | 1775 | I915_WRITE(DPFC_CONTROL, dpfc_ctl & ~DPFC_CTL_EN); |
1772 | POSTING_READ(DPFC_CONTROL); | ||
1773 | intel_wait_for_vblank(dev, intel_crtc->pipe); | 1776 | intel_wait_for_vblank(dev, intel_crtc->pipe); |
1774 | } | 1777 | } |
1775 | 1778 | ||
@@ -1861,7 +1864,6 @@ static void ironlake_enable_fbc(struct drm_crtc *crtc, unsigned long interval) | |||
1861 | return; | 1864 | return; |
1862 | 1865 | ||
1863 | I915_WRITE(ILK_DPFC_CONTROL, dpfc_ctl & ~DPFC_CTL_EN); | 1866 | I915_WRITE(ILK_DPFC_CONTROL, dpfc_ctl & ~DPFC_CTL_EN); |
1864 | POSTING_READ(ILK_DPFC_CONTROL); | ||
1865 | intel_wait_for_vblank(dev, intel_crtc->pipe); | 1867 | intel_wait_for_vblank(dev, intel_crtc->pipe); |
1866 | } | 1868 | } |
1867 | 1869 | ||
@@ -3883,10 +3885,7 @@ static bool g4x_compute_srwm(struct drm_device *dev, | |||
3883 | display, cursor); | 3885 | display, cursor); |
3884 | } | 3886 | } |
3885 | 3887 | ||
3886 | static inline bool single_plane_enabled(unsigned int mask) | 3888 | #define single_plane_enabled(mask) is_power_of_2(mask) |
3887 | { | ||
3888 | return mask && (mask & -mask) == 0; | ||
3889 | } | ||
3890 | 3889 | ||
3891 | static void g4x_update_wm(struct drm_device *dev) | 3890 | static void g4x_update_wm(struct drm_device *dev) |
3892 | { | 3891 | { |
@@ -5777,7 +5776,6 @@ static void intel_increase_pllclock(struct drm_crtc *crtc) | |||
5777 | 5776 | ||
5778 | dpll &= ~DISPLAY_RATE_SELECT_FPA1; | 5777 | dpll &= ~DISPLAY_RATE_SELECT_FPA1; |
5779 | I915_WRITE(dpll_reg, dpll); | 5778 | I915_WRITE(dpll_reg, dpll); |
5780 | POSTING_READ(dpll_reg); | ||
5781 | intel_wait_for_vblank(dev, pipe); | 5779 | intel_wait_for_vblank(dev, pipe); |
5782 | 5780 | ||
5783 | dpll = I915_READ(dpll_reg); | 5781 | dpll = I915_READ(dpll_reg); |
@@ -5821,7 +5819,6 @@ static void intel_decrease_pllclock(struct drm_crtc *crtc) | |||
5821 | 5819 | ||
5822 | dpll |= DISPLAY_RATE_SELECT_FPA1; | 5820 | dpll |= DISPLAY_RATE_SELECT_FPA1; |
5823 | I915_WRITE(dpll_reg, dpll); | 5821 | I915_WRITE(dpll_reg, dpll); |
5824 | dpll = I915_READ(dpll_reg); | ||
5825 | intel_wait_for_vblank(dev, pipe); | 5822 | intel_wait_for_vblank(dev, pipe); |
5826 | dpll = I915_READ(dpll_reg); | 5823 | dpll = I915_READ(dpll_reg); |
5827 | if (!(dpll & DISPLAY_RATE_SELECT_FPA1)) | 5824 | if (!(dpll & DISPLAY_RATE_SELECT_FPA1)) |
@@ -6933,7 +6930,7 @@ void gen6_enable_rps(struct drm_i915_private *dev_priv) | |||
6933 | DRM_ERROR("timeout waiting for pcode mailbox to finish\n"); | 6930 | DRM_ERROR("timeout waiting for pcode mailbox to finish\n"); |
6934 | if (pcu_mbox & (1<<31)) { /* OC supported */ | 6931 | if (pcu_mbox & (1<<31)) { /* OC supported */ |
6935 | max_freq = pcu_mbox & 0xff; | 6932 | max_freq = pcu_mbox & 0xff; |
6936 | DRM_DEBUG_DRIVER("overclocking supported, adjusting frequency max to %dMHz\n", pcu_mbox * 100); | 6933 | DRM_DEBUG_DRIVER("overclocking supported, adjusting frequency max to %dMHz\n", pcu_mbox * 50); |
6937 | } | 6934 | } |
6938 | 6935 | ||
6939 | /* In units of 100MHz */ | 6936 | /* In units of 100MHz */ |