From: Danilo Krummrich <dakr@kernel.org>
To: airlied@gmail.com, simona@ffwll.ch, corbet@lwn.net,
maarten.lankhorst@linux.intel.com, mripard@kernel.org,
tzimmermann@suse.de, ajanulgu@redhat.com, lyude@redhat.com,
pstanner@redhat.com, zhiw@nvidia.com, cjia@nvidia.com,
jhubbard@nvidia.com, bskeggs@nvidia.com, acurrid@nvidia.com
Cc: ojeda@kernel.org, alex.gaynor@gmail.com, boqun.feng@gmail.com,
gary@garyguo.net, bjorn3_gh@protonmail.com,
benno.lossin@proton.me, a.hindborg@kernel.org,
aliceryhl@google.com, tmgross@umich.edu,
gregkh@linuxfoundation.org, mcgrof@kernel.org,
russ.weight@linux.dev, dri-devel@lists.freedesktop.org,
linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
nouveau@lists.freedesktop.org, rust-for-linux@vger.kernel.org,
Danilo Krummrich <dakr@kernel.org>
Subject: [PATCH v6 0/5] Initial Nova Core series
Date: Thu, 6 Mar 2025 23:23:26 +0100 [thread overview]
Message-ID: <20250306222336.23482-1-dakr@kernel.org> (raw)
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 v6:
- extend documentation and examples of ModInfoBuilder and module_firmware!
(Benno)
- wrap statics in module_firmware! in a const _:() = {} block (Benno)
- update task "Delay / Sleep abstractions" (FUJITA)
- don't refer to subsequent patches in commit message (Jarkko)
- nova: convert firmware version to const (Alex)
Changes in v5:
- change `ModInfoBuilder::push()` to take a `&str` instead of `&[u8]`
- drop patch "rust: str: provide const fn as_bytes() for BStr"
- embedd `impl TryFrom<u32> for Chipset` in `define_chipset!` (Alexandre)
- switch `Chipset::NAMES` from `[&BStr; N]` to `[&str; N]`
- introduce `const_bytes_to_str()` helper
- move `to_lowercase_bytes()` to util.rs
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 (5):
rust: module: add type `LocalModule`
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 | 199 +++++++++
drivers/gpu/nova-core/nova_core.rs | 20 +
drivers/gpu/nova-core/regs.rs | 55 +++
drivers/gpu/nova-core/util.rs | 21 +
drivers/video/Kconfig | 1 +
rust/kernel/firmware.rs | 216 ++++++++++
rust/macros/module.rs | 4 +
18 files changed, 1207 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
create mode 100644 drivers/gpu/nova-core/util.rs
base-commit: 1238f0af13495e14e1f40d011b9b7b414bf387fe
--
2.48.1
next reply other threads:[~2025-03-06 22:23 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-06 22:23 Danilo Krummrich [this message]
2025-03-06 22:23 ` [PATCH v6 1/5] rust: module: add type `LocalModule` Danilo Krummrich
2025-03-06 22:23 ` [PATCH v6 2/5] rust: firmware: introduce `firmware::ModInfoBuilder` Danilo Krummrich
2025-03-06 22:23 ` [PATCH v6 3/5] rust: firmware: add `module_firmware!` macro Danilo Krummrich
2025-03-06 22:23 ` [PATCH v6 4/5] gpu: nova-core: add initial driver stub Danilo Krummrich
2026-03-01 3:03 ` Randy Dunlap
2025-03-06 22:23 ` [PATCH v6 5/5] gpu: nova-core: add initial documentation Danilo Krummrich
2025-03-09 18:40 ` [PATCH v6 0/5] Initial Nova Core series Danilo Krummrich
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250306222336.23482-1-dakr@kernel.org \
--to=dakr@kernel.org \
--cc=a.hindborg@kernel.org \
--cc=acurrid@nvidia.com \
--cc=airlied@gmail.com \
--cc=ajanulgu@redhat.com \
--cc=alex.gaynor@gmail.com \
--cc=aliceryhl@google.com \
--cc=benno.lossin@proton.me \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun.feng@gmail.com \
--cc=bskeggs@nvidia.com \
--cc=cjia@nvidia.com \
--cc=corbet@lwn.net \
--cc=dri-devel@lists.freedesktop.org \
--cc=gary@garyguo.net \
--cc=gregkh@linuxfoundation.org \
--cc=jhubbard@nvidia.com \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lyude@redhat.com \
--cc=maarten.lankhorst@linux.intel.com \
--cc=mcgrof@kernel.org \
--cc=mripard@kernel.org \
--cc=nouveau@lists.freedesktop.org \
--cc=ojeda@kernel.org \
--cc=pstanner@redhat.com \
--cc=russ.weight@linux.dev \
--cc=rust-for-linux@vger.kernel.org \
--cc=simona@ffwll.ch \
--cc=tmgross@umich.edu \
--cc=tzimmermann@suse.de \
--cc=zhiw@nvidia.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.