drm/nouveau/gr/gm107: support tpc "strand" ctxsw in gpccs ucode
authorBen Skeggs <bskeggs@redhat.com>
Mon, 9 Mar 2015 23:20:07 +0000 (09:20 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Tue, 14 Apr 2015 07:00:53 +0000 (17:00 +1000)
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpc.fuc
drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpcgf100.fuc3.h
drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpcgf117.fuc3.h
drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpcgk104.fuc3.h
drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpcgk110.fuc3.h
drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpcgk208.fuc5.h
drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpcgm107.fuc5
drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpcgm107.fuc5.h
drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/macros.fuc
drivers/gpu/drm/nouveau/nvkm/engine/gr/gm107.c

index fd45efa..194afe9 100644 (file)
@@ -70,6 +70,43 @@ error:
        pop $r14
        ret
 
+#if CHIPSET >= GM107
+tpc_strand_wait:
+       push $r9
+       trace_set(T_STRTPC)
+       tpc_strand_busy:
+               nv_iord($r9, NV_PGRAPH_GPCX_GPCCS_TPC_STATUS, 0)
+               bra b32 $r9 0x0 ne #tpc_strand_busy
+       trace_clr(T_STRTPC)
+       pop $r9
+       ret
+
+#define tpc_strand_wait() call(tpc_strand_wait)
+#define tpc_strand_enable()                                                   /*
+*/     mov $r15 NV_PGRAPH_GPC0_TPCX_STRAND_CMD_ENABLE                        /*
+*/     gpc_wr32(NV_PGRAPH_GPC0_TPCX_STRAND_CMD, $r15)                        /*
+*/     tpc_strand_wait()
+#define tpc_strand_disable()                                                  /*
+*/     mov $r15 NV_PGRAPH_GPC0_TPCX_STRAND_CMD_DISABLE                       /*
+*/     gpc_wr32(NV_PGRAPH_GPC0_TPCX_STRAND_CMD, $r15)                        /*
+*/     tpc_strand_wait()
+#define tpc_strand_seek(p)                                                    /*
+*/     mov $r15 NV_PGRAPH_GPC0_TPCX_STRAND_INDEX_ALL                         /*
+*/     gpc_wr32(NV_PGRAPH_GPC0_TPCX_STRAND_INDEX, $r15)                      /*
+*/     mov $r15 p                                                            /*
+*/     gpc_wr32(NV_PGRAPH_GPC0_TPCX_STRAND_SELECT, $r15)                     /*
+*/     mov $r15 NV_PGRAPH_GPC0_TPCX_STRAND_CMD_SEEK                          /*
+*/     tpc_strand_wait()
+#define tpc_strand_info(m)                                                    /*
+*/     gpc_wr32(NV_PGRAPH_GPC0_TPCX_STRAND_CMD, $r15)                        /*
+*/     mov $r15 m                                                            /*
+*/     gpc_wr32(NV_PGRAPH_GPC0_TPCX_STRAND_DATA, $r15)                       /*
+*/     mov $r15 NV_PGRAPH_GPC0_TPCX_STRAND_CMD_GET_INFO                      /*
+*/     gpc_wr32(NV_PGRAPH_GPC0_TPCX_STRAND_CMD, $r15)                        /*
+*/     tpc_strand_wait()
+#endif
+
+
 // GPC fuc initialisation, executed by triggering ucode start, will
 // fall through to main loop after completion.
 //
@@ -196,8 +233,56 @@ init:
        // calculate size of strand context data
        mov b32 $r15 $r2
        call(strand_ctx_init)
+       add b32 $r2 $r15
        add b32 $r3 $r15
 
+#if CHIPSET >= GM107
+       // calculate size of tpc strand context data
+       mov $r15 NV_PGRAPH_GPC0_TPCX_STRAND_INDEX_ALL
+       gpc_wr32(NV_PGRAPH_GPC0_TPCX_STRAND_INDEX, $r15)
+       tpc_strand_enable();
+       tpc_strand_seek(0);
+       tpc_strand_info(-1);
+
+       ld b32 $r4 D[$r0 + #tpc_count]
+       mov $r5 NV_PGRAPH_GPC0_TPC0
+       ld b32 $r6 D[$r0 + #gpc_id]
+       shl b32 $r6 15
+       add b32 $r5 $r6
+       tpc_strand_init_tpc_loop:
+               add b32 $r14 $r5 NV_TPC_STRAND_CNT
+               call(nv_rd32)
+               mov b32 $r6 $r15
+               clear b32 $r7
+               tpc_strand_init_idx_loop:
+                       add b32 $r14 $r5 NV_TPC_STRAND_INDEX
+                       mov b32 $r15 $r7
+                       call(nv_wr32)
+                       add b32 $r14 $r5 NV_TPC_STRAND_SAVE_SWBASE
+                       shr b32 $r15 $r2 8
+                       call(nv_wr32)
+                       add b32 $r14 $r5 NV_TPC_STRAND_LOAD_SWBASE
+                       shr b32 $r15 $r2 8
+                       call(nv_wr32)
+                       add b32 $r14 $r5 NV_TPC_STRAND_WORDS
+                       call(nv_rd32)
+                       shr b32 $r15 6
+                       add b32 $r15 1
+                       shl b32 $r15 8
+                       add b32 $r2 $r15
+                       add b32 $r3 $r15
+                       add b32 $r7 1
+                       sub b32 $r6 1
+                       bra nz #tpc_strand_init_idx_loop
+               add b32 $r5 NV_PGRAPH_GPC0_TPC0__SIZE
+               sub b32 $r4 1
+               bra nz #tpc_strand_init_tpc_loop
+
+       mov $r15 NV_PGRAPH_GPC0_TPCX_STRAND_INDEX_ALL
+       gpc_wr32(NV_PGRAPH_GPC0_TPCX_STRAND_INDEX, $r15)
+       tpc_strand_disable();
+#endif
+
        // save context size, and tell HUB we're done
        nv_iowr(NV_PGRAPH_GPCX_GPCCS_CC_SCRATCH_VAL(1), 0, $r3)
        clear b32 $r2
@@ -316,6 +401,9 @@ ctx_redswitch:
 ctx_xfer:
        // set context base address
        nv_iowr(NV_PGRAPH_GPCX_GPCCS_MEM_BASE, 0, $r15)
+#if CHIPSET >= GM107
+       gpc_wr32(NV_PGRAPH_GPC0_TPCX_STRAND_MEM_BASE, $r15)
+#endif
        bra not $p1 #ctx_xfer_not_load
                call(ctx_redswitch)
        ctx_xfer_not_load:
@@ -328,6 +416,14 @@ ctx_xfer:
        add b32 $r2 NV_PGRAPH_GPCX_GPCCS_STRAND_CMD_SAVE
        nv_iowr(NV_PGRAPH_GPCX_GPCCS_STRAND_CMD, 0x3f, $r2)
 
+#if CHIPSET >= GM107
+       tpc_strand_enable();
+       tpc_strand_seek(0);
+       xbit $r15 $flags $p1    // SAVE/LOAD
+       add b32 $r15 NV_PGRAPH_GPC0_TPCX_STRAND_CMD_SAVE
+       gpc_wr32(NV_PGRAPH_GPC0_TPCX_STRAND_CMD, $r15)
+#endif
+
        // mmio context
        xbit $r10 $flags $p1    // direction
        or $r10 2               // first
@@ -372,6 +468,9 @@ ctx_xfer:
 
        // wait for strands to finish
        call(strand_wait)
+#if CHIPSET >= GM107
+       tpc_strand_wait()
+#endif
 
        // if load, or a save without a load following, do some
        // unknown stuff that's done after finishing a block of
@@ -380,6 +479,9 @@ ctx_xfer:
        bra not $p2 #ctx_xfer_done
        ctx_xfer_post:
                call(strand_post)
+#if CHIPSET >= GM107
+               tpc_strand_disable()
+#endif
 
        // mark completion in HUB's barrier
        ctx_xfer_done:
index 4c0beec..231f696 100644 (file)
@@ -310,7 +310,7 @@ uint32_t gf100_grgpc_code[] = {
        0x03f01200,
        0x0002d000,
        0x17f104bd,
-       0x10fe04f5,
+       0x10fe04f8,
        0x0007f100,
        0x0003f007,
        0xbd0000d0,
@@ -362,124 +362,124 @@ uint32_t gf100_grgpc_code[] = {
        0x34b60824,
        0x022fb908,
        0x02d321f5,
-       0xf1003fbb,
-       0xf0010007,
-       0x03d00203,
-       0xbd04bd00,
-       0x1f29f024,
-       0x080007f1,
-       0xd00203f0,
-       0x04bd0002,
-/* 0x04b8: main */
-       0xf40031f4,
-       0xd7f00028,
-       0x3921f41c,
-       0xb0f401f4,
-       0x18f404e4,
-       0x0181fe1e,
-       0xbd0627f0,
-       0x0412fd20,
-       0xfd01e4b6,
-       0x18fe051e,
-       0xad21f500,
-       0xd30ef405,
-/* 0x04e8: main_not_ctx_xfer */
-       0xf010ef94,
-       0x21f501f5,
-       0x0ef4037e,
-/* 0x04f5: ih */
-       0xfe80f9c6,
-       0x80f90188,
-       0xa0f990f9,
-       0xd0f9b0f9,
-       0xf0f9e0f9,
-       0xa7f104bd,
-       0xa3f00200,
-       0x00aacf00,
-       0xf404abc4,
-       0xd7f02c0b,
-       0x00e7f11c,
-       0x00e3f01a,
-       0xf100eecf,
-       0xf01900f7,
-       0xffcf00f3,
-       0x0421f400,
-       0xf101e7f0,
-       0xf01d0007,
-       0x0ed00003,
-/* 0x0543: ih_no_fifo */
-       0xf104bd00,
-       0xf0010007,
-       0x0ad00003,
-       0xfc04bd00,
-       0xfce0fcf0,
-       0xfcb0fcd0,
-       0xfc90fca0,
-       0x0088fe80,
-       0x32f480fc,
-/* 0x0567: hub_barrier_done */
-       0xf001f800,
-       0x0e9801f7,
-       0x04febb04,
-       0xf102ffb9,
-       0xf09418e7,
-       0x21f440e3,
-/* 0x057f: ctx_redswitch */
-       0xf000f89d,
-       0x07f120f7,
+       0xbb002fbb,
+       0x07f1003f,
+       0x03f00100,
+       0x0003d002,
+       0x24bd04bd,
+       0xf11f29f0,
+       0xf0080007,
+       0x02d00203,
+/* 0x04bb: main */
+       0xf404bd00,
+       0x28f40031,
+       0x1cd7f000,
+       0xf43921f4,
+       0xe4b0f401,
+       0x1e18f404,
+       0xf00181fe,
+       0x20bd0627,
+       0xb60412fd,
+       0x1efd01e4,
+       0x0018fe05,
+       0x05b021f5,
+/* 0x04eb: main_not_ctx_xfer */
+       0x94d30ef4,
+       0xf5f010ef,
+       0x7e21f501,
+       0xc60ef403,
+/* 0x04f8: ih */
+       0x88fe80f9,
+       0xf980f901,
+       0xf9a0f990,
+       0xf9d0f9b0,
+       0xbdf0f9e0,
+       0x00a7f104,
+       0x00a3f002,
+       0xc400aacf,
+       0x0bf404ab,
+       0x1cd7f02c,
+       0x1a00e7f1,
+       0xcf00e3f0,
+       0xf7f100ee,
+       0xf3f01900,
+       0x00ffcf00,
+       0xf00421f4,
+       0x07f101e7,
+       0x03f01d00,
+       0x000ed000,
+/* 0x0546: ih_no_fifo */
+       0x07f104bd,
+       0x03f00100,
+       0x000ad000,
+       0xf0fc04bd,
+       0xd0fce0fc,
+       0xa0fcb0fc,
+       0x80fc90fc,
+       0xfc0088fe,
+       0x0032f480,
+/* 0x056a: hub_barrier_done */
+       0xf7f001f8,
+       0x040e9801,
+       0xb904febb,
+       0xe7f102ff,
+       0xe3f09418,
+       0x9d21f440,
+/* 0x0582: ctx_redswitch */
+       0xf7f000f8,
+       0x0007f120,
+       0x0103f085,
+       0xbd000fd0,
+       0x08e7f004,
+/* 0x0594: ctx_redswitch_delay */
+       0xf401e2b6,
+       0xf5f1fd1b,
+       0xf5f10800,
+       0x07f10200,
        0x03f08500,
        0x000fd001,
-       0xe7f004bd,
-/* 0x0591: ctx_redswitch_delay */
-       0x01e2b608,
-       0xf1fd1bf4,
-       0xf10800f5,
-       0xf10200f5,
-       0xf0850007,
-       0x0fd00103,
-       0xf804bd00,
-/* 0x05ad: ctx_xfer */
-       0x0007f100,
-       0x0203f081,
-       0xbd000fd0,
-       0x0711f404,
-       0x057f21f5,
-/* 0x05c0: ctx_xfer_not_load */
-       0x026a21f5,
-       0x07f124bd,
-       0x03f047fc,
-       0x0002d002,
-       0x2cf004bd,
-       0x0320b601,
-       0x4afc07f1,
+       0x00f804bd,
+/* 0x05b0: ctx_xfer */
+       0x810007f1,
        0xd00203f0,
-       0x04bd0002,
-       0xf001acf0,
-       0xb7f102a5,
-       0xb3f00000,
-       0x040c9850,
-       0xbb0fc4b6,
-       0x0c9800bc,
-       0x010d9800,
-       0xf500e7f0,
-       0xf0016f21,
+       0x04bd000f,
+       0xf50711f4,
+/* 0x05c3: ctx_xfer_not_load */
+       0xf5058221,
+       0xbd026a21,
+       0xfc07f124,
+       0x0203f047,
+       0xbd0002d0,
+       0x012cf004,
+       0xf10320b6,
+       0xf04afc07,
+       0x02d00203,
+       0xf004bd00,
        0xa5f001ac,
-       0x00b7f104,
-       0x50b3f040,
+       0x00b7f102,
+       0x50b3f000,
        0xb6040c98,
        0xbcbb0fc4,
-       0x010c9800,
-       0x98020d98,
-       0xe7f1060f,
-       0x21f50800,
-       0x21f5016f,
-       0x01f4025e,
-       0x0712f406,
-/* 0x0638: ctx_xfer_post */
-       0x027f21f5,
-/* 0x063c: ctx_xfer_done */
-       0x056721f5,
-       0x000000f8,
+       0x000c9800,
+       0xf0010d98,
+       0x21f500e7,
+       0xacf0016f,
+       0x04a5f001,
+       0x4000b7f1,
+       0x9850b3f0,
+       0xc4b6040c,
+       0x00bcbb0f,
+       0x98010c98,
+       0x0f98020d,
+       0x00e7f106,
+       0x6f21f508,
+       0x5e21f501,
+       0x0601f402,
+/* 0x063b: ctx_xfer_post */
+       0xf50712f4,
+/* 0x063f: ctx_xfer_done */
+       0xf5027f21,
+       0xf8056a21,
        0x00000000,
        0x00000000,
        0x00000000,
index 3b4b849..64d07df 100644 (file)
@@ -314,7 +314,7 @@ uint32_t gf117_grgpc_code[] = {
        0x03f01200,
        0x0002d000,
        0x17f104bd,
-       0x10fe053f,
+       0x10fe0542,
        0x0007f100,
        0x0003f007,
        0xbd0000d0,
@@ -387,134 +387,134 @@ uint32_t gf117_grgpc_code[] = {
        0x0824b601,
        0xb90834b6,
        0x21f5022f,
-       0x3fbb02d3,
-       0x0007f100,
-       0x0203f001,
-       0xbd0003d0,
-       0xf024bd04,
-       0x07f11f29,
-       0x03f00800,
-       0x0002d002,
-/* 0x0502: main */
-       0x31f404bd,
-       0x0028f400,
-       0xf424d7f0,
-       0x01f43921,
-       0x04e4b0f4,
-       0xfe1e18f4,
-       0x27f00181,
-       0xfd20bd06,
-       0xe4b60412,
-       0x051efd01,
-       0xf50018fe,
-       0xf405f721,
-/* 0x0532: main_not_ctx_xfer */
-       0xef94d30e,
-       0x01f5f010,
-       0x037e21f5,
-/* 0x053f: ih */
-       0xf9c60ef4,
-       0x0188fe80,
-       0x90f980f9,
-       0xb0f9a0f9,
-       0xe0f9d0f9,
-       0x04bdf0f9,
-       0x0200a7f1,
-       0xcf00a3f0,
-       0xabc400aa,
-       0x2c0bf404,
-       0xf124d7f0,
-       0xf01a00e7,
-       0xeecf00e3,
-       0x00f7f100,
-       0x00f3f019,
-       0xf400ffcf,
-       0xe7f00421,
-       0x0007f101,
-       0x0003f01d,
-       0xbd000ed0,
-/* 0x058d: ih_no_fifo */
-       0x0007f104,
-       0x0003f001,
-       0xbd000ad0,
-       0xfcf0fc04,
-       0xfcd0fce0,
-       0xfca0fcb0,
-       0xfe80fc90,
-       0x80fc0088,
-       0xf80032f4,
-/* 0x05b1: hub_barrier_done */
-       0x01f7f001,
-       0xbb040e98,
-       0xffb904fe,
-       0x18e7f102,
-       0x40e3f094,
-       0xf89d21f4,
-/* 0x05c9: ctx_redswitch */
-       0x20f7f000,
+       0x2fbb02d3,
+       0x003fbb00,
+       0x010007f1,
+       0xd00203f0,
+       0x04bd0003,
+       0x29f024bd,
+       0x0007f11f,
+       0x0203f008,
+       0xbd0002d0,
+/* 0x0505: main */
+       0x0031f404,
+       0xf00028f4,
+       0x21f424d7,
+       0xf401f439,
+       0xf404e4b0,
+       0x81fe1e18,
+       0x0627f001,
+       0x12fd20bd,
+       0x01e4b604,
+       0xfe051efd,
+       0x21f50018,
+       0x0ef405fa,
+/* 0x0535: main_not_ctx_xfer */
+       0x10ef94d3,
+       0xf501f5f0,
+       0xf4037e21,
+/* 0x0542: ih */
+       0x80f9c60e,
+       0xf90188fe,
+       0xf990f980,
+       0xf9b0f9a0,
+       0xf9e0f9d0,
+       0xf104bdf0,
+       0xf00200a7,
+       0xaacf00a3,
+       0x04abc400,
+       0xf02c0bf4,
+       0xe7f124d7,
+       0xe3f01a00,
+       0x00eecf00,
+       0x1900f7f1,
+       0xcf00f3f0,
+       0x21f400ff,
+       0x01e7f004,
+       0x1d0007f1,
+       0xd00003f0,
+       0x04bd000e,
+/* 0x0590: ih_no_fifo */
+       0x010007f1,
+       0xd00003f0,
+       0x04bd000a,
+       0xe0fcf0fc,
+       0xb0fcd0fc,
+       0x90fca0fc,
+       0x88fe80fc,
+       0xf480fc00,
+       0x01f80032,
+/* 0x05b4: hub_barrier_done */
+       0x9801f7f0,
+       0xfebb040e,
+       0x02ffb904,
+       0x9418e7f1,
+       0xf440e3f0,
+       0x00f89d21,
+/* 0x05cc: ctx_redswitch */
+       0xf120f7f0,
+       0xf0850007,
+       0x0fd00103,
+       0xf004bd00,
+/* 0x05de: ctx_redswitch_delay */
+       0xe2b608e7,
+       0xfd1bf401,
+       0x0800f5f1,
+       0x0200f5f1,
        0x850007f1,
        0xd00103f0,
        0x04bd000f,
-/* 0x05db: ctx_redswitch_delay */
-       0xb608e7f0,
-       0x1bf401e2,
-       0x00f5f1fd,
-       0x00f5f108,
-       0x0007f102,
-       0x0103f085,
-       0xbd000fd0,
-/* 0x05f7: ctx_xfer */
-       0xf100f804,
-       0xf0810007,
-       0x0fd00203,
-       0xf404bd00,
-       0x21f50711,
-/* 0x060a: ctx_xfer_not_load */
-       0x21f505c9,
-       0x24bd026a,
-       0x47fc07f1,
-       0xd00203f0,
-       0x04bd0002,
-       0xb6012cf0,
-       0x07f10320,
-       0x03f04afc,
-       0x0002d002,
-       0xacf004bd,
-       0x02a5f001,
-       0x0000b7f1,
-       0x9850b3f0,
-       0xc4b6040c,
-       0x00bcbb0f,
-       0x98000c98,
-       0xe7f0010d,
-       0x6f21f500,
-       0x01acf001,
-       0x4000b7f1,
-       0x9850b3f0,
-       0xc4b6040c,
-       0x00bcbb0f,
-       0x98010c98,
-       0x0f98020d,
-       0x00e7f106,
-       0x6f21f508,
-       0x01acf001,
-       0xf104a5f0,
-       0xf03000b7,
+/* 0x05fa: ctx_xfer */
+       0x07f100f8,
+       0x03f08100,
+       0x000fd002,
+       0x11f404bd,
+       0xcc21f507,
+/* 0x060d: ctx_xfer_not_load */
+       0x6a21f505,
+       0xf124bd02,
+       0xf047fc07,
+       0x02d00203,
+       0xf004bd00,
+       0x20b6012c,
+       0xfc07f103,
+       0x0203f04a,
+       0xbd0002d0,
+       0x01acf004,
+       0xf102a5f0,
+       0xf00000b7,
        0x0c9850b3,
        0x0fc4b604,
        0x9800bcbb,
-       0x0d98020c,
-       0x080f9803,
-       0x0200e7f1,
+       0x0d98000c,
+       0x00e7f001,
        0x016f21f5,
-       0x025e21f5,
-       0xf40601f4,
-/* 0x06a6: ctx_xfer_post */
-       0x21f50712,
-/* 0x06aa: ctx_xfer_done */
-       0x21f5027f,
-       0x00f805b1,
-       0x00000000,
+       0xf101acf0,
+       0xf04000b7,
+       0x0c9850b3,
+       0x0fc4b604,
+       0x9800bcbb,
+       0x0d98010c,
+       0x060f9802,
+       0x0800e7f1,
+       0x016f21f5,
+       0xf001acf0,
+       0xb7f104a5,
+       0xb3f03000,
+       0x040c9850,
+       0xbb0fc4b6,
+       0x0c9800bc,
+       0x030d9802,
+       0xf1080f98,
+       0xf50200e7,
+       0xf5016f21,
+       0xf4025e21,
+       0x12f40601,
+/* 0x06a9: ctx_xfer_post */
+       0x7f21f507,
+/* 0x06ad: ctx_xfer_done */
+       0xb421f502,
+       0x0000f805,
        0x00000000,
        0x00000000,
        0x00000000,
index e28b0fd..2f59643 100644 (file)
@@ -314,7 +314,7 @@ uint32_t gk104_grgpc_code[] = {
        0x03f01200,
        0x0002d000,
        0x17f104bd,
-       0x10fe053f,
+       0x10fe0542,
        0x0007f100,
        0x0003f007,
        0xbd0000d0,
@@ -387,134 +387,134 @@ uint32_t gk104_grgpc_code[] = {
        0x0824b601,
        0xb90834b6,
        0x21f5022f,
-       0x3fbb02d3,
-       0x0007f100,
-       0x0203f001,
-       0xbd0003d0,
-       0xf024bd04,
-       0x07f11f29,
-       0x03f00800,
-       0x0002d002,
-/* 0x0502: main */
-       0x31f404bd,
-       0x0028f400,
-       0xf424d7f0,
-       0x01f43921,
-       0x04e4b0f4,
-       0xfe1e18f4,
-       0x27f00181,
-       0xfd20bd06,
-       0xe4b60412,
-       0x051efd01,
-       0xf50018fe,
-       0xf405f721,
-/* 0x0532: main_not_ctx_xfer */
-       0xef94d30e,
-       0x01f5f010,
-       0x037e21f5,
-/* 0x053f: ih */
-       0xf9c60ef4,
-       0x0188fe80,
-       0x90f980f9,
-       0xb0f9a0f9,
-       0xe0f9d0f9,
-       0x04bdf0f9,
-       0x0200a7f1,
-       0xcf00a3f0,
-       0xabc400aa,
-       0x2c0bf404,
-       0xf124d7f0,
-       0xf01a00e7,
-       0xeecf00e3,
-       0x00f7f100,
-       0x00f3f019,
-       0xf400ffcf,
-       0xe7f00421,
-       0x0007f101,
-       0x0003f01d,
-       0xbd000ed0,
-/* 0x058d: ih_no_fifo */
-       0x0007f104,
-       0x0003f001,
-       0xbd000ad0,
-       0xfcf0fc04,
-       0xfcd0fce0,
-       0xfca0fcb0,
-       0xfe80fc90,
-       0x80fc0088,
-       0xf80032f4,
-/* 0x05b1: hub_barrier_done */
-       0x01f7f001,
-       0xbb040e98,
-       0xffb904fe,
-       0x18e7f102,
-       0x40e3f094,
-       0xf89d21f4,
-/* 0x05c9: ctx_redswitch */
-       0x20f7f000,
+       0x2fbb02d3,
+       0x003fbb00,
+       0x010007f1,
+       0xd00203f0,
+       0x04bd0003,
+       0x29f024bd,
+       0x0007f11f,
+       0x0203f008,
+       0xbd0002d0,
+/* 0x0505: main */
+       0x0031f404,
+       0xf00028f4,
+       0x21f424d7,
+       0xf401f439,
+       0xf404e4b0,
+       0x81fe1e18,
+       0x0627f001,
+       0x12fd20bd,
+       0x01e4b604,
+       0xfe051efd,
+       0x21f50018,
+       0x0ef405fa,
+/* 0x0535: main_not_ctx_xfer */
+       0x10ef94d3,
+       0xf501f5f0,
+       0xf4037e21,
+/* 0x0542: ih */
+       0x80f9c60e,
+       0xf90188fe,
+       0xf990f980,
+       0xf9b0f9a0,
+       0xf9e0f9d0,
+       0xf104bdf0,
+       0xf00200a7,
+       0xaacf00a3,
+       0x04abc400,
+       0xf02c0bf4,
+       0xe7f124d7,
+       0xe3f01a00,
+       0x00eecf00,
+       0x1900f7f1,
+       0xcf00f3f0,
+       0x21f400ff,
+       0x01e7f004,
+       0x1d0007f1,
+       0xd00003f0,
+       0x04bd000e,
+/* 0x0590: ih_no_fifo */
+       0x010007f1,
+       0xd00003f0,
+       0x04bd000a,
+       0xe0fcf0fc,
+       0xb0fcd0fc,
+       0x90fca0fc,
+       0x88fe80fc,
+       0xf480fc00,
+       0x01f80032,
+/* 0x05b4: hub_barrier_done */
+       0x9801f7f0,
+       0xfebb040e,
+       0x02ffb904,
+       0x9418e7f1,
+       0xf440e3f0,
+       0x00f89d21,
+/* 0x05cc: ctx_redswitch */
+       0xf120f7f0,
+       0xf0850007,
+       0x0fd00103,
+       0xf004bd00,
+/* 0x05de: ctx_redswitch_delay */
+       0xe2b608e7,
+       0xfd1bf401,
+       0x0800f5f1,
+       0x0200f5f1,
        0x850007f1,
        0xd00103f0,
        0x04bd000f,
-/* 0x05db: ctx_redswitch_delay */
-       0xb608e7f0,
-       0x1bf401e2,
-       0x00f5f1fd,
-       0x00f5f108,
-       0x0007f102,
-       0x0103f085,
-       0xbd000fd0,
-/* 0x05f7: ctx_xfer */
-       0xf100f804,
-       0xf0810007,
-       0x0fd00203,
-       0xf404bd00,
-       0x21f50711,
-/* 0x060a: ctx_xfer_not_load */
-       0x21f505c9,
-       0x24bd026a,
-       0x47fc07f1,
-       0xd00203f0,
-       0x04bd0002,
-       0xb6012cf0,
-       0x07f10320,
-       0x03f04afc,
-       0x0002d002,
-       0xacf004bd,
-       0x02a5f001,
-       0x0000b7f1,
-       0x9850b3f0,
-       0xc4b6040c,
-       0x00bcbb0f,
-       0x98000c98,
-       0xe7f0010d,
-       0x6f21f500,
-       0x01acf001,
-       0x4000b7f1,
-       0x9850b3f0,
-       0xc4b6040c,
-       0x00bcbb0f,
-       0x98010c98,
-       0x0f98020d,
-       0x00e7f106,
-       0x6f21f508,
-       0x01acf001,
-       0xf104a5f0,
-       0xf03000b7,
+/* 0x05fa: ctx_xfer */
+       0x07f100f8,
+       0x03f08100,
+       0x000fd002,
+       0x11f404bd,
+       0xcc21f507,
+/* 0x060d: ctx_xfer_not_load */
+       0x6a21f505,
+       0xf124bd02,
+       0xf047fc07,
+       0x02d00203,
+       0xf004bd00,
+       0x20b6012c,
+       0xfc07f103,
+       0x0203f04a,
+       0xbd0002d0,
+       0x01acf004,
+       0xf102a5f0,
+       0xf00000b7,
        0x0c9850b3,
        0x0fc4b604,
        0x9800bcbb,
-       0x0d98020c,
-       0x080f9803,
-       0x0200e7f1,
+       0x0d98000c,
+       0x00e7f001,
        0x016f21f5,
-       0x025e21f5,
-       0xf40601f4,
-/* 0x06a6: ctx_xfer_post */
-       0x21f50712,
-/* 0x06aa: ctx_xfer_done */
-       0x21f5027f,
-       0x00f805b1,
-       0x00000000,
+       0xf101acf0,
+       0xf04000b7,
+       0x0c9850b3,
+       0x0fc4b604,
+       0x9800bcbb,
+       0x0d98010c,
+       0x060f9802,
+       0x0800e7f1,
+       0x016f21f5,
+       0xf001acf0,
+       0xb7f104a5,
+       0xb3f03000,
+       0x040c9850,
+       0xbb0fc4b6,
+       0x0c9800bc,
+       0x030d9802,
+       0xf1080f98,
+       0xf50200e7,
+       0xf5016f21,
+       0xf4025e21,
+       0x12f40601,
+/* 0x06a9: ctx_xfer_post */
+       0x7f21f507,
+/* 0x06ad: ctx_xfer_done */
+       0xb421f502,
+       0x0000f805,
        0x00000000,
        0x00000000,
        0x00000000,
index 8aae7e8..ee8e54d 100644 (file)
@@ -314,7 +314,7 @@ uint32_t gk110_grgpc_code[] = {
        0x03f01200,
        0x0002d000,
        0x17f104bd,
-       0x10fe053f,
+       0x10fe0542,
        0x0007f100,
        0x0003f007,
        0xbd0000d0,
@@ -387,134 +387,134 @@ uint32_t gk110_grgpc_code[] = {
        0x0824b601,
        0xb90834b6,
        0x21f5022f,
-       0x3fbb02d3,
-       0x0007f100,
-       0x0203f001,
-       0xbd0003d0,
-       0xf024bd04,
-       0x07f11f29,
-       0x03f03000,
-       0x0002d002,
-/* 0x0502: main */
-       0x31f404bd,
-       0x0028f400,
-       0xf424d7f0,
-       0x01f43921,
-       0x04e4b0f4,
-       0xfe1e18f4,
-       0x27f00181,
-       0xfd20bd06,
-       0xe4b60412,
-       0x051efd01,
-       0xf50018fe,
-       0xf405f721,
-/* 0x0532: main_not_ctx_xfer */
-       0xef94d30e,
-       0x01f5f010,
-       0x037e21f5,
-/* 0x053f: ih */
-       0xf9c60ef4,
-       0x0188fe80,
-       0x90f980f9,
-       0xb0f9a0f9,
-       0xe0f9d0f9,
-       0x04bdf0f9,
-       0x0200a7f1,
-       0xcf00a3f0,
-       0xabc400aa,
-       0x2c0bf404,
-       0xf124d7f0,
-       0xf01a00e7,
-       0xeecf00e3,
-       0x00f7f100,
-       0x00f3f019,
-       0xf400ffcf,
-       0xe7f00421,
-       0x0007f101,
-       0x0003f01d,
-       0xbd000ed0,
-/* 0x058d: ih_no_fifo */
-       0x0007f104,
-       0x0003f001,
-       0xbd000ad0,
-       0xfcf0fc04,
-       0xfcd0fce0,
-       0xfca0fcb0,
-       0xfe80fc90,
-       0x80fc0088,
-       0xf80032f4,
-/* 0x05b1: hub_barrier_done */
-       0x01f7f001,
-       0xbb040e98,
-       0xffb904fe,
-       0x18e7f102,
-       0x40e3f094,
-       0xf89d21f4,
-/* 0x05c9: ctx_redswitch */
-       0x20f7f000,
+       0x2fbb02d3,
+       0x003fbb00,
+       0x010007f1,
+       0xd00203f0,
+       0x04bd0003,
+       0x29f024bd,
+       0x0007f11f,
+       0x0203f030,
+       0xbd0002d0,
+/* 0x0505: main */
+       0x0031f404,
+       0xf00028f4,
+       0x21f424d7,
+       0xf401f439,
+       0xf404e4b0,
+       0x81fe1e18,
+       0x0627f001,
+       0x12fd20bd,
+       0x01e4b604,
+       0xfe051efd,
+       0x21f50018,
+       0x0ef405fa,
+/* 0x0535: main_not_ctx_xfer */
+       0x10ef94d3,
+       0xf501f5f0,
+       0xf4037e21,
+/* 0x0542: ih */
+       0x80f9c60e,
+       0xf90188fe,
+       0xf990f980,
+       0xf9b0f9a0,
+       0xf9e0f9d0,
+       0xf104bdf0,
+       0xf00200a7,
+       0xaacf00a3,
+       0x04abc400,
+       0xf02c0bf4,
+       0xe7f124d7,
+       0xe3f01a00,
+       0x00eecf00,
+       0x1900f7f1,
+       0xcf00f3f0,
+       0x21f400ff,
+       0x01e7f004,
+       0x1d0007f1,
+       0xd00003f0,
+       0x04bd000e,
+/* 0x0590: ih_no_fifo */
+       0x010007f1,
+       0xd00003f0,
+       0x04bd000a,
+       0xe0fcf0fc,
+       0xb0fcd0fc,
+       0x90fca0fc,
+       0x88fe80fc,
+       0xf480fc00,
+       0x01f80032,
+/* 0x05b4: hub_barrier_done */
+       0x9801f7f0,
+       0xfebb040e,
+       0x02ffb904,
+       0x9418e7f1,
+       0xf440e3f0,
+       0x00f89d21,
+/* 0x05cc: ctx_redswitch */
+       0xf120f7f0,
+       0xf0850007,
+       0x0fd00103,
+       0xf004bd00,
+/* 0x05de: ctx_redswitch_delay */
+       0xe2b608e7,
+       0xfd1bf401,
+       0x0800f5f1,
+       0x0200f5f1,
        0x850007f1,
        0xd00103f0,
        0x04bd000f,
-/* 0x05db: ctx_redswitch_delay */
-       0xb608e7f0,
-       0x1bf401e2,
-       0x00f5f1fd,
-       0x00f5f108,
-       0x0007f102,
-       0x0103f085,
-       0xbd000fd0,
-/* 0x05f7: ctx_xfer */
-       0xf100f804,
-       0xf0810007,
-       0x0fd00203,
-       0xf404bd00,
-       0x21f50711,
-/* 0x060a: ctx_xfer_not_load */
-       0x21f505c9,
-       0x24bd026a,
-       0x47fc07f1,
-       0xd00203f0,
-       0x04bd0002,
-       0xb6012cf0,
-       0x07f10320,
-       0x03f04afc,
-       0x0002d002,
-       0xacf004bd,
-       0x02a5f001,
-       0x0000b7f1,
-       0x9850b3f0,
-       0xc4b6040c,
-       0x00bcbb0f,
-       0x98000c98,
-       0xe7f0010d,
-       0x6f21f500,
-       0x01acf001,
-       0x4000b7f1,
-       0x9850b3f0,
-       0xc4b6040c,
-       0x00bcbb0f,
-       0x98010c98,
-       0x0f98020d,
-       0x00e7f106,
-       0x6f21f508,
-       0x01acf001,
-       0xf104a5f0,
-       0xf03000b7,
+/* 0x05fa: ctx_xfer */
+       0x07f100f8,
+       0x03f08100,
+       0x000fd002,
+       0x11f404bd,
+       0xcc21f507,
+/* 0x060d: ctx_xfer_not_load */
+       0x6a21f505,
+       0xf124bd02,
+       0xf047fc07,
+       0x02d00203,
+       0xf004bd00,
+       0x20b6012c,
+       0xfc07f103,
+       0x0203f04a,
+       0xbd0002d0,
+       0x01acf004,
+       0xf102a5f0,
+       0xf00000b7,
        0x0c9850b3,
        0x0fc4b604,
        0x9800bcbb,
-       0x0d98020c,
-       0x080f9803,
-       0x0200e7f1,
+       0x0d98000c,
+       0x00e7f001,
        0x016f21f5,
-       0x025e21f5,
-       0xf40601f4,
-/* 0x06a6: ctx_xfer_post */
-       0x21f50712,
-/* 0x06aa: ctx_xfer_done */
-       0x21f5027f,
-       0x00f805b1,
-       0x00000000,
+       0xf101acf0,
+       0xf04000b7,
+       0x0c9850b3,
+       0x0fc4b604,
+       0x9800bcbb,
+       0x0d98010c,
+       0x060f9802,
+       0x0800e7f1,
+       0x016f21f5,
+       0xf001acf0,
+       0xb7f104a5,
+       0xb3f03000,
+       0x040c9850,
+       0xbb0fc4b6,
+       0x0c9800bc,
+       0x030d9802,
+       0xf1080f98,
+       0xf50200e7,
+       0xf5016f21,
+       0xf4025e21,
+       0x12f40601,
+/* 0x06a9: ctx_xfer_post */
+       0x7f21f507,
+/* 0x06ad: ctx_xfer_done */
+       0xb421f502,
+       0x0000f805,
        0x00000000,
        0x00000000,
        0x00000000,
index e40c6e4..fbcc342 100644 (file)
@@ -276,7 +276,7 @@ uint32_t gk208_grgpc_code[] = {
        0x02020014,
        0xf6120040,
        0x04bd0002,
-       0xfe047e41,
+       0xfe048141,
        0x00400010,
        0x0000f607,
        0x040204bd,
@@ -341,118 +341,118 @@ uint32_t gk208_grgpc_code[] = {
        0xb60824b6,
        0x2fb20834,
        0x0002687e,
-       0x80003fbb,
-       0xf6020100,
-       0x04bd0003,
-       0x29f024bd,
-       0x3000801f,
-       0x0002f602,
-/* 0x0442: main */
-       0x31f404bd,
-       0x0028f400,
-       0x377e240d,
-       0x01f40000,
-       0x04e4b0f4,
-       0xfe1d18f4,
-       0x06020181,
-       0x12fd20bd,
-       0x01e4b604,
-       0xfe051efd,
-       0x157e0018,
-       0x0ef40005,
-/* 0x0471: main_not_ctx_xfer */
-       0x10ef94d4,
-       0x7e01f5f0,
-       0xf40002f8,
-/* 0x047e: ih */
-       0x80f9c70e,
-       0xf90188fe,
-       0xf990f980,
-       0xf9b0f9a0,
-       0xf9e0f9d0,
-       0x4a04bdf0,
-       0xaacf0200,
-       0x04abc400,
-       0x0d1f0bf4,
-       0x1a004e24,
-       0x4f00eecf,
-       0xffcf1900,
-       0x00047e00,
-       0x40010e00,
-       0x0ef61d00,
-/* 0x04bb: ih_no_fifo */
-       0x4004bd00,
-       0x0af60100,
-       0xfc04bd00,
-       0xfce0fcf0,
-       0xfcb0fcd0,
-       0xfc90fca0,
-       0x0088fe80,
-       0x32f480fc,
-/* 0x04db: hub_barrier_done */
-       0x0f01f800,
-       0x040e9801,
-       0xb204febb,
-       0x94188eff,
-       0x008f7e40,
-/* 0x04ef: ctx_redswitch */
-       0x0f00f800,
-       0x85008020,
+       0xbb002fbb,
+       0x0080003f,
+       0x03f60201,
+       0xbd04bd00,
+       0x1f29f024,
+       0x02300080,
+       0xbd0002f6,
+/* 0x0445: main */
+       0x0031f404,
+       0x0d0028f4,
+       0x00377e24,
+       0xf401f400,
+       0xf404e4b0,
+       0x81fe1d18,
+       0xbd060201,
+       0x0412fd20,
+       0xfd01e4b6,
+       0x18fe051e,
+       0x05187e00,
+       0xd40ef400,
+/* 0x0474: main_not_ctx_xfer */
+       0xf010ef94,
+       0xf87e01f5,
+       0x0ef40002,
+/* 0x0481: ih */
+       0xfe80f9c7,
+       0x80f90188,
+       0xa0f990f9,
+       0xd0f9b0f9,
+       0xf0f9e0f9,
+       0x004a04bd,
+       0x00aacf02,
+       0xf404abc4,
+       0x240d1f0b,
+       0xcf1a004e,
+       0x004f00ee,
+       0x00ffcf19,
+       0x0000047e,
+       0x0040010e,
+       0x000ef61d,
+/* 0x04be: ih_no_fifo */
+       0x004004bd,
+       0x000af601,
+       0xf0fc04bd,
+       0xd0fce0fc,
+       0xa0fcb0fc,
+       0x80fc90fc,
+       0xfc0088fe,
+       0x0032f480,
+/* 0x04de: hub_barrier_done */
+       0x010f01f8,
+       0xbb040e98,
+       0xffb204fe,
+       0x4094188e,
+       0x00008f7e,
+/* 0x04f2: ctx_redswitch */
+       0x200f00f8,
+       0x01850080,
+       0xbd000ff6,
+/* 0x04ff: ctx_redswitch_delay */
+       0xb6080e04,
+       0x1bf401e2,
+       0x00f5f1fd,
+       0x00f5f108,
+       0x85008002,
        0x000ff601,
-       0x080e04bd,
-/* 0x04fc: ctx_redswitch_delay */
-       0xf401e2b6,
-       0xf5f1fd1b,
-       0xf5f10800,
-       0x00800200,
-       0x0ff60185,
-       0xf804bd00,
-/* 0x0515: ctx_xfer */
-       0x81008000,
-       0x000ff602,
-       0x11f404bd,
-       0x04ef7e07,
-/* 0x0525: ctx_xfer_not_load */
-       0x02167e00,
-       0x8024bd00,
-       0xf60247fc,
-       0x04bd0002,
-       0xb6012cf0,
-       0xfc800320,
-       0x02f6024a,
+       0x00f804bd,
+/* 0x0518: ctx_xfer */
+       0x02810080,
+       0xbd000ff6,
+       0x0711f404,
+       0x0004f27e,
+/* 0x0528: ctx_xfer_not_load */
+       0x0002167e,
+       0xfc8024bd,
+       0x02f60247,
        0xf004bd00,
-       0xa5f001ac,
-       0x00008b02,
-       0x040c9850,
-       0xbb0fc4b6,
-       0x0c9800bc,
-       0x010d9800,
-       0x3d7e000e,
-       0xacf00001,
-       0x40008b01,
-       0x040c9850,
-       0xbb0fc4b6,
-       0x0c9800bc,
-       0x020d9801,
-       0x4e060f98,
-       0x3d7e0800,
-       0xacf00001,
-       0x04a5f001,
-       0x5030008b,
+       0x20b6012c,
+       0x4afc8003,
+       0x0002f602,
+       0xacf004bd,
+       0x02a5f001,
+       0x5000008b,
        0xb6040c98,
        0xbcbb0fc4,
-       0x020c9800,
-       0x98030d98,
-       0x004e080f,
-       0x013d7e02,
-       0x020a7e00,
-       0x0601f400,
-/* 0x05af: ctx_xfer_post */
-       0x7e0712f4,
-/* 0x05b3: ctx_xfer_done */
-       0x7e000227,
-       0xf80004db,
-       0x00000000,
+       0x000c9800,
+       0x0e010d98,
+       0x013d7e00,
+       0x01acf000,
+       0x5040008b,
+       0xb6040c98,
+       0xbcbb0fc4,
+       0x010c9800,
+       0x98020d98,
+       0x004e060f,
+       0x013d7e08,
+       0x01acf000,
+       0x8b04a5f0,
+       0x98503000,
+       0xc4b6040c,
+       0x00bcbb0f,
+       0x98020c98,
+       0x0f98030d,
+       0x02004e08,
+       0x00013d7e,
+       0x00020a7e,
+       0xf40601f4,
+/* 0x05b2: ctx_xfer_post */
+       0x277e0712,
+/* 0x05b6: ctx_xfer_done */
+       0xde7e0002,
+       0x00f80004,
        0x00000000,
        0x00000000,
        0x00000000,
index e730603..47802c7 100644 (file)
@@ -24,7 +24,7 @@
 
 #define NV_PGRAPH_GPCX_UNK__SIZE                                     0x00000002
 
-#define CHIPSET GK208
+#define CHIPSET GM107
 #include "macros.fuc"
 
 .section #gm107_grgpc_data
index fbbaea8..51f5c3c 100644 (file)
@@ -41,7 +41,7 @@ uint32_t gm107_grgpc_data[] = {
 };
 
 uint32_t gm107_grgpc_code[] = {
-       0x03140ef5,
+       0x03410ef5,
 /* 0x0004: queue_put */
        0x9800d898,
        0x86f001d9,
@@ -268,190 +268,322 @@ uint32_t gm107_grgpc_code[] = {
        0x409c1c8e,
        0x00008f7e,
        0x00f8e0fc,
-/* 0x0314: init */
-       0x004104bd,
-       0x0011cf42,
-       0x010911e7,
-       0xfe0814b6,
-       0x02020014,
-       0xf6120040,
-       0x04bd0002,
-       0xfe047e41,
-       0x00400010,
-       0x0000f607,
-       0x040204bd,
-       0xf6040040,
-       0x04bd0002,
-       0x821031f4,
-       0xcf018200,
-       0x01030022,
-       0xbb1f24f0,
-       0x32b60432,
-       0x0502b501,
-       0x820603b5,
-       0xcf018600,
-       0x02b50022,
-       0x0f24b604,
-       0x01c90080,
+/* 0x0314: tpc_strand_wait */
+       0x94bd90f9,
+       0x800a99f0,
+       0xf6023700,
+       0x04bd0009,
+/* 0x0324: tpc_strand_busy */
+       0x033f0089,
+       0xb30099cf,
+       0xbdf90094,
+       0x0a99f094,
+       0x02170080,
+       0xbd0009f6,
+       0xf890fc04,
+/* 0x0341: init */
+       0x4104bd00,
+       0x11cf4200,
+       0x0911e700,
+       0x0814b601,
+       0x020014fe,
+       0x12004002,
+       0xbd0002f6,
+       0x05b04104,
+       0x400010fe,
+       0x00f60700,
+       0x0204bd00,
+       0x04004004,
        0xbd0002f6,
-       0x0c308e04,
-       0xbd24bd50,
-/* 0x0383: init_unk_loop */
-       0x7e44bd34,
-       0xb0000065,
-       0x0bf400f6,
-       0xbb010f0e,
-       0x4ffd04f2,
-       0x0130b605,
-/* 0x0398: init_unk_next */
-       0xb60120b6,
-       0x26b004e0,
-       0xe21bf402,
-/* 0x03a4: init_unk_done */
-       0xb50703b5,
-       0x00820804,
-       0x22cf0201,
-       0x9534bd00,
-       0x00800825,
-       0x05f601c0,
-       0x8004bd00,
-       0xf601c100,
+       0x1031f404,
+       0x01820082,
+       0x030022cf,
+       0x1f24f001,
+       0xb60432bb,
+       0x02b50132,
+       0x0603b505,
+       0x01860082,
+       0xb50022cf,
+       0x24b60402,
+       0xc900800f,
+       0x0002f601,
+       0x308e04bd,
+       0x24bd500c,
+       0x44bd34bd,
+/* 0x03b0: init_unk_loop */
+       0x0000657e,
+       0xf400f6b0,
+       0x010f0e0b,
+       0xfd04f2bb,
+       0x30b6054f,
+/* 0x03c5: init_unk_next */
+       0x0120b601,
+       0xb004e0b6,
+       0x1bf40226,
+/* 0x03d1: init_unk_done */
+       0x0703b5e2,
+       0x820804b5,
+       0xcf020100,
+       0x34bd0022,
+       0x80082595,
+       0xf601c000,
        0x04bd0005,
-       0x98000e98,
-       0x207e010f,
-       0x2fbb0001,
+       0x01c10080,
+       0xbd0005f6,
+       0x000e9804,
+       0x7e010f98,
+       0xbb000120,
+       0x3fbb002f,
+       0x010e9800,
+       0x7e020f98,
+       0x98000120,
+       0xeffd050e,
+       0x002ebb00,
+       0x98003ebb,
+       0x0f98020e,
+       0x01207e03,
+       0x070e9800,
+       0xbb00effd,
+       0x3ebb002e,
+       0x0235b600,
+       0x01d30080,
+       0xbd0003f6,
+       0x0825b604,
+       0xb60635b6,
+       0x30b60120,
+       0x0824b601,
+       0xb20834b6,
+       0x02687e2f,
+       0x002fbb00,
+       0x0f003fbb,
+       0x8effb23f,
+       0xf0501d60,
+       0x8f7e01e5,
+       0x0c0f0000,
+       0xa88effb2,
+       0xe5f0501d,
+       0x008f7e01,
+       0x03147e00,
+       0xb23f0f00,
+       0x1d608eff,
+       0x01e5f050,
+       0x00008f7e,
+       0xffb2000f,
+       0x501d9c8e,
+       0x7e01e5f0,
+       0x0f00008f,
+       0x03147e01,
+       0x8effb200,
+       0xf0501da8,
+       0x8f7e01e5,
+       0xff0f0000,
+       0x988effb2,
+       0xe5f0501d,
+       0x008f7e01,
+       0xb2020f00,
+       0x1da88eff,
+       0x01e5f050,
+       0x00008f7e,
+       0x0003147e,
+       0x85050498,
+       0x98504000,
+       0x64b60406,
+       0x0056bb0f,
+/* 0x04e0: tpc_strand_init_tpc_loop */
+       0x05705eb8,
+       0x00657e00,
+       0xbdf6b200,
+/* 0x04ed: tpc_strand_init_idx_loop */
+       0x605eb874,
+       0x7fb20005,
+       0x00008f7e,
+       0x05885eb8,
+       0x082f9500,
+       0x00008f7e,
+       0x058c5eb8,
+       0x082f9500,
+       0x00008f7e,
+       0x05905eb8,
+       0x00657e00,
+       0x06f5b600,
+       0xb601f0b6,
+       0x2fbb08f4,
        0x003fbb00,
-       0x98010e98,
-       0x207e020f,
-       0x0e980001,
-       0x00effd05,
-       0xbb002ebb,
-       0x0e98003e,
-       0x030f9802,
-       0x0001207e,
-       0xfd070e98,
-       0x2ebb00ef,
-       0x003ebb00,
-       0x800235b6,
-       0xf601d300,
-       0x04bd0003,
-       0xb60825b6,
-       0x20b60635,
-       0x0130b601,
-       0xb60824b6,
-       0x2fb20834,
-       0x0002687e,
-       0x80003fbb,
-       0xf6020100,
-       0x04bd0003,
-       0x29f024bd,
-       0x3000801f,
-       0x0002f602,
-/* 0x0442: main */
-       0x31f404bd,
-       0x0028f400,
-       0x377e240d,
-       0x01f40000,
-       0x04e4b0f4,
-       0xfe1d18f4,
-       0x06020181,
-       0x12fd20bd,
-       0x01e4b604,
-       0xfe051efd,
-       0x157e0018,
-       0x0ef40005,
-/* 0x0471: main_not_ctx_xfer */
-       0x10ef94d4,
-       0x7e01f5f0,
-       0xf40002f8,
-/* 0x047e: ih */
-       0x80f9c70e,
-       0xf90188fe,
-       0xf990f980,
-       0xf9b0f9a0,
-       0xf9e0f9d0,
-       0x4a04bdf0,
-       0xaacf0200,
-       0x04abc400,
-       0x0d1f0bf4,
-       0x1a004e24,
-       0x4f00eecf,
-       0xffcf1900,
-       0x00047e00,
-       0x40010e00,
-       0x0ef61d00,
-/* 0x04bb: ih_no_fifo */
-       0x4004bd00,
-       0x0af60100,
-       0xfc04bd00,
-       0xfce0fcf0,
-       0xfcb0fcd0,
-       0xfc90fca0,
-       0x0088fe80,
-       0x32f480fc,
-/* 0x04db: hub_barrier_done */
-       0x0f01f800,
-       0x040e9801,
-       0xb204febb,
-       0x94188eff,
-       0x008f7e40,
-/* 0x04ef: ctx_redswitch */
-       0x0f00f800,
-       0x85008020,
-       0x000ff601,
-       0x080e04bd,
-/* 0x04fc: ctx_redswitch_delay */
-       0xf401e2b6,
-       0xf5f1fd1b,
-       0xf5f10800,
-       0x00800200,
-       0x0ff60185,
-       0xf804bd00,
-/* 0x0515: ctx_xfer */
-       0x81008000,
-       0x000ff602,
-       0x11f404bd,
-       0x04ef7e07,
-/* 0x0525: ctx_xfer_not_load */
-       0x02167e00,
-       0x8024bd00,
-       0xf60247fc,
+       0xb60170b6,
+       0x1bf40162,
+       0x0050b7bf,
+       0x0142b608,
+       0x0fa81bf4,
+       0x8effb23f,
+       0xf0501d60,
+       0x8f7e01e5,
+       0x0d0f0000,
+       0xa88effb2,
+       0xe5f0501d,
+       0x008f7e01,
+       0x03147e00,
+       0x01008000,
+       0x0003f602,
+       0x24bd04bd,
+       0x801f29f0,
+       0xf6023000,
        0x04bd0002,
-       0xb6012cf0,
-       0xfc800320,
-       0x02f6024a,
+/* 0x0574: main */
+       0xf40031f4,
+       0x240d0028,
+       0x0000377e,
+       0xb0f401f4,
+       0x18f404e4,
+       0x0181fe1d,
+       0x20bd0602,
+       0xb60412fd,
+       0x1efd01e4,
+       0x0018fe05,
+       0x0006477e,
+/* 0x05a3: main_not_ctx_xfer */
+       0x94d40ef4,
+       0xf5f010ef,
+       0x02f87e01,
+       0xc70ef400,
+/* 0x05b0: ih */
+       0x88fe80f9,
+       0xf980f901,
+       0xf9a0f990,
+       0xf9d0f9b0,
+       0xbdf0f9e0,
+       0x02004a04,
+       0xc400aacf,
+       0x0bf404ab,
+       0x4e240d1f,
+       0xeecf1a00,
+       0x19004f00,
+       0x7e00ffcf,
+       0x0e000004,
+       0x1d004001,
+       0xbd000ef6,
+/* 0x05ed: ih_no_fifo */
+       0x01004004,
+       0xbd000af6,
+       0xfcf0fc04,
+       0xfcd0fce0,
+       0xfca0fcb0,
+       0xfe80fc90,
+       0x80fc0088,
+       0xf80032f4,
+/* 0x060d: hub_barrier_done */
+       0x98010f01,
+       0xfebb040e,
+       0x8effb204,
+       0x7e409418,
+       0xf800008f,
+/* 0x0621: ctx_redswitch */
+       0x80200f00,
+       0xf6018500,
+       0x04bd000f,
+/* 0x062e: ctx_redswitch_delay */
+       0xe2b6080e,
+       0xfd1bf401,
+       0x0800f5f1,
+       0x0200f5f1,
+       0x01850080,
+       0xbd000ff6,
+/* 0x0647: ctx_xfer */
+       0x8000f804,
+       0xf6028100,
+       0x04bd000f,
+       0xc48effb2,
+       0xe5f0501d,
+       0x008f7e01,
+       0x0711f400,
+       0x0006217e,
+/* 0x0664: ctx_xfer_not_load */
+       0x0002167e,
+       0xfc8024bd,
+       0x02f60247,
        0xf004bd00,
+       0x20b6012c,
+       0x4afc8003,
+       0x0002f602,
+       0x0c0f04bd,
+       0xa88effb2,
+       0xe5f0501d,
+       0x008f7e01,
+       0x03147e00,
+       0xb23f0f00,
+       0x1d608eff,
+       0x01e5f050,
+       0x00008f7e,
+       0xffb2000f,
+       0x501d9c8e,
+       0x7e01e5f0,
+       0x0f00008f,
+       0x03147e01,
+       0x01fcf000,
+       0xb203f0b6,
+       0x1da88eff,
+       0x01e5f050,
+       0x00008f7e,
+       0xf001acf0,
+       0x008b02a5,
+       0x0c985000,
+       0x0fc4b604,
+       0x9800bcbb,
+       0x0d98000c,
+       0x7e000e01,
+       0xf000013d,
+       0x008b01ac,
+       0x0c985040,
+       0x0fc4b604,
+       0x9800bcbb,
+       0x0d98010c,
+       0x060f9802,
+       0x7e08004e,
+       0xf000013d,
        0xa5f001ac,
-       0x00008b02,
+       0x30008b04,
        0x040c9850,
        0xbb0fc4b6,
        0x0c9800bc,
-       0x010d9800,
-       0x3d7e000e,
-       0xacf00001,
-       0x40008b01,
-       0x040c9850,
-       0xbb0fc4b6,
-       0x0c9800bc,
-       0x020d9801,
-       0x4e060f98,
-       0x3d7e0800,
-       0xacf00001,
-       0x04a5f001,
-       0x5030008b,
-       0xb6040c98,
-       0xbcbb0fc4,
-       0x020c9800,
-       0x98030d98,
-       0x004e080f,
-       0x013d7e02,
-       0x020a7e00,
-       0x0601f400,
-/* 0x05af: ctx_xfer_post */
-       0x7e0712f4,
-/* 0x05b3: ctx_xfer_done */
-       0x7e000227,
-       0xf80004db,
+       0x030d9802,
+       0x4e080f98,
+       0x3d7e0200,
+       0x0a7e0001,
+       0x147e0002,
+       0x01f40003,
+       0x1a12f406,
+/* 0x073c: ctx_xfer_post */
+       0x0002277e,
+       0xffb20d0f,
+       0x501da88e,
+       0x7e01e5f0,
+       0x7e00008f,
+/* 0x0753: ctx_xfer_done */
+       0x7e000314,
+       0xf800060d,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
        0x00000000,
        0x00000000,
        0x00000000,
index fea7bf2..fa61806 100644 (file)
@@ -29,6 +29,7 @@
 #define GK100 0xe0
 #define GK110 0xf0
 #define GK208 0x108
+#define GM107 0x117
 
 #define NV_PGRAPH_TRAPPED_ADDR                                         0x400704
 #define NV_PGRAPH_TRAPPED_DATA_LO                                      0x400708
 #define NV_PGRAPH_GPCX_GPCCS_STRAND_CMD_SAVE                         0x00000003
 #define NV_PGRAPH_GPCX_GPCCS_STRAND_CMD_LOAD                         0x00000004
 #define NV_PGRAPH_GPCX_GPCCS_MEM_BASE                                  0x41aa04
+#define NV_PGRAPH_GPCX_GPCCS_TPC_STATUS                                0x41acfc
+
+#define NV_PGRAPH_GPC0_TPC0                                            0x504000
+#define NV_PGRAPH_GPC0_TPC0__SIZE                                      0x000800
+
+#define NV_PGRAPH_GPC0_TPCX_STRAND_INDEX                               0x501d60
+#define NV_PGRAPH_GPC0_TPCX_STRAND_INDEX_ALL                         0x0000003f
+#define NV_PGRAPH_GPC0_TPCX_STRAND_DATA                                0x501d98
+#define NV_PGRAPH_GPC0_TPCX_STRAND_SELECT                              0x501d9c
+#define NV_PGRAPH_GPC0_TPCX_STRAND_CMD                                 0x501da8
+#define NV_PGRAPH_GPC0_TPCX_STRAND_CMD_SEEK                          0x00000001
+#define NV_PGRAPH_GPC0_TPCX_STRAND_CMD_GET_INFO                      0x00000002
+#define NV_PGRAPH_GPC0_TPCX_STRAND_CMD_SAVE                          0x00000003
+#define NV_PGRAPH_GPC0_TPCX_STRAND_CMD_LOAD                          0x00000004
+#define NV_PGRAPH_GPC0_TPCX_STRAND_CMD_ENABLE                        0x0000000c
+#define NV_PGRAPH_GPC0_TPCX_STRAND_CMD_DISABLE                       0x0000000d
+#define NV_PGRAPH_GPC0_TPCX_STRAND_MEM_BASE                            0x501dc4
+
+#define NV_TPC_STRAND_INDEX                                               0x560
+#define NV_TPC_STRAND_CNT                                                 0x570
+#define NV_TPC_STRAND_SAVE_SWBASE                                         0x588
+#define NV_TPC_STRAND_LOAD_SWBASE                                         0x58c
+#define NV_TPC_STRAND_WORDS                                               0x590
 
 #define mmctx_data(r,c) .b32 (((c - 1) << 26) | r)
 #define queue_init      .skip 72 // (2 * 4) + ((8 * 4) * 2)
 #define T_SAVE    7
 #define T_LCHAN   8
 #define T_LCTXH   9
+#define T_STRTPC  10
 
 #if CHIPSET < GK208
 #define imm32(reg,val) /*
index 124492b..0867eb0 100644 (file)
@@ -464,7 +464,7 @@ gm107_gr_oclass = &(struct gf100_gr_oclass) {
        .cclass = &gm107_grctx_oclass,
        .sclass =  gm107_gr_sclass,
        .mmio = gm107_gr_pack_mmio,
-       .fecs.ucode = 0 ? &gm107_gr_fecs_ucode : NULL,
+       .fecs.ucode = &gm107_gr_fecs_ucode,
        .gpccs.ucode = &gm107_gr_gpccs_ucode,
        .ppc_nr = 2,
 }.base;