diff options
author | Paulo Zanoni <paulo.r.zanoni@intel.com> | 2013-11-03 00:07:38 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2013-11-08 12:09:54 -0500 |
commit | 756f85cffef2bc84aa85b25031c1c97721928bd2 (patch) | |
tree | 4f182799c84e1ef6c8812a0e3c116b312f827e7a /drivers/gpu/drm/i915/intel_display.c | |
parent | c7670b1098b1a05c5266a7d3d2f07165621e7de9 (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.c | 33 |
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 | ||
5819 | static void haswell_set_pipeconf(struct drm_crtc *crtc) | 5819 | static 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 | ||
5843 | static bool ironlake_compute_clocks(struct drm_crtc *crtc, | 5872 | static bool ironlake_compute_clocks(struct drm_crtc *crtc, |