* [PATCH v5 00/11] gpu: nova: Export parameters from nova-core to nova-drm
@ 2026-08-28 3:35 Alistair Popple
2026-08-28 3:35 ` [PATCH v5 01/11] gpu: nova-core: Add public driver API to nova-core Alistair Popple
` (11 more replies)
0 siblings, 12 replies; 13+ messages in thread
From: Alistair Popple @ 2026-08-28 3:35 UTC (permalink / raw)
To: nova-gpu
Cc: Alistair Popple, M Henning, Danilo Krummrich, Alice Ryhl,
David Airlie, Alexandre Courbot, Benno Lossin, Gary Guo,
Eliot Courtney, John Hubbard, linux-kernel, dri-devel,
rust-for-linux
This patch series adds some basic GPU properties via a new GPU info
ioctl. It builds on top of the "drm: Higher-Ranked Lifetime private data"
series[1] to correctly manage lifetimes of registration data shared between
DRM, auxbus and nova-core. It's also based on top of "ForLt/CovariantForLt
split, auxiliary closure API and DevresLt"[2]
A tree with this series applied on top of all pre-requisites is available
at [3].
Properties are exported via a new NovaCoreApi type which implements methods
to read data from the GPU. This has been implemented in a separate module
to make the public API implementations obvious and to keep them in one
place. Auxiliary bus drivers can obtain a handle to this type using
NovaCoreApi::of().
This handle can then be stored as part of the DRM registration data and
used to interact with the GPU via the nova-core driver.
A new info ioctl is introduced which provides an info type field and a
method for reading extendable structs containing GPU information. This
series can be tested using the drm-test[4]. A pull request containing
updated tests will be raised once this has been posted. A pull request for
Mesa has also been raised but is out of date. That will be updated once
this series has been merged.
Changes since v4:
- No longer export chip-id, instead export architecture and implementation
- Add a separate info ioctl with types to read GPU info as suggested by
Danilo
Changes since v3:
- Use an ioctl to return all parameters rather than multiple key/value
queries
Changes since v2:
- Addressed review Danilo and Alex
- Minor renames to better align with HW based on internal feedback
Changes since v1:
- Address review comments from Danilo
- Add an API call to read VRAM PCI BAR size using nova-core
[1] - https://lore.kernel.org/rust-for-linux/20260628145406.2107056-1-dakr@kernel.org/
[2] - https://lore.kernel.org/driver-core/20260626183630.2585057-1-dakr@kernel.org/
[3] - https://github.com/apopple-nvidia/linux/tree/nova-drm
[4] - https://gitlab.freedesktop.org/dakr/drm-test
Cc: M Henning <mhenning@darkrefraction.com>
Cc: Danilo Krummrich <dakr@kernel.org>
Cc: Alice Ryhl <aliceryhl@google.com>
Cc: David Airlie <airlied@gmail.com>
Cc: Alexandre Courbot <acourbot@nvidia.com>
Cc: Benno Lossin <lossin@kernel.org>
Cc: Gary Guo <gary@garyguo.net>
Cc: Eliot Courtney <ecourtney@nvidia.com>
Cc: John Hubbard <jhubbard@nvidia.com>
Cc: linux-kernel@vger.kernel.org
Cc: nova-gpu@lists.linux.dev
Cc: dri-devel@lists.freedesktop.org
Cc: rust-for-linux@vger.kernel.org
Alistair Popple (11):
gpu: nova-core: Add public driver API to nova-core
drm: nova: Add DRM registration data
drm: nova: Add GPU architecture enum to nova-drm UAPI
rust: uaccess: add UserSliceWriter::write_truncated()
drm: nova: Add an info ioctl
drm: nova: Add usable VRAM size to GPU info
drm: nova: Use nova-core to read VRAM_BAR_SIZE parameter
drm: nova: Expose a render node
drm: nova: Report GPU name in GPU info
drm: nova: Report GPU short name in GPU info
drm: nova: Report GPU GID in GPU info
drivers/gpu/drm/nova/driver.rs | 18 ++++-
drivers/gpu/drm/nova/file.rs | 83 ++++++++++++++++++++----
drivers/gpu/nova-core/api.rs | 68 +++++++++++++++++++
drivers/gpu/nova-core/driver.rs | 46 +++++++++----
drivers/gpu/nova-core/gpu.rs | 43 +++++++-----
drivers/gpu/nova-core/gsp/commands.rs | 27 ++++++++
drivers/gpu/nova-core/gsp/fw/commands.rs | 12 ++++
drivers/gpu/nova-core/gsp/hal.rs | 2 +-
drivers/gpu/nova-core/nova_core.rs | 1 +
drivers/gpu/nova-core/num.rs | 2 +-
include/uapi/drm/nova_drm.h | 82 +++++++++++++++++++++++
rust/kernel/uaccess.rs | 14 ++++
12 files changed, 352 insertions(+), 46 deletions(-)
create mode 100644 drivers/gpu/nova-core/api.rs
--
2.54.0
^ permalink raw reply [flat|nested] 13+ messages in thread
* [PATCH v5 01/11] gpu: nova-core: Add public driver API to nova-core
2026-08-28 3:35 [PATCH v5 00/11] gpu: nova: Export parameters from nova-core to nova-drm Alistair Popple
@ 2026-08-28 3:35 ` Alistair Popple
2026-08-28 3:35 ` [PATCH v5 02/11] drm: nova: Add DRM registration data Alistair Popple
` (10 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Alistair Popple @ 2026-08-28 3:35 UTC (permalink / raw)
To: nova-gpu
Cc: Alistair Popple, M Henning, Danilo Krummrich, Alice Ryhl,
David Airlie, Alexandre Courbot, Benno Lossin, Gary Guo,
Eliot Courtney, John Hubbard, linux-kernel, dri-devel,
rust-for-linux
Nova core will be used to export core functionality to other drivers
which will bind to it via auxiliary bus devices. Add a NovaCoreApi type
which drivers can use to call nova-core methods.
Auxiliary bus drivers can obtain a handle to call nova-core methods on
a particular GPU using NovaCoreApi::of(). This takes a reference to a
bound auxiliary bus device and returns a handle to NovaCoreApi.
Signed-off-by: Alistair Popple <apopple@nvidia.com>
---
Changes since v4:
- Move the `_reg` field declaration, since it must be dropped before
`gpu` to satisfy the safety requirements of holding a reference to it.
Changes since v2:
- Add accidentally dropped TODO comment
Changes since v1:
- Rework unsafe pin-init to make safety comments clearer, suggested
by Danilo.
- s/allow(dead_code)/expect(unused)/
---
drivers/gpu/nova-core/api.rs | 29 +++++++++++++++++++
drivers/gpu/nova-core/driver.rs | 46 +++++++++++++++++++++---------
drivers/gpu/nova-core/gsp/hal.rs | 2 +-
drivers/gpu/nova-core/nova_core.rs | 1 +
4 files changed, 64 insertions(+), 14 deletions(-)
create mode 100644 drivers/gpu/nova-core/api.rs
diff --git a/drivers/gpu/nova-core/api.rs b/drivers/gpu/nova-core/api.rs
new file mode 100644
index 000000000000..610cfc01111e
--- /dev/null
+++ b/drivers/gpu/nova-core/api.rs
@@ -0,0 +1,29 @@
+// SPDX-License-Identifier: GPL-2.0
+
+//! Nova-core auxbus data. Contains all the methods used by the auxbus drivers
+//! to interact with nova-core.
+
+use core::pin::Pin;
+
+use kernel::{
+ auxiliary,
+ device::Bound,
+ prelude::*,
+ types::CovariantForLt, //
+};
+
+use crate::gpu::Gpu;
+
+/// API handle for the auxiliary bus child drivers to interact with nova-core.
+pub struct NovaCoreApi<'bound> {
+ #[expect(unused)]
+ pub(crate) gpu: Pin<&'bound Gpu<'bound>>,
+}
+
+impl NovaCoreApi<'_> {
+ /// Obtain a [`NovaCoreApi`] handle from an auxiliary device registered
+ /// by nova-core.
+ pub fn of(adev: &auxiliary::Device<Bound>) -> Result<Pin<&NovaCoreApi<'_>>> {
+ adev.registration_data::<CovariantForLt!(NovaCoreApi<'_>)>()
+ }
+}
diff --git a/drivers/gpu/nova-core/driver.rs b/drivers/gpu/nova-core/driver.rs
index 48380ac15f68..078a3371a7d6 100644
--- a/drivers/gpu/nova-core/driver.rs
+++ b/drivers/gpu/nova-core/driver.rs
@@ -18,18 +18,21 @@
types::CovariantForLt,
};
-use crate::gpu::Gpu;
+use crate::{
+ api::NovaCoreApi,
+ gpu::Gpu, //
+};
/// Counter for generating unique auxiliary device IDs.
static AUXILIARY_ID_COUNTER: Atomic<u32> = Atomic::new(0);
#[pin_data]
pub(crate) struct NovaCore<'bound> {
+ #[allow(clippy::type_complexity)]
+ _reg: auxiliary::Registration<'bound, CovariantForLt!(NovaCoreApi<'_>)>,
#[pin]
pub(crate) gpu: Gpu<'bound>,
bar: pci::Bar<'bound, BAR0_SIZE>,
- #[allow(clippy::type_complexity)]
- _reg: auxiliary::Registration<'bound, CovariantForLt!(())>,
}
pub(crate) struct NovaCoreDriver;
@@ -83,18 +86,35 @@ fn probe<'bound>(
// TODO: Use `&bar` self-referential pin-init syntax once available.
//
// SAFETY: `bar` is initialized before this expression is evaluated
- // (`try_pin_init!()` initializes fields in declaration order), lives at a pinned
+ // (`try_pin_init!()` initializes fields in initializer order), lives at a pinned
// stable address, and is dropped after `gpu` (struct field drop order).
gpu <- Gpu::new(pdev, unsafe { &*core::ptr::from_ref(bar) }),
- _reg: auxiliary::Registration::new(
- pdev.as_ref(),
- c"nova-drm",
- // TODO[XARR]: Use XArray or perhaps IDA for proper ID allocation/recycling. For
- // now, use a simple atomic counter that never recycles IDs.
- AUXILIARY_ID_COUNTER.fetch_add(1, Relaxed),
- crate::MODULE_NAME,
- (),
- )?,
+ _reg: {
+ // TODO: Use `&gpu` self-referential pin-init syntax once available.
+ //
+ // SAFETY: `gpu` is initialized before this expression is evaluated
+ // (`try_pin_init!()` initializes fields in initializer order), lives at
+ // a pinned stable address, and is dropped after `_reg` (struct field
+ // drop order).
+ let gpu = unsafe {
+ Pin::new_unchecked(&*core::ptr::from_ref(gpu.as_ref().get_ref()))
+ };
+
+ // SAFETY: `NovaCore` is dropped when the device is unbound;
+ // i.e. `mem::forget()` is never called on it.
+ unsafe {
+ auxiliary::Registration::new_with_lt(
+ pdev.as_ref(),
+ c"nova-drm",
+ // TODO[XARR]: Use XArray or perhaps IDA for proper ID
+ // allocation/recycling. For now, use a simple atomic counter that
+ // never recycles IDs.
+ AUXILIARY_ID_COUNTER.fetch_add(1, Relaxed),
+ crate::MODULE_NAME,
+ NovaCoreApi { gpu },
+ )?
+ }
+ },
}))
})
}
diff --git a/drivers/gpu/nova-core/gsp/hal.rs b/drivers/gpu/nova-core/gsp/hal.rs
index 5850fa0fe0e9..0c8670c57bbb 100644
--- a/drivers/gpu/nova-core/gsp/hal.rs
+++ b/drivers/gpu/nova-core/gsp/hal.rs
@@ -24,7 +24,7 @@
/// The GSP unload code might run in a situation where we cannot load firmware dynamically (e.g.
/// because we are in shutdown and the file system is not accessible anymore). Thus, the firmware
/// required for unloading is prepared at load time, and stored here until it needs to be run.
-pub(super) trait UnloadBundle: Send {
+pub(super) trait UnloadBundle: Send + Sync {
/// Performs the steps required to properly reset the GSP after it has been stopped.
fn run(&self, ctx: &mut GspBootContext<'_, '_>) -> Result;
}
diff --git a/drivers/gpu/nova-core/nova_core.rs b/drivers/gpu/nova-core/nova_core.rs
index 35a8b1214b0e..503898cee042 100644
--- a/drivers/gpu/nova-core/nova_core.rs
+++ b/drivers/gpu/nova-core/nova_core.rs
@@ -10,6 +10,7 @@
InPlaceModule, //
};
+pub mod api;
mod driver;
mod falcon;
mod fb;
--
2.54.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v5 02/11] drm: nova: Add DRM registration data
2026-08-28 3:35 [PATCH v5 00/11] gpu: nova: Export parameters from nova-core to nova-drm Alistair Popple
2026-08-28 3:35 ` [PATCH v5 01/11] gpu: nova-core: Add public driver API to nova-core Alistair Popple
@ 2026-08-28 3:35 ` Alistair Popple
2026-08-28 3:35 ` [PATCH v5 03/11] drm: nova: Add GPU architecture enum to nova-drm UAPI Alistair Popple
` (9 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Alistair Popple @ 2026-08-28 3:35 UTC (permalink / raw)
To: nova-gpu
Cc: Alistair Popple, M Henning, Danilo Krummrich, Alice Ryhl,
David Airlie, Alexandre Courbot, Benno Lossin, Gary Guo,
Eliot Courtney, John Hubbard, linux-kernel, dri-devel,
rust-for-linux
Currently the nova-drm stub driver doesn't really interact with a real
device, so it doesn't have any registration data and has no way to call
into nova-core.
To allow for this add a DrmRegData type which will hold a reference to
the NovaCoreApi associated with the auxbus device.
Signed-off-by: Alistair Popple <apopple@nvidia.com>
Suggested-by: Danilo Krummrich <dakr@kernel.org>
---
Changes from v2:
- Add newline in crate import
Changes from v1:
- Drop unrelated device::Bound removal.
- Switch exisiting import to vertical style.
- s/allow(dead_code)/expect(unused)/
---
drivers/gpu/drm/nova/driver.rs | 17 +++++++++++++++--
drivers/gpu/drm/nova/file.rs | 12 ++++++++----
2 files changed, 23 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/nova/driver.rs b/drivers/gpu/drm/nova/driver.rs
index 739690bc2db5..632137d1c6d7 100644
--- a/drivers/gpu/drm/nova/driver.rs
+++ b/drivers/gpu/drm/nova/driver.rs
@@ -1,5 +1,7 @@
// SPDX-License-Identifier: GPL-2.0
+use core::pin::Pin;
+
use kernel::{
auxiliary,
device::{
@@ -18,6 +20,8 @@
use crate::file::File;
use crate::gem::NovaObject;
+use nova_core::api::NovaCoreApi;
+
pub(crate) struct NovaDriver;
pub(crate) struct Nova<'bound> {
@@ -26,6 +30,12 @@ pub(crate) struct Nova<'bound> {
_reg: drm::Registration<'bound, NovaDriver>,
}
+/// DRM registration data, accessible from ioctl handlers via the registration guard.
+pub(crate) struct DrmRegData<'bound> {
+ #[expect(unused)]
+ pub(crate) api: Pin<&'bound NovaCoreApi<'bound>>,
+}
+
/// Convienence type alias for the DRM device type for this driver
pub(crate) type NovaDevice<Ctx = drm::Normal> = drm::Device<NovaDriver, Ctx>;
@@ -60,9 +70,12 @@ fn probe<'bound>(
_info: &'bound Self::IdInfo,
) -> impl PinInit<Self::Data<'bound>, Error> + 'bound {
let drm = drm::UnregisteredDevice::<Self>::new(adev, Ok(()))?;
+ let reg_data = DrmRegData {
+ api: NovaCoreApi::of(adev)?,
+ };
// SAFETY: `reg` is stored in `Nova` and dropped when the driver is unbound; it is
// never forgotten.
- let reg = unsafe { drm::Registration::new(adev.as_ref(), drm, (), 0)? };
+ let reg = unsafe { drm::Registration::new(adev.as_ref(), drm, reg_data, 0)? };
Ok(Nova {
drm: reg.device().into(),
@@ -74,7 +87,7 @@ fn probe<'bound>(
#[vtable]
impl drm::Driver for NovaDriver {
type Data = ();
- type RegistrationData<'a> = ();
+ type RegistrationData<'a> = DrmRegData<'a>;
type File = File;
type Object = gem::Object<NovaObject>;
type ParentDevice<Ctx: DeviceContext> = auxiliary::Device<Ctx>;
diff --git a/drivers/gpu/drm/nova/file.rs b/drivers/gpu/drm/nova/file.rs
index 298c02bacb4b..1156df51c533 100644
--- a/drivers/gpu/drm/nova/file.rs
+++ b/drivers/gpu/drm/nova/file.rs
@@ -1,6 +1,10 @@
// SPDX-License-Identifier: GPL-2.0
-use crate::driver::{NovaDevice, NovaDriver};
+use crate::driver::{
+ DrmRegData,
+ NovaDevice,
+ NovaDriver, //
+};
use crate::gem::NovaObject;
use kernel::{
alloc::flags::*,
@@ -30,7 +34,7 @@ impl File {
/// IOCTL: get_param: Query GPU / driver metadata.
pub(crate) fn get_param(
dev: &NovaDevice<Registered>,
- _reg_data: &(),
+ _reg_data: &DrmRegData<'_>,
getparam: &mut uapi::drm_nova_getparam,
_file: &drm::File<File>,
) -> Result<u32> {
@@ -50,7 +54,7 @@ pub(crate) fn get_param(
/// IOCTL: gem_create: Create a new DRM GEM object.
pub(crate) fn gem_create(
dev: &NovaDevice<Registered>,
- _reg_data: &(),
+ _reg_data: &DrmRegData<'_>,
req: &mut uapi::drm_nova_gem_create,
file: &drm::File<File>,
) -> Result<u32> {
@@ -64,7 +68,7 @@ pub(crate) fn gem_create(
/// IOCTL: gem_info: Query GEM metadata.
pub(crate) fn gem_info(
_dev: &NovaDevice<Registered>,
- _reg_data: &(),
+ _reg_data: &DrmRegData<'_>,
req: &mut uapi::drm_nova_gem_info,
file: &drm::File<File>,
) -> Result<u32> {
--
2.54.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v5 03/11] drm: nova: Add GPU architecture enum to nova-drm UAPI
2026-08-28 3:35 [PATCH v5 00/11] gpu: nova: Export parameters from nova-core to nova-drm Alistair Popple
2026-08-28 3:35 ` [PATCH v5 01/11] gpu: nova-core: Add public driver API to nova-core Alistair Popple
2026-08-28 3:35 ` [PATCH v5 02/11] drm: nova: Add DRM registration data Alistair Popple
@ 2026-08-28 3:35 ` Alistair Popple
2026-08-28 3:35 ` [PATCH v5 04/11] rust: uaccess: add UserSliceWriter::write_truncated() Alistair Popple
` (8 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Alistair Popple @ 2026-08-28 3:35 UTC (permalink / raw)
To: nova-gpu
Cc: Alistair Popple, M Henning, Danilo Krummrich, Alice Ryhl,
David Airlie, Alexandre Courbot, Benno Lossin, Gary Guo,
Eliot Courtney, John Hubbard, linux-kernel, dri-devel,
rust-for-linux
The GPU architecture to be exposed to user-space. This adds a public
enum to the userspace headers for each chip architecture. Nova-core can
then use this enum to define its architectures.
This does create a coupling between nova-drm and nova-core whereby
nova-core depends on the values defined by the user-space API for
nova-drm. However this is entirely appropriate as nova-core must be
bound by the UAPI headers as the enum values are read by nova-core and
passed through to user-space.
It also requires a minor change to the bounded_enum! macro to match the
architecture values in an expression context.
Signed-off-by: Alistair Popple <apopple@nvidia.com>
---
Changes since v4:
- Rewritten for v5 as exposing chip-id was dropped.
Changes since v3:
- New for v4, split out from "drm: nova: Add GETPARAM parameter to read
the GPU chipset"
---
drivers/gpu/nova-core/gpu.rs | 28 +++++++++++++++++-----------
drivers/gpu/nova-core/num.rs | 2 +-
include/uapi/drm/nova_drm.h | 12 ++++++++++++
3 files changed, 30 insertions(+), 12 deletions(-)
diff --git a/drivers/gpu/nova-core/gpu.rs b/drivers/gpu/nova-core/gpu.rs
index 9e4232645a7e..0c12ef145981 100644
--- a/drivers/gpu/nova-core/gpu.rs
+++ b/drivers/gpu/nova-core/gpu.rs
@@ -10,7 +10,8 @@
num::Bounded,
pci,
prelude::*,
- sizes::SizeConstants, //
+ sizes::SizeConstants,
+ uapi, //
};
use crate::{
@@ -36,8 +37,9 @@
mod regs;
macro_rules! define_chipset {
- ({ $($variant:ident = $value:expr),* $(,)* }) =>
+ ({ $($variant:ident = $value:literal),* $(,)* }) =>
{
+ ::kernel::macros::paste!(
/// Enum representation of the GPU chipset.
#[derive(fmt::Debug, Copy, Clone, PartialOrd, Ord, PartialEq, Eq)]
pub(crate) enum Chipset {
@@ -49,7 +51,6 @@ impl Chipset {
$( Chipset::$variant, )*
];
- ::kernel::macros::paste!(
/// Returns the name of this chipset, in lowercase.
///
/// # Examples
@@ -65,7 +66,6 @@ pub(crate) const fn name(&self) -> &'static str {
)*
}
}
- );
}
// TODO[FPRI]: replace with something like derive(FromPrimitive)
@@ -74,11 +74,14 @@ impl TryFrom<u32> for Chipset {
fn try_from(value: u32) -> Result<Self, Self::Error> {
match value {
- $( $value => Ok(Chipset::$variant), )*
+ $(
+ $value => Ok(Chipset::$variant),
+ )*
_ => Err(ENODEV),
}
}
}
+ );
}
}
@@ -158,13 +161,16 @@ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
bounded_enum! {
/// Enum representation of the GPU generation.
#[derive(fmt::Debug, Copy, Clone)]
+ #[repr(u32)]
pub(crate) enum Architecture with TryFrom<Bounded<u32, 6>> {
- Turing = 0x16,
- Ampere = 0x17,
- Hopper = 0x18,
- Ada = 0x19,
- BlackwellGB10x = 0x1a,
- BlackwellGB20x = 0x1b,
+ Turing = uapi::drm_nova_architecture_NOVA_DRM_ARCHITECTURE_TURING,
+ Ampere = uapi::drm_nova_architecture_NOVA_DRM_ARCHITECTURE_AMPERE,
+ Hopper = uapi::drm_nova_architecture_NOVA_DRM_ARCHITECTURE_HOPPER,
+ Ada = uapi::drm_nova_architecture_NOVA_DRM_ARCHITECTURE_ADA,
+ BlackwellGB10x =
+ uapi::drm_nova_architecture_NOVA_DRM_ARCHITECTURE_BLACKWELL_GB10X,
+ BlackwellGB20x =
+ uapi::drm_nova_architecture_NOVA_DRM_ARCHITECTURE_BLACKWELL_GB20X,
}
}
diff --git a/drivers/gpu/nova-core/num.rs b/drivers/gpu/nova-core/num.rs
index 6eb174d136ab..f4169235bc24 100644
--- a/drivers/gpu/nova-core/num.rs
+++ b/drivers/gpu/nova-core/num.rs
@@ -263,7 +263,7 @@ fn try_from(
) -> kernel::error::Result<Self> {
match value.get() {
$(
- $value => Ok($enum_type::$variant),
+ value if value == $value => Ok($enum_type::$variant),
)*
_ => Err(kernel::error::code::EINVAL),
}
diff --git a/include/uapi/drm/nova_drm.h b/include/uapi/drm/nova_drm.h
index 3ca90ed9d2bb..f0dcbca1908d 100644
--- a/include/uapi/drm/nova_drm.h
+++ b/include/uapi/drm/nova_drm.h
@@ -25,6 +25,18 @@ extern "C" {
*/
#define NOVA_GETPARAM_VRAM_BAR_SIZE 0x1
+/**
+ * enum drm_nova_architecture - GPU architecture identifier
+ */
+enum drm_nova_architecture {
+ NOVA_DRM_ARCHITECTURE_TURING = 0x16,
+ NOVA_DRM_ARCHITECTURE_AMPERE = 0x17,
+ NOVA_DRM_ARCHITECTURE_HOPPER = 0x18,
+ NOVA_DRM_ARCHITECTURE_ADA = 0x19,
+ NOVA_DRM_ARCHITECTURE_BLACKWELL_GB10X = 0x1a,
+ NOVA_DRM_ARCHITECTURE_BLACKWELL_GB20X = 0x1b,
+};
+
/**
* struct drm_nova_getparam - query GPU and driver metadata
*/
--
2.54.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v5 04/11] rust: uaccess: add UserSliceWriter::write_truncated()
2026-08-28 3:35 [PATCH v5 00/11] gpu: nova: Export parameters from nova-core to nova-drm Alistair Popple
` (2 preceding siblings ...)
2026-08-28 3:35 ` [PATCH v5 03/11] drm: nova: Add GPU architecture enum to nova-drm UAPI Alistair Popple
@ 2026-08-28 3:35 ` Alistair Popple
2026-08-28 3:35 ` [PATCH v5 05/11] drm: nova: Add an info ioctl Alistair Popple
` (7 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Alistair Popple @ 2026-08-28 3:35 UTC (permalink / raw)
To: nova-gpu
Cc: Alistair Popple, M Henning, Danilo Krummrich, Alice Ryhl,
David Airlie, Alexandre Courbot, Benno Lossin, Gary Guo,
Eliot Courtney, John Hubbard, linux-kernel, dri-devel,
rust-for-linux
Add a helper that writes as much of an AsBytes value as fits in the
remaining userspace buffer and returns the number of bytes copied. This
avoids requiring callers of versioned UAPIs to convert values to byte
slices and truncate them manually.
Signed-off-by: Alistair Popple <apopple@nvidia.com>
Suggested-by: Danilo Krummrich <dakr@kernel.org>
---
rust/kernel/uaccess.rs | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/rust/kernel/uaccess.rs b/rust/kernel/uaccess.rs
index 5f6c4d7a1a51..c63b91942631 100644
--- a/rust/kernel/uaccess.rs
+++ b/rust/kernel/uaccess.rs
@@ -624,6 +624,20 @@ pub fn write<T: AsBytes>(&mut self, value: &T) -> Result {
self.length -= len;
Ok(())
}
+
+ /// Writes as much of the provided value as fits in the remaining buffer.
+ ///
+ /// Copies `min(size_of::<T>(), self.len())` bytes to userspace. Returns the number of bytes
+ /// actually written. This is useful for versioned structs where an older userspace may provide
+ /// a smaller buffer than the current kernel struct.
+ ///
+ /// Fails with [`EFAULT`] if the write happens on a bad address. This call may modify the
+ /// associated userspace slice even if it returns an error.
+ pub fn write_truncated<T: AsBytes>(&mut self, value: &T) -> Result<usize> {
+ let len = self.length.min(size_of::<T>());
+ self.write_slice(&value.as_bytes()[..len])?;
+ Ok(len)
+ }
}
/// Reads a nul-terminated string into `dst` and returns the length.
--
2.54.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v5 05/11] drm: nova: Add an info ioctl
2026-08-28 3:35 [PATCH v5 00/11] gpu: nova: Export parameters from nova-core to nova-drm Alistair Popple
` (3 preceding siblings ...)
2026-08-28 3:35 ` [PATCH v5 04/11] rust: uaccess: add UserSliceWriter::write_truncated() Alistair Popple
@ 2026-08-28 3:35 ` Alistair Popple
2026-08-28 3:35 ` [PATCH v5 06/11] drm: nova: Add usable VRAM size to GPU info Alistair Popple
` (6 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Alistair Popple @ 2026-08-28 3:35 UTC (permalink / raw)
To: nova-gpu
Cc: Alistair Popple, M Henning, Danilo Krummrich, Alice Ryhl,
David Airlie, Alexandre Courbot, Benno Lossin, Gary Guo,
Eliot Courtney, John Hubbard, linux-kernel, dri-devel,
rust-for-linux
Add an extensible info ioctl and use it to report basic GPU information.
One of the first things userspace needs to know about a GPU is its
architecture and implementation, so add that as the first field in the
GPU info result.
The ioctl selects an information type by ID and writes the result through
a sized userspace buffer. The kernel truncates results to the supplied
size, allowing information structures to grow and new logical information
groups to be added without introducing new ioctls.
Signed-off-by: Alistair Popple <apopple@nvidia.com>
---
Changes since v4:
- Add a new info ioctl interface as suggested by Danilo
Changes since v3:
- New for v4 - chipid was previously returned as a GETPARAM parameter
---
drivers/gpu/drm/nova/driver.rs | 2 +-
drivers/gpu/drm/nova/file.rs | 57 ++++++++++++++++++++++++++++++++++
drivers/gpu/nova-core/api.rs | 15 +++++++--
drivers/gpu/nova-core/gpu.rs | 9 ++++--
include/uapi/drm/nova_drm.h | 49 +++++++++++++++++++++++++++++
5 files changed, 127 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/nova/driver.rs b/drivers/gpu/drm/nova/driver.rs
index 632137d1c6d7..38f82a7e1738 100644
--- a/drivers/gpu/drm/nova/driver.rs
+++ b/drivers/gpu/drm/nova/driver.rs
@@ -32,7 +32,6 @@ pub(crate) struct Nova<'bound> {
/// DRM registration data, accessible from ioctl handlers via the registration guard.
pub(crate) struct DrmRegData<'bound> {
- #[expect(unused)]
pub(crate) api: Pin<&'bound NovaCoreApi<'bound>>,
}
@@ -98,5 +97,6 @@ impl drm::Driver for NovaDriver {
(NOVA_GETPARAM, drm_nova_getparam, ioctl::RENDER_ALLOW, File::get_param),
(NOVA_GEM_CREATE, drm_nova_gem_create, ioctl::AUTH | ioctl::RENDER_ALLOW, File::gem_create),
(NOVA_GEM_INFO, drm_nova_gem_info, ioctl::AUTH | ioctl::RENDER_ALLOW, File::gem_info),
+ (NOVA_INFO, drm_nova_info, ioctl::RENDER_ALLOW, File::info),
}
}
diff --git a/drivers/gpu/drm/nova/file.rs b/drivers/gpu/drm/nova/file.rs
index 1156df51c533..097bf607485c 100644
--- a/drivers/gpu/drm/nova/file.rs
+++ b/drivers/gpu/drm/nova/file.rs
@@ -17,11 +17,45 @@
},
pci,
prelude::*,
+ transmute::AsBytes,
+ uaccess::UserSlice,
uapi,
};
pub(crate) struct File;
+/// GPU information returned to userspace.
+///
+/// # Invariants
+///
+/// - The layout of this type is identical to `struct drm_nova_gpu_info`.
+/// - All bytes in the value are initialized.
+#[repr(transparent)]
+struct GpuInfo(uapi::drm_nova_gpu_info);
+
+impl GpuInfo {
+ fn new(reg_data: &DrmRegData<'_>) -> Self {
+ Self(uapi::drm_nova_gpu_info {
+ architecture: reg_data.api.architecture(),
+ implementation: reg_data.api.implementation(),
+ })
+ }
+}
+
+// SAFETY: `GpuInfo` has no implicit padding, kernel pointers, or interior
+// mutability, and all of its fields are initialized before it is written to
+// userspace.
+unsafe impl AsBytes for GpuInfo {}
+
+fn write_info<T: AsBytes>(info: &mut uapi::drm_nova_info, value: &T) -> Result {
+ let mut writer =
+ UserSlice::new(UserPtr::from_addr(info.data as usize), info.size as usize).writer();
+
+ info.size = writer.write_truncated(value)? as u32;
+
+ Ok(())
+}
+
impl drm::file::DriverFile for File {
type Driver = NovaDriver;
@@ -78,4 +112,27 @@ pub(crate) fn gem_info(
Ok(0)
}
+
+ /// IOCTL: info: Query device information.
+ pub(crate) fn info(
+ _dev: &NovaDevice<Registered>,
+ reg_data: &DrmRegData<'_>,
+ info: &mut uapi::drm_nova_info,
+ _file: &drm::File<File>,
+ ) -> Result<u32> {
+ if info.data == 0 {
+ info.size = match info.id {
+ uapi::DRM_NOVA_INFO_GPU => size_of::<GpuInfo>() as u32,
+ _ => return Err(EINVAL),
+ };
+ return Ok(0);
+ }
+
+ match info.id {
+ uapi::DRM_NOVA_INFO_GPU => write_info(info, &GpuInfo::new(reg_data))?,
+ _ => return Err(EINVAL),
+ }
+
+ Ok(0)
+ }
}
diff --git a/drivers/gpu/nova-core/api.rs b/drivers/gpu/nova-core/api.rs
index 610cfc01111e..cff730a38c1d 100644
--- a/drivers/gpu/nova-core/api.rs
+++ b/drivers/gpu/nova-core/api.rs
@@ -12,11 +12,12 @@
types::CovariantForLt, //
};
-use crate::gpu::Gpu;
+use crate::gpu::{
+ Gpu, //
+};
/// API handle for the auxiliary bus child drivers to interact with nova-core.
pub struct NovaCoreApi<'bound> {
- #[expect(unused)]
pub(crate) gpu: Pin<&'bound Gpu<'bound>>,
}
@@ -26,4 +27,14 @@ impl NovaCoreApi<'_> {
pub fn of(adev: &auxiliary::Device<Bound>) -> Result<Pin<&NovaCoreApi<'_>>> {
adev.registration_data::<CovariantForLt!(NovaCoreApi<'_>)>()
}
+
+ /// Returns the architecture identifier of this GPU.
+ pub fn architecture(&self) -> u32 {
+ self.gpu.spec.chipset.arch() as u32
+ }
+
+ /// Returns the implementation identifier of this GPU.
+ pub fn implementation(&self) -> u32 {
+ self.gpu.spec.chipset.implementation()
+ }
}
diff --git a/drivers/gpu/nova-core/gpu.rs b/drivers/gpu/nova-core/gpu.rs
index 0c12ef145981..740466af268d 100644
--- a/drivers/gpu/nova-core/gpu.rs
+++ b/drivers/gpu/nova-core/gpu.rs
@@ -138,6 +138,11 @@ pub(crate) const fn arch(self) -> Architecture {
}
}
+ /// Returns the implementation identifier of this chipset.
+ pub(crate) const fn implementation(self) -> u32 {
+ self as u32 & 0xf
+ }
+
/// Returns the address range of the PCI config mirror space.
pub(crate) fn pci_config_mirror_range(self) -> Range<u32> {
hal::gpu_hal(self).pci_config_mirror_range()
@@ -198,7 +203,7 @@ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
/// Structure holding a basic description of the GPU: `Chipset` and `Revision`.
#[derive(Clone, Copy)]
pub(crate) struct Spec {
- chipset: Chipset,
+ pub(crate) chipset: Chipset,
revision: Revision,
}
@@ -286,7 +291,7 @@ struct GspResources<'gpu> {
/// Structure holding the resources required to operate the GPU.
#[pin_data]
pub(crate) struct Gpu<'gpu> {
- spec: Spec,
+ pub(crate) spec: Spec,
/// Static GPU information as provided by the GSP.
gsp_static_info: GetGspStaticInfoReply,
/// GSP and its resources.
diff --git a/include/uapi/drm/nova_drm.h b/include/uapi/drm/nova_drm.h
index f0dcbca1908d..300285b520a3 100644
--- a/include/uapi/drm/nova_drm.h
+++ b/include/uapi/drm/nova_drm.h
@@ -92,9 +92,56 @@ struct drm_nova_gem_info {
__u64 size;
};
+/**
+ * struct drm_nova_info - query device information
+ */
+struct drm_nova_info {
+ /**
+ * @id: The identifier of the information to query.
+ */
+ __u32 id;
+
+ /**
+ * @size: The amount of space allocated by userspace at @data. The kernel
+ * will return the number of bytes it wrote.
+ */
+ __u32 size;
+
+ /**
+ * @data: Pointer to the userspace buffer into which the queried
+ * information will be written.
+ */
+ __u64 data;
+};
+
+/**
+ * DRM_NOVA_INFO_GPU
+ *
+ * Query GPU information. The result is returned in a
+ * &struct drm_nova_gpu_info.
+ */
+#define DRM_NOVA_INFO_GPU 0x00
+
+/**
+ * struct drm_nova_gpu_info - GPU information
+ */
+struct drm_nova_gpu_info {
+ /**
+ * @architecture: GPU architecture identifier. See
+ * &enum drm_nova_architecture for currently known architectures.
+ */
+ __u32 architecture;
+
+ /**
+ * @implementation: GPU implementation identifier.
+ */
+ __u32 implementation;
+};
+
#define DRM_NOVA_GETPARAM 0x00
#define DRM_NOVA_GEM_CREATE 0x01
#define DRM_NOVA_GEM_INFO 0x02
+#define DRM_NOVA_INFO 0x03
/* Note: this is an enum so that it can be resolved by Rust bindgen. */
enum {
@@ -104,6 +151,8 @@ enum {
struct drm_nova_gem_create),
DRM_IOCTL_NOVA_GEM_INFO = DRM_IOWR(DRM_COMMAND_BASE + DRM_NOVA_GEM_INFO,
struct drm_nova_gem_info),
+ DRM_IOCTL_NOVA_INFO = DRM_IOWR(DRM_COMMAND_BASE + DRM_NOVA_INFO,
+ struct drm_nova_info),
};
#if defined(__cplusplus)
--
2.54.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v5 06/11] drm: nova: Add usable VRAM size to GPU info
2026-08-28 3:35 [PATCH v5 00/11] gpu: nova: Export parameters from nova-core to nova-drm Alistair Popple
` (4 preceding siblings ...)
2026-08-28 3:35 ` [PATCH v5 05/11] drm: nova: Add an info ioctl Alistair Popple
@ 2026-08-28 3:35 ` Alistair Popple
2026-08-28 3:35 ` [PATCH v5 07/11] drm: nova: Use nova-core to read VRAM_BAR_SIZE parameter Alistair Popple
` (5 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Alistair Popple @ 2026-08-28 3:35 UTC (permalink / raw)
To: nova-gpu
Cc: Alistair Popple, M Henning, Danilo Krummrich, Alice Ryhl,
David Airlie, Alexandre Courbot, Benno Lossin, Gary Guo,
Eliot Courtney, John Hubbard, linux-kernel, dri-devel,
rust-for-linux
Add a field to the GPU info struct containing the total usable
framebuffer size. The usable framebuffer excludes GSP carveouts and
other protected regions, so it may differ from the BAR size and total
physical VRAM.
Signed-off-by: Alistair Popple <apopple@nvidia.com>
---
Changes since v3:
- Partially new for v4 - previously a separate scalar GETPARAM
parameter
---
drivers/gpu/drm/nova/file.rs | 1 +
drivers/gpu/nova-core/api.rs | 5 +++++
drivers/gpu/nova-core/gpu.rs | 6 ++----
drivers/gpu/nova-core/gsp/commands.rs | 8 ++++++++
include/uapi/drm/nova_drm.h | 6 ++++++
5 files changed, 22 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/nova/file.rs b/drivers/gpu/drm/nova/file.rs
index 097bf607485c..cd80c5402eba 100644
--- a/drivers/gpu/drm/nova/file.rs
+++ b/drivers/gpu/drm/nova/file.rs
@@ -38,6 +38,7 @@ fn new(reg_data: &DrmRegData<'_>) -> Self {
Self(uapi::drm_nova_gpu_info {
architecture: reg_data.api.architecture(),
implementation: reg_data.api.implementation(),
+ vram_size: reg_data.api.vram_size(),
})
}
}
diff --git a/drivers/gpu/nova-core/api.rs b/drivers/gpu/nova-core/api.rs
index cff730a38c1d..1e73d27d701c 100644
--- a/drivers/gpu/nova-core/api.rs
+++ b/drivers/gpu/nova-core/api.rs
@@ -37,4 +37,9 @@ pub fn architecture(&self) -> u32 {
pub fn implementation(&self) -> u32 {
self.gpu.spec.chipset.implementation()
}
+
+ /// Returns the total usable VRAM size of this GPU in bytes.
+ pub fn vram_size(&self) -> u64 {
+ self.gpu.gsp_static_info.vram_size()
+ }
}
diff --git a/drivers/gpu/nova-core/gpu.rs b/drivers/gpu/nova-core/gpu.rs
index 740466af268d..3e074541af30 100644
--- a/drivers/gpu/nova-core/gpu.rs
+++ b/drivers/gpu/nova-core/gpu.rs
@@ -293,7 +293,7 @@ struct GspResources<'gpu> {
pub(crate) struct Gpu<'gpu> {
pub(crate) spec: Spec,
/// Static GPU information as provided by the GSP.
- gsp_static_info: GetGspStaticInfoReply,
+ pub(crate) gsp_static_info: GetGspStaticInfoReply,
/// GSP and its resources.
#[pin]
gsp_resources: GspResources<'gpu>,
@@ -414,9 +414,7 @@ pub(crate) fn new(
dev_dbg!(
dev,
"Total usable VRAM: {} MiB\n",
- info.usable_fb_regions.iter().fold(0u64, |res, region| res
- .saturating_add(region.end - region.start))
- / u64::SZ_1M
+ info.vram_size() / u64::SZ_1M
);
}
diff --git a/drivers/gpu/nova-core/gsp/commands.rs b/drivers/gpu/nova-core/gsp/commands.rs
index ffc25fd8c47b..6453184af55b 100644
--- a/drivers/gpu/nova-core/gsp/commands.rs
+++ b/drivers/gpu/nova-core/gsp/commands.rs
@@ -261,6 +261,14 @@ pub(crate) fn gpu_name(&self) -> core::result::Result<&str, GpuNameError> {
.to_str()
.map_err(GpuNameError::InvalidUtf8)
}
+
+ /// Returns the total usable VRAM size in bytes, i.e. the summed lengths of all usable FB
+ /// regions.
+ pub(crate) fn vram_size(&self) -> u64 {
+ self.usable_fb_regions.iter().fold(0, |size, region| {
+ size.saturating_add(region.end - region.start)
+ })
+ }
}
pub(crate) use fw::commands::PowerStateLevel;
diff --git a/include/uapi/drm/nova_drm.h b/include/uapi/drm/nova_drm.h
index 300285b520a3..b80bb50acaa1 100644
--- a/include/uapi/drm/nova_drm.h
+++ b/include/uapi/drm/nova_drm.h
@@ -136,6 +136,12 @@ struct drm_nova_gpu_info {
* @implementation: GPU implementation identifier.
*/
__u32 implementation;
+
+ /**
+ * @vram_size: Amount of usable FB, excluding GSP carveouts and protected
+ * regions.
+ */
+ __u64 vram_size;
};
#define DRM_NOVA_GETPARAM 0x00
--
2.54.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v5 07/11] drm: nova: Use nova-core to read VRAM_BAR_SIZE parameter
2026-08-28 3:35 [PATCH v5 00/11] gpu: nova: Export parameters from nova-core to nova-drm Alistair Popple
` (5 preceding siblings ...)
2026-08-28 3:35 ` [PATCH v5 06/11] drm: nova: Add usable VRAM size to GPU info Alistair Popple
@ 2026-08-28 3:35 ` Alistair Popple
2026-08-28 3:35 ` [PATCH v5 08/11] drm: nova: Expose a render node Alistair Popple
` (4 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Alistair Popple @ 2026-08-28 3:35 UTC (permalink / raw)
To: nova-gpu
Cc: Alistair Popple, M Henning, Danilo Krummrich, Alice Ryhl,
David Airlie, Alexandre Courbot, Benno Lossin, Gary Guo,
Eliot Courtney, John Hubbard, linux-kernel, dri-devel,
rust-for-linux
Currently nova-drm reads the VRAM BAR size directly from the PCIe device
which requires trying to cast the parent device into a PCIe device. This
obviously requires the parent device to actually be a PCIe bus device.
Whilst that is true today it may not always be the case, and there
is no reason to make this assumption now that NovaCoreApi can hold a
reference to the bound PCIe device.
So convert nova-drm to using nova-core to obtain the VRAM_BAR_SIZE
parameter.
Signed-off-by: Alistair Popple <apopple@nvidia.com>
---
Changes from v2:
- Update nova-core API to use bar1_size() instead of vram_bar_size() as
this is used internally throughout our chip HW.
---
drivers/gpu/drm/nova/file.rs | 12 +++---------
drivers/gpu/nova-core/api.rs | 8 ++++++++
drivers/gpu/nova-core/driver.rs | 2 +-
3 files changed, 12 insertions(+), 10 deletions(-)
diff --git a/drivers/gpu/drm/nova/file.rs b/drivers/gpu/drm/nova/file.rs
index cd80c5402eba..6fc169c66d02 100644
--- a/drivers/gpu/drm/nova/file.rs
+++ b/drivers/gpu/drm/nova/file.rs
@@ -8,14 +8,11 @@
use crate::gem::NovaObject;
use kernel::{
alloc::flags::*,
- auxiliary,
- device::Bound,
drm::{
self,
gem::BaseObject,
Registered, //
},
- pci,
prelude::*,
transmute::AsBytes,
uaccess::UserSlice,
@@ -68,16 +65,13 @@ fn open(_dev: &NovaDevice) -> Result<Pin<KBox<Self>>> {
impl File {
/// IOCTL: get_param: Query GPU / driver metadata.
pub(crate) fn get_param(
- dev: &NovaDevice<Registered>,
- _reg_data: &DrmRegData<'_>,
+ _dev: &NovaDevice<Registered>,
+ reg_data: &DrmRegData<'_>,
getparam: &mut uapi::drm_nova_getparam,
_file: &drm::File<File>,
) -> Result<u32> {
- let adev: &auxiliary::Device<Bound> = dev.as_ref();
- let pdev: &pci::Device<Bound> = adev.parent().try_into()?;
-
let value = match getparam.param as u32 {
- uapi::NOVA_GETPARAM_VRAM_BAR_SIZE => pdev.resource_len(1)?,
+ uapi::NOVA_GETPARAM_VRAM_BAR_SIZE => reg_data.api.bar1_size()?,
_ => return Err(EINVAL),
};
diff --git a/drivers/gpu/nova-core/api.rs b/drivers/gpu/nova-core/api.rs
index 1e73d27d701c..f4fd78f9c321 100644
--- a/drivers/gpu/nova-core/api.rs
+++ b/drivers/gpu/nova-core/api.rs
@@ -8,6 +8,7 @@
use kernel::{
auxiliary,
device::Bound,
+ pci,
prelude::*,
types::CovariantForLt, //
};
@@ -19,6 +20,7 @@
/// API handle for the auxiliary bus child drivers to interact with nova-core.
pub struct NovaCoreApi<'bound> {
pub(crate) gpu: Pin<&'bound Gpu<'bound>>,
+ pub(crate) pdev: &'bound pci::Device<Bound>,
}
impl NovaCoreApi<'_> {
@@ -38,6 +40,12 @@ pub fn implementation(&self) -> u32 {
self.gpu.spec.chipset.implementation()
}
+ /// Returns the size of the PCIe BAR used for accessing VRAM, typically
+ /// BAR1.
+ pub fn bar1_size(&self) -> Result<u64> {
+ self.pdev.resource_len(1)
+ }
+
/// Returns the total usable VRAM size of this GPU in bytes.
pub fn vram_size(&self) -> u64 {
self.gpu.gsp_static_info.vram_size()
diff --git a/drivers/gpu/nova-core/driver.rs b/drivers/gpu/nova-core/driver.rs
index 078a3371a7d6..e0e84f5f9c5c 100644
--- a/drivers/gpu/nova-core/driver.rs
+++ b/drivers/gpu/nova-core/driver.rs
@@ -111,7 +111,7 @@ fn probe<'bound>(
// never recycles IDs.
AUXILIARY_ID_COUNTER.fetch_add(1, Relaxed),
crate::MODULE_NAME,
- NovaCoreApi { gpu },
+ NovaCoreApi { gpu, pdev },
)?
}
},
--
2.54.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v5 08/11] drm: nova: Expose a render node
2026-08-28 3:35 [PATCH v5 00/11] gpu: nova: Export parameters from nova-core to nova-drm Alistair Popple
` (6 preceding siblings ...)
2026-08-28 3:35 ` [PATCH v5 07/11] drm: nova: Use nova-core to read VRAM_BAR_SIZE parameter Alistair Popple
@ 2026-08-28 3:35 ` Alistair Popple
2026-08-28 3:35 ` [PATCH v5 09/11] drm: nova: Report GPU name in GPU info Alistair Popple
` (3 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Alistair Popple @ 2026-08-28 3:35 UTC (permalink / raw)
To: nova-gpu
Cc: Alistair Popple, M Henning, Danilo Krummrich, Alice Ryhl,
David Airlie, Alexandre Courbot, Benno Lossin, Gary Guo,
Eliot Courtney, John Hubbard, linux-kernel, dri-devel,
rust-for-linux
nova-drm currently only exposes a primary node even though all of its
ioctls are already marked DRM_RENDER_ALLOW. Set the DRIVER_RENDER
feature so that a render node (/dev/dri/renderDXX) is created as well.
This is required to allow render and compute clients to interact with
nova-drm.
Signed-off-by: Alistair Popple <apopple@nvidia.com>
---
Changes since v2:
- New for v3.
---
drivers/gpu/drm/nova/driver.rs | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/gpu/drm/nova/driver.rs b/drivers/gpu/drm/nova/driver.rs
index 38f82a7e1738..296fc3c49806 100644
--- a/drivers/gpu/drm/nova/driver.rs
+++ b/drivers/gpu/drm/nova/driver.rs
@@ -92,6 +92,7 @@ impl drm::Driver for NovaDriver {
type ParentDevice<Ctx: DeviceContext> = auxiliary::Device<Ctx>;
const INFO: drm::DriverInfo = INFO;
+ const FEAT_RENDER: bool = true;
kernel::declare_drm_ioctls! {
(NOVA_GETPARAM, drm_nova_getparam, ioctl::RENDER_ALLOW, File::get_param),
--
2.54.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v5 09/11] drm: nova: Report GPU name in GPU info
2026-08-28 3:35 [PATCH v5 00/11] gpu: nova: Export parameters from nova-core to nova-drm Alistair Popple
` (7 preceding siblings ...)
2026-08-28 3:35 ` [PATCH v5 08/11] drm: nova: Expose a render node Alistair Popple
@ 2026-08-28 3:35 ` Alistair Popple
2026-08-28 3:35 ` [PATCH v5 10/11] drm: nova: Report GPU short " Alistair Popple
` (2 subsequent siblings)
11 siblings, 0 replies; 13+ messages in thread
From: Alistair Popple @ 2026-08-28 3:35 UTC (permalink / raw)
To: nova-gpu
Cc: Alistair Popple, M Henning, Danilo Krummrich, Alice Ryhl,
David Airlie, Alexandre Courbot, Benno Lossin, Gary Guo,
Eliot Courtney, John Hubbard, linux-kernel, dri-devel,
rust-for-linux
Add the full GPU name to the GPU info structure.
Signed-off-by: Alistair Popple <apopple@nvidia.com>
---
Changes since v4:
- New for v5
---
drivers/gpu/drm/nova/file.rs | 1 +
drivers/gpu/nova-core/api.rs | 5 +++++
drivers/gpu/nova-core/gsp/commands.rs | 5 +++++
include/uapi/drm/nova_drm.h | 5 +++++
4 files changed, 16 insertions(+)
diff --git a/drivers/gpu/drm/nova/file.rs b/drivers/gpu/drm/nova/file.rs
index 6fc169c66d02..ab04a10d3353 100644
--- a/drivers/gpu/drm/nova/file.rs
+++ b/drivers/gpu/drm/nova/file.rs
@@ -36,6 +36,7 @@ fn new(reg_data: &DrmRegData<'_>) -> Self {
architecture: reg_data.api.architecture(),
implementation: reg_data.api.implementation(),
vram_size: reg_data.api.vram_size(),
+ gpu_name: reg_data.api.gpu_name(),
})
}
}
diff --git a/drivers/gpu/nova-core/api.rs b/drivers/gpu/nova-core/api.rs
index f4fd78f9c321..e6789f1485d1 100644
--- a/drivers/gpu/nova-core/api.rs
+++ b/drivers/gpu/nova-core/api.rs
@@ -24,6 +24,11 @@ pub struct NovaCoreApi<'bound> {
}
impl NovaCoreApi<'_> {
+ /// Returns the NUL-terminated full GPU name supplied by GSP-RM.
+ pub fn gpu_name(&self) -> [u8; 64] {
+ *self.gpu.gsp_static_info.gpu_name_bytes()
+ }
+
/// Obtain a [`NovaCoreApi`] handle from an auxiliary device registered
/// by nova-core.
pub fn of(adev: &auxiliary::Device<Bound>) -> Result<Pin<&NovaCoreApi<'_>>> {
diff --git a/drivers/gpu/nova-core/gsp/commands.rs b/drivers/gpu/nova-core/gsp/commands.rs
index 6453184af55b..b8dc64808620 100644
--- a/drivers/gpu/nova-core/gsp/commands.rs
+++ b/drivers/gpu/nova-core/gsp/commands.rs
@@ -251,6 +251,11 @@ pub(crate) enum GpuNameError {
}
impl GetGspStaticInfoReply {
+ /// Returns the full GPU name as a NUL-terminated byte string.
+ pub(crate) fn gpu_name_bytes(&self) -> &[u8; 64] {
+ &self.gpu_name
+ }
+
/// Returns the name of the GPU as a string.
///
/// Returns an error if the string given by the GSP does not contain a null terminator or
diff --git a/include/uapi/drm/nova_drm.h b/include/uapi/drm/nova_drm.h
index b80bb50acaa1..7e11d1bfeb6b 100644
--- a/include/uapi/drm/nova_drm.h
+++ b/include/uapi/drm/nova_drm.h
@@ -142,6 +142,11 @@ struct drm_nova_gpu_info {
* regions.
*/
__u64 vram_size;
+
+ /**
+ * @gpu_name: NUL-terminated full GPU name.
+ */
+ __u8 gpu_name[64];
};
#define DRM_NOVA_GETPARAM 0x00
--
2.54.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v5 10/11] drm: nova: Report GPU short name in GPU info
2026-08-28 3:35 [PATCH v5 00/11] gpu: nova: Export parameters from nova-core to nova-drm Alistair Popple
` (8 preceding siblings ...)
2026-08-28 3:35 ` [PATCH v5 09/11] drm: nova: Report GPU name in GPU info Alistair Popple
@ 2026-08-28 3:35 ` Alistair Popple
2026-08-28 3:35 ` [PATCH v5 11/11] drm: nova: Report GPU GID " Alistair Popple
2026-08-28 6:04 ` [PATCH v5 00/11] gpu: nova: Export parameters from nova-core to nova-drm Alistair Popple
11 siblings, 0 replies; 13+ messages in thread
From: Alistair Popple @ 2026-08-28 3:35 UTC (permalink / raw)
To: nova-gpu
Cc: Alistair Popple, M Henning, Danilo Krummrich, Alice Ryhl,
David Airlie, Alexandre Courbot, Benno Lossin, Gary Guo,
Eliot Courtney, John Hubbard, linux-kernel, dri-devel,
rust-for-linux
Add the short GPU name to the GPU info structure.
Signed-off-by: Alistair Popple <apopple@nvidia.com>
---
Changes since v4:
- New for v5
---
drivers/gpu/drm/nova/file.rs | 1 +
drivers/gpu/nova-core/api.rs | 5 +++++
drivers/gpu/nova-core/gsp/commands.rs | 7 +++++++
drivers/gpu/nova-core/gsp/fw/commands.rs | 5 +++++
include/uapi/drm/nova_drm.h | 5 +++++
5 files changed, 23 insertions(+)
diff --git a/drivers/gpu/drm/nova/file.rs b/drivers/gpu/drm/nova/file.rs
index ab04a10d3353..64d9f68c7cf0 100644
--- a/drivers/gpu/drm/nova/file.rs
+++ b/drivers/gpu/drm/nova/file.rs
@@ -37,6 +37,7 @@ fn new(reg_data: &DrmRegData<'_>) -> Self {
implementation: reg_data.api.implementation(),
vram_size: reg_data.api.vram_size(),
gpu_name: reg_data.api.gpu_name(),
+ gpu_short_name: reg_data.api.gpu_short_name(),
})
}
}
diff --git a/drivers/gpu/nova-core/api.rs b/drivers/gpu/nova-core/api.rs
index e6789f1485d1..c18fa1766892 100644
--- a/drivers/gpu/nova-core/api.rs
+++ b/drivers/gpu/nova-core/api.rs
@@ -29,6 +29,11 @@ impl NovaCoreApi<'_> {
*self.gpu.gsp_static_info.gpu_name_bytes()
}
+ /// Returns the NUL-terminated short GPU name supplied by GSP-RM.
+ pub fn gpu_short_name(&self) -> [u8; 64] {
+ *self.gpu.gsp_static_info.gpu_short_name_bytes()
+ }
+
/// Obtain a [`NovaCoreApi`] handle from an auxiliary device registered
/// by nova-core.
pub fn of(adev: &auxiliary::Device<Bound>) -> Result<Pin<&NovaCoreApi<'_>>> {
diff --git a/drivers/gpu/nova-core/gsp/commands.rs b/drivers/gpu/nova-core/gsp/commands.rs
index b8dc64808620..b9f19be9b29c 100644
--- a/drivers/gpu/nova-core/gsp/commands.rs
+++ b/drivers/gpu/nova-core/gsp/commands.rs
@@ -214,6 +214,7 @@ fn init(&self) -> impl Init<Self::Command, Self::InitError> {
/// The reply from the GSP to the [`GetGspStaticInfo`] command.
pub(crate) struct GetGspStaticInfoReply {
gpu_name: [u8; 64],
+ gpu_short_name: [u8; 64],
/// Usable FB (VRAM) regions for driver memory allocation.
pub(crate) usable_fb_regions: KVec<Range<u64>>,
}
@@ -234,6 +235,7 @@ fn read(
Ok(GetGspStaticInfoReply {
gpu_name: msg.gpu_name_str(),
+ gpu_short_name: msg.gpu_short_name_str(),
usable_fb_regions,
})
}
@@ -256,6 +258,11 @@ impl GetGspStaticInfoReply {
&self.gpu_name
}
+ /// Returns the short GPU name as a NUL-terminated byte string.
+ pub(crate) fn gpu_short_name_bytes(&self) -> &[u8; 64] {
+ &self.gpu_short_name
+ }
+
/// Returns the name of the GPU as a string.
///
/// Returns an error if the string given by the GSP does not contain a null terminator or
diff --git a/drivers/gpu/nova-core/gsp/fw/commands.rs b/drivers/gpu/nova-core/gsp/fw/commands.rs
index 6dc31d1bf5ae..8dddd0876145 100644
--- a/drivers/gpu/nova-core/gsp/fw/commands.rs
+++ b/drivers/gpu/nova-core/gsp/fw/commands.rs
@@ -131,6 +131,11 @@ impl GspStaticConfigInfo {
self.0.gpuNameString
}
+ /// Returns a bytes array containing the NUL-terminated short name of this GPU.
+ pub(crate) fn gpu_short_name_str(&self) -> [u8; 64] {
+ self.0.gpuShortNameString
+ }
+
/// Returns an iterator over valid FB regions from GSP firmware data.
fn fb_regions(
&self,
diff --git a/include/uapi/drm/nova_drm.h b/include/uapi/drm/nova_drm.h
index 7e11d1bfeb6b..f912c5bf3b4f 100644
--- a/include/uapi/drm/nova_drm.h
+++ b/include/uapi/drm/nova_drm.h
@@ -147,6 +147,11 @@ struct drm_nova_gpu_info {
* @gpu_name: NUL-terminated full GPU name.
*/
__u8 gpu_name[64];
+
+ /**
+ * @gpu_short_name: NUL-terminated short GPU name.
+ */
+ __u8 gpu_short_name[64];
};
#define DRM_NOVA_GETPARAM 0x00
--
2.54.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH v5 11/11] drm: nova: Report GPU GID in GPU info
2026-08-28 3:35 [PATCH v5 00/11] gpu: nova: Export parameters from nova-core to nova-drm Alistair Popple
` (9 preceding siblings ...)
2026-08-28 3:35 ` [PATCH v5 10/11] drm: nova: Report GPU short " Alistair Popple
@ 2026-08-28 3:35 ` Alistair Popple
2026-08-28 6:04 ` [PATCH v5 00/11] gpu: nova: Export parameters from nova-core to nova-drm Alistair Popple
11 siblings, 0 replies; 13+ messages in thread
From: Alistair Popple @ 2026-08-28 3:35 UTC (permalink / raw)
To: nova-gpu
Cc: Alistair Popple, M Henning, Danilo Krummrich, Alice Ryhl,
David Airlie, Alexandre Courbot, Benno Lossin, Gary Guo,
Eliot Courtney, John Hubbard, linux-kernel, dri-devel,
rust-for-linux
Add GPU GID to the reported GPU info.
Signed-off-by: Alistair Popple <apopple@nvidia.com>
---
Changes since v4:
- New for v5
---
drivers/gpu/drm/nova/file.rs | 1 +
drivers/gpu/nova-core/api.rs | 5 +++++
drivers/gpu/nova-core/gsp/commands.rs | 7 +++++++
drivers/gpu/nova-core/gsp/fw/commands.rs | 7 +++++++
include/uapi/drm/nova_drm.h | 5 +++++
5 files changed, 25 insertions(+)
diff --git a/drivers/gpu/drm/nova/file.rs b/drivers/gpu/drm/nova/file.rs
index 64d9f68c7cf0..e1223a29f8b1 100644
--- a/drivers/gpu/drm/nova/file.rs
+++ b/drivers/gpu/drm/nova/file.rs
@@ -38,6 +38,7 @@ fn new(reg_data: &DrmRegData<'_>) -> Self {
vram_size: reg_data.api.vram_size(),
gpu_name: reg_data.api.gpu_name(),
gpu_short_name: reg_data.api.gpu_short_name(),
+ gpu_gid: reg_data.api.gpu_gid(),
})
}
}
diff --git a/drivers/gpu/nova-core/api.rs b/drivers/gpu/nova-core/api.rs
index c18fa1766892..ad4b62db1e5f 100644
--- a/drivers/gpu/nova-core/api.rs
+++ b/drivers/gpu/nova-core/api.rs
@@ -34,6 +34,11 @@ impl NovaCoreApi<'_> {
*self.gpu.gsp_static_info.gpu_short_name_bytes()
}
+ /// Returns the 16-byte SHA-1 GPU identifier supplied by GSP-RM.
+ pub fn gpu_gid(&self) -> [u8; 16] {
+ *self.gpu.gsp_static_info.gpu_gid()
+ }
+
/// Obtain a [`NovaCoreApi`] handle from an auxiliary device registered
/// by nova-core.
pub fn of(adev: &auxiliary::Device<Bound>) -> Result<Pin<&NovaCoreApi<'_>>> {
diff --git a/drivers/gpu/nova-core/gsp/commands.rs b/drivers/gpu/nova-core/gsp/commands.rs
index b9f19be9b29c..c01b978f46d2 100644
--- a/drivers/gpu/nova-core/gsp/commands.rs
+++ b/drivers/gpu/nova-core/gsp/commands.rs
@@ -215,6 +215,7 @@ fn init(&self) -> impl Init<Self::Command, Self::InitError> {
pub(crate) struct GetGspStaticInfoReply {
gpu_name: [u8; 64],
gpu_short_name: [u8; 64],
+ gpu_gid: [u8; 16],
/// Usable FB (VRAM) regions for driver memory allocation.
pub(crate) usable_fb_regions: KVec<Range<u64>>,
}
@@ -236,6 +237,7 @@ fn read(
Ok(GetGspStaticInfoReply {
gpu_name: msg.gpu_name_str(),
gpu_short_name: msg.gpu_short_name_str(),
+ gpu_gid: msg.gpu_gid(),
usable_fb_regions,
})
}
@@ -263,6 +265,11 @@ impl GetGspStaticInfoReply {
&self.gpu_short_name
}
+ /// Returns the 16-byte SHA-1 GPU identifier.
+ pub(crate) fn gpu_gid(&self) -> &[u8; 16] {
+ &self.gpu_gid
+ }
+
/// Returns the name of the GPU as a string.
///
/// Returns an error if the string given by the GSP does not contain a null terminator or
diff --git a/drivers/gpu/nova-core/gsp/fw/commands.rs b/drivers/gpu/nova-core/gsp/fw/commands.rs
index 8dddd0876145..1020de51a83c 100644
--- a/drivers/gpu/nova-core/gsp/fw/commands.rs
+++ b/drivers/gpu/nova-core/gsp/fw/commands.rs
@@ -136,6 +136,13 @@ impl GspStaticConfigInfo {
self.0.gpuShortNameString
}
+ /// Returns the 16-byte SHA-1 GPU identifier.
+ pub(crate) fn gpu_gid(&self) -> [u8; 16] {
+ let mut gid = [0; 16];
+ gid.copy_from_slice(&self.0.gidInfo.data[..16]);
+ gid
+ }
+
/// Returns an iterator over valid FB regions from GSP firmware data.
fn fb_regions(
&self,
diff --git a/include/uapi/drm/nova_drm.h b/include/uapi/drm/nova_drm.h
index f912c5bf3b4f..3bd9db27c665 100644
--- a/include/uapi/drm/nova_drm.h
+++ b/include/uapi/drm/nova_drm.h
@@ -152,6 +152,11 @@ struct drm_nova_gpu_info {
* @gpu_short_name: NUL-terminated short GPU name.
*/
__u8 gpu_short_name[64];
+
+ /**
+ * @gpu_gid: 16-byte SHA-1 GPU identifier supplied by GSP-RM.
+ */
+ __u8 gpu_gid[16];
};
#define DRM_NOVA_GETPARAM 0x00
--
2.54.0
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [PATCH v5 00/11] gpu: nova: Export parameters from nova-core to nova-drm
2026-08-28 3:35 [PATCH v5 00/11] gpu: nova: Export parameters from nova-core to nova-drm Alistair Popple
` (10 preceding siblings ...)
2026-08-28 3:35 ` [PATCH v5 11/11] drm: nova: Report GPU GID " Alistair Popple
@ 2026-08-28 6:04 ` Alistair Popple
11 siblings, 0 replies; 13+ messages in thread
From: Alistair Popple @ 2026-08-28 6:04 UTC (permalink / raw)
To: nova-gpu
Cc: M Henning, Danilo Krummrich, Alice Ryhl, David Airlie,
Alexandre Courbot, Benno Lossin, Gary Guo, Eliot Courtney,
John Hubbard, linux-kernel, dri-devel, rust-for-linux
On 2026-08-28 at 13:35 +1000, Alistair Popple <apopple@nvidia.com> wrote...
> This patch series adds some basic GPU properties via a new GPU info
> ioctl. It builds on top of the "drm: Higher-Ranked Lifetime private data"
> series[1] to correctly manage lifetimes of registration data shared between
> DRM, auxbus and nova-core. It's also based on top of "ForLt/CovariantForLt
> split, auxiliary closure API and DevresLt"[2]
>
> A tree with this series applied on top of all pre-requisites is available
> at [3].
>
> Properties are exported via a new NovaCoreApi type which implements methods
> to read data from the GPU. This has been implemented in a separate module
> to make the public API implementations obvious and to keep them in one
> place. Auxiliary bus drivers can obtain a handle to this type using
> NovaCoreApi::of().
>
> This handle can then be stored as part of the DRM registration data and
> used to interact with the GPU via the nova-core driver.
>
> A new info ioctl is introduced which provides an info type field and a
> method for reading extendable structs containing GPU information. This
> series can be tested using the drm-test[4]. A pull request containing
> updated tests will be raised once this has been posted.
Pull request is here:
https://gitlab.freedesktop.org/dakr/drm-test/-/merge_requests/1
> A pull request for
> Mesa has also been raised but is out of date. That will be updated once
> this series has been merged.
>
> Changes since v4:
>
> - No longer export chip-id, instead export architecture and implementation
> - Add a separate info ioctl with types to read GPU info as suggested by
> Danilo
>
> Changes since v3:
>
> - Use an ioctl to return all parameters rather than multiple key/value
> queries
>
> Changes since v2:
>
> - Addressed review Danilo and Alex
> - Minor renames to better align with HW based on internal feedback
>
> Changes since v1:
>
> - Address review comments from Danilo
> - Add an API call to read VRAM PCI BAR size using nova-core
>
> [1] - https://lore.kernel.org/rust-for-linux/20260628145406.2107056-1-dakr@kernel.org/
> [2] - https://lore.kernel.org/driver-core/20260626183630.2585057-1-dakr@kernel.org/
> [3] - https://github.com/apopple-nvidia/linux/tree/nova-drm
> [4] - https://gitlab.freedesktop.org/dakr/drm-test
>
> Cc: M Henning <mhenning@darkrefraction.com>
> Cc: Danilo Krummrich <dakr@kernel.org>
> Cc: Alice Ryhl <aliceryhl@google.com>
> Cc: David Airlie <airlied@gmail.com>
> Cc: Alexandre Courbot <acourbot@nvidia.com>
> Cc: Benno Lossin <lossin@kernel.org>
> Cc: Gary Guo <gary@garyguo.net>
> Cc: Eliot Courtney <ecourtney@nvidia.com>
> Cc: John Hubbard <jhubbard@nvidia.com>
> Cc: linux-kernel@vger.kernel.org
> Cc: nova-gpu@lists.linux.dev
> Cc: dri-devel@lists.freedesktop.org
> Cc: rust-for-linux@vger.kernel.org
>
> Alistair Popple (11):
> gpu: nova-core: Add public driver API to nova-core
> drm: nova: Add DRM registration data
> drm: nova: Add GPU architecture enum to nova-drm UAPI
> rust: uaccess: add UserSliceWriter::write_truncated()
> drm: nova: Add an info ioctl
> drm: nova: Add usable VRAM size to GPU info
> drm: nova: Use nova-core to read VRAM_BAR_SIZE parameter
> drm: nova: Expose a render node
> drm: nova: Report GPU name in GPU info
> drm: nova: Report GPU short name in GPU info
> drm: nova: Report GPU GID in GPU info
>
> drivers/gpu/drm/nova/driver.rs | 18 ++++-
> drivers/gpu/drm/nova/file.rs | 83 ++++++++++++++++++++----
> drivers/gpu/nova-core/api.rs | 68 +++++++++++++++++++
> drivers/gpu/nova-core/driver.rs | 46 +++++++++----
> drivers/gpu/nova-core/gpu.rs | 43 +++++++-----
> drivers/gpu/nova-core/gsp/commands.rs | 27 ++++++++
> drivers/gpu/nova-core/gsp/fw/commands.rs | 12 ++++
> drivers/gpu/nova-core/gsp/hal.rs | 2 +-
> drivers/gpu/nova-core/nova_core.rs | 1 +
> drivers/gpu/nova-core/num.rs | 2 +-
> include/uapi/drm/nova_drm.h | 82 +++++++++++++++++++++++
> rust/kernel/uaccess.rs | 14 ++++
> 12 files changed, 352 insertions(+), 46 deletions(-)
> create mode 100644 drivers/gpu/nova-core/api.rs
>
> --
> 2.54.0
>
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2026-08-28 6:05 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-28 3:35 [PATCH v5 00/11] gpu: nova: Export parameters from nova-core to nova-drm Alistair Popple
2026-08-28 3:35 ` [PATCH v5 01/11] gpu: nova-core: Add public driver API to nova-core Alistair Popple
2026-08-28 3:35 ` [PATCH v5 02/11] drm: nova: Add DRM registration data Alistair Popple
2026-08-28 3:35 ` [PATCH v5 03/11] drm: nova: Add GPU architecture enum to nova-drm UAPI Alistair Popple
2026-08-28 3:35 ` [PATCH v5 04/11] rust: uaccess: add UserSliceWriter::write_truncated() Alistair Popple
2026-08-28 3:35 ` [PATCH v5 05/11] drm: nova: Add an info ioctl Alistair Popple
2026-08-28 3:35 ` [PATCH v5 06/11] drm: nova: Add usable VRAM size to GPU info Alistair Popple
2026-08-28 3:35 ` [PATCH v5 07/11] drm: nova: Use nova-core to read VRAM_BAR_SIZE parameter Alistair Popple
2026-08-28 3:35 ` [PATCH v5 08/11] drm: nova: Expose a render node Alistair Popple
2026-08-28 3:35 ` [PATCH v5 09/11] drm: nova: Report GPU name in GPU info Alistair Popple
2026-08-28 3:35 ` [PATCH v5 10/11] drm: nova: Report GPU short " Alistair Popple
2026-08-28 3:35 ` [PATCH v5 11/11] drm: nova: Report GPU GID " Alistair Popple
2026-08-28 6:04 ` [PATCH v5 00/11] gpu: nova: Export parameters from nova-core to nova-drm Alistair Popple
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox