From df6137e263ee6ac3921f87321e784421eb64fb35 Mon Sep 17 00:00:00 2001 From: John Hubbard Date: Fri, 14 Nov 2025 17:09:19 -0800 Subject: 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 Cc: Danilo Krummrich Cc: Timur Tabi Reviewed-by: Joel Fernandes Signed-off-by: John Hubbard Signed-off-by: Alexandre Courbot Message-ID: <20251115010923.1192144-2-jhubbard@nvidia.com> --- drivers/gpu/nova-core/gpu.rs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'drivers/gpu/nova-core') 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 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 { let boot0 = regs::NV_PMC_BOOT_0::read(bar); + Spec::try_from(boot0) + } +} + +impl TryFrom for Spec { + type Error = Error; + + fn try_from(boot0: regs::NV_PMC_BOOT_0) -> Result { Ok(Self { chipset: boot0.chipset()?, - revision: Revision::from_boot0(boot0), + revision: boot0.into(), }) } } -- cgit v1.2.3