rust-for-linux.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v5 0/5] Initial Nova Core series
@ 2025-03-04 17:34 Danilo Krummrich
  2025-03-04 17:34 ` [PATCH v5 1/5] rust: module: add type `LocalModule` Danilo Krummrich
                   ` (5 more replies)
  0 siblings, 6 replies; 34+ messages in thread
From: Danilo Krummrich @ 2025-03-04 17:34 UTC (permalink / raw)
  To: airlied, simona, corbet, maarten.lankhorst, mripard, tzimmermann,
	ajanulgu, lyude, pstanner, zhiw, cjia, jhubbard, bskeggs, acurrid
  Cc: ojeda, alex.gaynor, boqun.feng, gary, bjorn3_gh, benno.lossin,
	a.hindborg, aliceryhl, tmgross, gregkh, mcgrof, russ.weight,
	dri-devel, linux-doc, linux-kernel, nouveau, rust-for-linux,
	Danilo Krummrich

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 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                    | 177 ++++++++
 rust/macros/module.rs                      |   2 +
 18 files changed, 1166 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: 99fa936e8e4f117d62f229003c9799686f74cebc
-- 
2.48.1


^ permalink raw reply	[flat|nested] 34+ messages in thread

end of thread, other threads:[~2025-03-06 17:20 UTC | newest]

Thread overview: 34+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-04 17:34 [PATCH v5 0/5] Initial Nova Core series Danilo Krummrich
2025-03-04 17:34 ` [PATCH v5 1/5] rust: module: add type `LocalModule` Danilo Krummrich
2025-03-04 19:14   ` Jarkko Sakkinen
2025-03-05 21:07   ` Miguel Ojeda
2025-03-04 17:34 ` [PATCH v5 2/5] rust: firmware: introduce `firmware::ModInfoBuilder` Danilo Krummrich
2025-03-04 19:15   ` Jarkko Sakkinen
2025-03-05 22:30   ` Benno Lossin
2025-03-05 22:38     ` Danilo Krummrich
2025-03-05 23:36       ` Benno Lossin
2025-03-05 23:57         ` Danilo Krummrich
2025-03-06  0:24           ` Benno Lossin
2025-03-06  1:29             ` Danilo Krummrich
2025-03-06  1:35               ` Benno Lossin
2025-03-06  1:48                 ` Danilo Krummrich
2025-03-04 17:34 ` [PATCH v5 3/5] rust: firmware: add `module_firmware!` macro Danilo Krummrich
2025-03-04 19:17   ` Jarkko Sakkinen
2025-03-06  0:31   ` Benno Lossin
2025-03-06  1:04     ` Danilo Krummrich
2025-03-06  1:27       ` Benno Lossin
2025-03-06  1:38         ` Danilo Krummrich
2025-03-06  1:42           ` Benno Lossin
2025-03-04 17:34 ` [PATCH v5 4/5] gpu: nova-core: add initial driver stub Danilo Krummrich
2025-03-06 12:38   ` Alexandre Courbot
2025-03-04 17:34 ` [PATCH v5 5/5] gpu: nova-core: add initial documentation Danilo Krummrich
2025-03-06 12:41   ` Alexandre Courbot
2025-03-06 12:56   ` FUJITA Tomonori
2025-03-06 13:45     ` Danilo Krummrich
2025-03-06 13:59       ` FUJITA Tomonori
2025-03-05 19:56 ` [PATCH v5 0/5] Initial Nova Core series Danilo Krummrich
2025-03-05 23:27   ` Luis Chamberlain
2025-03-05 23:40     ` Danilo Krummrich
2025-03-06  0:06       ` Luis Chamberlain
2025-03-06  6:39   ` Greg KH
2025-03-06 17:19   ` Russ Weight

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).