mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-23 17:30:02 +00:00
drm/i915/psr: Fix PSR2 handling of multiplanar format
When a plane with a multiplanar format is added to the state by
drm_atomic_add_affected_planes(), only the UV plane is
added, so a intel_atomic_get_new_plane_state() call to get the Y
plane state can return a null pointer.
To fix this, intel_atomic_get_plane_state() should be called and
the return needs to be checked for errors, as it could return a EAGAIN
as other atomic state could be holding the lock for the Y plane.
Other issue with the patch being fixed is that the Y plane is not
being committed to hardware because the corresponded plane bit is not
set in update_planes when UV and Y planes are added to the state by
drm_atomic_add_affected_planes().
Cc: Jouni Högander <jouni.hogander@intel.com>
Cc: Mika Kahola <mika.kahola@intel.com>
Fixes: 3809991ff5
("drm/i915/display: Add initial selective fetch support for biplanar formats")
Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
Reviewed-by: Jouni Högander <jouni.hogander@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20211108213807.39865-1-jose.souza@intel.com
This commit is contained in:
parent
02689a2055
commit
c582ffadbe
1 changed files with 8 additions and 4 deletions
|
@ -1732,13 +1732,17 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
|
|||
* same area for Y plane as well.
|
||||
*/
|
||||
if (linked) {
|
||||
struct intel_plane_state *linked_new_plane_state =
|
||||
intel_atomic_get_new_plane_state(state, linked);
|
||||
struct drm_rect *linked_sel_fetch_area =
|
||||
&linked_new_plane_state->psr2_sel_fetch_area;
|
||||
struct intel_plane_state *linked_new_plane_state;
|
||||
struct drm_rect *linked_sel_fetch_area;
|
||||
|
||||
linked_new_plane_state = intel_atomic_get_plane_state(state, linked);
|
||||
if (IS_ERR(linked_new_plane_state))
|
||||
return PTR_ERR(linked_new_plane_state);
|
||||
|
||||
linked_sel_fetch_area = &linked_new_plane_state->psr2_sel_fetch_area;
|
||||
linked_sel_fetch_area->y1 = sel_fetch_area->y1;
|
||||
linked_sel_fetch_area->y2 = sel_fetch_area->y2;
|
||||
crtc_state->update_planes |= BIT(linked->id);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue