Hi Dave and Sima,

Please pull these DRM Rust changes.

The highlights are a GPUVM immediate mode abstraction and DRM device specific
DeviceContext type state on the DRM side; Hopper/Blackwell enablement, proper
driver unload, GA100 support, and VBIOS hardening on the nova-core side; and
typed register definitions for Tyr.

There is one external dependency: a shared signed tag from the driver-core tree
for Higher-Ranked Lifetime Types (HRT). Nova depends on HRT for its device
resource handling, and Tyr also adopts it in this cycle.

(I plan to send an early driver-core PR to Linus for this cycle.)

- Danilo

The following changes since commit bed29492d413349e5b13f21936655064cdb63c91:

  Merge v7.1-rc5 into drm-next (2026-05-28 09:58:36 +0200)

are available in the Git repository at:

  https://gitlab.freedesktop.org/drm/rust/kernel.git 
tags/drm-rust-next-2026-06-04

for you to fetch changes up to 99676aed1fec109d62822e21a06760eb098dc5f4:

  gpu: nova-core: move lifetime to `Bar0` (2026-06-03 22:10:51 +0200)

----------------------------------------------------------------
DRM Rust changes for v7.2-rc1

- Driver Core (shared via signed tag dd-lifetimes-7.2-rc1):

  - Introduce Higher-Ranked Lifetime Types (HRT) for Rust device
    drivers, allowing driver structs to hold device resources like
    pci::Bar and IoMem directly with a lifetime tied to the binding
    scope, removing the need for Devres indirection and ARef<Device>.

  - Replace drvdata() with scoped registration data on the auxiliary
    bus, using the new ForLt trait to thread lifetimes through
    registrations. Remove drvdata() and driver_type.

- DRM:

  - Add GPUVM immediate mode abstraction for Rust GPU drivers:
    - In immediate mode, GPU virtual address space state is updated
      during job execution (in the DMA fence signalling critical path),
      keeping the GPUVM and the GPU's address space always in sync.

    - Provide GpuVm, GpuVa, and GpuVmBo types for managing address
      spaces, virtual mappings, and GEM object backing respectively.

    - Provide split-merge map/unmap operations that handle partial
      overlaps with existing mappings.

    - drm_exec integration for dma_resv locking and GEM object
      validation based on the external/evicted object lists are not
      yet covered and planned as follow-up work.

  - Introduce DeviceContext type state for drm::Device, allowing
    drivers to restrict operations to contexts where the device is
    guaranteed to be registered (or not yet registered) with userspace.

  - Add FEAT_RENDER flag to the Driver trait for render node support.

- Nova:

  - Hopper/Blackwell enablement:
    - Add GPU identification and architecture-based HAL selection for
      Hopper (GH100) and Blackwell (GB100, GB202).

    - Implement the FSP (Foundation Security Processor) boot path used by
      Hopper and Blackwell, including FSP falcon engine support, EMEM
      operations, MCTP/NVDM message infrastructure, and FSP Chain of
      Trust boot with GSP lockdown release.

    - Add support for 32-bit firmware images and auto-detection of
      firmware image format.

    - Add architecture-specific framebuffer, sysmem flush, PCI config
      mirror, DMA mask, and WPR/non-WPR heap sizing.

  - GSP boot and unload:
    - Refactor the GSP boot process into a chipset-specific HAL,
      keeping the SEC2 and FSP boot paths separated cleanly.

    - Implement proper driver unload: send UNLOADING_GUEST_DRIVER
      command, run Booter Unloader and FWSEC-SB upon unbinding, and run
      the unload bundle on Gsp::boot() failure. This removes the need
      for a manual GPU reset between driver unbind and re-probe.

  - GA100 support:
    - Add support for the GA100 GPU, including IFR header detection and
      skipping, correct fwsignature selection, conditional FRTS boot,
      and documentation of the IFR header layout.

  - VBIOS hardening and refactoring:
    - Harden VBIOS parsing with checked arithmetic, bounds-checked
      accesses, and FromBytes-based structure reads throughout the FWSEC
      and Falcon data paths. Simplify the overall VBIOS module
      structure.

  - HRT adoption:
    - Use lifetime-parameterized pci::Bar directly, replacing the
      Arc<Devres<Bar0>> indirection. Replace ARef<Device> with &'bound
      Device in SysmemFlush and the GSP sequencer. Separate the driver
      type from driver data.

  - Misc:
    - Rename module names to kebab-case (nova-drm, nova-core).

    - Require little-endian in Kconfig, making the existing assumption
      explicit.

