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 >
