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