| // SPDX-License-Identifier: GPL-2.0 |
| // SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. |
| |
| use crate::{ |
| driver::Bar0, |
| gpu::{ |
| Architecture, |
| Chipset, // |
| }, |
| }; |
| |
| 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. |
| fn cot_version(&self) -> u16; |
| |
| // TODO: consider moving this into the TLV firmware metadata when ready |
| /// Returns the size reserved at the end of the framebuffer, in bytes. |
| fn fb_end_reserved_size(&self) -> u64; |
| } |
| |
| /// 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 => Some(gh100::GH100_HAL), |
| Architecture::BlackwellGB10x => Some(gb100::GB100_HAL), |
| Architecture::BlackwellGB20x => Some(gb202::GB202_HAL), |
| } |
| } |