> -----Original Message-----
> From: Intel-xe <[email protected]> On Behalf Of Chaitanya
> Kumar Borah
> Sent: Wednesday, June 17, 2026 2:38 PM
> To: [email protected]; [email protected]; intel-
> [email protected]
> Cc: Borah, Chaitanya Kumar <[email protected]>
> Subject: [v3 06/14] drm/i915/display: Program input CSC on SDR planes
> 
> When a color pipeline is active, program the SDR plane fixed-function CSC. 
> Keep
> the legacy color_encoding/color_range properties mutually exclusive with color
> pipeline uapi.

Changes Look Good to me.
Reviewed-by: Uma Shankar <[email protected]>

> Signed-off-by: Chaitanya Kumar Borah <[email protected]>
> ---
>  .../drm/i915/display/skl_universal_plane.c    | 64 ++++++++++++++-----
>  1 file changed, 47 insertions(+), 17 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/skl_universal_plane.c
> b/drivers/gpu/drm/i915/display/skl_universal_plane.c
> index da2df5be9848..0e951b36ccca 100644
> --- a/drivers/gpu/drm/i915/display/skl_universal_plane.c
> +++ b/drivers/gpu/drm/i915/display/skl_universal_plane.c
> @@ -1240,33 +1240,63 @@ static u32 glk_plane_color_ctl_crtc(const struct
> intel_crtc_state *crtc_state)
>       return plane_color_ctl;
>  }
> 
> +static u32 intel_csc_ff_type_to_csc_mode(enum
> +drm_colorop_fixed_matrix_type csc_ff_type) {
> +     u32 csc_mode;
> +
> +     switch (csc_ff_type) {
> +     case DRM_COLOROP_FM_YCBCR601_FULL_RGB:
> +             csc_mode =
> PLANE_COLOR_CSC_MODE_YUV601_TO_RGB601;
> +             break;
> +     case DRM_COLOROP_FM_YCBCR709_FULL_RGB:
> +             csc_mode =
> PLANE_COLOR_CSC_MODE_YUV709_TO_RGB709;
> +             break;
> +     case DRM_COLOROP_FM_YCBCR2020_NC_FULL_RGB:
> +             csc_mode =
> PLANE_COLOR_CSC_MODE_YUV2020_TO_RGB2020;
> +             break;
> +     case DRM_COLOROP_FM_RGB709_RGB2020:
> +             csc_mode =
> PLANE_COLOR_CSC_MODE_RGB709_TO_RGB2020;
> +             break;
> +     default:
> +             csc_mode = PLANE_COLOR_CSC_MODE_BYPASS;
> +     }
> +     return csc_mode;
> +}
> +
>  static u32 glk_plane_color_ctl_input_csc(const struct intel_plane_state
> *plane_state)  {
>       struct intel_display *display = to_intel_display(plane_state);
>       const struct drm_framebuffer *fb = plane_state->hw.fb;
>       struct intel_plane *plane = to_intel_plane(plane_state->uapi.plane);
> +     bool color_pipeline = plane_state->uapi.state &&
> +             plane_state->uapi.state->plane_color_pipeline;
>       u32 ctl = 0;
> 
> -     if (!fb->format->is_yuv)
> -             return 0;
> +     if (!color_pipeline) {
> +             if (!fb->format->is_yuv)
> +                     return 0;
> 
> -     if (!icl_is_hdr_plane(display, plane->id)) {
> -             switch (plane_state->hw.color_encoding) {
> -             case DRM_COLOR_YCBCR_BT709:
> -                     ctl |=
> PLANE_COLOR_CSC_MODE_YUV709_TO_RGB709;
> -                     break;
> -             case DRM_COLOR_YCBCR_BT2020:
> -                     ctl |=
> PLANE_COLOR_CSC_MODE_YUV2020_TO_RGB2020;
> -                     break;
> -             default:
> -                     ctl |=
> PLANE_COLOR_CSC_MODE_YUV601_TO_RGB601;
> +             if (!icl_is_hdr_plane(display, plane->id)) {
> +                     switch (plane_state->hw.color_encoding) {
> +                     case DRM_COLOR_YCBCR_BT709:
> +                             ctl |=
> PLANE_COLOR_CSC_MODE_YUV709_TO_RGB709;
> +                             break;
> +                     case DRM_COLOR_YCBCR_BT2020:
> +                             ctl |=
> PLANE_COLOR_CSC_MODE_YUV2020_TO_RGB2020;
> +                             break;
> +                     default:
> +                             ctl |=
> PLANE_COLOR_CSC_MODE_YUV601_TO_RGB601;
> +                     }
> +             } else {
> +                     ctl |= PLANE_COLOR_INPUT_CSC_ENABLE;
>               }
> -     } else {
> -             ctl |= PLANE_COLOR_INPUT_CSC_ENABLE;
> -     }
> 
> -     if (plane_state->hw.color_range ==
> DRM_COLOR_YCBCR_FULL_RANGE)
> -             ctl |= PLANE_COLOR_YUV_RANGE_CORRECTION_DISABLE;
> +             if (plane_state->hw.color_range ==
> DRM_COLOR_YCBCR_FULL_RANGE)
> +                     ctl |=
> PLANE_COLOR_YUV_RANGE_CORRECTION_DISABLE;
> +     } else if (!icl_is_hdr_plane(display, plane->id)) {
> +             if (plane_state->hw.csc_ff_enable)
> +                     ctl |= intel_csc_ff_type_to_csc_mode(plane_state-
> >hw.csc_ff_type);
> +     }
> 
>       return ctl;
>  }
> --
> 2.25.1

Reply via email to