Commit cdfe233e authored by Alexandre Courbot's avatar Alexandre Courbot Committed by Danilo Krummrich
Browse files

gpu: nova-core: expose the offset of each register as a type constant



Although we want to access registers using the provided methods, it is
sometimes needed to use their raw offset, for instance when working with
a register array.

Expose the offset of each register using a type constant to avoid
resorting to hardcoded values.

Reviewed-by: default avatarLyude Paul <lyude@redhat.com>
Signed-off-by: default avatarAlexandre Courbot <acourbot@nvidia.com>
Link: https://lore.kernel.org/r/20250619-nova-frts-v6-8-ecf41ef99252@nvidia.com


Signed-off-by: default avatarDanilo Krummrich <dakr@kernel.org>
parent 8dd1433d
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -78,7 +78,7 @@ macro_rules! register {
            $($fields:tt)*
        }
    ) => {
        register!(@common $name $(, $comment)?);
        register!(@common $name @ $offset $(, $comment)?);
        register!(@field_accessors $name { $($fields)* });
        register!(@io $name @ $offset);
    };
@@ -89,7 +89,7 @@ macro_rules! register {
            $($fields:tt)*
        }
    ) => {
        register!(@common $name $(, $comment)?);
        register!(@common $name @ $offset $(, $comment)?);
        register!(@field_accessors $name { $($fields)* });
        register!(@io$name @ + $offset);
    };
@@ -98,7 +98,7 @@ macro_rules! register {

    // Defines the wrapper `$name` type, as well as its relevant implementations (`Debug`, `BitOr`,
    // and conversion to regular `u32`).
    (@common $name:ident $(, $comment:literal)?) => {
    (@common $name:ident @ $offset:literal $(, $comment:literal)?) => {
        $(
        #[doc=$comment]
        )?
@@ -106,6 +106,11 @@ macro_rules! register {
        #[derive(Clone, Copy, Default)]
        pub(crate) struct $name(u32);

        #[allow(dead_code)]
        impl $name {
            pub(crate) const OFFSET: usize = $offset;
        }

        // TODO: display the raw hex value, then the value of all the fields. This requires
        // matching the fields, which will complexify the syntax considerably...
        impl ::core::fmt::Debug for $name {