xref: /aosp_15_r20/external/mesa3d/src/amd/common/sid.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright (C) 2011  Advanced Micro Devices, Inc.
3*61046927SAndroid Build Coastguard Worker  *
4*61046927SAndroid Build Coastguard Worker  * SPDX-License-Identifier: MIT
5*61046927SAndroid Build Coastguard Worker  */
6*61046927SAndroid Build Coastguard Worker 
7*61046927SAndroid Build Coastguard Worker #ifndef SID_H
8*61046927SAndroid Build Coastguard Worker #define SID_H
9*61046927SAndroid Build Coastguard Worker 
10*61046927SAndroid Build Coastguard Worker #include "amdgfxregs.h"
11*61046927SAndroid Build Coastguard Worker 
12*61046927SAndroid Build Coastguard Worker /* si values */
13*61046927SAndroid Build Coastguard Worker #define SI_CONFIG_REG_OFFSET       0x00008000
14*61046927SAndroid Build Coastguard Worker #define SI_CONFIG_REG_END          0x0000B000
15*61046927SAndroid Build Coastguard Worker #define SI_SH_REG_OFFSET           0x0000B000
16*61046927SAndroid Build Coastguard Worker #define SI_SH_REG_END              0x0000C000
17*61046927SAndroid Build Coastguard Worker #define SI_CONTEXT_REG_OFFSET      0x00028000
18*61046927SAndroid Build Coastguard Worker #define SI_CONTEXT_REG_END         0x00030000
19*61046927SAndroid Build Coastguard Worker #define CIK_UCONFIG_REG_OFFSET     0x00030000
20*61046927SAndroid Build Coastguard Worker #define CIK_UCONFIG_REG_END        0x00040000
21*61046927SAndroid Build Coastguard Worker #define SI_UCONFIG_PERF_REG_OFFSET 0x00034000
22*61046927SAndroid Build Coastguard Worker #define SI_UCONFIG_PERF_REG_END    0x00038000
23*61046927SAndroid Build Coastguard Worker 
24*61046927SAndroid Build Coastguard Worker /* For register shadowing: */
25*61046927SAndroid Build Coastguard Worker #define SI_SH_REG_SPACE_SIZE           (SI_SH_REG_END - SI_SH_REG_OFFSET)
26*61046927SAndroid Build Coastguard Worker #define SI_CONTEXT_REG_SPACE_SIZE      (SI_CONTEXT_REG_END - SI_CONTEXT_REG_OFFSET)
27*61046927SAndroid Build Coastguard Worker #define SI_UCONFIG_REG_SPACE_SIZE      (CIK_UCONFIG_REG_END - CIK_UCONFIG_REG_OFFSET)
28*61046927SAndroid Build Coastguard Worker #define SI_UCONFIG_PERF_REG_SPACE_SIZE (SI_UCONFIG_PERF_REG_END - SI_UCONFIG_PERF_REG_OFFSET)
29*61046927SAndroid Build Coastguard Worker 
30*61046927SAndroid Build Coastguard Worker #define SI_SHADOWED_SH_REG_OFFSET      0
31*61046927SAndroid Build Coastguard Worker #define SI_SHADOWED_CONTEXT_REG_OFFSET SI_SH_REG_SPACE_SIZE
32*61046927SAndroid Build Coastguard Worker #define SI_SHADOWED_UCONFIG_REG_OFFSET (SI_SH_REG_SPACE_SIZE + SI_CONTEXT_REG_SPACE_SIZE)
33*61046927SAndroid Build Coastguard Worker #define SI_SHADOWED_REG_BUFFER_SIZE                                                                \
34*61046927SAndroid Build Coastguard Worker    (SI_SH_REG_SPACE_SIZE + SI_CONTEXT_REG_SPACE_SIZE + SI_UCONFIG_REG_SPACE_SIZE)
35*61046927SAndroid Build Coastguard Worker 
36*61046927SAndroid Build Coastguard Worker /* All registers defined in this packet section don't exist and the only
37*61046927SAndroid Build Coastguard Worker  * purpose of these definitions is to define packet encoding that
38*61046927SAndroid Build Coastguard Worker  * the IB parser understands, and also to have an accurate documentation.
39*61046927SAndroid Build Coastguard Worker  */
40*61046927SAndroid Build Coastguard Worker #define PKT3_NOP                                   0x10
41*61046927SAndroid Build Coastguard Worker #define PKT3_SET_BASE                              0x11
42*61046927SAndroid Build Coastguard Worker #define PKT3_CLEAR_STATE                           0x12
43*61046927SAndroid Build Coastguard Worker #define PKT3_INDEX_BUFFER_SIZE                     0x13
44*61046927SAndroid Build Coastguard Worker #define PKT3_DISPATCH_DIRECT                       0x15
45*61046927SAndroid Build Coastguard Worker #define PKT3_DISPATCH_INDIRECT                     0x16
46*61046927SAndroid Build Coastguard Worker #define PKT3_ATOMIC_MEM                            0x1E
47*61046927SAndroid Build Coastguard Worker #define   ATOMIC_OP(x)                                ((unsigned)((x)&0x7f) << 0)
48*61046927SAndroid Build Coastguard Worker #define     TC_OP_ATOMIC_SUB_32                       0x10
49*61046927SAndroid Build Coastguard Worker #define     TC_OP_ATOMIC_CMPSWAP_32                   0x48
50*61046927SAndroid Build Coastguard Worker #define   ATOMIC_COMMAND(x)                           ((unsigned)((x)&0x3) << 8)
51*61046927SAndroid Build Coastguard Worker #define   ATOMIC_COMMAND_SINGLE_PASS                  0x0
52*61046927SAndroid Build Coastguard Worker #define   ATOMIC_COMMAND_LOOP                         0x1
53*61046927SAndroid Build Coastguard Worker #define PKT3_OCCLUSION_QUERY                       0x1F /* GFX7+ */
54*61046927SAndroid Build Coastguard Worker #define PKT3_SET_PREDICATION                       0x20
55*61046927SAndroid Build Coastguard Worker #define   PREDICATION_DRAW_NOT_VISIBLE                (0 << 8)
56*61046927SAndroid Build Coastguard Worker #define   PREDICATION_DRAW_VISIBLE                    (1 << 8)
57*61046927SAndroid Build Coastguard Worker #define   PREDICATION_HINT_WAIT                       (0 << 12)
58*61046927SAndroid Build Coastguard Worker #define   PREDICATION_HINT_NOWAIT_DRAW                (1 << 12)
59*61046927SAndroid Build Coastguard Worker #define   PRED_OP(x)                                  ((x) << 16)
60*61046927SAndroid Build Coastguard Worker #define     PREDICATION_OP_CLEAR                      0x0
61*61046927SAndroid Build Coastguard Worker #define     PREDICATION_OP_ZPASS                      0x1
62*61046927SAndroid Build Coastguard Worker #define     PREDICATION_OP_PRIMCOUNT                  0x2
63*61046927SAndroid Build Coastguard Worker #define     PREDICATION_OP_BOOL64                     0x3
64*61046927SAndroid Build Coastguard Worker #define     PREDICATION_OP_BOOL32                     0x4
65*61046927SAndroid Build Coastguard Worker #define   PREDICATION_CONTINUE                        (1 << 31)
66*61046927SAndroid Build Coastguard Worker #define PKT3_COND_EXEC                             0x22
67*61046927SAndroid Build Coastguard Worker #define PKT3_PRED_EXEC                             0x23
68*61046927SAndroid Build Coastguard Worker #define PKT3_DRAW_INDIRECT                         0x24
69*61046927SAndroid Build Coastguard Worker #define PKT3_DRAW_INDEX_INDIRECT                   0x25
70*61046927SAndroid Build Coastguard Worker #define PKT3_INDEX_BASE                            0x26
71*61046927SAndroid Build Coastguard Worker #define PKT3_DRAW_INDEX_2                          0x27
72*61046927SAndroid Build Coastguard Worker #define PKT3_CONTEXT_CONTROL                       0x28
73*61046927SAndroid Build Coastguard Worker #define   CC0_LOAD_GLOBAL_CONFIG(x)                   (((unsigned)(x)&0x1) << 0)
74*61046927SAndroid Build Coastguard Worker #define   CC0_LOAD_PER_CONTEXT_STATE(x)               (((unsigned)(x)&0x1) << 1)
75*61046927SAndroid Build Coastguard Worker #define   CC0_LOAD_GLOBAL_UCONFIG(x)                  (((unsigned)(x)&0x1) << 15)
76*61046927SAndroid Build Coastguard Worker #define   CC0_LOAD_GFX_SH_REGS(x)                     (((unsigned)(x)&0x1) << 16)
77*61046927SAndroid Build Coastguard Worker #define   CC0_LOAD_CS_SH_REGS(x)                      (((unsigned)(x)&0x1) << 24)
78*61046927SAndroid Build Coastguard Worker #define   CC0_LOAD_CE_RAM(x)                          (((unsigned)(x)&0x1) << 28)
79*61046927SAndroid Build Coastguard Worker #define   CC0_UPDATE_LOAD_ENABLES(x)                  (((unsigned)(x)&0x1) << 31)
80*61046927SAndroid Build Coastguard Worker #define   CC1_SHADOW_GLOBAL_CONFIG(x)                 (((unsigned)(x)&0x1) << 0)
81*61046927SAndroid Build Coastguard Worker #define   CC1_SHADOW_PER_CONTEXT_STATE(x)             (((unsigned)(x)&0x1) << 1)
82*61046927SAndroid Build Coastguard Worker #define   CC1_SHADOW_GLOBAL_UCONFIG(x)                (((unsigned)(x)&0x1) << 15)
83*61046927SAndroid Build Coastguard Worker #define   CC1_SHADOW_GFX_SH_REGS(x)                   (((unsigned)(x)&0x1) << 16)
84*61046927SAndroid Build Coastguard Worker #define   CC1_SHADOW_CS_SH_REGS(x)                    (((unsigned)(x)&0x1) << 24)
85*61046927SAndroid Build Coastguard Worker #define   CC1_UPDATE_SHADOW_ENABLES(x)                (((unsigned)(x)&0x1) << 31)
86*61046927SAndroid Build Coastguard Worker #define PKT3_INDEX_TYPE                            0x2A /* GFX6-8 */
87*61046927SAndroid Build Coastguard Worker #define PKT3_DRAW_INDIRECT_MULTI                   0x2C
88*61046927SAndroid Build Coastguard Worker #define   R_2C3_DRAW_INDEX_LOC                     0x2C3
89*61046927SAndroid Build Coastguard Worker #define   S_2C3_COUNT_INDIRECT_ENABLE(x)              (((unsigned)(x)&0x1) << 30)
90*61046927SAndroid Build Coastguard Worker #define   S_2C3_DRAW_INDEX_ENABLE(x)                  (((unsigned)(x)&0x1) << 31)
91*61046927SAndroid Build Coastguard Worker #define PKT3_DRAW_INDEX_AUTO                       0x2D
92*61046927SAndroid Build Coastguard Worker #define PKT3_DRAW_INDEX_IMMD                       0x2E /* GFX6 only */
93*61046927SAndroid Build Coastguard Worker #define PKT3_NUM_INSTANCES                         0x2F
94*61046927SAndroid Build Coastguard Worker #define PKT3_DRAW_INDEX_MULTI_AUTO                 0x30
95*61046927SAndroid Build Coastguard Worker #define PKT3_INDIRECT_BUFFER_SI                    0x32 /* GFX6 only */
96*61046927SAndroid Build Coastguard Worker #define PKT3_INDIRECT_BUFFER_CONST                 0x33
97*61046927SAndroid Build Coastguard Worker #define PKT3_STRMOUT_BUFFER_UPDATE                 0x34
98*61046927SAndroid Build Coastguard Worker #define   STRMOUT_STORE_BUFFER_FILLED_SIZE            1
99*61046927SAndroid Build Coastguard Worker #define   STRMOUT_OFFSET_SOURCE(x)                    (((unsigned)(x)&0x3) << 1)
100*61046927SAndroid Build Coastguard Worker #define   STRMOUT_OFFSET_FROM_PACKET                  0
101*61046927SAndroid Build Coastguard Worker #define   STRMOUT_OFFSET_FROM_VGT_FILLED_SIZE         1
102*61046927SAndroid Build Coastguard Worker #define   STRMOUT_OFFSET_FROM_MEM                     2
103*61046927SAndroid Build Coastguard Worker #define   STRMOUT_OFFSET_NONE                         3
104*61046927SAndroid Build Coastguard Worker #define   STRMOUT_DATA_TYPE(x)                        (((unsigned)(x)&0x1) << 7)
105*61046927SAndroid Build Coastguard Worker #define   STRMOUT_SELECT_BUFFER(x)                    (((unsigned)(x)&0x3) << 8)
106*61046927SAndroid Build Coastguard Worker #define PKT3_DRAW_INDEX_OFFSET_2                   0x35
107*61046927SAndroid Build Coastguard Worker #define PKT3_WRITE_DATA                            0x37
108*61046927SAndroid Build Coastguard Worker #define PKT3_DRAW_INDEX_INDIRECT_MULTI             0x38
109*61046927SAndroid Build Coastguard Worker #define PKT3_MEM_SEMAPHORE                         0x39
110*61046927SAndroid Build Coastguard Worker #define PKT3_MPEG_INDEX                            0x3A /* GFX6 only */
111*61046927SAndroid Build Coastguard Worker #define PKT3_WAIT_REG_MEM                          0x3C
112*61046927SAndroid Build Coastguard Worker #define   WAIT_REG_MEM_EQUAL                          3
113*61046927SAndroid Build Coastguard Worker #define   WAIT_REG_MEM_NOT_EQUAL                      4
114*61046927SAndroid Build Coastguard Worker #define   WAIT_REG_MEM_GREATER_OR_EQUAL               5
115*61046927SAndroid Build Coastguard Worker #define   WAIT_REG_MEM_MEM_SPACE(x)                   (((unsigned)(x)&0x3) << 4)
116*61046927SAndroid Build Coastguard Worker #define   WAIT_REG_MEM_PFP                            (1 << 8)
117*61046927SAndroid Build Coastguard Worker #define PKT3_MEM_WRITE                             0x3D /* GFX6 only */
118*61046927SAndroid Build Coastguard Worker #define PKT3_INDIRECT_BUFFER                       0x3F /* GFX6+ */
119*61046927SAndroid Build Coastguard Worker #define PKT3_COPY_DATA                             0x40
120*61046927SAndroid Build Coastguard Worker #define   COPY_DATA_SRC_SEL(x)                        ((x)&0xf)
121*61046927SAndroid Build Coastguard Worker #define   COPY_DATA_REG                               0
122*61046927SAndroid Build Coastguard Worker #define   COPY_DATA_SRC_MEM                           1 /* only valid as source */
123*61046927SAndroid Build Coastguard Worker #define   COPY_DATA_TC_L2                             2
124*61046927SAndroid Build Coastguard Worker #define   COPY_DATA_GDS                               3
125*61046927SAndroid Build Coastguard Worker #define   COPY_DATA_PERF                              4
126*61046927SAndroid Build Coastguard Worker #define   COPY_DATA_IMM                               5
127*61046927SAndroid Build Coastguard Worker #define   COPY_DATA_TIMESTAMP                         9
128*61046927SAndroid Build Coastguard Worker #define   COPY_DATA_DST_SEL(x)                        (((unsigned)(x)&0xf) << 8)
129*61046927SAndroid Build Coastguard Worker #define   COPY_DATA_DST_MEM_GRBM                      1 /* sync across GRBM, deprecated */
130*61046927SAndroid Build Coastguard Worker #define   COPY_DATA_TC_L2                             2
131*61046927SAndroid Build Coastguard Worker #define   COPY_DATA_GDS                               3
132*61046927SAndroid Build Coastguard Worker #define   COPY_DATA_PERF                              4
133*61046927SAndroid Build Coastguard Worker #define   COPY_DATA_DST_MEM                           5
134*61046927SAndroid Build Coastguard Worker #define   COPY_DATA_COUNT_SEL                         (1 << 16)
135*61046927SAndroid Build Coastguard Worker #define   COPY_DATA_WR_CONFIRM                        (1 << 20)
136*61046927SAndroid Build Coastguard Worker #define   COPY_DATA_ENGINE_PFP                        (1 << 30)
137*61046927SAndroid Build Coastguard Worker /* 1. header
138*61046927SAndroid Build Coastguard Worker  * 2. SRC_ADDR_LO [31:0] or DATA [31:0]
139*61046927SAndroid Build Coastguard Worker  * 3. CP_SYNC [31] | SRC_SEL [30:29] | ENGINE [27] | DST_SEL [21:20] | SRC_ADDR_HI [15:0]
140*61046927SAndroid Build Coastguard Worker  * 4. DST_ADDR_LO [31:0]
141*61046927SAndroid Build Coastguard Worker  * 5. DST_ADDR_HI [15:0]
142*61046927SAndroid Build Coastguard Worker  * 6. COMMAND [29:22] | BYTE_COUNT [20:0]
143*61046927SAndroid Build Coastguard Worker  */
144*61046927SAndroid Build Coastguard Worker #define PKT3_CP_DMA                                0x41 /* GFX6 only */
145*61046927SAndroid Build Coastguard Worker #define PKT3_PFP_SYNC_ME                           0x42
146*61046927SAndroid Build Coastguard Worker #define PKT3_SURFACE_SYNC                          0x43 /* deprecated on GFX7, use ACQUIRE_MEM */
147*61046927SAndroid Build Coastguard Worker #define PKT3_ME_INITIALIZE                         0x44 /* GFX6 only */
148*61046927SAndroid Build Coastguard Worker #define PKT3_COND_WRITE                            0x45
149*61046927SAndroid Build Coastguard Worker #define PKT3_EVENT_WRITE                           0x46
150*61046927SAndroid Build Coastguard Worker #define   EVENT_TYPE(x)                               ((x) << 0)
151*61046927SAndroid Build Coastguard Worker /* 0 - any non-TS event
152*61046927SAndroid Build Coastguard Worker  * 1 - ZPASS_DONE
153*61046927SAndroid Build Coastguard Worker  * 2 - SAMPLE_PIPELINESTAT
154*61046927SAndroid Build Coastguard Worker  * 3 - SAMPLE_STREAMOUTSTAT*
155*61046927SAndroid Build Coastguard Worker  * 4 - *S_PARTIAL_FLUSH
156*61046927SAndroid Build Coastguard Worker  * 5 - TS events
157*61046927SAndroid Build Coastguard Worker  */
158*61046927SAndroid Build Coastguard Worker #define   EVENT_INDEX(x)                              ((x) << 8)
159*61046927SAndroid Build Coastguard Worker #define   PIXEL_PIPE_STATE_CNTL_COUNTER_ID(x)         ((x) << 3)
160*61046927SAndroid Build Coastguard Worker #define   PIXEL_PIPE_STATE_CNTL_STRIDE(x)             ((x) << 9)
161*61046927SAndroid Build Coastguard Worker /* 0 - 32 bits
162*61046927SAndroid Build Coastguard Worker  * 1 - 64 bits
163*61046927SAndroid Build Coastguard Worker  * 2 - 128 bits
164*61046927SAndroid Build Coastguard Worker  * 3 - 256 bits
165*61046927SAndroid Build Coastguard Worker  */
166*61046927SAndroid Build Coastguard Worker #define   PIXEL_PIPE_STATE_CNTL_INSTANCE_EN_LO(x)     ((x) << 11)
167*61046927SAndroid Build Coastguard Worker #define   PIXEL_PIPE_STATE_CNTL_INSTANCE_EN_HI(x)     ((x) >> 21)
168*61046927SAndroid Build Coastguard Worker #define PKT3_EVENT_WRITE_EOP                       0x47 /* GFX6-8 */
169*61046927SAndroid Build Coastguard Worker /* EVENT_WRITE_EOP (GFX6-8) & RELEASE_MEM (GFX9) */
170*61046927SAndroid Build Coastguard Worker #define   EVENT_TCL1_VOL_ACTION_ENA                   (1 << 12)
171*61046927SAndroid Build Coastguard Worker #define   EVENT_TC_VOL_ACTION_ENA                     (1 << 13)
172*61046927SAndroid Build Coastguard Worker #define   EVENT_TC_WB_ACTION_ENA                      (1 << 15)
173*61046927SAndroid Build Coastguard Worker #define   EVENT_TCL1_ACTION_ENA                       (1 << 16)
174*61046927SAndroid Build Coastguard Worker #define   EVENT_TC_ACTION_ENA                         (1 << 17)
175*61046927SAndroid Build Coastguard Worker #define   EVENT_TC_NC_ACTION_ENA                      (1 << 19) /* GFX9+ */
176*61046927SAndroid Build Coastguard Worker #define   EVENT_TC_WC_ACTION_ENA                      (1 << 20) /* GFX9+ */
177*61046927SAndroid Build Coastguard Worker #define   EVENT_TC_MD_ACTION_ENA                      (1 << 21) /* GFX9+ */
178*61046927SAndroid Build Coastguard Worker #define   EOP_DST_SEL(x)                              ((x) << 16)
179*61046927SAndroid Build Coastguard Worker #define     EOP_DST_SEL_MEM                           0
180*61046927SAndroid Build Coastguard Worker #define     EOP_DST_SEL_TC_L2                         1
181*61046927SAndroid Build Coastguard Worker #define   EOP_INT_SEL(x)                              ((x) << 24)
182*61046927SAndroid Build Coastguard Worker #define     EOP_INT_SEL_NONE                          0
183*61046927SAndroid Build Coastguard Worker #define     EOP_INT_SEL_SEND_DATA_AFTER_WR_CONFIRM    3
184*61046927SAndroid Build Coastguard Worker #define   EOP_DATA_SEL(x)                             ((x) << 29)
185*61046927SAndroid Build Coastguard Worker #define     EOP_DATA_SEL_DISCARD                      0
186*61046927SAndroid Build Coastguard Worker #define     EOP_DATA_SEL_VALUE_32BIT                  1
187*61046927SAndroid Build Coastguard Worker #define     EOP_DATA_SEL_VALUE_64BIT                  2
188*61046927SAndroid Build Coastguard Worker #define     EOP_DATA_SEL_TIMESTAMP                    3
189*61046927SAndroid Build Coastguard Worker #define     EOP_DATA_SEL_GDS                          5
190*61046927SAndroid Build Coastguard Worker #define   EOP_DATA_GDS(dw_offset, num_dwords)         ((dw_offset) | ((unsigned)(num_dwords) << 16))
191*61046927SAndroid Build Coastguard Worker #define PKT3_EVENT_WRITE_EOS                       0x48 /* GFX6-8 */
192*61046927SAndroid Build Coastguard Worker #define   EOS_DATA_SEL(x)                             ((x) << 29)
193*61046927SAndroid Build Coastguard Worker #define     EOS_DATA_SEL_APPEND_COUNT                 0
194*61046927SAndroid Build Coastguard Worker #define     EOS_DATA_SEL_GDS                          1
195*61046927SAndroid Build Coastguard Worker #define     EOS_DATA_SEL_VALUE_32BIT                  2
196*61046927SAndroid Build Coastguard Worker /* CP DMA bug: Any use of CP_DMA.DST_SEL=TC must be avoided when EOS packets
197*61046927SAndroid Build Coastguard Worker  * are used. Use DST_SEL=MC instead. For prefetch, use SRC_SEL=TC and
198*61046927SAndroid Build Coastguard Worker  * DST_SEL=MC. Only GFX7 chips are affected.
199*61046927SAndroid Build Coastguard Worker  */
200*61046927SAndroid Build Coastguard Worker #define PKT3_EVENT_WRITE_EOS                       0x48 /* GFX6-8, breaks CP DMA */
201*61046927SAndroid Build Coastguard Worker #define PKT3_RELEASE_MEM                           0x49 /* GFX9+ [any ring] or GFX8 [compute ring only] */
202*61046927SAndroid Build Coastguard Worker /* 1. header
203*61046927SAndroid Build Coastguard Worker  * 2. CP_SYNC [31] | SRC_SEL [30:29] | DST_SEL [21:20] | ENGINE [0]
204*61046927SAndroid Build Coastguard Worker  * 2. SRC_ADDR_LO [31:0] or DATA [31:0]
205*61046927SAndroid Build Coastguard Worker  * 3. SRC_ADDR_HI [31:0]
206*61046927SAndroid Build Coastguard Worker  * 4. DST_ADDR_LO [31:0]
207*61046927SAndroid Build Coastguard Worker  * 5. DST_ADDR_HI [31:0]
208*61046927SAndroid Build Coastguard Worker  * 6. COMMAND [29:22] | BYTE_COUNT [20:0]
209*61046927SAndroid Build Coastguard Worker  */
210*61046927SAndroid Build Coastguard Worker #define PKT3_DISPATCH_MESH_INDIRECT_MULTI          0x4C /* Indirect mesh shader only dispatch [GFX only], GFX10.3+ */
211*61046927SAndroid Build Coastguard Worker #define   S_4C1_XYZ_DIM_REG(x)                        ((x & 0xFFFF))
212*61046927SAndroid Build Coastguard Worker #define   S_4C1_DRAW_INDEX_REG(x)                     ((x & 0xFFFF) << 16)
213*61046927SAndroid Build Coastguard Worker #define   S_4C2_DRAW_INDEX_ENABLE(x)                  ((x & 1) << 31)
214*61046927SAndroid Build Coastguard Worker #define   S_4C2_COUNT_INDIRECT_ENABLE(x)              ((x & 1) << 30)
215*61046927SAndroid Build Coastguard Worker #define   S_4C2_THREAD_TRACE_MARKER_ENABLE(x)         ((x & 1) << 29)
216*61046927SAndroid Build Coastguard Worker #define   S_4C2_XYZ_DIM_ENABLE(x)                     ((x & 1) << 28) /* GFX11+ */
217*61046927SAndroid Build Coastguard Worker #define   S_4C2_MODE1_ENABLE(x)                       ((x & 1) << 27) /* GFX11+ */
218*61046927SAndroid Build Coastguard Worker #define PKT3_DISPATCH_TASKMESH_GFX                 0x4D /* Task + mesh shader dispatch [GFX side], GFX10.3+ */
219*61046927SAndroid Build Coastguard Worker #define   S_4D0_RING_ENTRY_REG(x)                     ((x & 0xFFFF) << 16)
220*61046927SAndroid Build Coastguard Worker #define   S_4D0_XYZ_DIM_REG(x)                        ((x & 0xFFFF))
221*61046927SAndroid Build Coastguard Worker #define   S_4D1_THREAD_TRACE_MARKER_ENABLE(x)         ((x & 1) << 31)
222*61046927SAndroid Build Coastguard Worker #define   S_4D1_XYZ_DIM_ENABLE(x)                     ((x & 1) << 30) /* GFX11+ */
223*61046927SAndroid Build Coastguard Worker #define   S_4D1_MODE1_ENABLE(x)                       ((x & 1) << 29) /* GFX11+ */
224*61046927SAndroid Build Coastguard Worker #define   S_4D1_LINEAR_DISPATCH_ENABLE(x)             ((x & 1) << 28) /* GFX11+ */
225*61046927SAndroid Build Coastguard Worker #define PKT3_DISPATCH_MESH_DIRECT                  0x4E /* Direct mesh shader only dispatch [GFX only], GFX11+ */
226*61046927SAndroid Build Coastguard Worker #define PKT3_DMA_DATA                              0x50 /* GFX7+ */
227*61046927SAndroid Build Coastguard Worker #define PKT3_CONTEXT_REG_RMW                       0x51 /* older firmware versions on older chips don't have this */
228*61046927SAndroid Build Coastguard Worker #define PKT3_ONE_REG_WRITE                         0x57 /* GFX6 only */
229*61046927SAndroid Build Coastguard Worker #define PKT3_ACQUIRE_MEM                           0x58 /* GFX7+ */
230*61046927SAndroid Build Coastguard Worker #define PKT3_REWIND                                0x59 /* GFX8+ [any ring] or GFX7 [compute ring only] */
231*61046927SAndroid Build Coastguard Worker #define PKT3_PRIME_UTCL2                           0x5D
232*61046927SAndroid Build Coastguard Worker #define PKT3_LOAD_UCONFIG_REG                      0x5E /* GFX7+ */
233*61046927SAndroid Build Coastguard Worker #define PKT3_LOAD_SH_REG                           0x5F
234*61046927SAndroid Build Coastguard Worker #define PKT3_LOAD_CONTEXT_REG                      0x61
235*61046927SAndroid Build Coastguard Worker #define PKT3_LOAD_SH_REG_INDEX                     0x63 /* GFX8+ */
236*61046927SAndroid Build Coastguard Worker #define PKT3_SET_CONFIG_REG                        0x68
237*61046927SAndroid Build Coastguard Worker #define PKT3_SET_CONTEXT_REG                       0x69
238*61046927SAndroid Build Coastguard Worker #define PKT3_SET_SH_REG                            0x76
239*61046927SAndroid Build Coastguard Worker #define PKT3_SET_SH_REG_OFFSET                     0x77
240*61046927SAndroid Build Coastguard Worker #define PKT3_SET_UCONFIG_REG                       0x79 /* GFX7+ */
241*61046927SAndroid Build Coastguard Worker #define PKT3_SET_UCONFIG_REG_INDEX                 0x7A /* new for GFX9, CP ucode version >= 26 */
242*61046927SAndroid Build Coastguard Worker #define PKT3_LOAD_CONST_RAM                        0x80
243*61046927SAndroid Build Coastguard Worker #define PKT3_WRITE_CONST_RAM                       0x81
244*61046927SAndroid Build Coastguard Worker #define PKT3_DUMP_CONST_RAM                        0x83
245*61046927SAndroid Build Coastguard Worker #define PKT3_INCREMENT_CE_COUNTER                  0x84
246*61046927SAndroid Build Coastguard Worker #define PKT3_INCREMENT_DE_COUNTER                  0x85
247*61046927SAndroid Build Coastguard Worker #define PKT3_WAIT_ON_CE_COUNTER                    0x86
248*61046927SAndroid Build Coastguard Worker #define PKT3_SET_SH_REG_INDEX                      0x9B
249*61046927SAndroid Build Coastguard Worker #define PKT3_LOAD_CONTEXT_REG_INDEX                0x9F /* GFX8+ */
250*61046927SAndroid Build Coastguard Worker #define PKT3_DISPATCH_DIRECT_INTERLEAVED           0xA7 /* GFX12+ */
251*61046927SAndroid Build Coastguard Worker #define PKT3_DISPATCH_INDIRECT_INTERLEAVED         0xA8 /* GFX12+ */
252*61046927SAndroid Build Coastguard Worker #define PKT3_DISPATCH_TASK_STATE_INIT              0xA9 /* Tells the HW about the task control buffer, GFX10.3+ */
253*61046927SAndroid Build Coastguard Worker #define PKT3_DISPATCH_TASKMESH_DIRECT_ACE          0xAA /* Direct task + mesh shader dispatch [ACE side], GFX10.3+ */
254*61046927SAndroid Build Coastguard Worker #define PKT3_DISPATCH_TASKMESH_INDIRECT_MULTI_ACE  0xAD /* Indirect task + mesh shader dispatch [ACE side], GFX10.3+ */
255*61046927SAndroid Build Coastguard Worker #define   S_AD2_RING_ENTRY_REG(x)                     ((x & 0xFFFF))
256*61046927SAndroid Build Coastguard Worker #define   S_AD3_COUNT_INDIRECT_ENABLE(x)              ((x & 1) << 1)
257*61046927SAndroid Build Coastguard Worker #define   S_AD3_DRAW_INDEX_ENABLE(x)                  ((x & 1) << 2)
258*61046927SAndroid Build Coastguard Worker #define   S_AD3_XYZ_DIM_ENABLE(x)                     ((x & 1) << 3)
259*61046927SAndroid Build Coastguard Worker #define   S_AD3_DRAW_INDEX_REG(x)                     ((x & 0xFFFF) << 16)
260*61046927SAndroid Build Coastguard Worker #define   S_AD4_XYZ_DIM_REG(x)                        ((x & 0xFFFF))
261*61046927SAndroid Build Coastguard Worker #define PKT3_EVENT_WRITE_ZPASS                     0xB1 /* GFX11+ & PFP version >= 1458 */
262*61046927SAndroid Build Coastguard Worker #define   EVENT_WRITE_ZPASS_PFP_VERSION               1458
263*61046927SAndroid Build Coastguard Worker /* Use these on GFX11 with a high PFP firmware version (only dGPUs should have that, not APUs)
264*61046927SAndroid Build Coastguard Worker  * because they are the fastest SET packets there.
265*61046927SAndroid Build Coastguard Worker  *    SET_CONTEXT_REG_PAIRS_PACKED:
266*61046927SAndroid Build Coastguard Worker  *    SET_SH_REG_PAIRS_PACKED:
267*61046927SAndroid Build Coastguard Worker  *    SET_SH_REG_PAIRS_PACKED_N:
268*61046927SAndroid Build Coastguard Worker  *      Format: header, count, (offset0 | (offset1 << 16), value0, value1)^(count / 2)
269*61046927SAndroid Build Coastguard Worker  *      - "count" is the register count and must be aligned to 2.
270*61046927SAndroid Build Coastguard Worker  *      - Consecutive offsets must not be equal.
271*61046927SAndroid Build Coastguard Worker  *      - RESET_FILTER_CAM must be set to 1.
272*61046927SAndroid Build Coastguard Worker  *      - If the register count is odd, write the first register again at the end to make it even.
273*61046927SAndroid Build Coastguard Worker  *      - The SH_*_PACKED* variants require register shadowing to be enabled.
274*61046927SAndroid Build Coastguard Worker  *      - The *_N variant is identical to the non-N variant, but the maximum allowed "count" is 14
275*61046927SAndroid Build Coastguard Worker  *        and it's faster.
276*61046927SAndroid Build Coastguard Worker  *
277*61046927SAndroid Build Coastguard Worker  * Use these on GFX12 because they are the fastest SET packets there. The PACKED variants don't
278*61046927SAndroid Build Coastguard Worker  * exist on GFX12.
279*61046927SAndroid Build Coastguard Worker  *    SET_CONTEXT_REG_PAIRS:
280*61046927SAndroid Build Coastguard Worker  *    SET_SH_REG_PAIRS:
281*61046927SAndroid Build Coastguard Worker  *    SET_UCONFIG_REG_PAIRS:
282*61046927SAndroid Build Coastguard Worker  *      Format: header, (offset, value)^n.
283*61046927SAndroid Build Coastguard Worker  *      - Consecutive offsets must not be equal.
284*61046927SAndroid Build Coastguard Worker  *      - RESET_FILTER_CAM must be set to 1.
285*61046927SAndroid Build Coastguard Worker  */
286*61046927SAndroid Build Coastguard Worker #define PKT3_SET_CONTEXT_REG_PAIRS                 0xB8 /* GFX11+; only use on GFX12, not GFX11 */
287*61046927SAndroid Build Coastguard Worker #define PKT3_SET_CONTEXT_REG_PAIRS_PACKED          0xB9 /* GFX11 dGPUs only */
288*61046927SAndroid Build Coastguard Worker #define PKT3_SET_SH_REG_PAIRS                      0xBA /* GFX11+; only use on GFX12, not GFX11 */
289*61046927SAndroid Build Coastguard Worker #define PKT3_SET_SH_REG_PAIRS_PACKED               0xBB /* GFX11 dGPUs only */
290*61046927SAndroid Build Coastguard Worker #define PKT3_SET_SH_REG_PAIRS_PACKED_N             0xBD /* GFX11 dGPUs only */
291*61046927SAndroid Build Coastguard Worker #define PKT3_SET_UCONFIG_REG_PAIRS                 0xBE /* GFX12+ */
292*61046927SAndroid Build Coastguard Worker 
293*61046927SAndroid Build Coastguard Worker #define PKT_TYPE_S(x)         (((unsigned)(x)&0x3) << 30)
294*61046927SAndroid Build Coastguard Worker #define PKT_TYPE_G(x)         (((x) >> 30) & 0x3)
295*61046927SAndroid Build Coastguard Worker #define PKT_TYPE_C            0x3FFFFFFF
296*61046927SAndroid Build Coastguard Worker #define PKT_COUNT_S(x)        (((unsigned)(x)&0x3FFF) << 16)
297*61046927SAndroid Build Coastguard Worker #define PKT_COUNT_G(x)        (((x) >> 16) & 0x3FFF)
298*61046927SAndroid Build Coastguard Worker #define PKT_COUNT_C           0xC000FFFF
299*61046927SAndroid Build Coastguard Worker #define PKT3_IT_OPCODE_S(x)   (((unsigned)(x)&0xFF) << 8)
300*61046927SAndroid Build Coastguard Worker #define PKT3_IT_OPCODE_G(x)   (((x) >> 8) & 0xFF)
301*61046927SAndroid Build Coastguard Worker #define PKT3_IT_OPCODE_C      0xFFFF00FF
302*61046927SAndroid Build Coastguard Worker #define PKT3_PREDICATE(x)     (((x) >> 0) & 0x1)
303*61046927SAndroid Build Coastguard Worker #define PKT3_SHADER_TYPE_S(x) (((unsigned)(x) & 0x1) << 1)
304*61046927SAndroid Build Coastguard Worker #define PKT3_SHADER_TYPE_G(x) (((x) >> 1) & 0x1)
305*61046927SAndroid Build Coastguard Worker #define PKT3_RESET_FILTER_CAM_S(x) (((unsigned)(x) & 0x1) << 2)
306*61046927SAndroid Build Coastguard Worker #define PKT3_RESET_FILTER_CAM_G(x) (((unsigned)(x) >> 2) & 0x1)
307*61046927SAndroid Build Coastguard Worker #define PKT3(op, count, predicate)                                                                 \
308*61046927SAndroid Build Coastguard Worker    (PKT_TYPE_S(3) | PKT_COUNT_S(count) | PKT3_IT_OPCODE_S(op) | PKT3_PREDICATE(predicate))
309*61046927SAndroid Build Coastguard Worker 
310*61046927SAndroid Build Coastguard Worker #define PKT2_NOP_PAD PKT_TYPE_S(2)
311*61046927SAndroid Build Coastguard Worker #define PKT3_NOP_PAD PKT3(PKT3_NOP, 0x3fff, 0) /* header-only version */
312*61046927SAndroid Build Coastguard Worker 
313*61046927SAndroid Build Coastguard Worker /* SI async DMA packets */
314*61046927SAndroid Build Coastguard Worker #define SI_DMA_PACKET(cmd, sub_cmd, n)                                                             \
315*61046927SAndroid Build Coastguard Worker    ((((unsigned)(cmd)&0xF) << 28) | (((unsigned)(sub_cmd)&0xFF) << 20) |                           \
316*61046927SAndroid Build Coastguard Worker     (((unsigned)(n)&0xFFFFF) << 0))
317*61046927SAndroid Build Coastguard Worker /* SI async DMA Packet types */
318*61046927SAndroid Build Coastguard Worker #define SI_DMA_PACKET_WRITE               0x2
319*61046927SAndroid Build Coastguard Worker #define SI_DMA_PACKET_COPY                0x3
320*61046927SAndroid Build Coastguard Worker #define SI_DMA_COPY_MAX_BYTE_ALIGNED_SIZE 0xfffe0
321*61046927SAndroid Build Coastguard Worker /* The documentation says 0xffff8 is the maximum size in dwords, which is
322*61046927SAndroid Build Coastguard Worker  * 0x3fffe0 in bytes. */
323*61046927SAndroid Build Coastguard Worker #define SI_DMA_COPY_MAX_DWORD_ALIGNED_SIZE 0x3fffe0
324*61046927SAndroid Build Coastguard Worker #define SI_DMA_COPY_DWORD_ALIGNED          0x00
325*61046927SAndroid Build Coastguard Worker #define SI_DMA_COPY_BYTE_ALIGNED           0x40
326*61046927SAndroid Build Coastguard Worker #define SI_DMA_COPY_TILED                  0x8
327*61046927SAndroid Build Coastguard Worker #define SI_DMA_PACKET_INDIRECT_BUFFER      0x4
328*61046927SAndroid Build Coastguard Worker #define SI_DMA_PACKET_SEMAPHORE            0x5
329*61046927SAndroid Build Coastguard Worker #define SI_DMA_PACKET_FENCE                0x6
330*61046927SAndroid Build Coastguard Worker #define SI_DMA_PACKET_TRAP                 0x7
331*61046927SAndroid Build Coastguard Worker #define SI_DMA_PACKET_SRBM_WRITE           0x9
332*61046927SAndroid Build Coastguard Worker #define SI_DMA_PACKET_CONSTANT_FILL        0xd
333*61046927SAndroid Build Coastguard Worker #define SI_DMA_PACKET_NOP                  0xf
334*61046927SAndroid Build Coastguard Worker 
335*61046927SAndroid Build Coastguard Worker /* CIK async DMA packets */
336*61046927SAndroid Build Coastguard Worker #define SDMA_PACKET(op, sub_op, n)                                                                 \
337*61046927SAndroid Build Coastguard Worker    ((((unsigned)(n)&0xFFFF) << 16) | (((unsigned)(sub_op)&0xFF) << 8) |                            \
338*61046927SAndroid Build Coastguard Worker     (((unsigned)(op)&0xFF) << 0))
339*61046927SAndroid Build Coastguard Worker /* CIK async DMA packet types */
340*61046927SAndroid Build Coastguard Worker #define SDMA_OPCODE_NOP                            0x0
341*61046927SAndroid Build Coastguard Worker #define SDMA_OPCODE_COPY                           0x1
342*61046927SAndroid Build Coastguard Worker #define SDMA_COPY_SUB_OPCODE_LINEAR                0x0
343*61046927SAndroid Build Coastguard Worker #define SDMA_COPY_SUB_OPCODE_TILED                 0x1
344*61046927SAndroid Build Coastguard Worker #define SDMA_COPY_SUB_OPCODE_SOA                   0x3
345*61046927SAndroid Build Coastguard Worker #define SDMA_COPY_SUB_OPCODE_LINEAR_SUB_WINDOW     0x4
346*61046927SAndroid Build Coastguard Worker #define SDMA_COPY_SUB_OPCODE_TILED_SUB_WINDOW      0x5
347*61046927SAndroid Build Coastguard Worker #define SDMA_COPY_SUB_OPCODE_T2T_SUB_WINDOW        0x6
348*61046927SAndroid Build Coastguard Worker #define SDMA_OPCODE_WRITE                          0x2
349*61046927SAndroid Build Coastguard Worker #define SDMA_WRITE_SUB_OPCODE_LINEAR               0x0
350*61046927SAndroid Build Coastguard Worker #define SDMA_WRITE_SUB_OPCODE_TILED                0x1
351*61046927SAndroid Build Coastguard Worker #define SDMA_OPCODE_INDIRECT_BUFFER                0x4
352*61046927SAndroid Build Coastguard Worker #define SDMA_OPCODE_FENCE                          0x5
353*61046927SAndroid Build Coastguard Worker #define SDMA_FENCE_MTYPE_UC                        0x3
354*61046927SAndroid Build Coastguard Worker #define SDMA_OPCODE_TRAP                           0x6
355*61046927SAndroid Build Coastguard Worker #define SDMA_OPCODE_SEMAPHORE                      0x7
356*61046927SAndroid Build Coastguard Worker #define SDMA_OPCODE_POLL_REGMEM                    0x8
357*61046927SAndroid Build Coastguard Worker #define SDMA_POLL_MEM                              (1 << 31)
358*61046927SAndroid Build Coastguard Worker #define SDMA_POLL_INTERVAL_160_CLK                 0xa
359*61046927SAndroid Build Coastguard Worker #define SDMA_POLL_RETRY_INDEFINITELY               0xfff
360*61046927SAndroid Build Coastguard Worker #define SDMA_OPCODE_CONSTANT_FILL                  0xb
361*61046927SAndroid Build Coastguard Worker #define SDMA_OPCODE_TIMESTAMP                      0xd
362*61046927SAndroid Build Coastguard Worker #define SDMA_TS_SUB_OPCODE_SET_LOCAL_TIMESTAMP     0x0
363*61046927SAndroid Build Coastguard Worker #define SDMA_TS_SUB_OPCODE_GET_LOCAL_TIMESTAMP     0x1
364*61046927SAndroid Build Coastguard Worker #define SDMA_TS_SUB_OPCODE_GET_GLOBAL_TIMESTAMP    0x2
365*61046927SAndroid Build Coastguard Worker #define SDMA_OPCODE_SRBM_WRITE                     0xe
366*61046927SAndroid Build Coastguard Worker 
367*61046927SAndroid Build Coastguard Worker /* There is apparently an undocumented HW limitation that
368*61046927SAndroid Build Coastguard Worker  * prevents the HW from copying the last 255 bytes of (1 << 22) - 1
369*61046927SAndroid Build Coastguard Worker  */
370*61046927SAndroid Build Coastguard Worker #define SDMA_V2_0_COPY_MAX_BYTES 0x3fff00   /* almost 4 MB*/
371*61046927SAndroid Build Coastguard Worker #define SDMA_V5_2_COPY_MAX_BYTES 0x3fffff00 /* almost 1 GB */
372*61046927SAndroid Build Coastguard Worker 
373*61046927SAndroid Build Coastguard Worker #define SDMA_NOP_PAD SDMA_PACKET(SDMA_OPCODE_NOP, 0, 0) /* header-only version */
374*61046927SAndroid Build Coastguard Worker 
375*61046927SAndroid Build Coastguard Worker enum amd_cmp_class_flags
376*61046927SAndroid Build Coastguard Worker {
377*61046927SAndroid Build Coastguard Worker    S_NAN = 1 << 0,       // Signaling NaN
378*61046927SAndroid Build Coastguard Worker    Q_NAN = 1 << 1,       // Quiet NaN
379*61046927SAndroid Build Coastguard Worker    N_INFINITY = 1 << 2,  // Negative infinity
380*61046927SAndroid Build Coastguard Worker    N_NORMAL = 1 << 3,    // Negative normal
381*61046927SAndroid Build Coastguard Worker    N_SUBNORMAL = 1 << 4, // Negative subnormal
382*61046927SAndroid Build Coastguard Worker    N_ZERO = 1 << 5,      // Negative zero
383*61046927SAndroid Build Coastguard Worker    P_ZERO = 1 << 6,      // Positive zero
384*61046927SAndroid Build Coastguard Worker    P_SUBNORMAL = 1 << 7, // Positive subnormal
385*61046927SAndroid Build Coastguard Worker    P_NORMAL = 1 << 8,    // Positive normal
386*61046927SAndroid Build Coastguard Worker    P_INFINITY = 1 << 9   // Positive infinity
387*61046927SAndroid Build Coastguard Worker };
388*61046927SAndroid Build Coastguard Worker 
389*61046927SAndroid Build Coastguard Worker #endif /* _SID_H */
390