Re: [PATCH v9 24/31] gpu: nova-core: Hopper/Blackwell: add FSP Chain of Trust boot
From: John Hubbard
Date: Tue Apr 07 2026 - 23:06:13 EST
On 4/7/26 8:00 PM, Alexandre Courbot wrote:
> On Thu Mar 26, 2026 at 10:38 AM JST, John Hubbard wrote:
>> Add boot_fmc() which builds and sends the Chain of Trust message to FSP,
>> and FmcBootArgs which bundles the DMA-coherent boot parameters that FSP
>> reads at boot time. The FspFirmware struct fields become pub(crate) and
>> fmc_full changes from DmaObject to KVec<u8> for CPU-side signature
>> extraction.
>
> The temporary `KVec` field has been removed, so this commit message
> needs updating too.
>
Will do.
>>
>> Co-developed-by: Alexandre Courbot <acourbot@xxxxxxxxxx>
>> Signed-off-by: Alexandre Courbot <acourbot@xxxxxxxxxx>
>
> Was I involved in the development of this? The code must have evolved
> beyond recognition, you can probably remove this. :)
Yes, long ago. :) OK.
>
> <snip>
>> diff --git a/drivers/gpu/nova-core/gpu.rs b/drivers/gpu/nova-core/gpu.rs
>> index ab378c0297c7..780a4d1169e2 100644
>> --- a/drivers/gpu/nova-core/gpu.rs
>> +++ b/drivers/gpu/nova-core/gpu.rs
>> @@ -138,7 +138,6 @@ pub(crate) const fn needs_fwsec_bootloader(self) -> bool {
>> ///
>> /// Hopper (GH100) uses version 1, Blackwell uses version 2.
>> /// Returns `None` for architectures that do not use FSP.
>> - #[expect(dead_code)]
>> pub(crate) const fn fsp_cot_version(&self) -> Option<FspCotVersion> {
>> match self.arch() {
>> Architecture::Hopper => Some(FspCotVersion::new(1)),
>> diff --git a/drivers/gpu/nova-core/mctp.rs b/drivers/gpu/nova-core/mctp.rs
>> index 9e052d916e79..c23e8ec69636 100644
>> --- a/drivers/gpu/nova-core/mctp.rs
>> +++ b/drivers/gpu/nova-core/mctp.rs
>> @@ -6,8 +6,6 @@
>> //! Device Management) messages between the kernel driver and GPU firmware
>> //! processors such as FSP and GSP.
>>
>> -#![expect(dead_code)]
>> -
>> /// NVDM message type identifiers carried over MCTP.
>> #[derive(Debug, Clone, Copy, PartialEq, Eq)]
>> #[repr(u8)]
>> @@ -101,11 +99,6 @@ pub(crate) fn nvdm_type(self) -> core::result::Result<NvdmType, u8> {
>> NvdmType::try_from(self.raw_nvdm_type())
>> }
>>
>> - /// Extract the NVDM type field as a raw value.
>> - pub(crate) fn nvdm_type_raw(self) -> u32 {
>> - u32::from(self.raw_nvdm_type())
>> - }
>
> This method was introduced a few patches before, and I don't think it is
> ever used - you can probably drop it since the beginning.
>
OK.
thanks,
--
John Hubbard