Le 30/07/2025 à 10:57, Maxime Ripard a écrit :
Hi,

The tidss driver rolls its own API equivalent to the FIELD_* API already
provided the kernel.

Since it's an ad-hoc implementation, it also is less convenient and
doesn't provide some useful features like being able to share the field
definitions that will come handy in the future.

Thus, this series converts the driver to that API and drops its own
version.

Hi,

I just saw your series after sending mine [2]. I checked, there is only one minor conflict that can be easly fixed.

But when applied on drm-misc/drm-misc-next, your series raises:

In file included from <command-line>:
drivers/gpu/drm/tidss/tidss_dispc.c: In function 'FLD_MOD':
././include/linux/compiler_types.h:568:45: error: call to '__compiletime_assert_589' declared with attribute error: FIELD_PREP: mask is not constant 568 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
      |                                             ^
././include/linux/compiler_types.h:549:25: note: in definition of macro '__compiletime_assert' 549 | prefix ## suffix(); \
      |                         ^~~~~~
././include/linux/compiler_types.h:568:9: note: in expansion of macro '_compiletime_assert' 568 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
      |         ^~~~~~~~~~~~~~~~~~~
./include/linux/build_bug.h:39:37: note: in expansion of macro 'compiletime_assert' 39 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
      |                                     ^~~~~~~~~~~~~~~~~~
./include/linux/bitfield.h:65:17: note: in expansion of macro 'BUILD_BUG_ON_MSG' 65 | BUILD_BUG_ON_MSG(!__builtin_constant_p(_mask), \
      |                 ^~~~~~~~~~~~~~~~
./include/linux/bitfield.h:115:17: note: in expansion of macro '__BF_FIELD_CHECK' 115 | __BF_FIELD_CHECK(_mask, 0ULL, _val, "FIELD_PREP: "); \
      |                 ^~~~~~~~~~~~~~~~
drivers/gpu/drm/tidss/tidss_dispc.c:599:33: note: in expansion of macro 'FIELD_PREP'
  599 |         return (orig & ~mask) | FIELD_PREP(mask, val);
      |                                 ^~~~~~~~~~


This seems to be a limitation of FIELD_PREP [1].
I think the only way to avoid this issue is to use macros and not functions.

[1]:https://elixir.bootlin.com/linux/v6.16/source/include/linux/bitfield.h#L65-L66
[2]:https://lore.kernel.org/all/20250730-fix-edge-handling-v1-0-1bdfb3fe7...@bootlin.com/


Thanks,
Louis Chauvet

Let me know what you think,
Maxime

Signed-off-by: Maxime Ripard <mrip...@kernel.org>
---
Maxime Ripard (14):
       drm/tidss: dispc: Remove unused OVR_REG_GET
       drm/tidss: dispc: Switch to GENMASK instead of FLD_MASK
       drm/tidss: dispc: Switch to FIELD_PREP for FLD_VAL
       drm/tidss: dispc: Get rid of FLD_GET
       drm/tidss: dispc: Get rid of FLD_VAL
       drm/tidss: dispc: Switch FLD_MOD to using a mask
       drm/tidss: dispc: Switch REG_GET to using a mask
       drm/tidss: dispc: Switch REG_FLD_MOD to using a mask
       drm/tidss: dispc: Switch VID_REG_GET to using a mask
       drm/tidss: dispc: Switch VID_REG_FLD_MOD to using a mask
       drm/tidss: dispc: Switch VP_REG_GET to using a mask
       drm/tidss: dispc: Switch VP_REG_FLD_MOD to using a mask
       drm/tidss: dispc: Switch OVR_REG_FLD_MOD to using a mask
       drm/tidss: dispc: Define field masks being used

  drivers/gpu/drm/tidss/tidss_dispc.c      | 249 +++++++++++++++----------------
  drivers/gpu/drm/tidss/tidss_dispc_regs.h |  76 ++++++++++
  2 files changed, 200 insertions(+), 125 deletions(-)
---
base-commit: fbb0210d25fde20027f86a6ca9eee75630b5ac2b
change-id: 20250729-drm-tidss-field-api-382947a92d44

Best regards,

--
Louis Chauvet, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

Reply via email to