Re: [PATCH v11 11/22] gpu: nova-core: Hopper/Blackwell: add FMC firmware image

From: Eliot Courtney

Date: Mon Jun 01 2026 - 04:44:20 EST


On Sat May 30, 2026 at 12:09 PM JST, John Hubbard wrote:
> FSP is the Falcon that runs FMC firmware on Hopper and Blackwell.
> Load the FMC ELF in two forms: the image section that FSP boots from,
> and the full Firmware object for later signature extraction during
> Chain of Trust verification.
>
> Co-developed-by: Alexandre Courbot <acourbot@xxxxxxxxxx>
> Signed-off-by: Alexandre Courbot <acourbot@xxxxxxxxxx>
> Signed-off-by: John Hubbard <jhubbard@xxxxxxxxxx>
> ---
> drivers/gpu/nova-core/firmware.rs | 1 +
> drivers/gpu/nova-core/firmware/fsp.rs | 47 ++++++++++++++++++++++++++
> drivers/gpu/nova-core/gsp/hal/gh100.rs | 5 +++
> 3 files changed, 53 insertions(+)
> create mode 100644 drivers/gpu/nova-core/firmware/fsp.rs
>
> diff --git a/drivers/gpu/nova-core/firmware.rs b/drivers/gpu/nova-core/firmware.rs
> index 866bc9b3571e..6edb50b83a29 100644
> --- a/drivers/gpu/nova-core/firmware.rs
> +++ b/drivers/gpu/nova-core/firmware.rs
> @@ -28,6 +28,7 @@
> };
>
> pub(crate) mod booter;
> +pub(crate) mod fsp;
> pub(crate) mod fwsec;
> pub(crate) mod gsp;
> pub(crate) mod riscv;
> diff --git a/drivers/gpu/nova-core/firmware/fsp.rs b/drivers/gpu/nova-core/firmware/fsp.rs
> new file mode 100644
> index 000000000000..011be1e571c2
> --- /dev/null
> +++ b/drivers/gpu/nova-core/firmware/fsp.rs
> @@ -0,0 +1,47 @@
> +// SPDX-License-Identifier: GPL-2.0
> +// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
> +
> +//! FSP is a hardware unit that runs FMC firmware.
> +
> +use kernel::{
> + device,
> + dma::Coherent,
> + firmware::Firmware,
> + prelude::*, //
> +};
> +
> +use crate::{
> + firmware::elf,
> + gpu::Chipset, //
> +};
> +
> +pub(crate) struct FspFirmware {
> + /// FMC firmware image data (only the "image" ELF section).
> + #[expect(dead_code)]
> + pub(crate) fmc_image: Coherent<[u8]>,
> + /// Full FMC ELF for signature extraction.
> + #[expect(dead_code)]
> + pub(crate) fmc_elf: Firmware,
> +}
> +
> +impl FspFirmware {
> + pub(crate) fn new(
> + dev: &device::Device<device::Bound>,
> + chipset: Chipset,
> + ver: &str,
> + ) -> Result<Self> {
> + let fw = super::request_firmware(dev, chipset, "fmc", ver)?;

Do we need to add this to ModInfoBuilder::make_entry_chipset?