This is the initial series for the nova-core stub driver. nova-core is intended to serve as a common base for nova-drm (the corresponding DRM driver) and the vGPU manager VFIO driver, serving as a hard- and firmware abstraction layer for GSP-based NVIDIA GPUs. The Nova project, including nova-core and nova-drm, in the long term, is intended to serve as the successor of Nouveau for all GSP-based GPUs. The motivation for both, starting a successor project for Nouveau and doing so using the Rust programming language, is documented in detail through a previous post on the mailing list [1], an LWN article [2] and a talk from LPC '24. In order to avoid the chicken and egg problem to require a user to upstream Rust abstractions, but at the same time require the Rust abstractions to implement the driver, nova-core kicks off as a driver stub and is subsequently developed upstream. Besides the driver itself and the corresponding documentation, i.e. guidelines, task list, etc., this series also carries a few more patches to more flexibly compose firmware path strings for the .modinfo section. Link: https://lore.kernel.org/dri-devel/Zfsj0_tb-0-tNrJy@cassiopeiae/T/#u [1] Link: https://lwn.net/Articles/990736/ [2] Link: https://youtu.be/3Igmx28B3BQ?si=sBdSEer4tAPKGpOs [3] Changes in v4: - in `regs::Boot0` take a `&Bar0` and let deref coercion do its thing (Alexandre) - add missing firmware path string to the .modinfo section (Greg) - add some infrastructure to compose firmware path strings more flexibly Changes in v3: - impl TryFrom<u32> for Chipset - add Chipset::arch() - initialize revision from Boot0 - in Firmware, eliminate repeating code pattern using a closure (thanks to Alexandre) - use #[expect(dead_code)] for Firmware - Replace some Rust specific rules with links to existing R4L documentation. - Link in R4L submit checklist. - Update task entry "Page abstraction for foreign pages" with Lina's work. Changes in v2: - Fix module name in Kconfig description. (John) - Expand Kconfig description a bit. (John) - Expand name for PCI BAR0 region. - Do not store / print boot0 raw register value. (John) - Rename CardType to Architecture, rename enum names to represent the architecture name and adjust enum values according to the register definition. (John) - Add an abstraction for register accesses. - Print chipset, architecture and revision. - Load bootloader firmware. (Timur) - Add task "Generic register abstraction". - Change complexity of "Debugfs abstractions". Danilo Krummrich (6): rust: module: add type `LocalModule` rust: str: provide const fn as_bytes() for BStr rust: firmware: introduce `firmware::ModInfoBuilder` rust: firmware: add `module_firmware!` macro gpu: nova-core: add initial driver stub gpu: nova-core: add initial documentation Documentation/gpu/drivers.rst | 1 + Documentation/gpu/nova/core/guidelines.rst | 24 ++ Documentation/gpu/nova/core/todo.rst | 446 +++++++++++++++++++++ Documentation/gpu/nova/guidelines.rst | 69 ++++ Documentation/gpu/nova/index.rst | 30 ++ MAINTAINERS | 11 + drivers/gpu/Makefile | 1 + drivers/gpu/nova-core/Kconfig | 14 + drivers/gpu/nova-core/Makefile | 3 + drivers/gpu/nova-core/driver.rs | 47 +++ drivers/gpu/nova-core/firmware.rs | 45 +++ drivers/gpu/nova-core/gpu.rs | 225 +++++++++++ drivers/gpu/nova-core/nova_core.rs | 19 + drivers/gpu/nova-core/regs.rs | 55 +++ drivers/video/Kconfig | 1 + rust/kernel/firmware.rs | 177 ++++++++ rust/kernel/str.rs | 6 + rust/macros/module.rs | 2 + 18 files changed, 1176 insertions(+) create mode 100644 Documentation/gpu/nova/core/guidelines.rst create mode 100644 Documentation/gpu/nova/core/todo.rst create mode 100644 Documentation/gpu/nova/guidelines.rst create mode 100644 Documentation/gpu/nova/index.rst create mode 100644 drivers/gpu/nova-core/Kconfig create mode 100644 drivers/gpu/nova-core/Makefile create mode 100644 drivers/gpu/nova-core/driver.rs create mode 100644 drivers/gpu/nova-core/firmware.rs create mode 100644 drivers/gpu/nova-core/gpu.rs create mode 100644 drivers/gpu/nova-core/nova_core.rs create mode 100644 drivers/gpu/nova-core/regs.rs base-commit: ac9c34d1e45a4c25174ced4fc0cfc33ff3ed08c7 -- 2.48.1