diff options
| author | John Hubbard <jhubbard@nvidia.com> | 2025-11-14 17:09:19 -0800 |
|---|---|---|
| committer | Alexandre Courbot <acourbot@nvidia.com> | 2025-11-15 22:57:37 +0900 |
| commit | df6137e263ee6ac3921f87321e784421eb64fb35 (patch) | |
| tree | b9e7a12fa0865d325c0467d57d979b6fd466d272 /drivers/gpu/nova-core | |
| parent | 13f85988d4fa31bda73a9504d71b10f7a14f1856 (diff) | |
gpu: nova-core: prepare Spec and Revision types for boot0/boot42
Allow a both Revision and Spec to be constructed directly from a
NV_PMC_BOOT_0 register.
Also, slightly enhance the comment about Spec, to be more precise.
Cc: Alexandre Courbot <acourbot@nvidia.com>
Cc: Danilo Krummrich <dakr@kernel.org>
Cc: Timur Tabi <ttabi@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-2-jhubbard@nvidia.com>
Diffstat (limited to 'drivers/gpu/nova-core')
| -rw-r--r-- | drivers/gpu/nova-core/gpu.rs | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/drivers/gpu/nova-core/gpu.rs b/drivers/gpu/nova-core/gpu.rs index dfeba9d5d8f6..57c20d1e7274 100644 --- a/drivers/gpu/nova-core/gpu.rs +++ b/drivers/gpu/nova-core/gpu.rs @@ -147,8 +147,8 @@ pub(crate) struct Revision { minor: u8, } -impl Revision { - fn from_boot0(boot0: regs::NV_PMC_BOOT_0) -> Self { +impl From<regs::NV_PMC_BOOT_0> for Revision { + fn from(boot0: regs::NV_PMC_BOOT_0) -> Self { Self { major: boot0.major_revision(), minor: boot0.minor_revision(), @@ -162,10 +162,9 @@ impl fmt::Display for Revision { } } -/// Structure holding the metadata of the GPU. +/// Structure holding a basic description of the GPU: `Chipset` and `Revision`. pub(crate) struct Spec { chipset: Chipset, - /// The revision of the chipset. revision: Revision, } @@ -173,9 +172,17 @@ impl Spec { fn new(bar: &Bar0) -> Result<Spec> { let boot0 = regs::NV_PMC_BOOT_0::read(bar); + Spec::try_from(boot0) + } +} + +impl TryFrom<regs::NV_PMC_BOOT_0> for Spec { + type Error = Error; + + fn try_from(boot0: regs::NV_PMC_BOOT_0) -> Result<Self> { Ok(Self { chipset: boot0.chipset()?, - revision: Revision::from_boot0(boot0), + revision: boot0.into(), }) } } |