diff options
author | Ville Syrjälä <ville.syrjala@linux.intel.com> | 2013-10-21 03:52:06 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2013-10-28 04:34:37 -0400 |
commit | 4f56d12ebb28fceac4c6e60c8993fbfc122e1399 (patch) | |
tree | e16f0c38b4cfcbfcb14f696ca908048b5887f481 | |
parent | 959f58544b7f20c92d5eb43d1232c96c15c01bfb (diff) |
drm/i915: Add support for pipe_bpp readout
On CTG+ read out the pipe bpp setting from hardware and fill it into
pipe config. Also check it appropriately.
v2: Don't do the pipe_bpp extraction inside the PCH only code block on
ILK+.
Avoid the PIPECONF read as we already have read it for the
PIPECONF_EANBLE check.
Note: This is already in drm-intel-next-queued as
commit 42571aefafb1d330ef84eb29418832f72e7dfb4c
Author: Ville Syrjälä <ville.syrjala@linux.intel.com>
Date: Fri Sep 6 23:29:00 2013 +0300
drm/i915: Add support for pipe_bpp readout
but is needed for the following bugfix.
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Cc: stable@vger.kernel.org
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r-- | drivers/gpu/drm/i915/intel_ddi.c | 17 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 36 |
2 files changed, 53 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c index 63de2701b974..beb7f65cd01f 100644 --- a/drivers/gpu/drm/i915/intel_ddi.c +++ b/drivers/gpu/drm/i915/intel_ddi.c | |||
@@ -1268,6 +1268,23 @@ static void intel_ddi_get_config(struct intel_encoder *encoder, | |||
1268 | flags |= DRM_MODE_FLAG_NVSYNC; | 1268 | flags |= DRM_MODE_FLAG_NVSYNC; |
1269 | 1269 | ||
1270 | pipe_config->adjusted_mode.flags |= flags; | 1270 | pipe_config->adjusted_mode.flags |= flags; |
1271 | |||
1272 | switch (temp & TRANS_DDI_BPC_MASK) { | ||
1273 | case TRANS_DDI_BPC_6: | ||
1274 | pipe_config->pipe_bpp = 18; | ||
1275 | break; | ||
1276 | case TRANS_DDI_BPC_8: | ||
1277 | pipe_config->pipe_bpp = 24; | ||
1278 | break; | ||
1279 | case TRANS_DDI_BPC_10: | ||
1280 | pipe_config->pipe_bpp = 30; | ||
1281 | break; | ||
1282 | case TRANS_DDI_BPC_12: | ||
1283 | pipe_config->pipe_bpp = 36; | ||
1284 | break; | ||
1285 | default: | ||
1286 | break; | ||
1287 | } | ||
1271 | } | 1288 | } |
1272 | 1289 | ||
1273 | static void intel_ddi_destroy(struct drm_encoder *encoder) | 1290 | static void intel_ddi_destroy(struct drm_encoder *encoder) |
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 581fb4b2f766..725f0bea1e4c 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
@@ -4983,6 +4983,22 @@ static bool i9xx_get_pipe_config(struct intel_crtc *crtc, | |||
4983 | if (!(tmp & PIPECONF_ENABLE)) | 4983 | if (!(tmp & PIPECONF_ENABLE)) |
4984 | return false; | 4984 | return false; |
4985 | 4985 | ||
4986 | if (IS_G4X(dev) || IS_VALLEYVIEW(dev)) { | ||
4987 | switch (tmp & PIPECONF_BPC_MASK) { | ||
4988 | case PIPECONF_6BPC: | ||
4989 | pipe_config->pipe_bpp = 18; | ||
4990 | break; | ||
4991 | case PIPECONF_8BPC: | ||
4992 | pipe_config->pipe_bpp = 24; | ||
4993 | break; | ||
4994 | case PIPECONF_10BPC: | ||
4995 | pipe_config->pipe_bpp = 30; | ||
4996 | break; | ||
4997 | default: | ||
4998 | break; | ||
4999 | } | ||
5000 | } | ||
5001 | |||
4986 | intel_get_pipe_timings(crtc, pipe_config); | 5002 | intel_get_pipe_timings(crtc, pipe_config); |
4987 | 5003 | ||
4988 | i9xx_get_pfit_config(crtc, pipe_config); | 5004 | i9xx_get_pfit_config(crtc, pipe_config); |
@@ -5881,6 +5897,23 @@ static bool ironlake_get_pipe_config(struct intel_crtc *crtc, | |||
5881 | if (!(tmp & PIPECONF_ENABLE)) | 5897 | if (!(tmp & PIPECONF_ENABLE)) |
5882 | return false; | 5898 | return false; |
5883 | 5899 | ||
5900 | switch (tmp & PIPECONF_BPC_MASK) { | ||
5901 | case PIPECONF_6BPC: | ||
5902 | pipe_config->pipe_bpp = 18; | ||
5903 | break; | ||
5904 | case PIPECONF_8BPC: | ||
5905 | pipe_config->pipe_bpp = 24; | ||
5906 | break; | ||
5907 | case PIPECONF_10BPC: | ||
5908 | pipe_config->pipe_bpp = 30; | ||
5909 | break; | ||
5910 | case PIPECONF_12BPC: | ||
5911 | pipe_config->pipe_bpp = 36; | ||
5912 | break; | ||
5913 | default: | ||
5914 | break; | ||
5915 | } | ||
5916 | |||
5884 | if (I915_READ(PCH_TRANSCONF(crtc->pipe)) & TRANS_ENABLE) { | 5917 | if (I915_READ(PCH_TRANSCONF(crtc->pipe)) & TRANS_ENABLE) { |
5885 | struct intel_shared_dpll *pll; | 5918 | struct intel_shared_dpll *pll; |
5886 | 5919 | ||
@@ -8612,6 +8645,9 @@ intel_pipe_config_compare(struct drm_device *dev, | |||
8612 | PIPE_CONF_CHECK_X(dpll_hw_state.fp0); | 8645 | PIPE_CONF_CHECK_X(dpll_hw_state.fp0); |
8613 | PIPE_CONF_CHECK_X(dpll_hw_state.fp1); | 8646 | PIPE_CONF_CHECK_X(dpll_hw_state.fp1); |
8614 | 8647 | ||
8648 | if (IS_G4X(dev) || INTEL_INFO(dev)->gen >= 5) | ||
8649 | PIPE_CONF_CHECK_I(pipe_bpp); | ||
8650 | |||
8615 | #undef PIPE_CONF_CHECK_X | 8651 | #undef PIPE_CONF_CHECK_X |
8616 | #undef PIPE_CONF_CHECK_I | 8652 | #undef PIPE_CONF_CHECK_I |
8617 | #undef PIPE_CONF_CHECK_FLAGS | 8653 | #undef PIPE_CONF_CHECK_FLAGS |