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 <joelagnelf@nvidia.com>
> ---
> drivers/gpu/nova-core/bitfield.rs | 7 +++++++
> 1 file changed, 7 insertions(+)
Reviewed-by: John Hubbard <jhubbard@nvidia.com>
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)* });
> };
>