[PATCH v5 00/38] gpu: nova-core: firmware: Hopper/Blackwell support

John Hubbard posted 38 patches 1 month, 3 weeks ago
There is a newer version of this series
drivers/gpu/nova-core/driver.rs          |  32 +-
drivers/gpu/nova-core/falcon.rs          |   1 +
drivers/gpu/nova-core/falcon/fsp.rs      | 222 ++++++++++
drivers/gpu/nova-core/falcon/hal.rs      |  20 +-
drivers/gpu/nova-core/fb.rs              | 123 ++++--
drivers/gpu/nova-core/fb/hal.rs          |  38 +-
drivers/gpu/nova-core/fb/hal/ga102.rs    |   2 +-
drivers/gpu/nova-core/fb/hal/gb100.rs    |  75 ++++
drivers/gpu/nova-core/fb/hal/gb202.rs    |  62 +++
drivers/gpu/nova-core/fb/hal/gh100.rs    |  38 ++
drivers/gpu/nova-core/firmware.rs        | 186 ++++++++
drivers/gpu/nova-core/firmware/booter.rs |  35 +-
drivers/gpu/nova-core/firmware/fsp.rs    |  46 ++
drivers/gpu/nova-core/firmware/gsp.rs    | 140 ++----
drivers/gpu/nova-core/fsp.rs             | 525 +++++++++++++++++++++++
drivers/gpu/nova-core/gpu.rs             | 119 ++++-
drivers/gpu/nova-core/gsp/boot.rs        | 318 ++++++++++----
drivers/gpu/nova-core/gsp/commands.rs    |   8 +-
drivers/gpu/nova-core/gsp/fw.rs          |  95 ++--
drivers/gpu/nova-core/gsp/fw/commands.rs |  32 +-
drivers/gpu/nova-core/mctp.rs            | 105 +++++
drivers/gpu/nova-core/nova_core.rs       |   2 +
drivers/gpu/nova-core/regs.rs            | 103 ++++-
rust/kernel/ptr.rs                       |  27 ++
rust/kernel/sizes.rs                     |  51 +++
scripts/Makefile.build                   |   2 +-
26 files changed, 2098 insertions(+), 309 deletions(-)
create mode 100644 drivers/gpu/nova-core/falcon/fsp.rs
create mode 100644 drivers/gpu/nova-core/fb/hal/gb100.rs
create mode 100644 drivers/gpu/nova-core/fb/hal/gb202.rs
create mode 100644 drivers/gpu/nova-core/fb/hal/gh100.rs
create mode 100644 drivers/gpu/nova-core/firmware/fsp.rs
create mode 100644 drivers/gpu/nova-core/fsp.rs
create mode 100644 drivers/gpu/nova-core/mctp.rs
[PATCH v5 00/38] gpu: nova-core: firmware: Hopper/Blackwell support
Posted by John Hubbard 1 month, 3 weeks ago
Hi,

This is based on today's linux.git. A git branch with this (plus a fix
for a CLIPPY warning on a core Rust for Linux issue which I suspect
others have already found and fixed) is here:

    https://github.com/johnhubbard/linux/tree/nova-core-blackwell-v5

This is quite a large overhaul, multiple passes to fix up a lot of
issues found during review, and then I found more while doing the fixes.

Patch 1 is going to be merged separately, but is included here in order
to allow people to apply the series.

Patch 2 is going to come from Gary Guo, not here, but is included for
the same reason.

The last two patches, 37 and 38, do not need to be part of this series,
but are best applied *after* the series, in order to catch all the
cases.

There are a also a few rust/ patches that might need/want to get merged
separately.

It's been tested on Ampere and Blackwell, one each:

    NovaCore 0000:e1:00.0: GPU name: NVIDIA RTX A4000
    NovaCore 0000:01:00.0: GPU name: NVIDIA RTX PRO 6000 Blackwell Max-Q
    Workstation Edition

Changes in v5 (in highly condensed and summarized form):

* Rebased onto linux.git master.

* Split MCTP protocol into its own module and file.

* Many Rust-based improvements: more use of types, especially. Also
  used Result and Option more.

* Lots of cleanup of comments and print output and error handling.

* Added const_align_up() to rust/ and used it in nova-core. This
  required enabling a Rust feature: inline_const, as recommended by
  Miguel Ojeda.

* Refactoring various things, such as Gpu::new() to own Spec creation,
  and several more such things.

* Fixed three Delta::ZERO busy-polls (patches 21, 24, 31) to use
  non-zero sleep intervals (after just realizing that it was a bad
  choice to have zero in there).

* Reduced GH100/GB100 HAL duplication. Made FSP_PKEY_SIZE/FSP_SIG_SIZE
  consistent across patches. Replaced fragile architecture checks with
  chipset.arch(). Renamed LIBOS_BLACKWELL.

* Narrowed the scope of some of the #![expect(dead_code)] cases,
  although that really only matters within the series, not once it is
  fully applied.

