^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* amdgpu_drm.h -- Public header for the amdgpu driver -*- linux-c -*-
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * Copyright 2000 Precision Insight, Inc., Cedar Park, Texas.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * Copyright 2000 VA Linux Systems, Inc., Fremont, California.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * Copyright 2002 Tungsten Graphics, Inc., Cedar Park, Texas.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * Copyright 2014 Advanced Micro Devices, Inc.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) * Permission is hereby granted, free of charge, to any person obtaining a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) * copy of this software and associated documentation files (the "Software"),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) * to deal in the Software without restriction, including without limitation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) * the rights to use, copy, modify, merge, publish, distribute, sublicense,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) * and/or sell copies of the Software, and to permit persons to whom the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) * Software is furnished to do so, subject to the following conditions:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) * The above copyright notice and this permission notice shall be included in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) * all copies or substantial portions of the Software.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) * OTHER DEALINGS IN THE SOFTWARE.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) * Authors:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) * Kevin E. Martin <martin@valinux.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) * Gareth Hughes <gareth@valinux.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) * Keith Whitwell <keith@tungstengraphics.com>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) #ifndef __AMDGPU_DRM_H__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) #define __AMDGPU_DRM_H__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) #include "drm.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) #if defined(__cplusplus)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) extern "C" {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) #define DRM_AMDGPU_GEM_CREATE 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) #define DRM_AMDGPU_GEM_MMAP 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) #define DRM_AMDGPU_CTX 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) #define DRM_AMDGPU_BO_LIST 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) #define DRM_AMDGPU_CS 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) #define DRM_AMDGPU_INFO 0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) #define DRM_AMDGPU_GEM_METADATA 0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) #define DRM_AMDGPU_GEM_WAIT_IDLE 0x07
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) #define DRM_AMDGPU_GEM_VA 0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) #define DRM_AMDGPU_WAIT_CS 0x09
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) #define DRM_AMDGPU_GEM_OP 0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) #define DRM_AMDGPU_GEM_USERPTR 0x11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) #define DRM_AMDGPU_WAIT_FENCES 0x12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) #define DRM_AMDGPU_VM 0x13
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) #define DRM_AMDGPU_FENCE_TO_HANDLE 0x14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) #define DRM_AMDGPU_SCHED 0x15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) #define DRM_IOCTL_AMDGPU_GEM_CREATE DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_CREATE, union drm_amdgpu_gem_create)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) #define DRM_IOCTL_AMDGPU_GEM_MMAP DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_MMAP, union drm_amdgpu_gem_mmap)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) #define DRM_IOCTL_AMDGPU_CTX DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_CTX, union drm_amdgpu_ctx)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) #define DRM_IOCTL_AMDGPU_BO_LIST DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_BO_LIST, union drm_amdgpu_bo_list)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) #define DRM_IOCTL_AMDGPU_CS DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_CS, union drm_amdgpu_cs)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) #define DRM_IOCTL_AMDGPU_INFO DRM_IOW(DRM_COMMAND_BASE + DRM_AMDGPU_INFO, struct drm_amdgpu_info)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) #define DRM_IOCTL_AMDGPU_GEM_METADATA DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_METADATA, struct drm_amdgpu_gem_metadata)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) #define DRM_IOCTL_AMDGPU_GEM_WAIT_IDLE DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_WAIT_IDLE, union drm_amdgpu_gem_wait_idle)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) #define DRM_IOCTL_AMDGPU_GEM_VA DRM_IOW(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_VA, struct drm_amdgpu_gem_va)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) #define DRM_IOCTL_AMDGPU_WAIT_CS DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_WAIT_CS, union drm_amdgpu_wait_cs)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) #define DRM_IOCTL_AMDGPU_GEM_OP DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_OP, struct drm_amdgpu_gem_op)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) #define DRM_IOCTL_AMDGPU_GEM_USERPTR DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_GEM_USERPTR, struct drm_amdgpu_gem_userptr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) #define DRM_IOCTL_AMDGPU_WAIT_FENCES DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_WAIT_FENCES, union drm_amdgpu_wait_fences)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) #define DRM_IOCTL_AMDGPU_VM DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_VM, union drm_amdgpu_vm)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) #define DRM_IOCTL_AMDGPU_FENCE_TO_HANDLE DRM_IOWR(DRM_COMMAND_BASE + DRM_AMDGPU_FENCE_TO_HANDLE, union drm_amdgpu_fence_to_handle)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) #define DRM_IOCTL_AMDGPU_SCHED DRM_IOW(DRM_COMMAND_BASE + DRM_AMDGPU_SCHED, union drm_amdgpu_sched)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) * DOC: memory domains
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) * %AMDGPU_GEM_DOMAIN_CPU System memory that is not GPU accessible.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) * Memory in this pool could be swapped out to disk if there is pressure.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) * %AMDGPU_GEM_DOMAIN_GTT GPU accessible system memory, mapped into the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) * GPU's virtual address space via gart. Gart memory linearizes non-contiguous
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) * pages of system memory, allows GPU access system memory in a linezrized
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) * fashion.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) * %AMDGPU_GEM_DOMAIN_VRAM Local video memory. For APUs, it is memory
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) * carved out by the BIOS.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) * %AMDGPU_GEM_DOMAIN_GDS Global on-chip data storage used to share data
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) * across shader threads.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) * %AMDGPU_GEM_DOMAIN_GWS Global wave sync, used to synchronize the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) * execution of all the waves on a device.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) * %AMDGPU_GEM_DOMAIN_OA Ordered append, used by 3D or Compute engines
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) * for appending data.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) #define AMDGPU_GEM_DOMAIN_CPU 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) #define AMDGPU_GEM_DOMAIN_GTT 0x2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) #define AMDGPU_GEM_DOMAIN_VRAM 0x4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) #define AMDGPU_GEM_DOMAIN_GDS 0x8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) #define AMDGPU_GEM_DOMAIN_GWS 0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) #define AMDGPU_GEM_DOMAIN_OA 0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) #define AMDGPU_GEM_DOMAIN_MASK (AMDGPU_GEM_DOMAIN_CPU | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) AMDGPU_GEM_DOMAIN_GTT | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) AMDGPU_GEM_DOMAIN_VRAM | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) AMDGPU_GEM_DOMAIN_GDS | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) AMDGPU_GEM_DOMAIN_GWS | \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) AMDGPU_GEM_DOMAIN_OA)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) /* Flag that CPU access will be required for the case of VRAM domain */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) #define AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED (1 << 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) /* Flag that CPU access will not work, this VRAM domain is invisible */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) #define AMDGPU_GEM_CREATE_NO_CPU_ACCESS (1 << 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) /* Flag that USWC attributes should be used for GTT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) #define AMDGPU_GEM_CREATE_CPU_GTT_USWC (1 << 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) /* Flag that the memory should be in VRAM and cleared */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) #define AMDGPU_GEM_CREATE_VRAM_CLEARED (1 << 3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) /* Flag that create shadow bo(GTT) while allocating vram bo */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) #define AMDGPU_GEM_CREATE_SHADOW (1 << 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) /* Flag that allocating the BO should use linear VRAM */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) #define AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS (1 << 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) /* Flag that BO is always valid in this VM */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) #define AMDGPU_GEM_CREATE_VM_ALWAYS_VALID (1 << 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) /* Flag that BO sharing will be explicitly synchronized */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) #define AMDGPU_GEM_CREATE_EXPLICIT_SYNC (1 << 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) /* Flag that indicates allocating MQD gart on GFX9, where the mtype
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) * for the second page onward should be set to NC. It should never
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) * be used by user space applications.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) #define AMDGPU_GEM_CREATE_CP_MQD_GFX9 (1 << 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) /* Flag that BO may contain sensitive data that must be wiped before
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) * releasing the memory
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) #define AMDGPU_GEM_CREATE_VRAM_WIPE_ON_RELEASE (1 << 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) /* Flag that BO will be encrypted and that the TMZ bit should be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) * set in the PTEs when mapping this buffer via GPUVM or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) * accessing it with various hw blocks
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) #define AMDGPU_GEM_CREATE_ENCRYPTED (1 << 10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) struct drm_amdgpu_gem_create_in {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) /** the requested memory size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) __u64 bo_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) /** physical start_addr alignment in bytes for some HW requirements */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) __u64 alignment;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) /** the requested memory domains */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) __u64 domains;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) /** allocation flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) __u64 domain_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) struct drm_amdgpu_gem_create_out {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) /** returned GEM object handle */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) __u32 handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) __u32 _pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) union drm_amdgpu_gem_create {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) struct drm_amdgpu_gem_create_in in;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) struct drm_amdgpu_gem_create_out out;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) /** Opcode to create new residency list. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) #define AMDGPU_BO_LIST_OP_CREATE 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) /** Opcode to destroy previously created residency list */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) #define AMDGPU_BO_LIST_OP_DESTROY 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) /** Opcode to update resource information in the list */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) #define AMDGPU_BO_LIST_OP_UPDATE 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) struct drm_amdgpu_bo_list_in {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) /** Type of operation */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) __u32 operation;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) /** Handle of list or 0 if we want to create one */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) __u32 list_handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) /** Number of BOs in list */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) __u32 bo_number;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) /** Size of each element describing BO */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) __u32 bo_info_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) /** Pointer to array describing BOs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) __u64 bo_info_ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) struct drm_amdgpu_bo_list_entry {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) /** Handle of BO */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) __u32 bo_handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) /** New (if specified) BO priority to be used during migration */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) __u32 bo_priority;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) struct drm_amdgpu_bo_list_out {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) /** Handle of resource list */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) __u32 list_handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) __u32 _pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) union drm_amdgpu_bo_list {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) struct drm_amdgpu_bo_list_in in;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) struct drm_amdgpu_bo_list_out out;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) /* context related */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) #define AMDGPU_CTX_OP_ALLOC_CTX 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) #define AMDGPU_CTX_OP_FREE_CTX 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) #define AMDGPU_CTX_OP_QUERY_STATE 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) #define AMDGPU_CTX_OP_QUERY_STATE2 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) /* GPU reset status */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) #define AMDGPU_CTX_NO_RESET 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) /* this the context caused it */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) #define AMDGPU_CTX_GUILTY_RESET 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) /* some other context caused it */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) #define AMDGPU_CTX_INNOCENT_RESET 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) /* unknown cause */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) #define AMDGPU_CTX_UNKNOWN_RESET 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) /* indicate gpu reset occured after ctx created */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) #define AMDGPU_CTX_QUERY2_FLAGS_RESET (1<<0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) /* indicate vram lost occured after ctx created */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) #define AMDGPU_CTX_QUERY2_FLAGS_VRAMLOST (1<<1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) /* indicate some job from this context once cause gpu hang */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) #define AMDGPU_CTX_QUERY2_FLAGS_GUILTY (1<<2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) /* indicate some errors are detected by RAS */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) #define AMDGPU_CTX_QUERY2_FLAGS_RAS_CE (1<<3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) #define AMDGPU_CTX_QUERY2_FLAGS_RAS_UE (1<<4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) /* Context priority level */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) #define AMDGPU_CTX_PRIORITY_UNSET -2048
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) #define AMDGPU_CTX_PRIORITY_VERY_LOW -1023
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) #define AMDGPU_CTX_PRIORITY_LOW -512
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) #define AMDGPU_CTX_PRIORITY_NORMAL 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) * When used in struct drm_amdgpu_ctx_in, a priority above NORMAL requires
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) * CAP_SYS_NICE or DRM_MASTER
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) #define AMDGPU_CTX_PRIORITY_HIGH 512
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) #define AMDGPU_CTX_PRIORITY_VERY_HIGH 1023
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) struct drm_amdgpu_ctx_in {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) /** AMDGPU_CTX_OP_* */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) __u32 op;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) /** For future use, no flags defined so far */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) __u32 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) __u32 ctx_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) /** AMDGPU_CTX_PRIORITY_* */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) __s32 priority;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) union drm_amdgpu_ctx_out {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) __u32 ctx_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) __u32 _pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) } alloc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) /** For future use, no flags defined so far */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) __u64 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) /** Number of resets caused by this context so far. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) __u32 hangs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) /** Reset status since the last call of the ioctl. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) __u32 reset_status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) } state;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) union drm_amdgpu_ctx {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) struct drm_amdgpu_ctx_in in;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) union drm_amdgpu_ctx_out out;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) /* vm ioctl */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) #define AMDGPU_VM_OP_RESERVE_VMID 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) #define AMDGPU_VM_OP_UNRESERVE_VMID 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) struct drm_amdgpu_vm_in {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) /** AMDGPU_VM_OP_* */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) __u32 op;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) __u32 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) struct drm_amdgpu_vm_out {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) /** For future use, no flags defined so far */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) __u64 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) union drm_amdgpu_vm {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) struct drm_amdgpu_vm_in in;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) struct drm_amdgpu_vm_out out;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) /* sched ioctl */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) #define AMDGPU_SCHED_OP_PROCESS_PRIORITY_OVERRIDE 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) #define AMDGPU_SCHED_OP_CONTEXT_PRIORITY_OVERRIDE 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) struct drm_amdgpu_sched_in {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) /* AMDGPU_SCHED_OP_* */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) __u32 op;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) __u32 fd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) /** AMDGPU_CTX_PRIORITY_* */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) __s32 priority;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) __u32 ctx_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) union drm_amdgpu_sched {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) struct drm_amdgpu_sched_in in;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) * This is not a reliable API and you should expect it to fail for any
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) * number of reasons and have fallback path that do not use userptr to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) * perform any operation.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) #define AMDGPU_GEM_USERPTR_READONLY (1 << 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) #define AMDGPU_GEM_USERPTR_ANONONLY (1 << 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) #define AMDGPU_GEM_USERPTR_VALIDATE (1 << 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) #define AMDGPU_GEM_USERPTR_REGISTER (1 << 3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) struct drm_amdgpu_gem_userptr {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) __u64 addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) __u64 size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) /* AMDGPU_GEM_USERPTR_* */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) __u32 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) /* Resulting GEM handle */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) __u32 handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) /* SI-CI-VI: */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) /* same meaning as the GB_TILE_MODE and GL_MACRO_TILE_MODE fields */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) #define AMDGPU_TILING_ARRAY_MODE_SHIFT 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) #define AMDGPU_TILING_ARRAY_MODE_MASK 0xf
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) #define AMDGPU_TILING_PIPE_CONFIG_SHIFT 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) #define AMDGPU_TILING_PIPE_CONFIG_MASK 0x1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) #define AMDGPU_TILING_TILE_SPLIT_SHIFT 9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) #define AMDGPU_TILING_TILE_SPLIT_MASK 0x7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) #define AMDGPU_TILING_MICRO_TILE_MODE_SHIFT 12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) #define AMDGPU_TILING_MICRO_TILE_MODE_MASK 0x7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) #define AMDGPU_TILING_BANK_WIDTH_SHIFT 15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) #define AMDGPU_TILING_BANK_WIDTH_MASK 0x3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) #define AMDGPU_TILING_BANK_HEIGHT_SHIFT 17
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) #define AMDGPU_TILING_BANK_HEIGHT_MASK 0x3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) #define AMDGPU_TILING_MACRO_TILE_ASPECT_SHIFT 19
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) #define AMDGPU_TILING_MACRO_TILE_ASPECT_MASK 0x3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) #define AMDGPU_TILING_NUM_BANKS_SHIFT 21
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) #define AMDGPU_TILING_NUM_BANKS_MASK 0x3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) /* GFX9 and later: */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) #define AMDGPU_TILING_SWIZZLE_MODE_SHIFT 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) #define AMDGPU_TILING_SWIZZLE_MODE_MASK 0x1f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) #define AMDGPU_TILING_DCC_OFFSET_256B_SHIFT 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) #define AMDGPU_TILING_DCC_OFFSET_256B_MASK 0xFFFFFF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) #define AMDGPU_TILING_DCC_PITCH_MAX_SHIFT 29
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) #define AMDGPU_TILING_DCC_PITCH_MAX_MASK 0x3FFF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) #define AMDGPU_TILING_DCC_INDEPENDENT_64B_SHIFT 43
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) #define AMDGPU_TILING_DCC_INDEPENDENT_64B_MASK 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) #define AMDGPU_TILING_DCC_INDEPENDENT_128B_SHIFT 44
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) #define AMDGPU_TILING_DCC_INDEPENDENT_128B_MASK 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) #define AMDGPU_TILING_SCANOUT_SHIFT 63
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) #define AMDGPU_TILING_SCANOUT_MASK 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) /* Set/Get helpers for tiling flags. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) #define AMDGPU_TILING_SET(field, value) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) (((__u64)(value) & AMDGPU_TILING_##field##_MASK) << AMDGPU_TILING_##field##_SHIFT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) #define AMDGPU_TILING_GET(value, field) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) (((__u64)(value) >> AMDGPU_TILING_##field##_SHIFT) & AMDGPU_TILING_##field##_MASK)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) #define AMDGPU_GEM_METADATA_OP_SET_METADATA 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) #define AMDGPU_GEM_METADATA_OP_GET_METADATA 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) /** The same structure is shared for input/output */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) struct drm_amdgpu_gem_metadata {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) /** GEM Object handle */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) __u32 handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) /** Do we want get or set metadata */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) __u32 op;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) /** For future use, no flags defined so far */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) __u64 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) /** family specific tiling info */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) __u64 tiling_info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) __u32 data_size_bytes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) __u32 data[64];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) } data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) struct drm_amdgpu_gem_mmap_in {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) /** the GEM object handle */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) __u32 handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) __u32 _pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) struct drm_amdgpu_gem_mmap_out {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) /** mmap offset from the vma offset manager */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) __u64 addr_ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) union drm_amdgpu_gem_mmap {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) struct drm_amdgpu_gem_mmap_in in;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) struct drm_amdgpu_gem_mmap_out out;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) struct drm_amdgpu_gem_wait_idle_in {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) /** GEM object handle */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) __u32 handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) /** For future use, no flags defined so far */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) __u32 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) /** Absolute timeout to wait */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) __u64 timeout;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) struct drm_amdgpu_gem_wait_idle_out {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) /** BO status: 0 - BO is idle, 1 - BO is busy */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) __u32 status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) /** Returned current memory domain */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) __u32 domain;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) union drm_amdgpu_gem_wait_idle {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) struct drm_amdgpu_gem_wait_idle_in in;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) struct drm_amdgpu_gem_wait_idle_out out;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) struct drm_amdgpu_wait_cs_in {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) /* Command submission handle
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) * handle equals 0 means none to wait for
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) * handle equals ~0ull means wait for the latest sequence number
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) __u64 handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) /** Absolute timeout to wait */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) __u64 timeout;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) __u32 ip_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) __u32 ip_instance;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) __u32 ring;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) __u32 ctx_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) struct drm_amdgpu_wait_cs_out {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) /** CS status: 0 - CS completed, 1 - CS still busy */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) __u64 status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) union drm_amdgpu_wait_cs {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) struct drm_amdgpu_wait_cs_in in;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) struct drm_amdgpu_wait_cs_out out;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) struct drm_amdgpu_fence {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) __u32 ctx_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) __u32 ip_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) __u32 ip_instance;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) __u32 ring;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) __u64 seq_no;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) struct drm_amdgpu_wait_fences_in {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) /** This points to uint64_t * which points to fences */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) __u64 fences;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) __u32 fence_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) __u32 wait_all;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) __u64 timeout_ns;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) struct drm_amdgpu_wait_fences_out {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) __u32 status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) __u32 first_signaled;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) union drm_amdgpu_wait_fences {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) struct drm_amdgpu_wait_fences_in in;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) struct drm_amdgpu_wait_fences_out out;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) #define AMDGPU_GEM_OP_GET_GEM_CREATE_INFO 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) #define AMDGPU_GEM_OP_SET_PLACEMENT 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474) /* Sets or returns a value associated with a buffer. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) struct drm_amdgpu_gem_op {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) /** GEM object handle */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) __u32 handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) /** AMDGPU_GEM_OP_* */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) __u32 op;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) /** Input or return value */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) __u64 value;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) #define AMDGPU_VA_OP_MAP 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485) #define AMDGPU_VA_OP_UNMAP 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486) #define AMDGPU_VA_OP_CLEAR 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) #define AMDGPU_VA_OP_REPLACE 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489) /* Delay the page table update till the next CS */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) #define AMDGPU_VM_DELAY_UPDATE (1 << 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) /* Mapping flags */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493) /* readable mapping */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) #define AMDGPU_VM_PAGE_READABLE (1 << 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) /* writable mapping */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) #define AMDGPU_VM_PAGE_WRITEABLE (1 << 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) /* executable mapping, new for VI */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) #define AMDGPU_VM_PAGE_EXECUTABLE (1 << 3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) /* partially resident texture */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) #define AMDGPU_VM_PAGE_PRT (1 << 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501) /* MTYPE flags use bit 5 to 8 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) #define AMDGPU_VM_MTYPE_MASK (0xf << 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) /* Default MTYPE. Pre-AI must use this. Recommended for newer ASICs. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) #define AMDGPU_VM_MTYPE_DEFAULT (0 << 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) /* Use Non Coherent MTYPE instead of default MTYPE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506) #define AMDGPU_VM_MTYPE_NC (1 << 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507) /* Use Write Combine MTYPE instead of default MTYPE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) #define AMDGPU_VM_MTYPE_WC (2 << 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) /* Use Cache Coherent MTYPE instead of default MTYPE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) #define AMDGPU_VM_MTYPE_CC (3 << 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) /* Use UnCached MTYPE instead of default MTYPE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512) #define AMDGPU_VM_MTYPE_UC (4 << 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) /* Use Read Write MTYPE instead of default MTYPE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514) #define AMDGPU_VM_MTYPE_RW (5 << 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) struct drm_amdgpu_gem_va {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) /** GEM object handle */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) __u32 handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) __u32 _pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520) /** AMDGPU_VA_OP_* */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521) __u32 operation;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) /** AMDGPU_VM_PAGE_* */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523) __u32 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524) /** va address to assign . Must be correctly aligned.*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) __u64 va_address;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) /** Specify offset inside of BO to assign. Must be correctly aligned.*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527) __u64 offset_in_bo;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528) /** Specify mapping size. Must be correctly aligned. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) __u64 map_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) #define AMDGPU_HW_IP_GFX 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) #define AMDGPU_HW_IP_COMPUTE 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534) #define AMDGPU_HW_IP_DMA 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) #define AMDGPU_HW_IP_UVD 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536) #define AMDGPU_HW_IP_VCE 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537) #define AMDGPU_HW_IP_UVD_ENC 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538) #define AMDGPU_HW_IP_VCN_DEC 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539) #define AMDGPU_HW_IP_VCN_ENC 7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) #define AMDGPU_HW_IP_VCN_JPEG 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541) #define AMDGPU_HW_IP_NUM 9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) #define AMDGPU_HW_IP_INSTANCE_MAX_COUNT 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545) #define AMDGPU_CHUNK_ID_IB 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) #define AMDGPU_CHUNK_ID_FENCE 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) #define AMDGPU_CHUNK_ID_DEPENDENCIES 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548) #define AMDGPU_CHUNK_ID_SYNCOBJ_IN 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549) #define AMDGPU_CHUNK_ID_SYNCOBJ_OUT 0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) #define AMDGPU_CHUNK_ID_BO_HANDLES 0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551) #define AMDGPU_CHUNK_ID_SCHEDULED_DEPENDENCIES 0x07
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) #define AMDGPU_CHUNK_ID_SYNCOBJ_TIMELINE_WAIT 0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) #define AMDGPU_CHUNK_ID_SYNCOBJ_TIMELINE_SIGNAL 0x09
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) struct drm_amdgpu_cs_chunk {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) __u32 chunk_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) __u32 length_dw;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558) __u64 chunk_data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) struct drm_amdgpu_cs_in {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562) /** Rendering context id */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563) __u32 ctx_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) /** Handle of resource list associated with CS */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565) __u32 bo_list_handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566) __u32 num_chunks;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567) __u32 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568) /** this points to __u64 * which point to cs chunks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569) __u64 chunks;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 570) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 571)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 572) struct drm_amdgpu_cs_out {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 573) __u64 handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 574) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 575)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 576) union drm_amdgpu_cs {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 577) struct drm_amdgpu_cs_in in;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 578) struct drm_amdgpu_cs_out out;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 579) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 580)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 581) /* Specify flags to be used for IB */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 582)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 583) /* This IB should be submitted to CE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 584) #define AMDGPU_IB_FLAG_CE (1<<0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 585)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 586) /* Preamble flag, which means the IB could be dropped if no context switch */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 587) #define AMDGPU_IB_FLAG_PREAMBLE (1<<1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 588)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 589) /* Preempt flag, IB should set Pre_enb bit if PREEMPT flag detected */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 590) #define AMDGPU_IB_FLAG_PREEMPT (1<<2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 591)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 592) /* The IB fence should do the L2 writeback but not invalidate any shader
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 593) * caches (L2/vL1/sL1/I$). */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 594) #define AMDGPU_IB_FLAG_TC_WB_NOT_INVALIDATE (1 << 3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 595)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 596) /* Set GDS_COMPUTE_MAX_WAVE_ID = DEFAULT before PACKET3_INDIRECT_BUFFER.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 597) * This will reset wave ID counters for the IB.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 598) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 599) #define AMDGPU_IB_FLAG_RESET_GDS_MAX_WAVE_ID (1 << 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 600)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 601) /* Flag the IB as secure (TMZ)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 602) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 603) #define AMDGPU_IB_FLAGS_SECURE (1 << 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 604)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 605) /* Tell KMD to flush and invalidate caches
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 606) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 607) #define AMDGPU_IB_FLAG_EMIT_MEM_SYNC (1 << 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 608)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 609) struct drm_amdgpu_cs_chunk_ib {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 610) __u32 _pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 611) /** AMDGPU_IB_FLAG_* */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 612) __u32 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 613) /** Virtual address to begin IB execution */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 614) __u64 va_start;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 615) /** Size of submission */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 616) __u32 ib_bytes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 617) /** HW IP to submit to */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 618) __u32 ip_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 619) /** HW IP index of the same type to submit to */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 620) __u32 ip_instance;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 621) /** Ring index to submit to */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 622) __u32 ring;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 623) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 624)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 625) struct drm_amdgpu_cs_chunk_dep {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 626) __u32 ip_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 627) __u32 ip_instance;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 628) __u32 ring;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 629) __u32 ctx_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 630) __u64 handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 631) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 632)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 633) struct drm_amdgpu_cs_chunk_fence {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 634) __u32 handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 635) __u32 offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 636) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 637)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 638) struct drm_amdgpu_cs_chunk_sem {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 639) __u32 handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 640) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 641)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 642) struct drm_amdgpu_cs_chunk_syncobj {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 643) __u32 handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 644) __u32 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 645) __u64 point;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 646) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 647)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 648) #define AMDGPU_FENCE_TO_HANDLE_GET_SYNCOBJ 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 649) #define AMDGPU_FENCE_TO_HANDLE_GET_SYNCOBJ_FD 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 650) #define AMDGPU_FENCE_TO_HANDLE_GET_SYNC_FILE_FD 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 651)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 652) union drm_amdgpu_fence_to_handle {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 653) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 654) struct drm_amdgpu_fence fence;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 655) __u32 what;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 656) __u32 pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 657) } in;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 658) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 659) __u32 handle;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 660) } out;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 661) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 662)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 663) struct drm_amdgpu_cs_chunk_data {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 664) union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 665) struct drm_amdgpu_cs_chunk_ib ib_data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 666) struct drm_amdgpu_cs_chunk_fence fence_data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 667) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 668) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 669)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 670) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 671) * Query h/w info: Flag that this is integrated (a.h.a. fusion) GPU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 672) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 673) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 674) #define AMDGPU_IDS_FLAGS_FUSION 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 675) #define AMDGPU_IDS_FLAGS_PREEMPTION 0x2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 676) #define AMDGPU_IDS_FLAGS_TMZ 0x4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 677)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 678) /* indicate if acceleration can be working */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 679) #define AMDGPU_INFO_ACCEL_WORKING 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 680) /* get the crtc_id from the mode object id? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 681) #define AMDGPU_INFO_CRTC_FROM_ID 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 682) /* query hw IP info */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 683) #define AMDGPU_INFO_HW_IP_INFO 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 684) /* query hw IP instance count for the specified type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 685) #define AMDGPU_INFO_HW_IP_COUNT 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 686) /* timestamp for GL_ARB_timer_query */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 687) #define AMDGPU_INFO_TIMESTAMP 0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 688) /* Query the firmware version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 689) #define AMDGPU_INFO_FW_VERSION 0x0e
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 690) /* Subquery id: Query VCE firmware version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 691) #define AMDGPU_INFO_FW_VCE 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 692) /* Subquery id: Query UVD firmware version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 693) #define AMDGPU_INFO_FW_UVD 0x2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 694) /* Subquery id: Query GMC firmware version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 695) #define AMDGPU_INFO_FW_GMC 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 696) /* Subquery id: Query GFX ME firmware version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 697) #define AMDGPU_INFO_FW_GFX_ME 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 698) /* Subquery id: Query GFX PFP firmware version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 699) #define AMDGPU_INFO_FW_GFX_PFP 0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 700) /* Subquery id: Query GFX CE firmware version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 701) #define AMDGPU_INFO_FW_GFX_CE 0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 702) /* Subquery id: Query GFX RLC firmware version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 703) #define AMDGPU_INFO_FW_GFX_RLC 0x07
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 704) /* Subquery id: Query GFX MEC firmware version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 705) #define AMDGPU_INFO_FW_GFX_MEC 0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 706) /* Subquery id: Query SMC firmware version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 707) #define AMDGPU_INFO_FW_SMC 0x0a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 708) /* Subquery id: Query SDMA firmware version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 709) #define AMDGPU_INFO_FW_SDMA 0x0b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 710) /* Subquery id: Query PSP SOS firmware version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 711) #define AMDGPU_INFO_FW_SOS 0x0c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 712) /* Subquery id: Query PSP ASD firmware version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 713) #define AMDGPU_INFO_FW_ASD 0x0d
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 714) /* Subquery id: Query VCN firmware version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 715) #define AMDGPU_INFO_FW_VCN 0x0e
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 716) /* Subquery id: Query GFX RLC SRLC firmware version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 717) #define AMDGPU_INFO_FW_GFX_RLC_RESTORE_LIST_CNTL 0x0f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 718) /* Subquery id: Query GFX RLC SRLG firmware version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 719) #define AMDGPU_INFO_FW_GFX_RLC_RESTORE_LIST_GPM_MEM 0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 720) /* Subquery id: Query GFX RLC SRLS firmware version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 721) #define AMDGPU_INFO_FW_GFX_RLC_RESTORE_LIST_SRM_MEM 0x11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 722) /* Subquery id: Query DMCU firmware version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 723) #define AMDGPU_INFO_FW_DMCU 0x12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 724) #define AMDGPU_INFO_FW_TA 0x13
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 725) /* Subquery id: Query DMCUB firmware version */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 726) #define AMDGPU_INFO_FW_DMCUB 0x14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 727)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 728) /* number of bytes moved for TTM migration */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 729) #define AMDGPU_INFO_NUM_BYTES_MOVED 0x0f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 730) /* the used VRAM size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 731) #define AMDGPU_INFO_VRAM_USAGE 0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 732) /* the used GTT size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 733) #define AMDGPU_INFO_GTT_USAGE 0x11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 734) /* Information about GDS, etc. resource configuration */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 735) #define AMDGPU_INFO_GDS_CONFIG 0x13
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 736) /* Query information about VRAM and GTT domains */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 737) #define AMDGPU_INFO_VRAM_GTT 0x14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 738) /* Query information about register in MMR address space*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 739) #define AMDGPU_INFO_READ_MMR_REG 0x15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 740) /* Query information about device: rev id, family, etc. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 741) #define AMDGPU_INFO_DEV_INFO 0x16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 742) /* visible vram usage */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 743) #define AMDGPU_INFO_VIS_VRAM_USAGE 0x17
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 744) /* number of TTM buffer evictions */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 745) #define AMDGPU_INFO_NUM_EVICTIONS 0x18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 746) /* Query memory about VRAM and GTT domains */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 747) #define AMDGPU_INFO_MEMORY 0x19
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 748) /* Query vce clock table */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 749) #define AMDGPU_INFO_VCE_CLOCK_TABLE 0x1A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 750) /* Query vbios related information */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 751) #define AMDGPU_INFO_VBIOS 0x1B
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 752) /* Subquery id: Query vbios size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 753) #define AMDGPU_INFO_VBIOS_SIZE 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 754) /* Subquery id: Query vbios image */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 755) #define AMDGPU_INFO_VBIOS_IMAGE 0x2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 756) /* Query UVD handles */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 757) #define AMDGPU_INFO_NUM_HANDLES 0x1C
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 758) /* Query sensor related information */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 759) #define AMDGPU_INFO_SENSOR 0x1D
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 760) /* Subquery id: Query GPU shader clock */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 761) #define AMDGPU_INFO_SENSOR_GFX_SCLK 0x1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 762) /* Subquery id: Query GPU memory clock */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 763) #define AMDGPU_INFO_SENSOR_GFX_MCLK 0x2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 764) /* Subquery id: Query GPU temperature */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 765) #define AMDGPU_INFO_SENSOR_GPU_TEMP 0x3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 766) /* Subquery id: Query GPU load */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 767) #define AMDGPU_INFO_SENSOR_GPU_LOAD 0x4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 768) /* Subquery id: Query average GPU power */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 769) #define AMDGPU_INFO_SENSOR_GPU_AVG_POWER 0x5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 770) /* Subquery id: Query northbridge voltage */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 771) #define AMDGPU_INFO_SENSOR_VDDNB 0x6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 772) /* Subquery id: Query graphics voltage */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 773) #define AMDGPU_INFO_SENSOR_VDDGFX 0x7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 774) /* Subquery id: Query GPU stable pstate shader clock */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 775) #define AMDGPU_INFO_SENSOR_STABLE_PSTATE_GFX_SCLK 0x8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 776) /* Subquery id: Query GPU stable pstate memory clock */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 777) #define AMDGPU_INFO_SENSOR_STABLE_PSTATE_GFX_MCLK 0x9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 778) /* Number of VRAM page faults on CPU access. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 779) #define AMDGPU_INFO_NUM_VRAM_CPU_PAGE_FAULTS 0x1E
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 780) #define AMDGPU_INFO_VRAM_LOST_COUNTER 0x1F
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 781) /* query ras mask of enabled features*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 782) #define AMDGPU_INFO_RAS_ENABLED_FEATURES 0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 783)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 784) /* RAS MASK: UMC (VRAM) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 785) #define AMDGPU_INFO_RAS_ENABLED_UMC (1 << 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 786) /* RAS MASK: SDMA */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 787) #define AMDGPU_INFO_RAS_ENABLED_SDMA (1 << 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 788) /* RAS MASK: GFX */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 789) #define AMDGPU_INFO_RAS_ENABLED_GFX (1 << 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 790) /* RAS MASK: MMHUB */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 791) #define AMDGPU_INFO_RAS_ENABLED_MMHUB (1 << 3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 792) /* RAS MASK: ATHUB */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 793) #define AMDGPU_INFO_RAS_ENABLED_ATHUB (1 << 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 794) /* RAS MASK: PCIE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 795) #define AMDGPU_INFO_RAS_ENABLED_PCIE (1 << 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 796) /* RAS MASK: HDP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 797) #define AMDGPU_INFO_RAS_ENABLED_HDP (1 << 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 798) /* RAS MASK: XGMI */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 799) #define AMDGPU_INFO_RAS_ENABLED_XGMI (1 << 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 800) /* RAS MASK: DF */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 801) #define AMDGPU_INFO_RAS_ENABLED_DF (1 << 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 802) /* RAS MASK: SMN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 803) #define AMDGPU_INFO_RAS_ENABLED_SMN (1 << 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 804) /* RAS MASK: SEM */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 805) #define AMDGPU_INFO_RAS_ENABLED_SEM (1 << 10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 806) /* RAS MASK: MP0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 807) #define AMDGPU_INFO_RAS_ENABLED_MP0 (1 << 11)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 808) /* RAS MASK: MP1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 809) #define AMDGPU_INFO_RAS_ENABLED_MP1 (1 << 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 810) /* RAS MASK: FUSE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 811) #define AMDGPU_INFO_RAS_ENABLED_FUSE (1 << 13)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 812)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 813) #define AMDGPU_INFO_MMR_SE_INDEX_SHIFT 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 814) #define AMDGPU_INFO_MMR_SE_INDEX_MASK 0xff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 815) #define AMDGPU_INFO_MMR_SH_INDEX_SHIFT 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 816) #define AMDGPU_INFO_MMR_SH_INDEX_MASK 0xff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 817)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 818) struct drm_amdgpu_query_fw {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 819) /** AMDGPU_INFO_FW_* */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 820) __u32 fw_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 821) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 822) * Index of the IP if there are more IPs of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 823) * the same type.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 824) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 825) __u32 ip_instance;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 826) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 827) * Index of the engine. Whether this is used depends
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 828) * on the firmware type. (e.g. MEC, SDMA)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 829) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 830) __u32 index;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 831) __u32 _pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 832) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 833)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 834) /* Input structure for the INFO ioctl */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 835) struct drm_amdgpu_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 836) /* Where the return value will be stored */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 837) __u64 return_pointer;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 838) /* The size of the return value. Just like "size" in "snprintf",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 839) * it limits how many bytes the kernel can write. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 840) __u32 return_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 841) /* The query request id. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 842) __u32 query;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 843)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 844) union {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 845) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 846) __u32 id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 847) __u32 _pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 848) } mode_crtc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 849)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 850) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 851) /** AMDGPU_HW_IP_* */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 852) __u32 type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 853) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 854) * Index of the IP if there are more IPs of the same
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 855) * type. Ignored by AMDGPU_INFO_HW_IP_COUNT.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 856) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 857) __u32 ip_instance;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 858) } query_hw_ip;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 859)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 860) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 861) __u32 dword_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 862) /** number of registers to read */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 863) __u32 count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 864) __u32 instance;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 865) /** For future use, no flags defined so far */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 866) __u32 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 867) } read_mmr_reg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 868)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 869) struct drm_amdgpu_query_fw query_fw;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 870)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 871) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 872) __u32 type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 873) __u32 offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 874) } vbios_info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 875)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 876) struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 877) __u32 type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 878) } sensor_info;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 879) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 880) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 881)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 882) struct drm_amdgpu_info_gds {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 883) /** GDS GFX partition size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 884) __u32 gds_gfx_partition_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 885) /** GDS compute partition size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 886) __u32 compute_partition_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 887) /** total GDS memory size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 888) __u32 gds_total_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 889) /** GWS size per GFX partition */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 890) __u32 gws_per_gfx_partition;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 891) /** GSW size per compute partition */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 892) __u32 gws_per_compute_partition;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 893) /** OA size per GFX partition */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 894) __u32 oa_per_gfx_partition;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 895) /** OA size per compute partition */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 896) __u32 oa_per_compute_partition;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 897) __u32 _pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 898) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 899)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 900) struct drm_amdgpu_info_vram_gtt {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 901) __u64 vram_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 902) __u64 vram_cpu_accessible_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 903) __u64 gtt_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 904) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 905)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 906) struct drm_amdgpu_heap_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 907) /** max. physical memory */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 908) __u64 total_heap_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 909)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 910) /** Theoretical max. available memory in the given heap */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 911) __u64 usable_heap_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 912)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 913) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 914) * Number of bytes allocated in the heap. This includes all processes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 915) * and private allocations in the kernel. It changes when new buffers
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 916) * are allocated, freed, and moved. It cannot be larger than
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 917) * heap_size.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 918) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 919) __u64 heap_usage;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 920)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 921) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 922) * Theoretical possible max. size of buffer which
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 923) * could be allocated in the given heap
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 924) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 925) __u64 max_allocation;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 926) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 927)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 928) struct drm_amdgpu_memory_info {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 929) struct drm_amdgpu_heap_info vram;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 930) struct drm_amdgpu_heap_info cpu_accessible_vram;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 931) struct drm_amdgpu_heap_info gtt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 932) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 933)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 934) struct drm_amdgpu_info_firmware {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 935) __u32 ver;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 936) __u32 feature;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 937) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 938)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 939) #define AMDGPU_VRAM_TYPE_UNKNOWN 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 940) #define AMDGPU_VRAM_TYPE_GDDR1 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 941) #define AMDGPU_VRAM_TYPE_DDR2 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 942) #define AMDGPU_VRAM_TYPE_GDDR3 3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 943) #define AMDGPU_VRAM_TYPE_GDDR4 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 944) #define AMDGPU_VRAM_TYPE_GDDR5 5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 945) #define AMDGPU_VRAM_TYPE_HBM 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 946) #define AMDGPU_VRAM_TYPE_DDR3 7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 947) #define AMDGPU_VRAM_TYPE_DDR4 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 948) #define AMDGPU_VRAM_TYPE_GDDR6 9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 949)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 950) struct drm_amdgpu_info_device {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 951) /** PCI Device ID */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 952) __u32 device_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 953) /** Internal chip revision: A0, A1, etc.) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 954) __u32 chip_rev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 955) __u32 external_rev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 956) /** Revision id in PCI Config space */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 957) __u32 pci_rev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 958) __u32 family;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 959) __u32 num_shader_engines;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 960) __u32 num_shader_arrays_per_engine;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 961) /* in KHz */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 962) __u32 gpu_counter_freq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 963) __u64 max_engine_clock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 964) __u64 max_memory_clock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 965) /* cu information */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 966) __u32 cu_active_number;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 967) /* NOTE: cu_ao_mask is INVALID, DON'T use it */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 968) __u32 cu_ao_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 969) __u32 cu_bitmap[4][4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 970) /** Render backend pipe mask. One render backend is CB+DB. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 971) __u32 enabled_rb_pipes_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 972) __u32 num_rb_pipes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 973) __u32 num_hw_gfx_contexts;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 974) __u32 _pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 975) __u64 ids_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 976) /** Starting virtual address for UMDs. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 977) __u64 virtual_address_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 978) /** The maximum virtual address */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 979) __u64 virtual_address_max;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 980) /** Required alignment of virtual addresses. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 981) __u32 virtual_address_alignment;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 982) /** Page table entry - fragment size */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 983) __u32 pte_fragment_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 984) __u32 gart_page_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 985) /** constant engine ram size*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 986) __u32 ce_ram_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 987) /** video memory type info*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 988) __u32 vram_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 989) /** video memory bit width*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 990) __u32 vram_bit_width;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 991) /* vce harvesting instance */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 992) __u32 vce_harvest_config;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 993) /* gfx double offchip LDS buffers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 994) __u32 gc_double_offchip_lds_buf;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 995) /* NGG Primitive Buffer */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 996) __u64 prim_buf_gpu_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 997) /* NGG Position Buffer */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 998) __u64 pos_buf_gpu_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 999) /* NGG Control Sideband */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1000) __u64 cntl_sb_buf_gpu_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1001) /* NGG Parameter Cache */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1002) __u64 param_buf_gpu_addr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1003) __u32 prim_buf_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1004) __u32 pos_buf_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1005) __u32 cntl_sb_buf_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1006) __u32 param_buf_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1007) /* wavefront size*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1008) __u32 wave_front_size;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1009) /* shader visible vgprs*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1010) __u32 num_shader_visible_vgprs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1011) /* CU per shader array*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1012) __u32 num_cu_per_sh;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1013) /* number of tcc blocks*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1014) __u32 num_tcc_blocks;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1015) /* gs vgt table depth*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1016) __u32 gs_vgt_table_depth;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1017) /* gs primitive buffer depth*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1018) __u32 gs_prim_buffer_depth;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1019) /* max gs wavefront per vgt*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1020) __u32 max_gs_waves_per_vgt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1021) __u32 _pad1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1022) /* always on cu bitmap */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1023) __u32 cu_ao_bitmap[4][4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1024) /** Starting high virtual address for UMDs. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1025) __u64 high_va_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1026) /** The maximum high virtual address */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1027) __u64 high_va_max;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1028) /* gfx10 pa_sc_tile_steering_override */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1029) __u32 pa_sc_tile_steering_override;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1030) /* disabled TCCs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1031) __u64 tcc_disabled_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1032) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1033)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1034) struct drm_amdgpu_info_hw_ip {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1035) /** Version of h/w IP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1036) __u32 hw_ip_version_major;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1037) __u32 hw_ip_version_minor;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1038) /** Capabilities */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1039) __u64 capabilities_flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1040) /** command buffer address start alignment*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1041) __u32 ib_start_alignment;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1042) /** command buffer size alignment*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1043) __u32 ib_size_alignment;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1044) /** Bitmask of available rings. Bit 0 means ring 0, etc. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1045) __u32 available_rings;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1046) __u32 _pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1047) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1048)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1049) struct drm_amdgpu_info_num_handles {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1050) /** Max handles as supported by firmware for UVD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1051) __u32 uvd_max_handles;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1052) /** Handles currently in use for UVD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1053) __u32 uvd_used_handles;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1054) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1055)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1056) #define AMDGPU_VCE_CLOCK_TABLE_ENTRIES 6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1057)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1058) struct drm_amdgpu_info_vce_clock_table_entry {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1059) /** System clock */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1060) __u32 sclk;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1061) /** Memory clock */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1062) __u32 mclk;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1063) /** VCE clock */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1064) __u32 eclk;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1065) __u32 pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1066) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1067)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1068) struct drm_amdgpu_info_vce_clock_table {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1069) struct drm_amdgpu_info_vce_clock_table_entry entries[AMDGPU_VCE_CLOCK_TABLE_ENTRIES];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1070) __u32 num_valid_entries;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1071) __u32 pad;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1072) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1073)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1074) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1075) * Supported GPU families
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1076) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1077) #define AMDGPU_FAMILY_UNKNOWN 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1078) #define AMDGPU_FAMILY_SI 110 /* Hainan, Oland, Verde, Pitcairn, Tahiti */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1079) #define AMDGPU_FAMILY_CI 120 /* Bonaire, Hawaii */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1080) #define AMDGPU_FAMILY_KV 125 /* Kaveri, Kabini, Mullins */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1081) #define AMDGPU_FAMILY_VI 130 /* Iceland, Tonga */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1082) #define AMDGPU_FAMILY_CZ 135 /* Carrizo, Stoney */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1083) #define AMDGPU_FAMILY_AI 141 /* Vega10 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1084) #define AMDGPU_FAMILY_RV 142 /* Raven */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1085) #define AMDGPU_FAMILY_NV 143 /* Navi10 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1086)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1087) #if defined(__cplusplus)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1088) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1089) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1090)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1091) #endif