The big set of Rust DRM kernel graphics/display driver updates were sent out to DRM-Next ahead of the upcoming Linux 6.18 kernel. Most notable with this pull request is merging the Tyr driver, the new open-source and Rust-based DRM driver for Arm Mali GPUs.
Tyr is a Rust DRM driver for Mali GPUs and supporting the same set of GPUs as supported by the current C-based Panthor driver. Tyr makes use of the Arm Mali Command Stream Firmware “CSF” just like Panthor too.
Tyr was developed by Collabora with Google and Arm and is now ready for being introduced in Linux 6.18 in its initial/experimental form.
The Tyr driver at this stage can power up the GPU, query the GPU metadata through the MMIO and provide meta-data to user-space via the DRM device ioctl. Over the coming Linux kernel cycles this Tyr driver functionality will continue to slowly be built out until it’s a viable replacement to Panthor.
Today’s Rust DRM pull request also has a number of other additions as the Rust DRM infrastructure is built out, including for the Nova open-source NVIDIA driver:
“Alloc
– Add BorrowedPage type and AsPageIter trait
– Implement Vmalloc::to_page() and VmallocPageIter
– Implement AsPageIter for VBox and VVecDMA & Scatterlist
– Add dma::DataDirection and type alias for dma_addr_t
– Abstraction for struct scatterlist and struct sg_tableDRM
– 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 entryNova (DRM)
– Update ARef import from sync::aref
– Add website to MAINTAINERS entryPin-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 traitsTyr
– 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).”