1; a6xx microcode 2; Version: 01000001 3 4 [01000001] ; nop 5 [01000078] ; nop 6 mov $01, 0x0830 ; CP_SQE_INSTR_BASE 7 mov $02, 0x0002 8 cwrite $01, [$00 + @REG_READ_ADDR], 0x0 9 cwrite $02, [$00 + @REG_READ_DWORDS], 0x0 10 mov $01, $regdata 11 mov $02, $regdata 12 add $01, $01, 0x0004 13 addhi $02, $02, 0x0000 14 mov $03, 0x0001 15 cwrite $01, [$00 + @MEM_READ_ADDR], 0x0 16 cwrite $02, [$00 + @MEM_READ_ADDR+0x1], 0x0 17 cwrite $03, [$00 + @MEM_READ_DWORDS], 0x0 18 rot $04, $memdata, 0x0008 19 ushr $04, $04, 0x0006 20 sub $04, $04, 0x0004 21 add $01, $01, $04 22 addhi $02, $02, 0x0000 23 mov $rem, 0x0080 24 cwrite $01, [$00 + @MEM_READ_ADDR], 0x0 25 cwrite $02, [$00 + @MEM_READ_ADDR+0x1], 0x0 26 cwrite $02, [$00 + @LOAD_STORE_HI], 0x0 27 cwrite $rem, [$00 + @MEM_READ_DWORDS], 0x0 28 cwrite $00, [$00 + @PACKET_TABLE_WRITE_ADDR], 0x0 29 (rep)cwrite $memdata, [$00 + @PACKET_TABLE_WRITE], 0x0 30 mov $02, 0x0883 ; CP_SCRATCH[0].REG 31 mov $03, 0xbeef 32 mov $04, 0xdead << 16 33 or $03, $03, $04 34 cwrite $02, [$00 + @REG_WRITE_ADDR], 0x0 35 cwrite $03, [$00 + @REG_WRITE], 0x0 36 waitin 37 mov $01, $data 38 39CP_ME_INIT: 40 mov $02, 0x0002 41 waitin 42 mov $01, $data 43 44CP_MEM_WRITE: 45 mov $addr, 0x00a0 << 24 ; |NRT_ADDR 46 mov $02, 0x0004 47 (xmov1)add $data, $02, $data 48 mov $addr, 0xa204 << 16 ; |NRT_DATA 49 (rep)(xmov3)mov $data, $data 50 waitin 51 mov $01, $data 52 53CP_SCRATCH_WRITE: 54 mov $02, 0x00ff 55 (rep)cwrite $data, [$02 + 0x001], 0x4 56 waitin 57 mov $01, $data 58 59CP_SET_SECURE_MODE: 60 mov $02, $data 61 setsecure $02, #l000 62 l001: jump #l001 63 nop 64 l000: waitin 65 mov $01, $data 66fxn00: 67 l004: cmp $04, $02, $03 68 breq $04, b0, #l002 69 brne $04, b1, #l003 70 breq $04, b2, #l004 71 sub $03, $03, $02 72 l003: jump #l004 73 sub $02, $02, $03 74 l002: ret 75 nop 76 77CP_REG_RMW: 78 cwrite $data, [$00 + @REG_READ_ADDR], 0x0 79 add $02, $regdata, 0x0042 80 addhi $03, $00, $regdata 81 sub $02, $02, $regdata 82 call #fxn00 83 subhi $03, $03, $regdata 84 and $02, $02, $regdata 85 or $02, $02, 0x0001 86 xor $02, $02, 0x0001 87 not $02, $02 88 shl $02, $02, $regdata 89 ushr $02, $02, $regdata 90 ishr $02, $02, $regdata 91 rot $02, $02, $regdata 92 min $02, $02, $regdata 93 max $02, $02, $regdata 94 mul8 $02, $02, $regdata 95 msb $02, $02 96 mov $usraddr, $data 97 mov $data, $02 98 waitin 99 mov $01, $data 100 101CP_MEMCPY: 102 mov $02, $data 103 mov $03, $data 104 mov $04, $data 105 mov $05, $data 106 mov $06, $data 107 l006: breq $06, 0x0, #l005 108 cwrite $03, [$00 + @LOAD_STORE_HI], 0x0 109 load $07, [$02 + 0x004], 0x4 110 cwrite $05, [$00 + @LOAD_STORE_HI], 0x0 111 jump #l006 112 store $07, [$04 + 0x004], 0x4 113 l005: waitin 114 mov $01, $data 115 116CP_MEM_TO_MEM: 117 cwrite $data, [$00 + @MEM_READ_ADDR], 0x0 118 cwrite $data, [$00 + @MEM_READ_ADDR+0x1], 0x0 119 mov $02, $data 120 cwrite $data, [$00 + @LOAD_STORE_HI], 0x0 121 mov $rem, $data 122 cwrite $rem, [$00 + @MEM_READ_DWORDS], 0x0 123 (rep)store $memdata, [$02 + 0x004], 0x4 124 waitin 125 mov $01, $data 126 127UNKN15: 128 cread $02, [$00 + 0x101], 0x0 129 brne $02, 0x1, #l007 130 nop 131 preemptleave #l001 132 nop 133 nop 134 nop 135 waitin 136 mov $01, $data 137 l007: iret 138 nop 139 140UNKN0: 141UNKN1: 142UNKN2: 143UNKN3: 144PKT4: 145UNKN5: 146UNKN6: 147UNKN7: 148UNKN8: 149UNKN9: 150UNKN10: 151UNKN11: 152UNKN12: 153UNKN13: 154UNKN14: 155CP_NOP: 156CP_RECORD_PFP_TIMESTAMP: 157CP_WAIT_MEM_WRITES: 158CP_WAIT_FOR_ME: 159CP_WAIT_MEM_GTE: 160UNKN21: 161UNKN22: 162UNKN23: 163UNKN24: 164CP_DRAW_PRED_ENABLE_GLOBAL: 165CP_DRAW_PRED_ENABLE_LOCAL: 166UNKN27: 167CP_PREEMPT_ENABLE: 168CP_SKIP_IB2_ENABLE_GLOBAL: 169CP_PREEMPT_TOKEN: 170UNKN31: 171UNKN32: 172CP_DRAW_INDX: 173CP_SKIP_IB2_ENABLE_LOCAL: 174CP_DRAW_AUTO: 175CP_SET_STATE: 176CP_WAIT_FOR_IDLE: 177CP_IM_LOAD: 178CP_DRAW_INDIRECT: 179CP_DRAW_INDX_INDIRECT: 180CP_DRAW_INDIRECT_MULTI: 181CP_IM_LOAD_IMMEDIATE: 182CP_BLIT: 183CP_SET_CONSTANT: 184CP_SET_BIN_DATA5_OFFSET: 185CP_SET_BIN_DATA5: 186UNKN48: 187CP_RUN_OPENCL: 188CP_LOAD_STATE6_GEOM: 189CP_EXEC_CS: 190CP_LOAD_STATE6_FRAG: 191CP_SET_SUBDRAW_SIZE: 192CP_LOAD_STATE6: 193CP_INDIRECT_BUFFER_PFD: 194CP_DRAW_INDX_OFFSET: 195CP_REG_TEST: 196CP_COND_INDIRECT_BUFFER_PFE: 197CP_INVALIDATE_STATE: 198CP_WAIT_REG_MEM: 199CP_REG_TO_MEM: 200CP_INDIRECT_BUFFER: 201CP_INTERRUPT: 202CP_EXEC_CS_INDIRECT: 203CP_MEM_TO_REG: 204CP_SET_DRAW_STATE: 205CP_COND_EXEC: 206CP_COND_WRITE5: 207CP_EVENT_WRITE: 208CP_COND_REG_EXEC: 209UNKN73: 210CP_REG_TO_SCRATCH: 211CP_SET_DRAW_INIT_FLAGS: 212CP_SCRATCH_TO_REG: 213CP_DRAW_PRED_SET: 214CP_MEM_WRITE_CNTR: 215CP_START_BIN: 216CP_END_BIN: 217CP_WAIT_REG_EQ: 218CP_SMMU_TABLE_UPDATE: 219UNKN84: 220CP_SET_CTXSWITCH_IB: 221CP_SET_PSEUDO_REG: 222CP_INDIRECT_BUFFER_CHAIN: 223CP_EVENT_WRITE_SHD: 224CP_EVENT_WRITE_CFL: 225UNKN90: 226CP_EVENT_WRITE_ZPD: 227CP_CONTEXT_REG_BUNCH: 228CP_WAIT_IB_PFD_COMPLETE: 229CP_CONTEXT_UPDATE: 230CP_SET_PROTECTED_MODE: 231UNKN96: 232UNKN97: 233CP_WHERE_AM_I: 234CP_SET_MODE: 235CP_SET_VISIBILITY_OVERRIDE: 236CP_SET_MARKER: 237UNKN103: 238UNKN104: 239UNKN105: 240UNKN106: 241UNKN107: 242UNKN108: 243CP_REG_WRITE: 244UNKN110: 245CP_BOOTSTRAP_UCODE: 246CP_WAIT_TWO_REGS: 247CP_TEST_TWO_MEMS: 248CP_REG_TO_MEM_OFFSET_REG: 249CP_REG_TO_MEM_OFFSET_MEM: 250UNKN118: 251UNKN119: 252CP_REG_WR_NO_CTXT: 253UNKN121: 254UNKN122: 255UNKN123: 256UNKN124: 257UNKN125: 258UNKN126: 259UNKN127: 260 waitin 261 mov $01, $data 262 [00000076] ; nop 263 [00000076] ; nop 264 [00000076] ; nop 265 [00000076] ; nop 266 [00000076] ; nop 267 [00000076] ; nop 268 [00000076] ; nop 269 [00000076] ; nop 270 [00000076] ; nop 271 [00000076] ; nop 272 [00000076] ; nop 273 [00000076] ; nop 274 [00000076] ; nop 275 [00000076] ; nop 276 [00000076] ; nop 277 [0000006b] ; nop 278 [00000076] ; nop 279 [00000076] ; nop 280 [00000076] ; nop 281 [00000076] ; nop 282 [00000076] ; nop 283 [00000076] ; nop 284 [00000076] ; nop 285 [00000076] ; nop 286 [00000076] ; nop 287 [00000076] ; nop 288 [00000076] ; nop 289 [00000076] ; nop 290 [00000076] ; nop 291 [00000076] ; nop 292 [00000076] ; nop 293 [00000076] ; nop 294 [00000076] ; nop 295 [0000003f] ; nop 296 [00000076] ; nop 297 [00000076] ; nop 298 [00000076] ; nop 299 [00000076] ; nop 300 [00000076] ; nop 301 [00000076] ; nop 302 [00000076] ; nop 303 [00000076] ; nop 304 [00000076] ; nop 305 [00000076] ; nop 306 [00000076] ; nop 307 [00000076] ; nop 308 [00000076] ; nop 309 [00000076] ; nop 310 [00000076] ; nop 311 [00000076] ; nop 312 [00000076] ; nop 313 [00000076] ; nop 314 [00000076] ; nop 315 [00000076] ; nop 316 [00000076] ; nop 317 [00000076] ; nop 318 [00000076] ; nop 319 [00000076] ; nop 320 [00000076] ; nop 321 [00000076] ; nop 322 [00000076] ; nop 323 [00000025] ; nop 324 [00000076] ; nop 325 [00000076] ; nop 326 [00000076] ; nop 327 [00000076] ; nop 328 [00000076] ; nop 329 [00000076] ; nop 330 [00000076] ; nop 331 [00000076] ; nop 332 [00000076] ; nop 333 [00000076] ; nop 334 [00000022] ; nop 335 [00000076] ; nop 336 [00000076] ; nop 337 [00000076] ; nop 338 [0000002c] ; nop 339 [00000076] ; nop 340 [00000076] ; nop 341 [00000076] ; nop 342 [00000076] ; nop 343 [00000076] ; nop 344 [00000076] ; nop 345 [00000076] ; nop 346 [00000076] ; nop 347 [00000076] ; nop 348 [00000076] ; nop 349 [00000076] ; nop 350 [00000076] ; nop 351 [00000076] ; nop 352 [00000076] ; nop 353 [00000076] ; nop 354 [00000076] ; nop 355 [00000076] ; nop 356 [00000076] ; nop 357 [00000076] ; nop 358 [00000076] ; nop 359 [00000076] ; nop 360 [00000076] ; nop 361 [00000076] ; nop 362 [00000076] ; nop 363 [00000076] ; nop 364 [00000030] ; nop 365 [00000076] ; nop 366 [00000076] ; nop 367 [00000076] ; nop 368 [00000076] ; nop 369 [00000076] ; nop 370 [00000076] ; nop 371 [00000076] ; nop 372 [00000076] ; nop 373 [00000076] ; nop 374 [00000076] ; nop 375 [00000076] ; nop 376 [00000076] ; nop 377 [00000062] ; nop 378 [00000076] ; nop 379 [00000055] ; nop 380 [00000076] ; nop 381 [00000076] ; nop 382 [00000076] ; nop 383 [00000076] ; nop 384 [00000076] ; nop 385 [00000076] ; nop 386 [00000076] ; nop 387 [00000076] ; nop 388 [00000076] ; nop 389 [00000076] ; nop 390