aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_display.c
diff options
context:
space:
mode:
authorPaulo Zanoni <paulo.r.zanoni@intel.com>2013-11-03 00:07:38 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2013-11-08 12:09:54 -0500
commit756f85cffef2bc84aa85b25031c1c97721928bd2 (patch)
tree4f182799c84e1ef6c8812a0e3c116b312f827e7a /drivers/gpu/drm/i915/intel_display.c
parentc7670b1098b1a05c5266a7d3d2f07165621e7de9 (diff)
drm/i915/bdw: Broadwell has PIPEMISC
And it inherits some bits from the previous TRANS_CONF (aka PIPE_CONF on previous gens). v2: Rebase on to of the pipe config bpp handling rework. v3: Rebased on top of the pipe_config->dither refactoring. v4: Drop the read-modify-write cycle for PIPEMISC, similarly to how we now also build up PIPECONF completely ourselves - keeping around random stuff set by the BIOS just isn't a good idea. I've checked BDW BSpec and we already set all relevant bits. Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com> (v1) Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_display.c')
-rw-r--r--drivers/gpu/drm/i915/intel_display.c33
1 files changed, 31 insertions, 2 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index e555f540e7a1..6d64337c5538 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -5818,14 +5818,16 @@ static void intel_set_pipe_csc(struct drm_crtc *crtc)
5818 5818
5819static void haswell_set_pipeconf(struct drm_crtc *crtc) 5819static void haswell_set_pipeconf(struct drm_crtc *crtc)
5820{ 5820{
5821 struct drm_i915_private *dev_priv = crtc->dev->dev_private; 5821 struct drm_device *dev = crtc->dev;
5822 struct drm_i915_private *dev_priv = dev->dev_private;
5822 struct intel_crtc *intel_crtc = to_intel_crtc(crtc); 5823 struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
5824 enum pipe pipe = intel_crtc->pipe;
5823 enum transcoder cpu_transcoder = intel_crtc->config.cpu_transcoder; 5825 enum transcoder cpu_transcoder = intel_crtc->config.cpu_transcoder;
5824 uint32_t val; 5826 uint32_t val;
5825 5827
5826 val = 0; 5828 val = 0;
5827 5829
5828 if (intel_crtc->config.dither) 5830 if (IS_HASWELL(dev) && intel_crtc->config.dither)
5829 val |= (PIPECONF_DITHER_EN | PIPECONF_DITHER_TYPE_SP); 5831 val |= (PIPECONF_DITHER_EN | PIPECONF_DITHER_TYPE_SP);
5830 5832
5831 if (intel_crtc->config.adjusted_mode.flags & DRM_MODE_FLAG_INTERLACE) 5833 if (intel_crtc->config.adjusted_mode.flags & DRM_MODE_FLAG_INTERLACE)
@@ -5838,6 +5840,33 @@ static void haswell_set_pipeconf(struct drm_crtc *crtc)
5838 5840
5839 I915_WRITE(GAMMA_MODE(intel_crtc->pipe), GAMMA_MODE_MODE_8BIT); 5841 I915_WRITE(GAMMA_MODE(intel_crtc->pipe), GAMMA_MODE_MODE_8BIT);
5840 POSTING_READ(GAMMA_MODE(intel_crtc->pipe)); 5842 POSTING_READ(GAMMA_MODE(intel_crtc->pipe));
5843
5844 if (IS_BROADWELL(dev)) {
5845 val = 0;
5846
5847 switch (intel_crtc->config.pipe_bpp) {
5848 case 18:
5849 val |= PIPEMISC_DITHER_6_BPC;
5850 break;
5851 case 24:
5852 val |= PIPEMISC_DITHER_8_BPC;
5853 break;
5854 case 30:
5855 val |= PIPEMISC_DITHER_10_BPC;
5856 break;
5857 case 36:
5858 val |= PIPEMISC_DITHER_12_BPC;
5859 break;
5860 default:
5861 /* Case prevented by pipe_config_set_bpp. */
5862 BUG();
5863 }
5864
5865 if (intel_crtc->config.dither)
5866 val |= PIPEMISC_DITHER_ENABLE | PIPEMISC_DITHER_TYPE_SP;
5867
5868 I915_WRITE(PIPEMISC(pipe), val);
5869 }
5841} 5870}
5842 5871
5843static bool ironlake_compute_clocks(struct drm_crtc *crtc, 5872static bool ironlake_compute_clocks(struct drm_crtc *crtc,