drm/i915: Copy the plane hw state directly for Y planes
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Tue, 17 Nov 2020 19:47:04 +0000 (11:47 -0800)
committerManasi Navare <manasi.d.navare@intel.com>
Wed, 18 Nov 2020 19:40:15 +0000 (11:40 -0800)
When doing the plane state copy from the UV plane to the Y plane
let's just copy the hw state directly instead of using the original
uapi state. The UV plane has already had its uapi state copied into
its hw state, so this extra detour via the uapi state for the Y plane
is pointless.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Stanislav Lisovskiy <stanislav.lisovskiy@intel.com>
Signed-off-by: Manasi Navare <manasi.d.navare@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20201117194718.11462-2-manasi.d.navare@intel.com
drivers/gpu/drm/i915/display/intel_atomic_plane.c
drivers/gpu/drm/i915/display/intel_atomic_plane.h
drivers/gpu/drm/i915/display/intel_display.c

index 3334ff2536006b19477a3e3c6896540bf9bd1095..f47558efb3c2b89a597f792321e8a785125357ec 100644 (file)
@@ -265,6 +265,18 @@ void intel_plane_copy_uapi_to_hw_state(struct intel_plane_state *plane_state,
        plane_state->hw.scaling_filter = from_plane_state->uapi.scaling_filter;
 }
 
+void intel_plane_copy_hw_state(struct intel_plane_state *plane_state,
+                              const struct intel_plane_state *from_plane_state)
+{
+       intel_plane_clear_hw_state(plane_state);
+
+       memcpy(&plane_state->hw, &from_plane_state->hw,
+              sizeof(plane_state->hw));
+
+       if (plane_state->hw.fb)
+               drm_framebuffer_get(plane_state->hw.fb);
+}
+
 void intel_plane_set_invisible(struct intel_crtc_state *crtc_state,
                               struct intel_plane_state *plane_state)
 {
index 59dd1fbb02eaaa2f313e0a5a6c1824351ac364d2..24a3a148aa623abd257e9107883242c6488bd6e4 100644 (file)
@@ -25,6 +25,8 @@ unsigned int intel_plane_data_rate(const struct intel_crtc_state *crtc_state,
                                   const struct intel_plane_state *plane_state);
 void intel_plane_copy_uapi_to_hw_state(struct intel_plane_state *plane_state,
                                       const struct intel_plane_state *from_plane_state);
+void intel_plane_copy_hw_state(struct intel_plane_state *plane_state,
+                              const struct intel_plane_state *from_plane_state);
 void intel_update_plane(struct intel_plane *plane,
                        const struct intel_crtc_state *crtc_state,
                        const struct intel_plane_state *plane_state);
index bc532711470b83f5f19cb93d99dbf2b141e4c9f4..a1b975ab3bb0ea7e5ab59ac9e1f01efacebe6aee 100644 (file)
@@ -12792,7 +12792,7 @@ static int icl_check_nv12_planes(struct intel_crtc_state *crtc_state)
                memcpy(linked_state->color_plane, plane_state->color_plane,
                       sizeof(linked_state->color_plane));
 
-               intel_plane_copy_uapi_to_hw_state(linked_state, plane_state);
+               intel_plane_copy_hw_state(linked_state, plane_state);
                linked_state->uapi.src = plane_state->uapi.src;
                linked_state->uapi.dst = plane_state->uapi.dst;