]> git.dujemihanovic.xyz Git - linux.git/commitdiff
drm/armada: Fix off-by-one error in armada_overlay_get_property()
authorGeert Uytterhoeven <geert+renesas@glider.be>
Mon, 17 Jul 2023 13:25:40 +0000 (15:25 +0200)
committerJavier Martinez Canillas <javierm@redhat.com>
Sat, 29 Jul 2023 19:13:51 +0000 (21:13 +0200)
As ffs() returns one more than the index of the first bit set (zero
means no bits set), the color key mode value is shifted one position too
much.

Fix this by using FIELD_GET() instead.

Fixes: c96103b6c49ff9a8 ("drm/armada: move colorkey properties into overlay plane state")
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/a4d779d954a7515ddbbf31cb0f0d8184c0e7c879.1689600265.git.geert+renesas@glider.be
drivers/gpu/drm/armada/armada_overlay.c

index f21eb8fb76d87285584ac93a0619cf8f83251f05..3b9bd8ecda137f6dea671247a59b3b614d0b8e7d 100644 (file)
@@ -4,6 +4,8 @@
  *  Rewritten from the dovefb driver, and Armada510 manuals.
  */
 
+#include <linux/bitfield.h>
+
 #include <drm/armada_drm.h>
 #include <drm/drm_atomic.h>
 #include <drm/drm_atomic_helper.h>
@@ -445,8 +447,8 @@ static int armada_overlay_get_property(struct drm_plane *plane,
                             drm_to_overlay_state(state)->colorkey_ug,
                             drm_to_overlay_state(state)->colorkey_vb, 0);
        } else if (property == priv->colorkey_mode_prop) {
-               *val = (drm_to_overlay_state(state)->colorkey_mode &
-                       CFG_CKMODE_MASK) >> ffs(CFG_CKMODE_MASK);
+               *val = FIELD_GET(CFG_CKMODE_MASK,
+                                drm_to_overlay_state(state)->colorkey_mode);
        } else if (property == priv->brightness_prop) {
                *val = drm_to_overlay_state(state)->brightness + 256;
        } else if (property == priv->contrast_prop) {