linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v6 0/5] rust, nova-core: PCI Class, Vendor support
@ 2025-08-22  2:03 John Hubbard
  2025-08-22  2:03 ` [PATCH v6 1/5] rust: pci: provide access to PCI Class and Class-related items John Hubbard
                   ` (4 more replies)
  0 siblings, 5 replies; 17+ messages in thread
From: John Hubbard @ 2025-08-22  2:03 UTC (permalink / raw)
  To: Danilo Krummrich
  Cc: Alexandre Courbot, Joel Fernandes, Timur Tabi, Alistair Popple,
	David Airlie, Simona Vetter, Bjorn Helgaas,
	Krzysztof Wilczyński, Miguel Ojeda, Alex Gaynor, Boqun Feng,
	Gary Guo, Björn Roy Baron, Benno Lossin, Andreas Hindborg,
	Alice Ryhl, Trevor Gross, nouveau, linux-pci, rust-for-linux,
	LKML, John Hubbard, Elle Rhumsaa

Changes since v5:
* Applied changes from Danilo's review (thanks!):
    * Split the nova-core patch into two patches, for nova and pci.
    * Added rust/kernel/pci/ to MAINTAINERS.

Changes since v4:
* Applied changes from Danilo's and Alex's review (thanks!):
    * Reorganized the patches so that the Nova changes consume the
      results of Class and Vendor upgrades, all in one shot.

    * Made Class and Vendor types get constructed infallibly.

    * This was all somewhat disruptive, and also required one more patch
      in order to properly separate the various steps. But I think it is
      all correct now. And CLIPPY=1 builds cleanly too.

* Elle Rhumsaa provided a Reviewed-by for v4 (thanks!), but due to the
  churn in v5 here, I thought it best to not add that tag to v5 yet.
  Instead, I have directly Cc'd Elle on the patches for now.

Changes since v3:
* Applied changes from Danilo's review (thanks!):

    * Moved Class and Vendor to a new pci/id.rs file.
    * Added ClassMask, to constrain callers to use only the two valid
      masks.
    * Removed pci_class_code_raw()
    * Changed Class and Vendor .as_u32() to .as_raw(), because after
      Danilo's comment I looked around rust/kernel and learned that
      .as_raw() is the overwhelmingly used convention.
    * Changed vendor_id() to return a Vendor instance directly.
        * Also, validated Vendor during construction, just as is done
          with Class. Both of these items are expected to match known
          values, even for new devices, so that's a reasonable move.


Changes since v2:

* Applied changes from Danilo's and Alex's review (thanks!):

    * Moved everything possible out of the new define_all_pci_classes!()
      and define_all_pci_vendors!() macros.
    * Used "impl TryFrom<u32> for Class/Vendor", instead of .from_u32().
    * Made the new DeviceId methods infallible.
    * Upgraded DeviceId::from_id() to accept a Vendor struct.

* Changed the names to be a little clearer:
    * class_code_raw() --> pci_class_code_raw()
    * class_enum() --> pci_class()

* Added doctests for the items that are not yet used in real drivers.

v2 is here:
    https://lore.kernel.org/20250818013305.1089446-1-jhubbard@nvidia.com

Changes since v1:

1) Use the pci_device_table for filtering, instead of open-coding
   filters in the .probe() callback.

2) Add PCI Class (class, subclass, implementation) and PCI Vendor to
   Rust for Linux.

3) Rebased onto the latest nova-next branch, which is here:
    https://gitlab.freedesktop.org/drm/nova.git

v1 is here:
    https://lore.kernel.org/20250813232859.224316-1-jhubbard@nvidia.com

Cc: Danilo Krummrich <dakr@kernel.org>
Cc: Alexandre Courbot <acourbot@nvidia.com>
Cc: Elle Rhumsaa <elle@weathered-steel.dev>

John Hubbard (5):
  rust: pci: provide access to PCI Class and Class-related items
  rust: pci: provide access to PCI Vendor values
  rust: pci: add DeviceId::from_class_and_vendor() method
  gpu: nova-core: avoid probing non-display/compute PCI functions
  rust: pci: use pci::Vendor instead of bindings::PCI_VENDOR_ID_*

 MAINTAINERS                           |   1 +
 drivers/gpu/nova-core/driver.rs       |  33 +-
 rust/kernel/pci.rs                    |  46 +-
 rust/kernel/pci/id.rs                 | 591 ++++++++++++++++++++++++++
 samples/rust/rust_dma.rs              |   6 +-
 samples/rust/rust_driver_auxiliary.rs |  12 +-
 samples/rust/rust_driver_pci.rs       |   9 +-
 7 files changed, 670 insertions(+), 28 deletions(-)
 create mode 100644 rust/kernel/pci/id.rs


base-commit: 0dfc23ac2c5b3a62ab27fb9b6ee582b4bb5ce33c
-- 
2.50.1


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

end of thread, other threads:[~2025-08-26 21:12 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-22  2:03 [PATCH v6 0/5] rust, nova-core: PCI Class, Vendor support John Hubbard
2025-08-22  2:03 ` [PATCH v6 1/5] rust: pci: provide access to PCI Class and Class-related items John Hubbard
2025-08-25 12:17   ` Alexandre Courbot
2025-08-26  2:22     ` John Hubbard
2025-08-22  2:03 ` [PATCH v6 2/5] rust: pci: provide access to PCI Vendor values John Hubbard
2025-08-25 12:33   ` Alexandre Courbot
2025-08-25 12:47     ` Danilo Krummrich
2025-08-26  2:20       ` John Hubbard
2025-08-26 20:38       ` John Hubbard
2025-08-26 20:45         ` Danilo Krummrich
2025-08-26 20:58           ` John Hubbard
2025-08-26 21:00             ` Danilo Krummrich
2025-08-26 21:12               ` John Hubbard
2025-08-26  2:19     ` John Hubbard
2025-08-22  2:03 ` [PATCH v6 3/5] rust: pci: add DeviceId::from_class_and_vendor() method John Hubbard
2025-08-22  2:03 ` [PATCH v6 4/5] gpu: nova-core: avoid probing non-display/compute PCI functions John Hubbard
2025-08-22  2:03 ` [PATCH v6 5/5] rust: pci: use pci::Vendor instead of bindings::PCI_VENDOR_ID_* John Hubbard

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).