1c349dbc7Sjsg /* 2c349dbc7Sjsg * Copyright 2019 Advanced Micro Devices, Inc. 3c349dbc7Sjsg * 4c349dbc7Sjsg * Permission is hereby granted, free of charge, to any person obtaining a 5c349dbc7Sjsg * copy of this software and associated documentation files (the "Software"), 6c349dbc7Sjsg * to deal in the Software without restriction, including without limitation 7c349dbc7Sjsg * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8c349dbc7Sjsg * and/or sell copies of the Software, and to permit persons to whom the 9c349dbc7Sjsg * Software is furnished to do so, subject to the following conditions: 10c349dbc7Sjsg * 11c349dbc7Sjsg * The above copyright notice and this permission notice shall be included in 12c349dbc7Sjsg * all copies or substantial portions of the Software. 13c349dbc7Sjsg * 14c349dbc7Sjsg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15c349dbc7Sjsg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16c349dbc7Sjsg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 17c349dbc7Sjsg * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 18c349dbc7Sjsg * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 19c349dbc7Sjsg * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 20c349dbc7Sjsg * OTHER DEALINGS IN THE SOFTWARE. 21c349dbc7Sjsg * 22c349dbc7Sjsg */ 23c349dbc7Sjsg 24c349dbc7Sjsg #ifndef NVD_H 25c349dbc7Sjsg #define NVD_H 26c349dbc7Sjsg 27c349dbc7Sjsg /** 28c349dbc7Sjsg * Navi's PM4 definitions 29c349dbc7Sjsg */ 30c349dbc7Sjsg #define PACKET_TYPE0 0 31c349dbc7Sjsg #define PACKET_TYPE1 1 32c349dbc7Sjsg #define PACKET_TYPE2 2 33c349dbc7Sjsg #define PACKET_TYPE3 3 34c349dbc7Sjsg 35c349dbc7Sjsg #define CP_PACKET_GET_TYPE(h) (((h) >> 30) & 3) 36c349dbc7Sjsg #define CP_PACKET_GET_COUNT(h) (((h) >> 16) & 0x3FFF) 37c349dbc7Sjsg #define CP_PACKET0_GET_REG(h) ((h) & 0xFFFF) 38c349dbc7Sjsg #define CP_PACKET3_GET_OPCODE(h) (((h) >> 8) & 0xFF) 39c349dbc7Sjsg #define PACKET0(reg, n) ((PACKET_TYPE0 << 30) | \ 40c349dbc7Sjsg ((reg) & 0xFFFF) | \ 41c349dbc7Sjsg ((n) & 0x3FFF) << 16) 42c349dbc7Sjsg #define CP_PACKET2 0x80000000 43c349dbc7Sjsg #define PACKET2_PAD_SHIFT 0 44c349dbc7Sjsg #define PACKET2_PAD_MASK (0x3fffffff << 0) 45c349dbc7Sjsg 46c349dbc7Sjsg #define PACKET2(v) (CP_PACKET2 | REG_SET(PACKET2_PAD, (v))) 47c349dbc7Sjsg 48c349dbc7Sjsg #define PACKET3(op, n) ((PACKET_TYPE3 << 30) | \ 49c349dbc7Sjsg (((op) & 0xFF) << 8) | \ 50c349dbc7Sjsg ((n) & 0x3FFF) << 16) 51c349dbc7Sjsg 52c349dbc7Sjsg #define PACKET3_COMPUTE(op, n) (PACKET3(op, n) | 1 << 1) 53c349dbc7Sjsg 54c349dbc7Sjsg /* Packet 3 types */ 55c349dbc7Sjsg #define PACKET3_NOP 0x10 56c349dbc7Sjsg #define PACKET3_SET_BASE 0x11 57c349dbc7Sjsg #define PACKET3_BASE_INDEX(x) ((x) << 0) 58c349dbc7Sjsg #define CE_PARTITION_BASE 3 59c349dbc7Sjsg #define PACKET3_CLEAR_STATE 0x12 60c349dbc7Sjsg #define PACKET3_INDEX_BUFFER_SIZE 0x13 61c349dbc7Sjsg #define PACKET3_DISPATCH_DIRECT 0x15 62c349dbc7Sjsg #define PACKET3_DISPATCH_INDIRECT 0x16 63c349dbc7Sjsg #define PACKET3_INDIRECT_BUFFER_END 0x17 64c349dbc7Sjsg #define PACKET3_INDIRECT_BUFFER_CNST_END 0x19 65c349dbc7Sjsg #define PACKET3_ATOMIC_GDS 0x1D 66c349dbc7Sjsg #define PACKET3_ATOMIC_MEM 0x1E 67c349dbc7Sjsg #define PACKET3_OCCLUSION_QUERY 0x1F 68c349dbc7Sjsg #define PACKET3_SET_PREDICATION 0x20 69c349dbc7Sjsg #define PACKET3_REG_RMW 0x21 70c349dbc7Sjsg #define PACKET3_COND_EXEC 0x22 71c349dbc7Sjsg #define PACKET3_PRED_EXEC 0x23 72c349dbc7Sjsg #define PACKET3_DRAW_INDIRECT 0x24 73c349dbc7Sjsg #define PACKET3_DRAW_INDEX_INDIRECT 0x25 74c349dbc7Sjsg #define PACKET3_INDEX_BASE 0x26 75c349dbc7Sjsg #define PACKET3_DRAW_INDEX_2 0x27 76c349dbc7Sjsg #define PACKET3_CONTEXT_CONTROL 0x28 77c349dbc7Sjsg #define PACKET3_INDEX_TYPE 0x2A 78c349dbc7Sjsg #define PACKET3_DRAW_INDIRECT_MULTI 0x2C 79c349dbc7Sjsg #define PACKET3_DRAW_INDEX_AUTO 0x2D 80c349dbc7Sjsg #define PACKET3_NUM_INSTANCES 0x2F 81c349dbc7Sjsg #define PACKET3_DRAW_INDEX_MULTI_AUTO 0x30 82c349dbc7Sjsg #define PACKET3_INDIRECT_BUFFER_PRIV 0x32 83c349dbc7Sjsg #define PACKET3_INDIRECT_BUFFER_CNST 0x33 84c349dbc7Sjsg #define PACKET3_COND_INDIRECT_BUFFER_CNST 0x33 85c349dbc7Sjsg #define PACKET3_STRMOUT_BUFFER_UPDATE 0x34 86c349dbc7Sjsg #define PACKET3_DRAW_INDEX_OFFSET_2 0x35 87c349dbc7Sjsg #define PACKET3_DRAW_PREAMBLE 0x36 88c349dbc7Sjsg #define PACKET3_WRITE_DATA 0x37 89c349dbc7Sjsg #define WRITE_DATA_DST_SEL(x) ((x) << 8) 90c349dbc7Sjsg /* 0 - register 91c349dbc7Sjsg * 1 - memory (sync - via GRBM) 92c349dbc7Sjsg * 2 - gl2 93c349dbc7Sjsg * 3 - gds 94c349dbc7Sjsg * 4 - reserved 95c349dbc7Sjsg * 5 - memory (async - direct) 96c349dbc7Sjsg */ 97c349dbc7Sjsg #define WR_ONE_ADDR (1 << 16) 98c349dbc7Sjsg #define WR_CONFIRM (1 << 20) 99c349dbc7Sjsg #define WRITE_DATA_CACHE_POLICY(x) ((x) << 25) 100c349dbc7Sjsg /* 0 - LRU 101c349dbc7Sjsg * 1 - Stream 102c349dbc7Sjsg */ 103c349dbc7Sjsg #define WRITE_DATA_ENGINE_SEL(x) ((x) << 30) 104c349dbc7Sjsg /* 0 - me 105c349dbc7Sjsg * 1 - pfp 106c349dbc7Sjsg * 2 - ce 107c349dbc7Sjsg */ 108c349dbc7Sjsg #define PACKET3_DRAW_INDEX_INDIRECT_MULTI 0x38 109c349dbc7Sjsg #define PACKET3_MEM_SEMAPHORE 0x39 110c349dbc7Sjsg # define PACKET3_SEM_USE_MAILBOX (0x1 << 16) 111c349dbc7Sjsg # define PACKET3_SEM_SEL_SIGNAL_TYPE (0x1 << 20) /* 0 = increment, 1 = write 1 */ 112c349dbc7Sjsg # define PACKET3_SEM_SEL_SIGNAL (0x6 << 29) 113c349dbc7Sjsg # define PACKET3_SEM_SEL_WAIT (0x7 << 29) 114c349dbc7Sjsg #define PACKET3_DRAW_INDEX_MULTI_INST 0x3A 115c349dbc7Sjsg #define PACKET3_COPY_DW 0x3B 116c349dbc7Sjsg #define PACKET3_WAIT_REG_MEM 0x3C 117c349dbc7Sjsg #define WAIT_REG_MEM_FUNCTION(x) ((x) << 0) 118c349dbc7Sjsg /* 0 - always 119c349dbc7Sjsg * 1 - < 120c349dbc7Sjsg * 2 - <= 121c349dbc7Sjsg * 3 - == 122c349dbc7Sjsg * 4 - != 123c349dbc7Sjsg * 5 - >= 124c349dbc7Sjsg * 6 - > 125c349dbc7Sjsg */ 126c349dbc7Sjsg #define WAIT_REG_MEM_MEM_SPACE(x) ((x) << 4) 127c349dbc7Sjsg /* 0 - reg 128c349dbc7Sjsg * 1 - mem 129c349dbc7Sjsg */ 130c349dbc7Sjsg #define WAIT_REG_MEM_OPERATION(x) ((x) << 6) 131c349dbc7Sjsg /* 0 - wait_reg_mem 132c349dbc7Sjsg * 1 - wr_wait_wr_reg 133c349dbc7Sjsg */ 134c349dbc7Sjsg #define WAIT_REG_MEM_ENGINE(x) ((x) << 8) 135c349dbc7Sjsg /* 0 - me 136c349dbc7Sjsg * 1 - pfp 137c349dbc7Sjsg */ 138c349dbc7Sjsg #define PACKET3_INDIRECT_BUFFER 0x3F 139c349dbc7Sjsg #define INDIRECT_BUFFER_VALID (1 << 23) 140c349dbc7Sjsg #define INDIRECT_BUFFER_CACHE_POLICY(x) ((x) << 28) 141c349dbc7Sjsg /* 0 - LRU 142c349dbc7Sjsg * 1 - Stream 143c349dbc7Sjsg * 2 - Bypass 144c349dbc7Sjsg */ 145c349dbc7Sjsg #define INDIRECT_BUFFER_PRE_ENB(x) ((x) << 21) 146c349dbc7Sjsg #define INDIRECT_BUFFER_PRE_RESUME(x) ((x) << 30) 147c349dbc7Sjsg #define PACKET3_COND_INDIRECT_BUFFER 0x3F 148c349dbc7Sjsg #define PACKET3_COPY_DATA 0x40 149c349dbc7Sjsg #define PACKET3_CP_DMA 0x41 150c349dbc7Sjsg #define PACKET3_PFP_SYNC_ME 0x42 151c349dbc7Sjsg #define PACKET3_SURFACE_SYNC 0x43 152c349dbc7Sjsg #define PACKET3_ME_INITIALIZE 0x44 153c349dbc7Sjsg #define PACKET3_COND_WRITE 0x45 154c349dbc7Sjsg #define PACKET3_EVENT_WRITE 0x46 155c349dbc7Sjsg #define EVENT_TYPE(x) ((x) << 0) 156c349dbc7Sjsg #define EVENT_INDEX(x) ((x) << 8) 157c349dbc7Sjsg /* 0 - any non-TS event 158c349dbc7Sjsg * 1 - ZPASS_DONE, PIXEL_PIPE_STAT_* 159c349dbc7Sjsg * 2 - SAMPLE_PIPELINESTAT 160c349dbc7Sjsg * 3 - SAMPLE_STREAMOUTSTAT* 161c349dbc7Sjsg * 4 - *S_PARTIAL_FLUSH 162c349dbc7Sjsg */ 163c349dbc7Sjsg #define PACKET3_EVENT_WRITE_EOP 0x47 164c349dbc7Sjsg #define PACKET3_EVENT_WRITE_EOS 0x48 165c349dbc7Sjsg #define PACKET3_RELEASE_MEM 0x49 166c349dbc7Sjsg #define PACKET3_RELEASE_MEM_EVENT_TYPE(x) ((x) << 0) 167c349dbc7Sjsg #define PACKET3_RELEASE_MEM_EVENT_INDEX(x) ((x) << 8) 168c349dbc7Sjsg #define PACKET3_RELEASE_MEM_GCR_GLM_WB (1 << 12) 169c349dbc7Sjsg #define PACKET3_RELEASE_MEM_GCR_GLM_INV (1 << 13) 170c349dbc7Sjsg #define PACKET3_RELEASE_MEM_GCR_GLV_INV (1 << 14) 171c349dbc7Sjsg #define PACKET3_RELEASE_MEM_GCR_GL1_INV (1 << 15) 172c349dbc7Sjsg #define PACKET3_RELEASE_MEM_GCR_GL2_US (1 << 16) 173c349dbc7Sjsg #define PACKET3_RELEASE_MEM_GCR_GL2_RANGE (1 << 17) 174c349dbc7Sjsg #define PACKET3_RELEASE_MEM_GCR_GL2_DISCARD (1 << 19) 175c349dbc7Sjsg #define PACKET3_RELEASE_MEM_GCR_GL2_INV (1 << 20) 176c349dbc7Sjsg #define PACKET3_RELEASE_MEM_GCR_GL2_WB (1 << 21) 177c349dbc7Sjsg #define PACKET3_RELEASE_MEM_GCR_SEQ (1 << 22) 178c349dbc7Sjsg #define PACKET3_RELEASE_MEM_CACHE_POLICY(x) ((x) << 25) 179c349dbc7Sjsg /* 0 - cache_policy__me_release_mem__lru 180c349dbc7Sjsg * 1 - cache_policy__me_release_mem__stream 181c349dbc7Sjsg * 2 - cache_policy__me_release_mem__noa 182c349dbc7Sjsg * 3 - cache_policy__me_release_mem__bypass 183c349dbc7Sjsg */ 184c349dbc7Sjsg #define PACKET3_RELEASE_MEM_EXECUTE (1 << 28) 185c349dbc7Sjsg 186c349dbc7Sjsg #define PACKET3_RELEASE_MEM_DATA_SEL(x) ((x) << 29) 187c349dbc7Sjsg /* 0 - discard 188c349dbc7Sjsg * 1 - send low 32bit data 189c349dbc7Sjsg * 2 - send 64bit data 190c349dbc7Sjsg * 3 - send 64bit GPU counter value 191c349dbc7Sjsg * 4 - send 64bit sys counter value 192c349dbc7Sjsg */ 193c349dbc7Sjsg #define PACKET3_RELEASE_MEM_INT_SEL(x) ((x) << 24) 194c349dbc7Sjsg /* 0 - none 195c349dbc7Sjsg * 1 - interrupt only (DATA_SEL = 0) 196c349dbc7Sjsg * 2 - interrupt when data write is confirmed 197c349dbc7Sjsg */ 198c349dbc7Sjsg #define PACKET3_RELEASE_MEM_DST_SEL(x) ((x) << 16) 199c349dbc7Sjsg /* 0 - MC 200c349dbc7Sjsg * 1 - TC/L2 201c349dbc7Sjsg */ 202c349dbc7Sjsg 203c349dbc7Sjsg 204c349dbc7Sjsg 205c349dbc7Sjsg #define PACKET3_PREAMBLE_CNTL 0x4A 206c349dbc7Sjsg # define PACKET3_PREAMBLE_BEGIN_CLEAR_STATE (2 << 28) 207c349dbc7Sjsg # define PACKET3_PREAMBLE_END_CLEAR_STATE (3 << 28) 208c349dbc7Sjsg #define PACKET3_DMA_DATA 0x50 209c349dbc7Sjsg /* 1. header 210c349dbc7Sjsg * 2. CONTROL 211c349dbc7Sjsg * 3. SRC_ADDR_LO or DATA [31:0] 212c349dbc7Sjsg * 4. SRC_ADDR_HI [31:0] 213c349dbc7Sjsg * 5. DST_ADDR_LO [31:0] 214c349dbc7Sjsg * 6. DST_ADDR_HI [7:0] 215c349dbc7Sjsg * 7. COMMAND [31:26] | BYTE_COUNT [25:0] 216c349dbc7Sjsg */ 217c349dbc7Sjsg /* CONTROL */ 218c349dbc7Sjsg # define PACKET3_DMA_DATA_ENGINE(x) ((x) << 0) 219c349dbc7Sjsg /* 0 - ME 220c349dbc7Sjsg * 1 - PFP 221c349dbc7Sjsg */ 222c349dbc7Sjsg # define PACKET3_DMA_DATA_SRC_CACHE_POLICY(x) ((x) << 13) 223c349dbc7Sjsg /* 0 - LRU 224c349dbc7Sjsg * 1 - Stream 225c349dbc7Sjsg */ 226c349dbc7Sjsg # define PACKET3_DMA_DATA_DST_SEL(x) ((x) << 20) 227c349dbc7Sjsg /* 0 - DST_ADDR using DAS 228c349dbc7Sjsg * 1 - GDS 229c349dbc7Sjsg * 3 - DST_ADDR using L2 230c349dbc7Sjsg */ 231c349dbc7Sjsg # define PACKET3_DMA_DATA_DST_CACHE_POLICY(x) ((x) << 25) 232c349dbc7Sjsg /* 0 - LRU 233c349dbc7Sjsg * 1 - Stream 234c349dbc7Sjsg */ 235c349dbc7Sjsg # define PACKET3_DMA_DATA_SRC_SEL(x) ((x) << 29) 236c349dbc7Sjsg /* 0 - SRC_ADDR using SAS 237c349dbc7Sjsg * 1 - GDS 238c349dbc7Sjsg * 2 - DATA 239c349dbc7Sjsg * 3 - SRC_ADDR using L2 240c349dbc7Sjsg */ 241c349dbc7Sjsg # define PACKET3_DMA_DATA_CP_SYNC (1 << 31) 242c349dbc7Sjsg /* COMMAND */ 243c349dbc7Sjsg # define PACKET3_DMA_DATA_CMD_SAS (1 << 26) 244c349dbc7Sjsg /* 0 - memory 245c349dbc7Sjsg * 1 - register 246c349dbc7Sjsg */ 247c349dbc7Sjsg # define PACKET3_DMA_DATA_CMD_DAS (1 << 27) 248c349dbc7Sjsg /* 0 - memory 249c349dbc7Sjsg * 1 - register 250c349dbc7Sjsg */ 251c349dbc7Sjsg # define PACKET3_DMA_DATA_CMD_SAIC (1 << 28) 252c349dbc7Sjsg # define PACKET3_DMA_DATA_CMD_DAIC (1 << 29) 253c349dbc7Sjsg # define PACKET3_DMA_DATA_CMD_RAW_WAIT (1 << 30) 254c349dbc7Sjsg #define PACKET3_CONTEXT_REG_RMW 0x51 255c349dbc7Sjsg #define PACKET3_GFX_CNTX_UPDATE 0x52 256c349dbc7Sjsg #define PACKET3_BLK_CNTX_UPDATE 0x53 257c349dbc7Sjsg #define PACKET3_INCR_UPDT_STATE 0x55 258c349dbc7Sjsg #define PACKET3_ACQUIRE_MEM 0x58 259ad8b1aafSjsg /* 1. HEADER 260ad8b1aafSjsg * 2. COHER_CNTL [30:0] 261ad8b1aafSjsg * 2.1 ENGINE_SEL [31:31] 262ad8b1aafSjsg * 2. COHER_SIZE [31:0] 263ad8b1aafSjsg * 3. COHER_SIZE_HI [7:0] 264ad8b1aafSjsg * 4. COHER_BASE_LO [31:0] 265ad8b1aafSjsg * 5. COHER_BASE_HI [23:0] 266ad8b1aafSjsg * 7. POLL_INTERVAL [15:0] 267ad8b1aafSjsg * 8. GCR_CNTL [18:0] 268ad8b1aafSjsg */ 269ad8b1aafSjsg #define PACKET3_ACQUIRE_MEM_GCR_CNTL_GLI_INV(x) ((x) << 0) 270ad8b1aafSjsg /* 271ad8b1aafSjsg * 0:NOP 272ad8b1aafSjsg * 1:ALL 273ad8b1aafSjsg * 2:RANGE 274ad8b1aafSjsg * 3:FIRST_LAST 275ad8b1aafSjsg */ 276ad8b1aafSjsg #define PACKET3_ACQUIRE_MEM_GCR_CNTL_GL1_RANGE(x) ((x) << 2) 277ad8b1aafSjsg /* 278ad8b1aafSjsg * 0:ALL 279ad8b1aafSjsg * 1:reserved 280ad8b1aafSjsg * 2:RANGE 281ad8b1aafSjsg * 3:FIRST_LAST 282ad8b1aafSjsg */ 283ad8b1aafSjsg #define PACKET3_ACQUIRE_MEM_GCR_CNTL_GLM_WB(x) ((x) << 4) 284ad8b1aafSjsg #define PACKET3_ACQUIRE_MEM_GCR_CNTL_GLM_INV(x) ((x) << 5) 285ad8b1aafSjsg #define PACKET3_ACQUIRE_MEM_GCR_CNTL_GLK_WB(x) ((x) << 6) 286ad8b1aafSjsg #define PACKET3_ACQUIRE_MEM_GCR_CNTL_GLK_INV(x) ((x) << 7) 287ad8b1aafSjsg #define PACKET3_ACQUIRE_MEM_GCR_CNTL_GLV_INV(x) ((x) << 8) 288ad8b1aafSjsg #define PACKET3_ACQUIRE_MEM_GCR_CNTL_GL1_INV(x) ((x) << 9) 289ad8b1aafSjsg #define PACKET3_ACQUIRE_MEM_GCR_CNTL_GL2_US(x) ((x) << 10) 290ad8b1aafSjsg #define PACKET3_ACQUIRE_MEM_GCR_CNTL_GL2_RANGE(x) ((x) << 11) 291ad8b1aafSjsg /* 292ad8b1aafSjsg * 0:ALL 293ad8b1aafSjsg * 1:VOL 294ad8b1aafSjsg * 2:RANGE 295ad8b1aafSjsg * 3:FIRST_LAST 296ad8b1aafSjsg */ 297ad8b1aafSjsg #define PACKET3_ACQUIRE_MEM_GCR_CNTL_GL2_DISCARD(x) ((x) << 13) 298ad8b1aafSjsg #define PACKET3_ACQUIRE_MEM_GCR_CNTL_GL2_INV(x) ((x) << 14) 299ad8b1aafSjsg #define PACKET3_ACQUIRE_MEM_GCR_CNTL_GL2_WB(x) ((x) << 15) 300ad8b1aafSjsg #define PACKET3_ACQUIRE_MEM_GCR_CNTL_SEQ(x) ((x) << 16) 301ad8b1aafSjsg /* 302ad8b1aafSjsg * 0: PARALLEL 303ad8b1aafSjsg * 1: FORWARD 304ad8b1aafSjsg * 2: REVERSE 305ad8b1aafSjsg */ 306ad8b1aafSjsg #define PACKET3_ACQUIRE_MEM_GCR_RANGE_IS_PA (1 << 18) 307c349dbc7Sjsg #define PACKET3_REWIND 0x59 308c349dbc7Sjsg #define PACKET3_INTERRUPT 0x5A 309c349dbc7Sjsg #define PACKET3_GEN_PDEPTE 0x5B 310c349dbc7Sjsg #define PACKET3_INDIRECT_BUFFER_PASID 0x5C 311c349dbc7Sjsg #define PACKET3_PRIME_UTCL2 0x5D 312c349dbc7Sjsg #define PACKET3_LOAD_UCONFIG_REG 0x5E 313c349dbc7Sjsg #define PACKET3_LOAD_SH_REG 0x5F 314c349dbc7Sjsg #define PACKET3_LOAD_CONFIG_REG 0x60 315c349dbc7Sjsg #define PACKET3_LOAD_CONTEXT_REG 0x61 316c349dbc7Sjsg #define PACKET3_LOAD_COMPUTE_STATE 0x62 317c349dbc7Sjsg #define PACKET3_LOAD_SH_REG_INDEX 0x63 318c349dbc7Sjsg #define PACKET3_SET_CONFIG_REG 0x68 319c349dbc7Sjsg #define PACKET3_SET_CONFIG_REG_START 0x00002000 320c349dbc7Sjsg #define PACKET3_SET_CONFIG_REG_END 0x00002c00 321c349dbc7Sjsg #define PACKET3_SET_CONTEXT_REG 0x69 322c349dbc7Sjsg #define PACKET3_SET_CONTEXT_REG_START 0x0000a000 323c349dbc7Sjsg #define PACKET3_SET_CONTEXT_REG_END 0x0000a400 324c349dbc7Sjsg #define PACKET3_SET_CONTEXT_REG_INDEX 0x6A 325c349dbc7Sjsg #define PACKET3_SET_VGPR_REG_DI_MULTI 0x71 326c349dbc7Sjsg #define PACKET3_SET_SH_REG_DI 0x72 327c349dbc7Sjsg #define PACKET3_SET_CONTEXT_REG_INDIRECT 0x73 328c349dbc7Sjsg #define PACKET3_SET_SH_REG_DI_MULTI 0x74 329c349dbc7Sjsg #define PACKET3_GFX_PIPE_LOCK 0x75 330c349dbc7Sjsg #define PACKET3_SET_SH_REG 0x76 331c349dbc7Sjsg #define PACKET3_SET_SH_REG_START 0x00002c00 332c349dbc7Sjsg #define PACKET3_SET_SH_REG_END 0x00003000 333c349dbc7Sjsg #define PACKET3_SET_SH_REG_OFFSET 0x77 334c349dbc7Sjsg #define PACKET3_SET_QUEUE_REG 0x78 335c349dbc7Sjsg #define PACKET3_SET_UCONFIG_REG 0x79 336c349dbc7Sjsg #define PACKET3_SET_UCONFIG_REG_START 0x0000c000 337c349dbc7Sjsg #define PACKET3_SET_UCONFIG_REG_END 0x0000c400 338c349dbc7Sjsg #define PACKET3_SET_UCONFIG_REG_INDEX 0x7A 339c349dbc7Sjsg #define PACKET3_FORWARD_HEADER 0x7C 340c349dbc7Sjsg #define PACKET3_SCRATCH_RAM_WRITE 0x7D 341c349dbc7Sjsg #define PACKET3_SCRATCH_RAM_READ 0x7E 342c349dbc7Sjsg #define PACKET3_LOAD_CONST_RAM 0x80 343c349dbc7Sjsg #define PACKET3_WRITE_CONST_RAM 0x81 344c349dbc7Sjsg #define PACKET3_DUMP_CONST_RAM 0x83 345c349dbc7Sjsg #define PACKET3_INCREMENT_CE_COUNTER 0x84 346c349dbc7Sjsg #define PACKET3_INCREMENT_DE_COUNTER 0x85 347c349dbc7Sjsg #define PACKET3_WAIT_ON_CE_COUNTER 0x86 348c349dbc7Sjsg #define PACKET3_WAIT_ON_DE_COUNTER_DIFF 0x88 349c349dbc7Sjsg #define PACKET3_SWITCH_BUFFER 0x8B 350c349dbc7Sjsg #define PACKET3_DISPATCH_DRAW_PREAMBLE 0x8C 351c349dbc7Sjsg #define PACKET3_DISPATCH_DRAW_PREAMBLE_ACE 0x8C 352c349dbc7Sjsg #define PACKET3_DISPATCH_DRAW 0x8D 353c349dbc7Sjsg #define PACKET3_DISPATCH_DRAW_ACE 0x8D 354c349dbc7Sjsg #define PACKET3_GET_LOD_STATS 0x8E 355c349dbc7Sjsg #define PACKET3_DRAW_MULTI_PREAMBLE 0x8F 356c349dbc7Sjsg #define PACKET3_FRAME_CONTROL 0x90 357ad8b1aafSjsg # define FRAME_TMZ (1 << 0) 358c349dbc7Sjsg # define FRAME_CMD(x) ((x) << 28) 359c349dbc7Sjsg /* 360c349dbc7Sjsg * x=0: tmz_begin 361c349dbc7Sjsg * x=1: tmz_end 362c349dbc7Sjsg */ 363c349dbc7Sjsg #define PACKET3_INDEX_ATTRIBUTES_INDIRECT 0x91 364c349dbc7Sjsg #define PACKET3_WAIT_REG_MEM64 0x93 365c349dbc7Sjsg #define PACKET3_COND_PREEMPT 0x94 366c349dbc7Sjsg #define PACKET3_HDP_FLUSH 0x95 367c349dbc7Sjsg #define PACKET3_COPY_DATA_RB 0x96 368c349dbc7Sjsg #define PACKET3_INVALIDATE_TLBS 0x98 369c349dbc7Sjsg # define PACKET3_INVALIDATE_TLBS_DST_SEL(x) ((x) << 0) 370c349dbc7Sjsg # define PACKET3_INVALIDATE_TLBS_ALL_HUB(x) ((x) << 4) 371c349dbc7Sjsg # define PACKET3_INVALIDATE_TLBS_PASID(x) ((x) << 5) 372c349dbc7Sjsg #define PACKET3_AQL_PACKET 0x99 373c349dbc7Sjsg #define PACKET3_DMA_DATA_FILL_MULTI 0x9A 374c349dbc7Sjsg #define PACKET3_SET_SH_REG_INDEX 0x9B 375c349dbc7Sjsg #define PACKET3_DRAW_INDIRECT_COUNT_MULTI 0x9C 376c349dbc7Sjsg #define PACKET3_DRAW_INDEX_INDIRECT_COUNT_MULTI 0x9D 377c349dbc7Sjsg #define PACKET3_DUMP_CONST_RAM_OFFSET 0x9E 378c349dbc7Sjsg #define PACKET3_LOAD_CONTEXT_REG_INDEX 0x9F 379c349dbc7Sjsg #define PACKET3_SET_RESOURCES 0xA0 380c349dbc7Sjsg /* 1. header 381c349dbc7Sjsg * 2. CONTROL 382c349dbc7Sjsg * 3. QUEUE_MASK_LO [31:0] 383c349dbc7Sjsg * 4. QUEUE_MASK_HI [31:0] 384c349dbc7Sjsg * 5. GWS_MASK_LO [31:0] 385c349dbc7Sjsg * 6. GWS_MASK_HI [31:0] 386c349dbc7Sjsg * 7. OAC_MASK [15:0] 387c349dbc7Sjsg * 8. GDS_HEAP_SIZE [16:11] | GDS_HEAP_BASE [5:0] 388c349dbc7Sjsg */ 389c349dbc7Sjsg # define PACKET3_SET_RESOURCES_VMID_MASK(x) ((x) << 0) 390c349dbc7Sjsg # define PACKET3_SET_RESOURCES_UNMAP_LATENTY(x) ((x) << 16) 391c349dbc7Sjsg # define PACKET3_SET_RESOURCES_QUEUE_TYPE(x) ((x) << 29) 392c349dbc7Sjsg #define PACKET3_MAP_PROCESS 0xA1 393c349dbc7Sjsg #define PACKET3_MAP_QUEUES 0xA2 394c349dbc7Sjsg /* 1. header 395c349dbc7Sjsg * 2. CONTROL 396c349dbc7Sjsg * 3. CONTROL2 397c349dbc7Sjsg * 4. MQD_ADDR_LO [31:0] 398c349dbc7Sjsg * 5. MQD_ADDR_HI [31:0] 399c349dbc7Sjsg * 6. WPTR_ADDR_LO [31:0] 400c349dbc7Sjsg * 7. WPTR_ADDR_HI [31:0] 401c349dbc7Sjsg */ 402c349dbc7Sjsg /* CONTROL */ 403c349dbc7Sjsg # define PACKET3_MAP_QUEUES_QUEUE_SEL(x) ((x) << 4) 404c349dbc7Sjsg # define PACKET3_MAP_QUEUES_VMID(x) ((x) << 8) 405c349dbc7Sjsg # define PACKET3_MAP_QUEUES_QUEUE(x) ((x) << 13) 406c349dbc7Sjsg # define PACKET3_MAP_QUEUES_PIPE(x) ((x) << 16) 407c349dbc7Sjsg # define PACKET3_MAP_QUEUES_ME(x) ((x) << 18) 408c349dbc7Sjsg # define PACKET3_MAP_QUEUES_QUEUE_TYPE(x) ((x) << 21) 409c349dbc7Sjsg # define PACKET3_MAP_QUEUES_ALLOC_FORMAT(x) ((x) << 24) 410c349dbc7Sjsg # define PACKET3_MAP_QUEUES_ENGINE_SEL(x) ((x) << 26) 411c349dbc7Sjsg # define PACKET3_MAP_QUEUES_NUM_QUEUES(x) ((x) << 29) 412c349dbc7Sjsg /* CONTROL2 */ 413c349dbc7Sjsg # define PACKET3_MAP_QUEUES_CHECK_DISABLE(x) ((x) << 1) 414c349dbc7Sjsg # define PACKET3_MAP_QUEUES_DOORBELL_OFFSET(x) ((x) << 2) 415c349dbc7Sjsg #define PACKET3_UNMAP_QUEUES 0xA3 416c349dbc7Sjsg /* 1. header 417c349dbc7Sjsg * 2. CONTROL 418c349dbc7Sjsg * 3. CONTROL2 419c349dbc7Sjsg * 4. CONTROL3 420c349dbc7Sjsg * 5. CONTROL4 421c349dbc7Sjsg * 6. CONTROL5 422c349dbc7Sjsg */ 423c349dbc7Sjsg /* CONTROL */ 424c349dbc7Sjsg # define PACKET3_UNMAP_QUEUES_ACTION(x) ((x) << 0) 425c349dbc7Sjsg /* 0 - PREEMPT_QUEUES 426c349dbc7Sjsg * 1 - RESET_QUEUES 427c349dbc7Sjsg * 2 - DISABLE_PROCESS_QUEUES 428c349dbc7Sjsg * 3 - PREEMPT_QUEUES_NO_UNMAP 429c349dbc7Sjsg */ 430c349dbc7Sjsg # define PACKET3_UNMAP_QUEUES_QUEUE_SEL(x) ((x) << 4) 431c349dbc7Sjsg # define PACKET3_UNMAP_QUEUES_ENGINE_SEL(x) ((x) << 26) 432c349dbc7Sjsg # define PACKET3_UNMAP_QUEUES_NUM_QUEUES(x) ((x) << 29) 433c349dbc7Sjsg /* CONTROL2a */ 434c349dbc7Sjsg # define PACKET3_UNMAP_QUEUES_PASID(x) ((x) << 0) 435c349dbc7Sjsg /* CONTROL2b */ 436c349dbc7Sjsg # define PACKET3_UNMAP_QUEUES_DOORBELL_OFFSET0(x) ((x) << 2) 437c349dbc7Sjsg /* CONTROL3a */ 438c349dbc7Sjsg # define PACKET3_UNMAP_QUEUES_DOORBELL_OFFSET1(x) ((x) << 2) 439c349dbc7Sjsg /* CONTROL3b */ 440c349dbc7Sjsg # define PACKET3_UNMAP_QUEUES_RB_WPTR(x) ((x) << 0) 441c349dbc7Sjsg /* CONTROL4 */ 442c349dbc7Sjsg # define PACKET3_UNMAP_QUEUES_DOORBELL_OFFSET2(x) ((x) << 2) 443c349dbc7Sjsg /* CONTROL5 */ 444c349dbc7Sjsg # define PACKET3_UNMAP_QUEUES_DOORBELL_OFFSET3(x) ((x) << 2) 445c349dbc7Sjsg #define PACKET3_QUERY_STATUS 0xA4 446c349dbc7Sjsg /* 1. header 447c349dbc7Sjsg * 2. CONTROL 448c349dbc7Sjsg * 3. CONTROL2 449c349dbc7Sjsg * 4. ADDR_LO [31:0] 450c349dbc7Sjsg * 5. ADDR_HI [31:0] 451c349dbc7Sjsg * 6. DATA_LO [31:0] 452c349dbc7Sjsg * 7. DATA_HI [31:0] 453c349dbc7Sjsg */ 454c349dbc7Sjsg /* CONTROL */ 455c349dbc7Sjsg # define PACKET3_QUERY_STATUS_CONTEXT_ID(x) ((x) << 0) 456c349dbc7Sjsg # define PACKET3_QUERY_STATUS_INTERRUPT_SEL(x) ((x) << 28) 457c349dbc7Sjsg # define PACKET3_QUERY_STATUS_COMMAND(x) ((x) << 30) 458c349dbc7Sjsg /* CONTROL2a */ 459c349dbc7Sjsg # define PACKET3_QUERY_STATUS_PASID(x) ((x) << 0) 460c349dbc7Sjsg /* CONTROL2b */ 461c349dbc7Sjsg # define PACKET3_QUERY_STATUS_DOORBELL_OFFSET(x) ((x) << 2) 462c349dbc7Sjsg # define PACKET3_QUERY_STATUS_ENG_SEL(x) ((x) << 25) 463c349dbc7Sjsg #define PACKET3_RUN_LIST 0xA5 464c349dbc7Sjsg #define PACKET3_MAP_PROCESS_VM 0xA6 465*f005ef32Sjsg /* GFX11 */ 466*f005ef32Sjsg #define PACKET3_SET_Q_PREEMPTION_MODE 0xF0 467*f005ef32Sjsg # define PACKET3_SET_Q_PREEMPTION_MODE_IB_VMID(x) ((x) << 0) 468*f005ef32Sjsg # define PACKET3_SET_Q_PREEMPTION_MODE_INIT_SHADOW_MEM (1 << 0) 469c349dbc7Sjsg 470c349dbc7Sjsg #endif 471