drm/vc4: Convert register accessors to FIELD_*
authorMaxime Ripard <maxime@cerno.tech>
Fri, 3 Jul 2020 13:57:13 +0000 (15:57 +0200)
committerMaxime Ripard <maxime@cerno.tech>
Tue, 7 Jul 2020 07:56:31 +0000 (09:56 +0200)
The VC4_SET_FIELD and VC4_GET_FIELD are reimplementing most of the logic
already defined in FIELD_SET and FIELD_GET. Let's convert the vc4 macros to
use the FIELD_* macros.

Signed-off-by: Maxime Ripard <maxime@cerno.tech>
Reviewed-by: Eric Anholt <eric@anholt.net>
Link: https://patchwork.freedesktop.org/patch/msgid/20200703135713.985810-1-maxime@cerno.tech
drivers/gpu/drm/vc4/vc4_regs.h

index b5a6b4cdd3328d39808df547b923696baa98511d..324462cc9cd416191ce16a911aa390e21ec40ea3 100644 (file)
@@ -6,19 +6,18 @@
 #ifndef VC4_REGS_H
 #define VC4_REGS_H
 
+#include <linux/bitfield.h>
 #include <linux/bitops.h>
 
 #define VC4_MASK(high, low) ((u32)GENMASK(high, low))
 /* Using the GNU statement expression extension */
 #define VC4_SET_FIELD(value, field)                                    \
        ({                                                              \
-               uint32_t fieldval = (value) << field##_SHIFT;           \
-               WARN_ON((fieldval & ~field##_MASK) != 0);               \
-               fieldval & field##_MASK;                                \
+               WARN_ON(!FIELD_FIT(field##_MASK, value));               \
+               FIELD_PREP(field##_MASK, value);                        \
         })
 
-#define VC4_GET_FIELD(word, field) (((word) & field##_MASK) >>         \
-                                   field##_SHIFT)
+#define VC4_GET_FIELD(word, field) FIELD_GET(field##_MASK, word)
 
 #define V3D_IDENT0   0x00000
 # define V3D_EXPECTED_IDENT0 \