mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 09:36:22 +02:00
gpu: nova-core: Hopper/Blackwell: select FSP Chain of Trust version
The FSP Chain of Trust handshake is versioned: Hopper speaks version 1 and Blackwell speaks version 2. Provide the version through the FSP HAL so the boot message carries the value FSP expects, and so chipsets that do not use FSP need not express a version at all. Signed-off-by: John Hubbard <jhubbard@nvidia.com> Reviewed-by: Eliot Courtney <ecourtney@nvidia.com> Link: https://patch.msgid.link/20260603-b4-blackwell-v13-5-d9f3a06939e0@nvidia.com Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
This commit is contained in:
parent
e9e2a24d94
commit
a355d8142f
|
|
@ -9,19 +9,25 @@
|
|||
},
|
||||
};
|
||||
|
||||
mod gb100;
|
||||
mod gb202;
|
||||
mod gh100;
|
||||
|
||||
pub(super) trait FspHal {
|
||||
/// Returns the secure boot status from the architecture-specific `NV_THERM_I2CS_SCRATCH` register.
|
||||
fn fsp_boot_status(&self, bar: &Bar0) -> u32;
|
||||
|
||||
/// Returns the FSP Chain of Trust protocol version this chipset advertises.
|
||||
#[expect(dead_code)]
|
||||
fn cot_version(&self) -> u16;
|
||||
}
|
||||
|
||||
/// Returns the FSP HAL, or `None` if the architecture doesn't support FSP.
|
||||
pub(super) fn fsp_hal(chipset: Chipset) -> Option<&'static dyn FspHal> {
|
||||
match chipset.arch() {
|
||||
Architecture::Turing | Architecture::Ampere | Architecture::Ada => None,
|
||||
Architecture::Hopper | Architecture::BlackwellGB10x => Some(gh100::GH100_HAL),
|
||||
Architecture::Hopper => Some(gh100::GH100_HAL),
|
||||
Architecture::BlackwellGB10x => Some(gb100::GB100_HAL),
|
||||
Architecture::BlackwellGB20x => Some(gb202::GB202_HAL),
|
||||
}
|
||||
}
|
||||
|
|
|
|||
23
drivers/gpu/nova-core/fsp/hal/gb100.rs
Normal file
23
drivers/gpu/nova-core/fsp/hal/gb100.rs
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
// SPDX-License-Identifier: GPL-2.0
|
||||
// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
||||
|
||||
use crate::{
|
||||
driver::Bar0,
|
||||
fsp::hal::FspHal, //
|
||||
};
|
||||
|
||||
struct Gb100;
|
||||
|
||||
impl FspHal for Gb100 {
|
||||
fn fsp_boot_status(&self, bar: &Bar0) -> u32 {
|
||||
// GB10x shares Hopper's FSP secure boot status register.
|
||||
super::gh100::fsp_boot_status_gh100(bar)
|
||||
}
|
||||
|
||||
fn cot_version(&self) -> u16 {
|
||||
2
|
||||
}
|
||||
}
|
||||
|
||||
const GB100: Gb100 = Gb100;
|
||||
pub(super) const GB100_HAL: &dyn FspHal = &GB100;
|
||||
|
|
@ -17,6 +17,10 @@ fn fsp_boot_status(&self, bar: &Bar0) -> u32 {
|
|||
.fsp_boot_complete()
|
||||
.into()
|
||||
}
|
||||
|
||||
fn cot_version(&self) -> u16 {
|
||||
2
|
||||
}
|
||||
}
|
||||
|
||||
const GB202: Gb202 = Gb202;
|
||||
|
|
|
|||
|
|
@ -11,11 +11,20 @@
|
|||
|
||||
struct Gh100;
|
||||
|
||||
/// Reads the FSP secure boot status from the Hopper/GB10x thermal scratch register.
|
||||
pub(super) fn fsp_boot_status_gh100(bar: &Bar0) -> u32 {
|
||||
bar.read(regs::gh100::NV_THERM_I2CS_SCRATCH_FSP_BOOT_COMPLETE)
|
||||
.fsp_boot_complete()
|
||||
.into()
|
||||
}
|
||||
|
||||
impl FspHal for Gh100 {
|
||||
fn fsp_boot_status(&self, bar: &Bar0) -> u32 {
|
||||
bar.read(regs::gh100::NV_THERM_I2CS_SCRATCH_FSP_BOOT_COMPLETE)
|
||||
.fsp_boot_complete()
|
||||
.into()
|
||||
fsp_boot_status_gh100(bar)
|
||||
}
|
||||
|
||||
fn cot_version(&self) -> u16 {
|
||||
1
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user