summaryrefslogtreecommitdiff
path: root/drivers/gpu
diff options
context:
space:
mode:
authorAlexandre Courbot <acourbot@nvidia.com>2025-07-18 16:26:16 +0900
committerAlexandre Courbot <acourbot@nvidia.com>2025-08-15 12:02:56 +0900
commit6ecd6b73e0845e2a1ba0d4da273c7cc7c21c88db (patch)
tree7a9aebe1c22eaf73a3d0d72c3df98896336eccaf /drivers/gpu
parent7a9cb3dfb07d3e29c0eeebb26b11a34a19a889a4 (diff)
gpu: nova-core: register: improve `Debug` implementation
Now that we have an internal rule to dispatch field information where needed, use it to generate a better `Debug` implementation where the raw hexadecimal value of the register is displayed, as well as the `Debug` values of its individual fields. Reviewed-by: Daniel Almeida <daniel.almeida@collabora.com> Reviewed-by: Lyude Paul <lyude@redhat.com> Link: https://lore.kernel.org/r/20250718-nova-regs-v2-11-7b6a762aa1cd@nvidia.com Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/nova-core/regs/macros.rs25
1 files changed, 15 insertions, 10 deletions
diff --git a/drivers/gpu/nova-core/regs/macros.rs b/drivers/gpu/nova-core/regs/macros.rs
index ff2deca6b1f3..c966e58b775d 100644
--- a/drivers/gpu/nova-core/regs/macros.rs
+++ b/drivers/gpu/nova-core/regs/macros.rs
@@ -122,16 +122,6 @@ macro_rules! register {
#[derive(Clone, Copy, Default)]
pub(crate) struct $name(u32);
- // TODO[REGA]: 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 {
- fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
- f.debug_tuple(stringify!($name))
- .field(&format_args!("0x{0:x}", &self.0))
- .finish()
- }
- }
-
impl ::core::ops::BitOr for $name {
type Output = Self;
@@ -171,6 +161,7 @@ macro_rules! register {
;
)*
});
+ register!(@debug $name { $($field;)* });
};
// Defines all the field getter/methods methods for `$name`.
@@ -316,6 +307,20 @@ macro_rules! register {
);
};
+ // Generates the `Debug` implementation for `$name`.
+ (@debug $name:ident { $($field:ident;)* }) => {
+ impl ::core::fmt::Debug for $name {
+ fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
+ f.debug_struct(stringify!($name))
+ .field("<raw>", &format_args!("{:#x}", &self.0))
+ $(
+ .field(stringify!($field), &self.$field())
+ )*
+ .finish()
+ }
+ }
+ };
+
// Generates the IO accessors for a fixed offset register.
(@io $name:ident @ $offset:expr) => {
#[allow(dead_code)]