[PATCH v14 03/18] bitfield: Add non-constant field_{prep, get}() helpers

Simon Glass sjg at chromium.org
Thu Jul 2 12:53:15 CEST 2026


On 2026-07-02T05:57:27, Mikhail Kshevetskiy
<mikhail.kshevetskiy at iopsys.eu> wrote:
> bitfield: Add non-constant field_{prep, get}() helpers
>
> The existing FIELD_{GET,PREP}() macros are limited to compile-time
> constants.  However, it is very common to prepare or extract bitfield
> elements where the bitfield mask is not a compile-time constant.
>
> To avoid this limitation, the AT91 clock driver and several other
> drivers already have their own non-const field_{prep,get}() macros.
> Make them available for general use by adding them to
> <linux/bitfield.h>, and improve them slightly:
>   1. Avoid evaluating macro parameters more than once,
>   2. Replace "ffs() - 1" by __ffs(),
>   3. Support 64-bit use on 32-bit architectures,
>   4. Wire field_{get,prep}() to FIELD_{GET,PREP}() when mask is
>      actually constant.
>
> This is deliberately not merged into the existing FIELD_{GET,PREP}()
> macros, as people expressed the desire to keep stricter variants for
> increased safety, or for performance critical paths.
>
> Yury: use __mask within new macros.
>
> Signed-off-by: Geert Uytterhoeven <geert+renesas at glider.be>
> Acked-by: Alexandre Belloni <alexandre.belloni at bootlin.com>
> Acked-by: Jonathan Cameron <Jonathan.Cameron at huawei.com>
> Acked-by: Crt Mori <cmo at melexis.com>
> Acked-by: Nuno Sá <nuno.sa at analog.com>
> Acked-by: Richard Genoud <richard.genoud at bootlin.com>
> Reviewed-by: Andy Shevchenko <andriy.shevchenko at intel.com>
> Reviewed-by: Yury Norov (NVIDIA) <yury.norov at gmail.com>
> Signed-off-by: Yury Norov (NVIDIA) <yury.norov at gmail.com>
> Reviewed-by: David Lechner <dlechner at baylibre.com>
>
> include/linux/bitfield.h | 59 ++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 59 insertions(+)

Reviewed-by: Simon Glass <sjg at chromium.org>


More information about the U-Boot mailing list