| From 34d73a403db97e2657d77aa7e77dff107ad4f12b Mon Sep 17 00:00:00 2001 |
| From: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= <ville.syrjala@linux.intel.com> |
| Date: Fri, 6 Sep 2013 23:29:00 +0300 |
| Subject: drm/i915: Add support for pipe_bpp readout |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| 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. |
| |
| Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> |
| Reviewed-by: Jani Nikula <jani.nikula@intel.com> |
| Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> |
| (cherry picked from commit 42571aefafb1d330ef84eb29418832f72e7dfb4c) |
| Signed-off-by: Darren Hart <dvhart@linux.intel.com> |
| --- |
| drivers/gpu/drm/i915/intel_ddi.c | 17 ++++++++++++++++ |
| drivers/gpu/drm/i915/intel_display.c | 36 +++++++++++++++++++++++++++++++++++ |
| 2 files changed, 53 insertions(+) |
| |
| --- a/drivers/gpu/drm/i915/intel_ddi.c |
| +++ b/drivers/gpu/drm/i915/intel_ddi.c |
| @@ -1274,6 +1274,23 @@ static void intel_ddi_get_config(struct |
| flags |= DRM_MODE_FLAG_NVSYNC; |
| |
| pipe_config->adjusted_mode.flags |= flags; |
| + |
| + switch (temp & TRANS_DDI_BPC_MASK) { |
| + case TRANS_DDI_BPC_6: |
| + pipe_config->pipe_bpp = 18; |
| + break; |
| + case TRANS_DDI_BPC_8: |
| + pipe_config->pipe_bpp = 24; |
| + break; |
| + case TRANS_DDI_BPC_10: |
| + pipe_config->pipe_bpp = 30; |
| + break; |
| + case TRANS_DDI_BPC_12: |
| + pipe_config->pipe_bpp = 36; |
| + break; |
| + default: |
| + break; |
| + } |
| } |
| |
| static void intel_ddi_destroy(struct drm_encoder *encoder) |
| --- a/drivers/gpu/drm/i915/intel_display.c |
| +++ b/drivers/gpu/drm/i915/intel_display.c |
| @@ -4997,6 +4997,22 @@ static bool i9xx_get_pipe_config(struct |
| if (!(tmp & PIPECONF_ENABLE)) |
| return false; |
| |
| + if (IS_G4X(dev) || IS_VALLEYVIEW(dev)) { |
| + switch (tmp & PIPECONF_BPC_MASK) { |
| + case PIPECONF_6BPC: |
| + pipe_config->pipe_bpp = 18; |
| + break; |
| + case PIPECONF_8BPC: |
| + pipe_config->pipe_bpp = 24; |
| + break; |
| + case PIPECONF_10BPC: |
| + pipe_config->pipe_bpp = 30; |
| + break; |
| + default: |
| + break; |
| + } |
| + } |
| + |
| intel_get_pipe_timings(crtc, pipe_config); |
| |
| i9xx_get_pfit_config(crtc, pipe_config); |
| @@ -5896,6 +5912,23 @@ static bool ironlake_get_pipe_config(str |
| if (!(tmp & PIPECONF_ENABLE)) |
| return false; |
| |
| + switch (tmp & PIPECONF_BPC_MASK) { |
| + case PIPECONF_6BPC: |
| + pipe_config->pipe_bpp = 18; |
| + break; |
| + case PIPECONF_8BPC: |
| + pipe_config->pipe_bpp = 24; |
| + break; |
| + case PIPECONF_10BPC: |
| + pipe_config->pipe_bpp = 30; |
| + break; |
| + case PIPECONF_12BPC: |
| + pipe_config->pipe_bpp = 36; |
| + break; |
| + default: |
| + break; |
| + } |
| + |
| if (I915_READ(PCH_TRANSCONF(crtc->pipe)) & TRANS_ENABLE) { |
| struct intel_shared_dpll *pll; |
| |
| @@ -8633,6 +8666,9 @@ intel_pipe_config_compare(struct drm_dev |
| PIPE_CONF_CHECK_X(dpll_hw_state.fp0); |
| PIPE_CONF_CHECK_X(dpll_hw_state.fp1); |
| |
| + if (IS_G4X(dev) || INTEL_INFO(dev)->gen >= 5) |
| + PIPE_CONF_CHECK_I(pipe_bpp); |
| + |
| #undef PIPE_CONF_CHECK_X |
| #undef PIPE_CONF_CHECK_I |
| #undef PIPE_CONF_CHECK_FLAGS |