mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-31 08:15:07 -04:00
drm/i915: Avoid programming color HW blocks for NV12 Y planes
link_nv12_planes() currently copies the full UV plane hw state to the Y plane. This includes the color pipeline blobs (ctm, degamma_lut, gamma_lut, lut_3d) which is incorrect as we don't need to program these HW blocks for Y plane. This is harmless currently as the color pipeline uapi does not support YUV (both packed and planar) formats but that can change in the future. Add a new static helper intel_plane_y_copy_hw_state() that copies only the rendering parameters a Y plane actually needs, leaving all color pipeline blobs unset. Remove the helper intel_plane_copy_hw_state() as there are no users for it. v2: - drop the extra spaces before ='s (Jani) Cc: Jani Nikula <jani.nikula@intel.com> Assisted-by: GitHub-Copilot:Claude-Sonnet-4.6 Signed-off-by: Chaitanya Kumar Borah <chaitanya.kumar.borah@intel.com> Reviewed-by: Uma Shankar <uma.shankar@intel.com> Signed-off-by: Uma Shankar <uma.shankar@intel.com> Link: https://patch.msgid.link/20260601082953.128539-3-chaitanya.kumar.borah@intel.com
This commit is contained in:
committed by
Uma Shankar
parent
9ba383c240
commit
dfd604b259
@@ -450,16 +450,22 @@ void intel_plane_copy_uapi_to_hw_state(struct intel_atomic_state *state,
|
||||
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,
|
||||
const struct intel_plane_state *from_plane_state)
|
||||
static void intel_plane_y_copy_hw_state(struct intel_plane_state *y_plane_state,
|
||||
const struct intel_plane_state *uv_plane_state)
|
||||
{
|
||||
intel_plane_clear_hw_state(plane_state);
|
||||
intel_plane_clear_hw_state(y_plane_state);
|
||||
|
||||
memcpy(&plane_state->hw, &from_plane_state->hw,
|
||||
sizeof(plane_state->hw));
|
||||
y_plane_state->hw.crtc = uv_plane_state->hw.crtc;
|
||||
y_plane_state->hw.fb = uv_plane_state->hw.fb;
|
||||
if (y_plane_state->hw.fb)
|
||||
drm_framebuffer_get(y_plane_state->hw.fb);
|
||||
|
||||
if (plane_state->hw.fb)
|
||||
drm_framebuffer_get(plane_state->hw.fb);
|
||||
y_plane_state->hw.alpha = uv_plane_state->hw.alpha;
|
||||
y_plane_state->hw.pixel_blend_mode = uv_plane_state->hw.pixel_blend_mode;
|
||||
y_plane_state->hw.rotation = uv_plane_state->hw.rotation;
|
||||
y_plane_state->hw.color_encoding = uv_plane_state->hw.color_encoding;
|
||||
y_plane_state->hw.color_range = uv_plane_state->hw.color_range;
|
||||
y_plane_state->hw.scaling_filter = uv_plane_state->hw.scaling_filter;
|
||||
}
|
||||
|
||||
static void unlink_nv12_plane(struct intel_crtc_state *crtc_state,
|
||||
@@ -1665,7 +1671,7 @@ static void link_nv12_planes(struct intel_crtc_state *crtc_state,
|
||||
crtc_state->rel_data_rate[y_plane->id] = crtc_state->rel_data_rate_y[uv_plane->id];
|
||||
|
||||
/* Copy parameters to Y plane */
|
||||
intel_plane_copy_hw_state(y_plane_state, uv_plane_state);
|
||||
intel_plane_y_copy_hw_state(y_plane_state, uv_plane_state);
|
||||
y_plane_state->uapi.src = uv_plane_state->uapi.src;
|
||||
y_plane_state->uapi.dst = uv_plane_state->uapi.dst;
|
||||
|
||||
|
||||
@@ -39,8 +39,6 @@ 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,
|
||||
const struct intel_plane_state *from_plane_state);
|
||||
void intel_plane_async_flip(struct intel_dsb *dsb,
|
||||
struct intel_plane *plane,
|
||||
const struct intel_crtc_state *crtc_state,
|
||||
|
||||
Reference in New Issue
Block a user