Patch "drm: komeda: Fix an issue related to normalized zpos" has been added to the 5.4-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    drm: komeda: Fix an issue related to normalized zpos

to the 5.4-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     drm-komeda-fix-an-issue-related-to-normalized-zpos.patch
and it can be found in the queue-5.4 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 6090d550b61d0095a9f1386dcb1eaff650220ac7
Author: hongchi.peng <hongchi.peng@xxxxxxxxxxxx>
Date:   Mon Aug 26 10:45:17 2024 +0800

    drm: komeda: Fix an issue related to normalized zpos
    
    [ Upstream commit 258905cb9a6414be5c9ca4aa20ef855f8dc894d4 ]
    
    We use komeda_crtc_normalize_zpos to normalize zpos of affected planes
    to their blending zorder in CU. If there's only one slave plane in
    affected planes and its layer_split property is enabled, order++ for
    its split layer, so that when calculating the normalized_zpos
    of master planes, the split layer of the slave plane is included, but
    the max_slave_zorder does not include the split layer and keep zero
    because there's only one slave plane in affacted planes, although we
    actually use two slave layers in this commit.
    
    In most cases, this bug does not result in a commit failure, but assume
    the following situation:
        slave_layer 0: zpos = 0, layer split enabled, normalized_zpos =
        0;(use slave_layer 2 as its split layer)
        master_layer 0: zpos = 2, layer_split enabled, normalized_zpos =
        2;(use master_layer 2 as its split layer)
        master_layer 1: zpos = 4, normalized_zpos = 4;
        master_layer 3: zpos = 5, normalized_zpos = 5;
        kcrtc_st->max_slave_zorder = 0;
    When we use master_layer 3 as a input of CU in function
    komeda_compiz_set_input and check it with function
    komeda_component_check_input, the parameter idx is equal to
    normailzed_zpos minus max_slave_zorder, the value of idx is 5
    and is euqal to CU's max_active_inputs, so that
    komeda_component_check_input returns a -EINVAL value.
    
    To fix the bug described above, when calculating the max_slave_zorder
    with the layer_split enabled, count the split layer in this calculation
    directly.
    
    Signed-off-by: hongchi.peng <hongchi.peng@xxxxxxxxxxxx>
    Acked-by: Liviu Dudau <liviu.dudau@xxxxxxx>
    Signed-off-by: Liviu Dudau <liviu.dudau@xxxxxxx>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240826024517.3739-1-hongchi.peng@xxxxxxxxxxxx
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
index ae274902ff924..4e9c3184a906c 100644
--- a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
+++ b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
@@ -148,6 +148,7 @@ static int komeda_crtc_normalize_zpos(struct drm_crtc *crtc,
 	struct drm_plane *plane;
 	struct list_head zorder_list;
 	int order = 0, err;
+	u32 slave_zpos = 0;
 
 	DRM_DEBUG_ATOMIC("[CRTC:%d:%s] calculating normalized zpos values\n",
 			 crtc->base.id, crtc->name);
@@ -187,10 +188,13 @@ static int komeda_crtc_normalize_zpos(struct drm_crtc *crtc,
 				 plane_st->zpos, plane_st->normalized_zpos);
 
 		/* calculate max slave zorder */
-		if (has_bit(drm_plane_index(plane), kcrtc->slave_planes))
+		if (has_bit(drm_plane_index(plane), kcrtc->slave_planes)) {
+			slave_zpos = plane_st->normalized_zpos;
+			if (to_kplane_st(plane_st)->layer_split)
+				slave_zpos++;
 			kcrtc_st->max_slave_zorder =
-				max(plane_st->normalized_zpos,
-				    kcrtc_st->max_slave_zorder);
+				max(slave_zpos, kcrtc_st->max_slave_zorder);
+		}
 	}
 
 	crtc_st->zpos_changed = true;




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux