Commit 9741538fbf9191a46b80333e003a49ea34d789d3

Authored by Ville Syrjälä
Committed by Greg Kroah-Hartman
1 parent 25f1734b8f

drm/i915: Add HSW CRT output readout support

commit 7195a50b5c7e00cc3312934fd022c3006b533d12 upstream.

Call intel_ddi_get_config() to get the pipe_bpp settings from
DDI.

The sync polarity settings from DDI are irrelevant for CRT
output, so override them with data from the ADPA register.

Note: This is already merged in drm-intel-next-queued as

commit 6801c18c0a43386bb44712cbc028a7e05adb9f0d
Author: Ville Syrjälä <ville.syrjala@linux.intel.com>
Date:   Tue Sep 24 14:24:05 2013 +0300

    drm/i915: Add HSW CRT output readout support

but is required for the following edp bpp bugfix.

v2: Extract intel_crt_get_flags()

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=69691
Tested-by: Qingshuai Tian <qingshuai.tian@intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

Showing 3 changed files with 30 additions and 6 deletions Side-by-side Diff

drivers/gpu/drm/i915/intel_crt.c
... ... @@ -84,8 +84,7 @@
84 84 return true;
85 85 }
86 86  
87   -static void intel_crt_get_config(struct intel_encoder *encoder,
88   - struct intel_crtc_config *pipe_config)
  87 +static unsigned int intel_crt_get_flags(struct intel_encoder *encoder)
89 88 {
90 89 struct drm_i915_private *dev_priv = encoder->base.dev->dev_private;
91 90 struct intel_crt *crt = intel_encoder_to_crt(encoder);
92 91  
... ... @@ -103,9 +102,29 @@
103 102 else
104 103 flags |= DRM_MODE_FLAG_NVSYNC;
105 104  
106   - pipe_config->adjusted_mode.flags |= flags;
  105 + return flags;
107 106 }
108 107  
  108 +static void intel_crt_get_config(struct intel_encoder *encoder,
  109 + struct intel_crtc_config *pipe_config)
  110 +{
  111 + struct drm_device *dev = encoder->base.dev;
  112 +
  113 + pipe_config->adjusted_mode.flags |= intel_crt_get_flags(encoder);
  114 +}
  115 +
  116 +static void hsw_crt_get_config(struct intel_encoder *encoder,
  117 + struct intel_crtc_config *pipe_config)
  118 +{
  119 + intel_ddi_get_config(encoder, pipe_config);
  120 +
  121 + pipe_config->adjusted_mode.flags &= ~(DRM_MODE_FLAG_PHSYNC |
  122 + DRM_MODE_FLAG_NHSYNC |
  123 + DRM_MODE_FLAG_PVSYNC |
  124 + DRM_MODE_FLAG_NVSYNC);
  125 + pipe_config->adjusted_mode.flags |= intel_crt_get_flags(encoder);
  126 +}
  127 +
109 128 /* Note: The caller is required to filter out dpms modes not supported by the
110 129 * platform. */
111 130 static void intel_crt_set_dpms(struct intel_encoder *encoder, int mode)
... ... @@ -802,7 +821,10 @@
802 821 crt->base.compute_config = intel_crt_compute_config;
803 822 crt->base.disable = intel_disable_crt;
804 823 crt->base.enable = intel_enable_crt;
805   - crt->base.get_config = intel_crt_get_config;
  824 + if (IS_HASWELL(dev))
  825 + crt->base.get_config = hsw_crt_get_config;
  826 + else
  827 + crt->base.get_config = intel_crt_get_config;
806 828 if (I915_HAS_HOTPLUG(dev))
807 829 crt->base.hpd_pin = HPD_CRT;
808 830 if (HAS_DDI(dev))
drivers/gpu/drm/i915/intel_ddi.c
... ... @@ -1261,8 +1261,8 @@
1261 1261 intel_dp_check_link_status(intel_dp);
1262 1262 }
1263 1263  
1264   -static void intel_ddi_get_config(struct intel_encoder *encoder,
1265   - struct intel_crtc_config *pipe_config)
  1264 +void intel_ddi_get_config(struct intel_encoder *encoder,
  1265 + struct intel_crtc_config *pipe_config)
1266 1266 {
1267 1267 struct drm_i915_private *dev_priv = encoder->base.dev->dev_private;
1268 1268 struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
drivers/gpu/drm/i915/intel_drv.h
... ... @@ -816,6 +816,8 @@
816 816 extern bool
817 817 intel_ddi_connector_get_hw_state(struct intel_connector *intel_connector);
818 818 extern void intel_ddi_fdi_disable(struct drm_crtc *crtc);
  819 +extern void intel_ddi_get_config(struct intel_encoder *encoder,
  820 + struct intel_crtc_config *pipe_config);
819 821  
820 822 extern void intel_display_handle_reset(struct drm_device *dev);
821 823 extern bool intel_set_cpu_fifo_underrun_reporting(struct drm_device *dev,