diff options
| author | John Hubbard <jhubbard@nvidia.com> | 2025-11-14 17:09:20 -0800 |
|---|---|---|
| committer | Alexandre Courbot <acourbot@nvidia.com> | 2025-11-15 22:57:37 +0900 |
| commit | 4d980333a66341a764a64a29df668aac1cd6ec41 (patch) | |
| tree | 5e6592077b3b2ebef68b6e61984581804da9b02c | |
| parent | df6137e263ee6ac3921f87321e784421eb64fb35 (diff) | |
gpu: nova-core: make Architecture behave as a u8 type
This allows Architecture to be passed into register!() and bitfield!()
macro calls. That in turn requires a default implementation for
Architecture.
This simplifies transforming BOOT0 (and later, BOOT42) register values
into GPU architectures.
Cc: Danilo Krummrich <dakr@kernel.org>
Cc: Timur Tabi <ttabi@nvidia.com>
Suggested-by: Alexandre Courbot <acourbot@nvidia.com>
Reviewed-by: Joel Fernandes <joelagnelf@nvidia.com>
Signed-off-by: John Hubbard <jhubbard@nvidia.com>
Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
Message-ID: <20251115010923.1192144-3-jhubbard@nvidia.com>
| -rw-r--r-- | drivers/gpu/nova-core/gpu.rs | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/drivers/gpu/nova-core/gpu.rs b/drivers/gpu/nova-core/gpu.rs index 57c20d1e7274..88a6d7af9f37 100644 --- a/drivers/gpu/nova-core/gpu.rs +++ b/drivers/gpu/nova-core/gpu.rs @@ -122,8 +122,14 @@ impl fmt::Display for Chipset { } /// Enum representation of the GPU generation. -#[derive(fmt::Debug)] +/// +/// TODO: remove the `Default` trait implementation, and the `#[default]` +/// attribute, once the register!() macro (which creates Architecture items) no +/// longer requires it for read-only fields. +#[derive(fmt::Debug, Default, Copy, Clone)] +#[repr(u8)] pub(crate) enum Architecture { + #[default] Turing = 0x16, Ampere = 0x17, Ada = 0x19, @@ -142,6 +148,13 @@ impl TryFrom<u8> for Architecture { } } +impl From<Architecture> for u8 { + fn from(value: Architecture) -> Self { + // CAST: `Architecture` is `repr(u8)`, so this cast is always lossless. + value as u8 + } +} + pub(crate) struct Revision { major: u8, minor: u8, |