[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250226175552.29381-1-dakr@kernel.org>
Date: Wed, 26 Feb 2025 18:55:42 +0100
From: Danilo Krummrich <dakr@...nel.org>
To: airlied@...il.com,
simona@...ll.ch,
corbet@....net,
maarten.lankhorst@...ux.intel.com,
mripard@...nel.org,
tzimmermann@...e.de,
ajanulgu@...hat.com,
lyude@...hat.com,
pstanner@...hat.com,
zhiw@...dia.com,
cjia@...dia.com,
jhubbard@...dia.com,
bskeggs@...dia.com,
acurrid@...dia.com
Cc: ojeda@...nel.org,
alex.gaynor@...il.com,
boqun.feng@...il.com,
gary@...yguo.net,
bjorn3_gh@...tonmail.com,
benno.lossin@...ton.me,
a.hindborg@...nel.org,
aliceryhl@...gle.com,
tmgross@...ch.edu,
mcgrof@...nel.org,
russ.weight@...ux.dev,
dri-devel@...ts.freedesktop.org,
linux-doc@...r.kernel.org,
linux-kernel@...r.kernel.org,
nouveau@...ts.freedesktop.org,
rust-for-linux@...r.kernel.org,
Danilo Krummrich <dakr@...nel.org>
Subject: [PATCH v4 0/6] Initial Nova Core series
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
Powered by blists - more mailing lists