[GIT PULL] DRM Rust changes for v6.18

Danilo Krummrich
2025-09-16T15:34:01Z

Hi Dave and Sima,

Please pull the following DRM Rust changes.

Besides the DRM changes, this PR also contains some new DMA & scatterlist
infrastructure (incl. some alloc dependencies), with Nova as a first user.

It also includes a few AsBytes and FromBytes additions needed by Nova.

I merged this cycle's pin-init PR from Benno, since Nova is the first user
taking advantage of the new features included.

There are a couple of conflicts with other trees (Rust, MM, Driver Core, Linus),
but they are mostly around includes and all trivial [1..8] -- no semantic
conflicts.

All changes have been in -next for a couple of rounds; the latest nova-core
series from Alex for one cycle.

- Danilo

[1] https://lore.kernel.org/all/20250905124634.68da9a1e@canb.auug.org.au/
[2] https://lore.kernel.org/all/20250905125139.109081b2@canb.auug.org.au/
[3] https://lore.kernel.org/all/20250905125653.0ebc7580@canb.auug.org.au/
[4] https://lore.kernel.org/all/20250905144449.437ef3cf@canb.auug.org.au/
[5] https://lore.kernel.org/all/20250912120159.1d6518cc@canb.auug.org.au/
[6] https://lore.kernel.org/all/20250912135146.0c3ea18f@canb.auug.org.au/
[7] https://lore.kernel.org/all/aMlfiBynRQrbW3BT@sirena.org.uk/
[8] https://lore.kernel.org/all/aMlhpIhjbrDR4C8L@sirena.org.uk/

The following changes since commit 043d9c6928b010be7902a01b5cdfa7d754535b1a:

drm/bridge: anx7625: register content protect property (2025-08-20 08:22:01 -0700)

are available in the Git repository at:

https://gitlab.freedesktop.org/drm/rust/kernel.git tags/drm-rust-next-2025-09-16

for you to fetch changes up to 299eb32863e584cfff7c6b667c3e92ae7d4d2bf9:

gpu: nova-core: Add base files for r570.144 firmware bindings (2025-09-13 23:17:48 +0900)

----------------------------------------------------------------
DRM Rust changes for v6.18

Alloc
- Add BorrowedPage type and AsPageIter trait
- Implement Vmalloc::to_page() and VmallocPageIter
- Implement AsPageIter for VBox and VVec

DMA & Scatterlist
- Add dma::DataDirection and type alias for dma_addr_t
- Abstraction for struct scatterlist and struct sg_table

DRM
- In the DRM GEM module, simplify overall use of generics, add
DriverFile type alias and drop Object::SIZE.

Nova (Core)
- Various register!() macro improvements (paving the way for lifting
it to common driver infrastructure)
- Minor VBios fixes and refactoring
- Minor firmware request refactoring
- Advance firmware boot stages; process Booter and patch its
signature, process GSP and GSP bootloader
- Switch development fimrware version to r570.144
- Add basic firmware bindings for r570.144
- Move GSP boot code to its own module
- Clean up and take advantage of pin-init features to store most of
the driver's private data within a single allocation
- Update ARef import from sync::aref
- Add website to MAINTAINERS entry

Nova (DRM)
- Update ARef import from sync::aref
- Add website to MAINTAINERS entry

Pin-Init
- Merge pin-init PR from Benno
- `#[pin_data]` now generates a `*Projection` struct similar to the
`pin-project` crate.

- Add initializer code blocks to `[try_][pin_]init!` macros: make
initializer macros accept any number of `_: {/* arbitrary code
*/},` & make them run the code at that point.

- Make the `[try_][pin_]init!` macros expose initialized fields via
a `let` binding as `&mut T` or `Pin<&mut T>` for later fields.

Rust
- Various methods for AsBytes and FromBytes traits

Tyr
- Initial Rust driver skeleton for ARM Mali GPUs.
- It can power up the GPU, query for GPU metatdata through MMIO and
provide the metadata to userspace via DRM device IOCTL (struct
drm_panthor_dev_query).

