> -----Original Message-----
> From: Borah, Chaitanya Kumar <[email protected]>
> Sent: 06 May 2026 15:02
> To: Srinivas, Vidya <[email protected]>; 
> [email protected]
> Cc: [email protected]; Shankar, Uma <[email protected]>
> Subject: Re: [PATCH] drm/i915/display: Fix color pipeline state copy for 
> joiner
> secondary planes
> 
> There is already a patch for this. Will appreciate some review.
> 
> https://lore.kernel.org/intel-gfx/20260424054129.2148049-2-
> [email protected]/

Thank you so much Chaitanya. Kindly help merge the patch.
Providing my tested-by.
Tested-by: Vidya Srinivas <[email protected]>

Regards
Vidya

> 
> ==
> Chaitanya
> 
> On 5/6/2026 2:46 PM, Vidya Srinivas wrote:
> > intel_plane_color_copy_uapi_to_hw_state() is meant to copy color
> > pipeline state from the source plane (from_plane_state) to the
> > destination plane (plane_state). However, it was incorrectly iterating
> > the color_pipeline from the destination plane_state instead of the
> > source from_plane_state.
> >
> > In non-joiner configurations this doesn't matter since both point to
> > the same plane. But in bigjoiner mode, the secondary pipe's plane has
> > no color_pipeline set from userspace (only the primary pipe's plane is
> > visible to userspace). This causes the while loop to never execute,
> > leaving the secondary plane's hw.ctm, hw.degamma_lut, and hw.gamma_lut
> > as NULL.
> >
> > As a result, xelpd_load_plane_csc_matrix() skips programming the plane
> > CSC on the secondary joiner pipe (early return due to NULL blob),
> > causing a visible color split between the left and right halves of the
> > display when HDR color pipelines are active.
> >
> > Fix this by reading color_pipeline from from_plane_state (the source/
> > primary plane) so that the HDR CTM and LUT blobs are properly copied
> > to the secondary joiner plane's hw state.
> >
> > Fixes: a78f1b6baf4d ("drm/i915/color: Add framework to program CSC")
> > Signed-off-by: Vidya Srinivas <[email protected]>
> > ---
> >   drivers/gpu/drm/i915/display/intel_plane.c | 2 +-
> >   1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/gpu/drm/i915/display/intel_plane.c
> > b/drivers/gpu/drm/i915/display/intel_plane.c
> > index c181a7d063ec..e403fe4a8a20 100644
> > --- a/drivers/gpu/drm/i915/display/intel_plane.c
> > +++ b/drivers/gpu/drm/i915/display/intel_plane.c
> > @@ -396,7 +396,7 @@ intel_plane_color_copy_uapi_to_hw_state(struct
> intel_plane_state *plane_state,
> >     bool changed = false;
> >     int i = 0;
> >
> > -   iter_colorop = plane_state->uapi.color_pipeline;
> > +   iter_colorop = from_plane_state->uapi.color_pipeline;
> >
> >     while (iter_colorop) {
> >             for_each_new_colorop_in_state(state, colorop,
> new_colorop_state,
> > i) {

Reply via email to