- Tyr:

  - Define comprehensive typed register blocks for GPU_CONTROL,
    JOB_CONTROL, MMU_CONTROL (including per-address-space registers),
    and DOORBELL_BLOCK using the kernel register!() macro. This replaces
    manual bit manipulation with typed register and field accessors.

  - Add shmem-backed GEM objects and set DMA mask based on GPU physical
    address width.

  - Adopt HRT: separate driver type from driver data, and use IoMem
    directly instead of Devres for register access during probe.

  - Move clock cleanup into a Drop implementation.

----------------------------------------------------------------
Alexandre Courbot (8):
      gpu: nova-core: remove unneeded get_gsp_info proxy function
      gpu: nova-core: do not import firmware commands into GSP command module
      gpu: nova-core: gsp: shuffle boot code a bit to keep chipset-specific 
parts close
      gpu: nova-core: gsp: move chipset-specific parts of the boot process into 
a HAL
      gpu: nova-core: send UNLOADING_GUEST_DRIVER GSP command upon unloading
      gpu: nova-core: run Booter Unloader and FWSEC-SB upon unbinding
      gpu: nova-core: gsp: run the unload bundle if Gsp::boot() fails
      gpu: nova-core: gsp: enable FSP boot path

Alice Ryhl (6):
      drm/gpuvm: take refcount on DRM device
      rust: gpuvm: add GpuVm::obtain()
      rust: gpuvm: add GpuVa struct
      rust: gpuvm: add GpuVmCore::sm_unmap()
      rust: gpuvm: add GpuVmCore::sm_map()
      drm/gpuvm: rust: add RUST_DRM_GPUVM option to Kconfig

Alvin Sun (1):
      drm/tyr: use shmem GEM object type in TyrDrmDriver

Asahi Lina (1):
      rust: drm: add base GPUVM immediate mode abstraction

Beata Michalska (1):
      drm/tyr: set DMA mask using GPU physical address

Boris Brezillon (1):
      drm/tyr: rename TyrObject to BoData

Cheng-Yang Chou (2):
      gpu: nova, nova-core: Rename to kebab-case
      gpu: nova: Use module names consistently

Daniel Almeida (1):
      drm/tyr: Use register! macro for GPU_CONTROL

Danilo Krummrich (33):
      rust: alloc: add Box::zeroed()
      rust: auxiliary: add registration data to auxiliary devices
      rust: driver core: remove drvdata() and driver_type
      rust: pci: use 'static lifetime for PCI BAR resource names
      rust: driver: decouple driver private data from driver type
      rust: driver core: drop drvdata before devres release
      rust: pci: implement Sync for Device<Bound>
      rust: platform: implement Sync for Device<Bound>
      rust: auxiliary: implement Sync for Device<Bound>
      rust: usb: implement Sync for Device<Bound>
      rust: device: implement Sync for Device<Bound>
      rust: device: make Core and CoreInternal lifetime-parameterized
      rust: pci: make Driver trait lifetime-parameterized
      rust: platform: make Driver trait lifetime-parameterized
      rust: auxiliary: make Driver trait lifetime-parameterized
      rust: usb: make Driver trait lifetime-parameterized
      rust: i2c: make Driver trait lifetime-parameterized
      rust: driver: update module documentation for GAT-based Data type
      rust: pci: make Bar lifetime-parameterized
      rust: io: make IoMem and ExclusiveIoMem lifetime-parameterized
      samples: rust: rust_driver_pci: use HRT lifetime for Bar
      gpu: nova-core: separate driver type from driver data
      rust: auxiliary: generalize Registration over ForLt
      samples: rust: rust_driver_auxiliary: showcase lifetime-bound 
