[PATCH 1/4] gpu: nova-core: record the BOOT_42 implementation field in the GPU spec

From: John Hubbard

Date: Thu Sep 17 2026 - 22:13:39 EST


NV_PMC_BOOT_42, the register that identifies the GPU, carries an
architecture field and an implementation field. Open RM keeps the two
fields as it reads them, and the GSP log headers that Open RM writes
name the GPU by both.

Nova-core combined the two fields into one chipset code at probe and
kept only that code, so the implementation number could be recovered
only by undoing the combination.

Record the implementation field in the GPU spec beside the chipset
code.

Assisted-by: LLM
Signed-off-by: John Hubbard <jhubbard@xxxxxxxxxx>
---
drivers/gpu/nova-core/gpu.rs | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/nova-core/gpu.rs b/drivers/gpu/nova-core/gpu.rs
index fd1a74913d7c..cecd8e79430d 100644
--- a/drivers/gpu/nova-core/gpu.rs
+++ b/drivers/gpu/nova-core/gpu.rs
@@ -213,10 +213,15 @@ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
}
}

-/// Structure holding a basic description of the GPU: `Chipset` and `Revision`.
+/// Structure holding a basic description of the GPU: `Chipset`, the implementation field of
+/// `NV_PMC_BOOT_42`, and `Revision`.
#[derive(Clone, Copy)]
pub(crate) struct Spec {
pub(crate) chipset: Chipset,
+ /// Implementation field of `NV_PMC_BOOT_42`, which distinguishes this chipset from the other
+ /// chipsets of its architecture.
+ #[expect(dead_code)]
+ pub(crate) implementation: u8,
revision: Revision,
}

@@ -259,6 +264,7 @@ impl TryFrom<regs::NV_PMC_BOOT_42> for Spec {
fn try_from(boot42: regs::NV_PMC_BOOT_42) -> Result<Self> {
Ok(Self {
chipset: boot42.chipset()?,
+ implementation: boot42.implementation().into(),
revision: boot42.into(),
})
}
--
2.55.0