[PATCH v5 11/38] gpu: nova-core: Hopper/Blackwell: skip GFW boot waiting
From: John Hubbard
Date: Fri Feb 20 2026 - 21:11:27 EST
Hopper and Blackwell GPUs use FSP-based secure boot and do not require
waiting for GFW_BOOT completion. Skip this step for these architectures,
and in fact for all future architectures, because we have moved on:
there will not be any future GPUs using the older GFW_BOOT system.
Cc: Danilo Krummrich <dakr@xxxxxxxxxx>
Signed-off-by: John Hubbard <jhubbard@xxxxxxxxxx>
---
drivers/gpu/nova-core/gpu.rs | 17 +++++++++++++----
1 file changed, 13 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/nova-core/gpu.rs b/drivers/gpu/nova-core/gpu.rs
index f6af75656861..50bf351b64cc 100644
--- a/drivers/gpu/nova-core/gpu.rs
+++ b/drivers/gpu/nova-core/gpu.rs
@@ -170,6 +170,15 @@ pub(crate) const fn dma_mask(&self) -> DmaMask {
Self::Hopper | Self::Blackwell => DmaMask::new::<52>(),
}
}
+
+ /// Returns whether the GPU uses GFW_BOOT for firmware loading.
+ ///
+ /// Pre-Hopper architectures (Turing, Ampere, Ada) require waiting for GFW_BOOT completion
+ /// before any significant GPU setup. Hopper and later use the FSP Chain of Trust boot path
+ /// instead.
+ pub(crate) const fn needs_gfw_boot(&self) -> bool {
+ matches!(self, Self::Turing | Self::Ampere | Self::Ada)
+ }
}
impl TryFrom<u8> for Architecture {
@@ -315,11 +324,11 @@ pub(crate) fn new<'a>(
let chipset = spec.chipset();
Ok(try_pin_init!(Self {
- // We must wait for GFW_BOOT completion before doing any significant setup
- // on the GPU.
_: {
- gfw::wait_gfw_boot_completion(bar)
- .inspect_err(|_| dev_err!(pdev, "GFW boot did not complete\n"))?;
+ if chipset.arch().needs_gfw_boot() {
+ gfw::wait_gfw_boot_completion(bar)
+ .inspect_err(|_| dev_err!(pdev, "GFW boot did not complete\n"))?;
+ }
},
sysmem_flush: SysmemFlush::register(pdev.as_ref(), bar, chipset)?,
--
2.53.0