17ec681f3Smrg; a6xx microcode
27ec681f3Smrg; Version: 01000001
37ec681f3Smrg
47ec681f3Smrg        [01000001]  ; nop
57ec681f3Smrg        [01000078]  ; nop
67ec681f3Smrg        mov $01, 0x0830	; CP_SQE_INSTR_BASE
77ec681f3Smrg        mov $02, 0x0002
87ec681f3Smrg        cwrite $01, [$00 + @REG_READ_ADDR], 0x0
97ec681f3Smrg        cwrite $02, [$00 + @REG_READ_DWORDS], 0x0
107ec681f3Smrg        mov $01, $regdata
117ec681f3Smrg        mov $02, $regdata
127ec681f3Smrg        add $01, $01, 0x0004
137ec681f3Smrg        addhi $02, $02, 0x0000
147ec681f3Smrg        mov $03, 0x0001
157ec681f3Smrg        cwrite $01, [$00 + @MEM_READ_ADDR], 0x0
167ec681f3Smrg        cwrite $02, [$00 + @MEM_READ_ADDR+0x1], 0x0
177ec681f3Smrg        cwrite $03, [$00 + @MEM_READ_DWORDS], 0x0
187ec681f3Smrg        rot $04, $memdata, 0x0008
197ec681f3Smrg        ushr $04, $04, 0x0006
207ec681f3Smrg        sub $04, $04, 0x0004
217ec681f3Smrg        add $01, $01, $04
227ec681f3Smrg        addhi $02, $02, 0x0000
237ec681f3Smrg        mov $rem, 0x0080
247ec681f3Smrg        cwrite $01, [$00 + @MEM_READ_ADDR], 0x0
257ec681f3Smrg        cwrite $02, [$00 + @MEM_READ_ADDR+0x1], 0x0
267ec681f3Smrg        cwrite $02, [$00 + @LOAD_STORE_HI], 0x0
277ec681f3Smrg        cwrite $rem, [$00 + @MEM_READ_DWORDS], 0x0
287ec681f3Smrg        cwrite $00, [$00 + @PACKET_TABLE_WRITE_ADDR], 0x0
297ec681f3Smrg        (rep)cwrite $memdata, [$00 + @PACKET_TABLE_WRITE], 0x0
307ec681f3Smrg        mov $02, 0x0883	; CP_SCRATCH[0].REG
317ec681f3Smrg        mov $03, 0xbeef
327ec681f3Smrg        mov $04, 0xdead << 16
337ec681f3Smrg        or $03, $03, $04
347ec681f3Smrg        cwrite $02, [$00 + @REG_WRITE_ADDR], 0x0
357ec681f3Smrg        cwrite $03, [$00 + @REG_WRITE], 0x0
367ec681f3Smrg        waitin
377ec681f3Smrg        mov $01, $data
387ec681f3Smrg
397ec681f3SmrgCP_ME_INIT:
407ec681f3Smrg        mov $02, 0x0002
417ec681f3Smrg        waitin
427ec681f3Smrg        mov $01, $data
437ec681f3Smrg
447ec681f3SmrgCP_MEM_WRITE:
457ec681f3Smrg        mov $addr, 0x00a0 << 24	; |NRT_ADDR
467ec681f3Smrg        mov $02, 0x0004
477ec681f3Smrg        (xmov1)add $data, $02, $data
487ec681f3Smrg        mov $addr, 0xa204 << 16	; |NRT_DATA
497ec681f3Smrg        (rep)(xmov3)mov $data, $data
507ec681f3Smrg        waitin
517ec681f3Smrg        mov $01, $data
527ec681f3Smrg
537ec681f3SmrgCP_SCRATCH_WRITE:
547ec681f3Smrg        mov $02, 0x00ff
557ec681f3Smrg        (rep)cwrite $data, [$02 + 0x001], 0x4
567ec681f3Smrg        waitin
577ec681f3Smrg        mov $01, $data
587ec681f3Smrg
597ec681f3SmrgCP_SET_SECURE_MODE:
607ec681f3Smrg        mov $02, $data
617ec681f3Smrg        setsecure $02, #l000
627ec681f3Smrg l001:  jump #l001
637ec681f3Smrg        nop
647ec681f3Smrg l000:  waitin
657ec681f3Smrg        mov $01, $data
667ec681f3Smrgfxn00:
677ec681f3Smrg l004:  cmp $04, $02, $03
687ec681f3Smrg        breq $04, b0, #l002
697ec681f3Smrg        brne $04, b1, #l003
707ec681f3Smrg        breq $04, b2, #l004
717ec681f3Smrg        sub $03, $03, $02
727ec681f3Smrg l003:  jump #l004
737ec681f3Smrg        sub $02, $02, $03
747ec681f3Smrg l002:  ret
757ec681f3Smrg        nop
767ec681f3Smrg
777ec681f3SmrgCP_REG_RMW:
787ec681f3Smrg        cwrite $data, [$00 + @REG_READ_ADDR], 0x0
797ec681f3Smrg        add $02, $regdata, 0x0042
807ec681f3Smrg        addhi $03, $00, $regdata
817ec681f3Smrg        sub $02, $02, $regdata
827ec681f3Smrg        call #fxn00
837ec681f3Smrg        subhi $03, $03, $regdata
847ec681f3Smrg        and $02, $02, $regdata
857ec681f3Smrg        or $02, $02, 0x0001
867ec681f3Smrg        xor $02, $02, 0x0001
877ec681f3Smrg        not $02, $02
887ec681f3Smrg        shl $02, $02, $regdata
897ec681f3Smrg        ushr $02, $02, $regdata
907ec681f3Smrg        ishr $02, $02, $regdata
917ec681f3Smrg        rot $02, $02, $regdata
927ec681f3Smrg        min $02, $02, $regdata
937ec681f3Smrg        max $02, $02, $regdata
947ec681f3Smrg        mul8 $02, $02, $regdata
957ec681f3Smrg        msb $02, $02
967ec681f3Smrg        mov $usraddr, $data
977ec681f3Smrg        mov $data, $02
987ec681f3Smrg        waitin
997ec681f3Smrg        mov $01, $data
1007ec681f3Smrg
1017ec681f3SmrgCP_MEMCPY:
1027ec681f3Smrg        mov $02, $data
1037ec681f3Smrg        mov $03, $data
1047ec681f3Smrg        mov $04, $data
1057ec681f3Smrg        mov $05, $data
1067ec681f3Smrg        mov $06, $data
1077ec681f3Smrg l006:  breq $06, 0x0, #l005
1087ec681f3Smrg        cwrite $03, [$00 + @LOAD_STORE_HI], 0x0
1097ec681f3Smrg        load $07, [$02 + 0x004], 0x4
1107ec681f3Smrg        cwrite $05, [$00 + @LOAD_STORE_HI], 0x0
1117ec681f3Smrg        jump #l006
1127ec681f3Smrg        store $07, [$04 + 0x004], 0x4
1137ec681f3Smrg l005:  waitin
1147ec681f3Smrg        mov $01, $data
1157ec681f3Smrg
1167ec681f3SmrgCP_MEM_TO_MEM:
1177ec681f3Smrg        cwrite $data, [$00 + @MEM_READ_ADDR], 0x0
1187ec681f3Smrg        cwrite $data, [$00 + @MEM_READ_ADDR+0x1], 0x0
1197ec681f3Smrg        mov $02, $data
1207ec681f3Smrg        cwrite $data, [$00 + @LOAD_STORE_HI], 0x0
1217ec681f3Smrg        mov $rem, $data
1227ec681f3Smrg        cwrite $rem, [$00 + @MEM_READ_DWORDS], 0x0
1237ec681f3Smrg        (rep)store $memdata, [$02 + 0x004], 0x4
1247ec681f3Smrg        waitin
1257ec681f3Smrg        mov $01, $data
1267ec681f3Smrg
1277ec681f3SmrgUNKN15:
1287ec681f3Smrg        cread $02, [$00 + 0x101], 0x0
1297ec681f3Smrg        brne $02, 0x1, #l007
1307ec681f3Smrg        nop
1317ec681f3Smrg        preemptleave #l001
1327ec681f3Smrg        nop
1337ec681f3Smrg        nop
1347ec681f3Smrg        nop
1357ec681f3Smrg        waitin
1367ec681f3Smrg        mov $01, $data
1377ec681f3Smrg l007:  iret
1387ec681f3Smrg        nop
1397ec681f3Smrg
1407ec681f3SmrgUNKN0:
1417ec681f3SmrgUNKN1:
1427ec681f3SmrgUNKN2:
1437ec681f3SmrgUNKN3:
1447ec681f3SmrgPKT4:
1457ec681f3SmrgUNKN5:
1467ec681f3SmrgUNKN6:
1477ec681f3SmrgUNKN7:
1487ec681f3SmrgUNKN8:
1497ec681f3SmrgUNKN9:
1507ec681f3SmrgUNKN10:
1517ec681f3SmrgUNKN11:
1527ec681f3SmrgUNKN12:
1537ec681f3SmrgUNKN13:
1547ec681f3SmrgUNKN14:
1557ec681f3SmrgCP_NOP:
1567ec681f3SmrgCP_RECORD_PFP_TIMESTAMP:
1577ec681f3SmrgCP_WAIT_MEM_WRITES:
1587ec681f3SmrgCP_WAIT_FOR_ME:
1597ec681f3SmrgCP_WAIT_MEM_GTE:
1607ec681f3SmrgUNKN21:
1617ec681f3SmrgUNKN22:
1627ec681f3SmrgUNKN23:
1637ec681f3SmrgUNKN24:
1647ec681f3SmrgCP_DRAW_PRED_ENABLE_GLOBAL:
1657ec681f3SmrgCP_DRAW_PRED_ENABLE_LOCAL:
1667ec681f3SmrgUNKN27:
1677ec681f3SmrgCP_PREEMPT_ENABLE:
1687ec681f3SmrgCP_SKIP_IB2_ENABLE_GLOBAL:
1697ec681f3SmrgCP_PREEMPT_TOKEN:
1707ec681f3SmrgUNKN31:
1717ec681f3SmrgUNKN32:
1727ec681f3SmrgCP_DRAW_INDX:
1737ec681f3SmrgCP_SKIP_IB2_ENABLE_LOCAL:
1747ec681f3SmrgCP_DRAW_AUTO:
1757ec681f3SmrgCP_SET_STATE:
1767ec681f3SmrgCP_WAIT_FOR_IDLE:
1777ec681f3SmrgCP_IM_LOAD:
1787ec681f3SmrgCP_DRAW_INDIRECT:
1797ec681f3SmrgCP_DRAW_INDX_INDIRECT:
1807ec681f3SmrgCP_DRAW_INDIRECT_MULTI:
1817ec681f3SmrgCP_IM_LOAD_IMMEDIATE:
1827ec681f3SmrgCP_BLIT:
1837ec681f3SmrgCP_SET_CONSTANT:
1847ec681f3SmrgCP_SET_BIN_DATA5_OFFSET:
1857ec681f3SmrgCP_SET_BIN_DATA5:
1867ec681f3SmrgUNKN48:
1877ec681f3SmrgCP_RUN_OPENCL:
1887ec681f3SmrgCP_LOAD_STATE6_GEOM:
1897ec681f3SmrgCP_EXEC_CS:
1907ec681f3SmrgCP_LOAD_STATE6_FRAG:
1917ec681f3SmrgCP_SET_SUBDRAW_SIZE:
1927ec681f3SmrgCP_LOAD_STATE6:
1937ec681f3SmrgCP_INDIRECT_BUFFER_PFD:
1947ec681f3SmrgCP_DRAW_INDX_OFFSET:
1957ec681f3SmrgCP_REG_TEST:
1967ec681f3SmrgCP_COND_INDIRECT_BUFFER_PFE:
1977ec681f3SmrgCP_INVALIDATE_STATE:
1987ec681f3SmrgCP_WAIT_REG_MEM:
1997ec681f3SmrgCP_REG_TO_MEM:
2007ec681f3SmrgCP_INDIRECT_BUFFER:
2017ec681f3SmrgCP_INTERRUPT:
2027ec681f3SmrgCP_EXEC_CS_INDIRECT:
2037ec681f3SmrgCP_MEM_TO_REG:
2047ec681f3SmrgCP_SET_DRAW_STATE:
2057ec681f3SmrgCP_COND_EXEC:
2067ec681f3SmrgCP_COND_WRITE5:
2077ec681f3SmrgCP_EVENT_WRITE:
2087ec681f3SmrgCP_COND_REG_EXEC:
2097ec681f3SmrgUNKN73:
2107ec681f3SmrgCP_REG_TO_SCRATCH:
2117ec681f3SmrgCP_SET_DRAW_INIT_FLAGS:
2127ec681f3SmrgCP_SCRATCH_TO_REG:
2137ec681f3SmrgCP_DRAW_PRED_SET:
2147ec681f3SmrgCP_MEM_WRITE_CNTR:
2157ec681f3SmrgCP_START_BIN:
2167ec681f3SmrgCP_END_BIN:
2177ec681f3SmrgCP_WAIT_REG_EQ:
2187ec681f3SmrgCP_SMMU_TABLE_UPDATE:
2197ec681f3SmrgUNKN84:
2207ec681f3SmrgCP_SET_CTXSWITCH_IB:
2217ec681f3SmrgCP_SET_PSEUDO_REG:
2227ec681f3SmrgCP_INDIRECT_BUFFER_CHAIN:
2237ec681f3SmrgCP_EVENT_WRITE_SHD:
2247ec681f3SmrgCP_EVENT_WRITE_CFL:
2257ec681f3SmrgUNKN90:
2267ec681f3SmrgCP_EVENT_WRITE_ZPD:
2277ec681f3SmrgCP_CONTEXT_REG_BUNCH:
2287ec681f3SmrgCP_WAIT_IB_PFD_COMPLETE:
2297ec681f3SmrgCP_CONTEXT_UPDATE:
2307ec681f3SmrgCP_SET_PROTECTED_MODE:
2317ec681f3SmrgUNKN96:
2327ec681f3SmrgUNKN97:
2337ec681f3SmrgCP_WHERE_AM_I:
2347ec681f3SmrgCP_SET_MODE:
2357ec681f3SmrgCP_SET_VISIBILITY_OVERRIDE:
2367ec681f3SmrgCP_SET_MARKER:
2377ec681f3SmrgUNKN103:
2387ec681f3SmrgUNKN104:
2397ec681f3SmrgUNKN105:
2407ec681f3SmrgUNKN106:
2417ec681f3SmrgUNKN107:
2427ec681f3SmrgUNKN108:
2437ec681f3SmrgCP_REG_WRITE:
2447ec681f3SmrgUNKN110:
2457ec681f3SmrgCP_BOOTSTRAP_UCODE:
2467ec681f3SmrgCP_WAIT_TWO_REGS:
2477ec681f3SmrgCP_TEST_TWO_MEMS:
2487ec681f3SmrgCP_REG_TO_MEM_OFFSET_REG:
2497ec681f3SmrgCP_REG_TO_MEM_OFFSET_MEM:
2507ec681f3SmrgUNKN118:
2517ec681f3SmrgUNKN119:
2527ec681f3SmrgCP_REG_WR_NO_CTXT:
2537ec681f3SmrgUNKN121:
2547ec681f3SmrgUNKN122:
2557ec681f3SmrgUNKN123:
2567ec681f3SmrgUNKN124:
2577ec681f3SmrgUNKN125:
2587ec681f3SmrgUNKN126:
2597ec681f3SmrgUNKN127:
2607ec681f3Smrg        waitin
2617ec681f3Smrg        mov $01, $data
2627ec681f3Smrg        [00000076]  ; nop
2637ec681f3Smrg        [00000076]  ; nop
2647ec681f3Smrg        [00000076]  ; nop
2657ec681f3Smrg        [00000076]  ; nop
2667ec681f3Smrg        [00000076]  ; nop
2677ec681f3Smrg        [00000076]  ; nop
2687ec681f3Smrg        [00000076]  ; nop
2697ec681f3Smrg        [00000076]  ; nop
2707ec681f3Smrg        [00000076]  ; nop
2717ec681f3Smrg        [00000076]  ; nop
2727ec681f3Smrg        [00000076]  ; nop
2737ec681f3Smrg        [00000076]  ; nop
2747ec681f3Smrg        [00000076]  ; nop
2757ec681f3Smrg        [00000076]  ; nop
2767ec681f3Smrg        [00000076]  ; nop
2777ec681f3Smrg        [0000006b]  ; nop
2787ec681f3Smrg        [00000076]  ; nop
2797ec681f3Smrg        [00000076]  ; nop
2807ec681f3Smrg        [00000076]  ; nop
2817ec681f3Smrg        [00000076]  ; nop
2827ec681f3Smrg        [00000076]  ; nop
2837ec681f3Smrg        [00000076]  ; nop
2847ec681f3Smrg        [00000076]  ; nop
2857ec681f3Smrg        [00000076]  ; nop
2867ec681f3Smrg        [00000076]  ; nop
2877ec681f3Smrg        [00000076]  ; nop
2887ec681f3Smrg        [00000076]  ; nop
2897ec681f3Smrg        [00000076]  ; nop
2907ec681f3Smrg        [00000076]  ; nop
2917ec681f3Smrg        [00000076]  ; nop
2927ec681f3Smrg        [00000076]  ; nop
2937ec681f3Smrg        [00000076]  ; nop
2947ec681f3Smrg        [00000076]  ; nop
2957ec681f3Smrg        [0000003f]  ; nop
2967ec681f3Smrg        [00000076]  ; nop
2977ec681f3Smrg        [00000076]  ; nop
2987ec681f3Smrg        [00000076]  ; nop
2997ec681f3Smrg        [00000076]  ; nop
3007ec681f3Smrg        [00000076]  ; nop
3017ec681f3Smrg        [00000076]  ; nop
3027ec681f3Smrg        [00000076]  ; nop
3037ec681f3Smrg        [00000076]  ; nop
3047ec681f3Smrg        [00000076]  ; nop
3057ec681f3Smrg        [00000076]  ; nop
3067ec681f3Smrg        [00000076]  ; nop
3077ec681f3Smrg        [00000076]  ; nop
3087ec681f3Smrg        [00000076]  ; nop
3097ec681f3Smrg        [00000076]  ; nop
3107ec681f3Smrg        [00000076]  ; nop
3117ec681f3Smrg        [00000076]  ; nop
3127ec681f3Smrg        [00000076]  ; nop
3137ec681f3Smrg        [00000076]  ; nop
3147ec681f3Smrg        [00000076]  ; nop
3157ec681f3Smrg        [00000076]  ; nop
3167ec681f3Smrg        [00000076]  ; nop
3177ec681f3Smrg        [00000076]  ; nop
3187ec681f3Smrg        [00000076]  ; nop
3197ec681f3Smrg        [00000076]  ; nop
3207ec681f3Smrg        [00000076]  ; nop
3217ec681f3Smrg        [00000076]  ; nop
3227ec681f3Smrg        [00000076]  ; nop
3237ec681f3Smrg        [00000025]  ; nop
3247ec681f3Smrg        [00000076]  ; nop
3257ec681f3Smrg        [00000076]  ; nop
3267ec681f3Smrg        [00000076]  ; nop
3277ec681f3Smrg        [00000076]  ; nop
3287ec681f3Smrg        [00000076]  ; nop
3297ec681f3Smrg        [00000076]  ; nop
3307ec681f3Smrg        [00000076]  ; nop
3317ec681f3Smrg        [00000076]  ; nop
3327ec681f3Smrg        [00000076]  ; nop
3337ec681f3Smrg        [00000076]  ; nop
3347ec681f3Smrg        [00000022]  ; nop
3357ec681f3Smrg        [00000076]  ; nop
3367ec681f3Smrg        [00000076]  ; nop
3377ec681f3Smrg        [00000076]  ; nop
3387ec681f3Smrg        [0000002c]  ; nop
3397ec681f3Smrg        [00000076]  ; nop
3407ec681f3Smrg        [00000076]  ; nop
3417ec681f3Smrg        [00000076]  ; nop
3427ec681f3Smrg        [00000076]  ; nop
3437ec681f3Smrg        [00000076]  ; nop
3447ec681f3Smrg        [00000076]  ; nop
3457ec681f3Smrg        [00000076]  ; nop
3467ec681f3Smrg        [00000076]  ; nop
3477ec681f3Smrg        [00000076]  ; nop
3487ec681f3Smrg        [00000076]  ; nop
3497ec681f3Smrg        [00000076]  ; nop
3507ec681f3Smrg        [00000076]  ; nop
3517ec681f3Smrg        [00000076]  ; nop
3527ec681f3Smrg        [00000076]  ; nop
3537ec681f3Smrg        [00000076]  ; nop
3547ec681f3Smrg        [00000076]  ; nop
3557ec681f3Smrg        [00000076]  ; nop
3567ec681f3Smrg        [00000076]  ; nop
3577ec681f3Smrg        [00000076]  ; nop
3587ec681f3Smrg        [00000076]  ; nop
3597ec681f3Smrg        [00000076]  ; nop
3607ec681f3Smrg        [00000076]  ; nop
3617ec681f3Smrg        [00000076]  ; nop
3627ec681f3Smrg        [00000076]  ; nop
3637ec681f3Smrg        [00000076]  ; nop
3647ec681f3Smrg        [00000030]  ; nop
3657ec681f3Smrg        [00000076]  ; nop
3667ec681f3Smrg        [00000076]  ; nop
3677ec681f3Smrg        [00000076]  ; nop
3687ec681f3Smrg        [00000076]  ; nop
3697ec681f3Smrg        [00000076]  ; nop
3707ec681f3Smrg        [00000076]  ; nop
3717ec681f3Smrg        [00000076]  ; nop
3727ec681f3Smrg        [00000076]  ; nop
3737ec681f3Smrg        [00000076]  ; nop
3747ec681f3Smrg        [00000076]  ; nop
3757ec681f3Smrg        [00000076]  ; nop
3767ec681f3Smrg        [00000076]  ; nop
3777ec681f3Smrg        [00000062]  ; nop
3787ec681f3Smrg        [00000076]  ; nop
3797ec681f3Smrg        [00000055]  ; nop
3807ec681f3Smrg        [00000076]  ; nop
3817ec681f3Smrg        [00000076]  ; nop
3827ec681f3Smrg        [00000076]  ; nop
3837ec681f3Smrg        [00000076]  ; nop
3847ec681f3Smrg        [00000076]  ; nop
3857ec681f3Smrg        [00000076]  ; nop
3867ec681f3Smrg        [00000076]  ; nop
3877ec681f3Smrg        [00000076]  ; nop
3887ec681f3Smrg        [00000076]  ; nop
3897ec681f3Smrg        [00000076]  ; nop
390