Message ID | a4d779d954a7515ddbbf31cb0f0d8184c0e7c879.1689600265.git.geert+renesas@glider.be (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2,resend,2] drm/armada: Fix off-by-one error in armada_overlay_get_property() | expand |
Geert Uytterhoeven <geert+renesas@glider.be> writes: > 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> > --- > Compile-tested only. > > v2: > - Add Reviewed-by. > --- Pushed to drm-misc (drm-misc-next). Thanks!
diff --git a/drivers/gpu/drm/armada/armada_overlay.c b/drivers/gpu/drm/armada/armada_overlay.c index f21eb8fb76d87285..3b9bd8ecda137f6d 100644 --- a/drivers/gpu/drm/armada/armada_overlay.c +++ b/drivers/gpu/drm/armada/armada_overlay.c @@ -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) {