registration data
      Merge remote-tracking branch 'drm/drm-next' into drm-rust-next
      Merge tag 'dd-lifetimes-7.2-rc1' of 
git://git.kernel.org/pub/scm/linux/kernel/git/driver-core/driver-core into 
drm-rust-next
      gpu: nova-core: use lifetime for Bar
      gpu: nova-core: unregister sysmem flush page from Drop
      gpu: nova-core: replace ARef<Device> with &'bound Device in SysmemFlush
      gpu: nova-core: gsp: replace ARef<Device> with &'a Device in sequencer
      gpu: nova: separate driver type from driver data
      drm/tyr: separate driver type from driver data
      drm/tyr: use IoMem directly instead of Devres

Deborah Brouwer (7):
      drm/tyr: Print GPU_ID without filtering
      drm/tyr: Use register! macro for JOB_CONTROL
      drm/tyr: Use register! macro for MMU_CONTROL
      drm/tyr: Remove custom register struct
      drm/tyr: Add DOORBELL_BLOCK registers
      drm/tyr: move clock cleanup into Clocks Drop impl
      drm/tyr: add shmem backing for GEM objects

Eliot Courtney (25):
      gpu: nova-core: simplify and_then with condition to filter
      gpu: nova: require little endian
      gpu: nova-core: vbios: stop scanning at BIOS_MAX_SCAN_LEN
      gpu: nova-core: vbios: use checked arithmetic for bios image range end
      gpu: nova-core: vbios: avoid reading too far in read_more_at_offset
      gpu: nova-core: vbios: read BitToken using FromBytes
      gpu: nova-core: vbios: use checked ops and accesses in 
`FwSecBiosImage::ucode`
      gpu: nova-core: vbios: use checked access in `FwSecBiosImage::header`
      gpu: nova-core: vbios: use checked accesses in `setup_falcon_data`
      gpu: nova-core: vbios: drop unused falcon_data_offset from 
FwSecBiosBuilder
      gpu: nova-core: vbios: keep PmuLookupTable local in setup_falcon_data
      gpu: nova-core: vbios: compute FWSEC-relative Falcon data offset
      gpu: nova-core: vbios: simplify setup_falcon_data
      gpu: nova-core: vbios: read PMU lookup entries using FromBytes
      gpu: nova-core: vbios: store PMU lookup entries in a KVVec
      gpu: nova-core: vbios: construct `FwSecBiosImage` directly from BIOS 
images
      gpu: nova-core: vbios: use the first PCI-AT image
      gpu: nova-core: vbios: use single logical block for the FWSEC section
      gpu: nova-core: vbios: use let-else in Vbios::new
      gpu: nova-core: vbios: remove unnecessary fields in PciRomHeader
      gpu: nova-core: vbios: drop unused image wrappers
      gpu: nova-core: vbios: drop redundant TryFrom import
      gpu: nova-core: vbios: move constants and functions to be associated
      gpu: nova-core: vbios: remove unused rom_header field
      gpu: nova-core: add non-sec2 unload path

Gary Guo (4):
      rust: alloc: remove `'static` bound on `ForeignOwnable`
      rust: driver: move 'static bounds to constructor
      rust: types: add `ForLt` trait for higher-ranked lifetime support
      gpu: nova-core: move lifetime to `Bar0`

