aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVille Syrjälä <ville.syrjala@linux.intel.com>2013-10-21 03:52:06 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2013-10-28 04:34:37 -0400
commit4f56d12ebb28fceac4c6e60c8993fbfc122e1399 (patch)
treee16f0c38b4cfcbfcb14f696ca908048b5887f481
parent959f58544b7f20c92d5eb43d1232c96c15c01bfb (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.c17
-rw-r--r--drivers/gpu/drm/i915/intel_display.c36
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
1273static void intel_ddi_destroy(struct drm_encoder *encoder) 1290static 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