On 10/20/25 11:55 AM, Joel Fernandes wrote: > To support the usecase where we read a register and write to another > with identical bit layout, add support to convert bitfield to underlying type. > > Another way to do this, is to read individual fields, on the caller > side, and write to the destination fields, but that is both cumbersome > and error-prone as new bits added in hardware may be missed. > > Signed-off-by: Joel Fernandes <[email protected]> > --- > drivers/gpu/nova-core/bitfield.rs | 7 +++++++ > 1 file changed, 7 insertions(+)
Reviewed-by: John Hubbard <[email protected]> thanks, -- John Hubbard > > diff --git a/drivers/gpu/nova-core/bitfield.rs > b/drivers/gpu/nova-core/bitfield.rs > index 0994505393dd..2266abc3f7ab 100644 > --- a/drivers/gpu/nova-core/bitfield.rs > +++ b/drivers/gpu/nova-core/bitfield.rs > @@ -72,6 +72,7 @@ > /// - Field setters: `set_mode()`, `set_state()`, etc. (supports chaining > with builder pattern). > /// Note that the compiler will error out if the size of the setter's arg > exceeds the > /// struct's storage size. > +/// - Conversion from the underlying storage type (e.g., `From<u32>`). > /// - Debug and Default implementations. > /// > /// Note: Field accessors and setters inherit the same visibility as the > struct itself. > @@ -117,6 +118,12 @@ fn from(val: $name) -> $storage { > } > } > > + impl ::core::convert::From<$storage> for $name { > + fn from(val: $storage) -> $name { > + $name(val) > + } > + } > + > bitfield!(@fields_dispatcher $vis $name $storage { $($fields)* }); > }; >
