drm/i915: Fix pipe_bpp readout for BXT/GLK DSI
The only bpc information in pipe registers for BXT/GLK DSI is the PIPEMISC dither bpc. Let's try to use that to read out pipe_bpp on these platforms. However, I'm not sure if this will be correctly populated by the GOP since bspec suggests it's only needed if dithering is actually enabled. If not I guess we'll have to go one step further and extract pipe_bpp from the DSI pixel format when dithering is disabled. Cc: Hans de Goede <hdegoede@redhat.com> Fixes:ca0b04db14
("drm/i915/dsi: Fix pipe_bpp for handling for 6 bpc pixel-formats") References: https://bugs.freedesktop.org/show_bug.cgi?id=109516 Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Reviewed-by: Imre Deak <imre.deak@intel.com> Signed-off-by: Jani Nikula <jani.nikula@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20190405141349.11950-1-ville.syrjala@linux.intel.com (cherry picked from commit499653501b
) Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
This commit is contained in:

committed by
Rodrigo Vivi

parent
57cbec02f9
commit
e1b7058ece
@@ -256,6 +256,28 @@ static void band_gap_reset(struct drm_i915_private *dev_priv)
|
|||||||
mutex_unlock(&dev_priv->sb_lock);
|
mutex_unlock(&dev_priv->sb_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int bdw_get_pipemisc_bpp(struct intel_crtc *crtc)
|
||||||
|
{
|
||||||
|
struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
|
||||||
|
u32 tmp;
|
||||||
|
|
||||||
|
tmp = I915_READ(PIPEMISC(crtc->pipe));
|
||||||
|
|
||||||
|
switch (tmp & PIPEMISC_DITHER_BPC_MASK) {
|
||||||
|
case PIPEMISC_DITHER_6_BPC:
|
||||||
|
return 18;
|
||||||
|
case PIPEMISC_DITHER_8_BPC:
|
||||||
|
return 24;
|
||||||
|
case PIPEMISC_DITHER_10_BPC:
|
||||||
|
return 30;
|
||||||
|
case PIPEMISC_DITHER_12_BPC:
|
||||||
|
return 36;
|
||||||
|
default:
|
||||||
|
MISSING_CASE(tmp);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static int intel_dsi_compute_config(struct intel_encoder *encoder,
|
static int intel_dsi_compute_config(struct intel_encoder *encoder,
|
||||||
struct intel_crtc_state *pipe_config,
|
struct intel_crtc_state *pipe_config,
|
||||||
struct drm_connector_state *conn_state)
|
struct drm_connector_state *conn_state)
|
||||||
@@ -1071,6 +1093,8 @@ static void bxt_dsi_get_pipe_config(struct intel_encoder *encoder,
|
|||||||
bpp = mipi_dsi_pixel_format_to_bpp(
|
bpp = mipi_dsi_pixel_format_to_bpp(
|
||||||
pixel_format_from_register_bits(fmt));
|
pixel_format_from_register_bits(fmt));
|
||||||
|
|
||||||
|
pipe_config->pipe_bpp = bdw_get_pipemisc_bpp(crtc);
|
||||||
|
|
||||||
/* Enable Frame time stamo based scanline reporting */
|
/* Enable Frame time stamo based scanline reporting */
|
||||||
adjusted_mode->private_flags |=
|
adjusted_mode->private_flags |=
|
||||||
I915_MODE_FLAG_GET_SCANLINE_FROM_TIMESTAMP;
|
I915_MODE_FLAG_GET_SCANLINE_FROM_TIMESTAMP;
|
||||||
|
Reference in New Issue
Block a user