Re: [PATCH v9 0/7] drm/tyr: firmware loading and MCU boot support

Daniel Almeida <[email protected]>
Newsgroups org.kernel.vger.rust-for-linux,org.freedesktop.lists.dri-devel,org.kernel.vger.linux-kernel
Message-ID <[email protected]>

> On 22 Jul 2026, at 20:54, Deborah Brouwer <[email protected]> wrote:
> 
> This series adds firmware loading and MCU boot support to the Tyr DRM
> driver. It includes:
> - A parser for the Mali CSF firmware binary format
> - A kernel-managed BO type (KernelBo) for internal driver allocations
> - GPU virtual memory (VM) integration using drm_gpuvm
> - An MMU module and a generic slot manager
> - Loading firmware, VM activation, and MCU boot at probe()
> 
> It is based on drm-rust-next but also depends on:
> 
> 1. [PATCH v3] rust: iommu: add device lifetime to IoPageTable
>   https://lore.kernel.org/rust-for-linux/[email protected]
> 
> 2. [PATCH] drm: Remove DRIVER_GEM_GPUVA feature flag
>   https://lore.kernel.org/dri-devel/[email protected]/
>   This patch is in drm-misc-next for v7.3:
>   https://lore.kernel.org/dri-devel/20260702-powerful-successful-raptor-eded34@houat/
> 
> A branch with all dependencies is available here:
> https://gitlab.freedesktop.org/dbrouwer/linux/-/commits/fw-boot-b4
> 
> Signed-off-by: Deborah Brouwer <[email protected]>
> ---
> Changes in v9:
> - reuse SlotData when reactivating a slot
> - add fn seat to SlotOperations
> - don't allocate gpuva for full unmap_range
> - add small sleeps instead of busy-wait for hw
> - move sparse address space test to constructor
> - use infallible pin_init! for registration data
> - add fw stop() to disable MCU and call it from drop()
> - check page alignment in parser
> - validate firmware header and entry bounds
> - allow firmware sections with no VM mapping footprint
> - clear stale MCU interrupts before boot
> - handle various errors and clean up
> - remove various unreachable code
> - remove trailing newlines from dev_ prints
> - Link to v8: https://lore.kernel.org/r/[email protected]
> 
> Changes in v8:
> - kill the vm if firmware does not initialize properly
> - write to JOB_IRQ_CLEAR after MCU boots
> - check that a mapping request does not run past the end of the GEM buffer
> - check that the SG table gave us enough backing memory for our VA
> - make the KernelBo gem object field (bo) private and add an accessor
> - return unused gpuva from remap()
> - always provide three gpuva to unmap() instead of two
> - be stricter about interpreting MAIR bits for device and non-cacheable memory
> - preserve idle slot data in case subsequent activation fails
> - clear evicted slot after eviction in case a subsequent activation fails
> - wait for flush and lock commands to complete before proceeding
> - rewrite SectionFlags with the register macro
> - use the InaBits conversion provided by the register macro
> - rename the slot data argument to vm_as_data for clarity
> - add various checks for size, shifting, truncating, sparse values, overflow etc.
> - return errors instead of panicking from unwrap()
> - use dev_* macros for all logging
> - Link to v7: https://lore.kernel.org/r/[email protected]
> 
> Changes in v7:
> - slot.rs: don't print an error when all slots are busy
> - change all allow(dead_code) to expect(dead_code)
> - use LockedSeat type alias in VmAsData
> - shift the lockaddr_base so it fits properly in LOCKADDR
> - replace core::fmt with kernel::fmt
> - make SAFETY comments clearer for map/unmap pages
> - fix arm 32-bit build failures
> - release gpuvm_unique lock before calling deferred_cleanup
> - Link to v6: https://lore.kernel.org/r/[email protected]
> 
> Changes in v6:
> - Move gpu_info from drm::Driver::Data to RegistrationData
>  and remove drm::Driver::Data entirely.
> - Remove the extra drm::Device ARef in TyrPlatformDriverData
>  since drm::Registration already owns an ARef to the drm::Device.
> - Stop storing platform::Device ARef in firmware since it is unused.
> - Pass a generic kernel::Device instead of the platform::Device through
>  firmware to Vm and pagetables since this is all that they need.
> - Link to v5: https://lore.kernel.org/r/[email protected]
> 
> Changes in v5:
> - Reduce the scope of this series back to just MCU booting.
> - Drop the CSF global interface, job IRQ, wait, and arch timer patches
>  since they will be sent as subsequent series.
> - Add lifetimes to resources and store them in TyrRegistrationData.
> 
> - Link to v4: https://lore.kernel.org/r/[email protected]
> 
> Changes in v4:
> New commits:
>  - drm/tyr: program CSF global interface
>  - rust: time: add arch_timer_get_rate wrapper
>  - drm/tyr: add CSF firmware interface support
>  - drm/tyr: validate presence of CSF shared section
>  - drm/tyr: wait for global interface readiness
>  - drm/tyr: add Job IRQ handling
>  - drm/tyr: add Wait type for GPU events
> 
> The existing commits from v3 remain unchanged.
> - Link to v3: https://lore.kernel.org/r/[email protected]
> 
> Changes in v3:
> New commits:
>  - drm/tyr: remove unused device from platform data
>  - drm/tyr: use shmem GEM object type in TyrDrmDriver
> 
> drm/tyr: select required dependencies in Kconfig
>  - Rename commit since the dependencies are not limited to DRM.
>  - Select new RUST_DRM_GEM_SHMEM_HELPER instead of DRM_GEM_SHMEM_HELPER.
> 
> drm/tyr: set DMA mask using GPU physical address
>  - Use register macro to read pa_bits instead of separate helper function.
> 
> drm/tyr: add MMU module
>  - Switch MMU code to typed register APIs (TRANSCFG, MEMATTR, STATUS, LOCKADDR, etc.).
>  - Use MmuCommand enum for MMU commands instead of raw constants.
>  - Minor cleanups and renaming (MAX_AS, AS_PRESENT handling).
> 
> drm/tyr: add GPU virtual memory module
>  - Extract VA/PA bits via typed MMU_FEATURES register.
>  - Update the VM code to match the new GPUVM v6 and shmem GEM v10 APIs.
> 
> drm/tyr: add a kernel buffer object
>  - Reject zero-sized KernelBo allocations up front.
> 
> drm/tyr: add firmware loading and MCU boot support
>  - Use typed GPU control registers.
>  - Pass iomem by Arc into Firmware::new() since we store it eventually.
> 
>  - Link to v2: https://lore.kernel.org/rust-for-linux/[email protected]/
> 
> Changes in v2:
> - The whole series is rebased on drm-rust-next including v7.0-rc1.
> - Each patch has its own changelog.
> 
> Link to v1: https://lore.kernel.org/rust-for-linux/[email protected]/
> 
> ---
> Boris Brezillon (3):
>      drm/tyr: add a generic slot manager
>      drm/tyr: add Memory Management Unit (MMU) support
>      drm/tyr: add GPU virtual memory (VM) support
> 
> Daniel Almeida (1):
>      drm/tyr: add parser for firmware binary
> 
> Deborah Brouwer (3):
>      drm/tyr: add resources to RegistrationData
>      drm/tyr: add a kernel buffer object
>      drm/tyr: add Microcontroller Unit (MCU) booting
> 
> drivers/gpu/drm/tyr/Kconfig              |   5 +
> drivers/gpu/drm/tyr/driver.rs            |  68 ++-
> drivers/gpu/drm/tyr/file.rs              |  11 +-
> drivers/gpu/drm/tyr/fw.rs                | 321 +++++++++++
> drivers/gpu/drm/tyr/fw/parser.rs         | 588 +++++++++++++++++++
> drivers/gpu/drm/tyr/gem.rs               | 134 ++++-
> drivers/gpu/drm/tyr/mmu.rs               | 120 ++++
> drivers/gpu/drm/tyr/mmu/address_space.rs | 511 +++++++++++++++++
> drivers/gpu/drm/tyr/regs.rs              | 135 ++++-
> drivers/gpu/drm/tyr/slot.rs              | 404 +++++++++++++
> drivers/gpu/drm/tyr/tyr.rs               |   4 +
> drivers/gpu/drm/tyr/vm.rs                | 937 +++++++++++++++++++++++++++++++
> 12 files changed, 3203 insertions(+), 35 deletions(-)
> ---
> base-commit: 337c44a2f50c9008273a338f518cc552f6b08567
> change-id: 20260708-fw-boot-b4-f07706a265c7
> 
> Best regards,
> -- 
> Deborah Brouwer <[email protected]>
> 

For the whole series:

Reviewed-by: Daniel Almeida <[email protected]>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.