John Hubbard (29):
      gpu: nova-core: use SizeConstants trait for u64 size constants
      gpu: nova-core: make WPR heap sizing fallible
      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: Hopper/Blackwell: basic GPU identification
      gpu: nova-core: add Copy/Clone to Spec and Revision
      gpu: nova-core: move GFW boot wait into a GPU HAL
      gpu: nova-core: Hopper/Blackwell: skip GFW boot waiting
      gpu: nova-core: refactor SEC2 booter loading into BooterFirmware::run()
      gpu: nova-core: set DMA mask width based on GPU architecture
      gpu: nova-core: Hopper/Blackwell: new location for PCI config mirror
      gpu: nova-core: Blackwell: compute PMU-reserved framebuffer size
      gpu: nova-core: Hopper/Blackwell: larger non-WPR heap
      gpu: nova-core: Hopper/Blackwell: larger WPR2 (GSP) heap
      gpu: nova-core: Blackwell: use correct sysmem flush registers
      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 FSP falcon engine stub
      gpu: nova-core: Hopper/Blackwell: add FMC firmware image
      gpu: nova-core: Hopper/Blackwell: add FSP secure boot completion waiting
      gpu: nova-core: Hopper/Blackwell: add FMC signature extraction
      gpu: nova-core: Hopper/Blackwell: add FSP falcon EMEM operations
      gpu: nova-core: Hopper/Blackwell: add FSP message infrastructure
      gpu: nova-core: add MCTP/NVDM protocol types for firmware communication
      gpu: nova-core: Hopper/Blackwell: add FSP send/receive messaging
      gpu: nova-core: Hopper/Blackwell: select FSP Chain of Trust version
      gpu: nova-core: Hopper/Blackwell: add FSP Chain of Trust boot
      gpu: nova-core: Hopper/Blackwell: add GSP lockdown release polling

Laura Nao (1):
      rust: drm: add FEAT_RENDER flag for render node support

Lyude Paul (5):
      rust: drm: gem: s/device::Device/Device/ for shmem.rs
      drm/gem/shmem: Introduce __drm_gem_shmem_free_sgt_locked()
      rust/drm: Introduce DeviceContext
      rust/drm/gem: Add DriverAllocImpl type alias
      rust/drm/gem: Use DeviceContext with GEM objects

