On Mon, Oct 19, 2026 at 5:26 PM Danilo Krummrich <[email protected]> wrote:
>
> The header already documents that its uAPI is unstable and intended for
> development. It may change incompatibly as it is developed upstream.
> Rename it to nova_drm_unstable.h and move it out of include/uapi/ to
> make this more explicit.
>
> As individual interfaces become stable, move them to
> include/uapi/drm/nova_drm.h.
>
> Signed-off-by: Danilo Krummrich <[email protected]>

Acked-by: Faith Ekstrand <[email protected]>

> ---
>  drivers/gpu/drm/nova/nova_drm_unstable.h | 212 +++++++++++++++++++++++
>  include/uapi/drm/nova_drm.h              | 204 +---------------------
>  rust/uapi/uapi_helper.h                  |   2 +
>  3 files changed, 217 insertions(+), 201 deletions(-)
>  create mode 100644 drivers/gpu/drm/nova/nova_drm_unstable.h
>
> diff --git a/drivers/gpu/drm/nova/nova_drm_unstable.h 
> b/drivers/gpu/drm/nova/nova_drm_unstable.h
> new file mode 100644
> index 000000000000..3577dede15a6
> --- /dev/null
> +++ b/drivers/gpu/drm/nova/nova_drm_unstable.h
> @@ -0,0 +1,212 @@
> +/* SPDX-License-Identifier: MIT */
> +
> +#ifndef __NOVA_DRM_UNSTABLE_H__
> +#define __NOVA_DRM_UNSTABLE_H__
> +
> +#include <drm/drm.h>
> +
> +/* DISCLAIMER: Do not use, this is not a stable uAPI.
> + *
> + * This uAPI serves only testing purposes as long as this driver is still in
> + * development. It is required to implement and test infrastructure which is
> + * upstreamed in the context of this driver. See also [1].
> + *
> + * The uAPI in this file may change incompatibly. Stable interfaces should
> + * be moved to include/uapi/drm/nova_drm.h.
> + *
> + * [1] https://lore.kernel.org/dri-devel/Zfsj0_tb-0-tNrJy@cassiopeiae/
> + */
> +
> +#if defined(__cplusplus)
> +extern "C" {
> +#endif
> +
> +/**
> + * 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,
> +};
> +
> +/**
> + * enum drm_nova_chipid - opaque GPU chip identifier
> + *
> + * These values identify the chip a GPU is based on. They are otherwise
> + * opaque: userspace must not assume the values carry any particular meaning
> + * or encoding, only that they may be compared against this enum.
> + */
> +enum drm_nova_chipid {
> +       /* Turing */
> +       NOVA_DRM_CHIPID_TU102                   = 0x162,
> +       NOVA_DRM_CHIPID_TU104                   = 0x164,
> +       NOVA_DRM_CHIPID_TU106                   = 0x166,
> +       NOVA_DRM_CHIPID_TU117                   = 0x167,
> +       NOVA_DRM_CHIPID_TU116                   = 0x168,
> +       /* Ampere */
> +       NOVA_DRM_CHIPID_GA100                   = 0x170,
> +       NOVA_DRM_CHIPID_GA102                   = 0x172,
> +       NOVA_DRM_CHIPID_GA103                   = 0x173,
> +       NOVA_DRM_CHIPID_GA104                   = 0x174,
> +       NOVA_DRM_CHIPID_GA106                   = 0x176,
> +       NOVA_DRM_CHIPID_GA107                   = 0x177,
> +       /* Hopper */
> +       NOVA_DRM_CHIPID_GH100                   = 0x180,
> +       /* Ada */
> +       NOVA_DRM_CHIPID_AD102                   = 0x192,
> +       NOVA_DRM_CHIPID_AD103                   = 0x193,
> +       NOVA_DRM_CHIPID_AD104                   = 0x194,
> +       NOVA_DRM_CHIPID_AD106                   = 0x196,
> +       NOVA_DRM_CHIPID_AD107                   = 0x197,
> +       /* Blackwell GB10x */
> +       NOVA_DRM_CHIPID_GB100                   = 0x1a0,
> +       NOVA_DRM_CHIPID_GB102                   = 0x1a2,
> +       /* Blackwell GB20x */
> +       NOVA_DRM_CHIPID_GB202                   = 0x1b2,
> +       NOVA_DRM_CHIPID_GB203                   = 0x1b3,
> +       NOVA_DRM_CHIPID_GB205                   = 0x1b5,
> +       NOVA_DRM_CHIPID_GB206                   = 0x1b6,
> +       NOVA_DRM_CHIPID_GB207                   = 0x1b7,
> +};
> +
> +/**
> + * struct drm_nova_gem_create - create a new DRM GEM object
> + */
> +struct drm_nova_gem_create {
> +       /**
> +        * @handle: The handle of the new DRM GEM object.
> +        */
> +       __u32 handle;
> +
> +       /**
> +        * @pad: 32 bit padding, should be 0.
> +        */
> +       __u32 pad;
> +
> +       /**
> +        * @size: The size of the new DRM GEM object.
> +        */
> +       __u64 size;
> +};
> +
> +/**
> + * struct drm_nova_gem_info - query DRM GEM object metadata
> + */
> +struct drm_nova_gem_info {
> +       /**
> +        * @handle: The handle of the DRM GEM object to query.
> +        */
> +       __u32 handle;
> +
> +       /**
> +        * @pad: 32 bit padding, should be 0.
> +        */
> +       __u32 pad;
> +
> +       /**
> +        * @size: The size of the DRM GEM object.
> +        */
> +       __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, or the size of the 
> queried
> +        * information structure if @data is NULL.
> +        */
> +       __u32 size;
> +
> +       /**
> +        * @data: Pointer to the userspace buffer into which the queried
> +        * information will be written. May be NULL, in which case nothing is
> +        * written and @size is set to the size of the information structure 
> so
> +        * userspace can allocate a suitably sized buffer.
> +        */
> +       __u64 data;
> +};
> +
> +/**
> + * DRM_NOVA_INFO_GPU
> + *
> + * Query GPU information. The result is returned in a
> + * &struct drm_nova_info_gpu.
> + */
> +#define DRM_NOVA_INFO_GPU              0x00
> +
> +/**
> + * struct drm_nova_info_gpu - GPU information
> + */
> +struct drm_nova_info_gpu {
> +       /**
> +        * @architecture: GPU architecture identifier.
> +        *
> +        * See &enum drm_nova_architecture for currently known architectures.
> +        */
> +       __u32 architecture;
> +
> +       /**
> +        * @chipid: Opaque GPU chip identifier.
> +        *
> +        * See &enum drm_nova_chipid for currently known chips.
> +        */
> +       __u32 chipid;
> +
> +       /**
> +        * @vram_size: Amount of usable FB, excluding GSP carveouts and 
> protected
> +        * regions.
> +        */
> +       __u64 vram_size;
> +
> +       /**
> +        * @vram_bar_size: Size of the PCI BAR aperture used to access VRAM, 
> in bytes.
> +        */
> +       __u64 vram_bar_size;
> +
> +       /**
> +        * @gpu_name: NUL-terminated full GPU name.
> +        */
> +       __u8 gpu_name[64];
> +
> +       /**
> +        * @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_INFO                  0x00
> +#define DRM_NOVA_GEM_CREATE            0x01
> +#define DRM_NOVA_GEM_INFO              0x02
> +
> +/* Note: this is an enum so that it can be resolved by Rust bindgen. */
> +enum {
> +       DRM_IOCTL_NOVA_INFO             = DRM_IOWR(DRM_COMMAND_BASE + 
> DRM_NOVA_INFO,
> +                                                  struct drm_nova_info),
> +       DRM_IOCTL_NOVA_GEM_CREATE       = DRM_IOWR(DRM_COMMAND_BASE + 
> DRM_NOVA_GEM_CREATE,
> +                                                  struct 
> drm_nova_gem_create),
> +       DRM_IOCTL_NOVA_GEM_INFO         = DRM_IOWR(DRM_COMMAND_BASE + 
> DRM_NOVA_GEM_INFO,
> +                                                  struct drm_nova_gem_info),
> +};
> +
> +#if defined(__cplusplus)
> +}
> +#endif
> +
> +#endif /* __NOVA_DRM_UNSTABLE_H__ */
> diff --git a/include/uapi/drm/nova_drm.h b/include/uapi/drm/nova_drm.h
> index d7017ed17143..ad362301e3b1 100644
> --- a/include/uapi/drm/nova_drm.h
> +++ b/include/uapi/drm/nova_drm.h
> @@ -3,207 +3,9 @@
>  #ifndef __NOVA_DRM_H__
>  #define __NOVA_DRM_H__
>
> -#include "drm.h"
> -
> -/* DISCLAIMER: Do not use, this is not a stable uAPI.
> - *
> - * This uAPI serves only testing purposes as long as this driver is still in
> - * development. It is required to implement and test infrastructure which is
> - * upstreamed in the context of this driver. See also [1].
> - *
> - * [1] https://lore.kernel.org/dri-devel/Zfsj0_tb-0-tNrJy@cassiopeiae/T/#u
> - */
> -
> -#if defined(__cplusplus)
> -extern "C" {
> -#endif
> -
> -/**
> - * 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,
> -};
> -
> -/**
> - * enum drm_nova_chipid - opaque GPU chip identifier
> - *
> - * These values identify the chip a GPU is based on. They are otherwise
> - * opaque: userspace must not assume the values carry any particular meaning
> - * or encoding, only that they may be compared against this enum.
> - */
> -enum drm_nova_chipid {
> -       /* Turing */
> -       NOVA_DRM_CHIPID_TU102                   = 0x162,
> -       NOVA_DRM_CHIPID_TU104                   = 0x164,
> -       NOVA_DRM_CHIPID_TU106                   = 0x166,
> -       NOVA_DRM_CHIPID_TU117                   = 0x167,
> -       NOVA_DRM_CHIPID_TU116                   = 0x168,
> -       /* Ampere */
> -       NOVA_DRM_CHIPID_GA100                   = 0x170,
> -       NOVA_DRM_CHIPID_GA102                   = 0x172,
> -       NOVA_DRM_CHIPID_GA103                   = 0x173,
> -       NOVA_DRM_CHIPID_GA104                   = 0x174,
> -       NOVA_DRM_CHIPID_GA106                   = 0x176,
> -       NOVA_DRM_CHIPID_GA107                   = 0x177,
> -       /* Hopper */
> -       NOVA_DRM_CHIPID_GH100                   = 0x180,
> -       /* Ada */
> -       NOVA_DRM_CHIPID_AD102                   = 0x192,
> -       NOVA_DRM_CHIPID_AD103                   = 0x193,
> -       NOVA_DRM_CHIPID_AD104                   = 0x194,
> -       NOVA_DRM_CHIPID_AD106                   = 0x196,
> -       NOVA_DRM_CHIPID_AD107                   = 0x197,
> -       /* Blackwell GB10x */
> -       NOVA_DRM_CHIPID_GB100                   = 0x1a0,
> -       NOVA_DRM_CHIPID_GB102                   = 0x1a2,
> -       /* Blackwell GB20x */
> -       NOVA_DRM_CHIPID_GB202                   = 0x1b2,
> -       NOVA_DRM_CHIPID_GB203                   = 0x1b3,
> -       NOVA_DRM_CHIPID_GB205                   = 0x1b5,
> -       NOVA_DRM_CHIPID_GB206                   = 0x1b6,
> -       NOVA_DRM_CHIPID_GB207                   = 0x1b7,
> -};
> -
> -/**
> - * struct drm_nova_gem_create - create a new DRM GEM object
> - */
> -struct drm_nova_gem_create {
> -       /**
> -        * @handle: The handle of the new DRM GEM object.
> -        */
> -       __u32 handle;
> -
> -       /**
> -        * @pad: 32 bit padding, should be 0.
> -        */
> -       __u32 pad;
> -
> -       /**
> -        * @size: The size of the new DRM GEM object.
> -        */
> -       __u64 size;
> -};
> -
> -/**
> - * struct drm_nova_gem_info - query DRM GEM object metadata
> - */
> -struct drm_nova_gem_info {
> -       /**
> -        * @handle: The handle of the DRM GEM object to query.
> -        */
> -       __u32 handle;
> -
> -       /**
> -        * @pad: 32 bit padding, should be 0.
> -        */
> -       __u32 pad;
> -
> -       /**
> -        * @size: The size of the DRM GEM obejct.
> -        */
> -       __u64 size;
> -};
> -
> -/**
> - * struct drm_nova_info - query device information
> +/*
> + * Stable Nova uAPI. Interfaces should be moved here from
> + * drivers/gpu/drm/nova/nova_drm_unstable.h as they become stable.
>   */
> -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, or the size of the 
> queried
> -        * information structure if @data is NULL.
> -        */
> -       __u32 size;
> -
> -       /**
> -        * @data: Pointer to the userspace buffer into which the queried
> -        * information will be written. May be NULL, in which case nothing is
> -        * written and @size is set to the size of the information structure 
> so
> -        * userspace can allocate a suitably sized buffer.
> -        */
> -       __u64 data;
> -};
> -
> -/**
> - * DRM_NOVA_INFO_GPU
> - *
> - * Query GPU information. The result is returned in a
> - * &struct drm_nova_info_gpu.
> - */
> -#define DRM_NOVA_INFO_GPU              0x00
> -
> -/**
> - * struct drm_nova_info_gpu - GPU information
> - */
> -struct drm_nova_info_gpu {
> -       /**
> -        * @architecture: GPU architecture identifier.
> -        *
> -        * See &enum drm_nova_architecture for currently known architectures.
> -        */
> -       __u32 architecture;
> -
> -       /**
> -        * @chipid: Opaque GPU chip identifier.
> -        *
> -        * See &enum drm_nova_chipid for currently known chips.
> -        */
> -       __u32 chipid;
> -
> -       /**
> -        * @vram_size: Amount of usable FB, excluding GSP carveouts and 
> protected
> -        * regions.
> -        */
> -       __u64 vram_size;
> -
> -       /**
> -        * @vram_bar_size: Size of the PCI BAR aperture used to access VRAM, 
> in bytes.
> -        */
> -       __u64 vram_bar_size;
> -
> -       /**
> -        * @gpu_name: NUL-terminated full GPU name.
> -        */
> -       __u8 gpu_name[64];
> -
> -       /**
> -        * @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_INFO                  0x00
> -#define DRM_NOVA_GEM_CREATE            0x01
> -#define DRM_NOVA_GEM_INFO              0x02
> -
> -/* Note: this is an enum so that it can be resolved by Rust bindgen. */
> -enum {
> -       DRM_IOCTL_NOVA_INFO             = DRM_IOWR(DRM_COMMAND_BASE + 
> DRM_NOVA_INFO,
> -                                                  struct drm_nova_info),
> -       DRM_IOCTL_NOVA_GEM_CREATE       = DRM_IOWR(DRM_COMMAND_BASE + 
> DRM_NOVA_GEM_CREATE,
> -                                                  struct 
> drm_nova_gem_create),
> -       DRM_IOCTL_NOVA_GEM_INFO         = DRM_IOWR(DRM_COMMAND_BASE + 
> DRM_NOVA_GEM_INFO,
> -                                                  struct drm_nova_gem_info),
> -};
> -
> -#if defined(__cplusplus)
> -}
> -#endif
>
>  #endif /* __NOVA_DRM_H__ */
> diff --git a/rust/uapi/uapi_helper.h b/rust/uapi/uapi_helper.h
> index 489748ef642c..44fb6203c0ad 100644
> --- a/rust/uapi/uapi_helper.h
> +++ b/rust/uapi/uapi_helper.h
> @@ -6,6 +6,8 @@
>   * Sorted alphabetically.
>   */
>
> +#include "../../drivers/gpu/drm/nova/nova_drm_unstable.h"
> +
>  #include <uapi/drm/drm.h>
>  #include <uapi/drm/nova_drm.h>
>  #include <uapi/drm/panthor_drm.h>
> --
> 2.56.0
>

Reply via email to