----------------------------------------------------------------
Alexandre Courbot (33):
gpu: nova-core: register: add missing space in register!()
gpu: nova-core: register: allow fields named `offset`
gpu: nova-core: register: improve documentation for basic registers
gpu: nova-core: register: simplify @leaf_accessor rule
gpu: nova-core: register: remove `try_` accessors for relative registers
gpu: nova-core: register: move OFFSET declaration to I/O impl block
gpu: nova-core: register: fix documentation and indentation
gpu: nova-core: register: add missing doccomments for fixed registers I/O accessors
gpu: nova-core: register: add fields dispatcher internal rule
gpu: nova-core: register: improve `Debug` implementation
gpu: nova-core: register: generate correct `Default` implementation
gpu: nova-core: register: split @io rule into fixed and relative versions
gpu: nova-core: register: use #[inline(always)] for all methods
gpu: nova-core: register: redesign relative registers
gpu: nova-core: falcon: add distinct base address for PFALCON2
gpu: nova-core: register: add support for register arrays
gpu: nova-core: falcon: use register arrays for FUSE registers
gpu: nova-core: register: add support for relative array registers
gpu: nova-core: falcon: align DMA transfers to 256 bytes
rust: transmute: add `as_bytes` method for `AsBytes` trait
rust: transmute: add `as_bytes_mut` method to `AsBytes` trait
rust: transmute: add `from_bytes_copy` method to `FromBytes` trait
gpu: nova-core: vbios: replace pci::Device with device::Device
gpu: nova-core: vbios: store reference to Device where relevant
gpu: nova-core: require `Send` on `FalconEngine` and `FalconHal`
gpu: nova-core: move GSP boot code to its own module
gpu: nova-core: add Chipset::name() method
gpu: nova-core: firmware: move firmware request code into a function
gpu: nova-core: firmware: add support for common firmware header
gpu: nova-core: firmware: process Booter and patch its signature
gpu: nova-core: firmware: process and prepare the GSP firmware
gpu: nova-core: firmware: process the GSP bootloader
gpu: nova-core: firmware: use 570.144 firmware

Alistair Popple (1):
gpu: nova-core: Add base files for r570.144 firmware bindings

Benno Lossin (6):
rust: pin-init: examples: error: use `Error` in `fn main()`
rust: pin-init: README: add information banner on the rename to `pin-init`
rust: pin-init: rename `project` -> `project_this` in doctest
rust: pin-init: add pin projections to `#[pin_data]`
rust: pin-init: add code blocks to `[try_][pin_]init!` macros
rust: pin-init: add references to previously initialized fields

Christian S. Lima (1):
rust: transmute: Add methods for FromBytes trait

Daniel Almeida (1):
rust: drm: Introduce the Tyr driver for Arm Mali GPUs

Danilo Krummrich (15):
rust: page: implement BorrowedPage
rust: alloc: vmalloc: implement Vmalloc::to_page()
rust: alloc: implement VmallocPageIter
rust: page: define trait AsPageIter
rust: alloc: kbox: implement AsPageIter for VBox
rust: alloc: layout: implement ArrayLayout::size()
rust: alloc: kvec: implement AsPageIter for VVec
rust: dma: implement DataDirection
rust: dma: add type alias for bindings::dma_addr_t
rust: scatterlist: Add abstraction for sg_table
samples: rust: dma: add sample code for SGTable
MAINTAINERS: rust: dma: add scatterlist files
gpu: nova-core: take advantage of pci::Device::unbind()
Merge drm-misc-next-2025-08-21 into drm-rust-next
Merge tag 'pin-init-v6.18' of https://github.com/Rust-for-Linux/linux into drm-rust-next

John Hubbard (1):
gpu: nova-core: register: minor grammar and spelling fixes

Lyude Paul (3):
rust: drm: gem: Simplify use of generics
rust: drm: gem: Add DriverFile type alias
rust: drm: gem: Drop Object::SIZE

Philipp Stanner (1):
MAINTAINERS: Add website of Nova GPU driver

Rhys Lloyd (2):
gpu: nova-core: vbios: use size_of instead of magic number
gpu: nova-core: vbios: change PmuLookupTableEntry to use size_of

Shankari Anand (2):
drm: nova: update ARef import from sync::aref
gpu: nova-core: Update ARef imports from sync::aref