John Hubbard (38):
  gpu: nova-core: fix aux device registration for multi-GPU systems
  gpu: nova-core: pass pdev directly to dev_* logging macros
  gpu: nova-core: print FB sizes, along with ranges
  gpu: nova-core: add FbRange.len() and use it in boot.rs
  gpu: nova-core: Hopper/Blackwell: basic GPU identification
  gpu: nova-core: factor .fwsignature* selection into a new
    find_gsp_sigs_section()
  gpu: nova-core: use GPU Architecture to simplify HAL selections
  gpu: nova-core: apply the one "use" item per line policy to
    commands.rs
  gpu: nova-core: move GPU init and DMA mask setup into Gpu::new()
  gpu: nova-core: set DMA mask width based on GPU architecture
  gpu: nova-core: Hopper/Blackwell: skip GFW boot waiting
  gpu: nova-core: move firmware image parsing code to firmware.rs
  gpu: nova-core: factor out an elf_str() function
  gpu: nova-core: don't assume 64-bit firmware images
  gpu: nova-core: add support for 32-bit firmware images
  gpu: nova-core: add auto-detection of 32-bit, 64-bit firmware images
  gpu: nova-core: Hopper/Blackwell: add FMC firmware image, in support
    of FSP
  gpu: nova-core: Hopper/Blackwell: add FSP falcon engine stub
  gpu: nova-core: Hopper/Blackwell: add FSP falcon EMEM operations
  gpu: nova-core: Hopper/Blackwell: add FSP message infrastructure
  rust: ptr: add const_align_up() and enable inline_const feature
  gpu: nova-core: Hopper/Blackwell: calculate reserved FB heap size
  gpu: nova-core: add MCTP/NVDM protocol types for firmware
    communication
  gpu: nova-core: Hopper/Blackwell: add FSP secure boot completion
    waiting
  gpu: nova-core: Hopper/Blackwell: add FSP message structures
  gpu: nova-core: Hopper/Blackwell: add FMC signature extraction
  gpu: nova-core: Hopper/Blackwell: add FSP send/receive messaging
  gpu: nova-core: Hopper/Blackwell: add FspCotVersion type
  gpu: nova-core: Hopper/Blackwell: larger non-WPR heap
  gpu: nova-core: Hopper/Blackwell: add FSP Chain of Trust boot
  gpu: nova-core: Blackwell: use correct sysmem flush registers
  gpu: nova-core: Hopper/Blackwell: larger WPR2 (GSP) heap
  gpu: nova-core: refactor SEC2 booter loading into
    BooterFirmware::run()
  gpu: nova-core: Hopper/Blackwell: add GSP lockdown release polling
  gpu: nova-core: Hopper/Blackwell: new location for PCI config mirror
  gpu: nova-core: Hopper/Blackwell: integrate FSP boot path into boot()
  rust: sizes: add u64 variants of SZ_* constants
  gpu: nova-core: use SZ_*_U64 constants from kernel::sizes

 drivers/gpu/nova-core/driver.rs          |  32 +-
 drivers/gpu/nova-core/falcon.rs          |   1 +
 drivers/gpu/nova-core/falcon/fsp.rs      | 222 ++++++++++
 drivers/gpu/nova-core/falcon/hal.rs      |  20 +-
 drivers/gpu/nova-core/fb.rs              | 123 ++++--
 drivers/gpu/nova-core/fb/hal.rs          |  38 +-
 drivers/gpu/nova-core/fb/hal/ga102.rs    |   2 +-
 drivers/gpu/nova-core/fb/hal/gb100.rs    |  75 ++++
 drivers/gpu/nova-core/fb/hal/gb202.rs    |  62 +++
 drivers/gpu/nova-core/fb/hal/gh100.rs    |  38 ++
 drivers/gpu/nova-core/firmware.rs        | 186 ++++++++
 drivers/gpu/nova-core/firmware/booter.rs |  35 +-
 drivers/gpu/nova-core/firmware/fsp.rs    |  46 ++
 drivers/gpu/nova-core/firmware/gsp.rs    | 140 ++----
 drivers/gpu/nova-core/fsp.rs             | 525 +++++++++++++++++++++++
 drivers/gpu/nova-core/gpu.rs             | 119 ++++-
 drivers/gpu/nova-core/gsp/boot.rs        | 318 ++++++++++----
 drivers/gpu/nova-core/gsp/commands.rs    |   8 +-
 drivers/gpu/nova-core/gsp/fw.rs          |  95 ++--
 drivers/gpu/nova-core/gsp/fw/commands.rs |  32 +-
 drivers/gpu/nova-core/mctp.rs            | 105 +++++
 drivers/gpu/nova-core/nova_core.rs       |   2 +
 drivers/gpu/nova-core/regs.rs            | 103 ++++-
 rust/kernel/ptr.rs                       |  27 ++
 rust/kernel/sizes.rs                     |  51 +++
 scripts/Makefile.build                   |   2 +-
 26 files changed, 2098 insertions(+), 309 deletions(-)
 create mode 100644 drivers/gpu/nova-core/falcon/fsp.rs
 create mode 100644 drivers/gpu/nova-core/fb/hal/gb100.rs
 create mode 100644 drivers/gpu/nova-core/fb/hal/gb202.rs
 create mode 100644 drivers/gpu/nova-core/fb/hal/gh100.rs
 create mode 100644 drivers/gpu/nova-core/firmware/fsp.rs
 create mode 100644 drivers/gpu/nova-core/fsp.rs
 create mode 100644 drivers/gpu/nova-core/mctp.rs


base-commit: a95f71ad3e2e224277508e006580c333d0a5fe36
prerequisite-patch-id: 1ec0faa352dab8fa7c0f209474b75cd21931340d
-- 
2.53.0