]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
drm/nouveau/gr/gm200: s/gm204/gm200/
authorBen Skeggs <bskeggs@redhat.com>
Wed, 24 Feb 2016 04:03:40 +0000 (14:03 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Mon, 14 Mar 2016 00:13:18 +0000 (10:13 +1000)
Most of the per-chipset differences will go away when we fully switch
to using the register lists provided by the firmware files, which will
leave all the remaining code "belonging" to GM200.

This is a preemptive rename from GM204 to GM200.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
12 files changed:
drivers/gpu/drm/nouveau/include/nvkm/engine/gr.h
drivers/gpu/drm/nouveau/nvkm/engine/device/base.c
drivers/gpu/drm/nouveau/nvkm/engine/gr/Kbuild
drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf100.h
drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgm200.c [new file with mode: 0644]
drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgm204.c [deleted file]
drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgm206.c
drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgm20b.c
drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.h
drivers/gpu/drm/nouveau/nvkm/engine/gr/gm200.c [new file with mode: 0644]
drivers/gpu/drm/nouveau/nvkm/engine/gr/gm204.c [deleted file]
drivers/gpu/drm/nouveau/nvkm/engine/gr/gm206.c

index f126e54d2e30b62e6f55484af648ea31b966a30f..fa83da10d4b91cc72dd9e820ab17cf254461c846 100644 (file)
@@ -40,7 +40,7 @@ int gk110b_gr_new(struct nvkm_device *, int, struct nvkm_gr **);
 int gk208_gr_new(struct nvkm_device *, int, struct nvkm_gr **);
 int gk20a_gr_new(struct nvkm_device *, int, struct nvkm_gr **);
 int gm107_gr_new(struct nvkm_device *, int, struct nvkm_gr **);
-int gm204_gr_new(struct nvkm_device *, int, struct nvkm_gr **);
+int gm200_gr_new(struct nvkm_device *, int, struct nvkm_gr **);
 int gm206_gr_new(struct nvkm_device *, int, struct nvkm_gr **);
 int gm20b_gr_new(struct nvkm_device *, int, struct nvkm_gr **);
 #endif
index 3f4b8687deecd882d8c87c9d41431ab4d1e8e1bc..65b7ac1b03ebda242b797549e4225641f33898a1 100644 (file)
@@ -2019,7 +2019,7 @@ nv124_chipset = {
        .disp = gm200_disp_new,
        .dma = gf119_dma_new,
        .fifo = gm200_fifo_new,
-       .gr = gm204_gr_new,
+       .gr = gm200_gr_new,
        .sw = gf100_sw_new,
 };
 
index 9ad0d0e78a96eceab2efa3dca4d440e3536918c6..1e22f4fa313179f1d31abe8acd79e81528400bb2 100644 (file)
@@ -29,7 +29,7 @@ nvkm-y += nvkm/engine/gr/gk110b.o
 nvkm-y += nvkm/engine/gr/gk208.o
 nvkm-y += nvkm/engine/gr/gk20a.o
 nvkm-y += nvkm/engine/gr/gm107.o
-nvkm-y += nvkm/engine/gr/gm204.o
+nvkm-y += nvkm/engine/gr/gm200.o
 nvkm-y += nvkm/engine/gr/gm206.o
 nvkm-y += nvkm/engine/gr/gm20b.o
 
@@ -47,6 +47,6 @@ nvkm-y += nvkm/engine/gr/ctxgk110b.o
 nvkm-y += nvkm/engine/gr/ctxgk208.o
 nvkm-y += nvkm/engine/gr/ctxgk20a.o
 nvkm-y += nvkm/engine/gr/ctxgm107.o
-nvkm-y += nvkm/engine/gr/ctxgm204.o
+nvkm-y += nvkm/engine/gr/ctxgm200.o
 nvkm-y += nvkm/engine/gr/ctxgm206.o
 nvkm-y += nvkm/engine/gr/ctxgm20b.o
index 3c64040ec5a252ebe8bb19da765111c9e99d8dc5..b96d19ffc3dc5ce387889506183ee1b132e4c3a6 100644 (file)
@@ -97,10 +97,10 @@ void gm107_grctx_generate_bundle(struct gf100_grctx *);
 void gm107_grctx_generate_pagepool(struct gf100_grctx *);
 void gm107_grctx_generate_attrib(struct gf100_grctx *);
 
-extern const struct gf100_grctx_func gm204_grctx;
-void gm204_grctx_generate_main(struct gf100_gr *, struct gf100_grctx *);
-void gm204_grctx_generate_tpcid(struct gf100_gr *);
-void gm204_grctx_generate_405b60(struct gf100_gr *);
+extern const struct gf100_grctx_func gm200_grctx;
+void gm200_grctx_generate_main(struct gf100_gr *, struct gf100_grctx *);
+void gm200_grctx_generate_tpcid(struct gf100_gr *);
+void gm200_grctx_generate_405b60(struct gf100_gr *);
 
 extern const struct gf100_grctx_func gm206_grctx;
 extern const struct gf100_grctx_func gm20b_grctx;
@@ -211,18 +211,18 @@ extern const struct gf100_gr_init gk208_grctx_init_crstr_0[];
 extern const struct gf100_gr_init gm107_grctx_init_gpc_unk_0[];
 extern const struct gf100_gr_init gm107_grctx_init_wwdx_0[];
 
-extern const struct gf100_gr_pack gm204_grctx_pack_icmd[];
+extern const struct gf100_gr_pack gm200_grctx_pack_icmd[];
 
-extern const struct gf100_gr_pack gm204_grctx_pack_mthd[];
+extern const struct gf100_gr_pack gm200_grctx_pack_mthd[];
 
-extern const struct gf100_gr_pack gm204_grctx_pack_hub[];
+extern const struct gf100_gr_pack gm200_grctx_pack_hub[];
 
-extern const struct gf100_gr_init gm204_grctx_init_prop_0[];
-extern const struct gf100_gr_init gm204_grctx_init_setup_0[];
-extern const struct gf100_gr_init gm204_grctx_init_gpm_0[];
-extern const struct gf100_gr_init gm204_grctx_init_gpc_unk_2[];
+extern const struct gf100_gr_init gm200_grctx_init_prop_0[];
+extern const struct gf100_gr_init gm200_grctx_init_setup_0[];
+extern const struct gf100_gr_init gm200_grctx_init_gpm_0[];
+extern const struct gf100_gr_init gm200_grctx_init_gpc_unk_2[];
 
-extern const struct gf100_gr_pack gm204_grctx_pack_tpc[];
+extern const struct gf100_gr_pack gm200_grctx_pack_tpc[];
 
-extern const struct gf100_gr_pack gm204_grctx_pack_ppc[];
+extern const struct gf100_gr_pack gm200_grctx_pack_ppc[];
 #endif
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgm200.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgm200.c
new file mode 100644 (file)
index 0000000..ba25474
--- /dev/null
@@ -0,0 +1,1049 @@
+/*
+ * Copyright 2015 Red Hat Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Authors: Ben Skeggs <bskeggs@redhat.com>
+ */
+#include "ctxgf100.h"
+
+/*******************************************************************************
+ * PGRAPH context register lists
+ ******************************************************************************/
+
+static const struct gf100_gr_init
+gm200_grctx_init_icmd_0[] = {
+       { 0x001000,   1, 0x01, 0x00000002 },
+       { 0x0006aa,   1, 0x01, 0x00000001 },
+       { 0x0006ad,   2, 0x01, 0x00000100 },
+       { 0x0006b1,   1, 0x01, 0x00000011 },
+       { 0x00078c,   1, 0x01, 0x00000008 },
+       { 0x000792,   1, 0x01, 0x00000001 },
+       { 0x000794,   3, 0x01, 0x00000001 },
+       { 0x000797,   1, 0x01, 0x000000cf },
+       { 0x00079a,   1, 0x01, 0x00000002 },
+       { 0x0007a1,   1, 0x01, 0x00000001 },
+       { 0x0007a3,   3, 0x01, 0x00000001 },
+       { 0x000831,   1, 0x01, 0x00000004 },
+       { 0x01e100,   1, 0x01, 0x00000001 },
+       { 0x001000,   1, 0x01, 0x00000008 },
+       { 0x000039,   3, 0x01, 0x00000000 },
+       { 0x000380,   1, 0x01, 0x00000001 },
+       { 0x000366,   2, 0x01, 0x00000000 },
+       { 0x000368,   1, 0x01, 0x00000fff },
+       { 0x000370,   2, 0x01, 0x00000000 },
+       { 0x000372,   1, 0x01, 0x000fffff },
+       { 0x000374,   1, 0x01, 0x00000100 },
+       { 0x000818,   8, 0x01, 0x00000000 },
+       { 0x000848,  16, 0x01, 0x00000000 },
+       { 0x000738,   1, 0x01, 0x00000000 },
+       { 0x000b07,   1, 0x01, 0x00000002 },
+       { 0x000b08,   2, 0x01, 0x00000100 },
+       { 0x000b0a,   1, 0x01, 0x00000001 },
+       { 0x000a04,   1, 0x01, 0x000000ff },
+       { 0x000a0b,   1, 0x01, 0x00000040 },
+       { 0x00097f,   1, 0x01, 0x00000100 },
+       { 0x000a02,   1, 0x01, 0x00000001 },
+       { 0x000809,   1, 0x01, 0x00000007 },
+       { 0x00c221,   1, 0x01, 0x00000040 },
+       { 0x00c401,   1, 0x01, 0x00000001 },
+       { 0x00c402,   1, 0x01, 0x00010001 },
+       { 0x00c403,   2, 0x01, 0x00000001 },
+       { 0x00c40e,   1, 0x01, 0x00000020 },
+       { 0x01e100,   1, 0x01, 0x00000001 },
+       { 0x001000,   1, 0x01, 0x00000001 },
+       { 0x000b07,   1, 0x01, 0x00000002 },
+       { 0x000b08,   2, 0x01, 0x00000100 },
+       { 0x000b0a,   1, 0x01, 0x00000001 },
+       { 0x01e100,   1, 0x01, 0x00000001 },
+       { 0x001000,   1, 0x01, 0x00000004 },
+       { 0x000039,   3, 0x01, 0x00000000 },
+       { 0x0000a9,   1, 0x01, 0x0000ffff },
+       { 0x000038,   1, 0x01, 0x0fac6881 },
+       { 0x00003d,   1, 0x01, 0x00000001 },
+       { 0x0000e8,   8, 0x01, 0x00000400 },
+       { 0x000078,   8, 0x01, 0x00000300 },
+       { 0x000050,   1, 0x01, 0x00000011 },
+       { 0x000058,   8, 0x01, 0x00000008 },
+       { 0x000208,   8, 0x01, 0x00000001 },
+       { 0x000081,   1, 0x01, 0x00000001 },
+       { 0x000085,   1, 0x01, 0x00000004 },
+       { 0x000088,   1, 0x01, 0x00000400 },
+       { 0x000090,   1, 0x01, 0x00000300 },
+       { 0x000098,   1, 0x01, 0x00001001 },
+       { 0x0000e3,   1, 0x01, 0x00000001 },
+       { 0x0000da,   1, 0x01, 0x00000001 },
+       { 0x0000b4,   4, 0x01, 0x88888888 },
+       { 0x0000f8,   1, 0x01, 0x00000003 },
+       { 0x0000fa,   1, 0x01, 0x00000001 },
+       { 0x0000b1,   2, 0x01, 0x00000001 },
+       { 0x00009f,   4, 0x01, 0x0000ffff },
+       { 0x0000a8,   1, 0x01, 0x0000ffff },
+       { 0x0000ad,   1, 0x01, 0x0000013e },
+       { 0x0000e1,   1, 0x01, 0x00000010 },
+       { 0x000290,  16, 0x01, 0x00000000 },
+       { 0x0003b0,  16, 0x01, 0x00000000 },
+       { 0x0002a0,  16, 0x01, 0x00000000 },
+       { 0x000420,  16, 0x01, 0x00000000 },
+       { 0x0002b0,  16, 0x01, 0x00000000 },
+       { 0x000430,  16, 0x01, 0x00000000 },
+       { 0x0002c0,  16, 0x01, 0x00000000 },
+       { 0x0004d0,  16, 0x01, 0x00000000 },
+       { 0x000720,  16, 0x01, 0x00000000 },
+       { 0x0008c0,  16, 0x01, 0x00000000 },
+       { 0x000890,  16, 0x01, 0x00000000 },
+       { 0x0008e0,  16, 0x01, 0x00000000 },
+       { 0x0008a0,  16, 0x01, 0x00000000 },
+       { 0x0008f0,  16, 0x01, 0x00000000 },
+       { 0x00094c,   1, 0x01, 0x000000ff },
+       { 0x00094d,   1, 0x01, 0xffffffff },
+       { 0x00094e,   1, 0x01, 0x00000002 },
+       { 0x0002f2,   2, 0x01, 0x00000001 },
+       { 0x0002f5,   1, 0x01, 0x00000001 },
+       { 0x0002f7,   1, 0x01, 0x00000001 },
+       { 0x000303,   1, 0x01, 0x00000001 },
+       { 0x0002e6,   1, 0x01, 0x00000001 },
+       { 0x000466,   1, 0x01, 0x00000052 },
+       { 0x000301,   1, 0x01, 0x3f800000 },
+       { 0x000304,   1, 0x01, 0x30201000 },
+       { 0x000305,   1, 0x01, 0x70605040 },
+       { 0x000306,   1, 0x01, 0xb8a89888 },
+       { 0x000307,   1, 0x01, 0xf8e8d8c8 },
+       { 0x00030a,   1, 0x01, 0x00ffff00 },
+       { 0x00030b,   1, 0x01, 0x0000001a },
+       { 0x00030c,   1, 0x01, 0x00000001 },
+       { 0x000318,   1, 0x01, 0x00000001 },
+       { 0x000340,   1, 0x01, 0x00000000 },
+       { 0x00037d,   1, 0x01, 0x00000006 },
+       { 0x0003a0,   1, 0x01, 0x00000002 },
+       { 0x0003aa,   1, 0x01, 0x00000001 },
+       { 0x0003a9,   1, 0x01, 0x00000001 },
+       { 0x000380,   1, 0x01, 0x00000001 },
+       { 0x000383,   1, 0x01, 0x00000011 },
+       { 0x000360,   1, 0x01, 0x00000040 },
+       { 0x000366,   2, 0x01, 0x00000000 },
+       { 0x000368,   1, 0x01, 0x00000fff },
+       { 0x000370,   2, 0x01, 0x00000000 },
+       { 0x000372,   1, 0x01, 0x000fffff },
+       { 0x000374,   1, 0x01, 0x00000100 },
+       { 0x00037a,   1, 0x01, 0x00000012 },
+       { 0x000619,   1, 0x01, 0x00000003 },
+       { 0x000811,   1, 0x01, 0x00000003 },
+       { 0x000812,   1, 0x01, 0x00000004 },
+       { 0x000813,   1, 0x01, 0x00000006 },
+       { 0x000814,   1, 0x01, 0x00000008 },
+       { 0x000815,   1, 0x01, 0x0000000b },
+       { 0x000800,   6, 0x01, 0x00000001 },
+       { 0x000632,   1, 0x01, 0x00000001 },
+       { 0x000633,   1, 0x01, 0x00000002 },
+       { 0x000634,   1, 0x01, 0x00000003 },
+       { 0x000635,   1, 0x01, 0x00000004 },
+       { 0x000654,   1, 0x01, 0x3f800000 },
+       { 0x000657,   1, 0x01, 0x3f800000 },
+       { 0x000655,   2, 0x01, 0x3f800000 },
+       { 0x0006cd,   1, 0x01, 0x3f800000 },
+       { 0x0007f5,   1, 0x01, 0x3f800000 },
+       { 0x0007dc,   1, 0x01, 0x39291909 },
+       { 0x0007dd,   1, 0x01, 0x79695949 },
+       { 0x0007de,   1, 0x01, 0xb9a99989 },
+       { 0x0007df,   1, 0x01, 0xf9e9d9c9 },
+       { 0x0007e8,   1, 0x01, 0x00003210 },
+       { 0x0007e9,   1, 0x01, 0x00007654 },
+       { 0x0007ea,   1, 0x01, 0x00000098 },
+       { 0x0007ec,   1, 0x01, 0x39291909 },
+       { 0x0007ed,   1, 0x01, 0x79695949 },
+       { 0x0007ee,   1, 0x01, 0xb9a99989 },
+       { 0x0007ef,   1, 0x01, 0xf9e9d9c9 },
+       { 0x0007f0,   1, 0x01, 0x00003210 },
+       { 0x0007f1,   1, 0x01, 0x00007654 },
+       { 0x0007f2,   1, 0x01, 0x00000098 },
+       { 0x0005a5,   1, 0x01, 0x00000001 },
+       { 0x0005aa,   1, 0x01, 0x00000002 },
+       { 0x0005cb,   1, 0x01, 0x00000004 },
+       { 0x0005d0,   1, 0x01, 0x20181008 },
+       { 0x0005d1,   1, 0x01, 0x40383028 },
+       { 0x0005d2,   1, 0x01, 0x60585048 },
+       { 0x0005d3,   1, 0x01, 0x80787068 },
+       { 0x000980, 128, 0x01, 0x00000000 },
+       { 0x000468,   1, 0x01, 0x00000004 },
+       { 0x00046c,   1, 0x01, 0x00000001 },
+       { 0x000470,  96, 0x01, 0x00000000 },
+       { 0x0005e0,  16, 0x01, 0x00000d10 },
+       { 0x000510,  16, 0x01, 0x3f800000 },
+       { 0x000520,   1, 0x01, 0x000002b6 },
+       { 0x000529,   1, 0x01, 0x00000001 },
+       { 0x000530,  16, 0x01, 0xffff0000 },
+       { 0x000550,  32, 0x01, 0xffff0000 },
+       { 0x000585,   1, 0x01, 0x0000003f },
+       { 0x000576,   1, 0x01, 0x00000003 },
+       { 0x00057b,   1, 0x01, 0x00000059 },
+       { 0x000586,   1, 0x01, 0x00000040 },
+       { 0x000582,   2, 0x01, 0x00000080 },
+       { 0x000595,   1, 0x01, 0x00400040 },
+       { 0x000596,   1, 0x01, 0x00000492 },
+       { 0x000597,   1, 0x01, 0x08080203 },
+       { 0x0005ad,   1, 0x01, 0x00000008 },
+       { 0x000598,   1, 0x01, 0x00020001 },
+       { 0x0005d4,   1, 0x01, 0x00000001 },
+       { 0x0005c2,   1, 0x01, 0x00000001 },
+       { 0x000638,   2, 0x01, 0x00000001 },
+       { 0x00063a,   1, 0x01, 0x00000002 },
+       { 0x00063b,   2, 0x01, 0x00000001 },
+       { 0x00063d,   1, 0x01, 0x00000002 },
+       { 0x00063e,   1, 0x01, 0x00000001 },
+       { 0x0008b8,   8, 0x01, 0x00000001 },
+       { 0x000900,   8, 0x01, 0x00000001 },
+       { 0x000908,   8, 0x01, 0x00000002 },
+       { 0x000910,  16, 0x01, 0x00000001 },
+       { 0x000920,   8, 0x01, 0x00000002 },
+       { 0x000928,   8, 0x01, 0x00000001 },
+       { 0x000662,   1, 0x01, 0x00000001 },
+       { 0x000648,   9, 0x01, 0x00000001 },
+       { 0x000674,   1, 0x01, 0x00000001 },
+       { 0x000658,   1, 0x01, 0x0000000f },
+       { 0x0007ff,   1, 0x01, 0x0000000a },
+       { 0x00066a,   1, 0x01, 0x40000000 },
+       { 0x00066b,   1, 0x01, 0x10000000 },
+       { 0x00066c,   2, 0x01, 0xffff0000 },
+       { 0x0007af,   2, 0x01, 0x00000008 },
+       { 0x0007f6,   1, 0x01, 0x00000001 },
+       { 0x0006b2,   1, 0x01, 0x00000055 },
+       { 0x0007ad,   1, 0x01, 0x00000003 },
+       { 0x000971,   1, 0x01, 0x00000008 },
+       { 0x000972,   1, 0x01, 0x00000040 },
+       { 0x000973,   1, 0x01, 0x0000012c },
+       { 0x00097c,   1, 0x01, 0x00000040 },
+       { 0x000975,   1, 0x01, 0x00000020 },
+       { 0x000976,   1, 0x01, 0x00000001 },
+       { 0x000977,   1, 0x01, 0x00000020 },
+       { 0x000978,   1, 0x01, 0x00000001 },
+       { 0x000957,   1, 0x01, 0x00000003 },
+       { 0x00095e,   1, 0x01, 0x20164010 },
+       { 0x00095f,   1, 0x01, 0x00000020 },
+       { 0x000a0d,   1, 0x01, 0x00000006 },
+       { 0x00097d,   1, 0x01, 0x0000000c },
+       { 0x000683,   1, 0x01, 0x00000006 },
+       { 0x000687,   1, 0x01, 0x003fffff },
+       { 0x0006a0,   1, 0x01, 0x00000005 },
+       { 0x000840,   1, 0x01, 0x00400008 },
+       { 0x000841,   1, 0x01, 0x08000080 },
+       { 0x000842,   1, 0x01, 0x00400008 },
+       { 0x000843,   1, 0x01, 0x08000080 },
+       { 0x000818,   8, 0x01, 0x00000000 },
+       { 0x000848,  16, 0x01, 0x00000000 },
+       { 0x000738,   1, 0x01, 0x00000000 },
+       { 0x0006aa,   1, 0x01, 0x00000001 },
+       { 0x0006ab,   1, 0x01, 0x00000002 },
+       { 0x0006ac,   1, 0x01, 0x00000080 },
+       { 0x0006ad,   2, 0x01, 0x00000100 },
+       { 0x0006b1,   1, 0x01, 0x00000011 },
+       { 0x0006bb,   1, 0x01, 0x000000cf },
+       { 0x0006ce,   1, 0x01, 0x2a712488 },
+       { 0x000739,   1, 0x01, 0x4085c000 },
+       { 0x00073a,   1, 0x01, 0x00000080 },
+       { 0x000786,   1, 0x01, 0x80000100 },
+       { 0x00073c,   1, 0x01, 0x00010100 },
+       { 0x00073d,   1, 0x01, 0x02800000 },
+       { 0x000787,   1, 0x01, 0x000000cf },
+       { 0x00078c,   1, 0x01, 0x00000008 },
+       { 0x000792,   1, 0x01, 0x00000001 },
+       { 0x000794,   3, 0x01, 0x00000001 },
+       { 0x000797,   1, 0x01, 0x000000cf },
+       { 0x000836,   1, 0x01, 0x00000001 },
+       { 0x00079a,   1, 0x01, 0x00000002 },
+       { 0x000833,   1, 0x01, 0x04444480 },
+       { 0x0007a1,   1, 0x01, 0x00000001 },
+       { 0x0007a3,   3, 0x01, 0x00000001 },
+       { 0x000831,   1, 0x01, 0x00000004 },
+       { 0x000b07,   1, 0x01, 0x00000002 },
+       { 0x000b08,   2, 0x01, 0x00000100 },
+       { 0x000b0a,   1, 0x01, 0x00000001 },
+       { 0x000a04,   1, 0x01, 0x000000ff },
+       { 0x000a0b,   1, 0x01, 0x00000040 },
+       { 0x00097f,   1, 0x01, 0x00000100 },
+       { 0x000a02,   1, 0x01, 0x00000001 },
+       { 0x000809,   1, 0x01, 0x00000007 },
+       { 0x00c221,   1, 0x01, 0x00000040 },
+       { 0x00c1b0,   8, 0x01, 0x0000000f },
+       { 0x00c1b8,   1, 0x01, 0x0fac6881 },
+       { 0x00c1b9,   1, 0x01, 0x00fac688 },
+       { 0x00c401,   1, 0x01, 0x00000001 },
+       { 0x00c402,   1, 0x01, 0x00010001 },
+       { 0x00c403,   2, 0x01, 0x00000001 },
+       { 0x00c40e,   1, 0x01, 0x00000020 },
+       { 0x00c413,   4, 0x01, 0x88888888 },
+       { 0x00c423,   1, 0x01, 0x0000ff00 },
+       { 0x00c420,   1, 0x01, 0x00880101 },
+       { 0x01e100,   1, 0x01, 0x00000001 },
+       {}
+};
+
+const struct gf100_gr_pack
+gm200_grctx_pack_icmd[] = {
+       { gm200_grctx_init_icmd_0 },
+       {}
+};
+
+static const struct gf100_gr_init
+gm200_grctx_init_b197_0[] = {
+       { 0x000800,   8, 0x40, 0x00000000 },
+       { 0x000804,   8, 0x40, 0x00000000 },
+       { 0x000808,   8, 0x40, 0x00000400 },
+       { 0x00080c,   8, 0x40, 0x00000300 },
+       { 0x000810,   1, 0x04, 0x000000cf },
+       { 0x000850,   7, 0x40, 0x00000000 },
+       { 0x000814,   8, 0x40, 0x00000040 },
+       { 0x000818,   8, 0x40, 0x00000001 },
+       { 0x00081c,   8, 0x40, 0x00000000 },
+       { 0x000820,   8, 0x40, 0x00000000 },
+       { 0x001c00,  16, 0x10, 0x00000000 },
+       { 0x001c04,  16, 0x10, 0x00000000 },
+       { 0x001c08,  16, 0x10, 0x00000000 },
+       { 0x001c0c,  16, 0x10, 0x00000000 },
+       { 0x001d00,  16, 0x10, 0x00000000 },
+       { 0x001d04,  16, 0x10, 0x00000000 },
+       { 0x001d08,  16, 0x10, 0x00000000 },
+       { 0x001d0c,  16, 0x10, 0x00000000 },
+       { 0x001f00,  16, 0x08, 0x00000000 },
+       { 0x001f04,  16, 0x08, 0x00000000 },
+       { 0x001f80,  16, 0x08, 0x00000000 },
+       { 0x001f84,  16, 0x08, 0x00000000 },
+       { 0x002000,   1, 0x04, 0x00000000 },
+       { 0x002040,   1, 0x04, 0x00000011 },
+       { 0x002080,   1, 0x04, 0x00000020 },
+       { 0x0020c0,   1, 0x04, 0x00000030 },
+       { 0x002100,   1, 0x04, 0x00000040 },
+       { 0x002140,   1, 0x04, 0x00000051 },
+       { 0x00200c,   6, 0x40, 0x00000001 },
+       { 0x002010,   1, 0x04, 0x00000000 },
+       { 0x002050,   1, 0x04, 0x00000000 },
+       { 0x002090,   1, 0x04, 0x00000001 },
+       { 0x0020d0,   1, 0x04, 0x00000002 },
+       { 0x002110,   1, 0x04, 0x00000003 },
+       { 0x002150,   1, 0x04, 0x00000004 },
+       { 0x000380,   4, 0x20, 0x00000000 },
+       { 0x000384,   4, 0x20, 0x00000000 },
+       { 0x000388,   4, 0x20, 0x00000000 },
+       { 0x00038c,   4, 0x20, 0x00000000 },
+       { 0x000700,   4, 0x10, 0x00000000 },
+       { 0x000704,   4, 0x10, 0x00000000 },
+       { 0x000708,   4, 0x10, 0x00000000 },
+       { 0x002800, 128, 0x04, 0x00000000 },
+       { 0x000a00,  16, 0x20, 0x00000000 },
+       { 0x000a04,  16, 0x20, 0x00000000 },
+       { 0x000a08,  16, 0x20, 0x00000000 },
+       { 0x000a0c,  16, 0x20, 0x00000000 },
+       { 0x000a10,  16, 0x20, 0x00000000 },
+       { 0x000a14,  16, 0x20, 0x00000000 },
+       { 0x000a18,  16, 0x20, 0x00006420 },
+       { 0x000a1c,  16, 0x20, 0x00000000 },
+       { 0x000c00,  16, 0x10, 0x00000000 },
+       { 0x000c04,  16, 0x10, 0x00000000 },
+       { 0x000c08,  16, 0x10, 0x00000000 },
+       { 0x000c0c,  16, 0x10, 0x3f800000 },
+       { 0x000d00,   8, 0x08, 0xffff0000 },
+       { 0x000d04,   8, 0x08, 0xffff0000 },
+       { 0x000e00,  16, 0x10, 0x00000000 },
+       { 0x000e04,  16, 0x10, 0xffff0000 },
+       { 0x000e08,  16, 0x10, 0xffff0000 },
+       { 0x000d40,   4, 0x08, 0x00000000 },
+       { 0x000d44,   4, 0x08, 0x00000000 },
+       { 0x001e00,   8, 0x20, 0x00000001 },
+       { 0x001e04,   8, 0x20, 0x00000001 },
+       { 0x001e08,   8, 0x20, 0x00000002 },
+       { 0x001e0c,   8, 0x20, 0x00000001 },
+       { 0x001e10,   8, 0x20, 0x00000001 },
+       { 0x001e14,   8, 0x20, 0x00000002 },
+       { 0x001e18,   8, 0x20, 0x00000001 },
+       { 0x001480,   8, 0x10, 0x00000000 },
+       { 0x001484,   8, 0x10, 0x00000000 },
+       { 0x001488,   8, 0x10, 0x00000000 },
+       { 0x003400, 128, 0x04, 0x00000000 },
+       { 0x00030c,   1, 0x04, 0x00000001 },
+       { 0x001944,   1, 0x04, 0x00000000 },
+       { 0x001514,   1, 0x04, 0x00000000 },
+       { 0x000d68,   1, 0x04, 0x0000ffff },
+       { 0x00121c,   1, 0x04, 0x0fac6881 },
+       { 0x000fac,   1, 0x04, 0x00000001 },
+       { 0x001538,   1, 0x04, 0x00000001 },
+       { 0x000fe0,   2, 0x04, 0x00000000 },
+       { 0x000fe8,   1, 0x04, 0x00000014 },
+       { 0x000fec,   1, 0x04, 0x00000040 },
+       { 0x000ff0,   1, 0x04, 0x00000000 },
+       { 0x00179c,   1, 0x04, 0x00000000 },
+       { 0x001228,   1, 0x04, 0x00000400 },
+       { 0x00122c,   1, 0x04, 0x00000300 },
+       { 0x001230,   1, 0x04, 0x00010001 },
+       { 0x0007f8,   1, 0x04, 0x00000000 },
+       { 0x001208,   1, 0x04, 0x00000000 },
+       { 0x0015b4,   1, 0x04, 0x00000001 },
+       { 0x0015cc,   1, 0x04, 0x00000000 },
+       { 0x001534,   1, 0x04, 0x00000000 },
+       { 0x000754,   1, 0x04, 0x00000001 },
+       { 0x000fb0,   1, 0x04, 0x00000000 },
+       { 0x0015d0,   1, 0x04, 0x00000000 },
+       { 0x0011e0,   4, 0x04, 0x88888888 },
+       { 0x00153c,   1, 0x04, 0x00000000 },
+       { 0x0016b4,   1, 0x04, 0x00000003 },
+       { 0x000fa4,   1, 0x04, 0x00000001 },
+       { 0x000fbc,   4, 0x04, 0x0000ffff },
+       { 0x000fa8,   1, 0x04, 0x0000ffff },
+       { 0x000df8,   2, 0x04, 0x00000000 },
+       { 0x001948,   1, 0x04, 0x00000000 },
+       { 0x001970,   1, 0x04, 0x00000001 },
+       { 0x00161c,   1, 0x04, 0x000009f0 },
+       { 0x000dcc,   1, 0x04, 0x00000010 },
+       { 0x0015e4,   1, 0x04, 0x00000000 },
+       { 0x001160,  32, 0x04, 0x25e00040 },
+       { 0x001880,  32, 0x04, 0x00000000 },
+       { 0x000f84,   2, 0x04, 0x00000000 },
+       { 0x0017c8,   2, 0x04, 0x00000000 },
+       { 0x0017d0,   1, 0x04, 0x000000ff },
+       { 0x0017d4,   1, 0x04, 0xffffffff },
+       { 0x0017d8,   1, 0x04, 0x00000002 },
+       { 0x0017dc,   1, 0x04, 0x00000000 },
+       { 0x0015f4,   2, 0x04, 0x00000000 },
+       { 0x001434,   2, 0x04, 0x00000000 },
+       { 0x000d74,   1, 0x04, 0x00000000 },
+       { 0x0013a4,   1, 0x04, 0x00000000 },
+       { 0x001318,   1, 0x04, 0x00000001 },
+       { 0x001080,   2, 0x04, 0x00000000 },
+       { 0x001088,   2, 0x04, 0x00000001 },
+       { 0x001090,   1, 0x04, 0x00000000 },
+       { 0x001094,   1, 0x04, 0x00000001 },
+       { 0x001098,   1, 0x04, 0x00000000 },
+       { 0x00109c,   1, 0x04, 0x00000001 },
+       { 0x0010a0,   2, 0x04, 0x00000000 },
+       { 0x001644,   1, 0x04, 0x00000000 },
+       { 0x000748,   1, 0x04, 0x00000000 },
+       { 0x000de8,   1, 0x04, 0x00000000 },
+       { 0x001648,   1, 0x04, 0x00000000 },
+       { 0x0012a4,   1, 0x04, 0x00000000 },
+       { 0x001120,   4, 0x04, 0x00000000 },
+       { 0x001118,   1, 0x04, 0x00000000 },
+       { 0x00164c,   1, 0x04, 0x00000000 },
+       { 0x001658,   1, 0x04, 0x00000000 },
+       { 0x001910,   1, 0x04, 0x00000290 },
+       { 0x001518,   1, 0x04, 0x00000000 },
+       { 0x00165c,   1, 0x04, 0x00000001 },
+       { 0x001520,   1, 0x04, 0x00000000 },
+       { 0x001604,   1, 0x04, 0x00000000 },
+       { 0x001570,   1, 0x04, 0x00000000 },
+       { 0x0013b0,   2, 0x04, 0x3f800000 },
+       { 0x00020c,   1, 0x04, 0x00000000 },
+       { 0x001670,   1, 0x04, 0x30201000 },
+       { 0x001674,   1, 0x04, 0x70605040 },
+       { 0x001678,   1, 0x04, 0xb8a89888 },
+       { 0x00167c,   1, 0x04, 0xf8e8d8c8 },
+       { 0x00166c,   1, 0x04, 0x00000000 },
+       { 0x001680,   1, 0x04, 0x00ffff00 },
+       { 0x0012d0,   1, 0x04, 0x00000003 },
+       { 0x00113c,   1, 0x04, 0x00000000 },
+       { 0x0012d4,   1, 0x04, 0x00000002 },
+       { 0x001684,   2, 0x04, 0x00000000 },
+       { 0x000dac,   2, 0x04, 0x00001b02 },
+       { 0x000db4,   1, 0x04, 0x00000000 },
+       { 0x00168c,   1, 0x04, 0x00000000 },
+       { 0x0015bc,   1, 0x04, 0x00000000 },
+       { 0x00156c,   1, 0x04, 0x00000000 },
+       { 0x00187c,   1, 0x04, 0x00000000 },
+       { 0x001110,   1, 0x04, 0x00000001 },
+       { 0x000dc0,   3, 0x04, 0x00000000 },
+       { 0x000f40,   5, 0x04, 0x00000000 },
+       { 0x001234,   1, 0x04, 0x00000000 },
+       { 0x001690,   1, 0x04, 0x00000000 },
+       { 0x000790,   5, 0x04, 0x00000000 },
+       { 0x00077c,   1, 0x04, 0x00000000 },
+       { 0x001000,   1, 0x04, 0x00000010 },
+       { 0x0010fc,   1, 0x04, 0x00000000 },
+       { 0x001290,   1, 0x04, 0x00000000 },
+       { 0x000218,   1, 0x04, 0x00000010 },
+       { 0x0012d8,   1, 0x04, 0x00000000 },
+       { 0x0012dc,   1, 0x04, 0x00000010 },
+       { 0x000d94,   1, 0x04, 0x00000001 },
+       { 0x00155c,   2, 0x04, 0x00000000 },
+       { 0x001564,   1, 0x04, 0x00000fff },
+       { 0x001574,   2, 0x04, 0x00000000 },
+       { 0x00157c,   1, 0x04, 0x000fffff },
+       { 0x001354,   1, 0x04, 0x00000000 },
+       { 0x001610,   1, 0x04, 0x00000012 },
+       { 0x001608,   2, 0x04, 0x00000000 },
+       { 0x00260c,   1, 0x04, 0x00000000 },
+       { 0x0007ac,   1, 0x04, 0x00000000 },
+       { 0x00162c,   1, 0x04, 0x00000003 },
+       { 0x000210,   1, 0x04, 0x00000000 },
+       { 0x000320,   1, 0x04, 0x00000000 },
+       { 0x000324,   6, 0x04, 0x3f800000 },
+       { 0x000750,   1, 0x04, 0x00000000 },
+       { 0x000760,   1, 0x04, 0x39291909 },
+       { 0x000764,   1, 0x04, 0x79695949 },
+       { 0x000768,   1, 0x04, 0xb9a99989 },
+       { 0x00076c,   1, 0x04, 0xf9e9d9c9 },
+       { 0x000770,   1, 0x04, 0x30201000 },
+       { 0x000774,   1, 0x04, 0x70605040 },
+       { 0x000778,   1, 0x04, 0x00009080 },
+       { 0x000780,   1, 0x04, 0x39291909 },
+       { 0x000784,   1, 0x04, 0x79695949 },
+       { 0x000788,   1, 0x04, 0xb9a99989 },
+       { 0x00078c,   1, 0x04, 0xf9e9d9c9 },
+       { 0x0007d0,   1, 0x04, 0x30201000 },
+       { 0x0007d4,   1, 0x04, 0x70605040 },
+       { 0x0007d8,   1, 0x04, 0x00009080 },
+       { 0x001004,   1, 0x04, 0x00000000 },
+       { 0x001240,   8, 0x04, 0x00000000 },
+       { 0x00037c,   1, 0x04, 0x00000001 },
+       { 0x000740,   1, 0x04, 0x00000000 },
+       { 0x001148,   1, 0x04, 0x00000000 },
+       { 0x000fb4,   1, 0x04, 0x00000000 },
+       { 0x000fb8,   1, 0x04, 0x00000002 },
+       { 0x001130,   1, 0x04, 0x00000002 },
+       { 0x000fd4,   2, 0x04, 0x00000000 },
+       { 0x001030,   1, 0x04, 0x20181008 },
+       { 0x001034,   1, 0x04, 0x40383028 },
+       { 0x001038,   1, 0x04, 0x60585048 },
+       { 0x00103c,   1, 0x04, 0x80787068 },
+       { 0x000744,   1, 0x04, 0x00000000 },
+       { 0x002600,   1, 0x04, 0x00000000 },
+       { 0x001918,   1, 0x04, 0x00000000 },
+       { 0x00191c,   1, 0x04, 0x00000900 },
+       { 0x001920,   1, 0x04, 0x00000405 },
+       { 0x001308,   1, 0x04, 0x00000001 },
+       { 0x001924,   1, 0x04, 0x00000000 },
+       { 0x0013ac,   1, 0x04, 0x00000000 },
+       { 0x00192c,   1, 0x04, 0x00000001 },
+       { 0x00193c,   1, 0x04, 0x00002c1c },
+       { 0x000d7c,   1, 0x04, 0x00000000 },
+       { 0x000f8c,   1, 0x04, 0x00000000 },
+       { 0x0002c0,   1, 0x04, 0x00000001 },
+       { 0x001510,   1, 0x04, 0x00000000 },
+       { 0x001940,   1, 0x04, 0x00000000 },
+       { 0x000ff4,   2, 0x04, 0x00000000 },
+       { 0x00194c,   2, 0x04, 0x00000000 },
+       { 0x001968,   1, 0x04, 0x00000000 },
+       { 0x001590,   1, 0x04, 0x0000003f },
+       { 0x0007e8,   4, 0x04, 0x00000000 },
+       { 0x00196c,   1, 0x04, 0x00000011 },
+       { 0x0002e4,   1, 0x04, 0x0000b001 },
+       { 0x00036c,   2, 0x04, 0x00000000 },
+       { 0x00197c,   1, 0x04, 0x00000000 },
+       { 0x000fcc,   2, 0x04, 0x00000000 },
+       { 0x0002d8,   1, 0x04, 0x00000040 },
+       { 0x001980,   1, 0x04, 0x00000080 },
+       { 0x001504,   1, 0x04, 0x00000080 },
+       { 0x001984,   1, 0x04, 0x00000000 },
+       { 0x000f60,   1, 0x04, 0x00000000 },
+       { 0x000f64,   1, 0x04, 0x00400040 },
+       { 0x000f68,   1, 0x04, 0x00002212 },
+       { 0x000f6c,   1, 0x04, 0x08080203 },
+       { 0x001108,   1, 0x04, 0x00000008 },
+       { 0x000f70,   1, 0x04, 0x00080001 },
+       { 0x000ffc,   1, 0x04, 0x00000000 },
+       { 0x001134,   1, 0x04, 0x00000000 },
+       { 0x000f1c,   1, 0x04, 0x00000000 },
+       { 0x0011f8,   1, 0x04, 0x00000000 },
+       { 0x001138,   1, 0x04, 0x00000001 },
+       { 0x000300,   1, 0x04, 0x00000001 },
+       { 0x0013a8,   1, 0x04, 0x00000000 },
+       { 0x001224,   1, 0x04, 0x00000000 },
+       { 0x0012ec,   1, 0x04, 0x00000000 },
+       { 0x001310,   1, 0x04, 0x00000000 },
+       { 0x001314,   1, 0x04, 0x00000001 },
+       { 0x001380,   1, 0x04, 0x00000000 },
+       { 0x001384,   4, 0x04, 0x00000001 },
+       { 0x001394,   1, 0x04, 0x00000000 },
+       { 0x00139c,   1, 0x04, 0x00000000 },
+       { 0x001398,   1, 0x04, 0x00000000 },
+       { 0x001594,   1, 0x04, 0x00000000 },
+       { 0x001598,   4, 0x04, 0x00000001 },
+       { 0x000f54,   3, 0x04, 0x00000000 },
+       { 0x0019bc,   1, 0x04, 0x00000000 },
+       { 0x000f9c,   2, 0x04, 0x00000000 },
+       { 0x0012cc,   1, 0x04, 0x00000000 },
+       { 0x0012e8,   1, 0x04, 0x00000000 },
+       { 0x00130c,   1, 0x04, 0x00000001 },
+       { 0x001360,   8, 0x04, 0x00000000 },
+       { 0x00133c,   2, 0x04, 0x00000001 },
+       { 0x001344,   1, 0x04, 0x00000002 },
+       { 0x001348,   2, 0x04, 0x00000001 },
+       { 0x001350,   1, 0x04, 0x00000002 },
+       { 0x001358,   1, 0x04, 0x00000001 },
+       { 0x0012e4,   1, 0x04, 0x00000000 },
+       { 0x00131c,   4, 0x04, 0x00000000 },
+       { 0x0019c0,   1, 0x04, 0x00000000 },
+       { 0x001140,   1, 0x04, 0x00000000 },
+       { 0x000dd0,   1, 0x04, 0x00000000 },
+       { 0x000dd4,   1, 0x04, 0x00000001 },
+       { 0x0002f4,   1, 0x04, 0x00000000 },
+       { 0x0019c4,   1, 0x04, 0x00000000 },
+       { 0x0019c8,   1, 0x04, 0x00001500 },
+       { 0x00135c,   1, 0x04, 0x00000000 },
+       { 0x000f90,   1, 0x04, 0x00000000 },
+       { 0x0019e0,   8, 0x04, 0x00000001 },
+       { 0x0019cc,   1, 0x04, 0x00000001 },
+       { 0x00111c,   1, 0x04, 0x00000001 },
+       { 0x0015b8,   1, 0x04, 0x00000000 },
+       { 0x001a00,   1, 0x04, 0x00001111 },
+       { 0x001a04,   7, 0x04, 0x00000000 },
+       { 0x000d6c,   2, 0x04, 0xffff0000 },
+       { 0x0010f8,   1, 0x04, 0x00001010 },
+       { 0x000d80,   5, 0x04, 0x00000000 },
+       { 0x000da0,   1, 0x04, 0x00000000 },
+       { 0x0007a4,   2, 0x04, 0x00000000 },
+       { 0x001508,   1, 0x04, 0x80000000 },
+       { 0x00150c,   1, 0x04, 0x40000000 },
+       { 0x001668,   1, 0x04, 0x00000000 },
+       { 0x000318,   2, 0x04, 0x00000008 },
+       { 0x000d9c,   1, 0x04, 0x00000001 },
+       { 0x000f14,   1, 0x04, 0x00000000 },
+       { 0x000374,   1, 0x04, 0x00000000 },
+       { 0x000378,   1, 0x04, 0x0000000c },
+       { 0x0007dc,   1, 0x04, 0x00000000 },
+       { 0x00074c,   1, 0x04, 0x00000055 },
+       { 0x001420,   1, 0x04, 0x00000003 },
+       { 0x001008,   1, 0x04, 0x00000008 },
+       { 0x00100c,   1, 0x04, 0x00000040 },
+       { 0x001010,   1, 0x04, 0x0000012c },
+       { 0x000d60,   1, 0x04, 0x00000040 },
+       { 0x001018,   1, 0x04, 0x00000020 },
+       { 0x00101c,   1, 0x04, 0x00000001 },
+       { 0x001020,   1, 0x04, 0x00000020 },
+       { 0x001024,   1, 0x04, 0x00000001 },
+       { 0x001444,   3, 0x04, 0x00000000 },
+       { 0x000360,   1, 0x04, 0x20164010 },
+       { 0x000364,   1, 0x04, 0x00000020 },
+       { 0x000368,   1, 0x04, 0x00000000 },
+       { 0x000da8,   1, 0x04, 0x00000030 },
+       { 0x000de4,   1, 0x04, 0x00000000 },
+       { 0x000204,   1, 0x04, 0x00000006 },
+       { 0x0002d0,   1, 0x04, 0x003fffff },
+       { 0x001220,   1, 0x04, 0x00000005 },
+       { 0x000fdc,   1, 0x04, 0x00000000 },
+       { 0x000f98,   1, 0x04, 0x00400008 },
+       { 0x001284,   1, 0x04, 0x08000080 },
+       { 0x001450,   1, 0x04, 0x00400008 },
+       { 0x001454,   1, 0x04, 0x08000080 },
+       { 0x000214,   1, 0x04, 0x00000000 },
+       {}
+};
+
+const struct gf100_gr_pack
+gm200_grctx_pack_mthd[] = {
+       { gm200_grctx_init_b197_0, 0xb197 },
+       { gf100_grctx_init_902d_0, 0x902d },
+       {}
+};
+
+static const struct gf100_gr_init
+gm200_grctx_init_fe_0[] = {
+       { 0x404004,   8, 0x04, 0x00000000 },
+       { 0x404024,   1, 0x04, 0x0000e000 },
+       { 0x404028,   8, 0x04, 0x00000000 },
+       { 0x4040a8,   8, 0x04, 0x00000000 },
+       { 0x4040c8,   1, 0x04, 0xf801008f },
+       { 0x4040d0,   6, 0x04, 0x00000000 },
+       { 0x4040f8,   1, 0x04, 0x00000000 },
+       { 0x404100,  10, 0x04, 0x00000000 },
+       { 0x404130,   2, 0x04, 0x00000000 },
+       { 0x404150,   1, 0x04, 0x0000002e },
+       { 0x404154,   2, 0x04, 0x00000800 },
+       { 0x404164,   1, 0x04, 0x00000045 },
+       { 0x40417c,   2, 0x04, 0x00000000 },
+       { 0x404194,   1, 0x04, 0x33000700 },
+       { 0x4041a0,   4, 0x04, 0x00000000 },
+       { 0x4041c4,   2, 0x04, 0x00000000 },
+       {}
+};
+
+static const struct gf100_gr_init
+gm200_grctx_init_ds_0[] = {
+       { 0x405800,   1, 0x04, 0x8f8001bf },
+       { 0x405830,   1, 0x04, 0x04001000 },
+       { 0x405834,   1, 0x04, 0x08000000 },
+       { 0x405838,   1, 0x04, 0x00010000 },
+       { 0x405854,   1, 0x04, 0x00000000 },
+       { 0x405870,   4, 0x04, 0x00000001 },
+       { 0x405a00,   2, 0x04, 0x00000000 },
+       { 0x405a18,   1, 0x04, 0x00000000 },
+       { 0x405a1c,   1, 0x04, 0x000000ff },
+       {}
+};
+
+static const struct gf100_gr_init
+gm200_grctx_init_cwd_0[] = {
+       { 0x405b00,   1, 0x04, 0x00000000 },
+       { 0x405b10,   1, 0x04, 0x00001000 },
+       { 0x405b20,   1, 0x04, 0x04000000 },
+       { 0x405b60,   6, 0x04, 0x00000000 },
+       { 0x405ba0,   6, 0x04, 0x00000000 },
+       {}
+};
+
+static const struct gf100_gr_init
+gm200_grctx_init_pd_0[] = {
+       { 0x406020,   1, 0x04, 0x17410001 },
+       { 0x406028,   4, 0x04, 0x00000001 },
+       { 0x4064a8,   1, 0x04, 0x00000000 },
+       { 0x4064ac,   1, 0x04, 0x00003fff },
+       { 0x4064b0,   3, 0x04, 0x00000000 },
+       { 0x4064c0,   1, 0x04, 0x80400280 },
+       { 0x4064c4,   1, 0x04, 0x0400ffff },
+       { 0x4064c8,   1, 0x04, 0x01800780 },
+       { 0x4064cc,   9, 0x04, 0x00000000 },
+       { 0x4064fc,   1, 0x04, 0x0000022a },
+       { 0x406500,   1, 0x04, 0x00000000 },
+       {}
+};
+
+static const struct gf100_gr_init
+gm200_grctx_init_be_0[] = {
+       { 0x408800,   1, 0x04, 0x32882a3c },
+       { 0x408804,   1, 0x04, 0x00000040 },
+       { 0x408808,   1, 0x04, 0x1003e005 },
+       { 0x408840,   1, 0x04, 0x00000e0b },
+       { 0x408900,   1, 0x04, 0xb080b801 },
+       { 0x408904,   1, 0x04, 0x63038001 },
+       { 0x408908,   1, 0x04, 0x12c8502f },
+       { 0x408980,   1, 0x04, 0x0000011d },
+       {}
+};
+
+const struct gf100_gr_pack
+gm200_grctx_pack_hub[] = {
+       { gf100_grctx_init_main_0 },
+       { gm200_grctx_init_fe_0 },
+       { gk110_grctx_init_pri_0 },
+       { gk104_grctx_init_memfmt_0 },
+       { gm200_grctx_init_ds_0 },
+       { gm200_grctx_init_cwd_0 },
+       { gm200_grctx_init_pd_0 },
+       { gk208_grctx_init_rstr2d_0 },
+       { gk104_grctx_init_scc_0 },
+       { gm200_grctx_init_be_0 },
+       {}
+};
+
+const struct gf100_gr_init
+gm200_grctx_init_prop_0[] = {
+       { 0x418400,   1, 0x04, 0x38e01e00 },
+       { 0x418404,   1, 0x04, 0x70001fff },
+       { 0x41840c,   1, 0x04, 0x20001008 },
+       { 0x418410,   2, 0x04, 0x0fff0fff },
+       { 0x418418,   1, 0x04, 0x07ff07ff },
+       { 0x41841c,   1, 0x04, 0x3feffbff },
+       { 0x418450,   6, 0x04, 0x00000000 },
+       { 0x418468,   1, 0x04, 0x00000001 },
+       { 0x41846c,   2, 0x04, 0x00000000 },
+       {}
+};
+
+static const struct gf100_gr_init
+gm200_grctx_init_gpc_unk_1[] = {
+       { 0x418600,   1, 0x04, 0x0000007f },
+       { 0x418684,   1, 0x04, 0x0000001f },
+       { 0x418700,   1, 0x04, 0x00000002 },
+       { 0x418704,   1, 0x04, 0x00000080 },
+       { 0x418708,   1, 0x04, 0x40000000 },
+       { 0x41870c,   2, 0x04, 0x00000000 },
+       { 0x418728,   1, 0x04, 0x00010000 },
+       {}
+};
+
+const struct gf100_gr_init
+gm200_grctx_init_setup_0[] = {
+       { 0x418800,   1, 0x04, 0x7006863a },
+       { 0x418808,   1, 0x04, 0x00000000 },
+       { 0x418810,   1, 0x04, 0x00000000 },
+       { 0x418828,   1, 0x04, 0x00000044 },
+       { 0x418830,   1, 0x04, 0x10000001 },
+       { 0x4188d8,   1, 0x04, 0x00000008 },
+       { 0x4188e0,   1, 0x04, 0x01000000 },
+       { 0x4188e8,   5, 0x04, 0x00000000 },
+       { 0x4188fc,   1, 0x04, 0x20100058 },
+       {}
+};
+
+const struct gf100_gr_init
+gm200_grctx_init_gpm_0[] = {
+       { 0x418c10,   8, 0x04, 0x00000000 },
+       { 0x418c40,   1, 0x04, 0xffffffff },
+       { 0x418c6c,   1, 0x04, 0x00000001 },
+       { 0x418c80,   1, 0x04, 0x20200000 },
+       {}
+};
+
+const struct gf100_gr_init
+gm200_grctx_init_gpc_unk_2[] = {
+       { 0x418e00,   1, 0x04, 0x90040000 },
+       { 0x418e24,   1, 0x04, 0x00000000 },
+       { 0x418e28,   1, 0x04, 0x00000030 },
+       { 0x418e2c,   1, 0x04, 0x00000100 },
+       { 0x418e30,   3, 0x04, 0x00000000 },
+       { 0x418e40,  22, 0x04, 0x00000000 },
+       { 0x418ea0,  12, 0x04, 0x00000000 },
+       {}
+};
+
+static const struct gf100_gr_pack
+gm200_grctx_pack_gpc[] = {
+       { gm107_grctx_init_gpc_unk_0 },
+       { gm200_grctx_init_prop_0 },
+       { gm200_grctx_init_gpc_unk_1 },
+       { gm200_grctx_init_setup_0 },
+       { gf100_grctx_init_zcull_0 },
+       { gk208_grctx_init_crstr_0 },
+       { gm200_grctx_init_gpm_0 },
+       { gm200_grctx_init_gpc_unk_2 },
+       { gf100_grctx_init_gcc_0 },
+       {}
+};
+
+static const struct gf100_gr_init
+gm200_grctx_init_pe_0[] = {
+       { 0x419848,   1, 0x04, 0x00000000 },
+       { 0x419864,   1, 0x04, 0x00000029 },
+       { 0x419888,   1, 0x04, 0x00000000 },
+       {}
+};
+
+static const struct gf100_gr_init
+gm200_grctx_init_tex_0[] = {
+       { 0x419a00,   1, 0x04, 0x000100f0 },
+       { 0x419a04,   1, 0x04, 0x00000005 },
+       { 0x419a08,   1, 0x04, 0x00000621 },
+       { 0x419a0c,   1, 0x04, 0x00320000 },
+       { 0x419a10,   1, 0x04, 0x00000000 },
+       { 0x419a14,   1, 0x04, 0x00000200 },
+       { 0x419a1c,   1, 0x04, 0x0010c000 },
+       { 0x419a20,   1, 0x04, 0x20008a00 },
+       { 0x419a30,   1, 0x04, 0x00000001 },
+       { 0x419a3c,   1, 0x04, 0x0000181e },
+       { 0x419ac4,   1, 0x04, 0x00000000 },
+       {}
+};
+
+static const struct gf100_gr_init
+gm200_grctx_init_mpc_0[] = {
+       { 0x419c00,   1, 0x04, 0x0000009a },
+       { 0x419c04,   1, 0x04, 0x80000bd6 },
+       { 0x419c08,   1, 0x04, 0x00000002 },
+       { 0x419c20,   1, 0x04, 0x00000000 },
+       { 0x419c24,   1, 0x04, 0x00084210 },
+       { 0x419c28,   1, 0x04, 0x3efbefbe },
+       { 0x419c2c,   1, 0x04, 0x00000000 },
+       { 0x419c34,   1, 0x04, 0x71ff1ff3 },
+       { 0x419c3c,   1, 0x04, 0x00001919 },
+       { 0x419c50,   1, 0x04, 0x00000005 },
+       {}
+};
+
+static const struct gf100_gr_init
+gm200_grctx_init_l1c_0[] = {
+       { 0x419c84,   1, 0x04, 0x0000003e },
+       { 0x419c90,   1, 0x04, 0x0000000a },
+       {}
+};
+
+static const struct gf100_gr_init
+gm200_grctx_init_sm_0[] = {
+       { 0x419e04,   3, 0x04, 0x00000000 },
+       { 0x419e10,   1, 0x04, 0x00001c02 },
+       { 0x419e44,   1, 0x04, 0x00d3eff2 },
+       { 0x419e48,   1, 0x04, 0x00000000 },
+       { 0x419e4c,   1, 0x04, 0x0000007f },
+       { 0x419e50,   1, 0x04, 0x00000000 },
+       { 0x419e58,   6, 0x04, 0x00000000 },
+       { 0x419e74,  10, 0x04, 0x00000000 },
+       { 0x419eac,   1, 0x04, 0x0001cf8b },
+       { 0x419eb0,   1, 0x04, 0x00030300 },
+       { 0x419eb8,   1, 0x04, 0x40000000 },
+       { 0x419ef0,  24, 0x04, 0x00000000 },
+       { 0x419f68,   2, 0x04, 0x00000000 },
+       { 0x419f70,   1, 0x04, 0x00000020 },
+       { 0x419f78,   1, 0x04, 0x00010beb },
+       { 0x419f7c,   1, 0x04, 0x00000000 },
+       {}
+};
+
+const struct gf100_gr_pack
+gm200_grctx_pack_tpc[] = {
+       { gm200_grctx_init_pe_0 },
+       { gm200_grctx_init_tex_0 },
+       { gm200_grctx_init_mpc_0 },
+       { gm200_grctx_init_l1c_0 },
+       { gm200_grctx_init_sm_0 },
+       {}
+};
+
+static const struct gf100_gr_init
+gm200_grctx_init_pes_0[] = {
+       { 0x41be24,   1, 0x04, 0x0000000e },
+       {}
+};
+
+static const struct gf100_gr_init
+gm200_grctx_init_cbm_0[] = {
+       { 0x41bec0,   1, 0x04, 0x00000000 },
+       { 0x41bec4,   1, 0x04, 0x01030000 },
+       { 0x41bee4,   1, 0x04, 0x00000000 },
+       { 0x41bef0,   1, 0x04, 0x000003ff },
+       { 0x41bef4,   2, 0x04, 0x00000000 },
+       {}
+};
+
+const struct gf100_gr_pack
+gm200_grctx_pack_ppc[] = {
+       { gm200_grctx_init_pes_0 },
+       { gm200_grctx_init_cbm_0 },
+       { gm107_grctx_init_wwdx_0 },
+       {}
+};
+
+/*******************************************************************************
+ * PGRAPH context implementation
+ ******************************************************************************/
+
+void
+gm200_grctx_generate_tpcid(struct gf100_gr *gr)
+{
+       struct nvkm_device *device = gr->base.engine.subdev.device;
+       int gpc, tpc, id;
+
+       for (tpc = 0, id = 0; tpc < 4; tpc++) {
+               for (gpc = 0; gpc < gr->gpc_nr; gpc++) {
+                       if (tpc < gr->tpc_nr[gpc]) {
+                               nvkm_wr32(device, TPC_UNIT(gpc, tpc, 0x698), id);
+                               nvkm_wr32(device, GPC_UNIT(gpc, 0x0c10 + tpc * 4), id);
+                               nvkm_wr32(device, TPC_UNIT(gpc, tpc, 0x088), id);
+                               id++;
+                       }
+               }
+       }
+}
+
+static void
+gm200_grctx_generate_rop_active_fbps(struct gf100_gr *gr)
+{
+       struct nvkm_device *device = gr->base.engine.subdev.device;
+       const u32 fbp_count = nvkm_rd32(device, 0x12006c);
+       nvkm_mask(device, 0x408850, 0x0000000f, fbp_count); /* zrop */
+       nvkm_mask(device, 0x408958, 0x0000000f, fbp_count); /* crop */
+}
+
+void
+gm200_grctx_generate_405b60(struct gf100_gr *gr)
+{
+       struct nvkm_device *device = gr->base.engine.subdev.device;
+       const u32 dist_nr = DIV_ROUND_UP(gr->tpc_total, 4);
+       u32 dist[TPC_MAX / 4] = {};
+       u32 gpcs[GPC_MAX] = {};
+       u8  tpcnr[GPC_MAX];
+       int tpc, gpc, i;
+
+       memcpy(tpcnr, gr->tpc_nr, sizeof(gr->tpc_nr));
+
+       /* won't result in the same distribution as the binary driver where
+        * some of the gpcs have more tpcs than others, but this shall do
+        * for the moment.  the code for earlier gpus has this issue too.
+        */
+       for (gpc = -1, i = 0; i < gr->tpc_total; i++) {
+               do {
+                       gpc = (gpc + 1) % gr->gpc_nr;
+               } while(!tpcnr[gpc]);
+               tpc = gr->tpc_nr[gpc] - tpcnr[gpc]--;
+
+               dist[i / 4] |= ((gpc << 4) | tpc) << ((i % 4) * 8);
+               gpcs[gpc] |= i << (tpc * 8);
+       }
+
+       for (i = 0; i < dist_nr; i++)
+               nvkm_wr32(device, 0x405b60 + (i * 4), dist[i]);
+       for (i = 0; i < gr->gpc_nr; i++)
+               nvkm_wr32(device, 0x405ba0 + (i * 4), gpcs[i]);
+}
+
+void
+gm200_grctx_generate_main(struct gf100_gr *gr, struct gf100_grctx *info)
+{
+       struct nvkm_device *device = gr->base.engine.subdev.device;
+       const struct gf100_grctx_func *grctx = gr->func->grctx;
+       u32 tmp;
+       int i;
+
+       gf100_gr_mmio(gr, grctx->hub);
+       gf100_gr_mmio(gr, grctx->gpc);
+       gf100_gr_mmio(gr, grctx->zcull);
+       gf100_gr_mmio(gr, grctx->tpc);
+       gf100_gr_mmio(gr, grctx->ppc);
+
+       nvkm_wr32(device, 0x404154, 0x00000000);
+
+       grctx->bundle(info);
+       grctx->pagepool(info);
+       grctx->attrib(info);
+       grctx->unkn(gr);
+
+       gm200_grctx_generate_tpcid(gr);
+       gf100_grctx_generate_r406028(gr);
+       gk104_grctx_generate_r418bb8(gr);
+
+       for (i = 0; i < 8; i++)
+               nvkm_wr32(device, 0x4064d0 + (i * 0x04), 0x00000000);
+       nvkm_wr32(device, 0x406500, 0x00000000);
+
+       nvkm_wr32(device, 0x405b00, (gr->tpc_total << 8) | gr->gpc_nr);
+
+       gm200_grctx_generate_rop_active_fbps(gr);
+
+       for (tmp = 0, i = 0; i < gr->gpc_nr; i++)
+               tmp |= ((1 << gr->tpc_nr[i]) - 1) << (i * 4);
+       nvkm_wr32(device, 0x4041c4, tmp);
+
+       gm200_grctx_generate_405b60(gr);
+
+       gf100_gr_icmd(gr, grctx->icmd);
+       nvkm_wr32(device, 0x404154, 0x00000800);
+       gf100_gr_mthd(gr, grctx->mthd);
+
+       nvkm_mask(device, 0x418e94, 0xffffffff, 0xc4230000);
+       nvkm_mask(device, 0x418e4c, 0xffffffff, 0x70000000);
+}
+
+const struct gf100_grctx_func
+gm200_grctx = {
+       .main  = gm200_grctx_generate_main,
+       .unkn  = gk104_grctx_generate_unkn,
+       .hub   = gm200_grctx_pack_hub,
+       .gpc   = gm200_grctx_pack_gpc,
+       .zcull = gf100_grctx_pack_zcull,
+       .tpc   = gm200_grctx_pack_tpc,
+       .ppc   = gm200_grctx_pack_ppc,
+       .icmd  = gm200_grctx_pack_icmd,
+       .mthd  = gm200_grctx_pack_mthd,
+       .bundle = gm107_grctx_generate_bundle,
+       .bundle_size = 0x3000,
+       .bundle_min_gpm_fifo_depth = 0x180,
+       .bundle_token_limit = 0x780,
+       .pagepool = gm107_grctx_generate_pagepool,
+       .pagepool_size = 0x20000,
+       .attrib = gm107_grctx_generate_attrib,
+       .attrib_nr_max = 0x600,
+       .attrib_nr = 0x400,
+       .alpha_nr_max = 0x1800,
+       .alpha_nr = 0x1000,
+};
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgm204.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgm204.c
deleted file mode 100644 (file)
index 170cbfd..0000000
+++ /dev/null
@@ -1,1049 +0,0 @@
-/*
- * Copyright 2015 Red Hat Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- *
- * Authors: Ben Skeggs <bskeggs@redhat.com>
- */
-#include "ctxgf100.h"
-
-/*******************************************************************************
- * PGRAPH context register lists
- ******************************************************************************/
-
-static const struct gf100_gr_init
-gm204_grctx_init_icmd_0[] = {
-       { 0x001000,   1, 0x01, 0x00000002 },
-       { 0x0006aa,   1, 0x01, 0x00000001 },
-       { 0x0006ad,   2, 0x01, 0x00000100 },
-       { 0x0006b1,   1, 0x01, 0x00000011 },
-       { 0x00078c,   1, 0x01, 0x00000008 },
-       { 0x000792,   1, 0x01, 0x00000001 },
-       { 0x000794,   3, 0x01, 0x00000001 },
-       { 0x000797,   1, 0x01, 0x000000cf },
-       { 0x00079a,   1, 0x01, 0x00000002 },
-       { 0x0007a1,   1, 0x01, 0x00000001 },
-       { 0x0007a3,   3, 0x01, 0x00000001 },
-       { 0x000831,   1, 0x01, 0x00000004 },
-       { 0x01e100,   1, 0x01, 0x00000001 },
-       { 0x001000,   1, 0x01, 0x00000008 },
-       { 0x000039,   3, 0x01, 0x00000000 },
-       { 0x000380,   1, 0x01, 0x00000001 },
-       { 0x000366,   2, 0x01, 0x00000000 },
-       { 0x000368,   1, 0x01, 0x00000fff },
-       { 0x000370,   2, 0x01, 0x00000000 },
-       { 0x000372,   1, 0x01, 0x000fffff },
-       { 0x000374,   1, 0x01, 0x00000100 },
-       { 0x000818,   8, 0x01, 0x00000000 },
-       { 0x000848,  16, 0x01, 0x00000000 },
-       { 0x000738,   1, 0x01, 0x00000000 },
-       { 0x000b07,   1, 0x01, 0x00000002 },
-       { 0x000b08,   2, 0x01, 0x00000100 },
-       { 0x000b0a,   1, 0x01, 0x00000001 },
-       { 0x000a04,   1, 0x01, 0x000000ff },
-       { 0x000a0b,   1, 0x01, 0x00000040 },
-       { 0x00097f,   1, 0x01, 0x00000100 },
-       { 0x000a02,   1, 0x01, 0x00000001 },
-       { 0x000809,   1, 0x01, 0x00000007 },
-       { 0x00c221,   1, 0x01, 0x00000040 },
-       { 0x00c401,   1, 0x01, 0x00000001 },
-       { 0x00c402,   1, 0x01, 0x00010001 },
-       { 0x00c403,   2, 0x01, 0x00000001 },
-       { 0x00c40e,   1, 0x01, 0x00000020 },
-       { 0x01e100,   1, 0x01, 0x00000001 },
-       { 0x001000,   1, 0x01, 0x00000001 },
-       { 0x000b07,   1, 0x01, 0x00000002 },
-       { 0x000b08,   2, 0x01, 0x00000100 },
-       { 0x000b0a,   1, 0x01, 0x00000001 },
-       { 0x01e100,   1, 0x01, 0x00000001 },
-       { 0x001000,   1, 0x01, 0x00000004 },
-       { 0x000039,   3, 0x01, 0x00000000 },
-       { 0x0000a9,   1, 0x01, 0x0000ffff },
-       { 0x000038,   1, 0x01, 0x0fac6881 },
-       { 0x00003d,   1, 0x01, 0x00000001 },
-       { 0x0000e8,   8, 0x01, 0x00000400 },
-       { 0x000078,   8, 0x01, 0x00000300 },
-       { 0x000050,   1, 0x01, 0x00000011 },
-       { 0x000058,   8, 0x01, 0x00000008 },
-       { 0x000208,   8, 0x01, 0x00000001 },
-       { 0x000081,   1, 0x01, 0x00000001 },
-       { 0x000085,   1, 0x01, 0x00000004 },
-       { 0x000088,   1, 0x01, 0x00000400 },
-       { 0x000090,   1, 0x01, 0x00000300 },
-       { 0x000098,   1, 0x01, 0x00001001 },
-       { 0x0000e3,   1, 0x01, 0x00000001 },
-       { 0x0000da,   1, 0x01, 0x00000001 },
-       { 0x0000b4,   4, 0x01, 0x88888888 },
-       { 0x0000f8,   1, 0x01, 0x00000003 },
-       { 0x0000fa,   1, 0x01, 0x00000001 },
-       { 0x0000b1,   2, 0x01, 0x00000001 },
-       { 0x00009f,   4, 0x01, 0x0000ffff },
-       { 0x0000a8,   1, 0x01, 0x0000ffff },
-       { 0x0000ad,   1, 0x01, 0x0000013e },
-       { 0x0000e1,   1, 0x01, 0x00000010 },
-       { 0x000290,  16, 0x01, 0x00000000 },
-       { 0x0003b0,  16, 0x01, 0x00000000 },
-       { 0x0002a0,  16, 0x01, 0x00000000 },
-       { 0x000420,  16, 0x01, 0x00000000 },
-       { 0x0002b0,  16, 0x01, 0x00000000 },
-       { 0x000430,  16, 0x01, 0x00000000 },
-       { 0x0002c0,  16, 0x01, 0x00000000 },
-       { 0x0004d0,  16, 0x01, 0x00000000 },
-       { 0x000720,  16, 0x01, 0x00000000 },
-       { 0x0008c0,  16, 0x01, 0x00000000 },
-       { 0x000890,  16, 0x01, 0x00000000 },
-       { 0x0008e0,  16, 0x01, 0x00000000 },
-       { 0x0008a0,  16, 0x01, 0x00000000 },
-       { 0x0008f0,  16, 0x01, 0x00000000 },
-       { 0x00094c,   1, 0x01, 0x000000ff },
-       { 0x00094d,   1, 0x01, 0xffffffff },
-       { 0x00094e,   1, 0x01, 0x00000002 },
-       { 0x0002f2,   2, 0x01, 0x00000001 },
-       { 0x0002f5,   1, 0x01, 0x00000001 },
-       { 0x0002f7,   1, 0x01, 0x00000001 },
-       { 0x000303,   1, 0x01, 0x00000001 },
-       { 0x0002e6,   1, 0x01, 0x00000001 },
-       { 0x000466,   1, 0x01, 0x00000052 },
-       { 0x000301,   1, 0x01, 0x3f800000 },
-       { 0x000304,   1, 0x01, 0x30201000 },
-       { 0x000305,   1, 0x01, 0x70605040 },
-       { 0x000306,   1, 0x01, 0xb8a89888 },
-       { 0x000307,   1, 0x01, 0xf8e8d8c8 },
-       { 0x00030a,   1, 0x01, 0x00ffff00 },
-       { 0x00030b,   1, 0x01, 0x0000001a },
-       { 0x00030c,   1, 0x01, 0x00000001 },
-       { 0x000318,   1, 0x01, 0x00000001 },
-       { 0x000340,   1, 0x01, 0x00000000 },
-       { 0x00037d,   1, 0x01, 0x00000006 },
-       { 0x0003a0,   1, 0x01, 0x00000002 },
-       { 0x0003aa,   1, 0x01, 0x00000001 },
-       { 0x0003a9,   1, 0x01, 0x00000001 },
-       { 0x000380,   1, 0x01, 0x00000001 },
-       { 0x000383,   1, 0x01, 0x00000011 },
-       { 0x000360,   1, 0x01, 0x00000040 },
-       { 0x000366,   2, 0x01, 0x00000000 },
-       { 0x000368,   1, 0x01, 0x00000fff },
-       { 0x000370,   2, 0x01, 0x00000000 },
-       { 0x000372,   1, 0x01, 0x000fffff },
-       { 0x000374,   1, 0x01, 0x00000100 },
-       { 0x00037a,   1, 0x01, 0x00000012 },
-       { 0x000619,   1, 0x01, 0x00000003 },
-       { 0x000811,   1, 0x01, 0x00000003 },
-       { 0x000812,   1, 0x01, 0x00000004 },
-       { 0x000813,   1, 0x01, 0x00000006 },
-       { 0x000814,   1, 0x01, 0x00000008 },
-       { 0x000815,   1, 0x01, 0x0000000b },
-       { 0x000800,   6, 0x01, 0x00000001 },
-       { 0x000632,   1, 0x01, 0x00000001 },
-       { 0x000633,   1, 0x01, 0x00000002 },
-       { 0x000634,   1, 0x01, 0x00000003 },
-       { 0x000635,   1, 0x01, 0x00000004 },
-       { 0x000654,   1, 0x01, 0x3f800000 },
-       { 0x000657,   1, 0x01, 0x3f800000 },
-       { 0x000655,   2, 0x01, 0x3f800000 },
-       { 0x0006cd,   1, 0x01, 0x3f800000 },
-       { 0x0007f5,   1, 0x01, 0x3f800000 },
-       { 0x0007dc,   1, 0x01, 0x39291909 },
-       { 0x0007dd,   1, 0x01, 0x79695949 },
-       { 0x0007de,   1, 0x01, 0xb9a99989 },
-       { 0x0007df,   1, 0x01, 0xf9e9d9c9 },
-       { 0x0007e8,   1, 0x01, 0x00003210 },
-       { 0x0007e9,   1, 0x01, 0x00007654 },
-       { 0x0007ea,   1, 0x01, 0x00000098 },
-       { 0x0007ec,   1, 0x01, 0x39291909 },
-       { 0x0007ed,   1, 0x01, 0x79695949 },
-       { 0x0007ee,   1, 0x01, 0xb9a99989 },
-       { 0x0007ef,   1, 0x01, 0xf9e9d9c9 },
-       { 0x0007f0,   1, 0x01, 0x00003210 },
-       { 0x0007f1,   1, 0x01, 0x00007654 },
-       { 0x0007f2,   1, 0x01, 0x00000098 },
-       { 0x0005a5,   1, 0x01, 0x00000001 },
-       { 0x0005aa,   1, 0x01, 0x00000002 },
-       { 0x0005cb,   1, 0x01, 0x00000004 },
-       { 0x0005d0,   1, 0x01, 0x20181008 },
-       { 0x0005d1,   1, 0x01, 0x40383028 },
-       { 0x0005d2,   1, 0x01, 0x60585048 },
-       { 0x0005d3,   1, 0x01, 0x80787068 },
-       { 0x000980, 128, 0x01, 0x00000000 },
-       { 0x000468,   1, 0x01, 0x00000004 },
-       { 0x00046c,   1, 0x01, 0x00000001 },
-       { 0x000470,  96, 0x01, 0x00000000 },
-       { 0x0005e0,  16, 0x01, 0x00000d10 },
-       { 0x000510,  16, 0x01, 0x3f800000 },
-       { 0x000520,   1, 0x01, 0x000002b6 },
-       { 0x000529,   1, 0x01, 0x00000001 },
-       { 0x000530,  16, 0x01, 0xffff0000 },
-       { 0x000550,  32, 0x01, 0xffff0000 },
-       { 0x000585,   1, 0x01, 0x0000003f },
-       { 0x000576,   1, 0x01, 0x00000003 },
-       { 0x00057b,   1, 0x01, 0x00000059 },
-       { 0x000586,   1, 0x01, 0x00000040 },
-       { 0x000582,   2, 0x01, 0x00000080 },
-       { 0x000595,   1, 0x01, 0x00400040 },
-       { 0x000596,   1, 0x01, 0x00000492 },
-       { 0x000597,   1, 0x01, 0x08080203 },
-       { 0x0005ad,   1, 0x01, 0x00000008 },
-       { 0x000598,   1, 0x01, 0x00020001 },
-       { 0x0005d4,   1, 0x01, 0x00000001 },
-       { 0x0005c2,   1, 0x01, 0x00000001 },
-       { 0x000638,   2, 0x01, 0x00000001 },
-       { 0x00063a,   1, 0x01, 0x00000002 },
-       { 0x00063b,   2, 0x01, 0x00000001 },
-       { 0x00063d,   1, 0x01, 0x00000002 },
-       { 0x00063e,   1, 0x01, 0x00000001 },
-       { 0x0008b8,   8, 0x01, 0x00000001 },
-       { 0x000900,   8, 0x01, 0x00000001 },
-       { 0x000908,   8, 0x01, 0x00000002 },
-       { 0x000910,  16, 0x01, 0x00000001 },
-       { 0x000920,   8, 0x01, 0x00000002 },
-       { 0x000928,   8, 0x01, 0x00000001 },
-       { 0x000662,   1, 0x01, 0x00000001 },
-       { 0x000648,   9, 0x01, 0x00000001 },
-       { 0x000674,   1, 0x01, 0x00000001 },
-       { 0x000658,   1, 0x01, 0x0000000f },
-       { 0x0007ff,   1, 0x01, 0x0000000a },
-       { 0x00066a,   1, 0x01, 0x40000000 },
-       { 0x00066b,   1, 0x01, 0x10000000 },
-       { 0x00066c,   2, 0x01, 0xffff0000 },
-       { 0x0007af,   2, 0x01, 0x00000008 },
-       { 0x0007f6,   1, 0x01, 0x00000001 },
-       { 0x0006b2,   1, 0x01, 0x00000055 },
-       { 0x0007ad,   1, 0x01, 0x00000003 },
-       { 0x000971,   1, 0x01, 0x00000008 },
-       { 0x000972,   1, 0x01, 0x00000040 },
-       { 0x000973,   1, 0x01, 0x0000012c },
-       { 0x00097c,   1, 0x01, 0x00000040 },
-       { 0x000975,   1, 0x01, 0x00000020 },
-       { 0x000976,   1, 0x01, 0x00000001 },
-       { 0x000977,   1, 0x01, 0x00000020 },
-       { 0x000978,   1, 0x01, 0x00000001 },
-       { 0x000957,   1, 0x01, 0x00000003 },
-       { 0x00095e,   1, 0x01, 0x20164010 },
-       { 0x00095f,   1, 0x01, 0x00000020 },
-       { 0x000a0d,   1, 0x01, 0x00000006 },
-       { 0x00097d,   1, 0x01, 0x0000000c },
-       { 0x000683,   1, 0x01, 0x00000006 },
-       { 0x000687,   1, 0x01, 0x003fffff },
-       { 0x0006a0,   1, 0x01, 0x00000005 },
-       { 0x000840,   1, 0x01, 0x00400008 },
-       { 0x000841,   1, 0x01, 0x08000080 },
-       { 0x000842,   1, 0x01, 0x00400008 },
-       { 0x000843,   1, 0x01, 0x08000080 },
-       { 0x000818,   8, 0x01, 0x00000000 },
-       { 0x000848,  16, 0x01, 0x00000000 },
-       { 0x000738,   1, 0x01, 0x00000000 },
-       { 0x0006aa,   1, 0x01, 0x00000001 },
-       { 0x0006ab,   1, 0x01, 0x00000002 },
-       { 0x0006ac,   1, 0x01, 0x00000080 },
-       { 0x0006ad,   2, 0x01, 0x00000100 },
-       { 0x0006b1,   1, 0x01, 0x00000011 },
-       { 0x0006bb,   1, 0x01, 0x000000cf },
-       { 0x0006ce,   1, 0x01, 0x2a712488 },
-       { 0x000739,   1, 0x01, 0x4085c000 },
-       { 0x00073a,   1, 0x01, 0x00000080 },
-       { 0x000786,   1, 0x01, 0x80000100 },
-       { 0x00073c,   1, 0x01, 0x00010100 },
-       { 0x00073d,   1, 0x01, 0x02800000 },
-       { 0x000787,   1, 0x01, 0x000000cf },
-       { 0x00078c,   1, 0x01, 0x00000008 },
-       { 0x000792,   1, 0x01, 0x00000001 },
-       { 0x000794,   3, 0x01, 0x00000001 },
-       { 0x000797,   1, 0x01, 0x000000cf },
-       { 0x000836,   1, 0x01, 0x00000001 },
-       { 0x00079a,   1, 0x01, 0x00000002 },
-       { 0x000833,   1, 0x01, 0x04444480 },
-       { 0x0007a1,   1, 0x01, 0x00000001 },
-       { 0x0007a3,   3, 0x01, 0x00000001 },
-       { 0x000831,   1, 0x01, 0x00000004 },
-       { 0x000b07,   1, 0x01, 0x00000002 },
-       { 0x000b08,   2, 0x01, 0x00000100 },
-       { 0x000b0a,   1, 0x01, 0x00000001 },
-       { 0x000a04,   1, 0x01, 0x000000ff },
-       { 0x000a0b,   1, 0x01, 0x00000040 },
-       { 0x00097f,   1, 0x01, 0x00000100 },
-       { 0x000a02,   1, 0x01, 0x00000001 },
-       { 0x000809,   1, 0x01, 0x00000007 },
-       { 0x00c221,   1, 0x01, 0x00000040 },
-       { 0x00c1b0,   8, 0x01, 0x0000000f },
-       { 0x00c1b8,   1, 0x01, 0x0fac6881 },
-       { 0x00c1b9,   1, 0x01, 0x00fac688 },
-       { 0x00c401,   1, 0x01, 0x00000001 },
-       { 0x00c402,   1, 0x01, 0x00010001 },
-       { 0x00c403,   2, 0x01, 0x00000001 },
-       { 0x00c40e,   1, 0x01, 0x00000020 },
-       { 0x00c413,   4, 0x01, 0x88888888 },
-       { 0x00c423,   1, 0x01, 0x0000ff00 },
-       { 0x00c420,   1, 0x01, 0x00880101 },
-       { 0x01e100,   1, 0x01, 0x00000001 },
-       {}
-};
-
-const struct gf100_gr_pack
-gm204_grctx_pack_icmd[] = {
-       { gm204_grctx_init_icmd_0 },
-       {}
-};
-
-static const struct gf100_gr_init
-gm204_grctx_init_b197_0[] = {
-       { 0x000800,   8, 0x40, 0x00000000 },
-       { 0x000804,   8, 0x40, 0x00000000 },
-       { 0x000808,   8, 0x40, 0x00000400 },
-       { 0x00080c,   8, 0x40, 0x00000300 },
-       { 0x000810,   1, 0x04, 0x000000cf },
-       { 0x000850,   7, 0x40, 0x00000000 },
-       { 0x000814,   8, 0x40, 0x00000040 },
-       { 0x000818,   8, 0x40, 0x00000001 },
-       { 0x00081c,   8, 0x40, 0x00000000 },
-       { 0x000820,   8, 0x40, 0x00000000 },
-       { 0x001c00,  16, 0x10, 0x00000000 },
-       { 0x001c04,  16, 0x10, 0x00000000 },
-       { 0x001c08,  16, 0x10, 0x00000000 },
-       { 0x001c0c,  16, 0x10, 0x00000000 },
-       { 0x001d00,  16, 0x10, 0x00000000 },
-       { 0x001d04,  16, 0x10, 0x00000000 },
-       { 0x001d08,  16, 0x10, 0x00000000 },
-       { 0x001d0c,  16, 0x10, 0x00000000 },
-       { 0x001f00,  16, 0x08, 0x00000000 },
-       { 0x001f04,  16, 0x08, 0x00000000 },
-       { 0x001f80,  16, 0x08, 0x00000000 },
-       { 0x001f84,  16, 0x08, 0x00000000 },
-       { 0x002000,   1, 0x04, 0x00000000 },
-       { 0x002040,   1, 0x04, 0x00000011 },
-       { 0x002080,   1, 0x04, 0x00000020 },
-       { 0x0020c0,   1, 0x04, 0x00000030 },
-       { 0x002100,   1, 0x04, 0x00000040 },
-       { 0x002140,   1, 0x04, 0x00000051 },
-       { 0x00200c,   6, 0x40, 0x00000001 },
-       { 0x002010,   1, 0x04, 0x00000000 },
-       { 0x002050,   1, 0x04, 0x00000000 },
-       { 0x002090,   1, 0x04, 0x00000001 },
-       { 0x0020d0,   1, 0x04, 0x00000002 },
-       { 0x002110,   1, 0x04, 0x00000003 },
-       { 0x002150,   1, 0x04, 0x00000004 },
-       { 0x000380,   4, 0x20, 0x00000000 },
-       { 0x000384,   4, 0x20, 0x00000000 },
-       { 0x000388,   4, 0x20, 0x00000000 },
-       { 0x00038c,   4, 0x20, 0x00000000 },
-       { 0x000700,   4, 0x10, 0x00000000 },
-       { 0x000704,   4, 0x10, 0x00000000 },
-       { 0x000708,   4, 0x10, 0x00000000 },
-       { 0x002800, 128, 0x04, 0x00000000 },
-       { 0x000a00,  16, 0x20, 0x00000000 },
-       { 0x000a04,  16, 0x20, 0x00000000 },
-       { 0x000a08,  16, 0x20, 0x00000000 },
-       { 0x000a0c,  16, 0x20, 0x00000000 },
-       { 0x000a10,  16, 0x20, 0x00000000 },
-       { 0x000a14,  16, 0x20, 0x00000000 },
-       { 0x000a18,  16, 0x20, 0x00006420 },
-       { 0x000a1c,  16, 0x20, 0x00000000 },
-       { 0x000c00,  16, 0x10, 0x00000000 },
-       { 0x000c04,  16, 0x10, 0x00000000 },
-       { 0x000c08,  16, 0x10, 0x00000000 },
-       { 0x000c0c,  16, 0x10, 0x3f800000 },
-       { 0x000d00,   8, 0x08, 0xffff0000 },
-       { 0x000d04,   8, 0x08, 0xffff0000 },
-       { 0x000e00,  16, 0x10, 0x00000000 },
-       { 0x000e04,  16, 0x10, 0xffff0000 },
-       { 0x000e08,  16, 0x10, 0xffff0000 },
-       { 0x000d40,   4, 0x08, 0x00000000 },
-       { 0x000d44,   4, 0x08, 0x00000000 },
-       { 0x001e00,   8, 0x20, 0x00000001 },
-       { 0x001e04,   8, 0x20, 0x00000001 },
-       { 0x001e08,   8, 0x20, 0x00000002 },
-       { 0x001e0c,   8, 0x20, 0x00000001 },
-       { 0x001e10,   8, 0x20, 0x00000001 },
-       { 0x001e14,   8, 0x20, 0x00000002 },
-       { 0x001e18,   8, 0x20, 0x00000001 },
-       { 0x001480,   8, 0x10, 0x00000000 },
-       { 0x001484,   8, 0x10, 0x00000000 },
-       { 0x001488,   8, 0x10, 0x00000000 },
-       { 0x003400, 128, 0x04, 0x00000000 },
-       { 0x00030c,   1, 0x04, 0x00000001 },
-       { 0x001944,   1, 0x04, 0x00000000 },
-       { 0x001514,   1, 0x04, 0x00000000 },
-       { 0x000d68,   1, 0x04, 0x0000ffff },
-       { 0x00121c,   1, 0x04, 0x0fac6881 },
-       { 0x000fac,   1, 0x04, 0x00000001 },
-       { 0x001538,   1, 0x04, 0x00000001 },
-       { 0x000fe0,   2, 0x04, 0x00000000 },
-       { 0x000fe8,   1, 0x04, 0x00000014 },
-       { 0x000fec,   1, 0x04, 0x00000040 },
-       { 0x000ff0,   1, 0x04, 0x00000000 },
-       { 0x00179c,   1, 0x04, 0x00000000 },
-       { 0x001228,   1, 0x04, 0x00000400 },
-       { 0x00122c,   1, 0x04, 0x00000300 },
-       { 0x001230,   1, 0x04, 0x00010001 },
-       { 0x0007f8,   1, 0x04, 0x00000000 },
-       { 0x001208,   1, 0x04, 0x00000000 },
-       { 0x0015b4,   1, 0x04, 0x00000001 },
-       { 0x0015cc,   1, 0x04, 0x00000000 },
-       { 0x001534,   1, 0x04, 0x00000000 },
-       { 0x000754,   1, 0x04, 0x00000001 },
-       { 0x000fb0,   1, 0x04, 0x00000000 },
-       { 0x0015d0,   1, 0x04, 0x00000000 },
-       { 0x0011e0,   4, 0x04, 0x88888888 },
-       { 0x00153c,   1, 0x04, 0x00000000 },
-       { 0x0016b4,   1, 0x04, 0x00000003 },
-       { 0x000fa4,   1, 0x04, 0x00000001 },
-       { 0x000fbc,   4, 0x04, 0x0000ffff },
-       { 0x000fa8,   1, 0x04, 0x0000ffff },
-       { 0x000df8,   2, 0x04, 0x00000000 },
-       { 0x001948,   1, 0x04, 0x00000000 },
-       { 0x001970,   1, 0x04, 0x00000001 },
-       { 0x00161c,   1, 0x04, 0x000009f0 },
-       { 0x000dcc,   1, 0x04, 0x00000010 },
-       { 0x0015e4,   1, 0x04, 0x00000000 },
-       { 0x001160,  32, 0x04, 0x25e00040 },
-       { 0x001880,  32, 0x04, 0x00000000 },
-       { 0x000f84,   2, 0x04, 0x00000000 },
-       { 0x0017c8,   2, 0x04, 0x00000000 },
-       { 0x0017d0,   1, 0x04, 0x000000ff },
-       { 0x0017d4,   1, 0x04, 0xffffffff },
-       { 0x0017d8,   1, 0x04, 0x00000002 },
-       { 0x0017dc,   1, 0x04, 0x00000000 },
-       { 0x0015f4,   2, 0x04, 0x00000000 },
-       { 0x001434,   2, 0x04, 0x00000000 },
-       { 0x000d74,   1, 0x04, 0x00000000 },
-       { 0x0013a4,   1, 0x04, 0x00000000 },
-       { 0x001318,   1, 0x04, 0x00000001 },
-       { 0x001080,   2, 0x04, 0x00000000 },
-       { 0x001088,   2, 0x04, 0x00000001 },
-       { 0x001090,   1, 0x04, 0x00000000 },
-       { 0x001094,   1, 0x04, 0x00000001 },
-       { 0x001098,   1, 0x04, 0x00000000 },
-       { 0x00109c,   1, 0x04, 0x00000001 },
-       { 0x0010a0,   2, 0x04, 0x00000000 },
-       { 0x001644,   1, 0x04, 0x00000000 },
-       { 0x000748,   1, 0x04, 0x00000000 },
-       { 0x000de8,   1, 0x04, 0x00000000 },
-       { 0x001648,   1, 0x04, 0x00000000 },
-       { 0x0012a4,   1, 0x04, 0x00000000 },
-       { 0x001120,   4, 0x04, 0x00000000 },
-       { 0x001118,   1, 0x04, 0x00000000 },
-       { 0x00164c,   1, 0x04, 0x00000000 },
-       { 0x001658,   1, 0x04, 0x00000000 },
-       { 0x001910,   1, 0x04, 0x00000290 },
-       { 0x001518,   1, 0x04, 0x00000000 },
-       { 0x00165c,   1, 0x04, 0x00000001 },
-       { 0x001520,   1, 0x04, 0x00000000 },
-       { 0x001604,   1, 0x04, 0x00000000 },
-       { 0x001570,   1, 0x04, 0x00000000 },
-       { 0x0013b0,   2, 0x04, 0x3f800000 },
-       { 0x00020c,   1, 0x04, 0x00000000 },
-       { 0x001670,   1, 0x04, 0x30201000 },
-       { 0x001674,   1, 0x04, 0x70605040 },
-       { 0x001678,   1, 0x04, 0xb8a89888 },
-       { 0x00167c,   1, 0x04, 0xf8e8d8c8 },
-       { 0x00166c,   1, 0x04, 0x00000000 },
-       { 0x001680,   1, 0x04, 0x00ffff00 },
-       { 0x0012d0,   1, 0x04, 0x00000003 },
-       { 0x00113c,   1, 0x04, 0x00000000 },
-       { 0x0012d4,   1, 0x04, 0x00000002 },
-       { 0x001684,   2, 0x04, 0x00000000 },
-       { 0x000dac,   2, 0x04, 0x00001b02 },
-       { 0x000db4,   1, 0x04, 0x00000000 },
-       { 0x00168c,   1, 0x04, 0x00000000 },
-       { 0x0015bc,   1, 0x04, 0x00000000 },
-       { 0x00156c,   1, 0x04, 0x00000000 },
-       { 0x00187c,   1, 0x04, 0x00000000 },
-       { 0x001110,   1, 0x04, 0x00000001 },
-       { 0x000dc0,   3, 0x04, 0x00000000 },
-       { 0x000f40,   5, 0x04, 0x00000000 },
-       { 0x001234,   1, 0x04, 0x00000000 },
-       { 0x001690,   1, 0x04, 0x00000000 },
-       { 0x000790,   5, 0x04, 0x00000000 },
-       { 0x00077c,   1, 0x04, 0x00000000 },
-       { 0x001000,   1, 0x04, 0x00000010 },
-       { 0x0010fc,   1, 0x04, 0x00000000 },
-       { 0x001290,   1, 0x04, 0x00000000 },
-       { 0x000218,   1, 0x04, 0x00000010 },
-       { 0x0012d8,   1, 0x04, 0x00000000 },
-       { 0x0012dc,   1, 0x04, 0x00000010 },
-       { 0x000d94,   1, 0x04, 0x00000001 },
-       { 0x00155c,   2, 0x04, 0x00000000 },
-       { 0x001564,   1, 0x04, 0x00000fff },
-       { 0x001574,   2, 0x04, 0x00000000 },
-       { 0x00157c,   1, 0x04, 0x000fffff },
-       { 0x001354,   1, 0x04, 0x00000000 },
-       { 0x001610,   1, 0x04, 0x00000012 },
-       { 0x001608,   2, 0x04, 0x00000000 },
-       { 0x00260c,   1, 0x04, 0x00000000 },
-       { 0x0007ac,   1, 0x04, 0x00000000 },
-       { 0x00162c,   1, 0x04, 0x00000003 },
-       { 0x000210,   1, 0x04, 0x00000000 },
-       { 0x000320,   1, 0x04, 0x00000000 },
-       { 0x000324,   6, 0x04, 0x3f800000 },
-       { 0x000750,   1, 0x04, 0x00000000 },
-       { 0x000760,   1, 0x04, 0x39291909 },
-       { 0x000764,   1, 0x04, 0x79695949 },
-       { 0x000768,   1, 0x04, 0xb9a99989 },
-       { 0x00076c,   1, 0x04, 0xf9e9d9c9 },
-       { 0x000770,   1, 0x04, 0x30201000 },
-       { 0x000774,   1, 0x04, 0x70605040 },
-       { 0x000778,   1, 0x04, 0x00009080 },
-       { 0x000780,   1, 0x04, 0x39291909 },
-       { 0x000784,   1, 0x04, 0x79695949 },
-       { 0x000788,   1, 0x04, 0xb9a99989 },
-       { 0x00078c,   1, 0x04, 0xf9e9d9c9 },
-       { 0x0007d0,   1, 0x04, 0x30201000 },
-       { 0x0007d4,   1, 0x04, 0x70605040 },
-       { 0x0007d8,   1, 0x04, 0x00009080 },
-       { 0x001004,   1, 0x04, 0x00000000 },
-       { 0x001240,   8, 0x04, 0x00000000 },
-       { 0x00037c,   1, 0x04, 0x00000001 },
-       { 0x000740,   1, 0x04, 0x00000000 },
-       { 0x001148,   1, 0x04, 0x00000000 },
-       { 0x000fb4,   1, 0x04, 0x00000000 },
-       { 0x000fb8,   1, 0x04, 0x00000002 },
-       { 0x001130,   1, 0x04, 0x00000002 },
-       { 0x000fd4,   2, 0x04, 0x00000000 },
-       { 0x001030,   1, 0x04, 0x20181008 },
-       { 0x001034,   1, 0x04, 0x40383028 },
-       { 0x001038,   1, 0x04, 0x60585048 },
-       { 0x00103c,   1, 0x04, 0x80787068 },
-       { 0x000744,   1, 0x04, 0x00000000 },
-       { 0x002600,   1, 0x04, 0x00000000 },
-       { 0x001918,   1, 0x04, 0x00000000 },
-       { 0x00191c,   1, 0x04, 0x00000900 },
-       { 0x001920,   1, 0x04, 0x00000405 },
-       { 0x001308,   1, 0x04, 0x00000001 },
-       { 0x001924,   1, 0x04, 0x00000000 },
-       { 0x0013ac,   1, 0x04, 0x00000000 },
-       { 0x00192c,   1, 0x04, 0x00000001 },
-       { 0x00193c,   1, 0x04, 0x00002c1c },
-       { 0x000d7c,   1, 0x04, 0x00000000 },
-       { 0x000f8c,   1, 0x04, 0x00000000 },
-       { 0x0002c0,   1, 0x04, 0x00000001 },
-       { 0x001510,   1, 0x04, 0x00000000 },
-       { 0x001940,   1, 0x04, 0x00000000 },
-       { 0x000ff4,   2, 0x04, 0x00000000 },
-       { 0x00194c,   2, 0x04, 0x00000000 },
-       { 0x001968,   1, 0x04, 0x00000000 },
-       { 0x001590,   1, 0x04, 0x0000003f },
-       { 0x0007e8,   4, 0x04, 0x00000000 },
-       { 0x00196c,   1, 0x04, 0x00000011 },
-       { 0x0002e4,   1, 0x04, 0x0000b001 },
-       { 0x00036c,   2, 0x04, 0x00000000 },
-       { 0x00197c,   1, 0x04, 0x00000000 },
-       { 0x000fcc,   2, 0x04, 0x00000000 },
-       { 0x0002d8,   1, 0x04, 0x00000040 },
-       { 0x001980,   1, 0x04, 0x00000080 },
-       { 0x001504,   1, 0x04, 0x00000080 },
-       { 0x001984,   1, 0x04, 0x00000000 },
-       { 0x000f60,   1, 0x04, 0x00000000 },
-       { 0x000f64,   1, 0x04, 0x00400040 },
-       { 0x000f68,   1, 0x04, 0x00002212 },
-       { 0x000f6c,   1, 0x04, 0x08080203 },
-       { 0x001108,   1, 0x04, 0x00000008 },
-       { 0x000f70,   1, 0x04, 0x00080001 },
-       { 0x000ffc,   1, 0x04, 0x00000000 },
-       { 0x001134,   1, 0x04, 0x00000000 },
-       { 0x000f1c,   1, 0x04, 0x00000000 },
-       { 0x0011f8,   1, 0x04, 0x00000000 },
-       { 0x001138,   1, 0x04, 0x00000001 },
-       { 0x000300,   1, 0x04, 0x00000001 },
-       { 0x0013a8,   1, 0x04, 0x00000000 },
-       { 0x001224,   1, 0x04, 0x00000000 },
-       { 0x0012ec,   1, 0x04, 0x00000000 },
-       { 0x001310,   1, 0x04, 0x00000000 },
-       { 0x001314,   1, 0x04, 0x00000001 },
-       { 0x001380,   1, 0x04, 0x00000000 },
-       { 0x001384,   4, 0x04, 0x00000001 },
-       { 0x001394,   1, 0x04, 0x00000000 },
-       { 0x00139c,   1, 0x04, 0x00000000 },
-       { 0x001398,   1, 0x04, 0x00000000 },
-       { 0x001594,   1, 0x04, 0x00000000 },
-       { 0x001598,   4, 0x04, 0x00000001 },
-       { 0x000f54,   3, 0x04, 0x00000000 },
-       { 0x0019bc,   1, 0x04, 0x00000000 },
-       { 0x000f9c,   2, 0x04, 0x00000000 },
-       { 0x0012cc,   1, 0x04, 0x00000000 },
-       { 0x0012e8,   1, 0x04, 0x00000000 },
-       { 0x00130c,   1, 0x04, 0x00000001 },
-       { 0x001360,   8, 0x04, 0x00000000 },
-       { 0x00133c,   2, 0x04, 0x00000001 },
-       { 0x001344,   1, 0x04, 0x00000002 },
-       { 0x001348,   2, 0x04, 0x00000001 },
-       { 0x001350,   1, 0x04, 0x00000002 },
-       { 0x001358,   1, 0x04, 0x00000001 },
-       { 0x0012e4,   1, 0x04, 0x00000000 },
-       { 0x00131c,   4, 0x04, 0x00000000 },
-       { 0x0019c0,   1, 0x04, 0x00000000 },
-       { 0x001140,   1, 0x04, 0x00000000 },
-       { 0x000dd0,   1, 0x04, 0x00000000 },
-       { 0x000dd4,   1, 0x04, 0x00000001 },
-       { 0x0002f4,   1, 0x04, 0x00000000 },
-       { 0x0019c4,   1, 0x04, 0x00000000 },
-       { 0x0019c8,   1, 0x04, 0x00001500 },
-       { 0x00135c,   1, 0x04, 0x00000000 },
-       { 0x000f90,   1, 0x04, 0x00000000 },
-       { 0x0019e0,   8, 0x04, 0x00000001 },
-       { 0x0019cc,   1, 0x04, 0x00000001 },
-       { 0x00111c,   1, 0x04, 0x00000001 },
-       { 0x0015b8,   1, 0x04, 0x00000000 },
-       { 0x001a00,   1, 0x04, 0x00001111 },
-       { 0x001a04,   7, 0x04, 0x00000000 },
-       { 0x000d6c,   2, 0x04, 0xffff0000 },
-       { 0x0010f8,   1, 0x04, 0x00001010 },
-       { 0x000d80,   5, 0x04, 0x00000000 },
-       { 0x000da0,   1, 0x04, 0x00000000 },
-       { 0x0007a4,   2, 0x04, 0x00000000 },
-       { 0x001508,   1, 0x04, 0x80000000 },
-       { 0x00150c,   1, 0x04, 0x40000000 },
-       { 0x001668,   1, 0x04, 0x00000000 },
-       { 0x000318,   2, 0x04, 0x00000008 },
-       { 0x000d9c,   1, 0x04, 0x00000001 },
-       { 0x000f14,   1, 0x04, 0x00000000 },
-       { 0x000374,   1, 0x04, 0x00000000 },
-       { 0x000378,   1, 0x04, 0x0000000c },
-       { 0x0007dc,   1, 0x04, 0x00000000 },
-       { 0x00074c,   1, 0x04, 0x00000055 },
-       { 0x001420,   1, 0x04, 0x00000003 },
-       { 0x001008,   1, 0x04, 0x00000008 },
-       { 0x00100c,   1, 0x04, 0x00000040 },
-       { 0x001010,   1, 0x04, 0x0000012c },
-       { 0x000d60,   1, 0x04, 0x00000040 },
-       { 0x001018,   1, 0x04, 0x00000020 },
-       { 0x00101c,   1, 0x04, 0x00000001 },
-       { 0x001020,   1, 0x04, 0x00000020 },
-       { 0x001024,   1, 0x04, 0x00000001 },
-       { 0x001444,   3, 0x04, 0x00000000 },
-       { 0x000360,   1, 0x04, 0x20164010 },
-       { 0x000364,   1, 0x04, 0x00000020 },
-       { 0x000368,   1, 0x04, 0x00000000 },
-       { 0x000da8,   1, 0x04, 0x00000030 },
-       { 0x000de4,   1, 0x04, 0x00000000 },
-       { 0x000204,   1, 0x04, 0x00000006 },
-       { 0x0002d0,   1, 0x04, 0x003fffff },
-       { 0x001220,   1, 0x04, 0x00000005 },
-       { 0x000fdc,   1, 0x04, 0x00000000 },
-       { 0x000f98,   1, 0x04, 0x00400008 },
-       { 0x001284,   1, 0x04, 0x08000080 },
-       { 0x001450,   1, 0x04, 0x00400008 },
-       { 0x001454,   1, 0x04, 0x08000080 },
-       { 0x000214,   1, 0x04, 0x00000000 },
-       {}
-};
-
-const struct gf100_gr_pack
-gm204_grctx_pack_mthd[] = {
-       { gm204_grctx_init_b197_0, 0xb197 },
-       { gf100_grctx_init_902d_0, 0x902d },
-       {}
-};
-
-static const struct gf100_gr_init
-gm204_grctx_init_fe_0[] = {
-       { 0x404004,   8, 0x04, 0x00000000 },
-       { 0x404024,   1, 0x04, 0x0000e000 },
-       { 0x404028,   8, 0x04, 0x00000000 },
-       { 0x4040a8,   8, 0x04, 0x00000000 },
-       { 0x4040c8,   1, 0x04, 0xf801008f },
-       { 0x4040d0,   6, 0x04, 0x00000000 },
-       { 0x4040f8,   1, 0x04, 0x00000000 },
-       { 0x404100,  10, 0x04, 0x00000000 },
-       { 0x404130,   2, 0x04, 0x00000000 },
-       { 0x404150,   1, 0x04, 0x0000002e },
-       { 0x404154,   2, 0x04, 0x00000800 },
-       { 0x404164,   1, 0x04, 0x00000045 },
-       { 0x40417c,   2, 0x04, 0x00000000 },
-       { 0x404194,   1, 0x04, 0x33000700 },
-       { 0x4041a0,   4, 0x04, 0x00000000 },
-       { 0x4041c4,   2, 0x04, 0x00000000 },
-       {}
-};
-
-static const struct gf100_gr_init
-gm204_grctx_init_ds_0[] = {
-       { 0x405800,   1, 0x04, 0x8f8001bf },
-       { 0x405830,   1, 0x04, 0x04001000 },
-       { 0x405834,   1, 0x04, 0x08000000 },
-       { 0x405838,   1, 0x04, 0x00010000 },
-       { 0x405854,   1, 0x04, 0x00000000 },
-       { 0x405870,   4, 0x04, 0x00000001 },
-       { 0x405a00,   2, 0x04, 0x00000000 },
-       { 0x405a18,   1, 0x04, 0x00000000 },
-       { 0x405a1c,   1, 0x04, 0x000000ff },
-       {}
-};
-
-static const struct gf100_gr_init
-gm204_grctx_init_cwd_0[] = {
-       { 0x405b00,   1, 0x04, 0x00000000 },
-       { 0x405b10,   1, 0x04, 0x00001000 },
-       { 0x405b20,   1, 0x04, 0x04000000 },
-       { 0x405b60,   6, 0x04, 0x00000000 },
-       { 0x405ba0,   6, 0x04, 0x00000000 },
-       {}
-};
-
-static const struct gf100_gr_init
-gm204_grctx_init_pd_0[] = {
-       { 0x406020,   1, 0x04, 0x17410001 },
-       { 0x406028,   4, 0x04, 0x00000001 },
-       { 0x4064a8,   1, 0x04, 0x00000000 },
-       { 0x4064ac,   1, 0x04, 0x00003fff },
-       { 0x4064b0,   3, 0x04, 0x00000000 },
-       { 0x4064c0,   1, 0x04, 0x80400280 },
-       { 0x4064c4,   1, 0x04, 0x0400ffff },
-       { 0x4064c8,   1, 0x04, 0x01800780 },
-       { 0x4064cc,   9, 0x04, 0x00000000 },
-       { 0x4064fc,   1, 0x04, 0x0000022a },
-       { 0x406500,   1, 0x04, 0x00000000 },
-       {}
-};
-
-static const struct gf100_gr_init
-gm204_grctx_init_be_0[] = {
-       { 0x408800,   1, 0x04, 0x32882a3c },
-       { 0x408804,   1, 0x04, 0x00000040 },
-       { 0x408808,   1, 0x04, 0x1003e005 },
-       { 0x408840,   1, 0x04, 0x00000e0b },
-       { 0x408900,   1, 0x04, 0xb080b801 },
-       { 0x408904,   1, 0x04, 0x63038001 },
-       { 0x408908,   1, 0x04, 0x12c8502f },
-       { 0x408980,   1, 0x04, 0x0000011d },
-       {}
-};
-
-const struct gf100_gr_pack
-gm204_grctx_pack_hub[] = {
-       { gf100_grctx_init_main_0 },
-       { gm204_grctx_init_fe_0 },
-       { gk110_grctx_init_pri_0 },
-       { gk104_grctx_init_memfmt_0 },
-       { gm204_grctx_init_ds_0 },
-       { gm204_grctx_init_cwd_0 },
-       { gm204_grctx_init_pd_0 },
-       { gk208_grctx_init_rstr2d_0 },
-       { gk104_grctx_init_scc_0 },
-       { gm204_grctx_init_be_0 },
-       {}
-};
-
-const struct gf100_gr_init
-gm204_grctx_init_prop_0[] = {
-       { 0x418400,   1, 0x04, 0x38e01e00 },
-       { 0x418404,   1, 0x04, 0x70001fff },
-       { 0x41840c,   1, 0x04, 0x20001008 },
-       { 0x418410,   2, 0x04, 0x0fff0fff },
-       { 0x418418,   1, 0x04, 0x07ff07ff },
-       { 0x41841c,   1, 0x04, 0x3feffbff },
-       { 0x418450,   6, 0x04, 0x00000000 },
-       { 0x418468,   1, 0x04, 0x00000001 },
-       { 0x41846c,   2, 0x04, 0x00000000 },
-       {}
-};
-
-static const struct gf100_gr_init
-gm204_grctx_init_gpc_unk_1[] = {
-       { 0x418600,   1, 0x04, 0x0000007f },
-       { 0x418684,   1, 0x04, 0x0000001f },
-       { 0x418700,   1, 0x04, 0x00000002 },
-       { 0x418704,   1, 0x04, 0x00000080 },
-       { 0x418708,   1, 0x04, 0x40000000 },
-       { 0x41870c,   2, 0x04, 0x00000000 },
-       { 0x418728,   1, 0x04, 0x00010000 },
-       {}
-};
-
-const struct gf100_gr_init
-gm204_grctx_init_setup_0[] = {
-       { 0x418800,   1, 0x04, 0x7006863a },
-       { 0x418808,   1, 0x04, 0x00000000 },
-       { 0x418810,   1, 0x04, 0x00000000 },
-       { 0x418828,   1, 0x04, 0x00000044 },
-       { 0x418830,   1, 0x04, 0x10000001 },
-       { 0x4188d8,   1, 0x04, 0x00000008 },
-       { 0x4188e0,   1, 0x04, 0x01000000 },
-       { 0x4188e8,   5, 0x04, 0x00000000 },
-       { 0x4188fc,   1, 0x04, 0x20100058 },
-       {}
-};
-
-const struct gf100_gr_init
-gm204_grctx_init_gpm_0[] = {
-       { 0x418c10,   8, 0x04, 0x00000000 },
-       { 0x418c40,   1, 0x04, 0xffffffff },
-       { 0x418c6c,   1, 0x04, 0x00000001 },
-       { 0x418c80,   1, 0x04, 0x20200000 },
-       {}
-};
-
-const struct gf100_gr_init
-gm204_grctx_init_gpc_unk_2[] = {
-       { 0x418e00,   1, 0x04, 0x90040000 },
-       { 0x418e24,   1, 0x04, 0x00000000 },
-       { 0x418e28,   1, 0x04, 0x00000030 },
-       { 0x418e2c,   1, 0x04, 0x00000100 },
-       { 0x418e30,   3, 0x04, 0x00000000 },
-       { 0x418e40,  22, 0x04, 0x00000000 },
-       { 0x418ea0,  12, 0x04, 0x00000000 },
-       {}
-};
-
-static const struct gf100_gr_pack
-gm204_grctx_pack_gpc[] = {
-       { gm107_grctx_init_gpc_unk_0 },
-       { gm204_grctx_init_prop_0 },
-       { gm204_grctx_init_gpc_unk_1 },
-       { gm204_grctx_init_setup_0 },
-       { gf100_grctx_init_zcull_0 },
-       { gk208_grctx_init_crstr_0 },
-       { gm204_grctx_init_gpm_0 },
-       { gm204_grctx_init_gpc_unk_2 },
-       { gf100_grctx_init_gcc_0 },
-       {}
-};
-
-static const struct gf100_gr_init
-gm204_grctx_init_pe_0[] = {
-       { 0x419848,   1, 0x04, 0x00000000 },
-       { 0x419864,   1, 0x04, 0x00000029 },
-       { 0x419888,   1, 0x04, 0x00000000 },
-       {}
-};
-
-static const struct gf100_gr_init
-gm204_grctx_init_tex_0[] = {
-       { 0x419a00,   1, 0x04, 0x000100f0 },
-       { 0x419a04,   1, 0x04, 0x00000005 },
-       { 0x419a08,   1, 0x04, 0x00000621 },
-       { 0x419a0c,   1, 0x04, 0x00320000 },
-       { 0x419a10,   1, 0x04, 0x00000000 },
-       { 0x419a14,   1, 0x04, 0x00000200 },
-       { 0x419a1c,   1, 0x04, 0x0010c000 },
-       { 0x419a20,   1, 0x04, 0x20008a00 },
-       { 0x419a30,   1, 0x04, 0x00000001 },
-       { 0x419a3c,   1, 0x04, 0x0000181e },
-       { 0x419ac4,   1, 0x04, 0x00000000 },
-       {}
-};
-
-static const struct gf100_gr_init
-gm204_grctx_init_mpc_0[] = {
-       { 0x419c00,   1, 0x04, 0x0000009a },
-       { 0x419c04,   1, 0x04, 0x80000bd6 },
-       { 0x419c08,   1, 0x04, 0x00000002 },
-       { 0x419c20,   1, 0x04, 0x00000000 },
-       { 0x419c24,   1, 0x04, 0x00084210 },
-       { 0x419c28,   1, 0x04, 0x3efbefbe },
-       { 0x419c2c,   1, 0x04, 0x00000000 },
-       { 0x419c34,   1, 0x04, 0x71ff1ff3 },
-       { 0x419c3c,   1, 0x04, 0x00001919 },
-       { 0x419c50,   1, 0x04, 0x00000005 },
-       {}
-};
-
-static const struct gf100_gr_init
-gm204_grctx_init_l1c_0[] = {
-       { 0x419c84,   1, 0x04, 0x0000003e },
-       { 0x419c90,   1, 0x04, 0x0000000a },
-       {}
-};
-
-static const struct gf100_gr_init
-gm204_grctx_init_sm_0[] = {
-       { 0x419e04,   3, 0x04, 0x00000000 },
-       { 0x419e10,   1, 0x04, 0x00001c02 },
-       { 0x419e44,   1, 0x04, 0x00d3eff2 },
-       { 0x419e48,   1, 0x04, 0x00000000 },
-       { 0x419e4c,   1, 0x04, 0x0000007f },
-       { 0x419e50,   1, 0x04, 0x00000000 },
-       { 0x419e58,   6, 0x04, 0x00000000 },
-       { 0x419e74,  10, 0x04, 0x00000000 },
-       { 0x419eac,   1, 0x04, 0x0001cf8b },
-       { 0x419eb0,   1, 0x04, 0x00030300 },
-       { 0x419eb8,   1, 0x04, 0x40000000 },
-       { 0x419ef0,  24, 0x04, 0x00000000 },
-       { 0x419f68,   2, 0x04, 0x00000000 },
-       { 0x419f70,   1, 0x04, 0x00000020 },
-       { 0x419f78,   1, 0x04, 0x00010beb },
-       { 0x419f7c,   1, 0x04, 0x00000000 },
-       {}
-};
-
-const struct gf100_gr_pack
-gm204_grctx_pack_tpc[] = {
-       { gm204_grctx_init_pe_0 },
-       { gm204_grctx_init_tex_0 },
-       { gm204_grctx_init_mpc_0 },
-       { gm204_grctx_init_l1c_0 },
-       { gm204_grctx_init_sm_0 },
-       {}
-};
-
-static const struct gf100_gr_init
-gm204_grctx_init_pes_0[] = {
-       { 0x41be24,   1, 0x04, 0x0000000e },
-       {}
-};
-
-static const struct gf100_gr_init
-gm204_grctx_init_cbm_0[] = {
-       { 0x41bec0,   1, 0x04, 0x00000000 },
-       { 0x41bec4,   1, 0x04, 0x01030000 },
-       { 0x41bee4,   1, 0x04, 0x00000000 },
-       { 0x41bef0,   1, 0x04, 0x000003ff },
-       { 0x41bef4,   2, 0x04, 0x00000000 },
-       {}
-};
-
-const struct gf100_gr_pack
-gm204_grctx_pack_ppc[] = {
-       { gm204_grctx_init_pes_0 },
-       { gm204_grctx_init_cbm_0 },
-       { gm107_grctx_init_wwdx_0 },
-       {}
-};
-
-/*******************************************************************************
- * PGRAPH context implementation
- ******************************************************************************/
-
-void
-gm204_grctx_generate_tpcid(struct gf100_gr *gr)
-{
-       struct nvkm_device *device = gr->base.engine.subdev.device;
-       int gpc, tpc, id;
-
-       for (tpc = 0, id = 0; tpc < 4; tpc++) {
-               for (gpc = 0; gpc < gr->gpc_nr; gpc++) {
-                       if (tpc < gr->tpc_nr[gpc]) {
-                               nvkm_wr32(device, TPC_UNIT(gpc, tpc, 0x698), id);
-                               nvkm_wr32(device, GPC_UNIT(gpc, 0x0c10 + tpc * 4), id);
-                               nvkm_wr32(device, TPC_UNIT(gpc, tpc, 0x088), id);
-                               id++;
-                       }
-               }
-       }
-}
-
-static void
-gm204_grctx_generate_rop_active_fbps(struct gf100_gr *gr)
-{
-       struct nvkm_device *device = gr->base.engine.subdev.device;
-       const u32 fbp_count = nvkm_rd32(device, 0x12006c);
-       nvkm_mask(device, 0x408850, 0x0000000f, fbp_count); /* zrop */
-       nvkm_mask(device, 0x408958, 0x0000000f, fbp_count); /* crop */
-}
-
-void
-gm204_grctx_generate_405b60(struct gf100_gr *gr)
-{
-       struct nvkm_device *device = gr->base.engine.subdev.device;
-       const u32 dist_nr = DIV_ROUND_UP(gr->tpc_total, 4);
-       u32 dist[TPC_MAX / 4] = {};
-       u32 gpcs[GPC_MAX] = {};
-       u8  tpcnr[GPC_MAX];
-       int tpc, gpc, i;
-
-       memcpy(tpcnr, gr->tpc_nr, sizeof(gr->tpc_nr));
-
-       /* won't result in the same distribution as the binary driver where
-        * some of the gpcs have more tpcs than others, but this shall do
-        * for the moment.  the code for earlier gpus has this issue too.
-        */
-       for (gpc = -1, i = 0; i < gr->tpc_total; i++) {
-               do {
-                       gpc = (gpc + 1) % gr->gpc_nr;
-               } while(!tpcnr[gpc]);
-               tpc = gr->tpc_nr[gpc] - tpcnr[gpc]--;
-
-               dist[i / 4] |= ((gpc << 4) | tpc) << ((i % 4) * 8);
-               gpcs[gpc] |= i << (tpc * 8);
-       }
-
-       for (i = 0; i < dist_nr; i++)
-               nvkm_wr32(device, 0x405b60 + (i * 4), dist[i]);
-       for (i = 0; i < gr->gpc_nr; i++)
-               nvkm_wr32(device, 0x405ba0 + (i * 4), gpcs[i]);
-}
-
-void
-gm204_grctx_generate_main(struct gf100_gr *gr, struct gf100_grctx *info)
-{
-       struct nvkm_device *device = gr->base.engine.subdev.device;
-       const struct gf100_grctx_func *grctx = gr->func->grctx;
-       u32 tmp;
-       int i;
-
-       gf100_gr_mmio(gr, grctx->hub);
-       gf100_gr_mmio(gr, grctx->gpc);
-       gf100_gr_mmio(gr, grctx->zcull);
-       gf100_gr_mmio(gr, grctx->tpc);
-       gf100_gr_mmio(gr, grctx->ppc);
-
-       nvkm_wr32(device, 0x404154, 0x00000000);
-
-       grctx->bundle(info);
-       grctx->pagepool(info);
-       grctx->attrib(info);
-       grctx->unkn(gr);
-
-       gm204_grctx_generate_tpcid(gr);
-       gf100_grctx_generate_r406028(gr);
-       gk104_grctx_generate_r418bb8(gr);
-
-       for (i = 0; i < 8; i++)
-               nvkm_wr32(device, 0x4064d0 + (i * 0x04), 0x00000000);
-       nvkm_wr32(device, 0x406500, 0x00000000);
-
-       nvkm_wr32(device, 0x405b00, (gr->tpc_total << 8) | gr->gpc_nr);
-
-       gm204_grctx_generate_rop_active_fbps(gr);
-
-       for (tmp = 0, i = 0; i < gr->gpc_nr; i++)
-               tmp |= ((1 << gr->tpc_nr[i]) - 1) << (i * 4);
-       nvkm_wr32(device, 0x4041c4, tmp);
-
-       gm204_grctx_generate_405b60(gr);
-
-       gf100_gr_icmd(gr, grctx->icmd);
-       nvkm_wr32(device, 0x404154, 0x00000800);
-       gf100_gr_mthd(gr, grctx->mthd);
-
-       nvkm_mask(device, 0x418e94, 0xffffffff, 0xc4230000);
-       nvkm_mask(device, 0x418e4c, 0xffffffff, 0x70000000);
-}
-
-const struct gf100_grctx_func
-gm204_grctx = {
-       .main  = gm204_grctx_generate_main,
-       .unkn  = gk104_grctx_generate_unkn,
-       .hub   = gm204_grctx_pack_hub,
-       .gpc   = gm204_grctx_pack_gpc,
-       .zcull = gf100_grctx_pack_zcull,
-       .tpc   = gm204_grctx_pack_tpc,
-       .ppc   = gm204_grctx_pack_ppc,
-       .icmd  = gm204_grctx_pack_icmd,
-       .mthd  = gm204_grctx_pack_mthd,
-       .bundle = gm107_grctx_generate_bundle,
-       .bundle_size = 0x3000,
-       .bundle_min_gpm_fifo_depth = 0x180,
-       .bundle_token_limit = 0x780,
-       .pagepool = gm107_grctx_generate_pagepool,
-       .pagepool_size = 0x20000,
-       .attrib = gm107_grctx_generate_attrib,
-       .attrib_nr_max = 0x600,
-       .attrib_nr = 0x400,
-       .alpha_nr_max = 0x1800,
-       .alpha_nr = 0x1000,
-};
index d6be6034c2c258db0e6b8adfd199c1a5d7da8ece..6a36c5cca0de135a484ce89794ac231139ea09b4 100644 (file)
@@ -38,28 +38,28 @@ gm206_grctx_init_gpc_unk_1[] = {
 static const struct gf100_gr_pack
 gm206_grctx_pack_gpc[] = {
        { gm107_grctx_init_gpc_unk_0 },
-       { gm204_grctx_init_prop_0 },
+       { gm200_grctx_init_prop_0 },
        { gm206_grctx_init_gpc_unk_1 },
-       { gm204_grctx_init_setup_0 },
+       { gm200_grctx_init_setup_0 },
        { gf100_grctx_init_zcull_0 },
        { gk208_grctx_init_crstr_0 },
-       { gm204_grctx_init_gpm_0 },
-       { gm204_grctx_init_gpc_unk_2 },
+       { gm200_grctx_init_gpm_0 },
+       { gm200_grctx_init_gpc_unk_2 },
        { gf100_grctx_init_gcc_0 },
        {}
 };
 
 const struct gf100_grctx_func
 gm206_grctx = {
-       .main  = gm204_grctx_generate_main,
+       .main  = gm200_grctx_generate_main,
        .unkn  = gk104_grctx_generate_unkn,
-       .hub   = gm204_grctx_pack_hub,
+       .hub   = gm200_grctx_pack_hub,
        .gpc   = gm206_grctx_pack_gpc,
        .zcull = gf100_grctx_pack_zcull,
-       .tpc   = gm204_grctx_pack_tpc,
-       .ppc   = gm204_grctx_pack_ppc,
-       .icmd  = gm204_grctx_pack_icmd,
-       .mthd  = gm204_grctx_pack_mthd,
+       .tpc   = gm200_grctx_pack_tpc,
+       .ppc   = gm200_grctx_pack_ppc,
+       .icmd  = gm200_grctx_pack_icmd,
+       .mthd  = gm200_grctx_pack_mthd,
        .bundle = gm107_grctx_generate_bundle,
        .bundle_size = 0x3000,
        .bundle_min_gpm_fifo_depth = 0x180,
index 6702604025386efd14f9b9c7327668a2e791f8e8..a8827efa90ae18f0de690a97d2a01db135970654 100644 (file)
@@ -54,7 +54,7 @@ gm20b_grctx_generate_main(struct gf100_gr *gr, struct gf100_grctx *info)
 
        grctx->unkn(gr);
 
-       gm204_grctx_generate_tpcid(gr);
+       gm200_grctx_generate_tpcid(gr);
        gm20b_grctx_generate_r406028(gr);
        gk104_grctx_generate_r418bb8(gr);
 
@@ -70,7 +70,7 @@ gm20b_grctx_generate_main(struct gf100_gr *gr, struct gf100_grctx *info)
                tmp |= ((1 << gr->tpc_nr[i]) - 1) << (i * 4);
        nvkm_wr32(device, 0x4041c4, tmp);
 
-       gm204_grctx_generate_405b60(gr);
+       gm200_grctx_generate_405b60(gr);
 
        gf100_gr_wait_idle(gr);
 
index 02e78b8d93f6743b67baee2a6c68757277ccf489..8dca40dde06be2efe5e1fae1088ad86097d54f28 100644 (file)
@@ -143,7 +143,7 @@ int gk20a_gr_new_(const struct gf100_gr_func *, struct nvkm_device *,
 void gk20a_gr_dtor(struct gf100_gr *);
 int gk20a_gr_init(struct gf100_gr *);
 
-int gm204_gr_init(struct gf100_gr *);
+int gm200_gr_init(struct gf100_gr *);
 
 #define gf100_gr_chan(p) container_of((p), struct gf100_gr_chan, object)
 
@@ -280,5 +280,5 @@ extern const struct gf100_gr_init gm107_gr_init_wwdx_0[];
 extern const struct gf100_gr_init gm107_gr_init_cbm_0[];
 void gm107_gr_init_bios(struct gf100_gr *);
 
-extern const struct gf100_gr_pack gm204_gr_pack_mmio[];
+extern const struct gf100_gr_pack gm200_gr_pack_mmio[];
 #endif
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gm200.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gm200.c
new file mode 100644 (file)
index 0000000..c76dc67
--- /dev/null
@@ -0,0 +1,373 @@
+/*
+ * Copyright 2015 Red Hat Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Authors: Ben Skeggs <bskeggs@redhat.com>
+ */
+#include "gf100.h"
+#include "ctxgf100.h"
+
+#include <nvif/class.h>
+
+/*******************************************************************************
+ * PGRAPH register lists
+ ******************************************************************************/
+
+static const struct gf100_gr_init
+gm200_gr_init_main_0[] = {
+       { 0x400080,   1, 0x04, 0x003003e2 },
+       { 0x400088,   1, 0x04, 0xe007bfe7 },
+       { 0x40008c,   1, 0x04, 0x00060000 },
+       { 0x400090,   1, 0x04, 0x00000030 },
+       { 0x40013c,   1, 0x04, 0x003901f3 },
+       { 0x400140,   1, 0x04, 0x00000100 },
+       { 0x400144,   1, 0x04, 0x00000000 },
+       { 0x400148,   1, 0x04, 0x00000110 },
+       { 0x400138,   1, 0x04, 0x00000000 },
+       { 0x400130,   2, 0x04, 0x00000000 },
+       { 0x400124,   1, 0x04, 0x00000002 },
+       {}
+};
+
+static const struct gf100_gr_init
+gm200_gr_init_fe_0[] = {
+       { 0x40415c,   1, 0x04, 0x00000000 },
+       { 0x404170,   1, 0x04, 0x00000000 },
+       { 0x4041b4,   1, 0x04, 0x00000000 },
+       { 0x4041b8,   1, 0x04, 0x00000010 },
+       {}
+};
+
+static const struct gf100_gr_init
+gm200_gr_init_ds_0[] = {
+       { 0x40583c,   1, 0x04, 0x00000000 },
+       { 0x405844,   1, 0x04, 0x00ffffff },
+       { 0x40584c,   1, 0x04, 0x00000001 },
+       { 0x405850,   1, 0x04, 0x00000000 },
+       { 0x405900,   1, 0x04, 0x00000000 },
+       { 0x405908,   1, 0x04, 0x00000000 },
+       {}
+};
+
+static const struct gf100_gr_init
+gm200_gr_init_sked_0[] = {
+       { 0x407010,   1, 0x04, 0x00000000 },
+       { 0x407040,   1, 0x04, 0x80440434 },
+       { 0x407048,   1, 0x04, 0x00000008 },
+       {}
+};
+
+static const struct gf100_gr_init
+gm200_gr_init_tpccs_0[] = {
+       { 0x419d60,   1, 0x04, 0x0000003f },
+       { 0x419d88,   3, 0x04, 0x00000000 },
+       { 0x419dc4,   1, 0x04, 0x00000000 },
+       { 0x419dc8,   1, 0x04, 0x00000501 },
+       { 0x419dd0,   1, 0x04, 0x00000000 },
+       { 0x419dd4,   1, 0x04, 0x00000100 },
+       { 0x419dd8,   1, 0x04, 0x00000001 },
+       { 0x419ddc,   1, 0x04, 0x00000002 },
+       { 0x419de0,   1, 0x04, 0x00000001 },
+       { 0x419de8,   1, 0x04, 0x000000cc },
+       { 0x419dec,   1, 0x04, 0x00000000 },
+       { 0x419df0,   1, 0x04, 0x000000cc },
+       { 0x419df4,   1, 0x04, 0x00000000 },
+       { 0x419d0c,   1, 0x04, 0x00000000 },
+       { 0x419d10,   1, 0x04, 0x00000014 },
+       {}
+};
+
+static const struct gf100_gr_init
+gm200_gr_init_pe_0[] = {
+       { 0x419900,   1, 0x04, 0x000000ff },
+       { 0x419810,   1, 0x04, 0x00000000 },
+       { 0x41980c,   1, 0x04, 0x00000010 },
+       { 0x419844,   1, 0x04, 0x00000000 },
+       { 0x419838,   1, 0x04, 0x000000ff },
+       { 0x419850,   1, 0x04, 0x00000004 },
+       { 0x419854,   2, 0x04, 0x00000000 },
+       { 0x419894,   3, 0x04, 0x00100401 },
+       {}
+};
+
+static const struct gf100_gr_init
+gm200_gr_init_sm_0[] = {
+       { 0x419e30,   1, 0x04, 0x000000ff },
+       { 0x419e00,   1, 0x04, 0x00000000 },
+       { 0x419ea0,   1, 0x04, 0x00000000 },
+       { 0x419ee4,   1, 0x04, 0x00000000 },
+       { 0x419ea4,   1, 0x04, 0x00000100 },
+       { 0x419ea8,   1, 0x04, 0x00000000 },
+       { 0x419ee8,   1, 0x04, 0x00000091 },
+       { 0x419eb4,   1, 0x04, 0x00000000 },
+       { 0x419ebc,   2, 0x04, 0x00000000 },
+       { 0x419edc,   1, 0x04, 0x000c1810 },
+       { 0x419ed8,   1, 0x04, 0x00000000 },
+       { 0x419ee0,   1, 0x04, 0x00000000 },
+       {}
+};
+
+static const struct gf100_gr_init
+gm200_gr_init_l1c_1[] = {
+       { 0x419cf8,   2, 0x04, 0x00000000 },
+       {}
+};
+
+static const struct gf100_gr_init
+gm200_gr_init_sm_1[] = {
+       { 0x419f74,   1, 0x04, 0x00055155 },
+       { 0x419f80,   4, 0x04, 0x00000000 },
+       {}
+};
+
+static const struct gf100_gr_init
+gm200_gr_init_l1c_2[] = {
+       { 0x419ccc,   2, 0x04, 0x00000000 },
+       { 0x419c80,   1, 0x04, 0x3f006022 },
+       { 0x419c88,   1, 0x04, 0x00210000 },
+       {}
+};
+
+static const struct gf100_gr_init
+gm200_gr_init_pes_0[] = {
+       { 0x41be50,   1, 0x04, 0x000000ff },
+       { 0x41be04,   1, 0x04, 0x00000000 },
+       { 0x41be08,   1, 0x04, 0x00000004 },
+       { 0x41be0c,   1, 0x04, 0x00000008 },
+       { 0x41be10,   1, 0x04, 0x2e3b8bc7 },
+       { 0x41be14,   2, 0x04, 0x00000000 },
+       { 0x41be3c,   5, 0x04, 0x00100401 },
+       {}
+};
+
+static const struct gf100_gr_init
+gm200_gr_init_be_0[] = {
+       { 0x408890,   1, 0x04, 0x000000ff },
+       { 0x40880c,   1, 0x04, 0x00000000 },
+       { 0x408850,   1, 0x04, 0x00000004 },
+       { 0x408878,   1, 0x04, 0x01b4201c },
+       { 0x40887c,   1, 0x04, 0x80004c55 },
+       { 0x408880,   1, 0x04, 0x0018c258 },
+       { 0x408884,   1, 0x04, 0x0000160f },
+       { 0x408974,   1, 0x04, 0x000000ff },
+       { 0x408910,   9, 0x04, 0x00000000 },
+       { 0x408950,   1, 0x04, 0x00000000 },
+       { 0x408954,   1, 0x04, 0x0000ffff },
+       { 0x408958,   1, 0x04, 0x00000034 },
+       { 0x40895c,   1, 0x04, 0x84b17403 },
+       { 0x408960,   1, 0x04, 0x04c1884f },
+       { 0x408964,   1, 0x04, 0x04714445 },
+       { 0x408968,   1, 0x04, 0x0280802f },
+       { 0x40896c,   1, 0x04, 0x04304856 },
+       { 0x408970,   1, 0x04, 0x00012800 },
+       { 0x408984,   1, 0x04, 0x00000000 },
+       { 0x408988,   1, 0x04, 0x08040201 },
+       { 0x40898c,   1, 0x04, 0x80402010 },
+       {}
+};
+
+const struct gf100_gr_pack
+gm200_gr_pack_mmio[] = {
+       { gm200_gr_init_main_0 },
+       { gm200_gr_init_fe_0 },
+       { gf100_gr_init_pri_0 },
+       { gf100_gr_init_rstr2d_0 },
+       { gf100_gr_init_pd_0 },
+       { gm200_gr_init_ds_0 },
+       { gm107_gr_init_scc_0 },
+       { gm200_gr_init_sked_0 },
+       { gk110_gr_init_cwd_0 },
+       { gm107_gr_init_prop_0 },
+       { gk208_gr_init_gpc_unk_0 },
+       { gf100_gr_init_setup_0 },
+       { gf100_gr_init_crstr_0 },
+       { gm107_gr_init_setup_1 },
+       { gm107_gr_init_zcull_0 },
+       { gf100_gr_init_gpm_0 },
+       { gm107_gr_init_gpc_unk_1 },
+       { gf100_gr_init_gcc_0 },
+       { gm200_gr_init_tpccs_0 },
+       { gm107_gr_init_tex_0 },
+       { gm200_gr_init_pe_0 },
+       { gm107_gr_init_l1c_0 },
+       { gf100_gr_init_mpc_0 },
+       { gm200_gr_init_sm_0 },
+       { gm200_gr_init_l1c_1 },
+       { gm200_gr_init_sm_1 },
+       { gm200_gr_init_l1c_2 },
+       { gm200_gr_init_pes_0 },
+       { gm107_gr_init_wwdx_0 },
+       { gm107_gr_init_cbm_0 },
+       { gm200_gr_init_be_0 },
+       {}
+};
+
+const struct gf100_gr_pack *
+gm200_gr_data[] = {
+       gm200_gr_pack_mmio,
+       NULL
+};
+
+/*******************************************************************************
+ * PGRAPH engine/subdev functions
+ ******************************************************************************/
+
+static int
+gm200_gr_init_ctxctl(struct gf100_gr *gr)
+{
+       return 0;
+}
+
+int
+gm200_gr_init(struct gf100_gr *gr)
+{
+       struct nvkm_device *device = gr->base.engine.subdev.device;
+       const u32 magicgpc918 = DIV_ROUND_UP(0x00800000, gr->tpc_total);
+       u32 data[TPC_MAX / 8] = {}, tmp;
+       u8  tpcnr[GPC_MAX];
+       int gpc, tpc, ppc, rop;
+       int i;
+
+       tmp = nvkm_rd32(device, 0x100c80); /*XXX: mask? */
+       nvkm_wr32(device, 0x418880, 0x00001000 | (tmp & 0x00000fff));
+       nvkm_wr32(device, 0x418890, 0x00000000);
+       nvkm_wr32(device, 0x418894, 0x00000000);
+       nvkm_wr32(device, 0x4188b4, nvkm_memory_addr(gr->unk4188b4) >> 8);
+       nvkm_wr32(device, 0x4188b8, nvkm_memory_addr(gr->unk4188b8) >> 8);
+       nvkm_mask(device, 0x4188b0, 0x00040000, 0x00040000);
+
+       /*XXX: belongs in fb */
+       nvkm_wr32(device, 0x100cc8, nvkm_memory_addr(gr->unk4188b4) >> 8);
+       nvkm_wr32(device, 0x100ccc, nvkm_memory_addr(gr->unk4188b8) >> 8);
+       nvkm_mask(device, 0x100cc4, 0x00040000, 0x00040000);
+
+       gf100_gr_mmio(gr, gr->func->mmio);
+
+       gm107_gr_init_bios(gr);
+
+       nvkm_wr32(device, GPC_UNIT(0, 0x3018), 0x00000001);
+
+       memset(data, 0x00, sizeof(data));
+       memcpy(tpcnr, gr->tpc_nr, sizeof(gr->tpc_nr));
+       for (i = 0, gpc = -1; i < gr->tpc_total; i++) {
+               do {
+                       gpc = (gpc + 1) % gr->gpc_nr;
+               } while (!tpcnr[gpc]);
+               tpc = gr->tpc_nr[gpc] - tpcnr[gpc]--;
+
+               data[i / 8] |= tpc << ((i % 8) * 4);
+       }
+
+       nvkm_wr32(device, GPC_BCAST(0x0980), data[0]);
+       nvkm_wr32(device, GPC_BCAST(0x0984), data[1]);
+       nvkm_wr32(device, GPC_BCAST(0x0988), data[2]);
+       nvkm_wr32(device, GPC_BCAST(0x098c), data[3]);
+
+       for (gpc = 0; gpc < gr->gpc_nr; gpc++) {
+               nvkm_wr32(device, GPC_UNIT(gpc, 0x0914),
+                       gr->magic_not_rop_nr << 8 | gr->tpc_nr[gpc]);
+               nvkm_wr32(device, GPC_UNIT(gpc, 0x0910), 0x00040000 |
+                       gr->tpc_total);
+               nvkm_wr32(device, GPC_UNIT(gpc, 0x0918), magicgpc918);
+       }
+
+       nvkm_wr32(device, GPC_BCAST(0x3fd4), magicgpc918);
+       nvkm_wr32(device, GPC_BCAST(0x08ac), nvkm_rd32(device, 0x100800));
+       nvkm_wr32(device, GPC_BCAST(0x033c), nvkm_rd32(device, 0x100804));
+
+       nvkm_wr32(device, 0x400500, 0x00010001);
+       nvkm_wr32(device, 0x400100, 0xffffffff);
+       nvkm_wr32(device, 0x40013c, 0xffffffff);
+       nvkm_wr32(device, 0x400124, 0x00000002);
+       nvkm_wr32(device, 0x409c24, 0x000e0000);
+       nvkm_wr32(device, 0x405848, 0xc0000000);
+       nvkm_wr32(device, 0x40584c, 0x00000001);
+       nvkm_wr32(device, 0x404000, 0xc0000000);
+       nvkm_wr32(device, 0x404600, 0xc0000000);
+       nvkm_wr32(device, 0x408030, 0xc0000000);
+       nvkm_wr32(device, 0x404490, 0xc0000000);
+       nvkm_wr32(device, 0x406018, 0xc0000000);
+       nvkm_wr32(device, 0x407020, 0x40000000);
+       nvkm_wr32(device, 0x405840, 0xc0000000);
+       nvkm_wr32(device, 0x405844, 0x00ffffff);
+       nvkm_mask(device, 0x419cc0, 0x00000008, 0x00000008);
+
+       for (gpc = 0; gpc < gr->gpc_nr; gpc++) {
+               for (ppc = 0; ppc < gr->ppc_nr[gpc]; ppc++)
+                       nvkm_wr32(device, PPC_UNIT(gpc, ppc, 0x038), 0xc0000000);
+               nvkm_wr32(device, GPC_UNIT(gpc, 0x0420), 0xc0000000);
+               nvkm_wr32(device, GPC_UNIT(gpc, 0x0900), 0xc0000000);
+               nvkm_wr32(device, GPC_UNIT(gpc, 0x1028), 0xc0000000);
+               nvkm_wr32(device, GPC_UNIT(gpc, 0x0824), 0xc0000000);
+               for (tpc = 0; tpc < gr->tpc_nr[gpc]; tpc++) {
+                       nvkm_wr32(device, TPC_UNIT(gpc, tpc, 0x508), 0xffffffff);
+                       nvkm_wr32(device, TPC_UNIT(gpc, tpc, 0x50c), 0xffffffff);
+                       nvkm_wr32(device, TPC_UNIT(gpc, tpc, 0x224), 0xc0000000);
+                       nvkm_wr32(device, TPC_UNIT(gpc, tpc, 0x48c), 0xc0000000);
+                       nvkm_wr32(device, TPC_UNIT(gpc, tpc, 0x084), 0xc0000000);
+                       nvkm_wr32(device, TPC_UNIT(gpc, tpc, 0x430), 0xc0000000);
+                       nvkm_wr32(device, TPC_UNIT(gpc, tpc, 0x644), 0x00dffffe);
+                       nvkm_wr32(device, TPC_UNIT(gpc, tpc, 0x64c), 0x00000005);
+               }
+               nvkm_wr32(device, GPC_UNIT(gpc, 0x2c90), 0xffffffff);
+               nvkm_wr32(device, GPC_UNIT(gpc, 0x2c94), 0xffffffff);
+       }
+
+       for (rop = 0; rop < gr->rop_nr; rop++) {
+               nvkm_wr32(device, ROP_UNIT(rop, 0x144), 0x40000000);
+               nvkm_wr32(device, ROP_UNIT(rop, 0x070), 0x40000000);
+               nvkm_wr32(device, ROP_UNIT(rop, 0x204), 0xffffffff);
+               nvkm_wr32(device, ROP_UNIT(rop, 0x208), 0xffffffff);
+       }
+
+       nvkm_wr32(device, 0x400108, 0xffffffff);
+       nvkm_wr32(device, 0x400138, 0xffffffff);
+       nvkm_wr32(device, 0x400118, 0xffffffff);
+       nvkm_wr32(device, 0x400130, 0xffffffff);
+       nvkm_wr32(device, 0x40011c, 0xffffffff);
+       nvkm_wr32(device, 0x400134, 0xffffffff);
+
+       nvkm_wr32(device, 0x400054, 0x2c350f63);
+
+       gf100_gr_zbc_init(gr);
+
+       return gm200_gr_init_ctxctl(gr);
+}
+
+static const struct gf100_gr_func
+gm200_gr = {
+       .init = gm200_gr_init,
+       .mmio = gm200_gr_pack_mmio,
+       .ppc_nr = 2,
+       .grctx = &gm200_grctx,
+       .sclass = {
+               { -1, -1, FERMI_TWOD_A },
+               { -1, -1, KEPLER_INLINE_TO_MEMORY_B },
+               { -1, -1, MAXWELL_B, &gf100_fermi },
+               { -1, -1, MAXWELL_COMPUTE_B },
+               {}
+       }
+};
+
+int
+gm200_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr)
+{
+       return gf100_gr_new_(&gm200_gr, device, index, pgr);
+}
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gm204.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gm204.c
deleted file mode 100644 (file)
index 90381dd..0000000
+++ /dev/null
@@ -1,373 +0,0 @@
-/*
- * Copyright 2015 Red Hat Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- *
- * Authors: Ben Skeggs <bskeggs@redhat.com>
- */
-#include "gf100.h"
-#include "ctxgf100.h"
-
-#include <nvif/class.h>
-
-/*******************************************************************************
- * PGRAPH register lists
- ******************************************************************************/
-
-static const struct gf100_gr_init
-gm204_gr_init_main_0[] = {
-       { 0x400080,   1, 0x04, 0x003003e2 },
-       { 0x400088,   1, 0x04, 0xe007bfe7 },
-       { 0x40008c,   1, 0x04, 0x00060000 },
-       { 0x400090,   1, 0x04, 0x00000030 },
-       { 0x40013c,   1, 0x04, 0x003901f3 },
-       { 0x400140,   1, 0x04, 0x00000100 },
-       { 0x400144,   1, 0x04, 0x00000000 },
-       { 0x400148,   1, 0x04, 0x00000110 },
-       { 0x400138,   1, 0x04, 0x00000000 },
-       { 0x400130,   2, 0x04, 0x00000000 },
-       { 0x400124,   1, 0x04, 0x00000002 },
-       {}
-};
-
-static const struct gf100_gr_init
-gm204_gr_init_fe_0[] = {
-       { 0x40415c,   1, 0x04, 0x00000000 },
-       { 0x404170,   1, 0x04, 0x00000000 },
-       { 0x4041b4,   1, 0x04, 0x00000000 },
-       { 0x4041b8,   1, 0x04, 0x00000010 },
-       {}
-};
-
-static const struct gf100_gr_init
-gm204_gr_init_ds_0[] = {
-       { 0x40583c,   1, 0x04, 0x00000000 },
-       { 0x405844,   1, 0x04, 0x00ffffff },
-       { 0x40584c,   1, 0x04, 0x00000001 },
-       { 0x405850,   1, 0x04, 0x00000000 },
-       { 0x405900,   1, 0x04, 0x00000000 },
-       { 0x405908,   1, 0x04, 0x00000000 },
-       {}
-};
-
-static const struct gf100_gr_init
-gm204_gr_init_sked_0[] = {
-       { 0x407010,   1, 0x04, 0x00000000 },
-       { 0x407040,   1, 0x04, 0x80440434 },
-       { 0x407048,   1, 0x04, 0x00000008 },
-       {}
-};
-
-static const struct gf100_gr_init
-gm204_gr_init_tpccs_0[] = {
-       { 0x419d60,   1, 0x04, 0x0000003f },
-       { 0x419d88,   3, 0x04, 0x00000000 },
-       { 0x419dc4,   1, 0x04, 0x00000000 },
-       { 0x419dc8,   1, 0x04, 0x00000501 },
-       { 0x419dd0,   1, 0x04, 0x00000000 },
-       { 0x419dd4,   1, 0x04, 0x00000100 },
-       { 0x419dd8,   1, 0x04, 0x00000001 },
-       { 0x419ddc,   1, 0x04, 0x00000002 },
-       { 0x419de0,   1, 0x04, 0x00000001 },
-       { 0x419de8,   1, 0x04, 0x000000cc },
-       { 0x419dec,   1, 0x04, 0x00000000 },
-       { 0x419df0,   1, 0x04, 0x000000cc },
-       { 0x419df4,   1, 0x04, 0x00000000 },
-       { 0x419d0c,   1, 0x04, 0x00000000 },
-       { 0x419d10,   1, 0x04, 0x00000014 },
-       {}
-};
-
-static const struct gf100_gr_init
-gm204_gr_init_pe_0[] = {
-       { 0x419900,   1, 0x04, 0x000000ff },
-       { 0x419810,   1, 0x04, 0x00000000 },
-       { 0x41980c,   1, 0x04, 0x00000010 },
-       { 0x419844,   1, 0x04, 0x00000000 },
-       { 0x419838,   1, 0x04, 0x000000ff },
-       { 0x419850,   1, 0x04, 0x00000004 },
-       { 0x419854,   2, 0x04, 0x00000000 },
-       { 0x419894,   3, 0x04, 0x00100401 },
-       {}
-};
-
-static const struct gf100_gr_init
-gm204_gr_init_sm_0[] = {
-       { 0x419e30,   1, 0x04, 0x000000ff },
-       { 0x419e00,   1, 0x04, 0x00000000 },
-       { 0x419ea0,   1, 0x04, 0x00000000 },
-       { 0x419ee4,   1, 0x04, 0x00000000 },
-       { 0x419ea4,   1, 0x04, 0x00000100 },
-       { 0x419ea8,   1, 0x04, 0x00000000 },
-       { 0x419ee8,   1, 0x04, 0x00000091 },
-       { 0x419eb4,   1, 0x04, 0x00000000 },
-       { 0x419ebc,   2, 0x04, 0x00000000 },
-       { 0x419edc,   1, 0x04, 0x000c1810 },
-       { 0x419ed8,   1, 0x04, 0x00000000 },
-       { 0x419ee0,   1, 0x04, 0x00000000 },
-       {}
-};
-
-static const struct gf100_gr_init
-gm204_gr_init_l1c_1[] = {
-       { 0x419cf8,   2, 0x04, 0x00000000 },
-       {}
-};
-
-static const struct gf100_gr_init
-gm204_gr_init_sm_1[] = {
-       { 0x419f74,   1, 0x04, 0x00055155 },
-       { 0x419f80,   4, 0x04, 0x00000000 },
-       {}
-};
-
-static const struct gf100_gr_init
-gm204_gr_init_l1c_2[] = {
-       { 0x419ccc,   2, 0x04, 0x00000000 },
-       { 0x419c80,   1, 0x04, 0x3f006022 },
-       { 0x419c88,   1, 0x04, 0x00210000 },
-       {}
-};
-
-static const struct gf100_gr_init
-gm204_gr_init_pes_0[] = {
-       { 0x41be50,   1, 0x04, 0x000000ff },
-       { 0x41be04,   1, 0x04, 0x00000000 },
-       { 0x41be08,   1, 0x04, 0x00000004 },
-       { 0x41be0c,   1, 0x04, 0x00000008 },
-       { 0x41be10,   1, 0x04, 0x2e3b8bc7 },
-       { 0x41be14,   2, 0x04, 0x00000000 },
-       { 0x41be3c,   5, 0x04, 0x00100401 },
-       {}
-};
-
-static const struct gf100_gr_init
-gm204_gr_init_be_0[] = {
-       { 0x408890,   1, 0x04, 0x000000ff },
-       { 0x40880c,   1, 0x04, 0x00000000 },
-       { 0x408850,   1, 0x04, 0x00000004 },
-       { 0x408878,   1, 0x04, 0x01b4201c },
-       { 0x40887c,   1, 0x04, 0x80004c55 },
-       { 0x408880,   1, 0x04, 0x0018c258 },
-       { 0x408884,   1, 0x04, 0x0000160f },
-       { 0x408974,   1, 0x04, 0x000000ff },
-       { 0x408910,   9, 0x04, 0x00000000 },
-       { 0x408950,   1, 0x04, 0x00000000 },
-       { 0x408954,   1, 0x04, 0x0000ffff },
-       { 0x408958,   1, 0x04, 0x00000034 },
-       { 0x40895c,   1, 0x04, 0x84b17403 },
-       { 0x408960,   1, 0x04, 0x04c1884f },
-       { 0x408964,   1, 0x04, 0x04714445 },
-       { 0x408968,   1, 0x04, 0x0280802f },
-       { 0x40896c,   1, 0x04, 0x04304856 },
-       { 0x408970,   1, 0x04, 0x00012800 },
-       { 0x408984,   1, 0x04, 0x00000000 },
-       { 0x408988,   1, 0x04, 0x08040201 },
-       { 0x40898c,   1, 0x04, 0x80402010 },
-       {}
-};
-
-const struct gf100_gr_pack
-gm204_gr_pack_mmio[] = {
-       { gm204_gr_init_main_0 },
-       { gm204_gr_init_fe_0 },
-       { gf100_gr_init_pri_0 },
-       { gf100_gr_init_rstr2d_0 },
-       { gf100_gr_init_pd_0 },
-       { gm204_gr_init_ds_0 },
-       { gm107_gr_init_scc_0 },
-       { gm204_gr_init_sked_0 },
-       { gk110_gr_init_cwd_0 },
-       { gm107_gr_init_prop_0 },
-       { gk208_gr_init_gpc_unk_0 },
-       { gf100_gr_init_setup_0 },
-       { gf100_gr_init_crstr_0 },
-       { gm107_gr_init_setup_1 },
-       { gm107_gr_init_zcull_0 },
-       { gf100_gr_init_gpm_0 },
-       { gm107_gr_init_gpc_unk_1 },
-       { gf100_gr_init_gcc_0 },
-       { gm204_gr_init_tpccs_0 },
-       { gm107_gr_init_tex_0 },
-       { gm204_gr_init_pe_0 },
-       { gm107_gr_init_l1c_0 },
-       { gf100_gr_init_mpc_0 },
-       { gm204_gr_init_sm_0 },
-       { gm204_gr_init_l1c_1 },
-       { gm204_gr_init_sm_1 },
-       { gm204_gr_init_l1c_2 },
-       { gm204_gr_init_pes_0 },
-       { gm107_gr_init_wwdx_0 },
-       { gm107_gr_init_cbm_0 },
-       { gm204_gr_init_be_0 },
-       {}
-};
-
-const struct gf100_gr_pack *
-gm204_gr_data[] = {
-       gm204_gr_pack_mmio,
-       NULL
-};
-
-/*******************************************************************************
- * PGRAPH engine/subdev functions
- ******************************************************************************/
-
-static int
-gm204_gr_init_ctxctl(struct gf100_gr *gr)
-{
-       return 0;
-}
-
-int
-gm204_gr_init(struct gf100_gr *gr)
-{
-       struct nvkm_device *device = gr->base.engine.subdev.device;
-       const u32 magicgpc918 = DIV_ROUND_UP(0x00800000, gr->tpc_total);
-       u32 data[TPC_MAX / 8] = {}, tmp;
-       u8  tpcnr[GPC_MAX];
-       int gpc, tpc, ppc, rop;
-       int i;
-
-       tmp = nvkm_rd32(device, 0x100c80); /*XXX: mask? */
-       nvkm_wr32(device, 0x418880, 0x00001000 | (tmp & 0x00000fff));
-       nvkm_wr32(device, 0x418890, 0x00000000);
-       nvkm_wr32(device, 0x418894, 0x00000000);
-       nvkm_wr32(device, 0x4188b4, nvkm_memory_addr(gr->unk4188b4) >> 8);
-       nvkm_wr32(device, 0x4188b8, nvkm_memory_addr(gr->unk4188b8) >> 8);
-       nvkm_mask(device, 0x4188b0, 0x00040000, 0x00040000);
-
-       /*XXX: belongs in fb */
-       nvkm_wr32(device, 0x100cc8, nvkm_memory_addr(gr->unk4188b4) >> 8);
-       nvkm_wr32(device, 0x100ccc, nvkm_memory_addr(gr->unk4188b8) >> 8);
-       nvkm_mask(device, 0x100cc4, 0x00040000, 0x00040000);
-
-       gf100_gr_mmio(gr, gr->func->mmio);
-
-       gm107_gr_init_bios(gr);
-
-       nvkm_wr32(device, GPC_UNIT(0, 0x3018), 0x00000001);
-
-       memset(data, 0x00, sizeof(data));
-       memcpy(tpcnr, gr->tpc_nr, sizeof(gr->tpc_nr));
-       for (i = 0, gpc = -1; i < gr->tpc_total; i++) {
-               do {
-                       gpc = (gpc + 1) % gr->gpc_nr;
-               } while (!tpcnr[gpc]);
-               tpc = gr->tpc_nr[gpc] - tpcnr[gpc]--;
-
-               data[i / 8] |= tpc << ((i % 8) * 4);
-       }
-
-       nvkm_wr32(device, GPC_BCAST(0x0980), data[0]);
-       nvkm_wr32(device, GPC_BCAST(0x0984), data[1]);
-       nvkm_wr32(device, GPC_BCAST(0x0988), data[2]);
-       nvkm_wr32(device, GPC_BCAST(0x098c), data[3]);
-
-       for (gpc = 0; gpc < gr->gpc_nr; gpc++) {
-               nvkm_wr32(device, GPC_UNIT(gpc, 0x0914),
-                       gr->magic_not_rop_nr << 8 | gr->tpc_nr[gpc]);
-               nvkm_wr32(device, GPC_UNIT(gpc, 0x0910), 0x00040000 |
-                       gr->tpc_total);
-               nvkm_wr32(device, GPC_UNIT(gpc, 0x0918), magicgpc918);
-       }
-
-       nvkm_wr32(device, GPC_BCAST(0x3fd4), magicgpc918);
-       nvkm_wr32(device, GPC_BCAST(0x08ac), nvkm_rd32(device, 0x100800));
-       nvkm_wr32(device, GPC_BCAST(0x033c), nvkm_rd32(device, 0x100804));
-
-       nvkm_wr32(device, 0x400500, 0x00010001);
-       nvkm_wr32(device, 0x400100, 0xffffffff);
-       nvkm_wr32(device, 0x40013c, 0xffffffff);
-       nvkm_wr32(device, 0x400124, 0x00000002);
-       nvkm_wr32(device, 0x409c24, 0x000e0000);
-       nvkm_wr32(device, 0x405848, 0xc0000000);
-       nvkm_wr32(device, 0x40584c, 0x00000001);
-       nvkm_wr32(device, 0x404000, 0xc0000000);
-       nvkm_wr32(device, 0x404600, 0xc0000000);
-       nvkm_wr32(device, 0x408030, 0xc0000000);
-       nvkm_wr32(device, 0x404490, 0xc0000000);
-       nvkm_wr32(device, 0x406018, 0xc0000000);
-       nvkm_wr32(device, 0x407020, 0x40000000);
-       nvkm_wr32(device, 0x405840, 0xc0000000);
-       nvkm_wr32(device, 0x405844, 0x00ffffff);
-       nvkm_mask(device, 0x419cc0, 0x00000008, 0x00000008);
-
-       for (gpc = 0; gpc < gr->gpc_nr; gpc++) {
-               for (ppc = 0; ppc < gr->ppc_nr[gpc]; ppc++)
-                       nvkm_wr32(device, PPC_UNIT(gpc, ppc, 0x038), 0xc0000000);
-               nvkm_wr32(device, GPC_UNIT(gpc, 0x0420), 0xc0000000);
-               nvkm_wr32(device, GPC_UNIT(gpc, 0x0900), 0xc0000000);
-               nvkm_wr32(device, GPC_UNIT(gpc, 0x1028), 0xc0000000);
-               nvkm_wr32(device, GPC_UNIT(gpc, 0x0824), 0xc0000000);
-               for (tpc = 0; tpc < gr->tpc_nr[gpc]; tpc++) {
-                       nvkm_wr32(device, TPC_UNIT(gpc, tpc, 0x508), 0xffffffff);
-                       nvkm_wr32(device, TPC_UNIT(gpc, tpc, 0x50c), 0xffffffff);
-                       nvkm_wr32(device, TPC_UNIT(gpc, tpc, 0x224), 0xc0000000);
-                       nvkm_wr32(device, TPC_UNIT(gpc, tpc, 0x48c), 0xc0000000);
-                       nvkm_wr32(device, TPC_UNIT(gpc, tpc, 0x084), 0xc0000000);
-                       nvkm_wr32(device, TPC_UNIT(gpc, tpc, 0x430), 0xc0000000);
-                       nvkm_wr32(device, TPC_UNIT(gpc, tpc, 0x644), 0x00dffffe);
-                       nvkm_wr32(device, TPC_UNIT(gpc, tpc, 0x64c), 0x00000005);
-               }
-               nvkm_wr32(device, GPC_UNIT(gpc, 0x2c90), 0xffffffff);
-               nvkm_wr32(device, GPC_UNIT(gpc, 0x2c94), 0xffffffff);
-       }
-
-       for (rop = 0; rop < gr->rop_nr; rop++) {
-               nvkm_wr32(device, ROP_UNIT(rop, 0x144), 0x40000000);
-               nvkm_wr32(device, ROP_UNIT(rop, 0x070), 0x40000000);
-               nvkm_wr32(device, ROP_UNIT(rop, 0x204), 0xffffffff);
-               nvkm_wr32(device, ROP_UNIT(rop, 0x208), 0xffffffff);
-       }
-
-       nvkm_wr32(device, 0x400108, 0xffffffff);
-       nvkm_wr32(device, 0x400138, 0xffffffff);
-       nvkm_wr32(device, 0x400118, 0xffffffff);
-       nvkm_wr32(device, 0x400130, 0xffffffff);
-       nvkm_wr32(device, 0x40011c, 0xffffffff);
-       nvkm_wr32(device, 0x400134, 0xffffffff);
-
-       nvkm_wr32(device, 0x400054, 0x2c350f63);
-
-       gf100_gr_zbc_init(gr);
-
-       return gm204_gr_init_ctxctl(gr);
-}
-
-static const struct gf100_gr_func
-gm204_gr = {
-       .init = gm204_gr_init,
-       .mmio = gm204_gr_pack_mmio,
-       .ppc_nr = 2,
-       .grctx = &gm204_grctx,
-       .sclass = {
-               { -1, -1, FERMI_TWOD_A },
-               { -1, -1, KEPLER_INLINE_TO_MEMORY_B },
-               { -1, -1, MAXWELL_B, &gf100_fermi },
-               { -1, -1, MAXWELL_COMPUTE_B },
-               {}
-       }
-};
-
-int
-gm204_gr_new(struct nvkm_device *device, int index, struct nvkm_gr **pgr)
-{
-       return gf100_gr_new_(&gm204_gr, device, index, pgr);
-}
index 341dc560acbbf12da7d83828e2e94919298d8fec..398e3f52f489d35549d9a542c3bcfffd6e8d4841 100644 (file)
@@ -28,8 +28,8 @@
 
 static const struct gf100_gr_func
 gm206_gr = {
-       .init = gm204_gr_init,
-       .mmio = gm204_gr_pack_mmio,
+       .init = gm200_gr_init,
+       .mmio = gm200_gr_pack_mmio,
        .ppc_nr = 2,
        .grctx = &gm206_grctx,
        .sclass = {