This series introduces page-table types and a Virtual Memory Manager (VMM) for the nova-core driver, plus a BAR1 user (with selftests) layered on top. The page-table layer uses trait-based generics (PteOps, PdeOps, DualPdeOps, MmuConfig) to dispatch between MMU v2 and v3 formats. The Vmm tracks virtual-address ranges with a maple tree, and the BAR1 user exposes mapped CPU access to VRAM through a small allocation API exercised by the selftests.
This series is based on drm-rust-next. It depends on the prerequisite series "Introduce nova-core mm prerequisites" posted alongside this one: https://lore.kernel.org/all/[email protected]/ Please apply the prerequisite series first, or pull the git tag below which contains everything. Dependencies (not yet merged): - Alexandre Courbot's bitfield series. Tested on v2: https://lore.kernel.org/all/[email protected]/ A newer v3 of bitfield is available and should also work (haven't tested): https://lore.kernel.org/all/[email protected]/ - rust: maple_tree: implement Send and Sync for MapleTree (v3): https://lore.kernel.org/all/[email protected]/ The git tree (containing the dependencies above, the prerequisite series "Introduce nova-core mm prerequisites", and this series) can be found at: git://git.kernel.org/pub/scm/linux/kernel/git/jfern/linux.git (tag: nova-mm-v1-20260518) Change log: Changes from v12 to v1 (split-out): - Part 2 of 2; depends on the prereq series posted just before: https://lore.kernel.org/all/[email protected]/ - Kept the virtual-memory portion of v12's "Add common memory management types" patch here as "Add common types for virtual memory management". - Folded v12's "Add TLB flush support" into a new "Add buddy allocator and TLB to GpuMm" patch. - Split v12's "Add page table entry operation traits" into PteOps, PdeOps, and DualPdeOps trait patches. - Extracted "Add MmuConfig trait" into its own patch. - Moved "rust: maple_tree: Send and Sync" out as a standalone dependency; VMM's maple-tree-backed range tracking remains. - Smaller code touch-ups across most carried-over patches. Link to v12: https://lore.kernel.org/all/[email protected]/ Joel Fernandes (16): gpu: nova-core: mm: Add common types for virtual memory management gpu: nova-core: mm: Add buddy allocator and TLB to GpuMm gpu: nova-core: mm: Add common types for all page table formats gpu: nova-core: mm: pagetable: Add PteOps trait gpu: nova-core: mm: pagetable: Add PdeOps trait gpu: nova-core: mm: pagetable: Add DualPdeOps trait gpu: nova-core: mm: Add MMU v2 page table types gpu: nova-core: mm: Add MMU v3 page table types gpu: nova-core: mm: pagetable: Add MmuConfig trait gpu: nova-core: mm: Add page table walker for MMU v2/v3 gpu: nova-core: mm: Add Virtual Memory Manager gpu: nova-core: mm: Add virtual address range tracking to VMM gpu: nova-core: mm: Add multi-page mapping API to VMM gpu: nova-core: Add BAR1 aperture type and size constant gpu: nova-core: mm: Add BAR1 user interface gpu: nova-core: mm: Add BAR1 memory management self-tests drivers/gpu/nova-core/Kconfig | 1 + drivers/gpu/nova-core/driver.rs | 22 + drivers/gpu/nova-core/gpu.rs | 71 +++- drivers/gpu/nova-core/gsp/commands.rs | 4 +- drivers/gpu/nova-core/gsp/fw/commands.rs | 8 + drivers/gpu/nova-core/mm.rs | 108 ++++- drivers/gpu/nova-core/mm/bar_user.rs | 447 +++++++++++++++++++++ drivers/gpu/nova-core/mm/pagetable.rs | 414 +++++++++++++++++++ drivers/gpu/nova-core/mm/pagetable/map.rs | 367 +++++++++++++++++ drivers/gpu/nova-core/mm/pagetable/ver2.rs | 271 +++++++++++++ drivers/gpu/nova-core/mm/pagetable/ver3.rs | 421 +++++++++++++++++++ drivers/gpu/nova-core/mm/pagetable/walk.rs | 258 ++++++++++++ drivers/gpu/nova-core/mm/tlb.rs | 130 ++++++ drivers/gpu/nova-core/mm/vmm.rs | 361 +++++++++++++++++ drivers/gpu/nova-core/regs.rs | 65 +++ 15 files changed, 2941 insertions(+), 7 deletions(-) create mode 100644 drivers/gpu/nova-core/mm/bar_user.rs create mode 100644 drivers/gpu/nova-core/mm/pagetable.rs create mode 100644 drivers/gpu/nova-core/mm/pagetable/map.rs create mode 100644 drivers/gpu/nova-core/mm/pagetable/ver2.rs create mode 100644 drivers/gpu/nova-core/mm/pagetable/ver3.rs create mode 100644 drivers/gpu/nova-core/mm/pagetable/walk.rs create mode 100644 drivers/gpu/nova-core/mm/tlb.rs create mode 100644 drivers/gpu/nova-core/mm/vmm.rs base-commit: 03f35250485a1f78f5055c034ce7073b4c887636 -- 2.34.1
