1; a7xx microcode 2; Version: 01730001 3 4[01730001] 5[#jumptbl] 6mov $01, 0x830 ; CP_SQE_INSTR_BASE 7mov $02, 0x2 8cwrite $01, [$00 + @REG_READ_ADDR] 9cwrite $02, [$00 + @REG_READ_DWORDS] 10mov $01, $regdata 11mov $02, $regdata 12add $01, $01, 0x4 13addhi $02, $02, 0x0 14mov $03, 0x1 15cwrite $01, [$00 + @MEM_READ_ADDR] 16cwrite $02, [$00 + @MEM_READ_ADDR+0x1] 17cwrite $03, [$00 + @MEM_READ_DWORDS] 18rot $04, $memdata, 0x8 19ushr $04, $04, 0x6 20sub $04, $04, 0x4 21add $01, $01, $04 22addhi $02, $02, 0x0 23mov $rem, 0x80 24cwrite $01, [$00 + @MEM_READ_ADDR] 25cwrite $02, [$00 + @MEM_READ_ADDR+0x1] 26cwrite $02, [$00 + @LOAD_STORE_HI] 27cwrite $rem, [$00 + @MEM_READ_DWORDS] 28cwrite $00, [$00 + @PACKET_TABLE_WRITE_ADDR] 29(rep)cwrite $memdata, [$00 + @PACKET_TABLE_WRITE] 30add $01, $01, 0x200 31addhi $02, $02, 0x0 32cwrite $01, [$00 + @BV_INSTR_BASE] 33cwrite $02, [$00 + @BV_INSTR_BASE+0x1] 34cwrite $03, [$00 + @BV_CNTL] 35add $01, $01, 0x4 36addhi $02, $02, 0x0 37cwrite $01, [$00 + @MEM_READ_ADDR] 38cwrite $02, [$00 + @MEM_READ_ADDR+0x1] 39cwrite $03, [$00 + @MEM_READ_DWORDS] 40rot $04, $memdata, 0x8 41ushr $04, $04, 0x6 42sub $04, $04, 0x4 43add $01, $01, $04 44addhi $02, $02, 0x0 45add $01, $01, 0x200 46addhi $02, $02, 0x0 47cwrite $01, [$00 + @LPAC_INSTR_BASE] 48cwrite $02, [$00 + @LPAC_INSTR_BASE+0x1] 49cwrite $03, [$00 + @LPAC_CNTL] 50mov $02, 0x883 ; CP_SCRATCH[0].REG 51mov $03, 0xbeef 52mov $04, 0xdead << 16 53or $03, $03, $04 54cwrite $02, [$00 + @REG_WRITE_ADDR] 55cwrite $03, [$00 + @REG_WRITE] 56waitin 57mov $01, $data 58 59CP_ME_INIT: 60mov $02, 0x2 61waitin 62mov $01, $data 63 64CP_MEM_WRITE: 65mov $addr, 0xa0 << 24 ; |NRT_ADDR 66mov $02, 0x4 67(xmov1)add $data, $02, $data 68mov $addr, 0xa204 << 16 ; |NRT_DATA 69(rep)(xmov3)mov $data, $data 70waitin 71mov $01, $data 72 73CP_SCRATCH_WRITE: 74mov $02, 0xff 75(rep)cwrite $data, [$02 + 0x1]! 76waitin 77mov $01, $data 78 79CP_SET_DRAW_STATE: 80(rep)(sds2)cwrite $data, [$00 + @DRAW_STATE_SET_HDR] 81waitin 82mov $01, $data 83 84CP_SET_BIN_DATA5: 85sread $02, [$00 + %SP] 86swrite $02, [$00 + %SP] 87mov $02, 0x7 88(rep)swrite $data, [$02 + 0x1]! 89waitin 90mov $01, $data 91 92CP_SET_SECURE_MODE: 93mov $02, $data 94setsecure $02, #l81 95 96fxn79: 97l79: 98jump #l79 99nop 100l81: 101waitin 102mov $01, $data 103 104fxn83: 105l83: 106cmp $04, $02, $03 107breq $04, b0, #l90 108brne $04, b1, #l88 109breq $04, b2, #l83 110sub $03, $03, $02 111l88: 112jump #l83 113sub $02, $02, $03 114l90: 115ret 116nop 117 118CP_REG_RMW: 119cwrite $data, [$00 + @REG_READ_ADDR] 120add $02, $regdata, 0x42 121addhi $03, $00, $regdata 122sub $02, $02, $regdata 123call #fxn83 124subhi $03, $03, $regdata 125and $02, $02, $regdata 126or $02, $02, 0x1 127xor $02, $02, 0x1 128not $02, $02 129shl $02, $02, $regdata 130ushr $02, $02, $regdata 131ishr $02, $02, $regdata 132rot $02, $02, $regdata 133min $02, $02, $regdata 134max $02, $02, $regdata 135mul8 $02, $02, $regdata 136bic $02, $02, $regdata 137msb $02, $02 138bfi $02, $03, b1, b2 139setbit $02, $02, b3 140clrbit $02, $02, b4 141setbit $02, $02, $03 142ubfx $03, $02, b5, b6 143mov $usraddr, $data 144mov $data, $02 145(peek)mov $00, $data 146waitin 147mov $01, $data 148 149CP_MEMCPY: 150mov $02, $data 151mov $03, $data 152mov $04, $data 153mov $05, $data 154mov $06, $data 155l126: 156breq $06, 0x0, #l132 157cwrite $03, [$00 + @LOAD_STORE_HI] 158load $07, [$02 + 0x4]! 159cwrite $05, [$00 + @LOAD_STORE_HI] 160jump #l126 161store $07, [$04 + 0x4]! 162l132: 163waitin 164mov $01, $data 165 166CP_MEM_TO_MEM: 167cwrite $data, [$00 + @MEM_READ_ADDR] 168cwrite $data, [$00 + @MEM_READ_ADDR+0x1] 169mov $02, $data 170cwrite $data, [$00 + @LOAD_STORE_HI] 171mov $rem, $data 172cwrite $rem, [$00 + @MEM_READ_DWORDS] 173(rep)store $memdata, [$02 + 0x4]! 174waitin 175mov $01, $data 176 177IN_PREEMPT: 178cread $02, [$00 + 0x101] 179brne $02, 0x1, #l152 180nop 181bl #fxn79 182nop 183nop 184nop 185waitin 186mov $01, $data 187l152: 188iret 189nop 190 191CP_BLIT: 192CP_BOOTSTRAP_UCODE: 193CP_BV_BR_COUNT_OPS: 194CP_CCHE_INVALIDATE: 195CP_COND_EXEC: 196CP_COND_REG_EXEC: 197CP_COND_WRITE5: 198CP_CONTEXT_REG_BUNCH: 199CP_CONTEXT_REG_BUNCH2: 200CP_CONTEXT_SWITCH_YIELD: 201CP_CONTEXT_UPDATE: 202CP_DRAW_AUTO: 203CP_DRAW_INDIRECT: 204CP_DRAW_INDIRECT_MULTI: 205CP_DRAW_INDX: 206CP_DRAW_INDX_INDIRECT: 207CP_DRAW_INDX_OFFSET: 208CP_DRAW_PRED_ENABLE_GLOBAL: 209CP_DRAW_PRED_ENABLE_LOCAL: 210CP_DRAW_PRED_SET: 211CP_END_BIN: 212CP_EVENT_WRITE7: 213CP_EVENT_WRITE_CFL: 214CP_EVENT_WRITE_SHD: 215CP_EVENT_WRITE_ZPD: 216CP_EXEC_CS: 217CP_EXEC_CS_INDIRECT: 218CP_FIXED_STRIDE_DRAW_TABLE: 219CP_GLOBAL_TIMESTAMP: 220CP_IM_LOAD: 221CP_IM_LOAD_IMMEDIATE: 222CP_INDIRECT_BUFFER: 223CP_INDIRECT_BUFFER_CHAIN: 224CP_INDIRECT_BUFFER_PFD: 225CP_INTERRUPT: 226CP_INVALIDATE_STATE: 227CP_LOAD_STATE6: 228CP_LOAD_STATE6_FRAG: 229CP_LOAD_STATE6_GEOM: 230CP_LOCAL_TIMESTAMP: 231CP_MEM_TO_REG: 232CP_MEM_TO_SCRATCH_MEM: 233CP_MEM_WRITE_CNTR: 234CP_MODIFY_TIMESTAMP: 235CP_NOP: 236CP_RECORD_PFP_TIMESTAMP: 237CP_REG_TEST: 238CP_REG_TO_MEM: 239CP_REG_TO_MEM_OFFSET_MEM: 240CP_REG_TO_MEM_OFFSET_REG: 241CP_REG_TO_SCRATCH: 242CP_REG_WR_NO_CTXT: 243CP_RESET_CONTEXT_STATE: 244CP_RESOURCE_LIST: 245CP_RUN_OPENCL: 246CP_SCRATCH_TO_REG: 247CP_SET_AMBLE: 248CP_SET_BIN_DATA5_OFFSET: 249CP_SET_DRAW_INIT_FLAGS: 250CP_SET_MARKER: 251CP_SET_MODE: 252CP_SET_PROTECTED_MODE: 253CP_SET_PSEUDO_REG: 254CP_SET_STATE: 255CP_SET_SUBDRAW_SIZE: 256CP_SET_UNK_BIN_DATA: 257CP_SET_VISIBILITY_OVERRIDE: 258CP_SKIP_IB2_ENABLE_GLOBAL: 259CP_SKIP_IB2_ENABLE_LOCAL: 260CP_SMMU_TABLE_UPDATE: 261CP_START_BIN: 262CP_TEST_TWO_MEMS: 263CP_THREAD_CONTROL: 264CP_WAIT_FOR_IDLE: 265CP_WAIT_FOR_ME: 266CP_WAIT_MEM_WRITES: 267CP_WAIT_REG_EQ: 268CP_WAIT_REG_MEM: 269CP_WAIT_TIMESTAMP: 270CP_WHERE_AM_I: 271IN_GMU_INTERRUPT: 272IN_IB_END: 273PKT4: 274UNKN0: 275UNKN1: 276UNKN103: 277UNKN104: 278UNKN105: 279UNKN106: 280UNKN108: 281UNKN109: 282UNKN110: 283UNKN112: 284UNKN118: 285UNKN119: 286UNKN12: 287UNKN121: 288UNKN122: 289UNKN123: 290UNKN124: 291UNKN125: 292UNKN126: 293UNKN13: 294UNKN14: 295UNKN2: 296UNKN3: 297UNKN30: 298UNKN32: 299UNKN48: 300UNKN5: 301UNKN6: 302UNKN7: 303UNKN8: 304UNKN84: 305UNKN9: 306UNKN90: 307UNKN96: 308UNKN97: 309waitin 310mov $01, $data 311nop 312nop 313nop 314nop 315.align 32 316jumptbl: 317.jumptbl 318 319.section BV 320; 321; BV microcode: 322; 323[01000001] 324[#jumptbl] 325cread $01, [$00 + @BV_INSTR_BASE] 326cread $02, [$00 + @BV_INSTR_BASE+0x1] 327add $01, $01, 0x4 328addhi $02, $02, 0x0 329mov $03, 0x1 330cwrite $01, [$00 + @MEM_READ_ADDR] 331cwrite $02, [$00 + @MEM_READ_ADDR+0x1] 332cwrite $03, [$00 + @MEM_READ_DWORDS] 333rot $04, $memdata, 0x8 334ushr $04, $04, 0x6 335sub $04, $04, 0x4 336add $01, $01, $04 337addhi $02, $02, 0x0 338mov $rem, 0x80 339cwrite $01, [$00 + @MEM_READ_ADDR] 340cwrite $02, [$00 + @MEM_READ_ADDR+0x1] 341cwrite $02, [$00 + @LOAD_STORE_HI] 342cwrite $rem, [$00 + @MEM_READ_DWORDS] 343cwrite $00, [$00 + @PACKET_TABLE_WRITE_ADDR] 344(rep)cwrite $memdata, [$00 + @PACKET_TABLE_WRITE] 345add $01, $01, 0x200 346addhi $02, $02, 0x0 347cwrite $01, [$00 + @LPAC_INSTR_BASE] 348cwrite $02, [$00 + @LPAC_INSTR_BASE+0x1] 349waitin 350mov $01, $data 351 352CP_BLIT: 353CP_BOOTSTRAP_UCODE: 354CP_BV_BR_COUNT_OPS: 355CP_CCHE_INVALIDATE: 356CP_COND_EXEC: 357CP_COND_REG_EXEC: 358CP_COND_WRITE5: 359CP_CONTEXT_REG_BUNCH: 360CP_CONTEXT_REG_BUNCH2: 361CP_CONTEXT_SWITCH_YIELD: 362CP_CONTEXT_UPDATE: 363CP_DRAW_AUTO: 364CP_DRAW_INDIRECT: 365CP_DRAW_INDIRECT_MULTI: 366CP_DRAW_INDX: 367CP_DRAW_INDX_INDIRECT: 368CP_DRAW_INDX_OFFSET: 369CP_DRAW_PRED_ENABLE_GLOBAL: 370CP_DRAW_PRED_ENABLE_LOCAL: 371CP_DRAW_PRED_SET: 372CP_END_BIN: 373CP_EVENT_WRITE7: 374CP_EVENT_WRITE_CFL: 375CP_EVENT_WRITE_SHD: 376CP_EVENT_WRITE_ZPD: 377CP_EXEC_CS: 378CP_EXEC_CS_INDIRECT: 379CP_FIXED_STRIDE_DRAW_TABLE: 380CP_GLOBAL_TIMESTAMP: 381CP_IM_LOAD: 382CP_IM_LOAD_IMMEDIATE: 383CP_INDIRECT_BUFFER: 384CP_INDIRECT_BUFFER_CHAIN: 385CP_INDIRECT_BUFFER_PFD: 386CP_INTERRUPT: 387CP_INVALIDATE_STATE: 388CP_LOAD_STATE6: 389CP_LOAD_STATE6_FRAG: 390CP_LOAD_STATE6_GEOM: 391CP_LOCAL_TIMESTAMP: 392CP_MEMCPY: 393CP_MEM_TO_MEM: 394CP_MEM_TO_REG: 395CP_MEM_TO_SCRATCH_MEM: 396CP_MEM_WRITE: 397CP_MEM_WRITE_CNTR: 398CP_ME_INIT: 399CP_MODIFY_TIMESTAMP: 400CP_NOP: 401CP_RECORD_PFP_TIMESTAMP: 402CP_REG_RMW: 403CP_REG_TEST: 404CP_REG_TO_MEM: 405CP_REG_TO_MEM_OFFSET_MEM: 406CP_REG_TO_MEM_OFFSET_REG: 407CP_REG_TO_SCRATCH: 408CP_REG_WR_NO_CTXT: 409CP_RESET_CONTEXT_STATE: 410CP_RESOURCE_LIST: 411CP_RUN_OPENCL: 412CP_SCRATCH_TO_REG: 413CP_SCRATCH_WRITE: 414CP_SET_AMBLE: 415CP_SET_BIN_DATA5: 416CP_SET_BIN_DATA5_OFFSET: 417CP_SET_DRAW_INIT_FLAGS: 418CP_SET_DRAW_STATE: 419CP_SET_MARKER: 420CP_SET_MODE: 421CP_SET_PROTECTED_MODE: 422CP_SET_PSEUDO_REG: 423CP_SET_SECURE_MODE: 424CP_SET_STATE: 425CP_SET_SUBDRAW_SIZE: 426CP_SET_UNK_BIN_DATA: 427CP_SET_VISIBILITY_OVERRIDE: 428CP_SKIP_IB2_ENABLE_GLOBAL: 429CP_SKIP_IB2_ENABLE_LOCAL: 430CP_SMMU_TABLE_UPDATE: 431CP_START_BIN: 432CP_TEST_TWO_MEMS: 433CP_THREAD_CONTROL: 434CP_WAIT_FOR_IDLE: 435CP_WAIT_FOR_ME: 436CP_WAIT_MEM_WRITES: 437CP_WAIT_REG_EQ: 438CP_WAIT_REG_MEM: 439CP_WAIT_TIMESTAMP: 440CP_WHERE_AM_I: 441IN_GMU_INTERRUPT: 442IN_IB_END: 443IN_PREEMPT: 444PKT4: 445UNKN0: 446UNKN1: 447UNKN103: 448UNKN104: 449UNKN105: 450UNKN106: 451UNKN108: 452UNKN109: 453UNKN110: 454UNKN112: 455UNKN118: 456UNKN119: 457UNKN12: 458UNKN121: 459UNKN122: 460UNKN123: 461UNKN124: 462UNKN125: 463UNKN126: 464UNKN13: 465UNKN14: 466UNKN2: 467UNKN3: 468UNKN30: 469UNKN32: 470UNKN48: 471UNKN5: 472UNKN6: 473UNKN7: 474UNKN8: 475UNKN84: 476UNKN9: 477UNKN90: 478UNKN96: 479UNKN97: 480waitin 481mov $01, $data 482nop 483nop 484.align 32 485jumptbl: 486.jumptbl 487 488.section LPAC 489; 490; LPAC microcode: 491; 492[01000001] 493[#jumptbl] 494cread $01, [$00 + @LPAC_INSTR_BASE] 495cread $02, [$00 + @LPAC_INSTR_BASE+0x1] 496add $01, $01, 0x4 497addhi $02, $02, 0x0 498mov $03, 0x1 499cwrite $01, [$00 + @MEM_READ_ADDR] 500cwrite $02, [$00 + @MEM_READ_ADDR+0x1] 501cwrite $03, [$00 + @MEM_READ_DWORDS] 502rot $04, $memdata, 0x8 503ushr $04, $04, 0x6 504sub $04, $04, 0x4 505add $01, $01, $04 506addhi $02, $02, 0x0 507mov $rem, 0x80 508cwrite $01, [$00 + @MEM_READ_ADDR] 509cwrite $02, [$00 + @MEM_READ_ADDR+0x1] 510cwrite $02, [$00 + @LOAD_STORE_HI] 511cwrite $rem, [$00 + @MEM_READ_DWORDS] 512cwrite $00, [$00 + @PACKET_TABLE_WRITE_ADDR] 513(rep)cwrite $memdata, [$00 + @PACKET_TABLE_WRITE] 514 515CP_BLIT: 516CP_BOOTSTRAP_UCODE: 517CP_BV_BR_COUNT_OPS: 518CP_CCHE_INVALIDATE: 519CP_COND_EXEC: 520CP_COND_REG_EXEC: 521CP_COND_WRITE5: 522CP_CONTEXT_REG_BUNCH: 523CP_CONTEXT_REG_BUNCH2: 524CP_CONTEXT_SWITCH_YIELD: 525CP_CONTEXT_UPDATE: 526CP_DRAW_AUTO: 527CP_DRAW_INDIRECT: 528CP_DRAW_INDIRECT_MULTI: 529CP_DRAW_INDX: 530CP_DRAW_INDX_INDIRECT: 531CP_DRAW_INDX_OFFSET: 532CP_DRAW_PRED_ENABLE_GLOBAL: 533CP_DRAW_PRED_ENABLE_LOCAL: 534CP_DRAW_PRED_SET: 535CP_END_BIN: 536CP_EVENT_WRITE7: 537CP_EVENT_WRITE_CFL: 538CP_EVENT_WRITE_SHD: 539CP_EVENT_WRITE_ZPD: 540CP_EXEC_CS: 541CP_EXEC_CS_INDIRECT: 542CP_FIXED_STRIDE_DRAW_TABLE: 543CP_GLOBAL_TIMESTAMP: 544CP_IM_LOAD: 545CP_IM_LOAD_IMMEDIATE: 546CP_INDIRECT_BUFFER: 547CP_INDIRECT_BUFFER_CHAIN: 548CP_INDIRECT_BUFFER_PFD: 549CP_INTERRUPT: 550CP_INVALIDATE_STATE: 551CP_LOAD_STATE6: 552CP_LOAD_STATE6_FRAG: 553CP_LOAD_STATE6_GEOM: 554CP_LOCAL_TIMESTAMP: 555CP_MEMCPY: 556CP_MEM_TO_MEM: 557CP_MEM_TO_REG: 558CP_MEM_TO_SCRATCH_MEM: 559CP_MEM_WRITE: 560CP_MEM_WRITE_CNTR: 561CP_ME_INIT: 562CP_MODIFY_TIMESTAMP: 563CP_NOP: 564CP_RECORD_PFP_TIMESTAMP: 565CP_REG_RMW: 566CP_REG_TEST: 567CP_REG_TO_MEM: 568CP_REG_TO_MEM_OFFSET_MEM: 569CP_REG_TO_MEM_OFFSET_REG: 570CP_REG_TO_SCRATCH: 571CP_REG_WR_NO_CTXT: 572CP_RESET_CONTEXT_STATE: 573CP_RESOURCE_LIST: 574CP_RUN_OPENCL: 575CP_SCRATCH_TO_REG: 576CP_SCRATCH_WRITE: 577CP_SET_AMBLE: 578CP_SET_BIN_DATA5: 579CP_SET_BIN_DATA5_OFFSET: 580CP_SET_DRAW_INIT_FLAGS: 581CP_SET_DRAW_STATE: 582CP_SET_MARKER: 583CP_SET_MODE: 584CP_SET_PROTECTED_MODE: 585CP_SET_PSEUDO_REG: 586CP_SET_SECURE_MODE: 587CP_SET_STATE: 588CP_SET_SUBDRAW_SIZE: 589CP_SET_UNK_BIN_DATA: 590CP_SET_VISIBILITY_OVERRIDE: 591CP_SKIP_IB2_ENABLE_GLOBAL: 592CP_SKIP_IB2_ENABLE_LOCAL: 593CP_SMMU_TABLE_UPDATE: 594CP_START_BIN: 595CP_TEST_TWO_MEMS: 596CP_THREAD_CONTROL: 597CP_WAIT_FOR_IDLE: 598CP_WAIT_FOR_ME: 599CP_WAIT_MEM_WRITES: 600CP_WAIT_REG_EQ: 601CP_WAIT_REG_MEM: 602CP_WAIT_TIMESTAMP: 603CP_WHERE_AM_I: 604IN_GMU_INTERRUPT: 605IN_IB_END: 606IN_PREEMPT: 607PKT4: 608UNKN0: 609UNKN1: 610UNKN103: 611UNKN104: 612UNKN105: 613UNKN106: 614UNKN108: 615UNKN109: 616UNKN110: 617UNKN112: 618UNKN118: 619UNKN119: 620UNKN12: 621UNKN121: 622UNKN122: 623UNKN123: 624UNKN124: 625UNKN125: 626UNKN126: 627UNKN13: 628UNKN14: 629UNKN2: 630UNKN3: 631UNKN30: 632UNKN32: 633UNKN48: 634UNKN5: 635UNKN6: 636UNKN7: 637UNKN8: 638UNKN84: 639UNKN9: 640UNKN90: 641UNKN96: 642UNKN97: 643waitin 644mov $01, $data 645jumptbl: 646.jumptbl 647[0100beef] 648