* [GIT PULL] DRM Rust changes for v7.2-rc1
@ 2026-06-04 19:25 Danilo Krummrich
0 siblings, 0 replies; only message in thread
From: Danilo Krummrich @ 2026-06-04 19:25 UTC (permalink / raw)
To: Dave Airlie, Simona Vetter
Cc: Danilo Krummrich, Alice Ryhl, Alexandre Courbot, Daniel Almeida,
dri-devel, nova-gpu, rust-for-linux
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
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2026-06-04 19:25 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-06-04 19:25 [GIT PULL] DRM Rust changes for v7.2-rc1 Danilo Krummrich
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox