1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24#ifndef __AMDGPU_IH_H__
25#define __AMDGPU_IH_H__
26
27struct amdgpu_device;
28
29
30
31enum amdgpu_ih_clientid
32{
33 AMDGPU_IH_CLIENTID_IH = 0x00,
34 AMDGPU_IH_CLIENTID_ACP = 0x01,
35 AMDGPU_IH_CLIENTID_ATHUB = 0x02,
36 AMDGPU_IH_CLIENTID_BIF = 0x03,
37 AMDGPU_IH_CLIENTID_DCE = 0x04,
38 AMDGPU_IH_CLIENTID_ISP = 0x05,
39 AMDGPU_IH_CLIENTID_PCIE0 = 0x06,
40 AMDGPU_IH_CLIENTID_RLC = 0x07,
41 AMDGPU_IH_CLIENTID_SDMA0 = 0x08,
42 AMDGPU_IH_CLIENTID_SDMA1 = 0x09,
43 AMDGPU_IH_CLIENTID_SE0SH = 0x0a,
44 AMDGPU_IH_CLIENTID_SE1SH = 0x0b,
45 AMDGPU_IH_CLIENTID_SE2SH = 0x0c,
46 AMDGPU_IH_CLIENTID_SE3SH = 0x0d,
47 AMDGPU_IH_CLIENTID_SYSHUB = 0x0e,
48 AMDGPU_IH_CLIENTID_THM = 0x0f,
49 AMDGPU_IH_CLIENTID_UVD = 0x10,
50 AMDGPU_IH_CLIENTID_VCE0 = 0x11,
51 AMDGPU_IH_CLIENTID_VMC = 0x12,
52 AMDGPU_IH_CLIENTID_XDMA = 0x13,
53 AMDGPU_IH_CLIENTID_GRBM_CP = 0x14,
54 AMDGPU_IH_CLIENTID_ATS = 0x15,
55 AMDGPU_IH_CLIENTID_ROM_SMUIO = 0x16,
56 AMDGPU_IH_CLIENTID_DF = 0x17,
57 AMDGPU_IH_CLIENTID_VCE1 = 0x18,
58 AMDGPU_IH_CLIENTID_PWR = 0x19,
59 AMDGPU_IH_CLIENTID_UTCL2 = 0x1b,
60 AMDGPU_IH_CLIENTID_EA = 0x1c,
61 AMDGPU_IH_CLIENTID_UTCL2LOG = 0x1d,
62 AMDGPU_IH_CLIENTID_MP0 = 0x1e,
63 AMDGPU_IH_CLIENTID_MP1 = 0x1f,
64
65 AMDGPU_IH_CLIENTID_MAX
66
67};
68
69#define AMDGPU_IH_CLIENTID_LEGACY 0
70
71
72
73
74struct amdgpu_ih_ring {
75 struct amdgpu_bo *ring_obj;
76 volatile uint32_t *ring;
77 unsigned rptr;
78 unsigned ring_size;
79 uint64_t gpu_addr;
80 uint32_t ptr_mask;
81 atomic_t lock;
82 bool enabled;
83 unsigned wptr_offs;
84 unsigned rptr_offs;
85 u32 doorbell_index;
86 bool use_doorbell;
87 bool use_bus_addr;
88 dma_addr_t rb_dma_addr;
89};
90
91#define AMDGPU_IH_SRC_DATA_MAX_SIZE_DW 4
92
93struct amdgpu_iv_entry {
94 unsigned client_id;
95 unsigned src_id;
96 unsigned ring_id;
97 unsigned vm_id;
98 unsigned vm_id_src;
99 uint64_t timestamp;
100 unsigned timestamp_src;
101 unsigned pas_id;
102 unsigned pasid_src;
103 unsigned src_data[AMDGPU_IH_SRC_DATA_MAX_SIZE_DW];
104 const uint32_t *iv_entry;
105};
106
107int amdgpu_ih_ring_init(struct amdgpu_device *adev, unsigned ring_size,
108 bool use_bus_addr);
109void amdgpu_ih_ring_fini(struct amdgpu_device *adev);
110int amdgpu_ih_process(struct amdgpu_device *adev);
111
112#endif
113