Timur Tabi (8):
      gpu: nova-core: program_brom cannot fail
      Documentation: gpu: nova: document the IFR header layout
      gpu: nova-core: use correct fwsignature for GA100
      gpu: nova-core: do not consider 0xBB77 as a valid PCI ROM header signature
      gpu: nova-core: only boot FRTS if its region is allocated
      gpu: nova-core: add FbHal::frts_size() for GA100 support
      gpu: nova-core: skip the IFR header if present
      gpu: nova-core: enable GA100

 Documentation/gpu/nova/core/vbios.rst              |   65 +++-
 MAINTAINERS                                        |    2 +
 drivers/base/base.h                                |   16 -
 drivers/base/dd.c                                  |    2 +-
 drivers/cpufreq/rcpufreq_dt.rs                     |    9 +-
 drivers/gpu/drm/Kconfig                            |    7 +
 drivers/gpu/drm/drm_gem_shmem_helper.c             |   32 +-
 drivers/gpu/drm/drm_gpuvm.c                        |    6 +-
 drivers/gpu/drm/nova/Kconfig                       |    3 +-
 drivers/gpu/drm/nova/Makefile                      |    3 +-
 drivers/gpu/drm/nova/driver.rs                     |   28 +-
 drivers/gpu/drm/nova/gem.rs                        |   15 +-
 drivers/gpu/drm/nova/nova.rs                       |    2 +-
 drivers/gpu/drm/tyr/Kconfig                        |    1 +
 drivers/gpu/drm/tyr/driver.rs                      |   91 +++---
 drivers/gpu/drm/tyr/gem.rs                         |   33 +-
 drivers/gpu/drm/tyr/gpu.rs                         |  180 ++++-------
 drivers/gpu/drm/tyr/regs.rs                        | 1745 
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------
 drivers/gpu/drm/tyr/tyr.rs                         |    4 +-
 drivers/gpu/nova-core/Kconfig                      |    3 +-
 drivers/gpu/nova-core/Makefile                     |    3 +-
 drivers/gpu/nova-core/driver.rs                    |   75 ++---
 drivers/gpu/nova-core/falcon.rs                    |   49 +--
 drivers/gpu/nova-core/falcon/fsp.rs                |  171 ++++++++++
 drivers/gpu/nova-core/falcon/gsp.rs                |   23 +-
 drivers/gpu/nova-core/falcon/hal.rs                |   34 +-
 drivers/gpu/nova-core/falcon/hal/ga102.rs          |   22 +-
 drivers/gpu/nova-core/falcon/hal/tu102.rs          |   14 +-
 drivers/gpu/nova-core/fb.rs                        |   66 ++--
 drivers/gpu/nova-core/fb/hal.rs                    |   41 ++-
 drivers/gpu/nova-core/fb/hal/ga100.rs              |   29 +-
 drivers/gpu/nova-core/fb/hal/ga102.rs              |   23 +-
 drivers/gpu/nova-core/fb/hal/gb100.rs              |  122 +++++++
 drivers/gpu/nova-core/fb/hal/gb202.rs              |   95 ++++++
 drivers/gpu/nova-core/fb/hal/gh100.rs              |   50 +++
 drivers/gpu/nova-core/fb/hal/tu102.rs              |   44 ++-
 drivers/gpu/nova-core/firmware.rs                  |  197 ++++++++++--
 drivers/gpu/nova-core/firmware/booter.rs           |   34 +-
 drivers/gpu/nova-core/firmware/fsp.rs              |  128 ++++++++
 drivers/gpu/nova-core/firmware/fwsec.rs            |    5 +-
 drivers/gpu/nova-core/firmware/fwsec/bootloader.rs |    2 +-
 drivers/gpu/nova-core/firmware/gsp.rs              |   34 +-
 drivers/gpu/nova-core/fsp.rs                       |  320 ++++++++++++++++++
 drivers/gpu/nova-core/fsp/hal.rs                   |   32 ++
 drivers/gpu/nova-core/fsp/hal/gb100.rs             |   23 ++
 drivers/gpu/nova-core/fsp/hal/gb202.rs             |   27 ++
 drivers/gpu/nova-core/fsp/hal/gh100.rs             |   32 ++
 drivers/gpu/nova-core/gfw.rs                       |   76 -----
 drivers/gpu/nova-core/gpu.rs                       |  119 +++++--
 drivers/gpu/nova-core/gpu/hal.rs                   |   39 +++
 drivers/gpu/nova-core/gpu/hal/gh100.rs             |   34 ++
 drivers/gpu/nova-core/gpu/hal/tu102.rs             |  100 ++++++
 drivers/gpu/nova-core/gsp.rs                       |    5 +
 drivers/gpu/nova-core/gsp/boot.rs                  |  300 +++++++++--------
 drivers/gpu/nova-core/gsp/cmdq.rs                  |   10 +-
 drivers/gpu/nova-core/gsp/commands.rs              |   78 +++--
 drivers/gpu/nova-core/gsp/fw.rs                    |  121 +++++--
 drivers/gpu/nova-core/gsp/fw/commands.rs           |   60 +++-
 drivers/gpu/nova-core/gsp/fw/r570_144/bindings.rs  |   94 ++++++
 drivers/gpu/nova-core/gsp/hal.rs                   |   94 ++++++
 drivers/gpu/nova-core/gsp/hal/gh100.rs             |  192 +++++++++++
 drivers/gpu/nova-core/gsp/hal/tu102.rs             |  349 ++++++++++++++++++++
 drivers/gpu/nova-core/gsp/sequencer.rs             |   15 +-
 drivers/gpu/nova-core/mctp.rs                      |   88 +++++
 drivers/gpu/nova-core/nova_core.rs                 |    9 +-
 drivers/gpu/nova-core/regs.rs                      |  136 +++++++-
 drivers/gpu/nova-core/vbios.rs                     |  632 
