> -----Original Message----- > From: Borah, Chaitanya Kumar <[email protected]> > Sent: Monday, May 11, 2026 11:02 AM > To: [email protected]; [email protected] > Cc: [email protected]; Shankar, Uma <[email protected]>; > Borah, Chaitanya Kumar <[email protected]>; Samala, Pranay > <[email protected]> > Subject: [PATCH v3 2/4] drm/i915/display: Don’t use atomic state back-pointer > to > derive color pipeline > > Instead of relying on the plane_state->uapi.state back-pointer to reach the > intel_atomic_state inside intel_plane_color_copy_uapi_to_hw_state(), > accept the intel_atomic_state as an argument to make the dependency explicit. > > Update intel_plane_copy_uapi_to_hw_state() and its callers accordingly. > Call sites that do not have an atomic state available (e.g. legacy cursor > update > and initial plane setup) pass NULL. > > In such cases, skip color pipeline programming as there is no corresponding > atomic colorop state to consume. > > v2: > - Rebase
Looks Good to me. Reviewed-by: Uma Shankar <[email protected]> > Suggested-by: Ville Syrjälä <[email protected]> > Assisted-by: GitHub Copilot:Claude Sonnet 4.6 > Signed-off-by: Chaitanya Kumar Borah <[email protected]> > --- > drivers/gpu/drm/i915/display/intel_cursor.c | 2 +- > .../drm/i915/display/intel_initial_plane.c | 2 +- > drivers/gpu/drm/i915/display/intel_plane.c | 22 +++++++++++-------- > drivers/gpu/drm/i915/display/intel_plane.h | 3 ++- > 4 files changed, 17 insertions(+), 12 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_cursor.c > b/drivers/gpu/drm/i915/display/intel_cursor.c > index 18d1014de361..fa934248e3e1 100644 > --- a/drivers/gpu/drm/i915/display/intel_cursor.c > +++ b/drivers/gpu/drm/i915/display/intel_cursor.c > @@ -877,7 +877,7 @@ intel_legacy_cursor_update(struct drm_plane *_plane, > new_plane_state->uapi.crtc_w = crtc_w; > new_plane_state->uapi.crtc_h = crtc_h; > > - intel_plane_copy_uapi_to_hw_state(new_plane_state, new_plane_state, > crtc); > + intel_plane_copy_uapi_to_hw_state(NULL, new_plane_state, > +new_plane_state, crtc); > > ret = intel_plane_atomic_check_with_state(crtc_state, new_crtc_state, > old_plane_state, > new_plane_state); diff --git > a/drivers/gpu/drm/i915/display/intel_initial_plane.c > b/drivers/gpu/drm/i915/display/intel_initial_plane.c > index 034fe199c2a1..061a3d6ebca0 100644 > --- a/drivers/gpu/drm/i915/display/intel_initial_plane.c > +++ b/drivers/gpu/drm/i915/display/intel_initial_plane.c > @@ -170,7 +170,7 @@ intel_find_initial_plane_obj(struct intel_crtc *crtc, > drm_framebuffer_get(fb); > > plane_state->uapi.crtc = &crtc->base; > - intel_plane_copy_uapi_to_hw_state(plane_state, plane_state, crtc); > + intel_plane_copy_uapi_to_hw_state(NULL, plane_state, plane_state, > +crtc); > > atomic_or(plane->frontbuffer_bit, &to_intel_frontbuffer(fb)->bits); > > diff --git a/drivers/gpu/drm/i915/display/intel_plane.c > b/drivers/gpu/drm/i915/display/intel_plane.c > index e403fe4a8a20..a8efe0011b23 100644 > --- a/drivers/gpu/drm/i915/display/intel_plane.c > +++ b/drivers/gpu/drm/i915/display/intel_plane.c > @@ -381,25 +381,27 @@ intel_plane_colorop_replace_blob(struct > intel_plane_state *plane_state, } > > static void > -intel_plane_color_copy_uapi_to_hw_state(struct intel_plane_state > *plane_state, > +intel_plane_color_copy_uapi_to_hw_state(struct intel_atomic_state *state, > + struct intel_plane_state *plane_state, > const struct intel_plane_state > *from_plane_state, > struct intel_crtc *crtc) > { > struct drm_colorop *iter_colorop, *colorop; > struct drm_colorop_state *new_colorop_state; > - struct drm_atomic_commit *state = plane_state->uapi.state; > struct intel_colorop *intel_colorop; > struct drm_property_blob *blob; > - struct intel_atomic_state *intel_atomic_state = > to_intel_atomic_state(state); > - struct intel_crtc_state *new_crtc_state = intel_atomic_state ? > - intel_atomic_get_new_crtc_state(intel_atomic_state, crtc) : > NULL; > + struct intel_crtc_state *new_crtc_state = state ? > + intel_atomic_get_new_crtc_state(state, crtc) : NULL; > bool changed = false; > int i = 0; > > + if (!state) > + return; > + > iter_colorop = from_plane_state->uapi.color_pipeline; > > while (iter_colorop) { > - for_each_new_colorop_in_state(state, colorop, > new_colorop_state, i) { > + for_each_new_colorop_in_state(&state->base, colorop, > +new_colorop_state, i) { > if (new_colorop_state->colorop == iter_colorop) { > blob = new_colorop_state->bypass ? NULL : > new_colorop_state->data; > intel_colorop = to_intel_colorop(colorop); @@ - > 415,7 +417,8 @@ intel_plane_color_copy_uapi_to_hw_state(struct > intel_plane_state *plane_state, > new_crtc_state->plane_color_changed = true; } > > -void intel_plane_copy_uapi_to_hw_state(struct intel_plane_state *plane_state, > +void intel_plane_copy_uapi_to_hw_state(struct intel_atomic_state *state, > + struct intel_plane_state *plane_state, > const struct intel_plane_state > *from_plane_state, > struct intel_crtc *crtc) > { > @@ -444,7 +447,7 @@ void intel_plane_copy_uapi_to_hw_state(struct > intel_plane_state *plane_state, > plane_state->uapi.src = drm_plane_state_src(&from_plane_state->uapi); > plane_state->uapi.dst = drm_plane_state_dest(&from_plane_state->uapi); > > - intel_plane_color_copy_uapi_to_hw_state(plane_state, from_plane_state, > crtc); > + intel_plane_color_copy_uapi_to_hw_state(state, plane_state, > +from_plane_state, crtc); > } > > void intel_plane_copy_hw_state(struct intel_plane_state *plane_state, @@ > -841,7 > +844,8 @@ static int plane_atomic_check(struct intel_atomic_state *state, > old_primary_crtc_plane_state, > new_primary_crtc_plane_state); > > - intel_plane_copy_uapi_to_hw_state(new_plane_state, > + intel_plane_copy_uapi_to_hw_state(state, > + new_plane_state, > new_primary_crtc_plane_state, > crtc); > > diff --git a/drivers/gpu/drm/i915/display/intel_plane.h > b/drivers/gpu/drm/i915/display/intel_plane.h > index 7b5456f56f42..9d627d321f2e 100644 > --- a/drivers/gpu/drm/i915/display/intel_plane.h > +++ b/drivers/gpu/drm/i915/display/intel_plane.h > @@ -35,7 +35,8 @@ unsigned int intel_plane_pixel_rate(const struct > intel_crtc_state *crtc_state, unsigned int intel_plane_data_rate(const struct > intel_crtc_state *crtc_state, > const struct intel_plane_state *plane_state, > int color_plane); > -void intel_plane_copy_uapi_to_hw_state(struct intel_plane_state *plane_state, > +void intel_plane_copy_uapi_to_hw_state(struct intel_atomic_state *state, > + struct intel_plane_state *plane_state, > const struct intel_plane_state > *from_plane_state, > struct intel_crtc *crtc); > void intel_plane_copy_hw_state(struct intel_plane_state *plane_state, > -- > 2.25.1