Documentation/gpu/nova/core/todo.rst | 19 -
MAINTAINERS | 19 +-
drivers/gpu/drm/Kconfig | 2 +
drivers/gpu/drm/Makefile | 1 +
drivers/gpu/drm/nova/driver.rs | 4 +-
drivers/gpu/drm/nova/gem.rs | 10 +-
drivers/gpu/drm/tyr/Kconfig | 19 +
drivers/gpu/drm/tyr/Makefile | 3 +
drivers/gpu/drm/tyr/driver.rs | 205 ++++++
drivers/gpu/drm/tyr/file.rs | 56 ++
drivers/gpu/drm/tyr/gem.rs | 18 +
drivers/gpu/drm/tyr/gpu.rs | 219 ++++++
drivers/gpu/drm/tyr/regs.rs | 108 +++
drivers/gpu/drm/tyr/tyr.rs | 22 +
drivers/gpu/nova-core/driver.rs | 13 +-
drivers/gpu/nova-core/falcon.rs | 113 ++--
drivers/gpu/nova-core/falcon/gsp.rs | 16 +-
drivers/gpu/nova-core/falcon/hal.rs | 2 +-
drivers/gpu/nova-core/falcon/hal/ga102.rs | 47 +-
drivers/gpu/nova-core/falcon/sec2.rs | 13 +-
drivers/gpu/nova-core/fb.rs | 2 +-
drivers/gpu/nova-core/firmware.rs | 107 ++-
drivers/gpu/nova-core/firmware/booter.rs | 375 ++++++++++
drivers/gpu/nova-core/firmware/fwsec.rs | 17 +-
drivers/gpu/nova-core/firmware/gsp.rs | 243 +++++++
drivers/gpu/nova-core/firmware/riscv.rs | 91 +++
drivers/gpu/nova-core/gpu.rs | 216 ++----
drivers/gpu/nova-core/gsp.rs | 22 +
drivers/gpu/nova-core/gsp/boot.rs | 137 ++++
drivers/gpu/nova-core/gsp/fw.rs | 7 +
drivers/gpu/nova-core/gsp/fw/r570_144.rs | 29 +
drivers/gpu/nova-core/gsp/fw/r570_144/bindings.rs | 1 +
drivers/gpu/nova-core/nova_core.rs | 1 +
drivers/gpu/nova-core/regs.rs | 84 +--
drivers/gpu/nova-core/regs/macros.rs | 789 ++++++++++++++++++----
drivers/gpu/nova-core/util.rs | 20 -
drivers/gpu/nova-core/vbios.rs | 176 +++--
rust/bindings/bindings_helper.h | 2 +
rust/helpers/helpers.c | 1 +
rust/helpers/scatterlist.c | 24 +
rust/kernel/alloc/allocator.rs | 52 ++
rust/kernel/alloc/allocator/iter.rs | 102 +++
rust/kernel/alloc/allocator_test.rs | 29 +
rust/kernel/alloc/kbox.rs | 40 +-
rust/kernel/alloc/kvec.rs | 40 +-
rust/kernel/alloc/layout.rs | 5 +
rust/kernel/devres.rs | 6 +-
rust/kernel/dma.rs | 86 ++-
rust/kernel/drm/driver.rs | 3 +
rust/kernel/drm/gem/mod.rs | 93 ++-
rust/kernel/lib.rs | 2 +
rust/kernel/page.rs | 87 ++-
rust/kernel/scatterlist.rs | 491 ++++++++++++++
rust/kernel/transmute.rs | 114 +++-
rust/kernel/workqueue.rs | 9 +-
rust/pin-init/README.md | 12 +
rust/pin-init/examples/error.rs | 4 +-
rust/pin-init/src/lib.rs | 4 +-
rust/pin-init/src/macros.rs | 239 ++++++-
rust/uapi/uapi_helper.h | 1 +
samples/rust/rust_dma.rs | 35 +-
samples/rust/rust_driver_pci.rs | 2 +-
62 files changed, 4022 insertions(+), 687 deletions(-)
create mode 100644 drivers/gpu/drm/tyr/Kconfig
create mode 100644 drivers/gpu/drm/tyr/Makefile
create mode 100644 drivers/gpu/drm/tyr/driver.rs
create mode 100644 drivers/gpu/drm/tyr/file.rs
create mode 100644 drivers/gpu/drm/tyr/gem.rs
create mode 100644 drivers/gpu/drm/tyr/gpu.rs
create mode 100644 drivers/gpu/drm/tyr/regs.rs
create mode 100644 drivers/gpu/drm/tyr/tyr.rs
create mode 100644 drivers/gpu/nova-core/firmware/booter.rs
create mode 100644 drivers/gpu/nova-core/firmware/gsp.rs
create mode 100644 drivers/gpu/nova-core/firmware/riscv.rs
create mode 100644 drivers/gpu/nova-core/gsp.rs
create mode 100644 drivers/gpu/nova-core/gsp/boot.rs
create mode 100644 drivers/gpu/nova-core/gsp/fw.rs
create mode 100644 drivers/gpu/nova-core/gsp/fw/r570_144.rs
create mode 100644 drivers/gpu/nova-core/gsp/fw/r570_144/bindings.rs
create mode 100644 rust/helpers/scatterlist.c
create mode 100644 rust/kernel/alloc/allocator/iter.rs
create mode 100644 rust/kernel/scatterlist.rs