++++++++++++++++--------------------
 drivers/pwm/pwm_th1520.rs                          |   13 +-
 include/drm/drm_gem_shmem_helper.h                 |    1 +
 include/linux/auxiliary_bus.h                      |    4 +
 include/linux/device/driver.h                      |    4 +-
 rust/Makefile                                      |    1 +
 rust/bindings/bindings_helper.h                    |    1 +
 rust/helpers/drm_gpuvm.c                           |   26 ++
 rust/helpers/helpers.c                             |    1 +
 rust/kernel/alloc/kbox.rs                          |   46 ++-
 rust/kernel/auxiliary.rs                           |  285 ++++++++++++-----
 rust/kernel/cpufreq.rs                             |    9 +-
 rust/kernel/device.rs                              |  121 +++----
 rust/kernel/devres.rs                              |    2 +-
 rust/kernel/dma.rs                                 |    2 +-
 rust/kernel/driver.rs                              |   41 ++-
 rust/kernel/drm/device.rs                          |  252 +++++++++++----
 rust/kernel/drm/driver.rs                          |   49 ++-
 rust/kernel/drm/gem/mod.rs                         |   72 +++--
 rust/kernel/drm/gem/shmem.rs                       |   61 ++--
 rust/kernel/drm/gpuvm/mod.rs                       |  328 +++++++++++++++++++
 rust/kernel/drm/gpuvm/sm_ops.rs                    |  429 
+++++++++++++++++++++++++
 rust/kernel/drm/gpuvm/va.rs                        |  168 ++++++++++
 rust/kernel/drm/gpuvm/vm_bo.rs                     |  249 ++++++++++++++
 rust/kernel/drm/mod.rs                             |    5 +
 rust/kernel/i2c.rs                                 |   61 ++--
 rust/kernel/io/mem.rs                              |  121 +++----
 rust/kernel/pci.rs                                 |   51 +--
 rust/kernel/pci/id.rs                              |    2 +-
 rust/kernel/pci/io.rs                              |   54 ++--
 rust/kernel/platform.rs                            |   52 +--
 rust/kernel/types.rs                               |   12 +-
 rust/kernel/types/for_lt.rs                        |  122 +++++++
 rust/kernel/usb.rs                                 |   57 ++--
 rust/macros/for_lt.rs                              |  248 ++++++++++++++
 rust/macros/lib.rs                                 |   13 +
 samples/rust/rust_debugfs.rs                       |   11 +-
 samples/rust/rust_dma.rs                           |    6 +-
 samples/rust/rust_driver_auxiliary.rs              |   79 +++--
 samples/rust/rust_driver_i2c.rs                    |   13 +-
 samples/rust/rust_driver_pci.rs                    |   90 +++---
 samples/rust/rust_driver_platform.rs               |    9 +-
 samples/rust/rust_driver_usb.rs                    |   15 +-
 samples/rust/rust_i2c_client.rs                    |   14 +-
 samples/rust/rust_soc.rs                           |    9 +-
 111 files changed, 7909 insertions(+), 1793 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/fsp/hal.rs
 create mode 100644 drivers/gpu/nova-core/fsp/hal/gb100.rs
 create mode 100644 drivers/gpu/nova-core/fsp/hal/gb202.rs
 create mode 100644 drivers/gpu/nova-core/fsp/hal/gh100.rs
 delete mode 100644 drivers/gpu/nova-core/gfw.rs
 create mode 100644 drivers/gpu/nova-core/gpu/hal.rs
 create mode 100644 drivers/gpu/nova-core/gpu/hal/gh100.rs
 create mode 100644 drivers/gpu/nova-core/gpu/hal/tu102.rs
 create mode 100644 drivers/gpu/nova-core/gsp/hal.rs
 create mode 100644 drivers/gpu/nova-core/gsp/hal/gh100.rs
 create mode 100644 drivers/gpu/nova-core/gsp/hal/tu102.rs
 create mode 100644 drivers/gpu/nova-core/mctp.rs
 create mode 100644 rust/helpers/drm_gpuvm.c
 create mode 100644 rust/kernel/drm/gpuvm/mod.rs
 create mode 100644 rust/kernel/drm/gpuvm/sm_ops.rs
 create mode 100644 rust/kernel/drm/gpuvm/va.rs
 create mode 100644 rust/kernel/drm/gpuvm/vm_bo.rs
 create mode 100644 rust/kernel/types/for_lt.rs
 create mode 100644 rust/macros/for_lt.rs

Reply via email to