Re: [net-next PATCH 04/10] bitfield.h: add FIELD_WIDTH()

From: Yury Norov

Date: Fri Apr 03 2026 - 12:22:38 EST


On Fri, Apr 03, 2026 at 11:09:30AM -0300, Luiz Angelo Daros de Luca wrote:
> Thanks David and Yuri,
>
> This patch was originally intended to reconstruct a value split across
> multiple registers. Originally:
>
> vlan4k->member =
> FIELD_GET(RTL8365MB_CVLAN_ENTRY_D0_MBR_MASK, data[0]) |
> (FIELD_GET(RTL8365MB_CVLAN_ENTRY_D2_MBR_EXT_MASK, data[2])
> << FIELD_WIDTH(RTL8365MB_CVLAN_ENTRY_D0_MBR_MASK));
>
> However, as Yuri pointed out, I can use FIELD_PREP() to align the bits
> into the final struct member without manual bitops. While less common,
> this pattern is used elsewhere (e.g., drivers/clk/clk-lmk04832.c). The
> updated approach would be:
>
> vlan4k->member =
> FIELD_PREP(RTL8365MB_CVLAN_MBR_LO_MASK,
> FIELD_GET(RTL8365MB_CVLAN_ENTRY_D0_MBR_MASK,
> data[0])) |
> FIELD_PREP(RTL8365MB_CVLAN_MBR_HI_MASK,
>
> FIELD_GET(RTL8365MB_CVLAN_ENTRY_D2_MBR_EXT_MASK, data[2]));
>
> If this use of FIELD_PREP is preferred, I will drop this FIELD_WIDTH
> patch from the series as it would no longer have any users.

Then, for relevant patches:

Suggested-by: Yury Norov <ynorov@xxxxxxxxxx> # for split fields handling