[PATCH] drm/i915/dp: Fallback to DSC for HDR content if needed
Imre Deak
imre.deak at intel.com
Fri Jul 11 12:57:05 UTC 2025
On Thu, Jul 03, 2025 at 07:32:52PM +0530, Chaitanya Kumar Borah wrote:
> If user-space has enabled HDR by passing HDR metadata and we can't support
> 10bpc fallback to DSC.
>
> Now that we need the helper to determine the presence of HDR metadata at
> multiple places make it non static.
>
> Signed-off-by: Chaitanya Kumar Borah <chaitanya.kumar.borah at intel.com>
> ---
> drivers/gpu/drm/i915/display/intel_dp.c | 16 ++++++++++++++++
> drivers/gpu/drm/i915/display/intel_dp.h | 1 +
> .../drm/i915/display/intel_dp_aux_backlight.c | 13 -------------
> 3 files changed, 17 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.c b/drivers/gpu/drm/i915/display/intel_dp.c
> index f48912f308df..abbba159e479 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp.c
> @@ -1774,6 +1774,9 @@ intel_dp_compute_link_config_wide(struct intel_dp *intel_dp,
> bpp -= 2 * 3) {
> int link_bpp = intel_dp_output_bpp(pipe_config->output_format, bpp);
>
> + if (intel_dp_in_hdr_mode(conn_state) && bpp < 30)
> + return -EINVAL;
This limit should be set in limits->pipe.min_bpp, computed already by
this time in intel_dp_compute_config_limits(). Not sure though if it's
expected that the modeset fails if DSC is not available for instance.
> +
> mode_rate = intel_dp_link_required(clock, link_bpp);
>
> for (i = 0; i < intel_dp->num_common_rates; i++) {
> @@ -2910,6 +2913,19 @@ static void intel_dp_compute_vsc_sdp(struct intel_dp *intel_dp,
> }
> }
>
> +bool
> +intel_dp_in_hdr_mode(const struct drm_connector_state *conn_state)
> +{
> + struct hdr_output_metadata *hdr_metadata;
> +
> + if (!conn_state->hdr_output_metadata)
> + return false;
> +
> + hdr_metadata = conn_state->hdr_output_metadata->data;
> +
> + return hdr_metadata->hdmi_metadata_type1.eotf == HDMI_EOTF_SMPTE_ST2084;
> +}
> +
> static void
> intel_dp_compute_hdr_metadata_infoframe_sdp(struct intel_dp *intel_dp,
> struct intel_crtc_state *crtc_state,
> diff --git a/drivers/gpu/drm/i915/display/intel_dp.h b/drivers/gpu/drm/i915/display/intel_dp.h
> index 0657f5681196..5def589e3c0e 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp.h
> +++ b/drivers/gpu/drm/i915/display/intel_dp.h
> @@ -214,5 +214,6 @@ int intel_dp_compute_min_hblank(struct intel_crtc_state *crtc_state,
>
> int intel_dp_dsc_bpp_step_x16(const struct intel_connector *connector);
> void intel_dp_dpcd_set_probe(struct intel_dp *intel_dp, bool force_on_external);
> +bool intel_dp_in_hdr_mode(const struct drm_connector_state *conn_state);
>
> #endif /* __INTEL_DP_H__ */
> diff --git a/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c b/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c
> index 41228478b21c..12084a542fc5 100644
> --- a/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c
> +++ b/drivers/gpu/drm/i915/display/intel_dp_aux_backlight.c
> @@ -225,19 +225,6 @@ intel_dp_aux_hdr_set_aux_backlight(const struct drm_connector_state *conn_state,
> connector->base.base.id, connector->base.name);
> }
>
> -static bool
> -intel_dp_in_hdr_mode(const struct drm_connector_state *conn_state)
> -{
> - struct hdr_output_metadata *hdr_metadata;
> -
> - if (!conn_state->hdr_output_metadata)
> - return false;
> -
> - hdr_metadata = conn_state->hdr_output_metadata->data;
> -
> - return hdr_metadata->hdmi_metadata_type1.eotf == HDMI_EOTF_SMPTE_ST2084;
> -}
> -
> static void
> intel_dp_aux_hdr_set_backlight(const struct drm_connector_state *conn_state, u32 level)
> {
> --
> 2.25.1
>
More information about the Intel-xe
mailing list