[Intel-gfx] [PATCH v3 12/13] drm/i915/dsi: account for DSC in horizontal timings
Kulkarni, Vandita
vandita.kulkarni at intel.com
Thu Dec 5 14:52:12 UTC 2019
> -----Original Message-----
> From: Jani Nikula <jani.nikula at intel.com>
> Sent: Tuesday, November 26, 2019 7:13 PM
> To: intel-gfx at lists.freedesktop.org
> Cc: Nikula, Jani <jani.nikula at intel.com>; Kulkarni, Vandita
> <vandita.kulkarni at intel.com>; Ville Syrjälä <ville.syrjala at linux.intel.com>
> Subject: [PATCH v3 12/13] drm/i915/dsi: account for DSC in horizontal
> timings
>
> When DSC is enabled, we need to adjust the horizontal timings to account
> for the compressed (and therefore reduced) link speed.
>
> The compressed frequency ratio simplifies down to the ratio between
> compressed and non-compressed bpp.
>
> Bspec: 49263
> Suggested-by: Vandita Kulkarni <vandita.kulkarni at intel.com>
> Cc: Vandita Kulkarni <vandita.kulkarni at intel.com>
> Cc: Ville Syrjälä <ville.syrjala at linux.intel.com>
> Signed-off-by: Jani Nikula <jani.nikula at intel.com>
Can be considered out of this patch, but gen11_dsi_get_timings would need corresponding
Changes to avoid state mismatch wrt horizontal timings.
Other than that, this patch looks good to me.
Reviewed-by: Vandita Kulkarni <vandita.kulkarni at intel.com>
Thanks,
Vandita
> ---
> drivers/gpu/drm/i915/display/icl_dsi.c | 24 +++++++++++++++++++-----
> 1 file changed, 19 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/icl_dsi.c
> b/drivers/gpu/drm/i915/display/icl_dsi.c
> index 460759913708..caa477c4b1af 100644
> --- a/drivers/gpu/drm/i915/display/icl_dsi.c
> +++ b/drivers/gpu/drm/i915/display/icl_dsi.c
> @@ -785,12 +785,12 @@ gen11_dsi_configure_transcoder(struct
> intel_encoder *encoder,
>
> static void
> gen11_dsi_set_transcoder_timings(struct intel_encoder *encoder,
> - const struct intel_crtc_state *pipe_config)
> + const struct intel_crtc_state *crtc_state)
> {
> struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
> struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
> const struct drm_display_mode *adjusted_mode =
> - &pipe_config->hw.adjusted_mode;
> + &crtc_state->hw.adjusted_mode;
> enum port port;
> enum transcoder dsi_trans;
> /* horizontal timings */
> @@ -798,11 +798,25 @@ gen11_dsi_set_transcoder_timings(struct
> intel_encoder *encoder,
> u16 hback_porch;
> /* vertical timings */
> u16 vtotal, vactive, vsync_start, vsync_end, vsync_shift;
> + int mul = 1, div = 1;
> +
> + /*
> + * Adjust horizontal timings (htotal, hsync_start, hsync_end) to
> account
> + * for slower link speed if DSC is enabled.
> + *
> + * The compression frequency ratio is the ratio between compressed
> and
> + * non-compressed link speeds, and simplifies down to the ratio
> between
> + * compressed and non-compressed bpp.
> + */
> + if (crtc_state->dsc.compression_enable) {
> + mul = crtc_state->dsc.compressed_bpp;
> + div = mipi_dsi_pixel_format_to_bpp(intel_dsi-
> >pixel_format);
> + }
>
> hactive = adjusted_mode->crtc_hdisplay;
> - htotal = adjusted_mode->crtc_htotal;
> - hsync_start = adjusted_mode->crtc_hsync_start;
> - hsync_end = adjusted_mode->crtc_hsync_end;
> + htotal = DIV_ROUND_UP(adjusted_mode->crtc_htotal * mul, div);
> + hsync_start = DIV_ROUND_UP(adjusted_mode->crtc_hsync_start *
> mul, div);
> + hsync_end = DIV_ROUND_UP(adjusted_mode->crtc_hsync_end *
> mul, div);
> hsync_size = hsync_end - hsync_start;
> hback_porch = (adjusted_mode->crtc_htotal -
> adjusted_mode->crtc_hsync_end);
> --
> 2.20.1
More information about the Intel-gfx
mailing list