]> rtime.felk.cvut.cz Git - linux-imx.git/commitdiff
drm/nvd7/gr: initial support
authorMaarten Lankhorst <maarten.lankhorst@canonical.com>
Thu, 4 Jul 2013 00:04:30 +0000 (10:04 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Fri, 5 Jul 2013 03:43:16 +0000 (13:43 +1000)
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@canonical.com>
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
22 files changed:
drivers/gpu/drm/nouveau/Makefile
drivers/gpu/drm/nouveau/core/engine/device/nvc0.c
drivers/gpu/drm/nouveau/core/engine/graph/ctxnvd7.c [new file with mode: 0644]
drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpc.fuc
drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcnvc0.fuc
drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcnvd7.fuc [new file with mode: 0644]
drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcnvd7.fuc.h [new file with mode: 0644]
drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcnve0.fuc
drivers/gpu/drm/nouveau/core/engine/graph/fuc/hub.fuc
drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnvc0.fuc
drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnvd7.fuc [new file with mode: 0644]
drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnvd7.fuc.h [new file with mode: 0644]
drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnve0.fuc
drivers/gpu/drm/nouveau/core/engine/graph/fuc/macros.fuc
drivers/gpu/drm/nouveau/core/engine/graph/nvc0.c
drivers/gpu/drm/nouveau/core/engine/graph/nvc0.h
drivers/gpu/drm/nouveau/core/engine/graph/nvc1.c
drivers/gpu/drm/nouveau/core/engine/graph/nvc3.c
drivers/gpu/drm/nouveau/core/engine/graph/nvc8.c
drivers/gpu/drm/nouveau/core/engine/graph/nvd7.c [new file with mode: 0644]
drivers/gpu/drm/nouveau/core/engine/graph/nvd9.c
drivers/gpu/drm/nouveau/core/include/engine/graph.h

index 4c3d29d67436afc8b0281bb702322c493b341654..d939a1da32036c8c9b37026d2cd2ef8f8e1bd0f7 100644 (file)
@@ -203,6 +203,7 @@ nouveau-y += core/engine/graph/ctxnvc0.o
 nouveau-y += core/engine/graph/ctxnvc1.o
 nouveau-y += core/engine/graph/ctxnvc3.o
 nouveau-y += core/engine/graph/ctxnvc8.o
+nouveau-y += core/engine/graph/ctxnvd7.o
 nouveau-y += core/engine/graph/ctxnvd9.o
 nouveau-y += core/engine/graph/ctxnve4.o
 nouveau-y += core/engine/graph/ctxnvf0.o
@@ -220,6 +221,7 @@ nouveau-y += core/engine/graph/nvc0.o
 nouveau-y += core/engine/graph/nvc1.o
 nouveau-y += core/engine/graph/nvc3.o
 nouveau-y += core/engine/graph/nvc8.o
+nouveau-y += core/engine/graph/nvd7.o
 nouveau-y += core/engine/graph/nvd9.o
 nouveau-y += core/engine/graph/nve4.o
 nouveau-y += core/engine/graph/nvf0.o
index 6637eecd831ea03f5f5c4535cefeaa0246a0f134..73d0db8e1d2c3d3233b1fb661a30cd305168bf71 100644 (file)
@@ -304,7 +304,7 @@ nvc0_identify(struct nouveau_device *device)
                device->oclass[NVDEV_ENGINE_DMAOBJ ] = &nvd0_dmaeng_oclass;
                device->oclass[NVDEV_ENGINE_FIFO   ] = &nvc0_fifo_oclass;
                device->oclass[NVDEV_ENGINE_SW     ] = &nvc0_software_oclass;
-               device->oclass[NVDEV_ENGINE_GR     ] =  nvd9_graph_oclass;
+               device->oclass[NVDEV_ENGINE_GR     ] =  nvd7_graph_oclass;
                device->oclass[NVDEV_ENGINE_VP     ] = &nvc0_vp_oclass;
                device->oclass[NVDEV_ENGINE_BSP    ] = &nvc0_bsp_oclass;
                device->oclass[NVDEV_ENGINE_PPP    ] = &nvc0_ppp_oclass;
diff --git a/drivers/gpu/drm/nouveau/core/engine/graph/ctxnvd7.c b/drivers/gpu/drm/nouveau/core/engine/graph/ctxnvd7.c
new file mode 100644 (file)
index 0000000..25d5676
--- /dev/null
@@ -0,0 +1,303 @@
+/*
+ * Copyright 2013 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 "nvc0.h"
+
+struct nvc0_graph_init
+nvd7_grctx_init_unk40xx[] = {
+       { 0x404004,  10, 0x04, 0x00000000 },
+       { 0x404044,   1, 0x04, 0x00000000 },
+       { 0x404094,   1, 0x04, 0x00000000 },
+       { 0x404098,  12, 0x04, 0x00000000 },
+       { 0x4040c8,   1, 0x04, 0xf0000087 },
+       { 0x4040d0,   6, 0x04, 0x00000000 },
+       { 0x4040e8,   1, 0x04, 0x00001000 },
+       { 0x4040f8,   1, 0x04, 0x00000000 },
+       { 0x404130,   1, 0x04, 0x00000000 },
+       { 0x404134,   1, 0x04, 0x00000000 },
+       { 0x404138,   1, 0x04, 0x20000040 },
+       { 0x404150,   1, 0x04, 0x0000002e },
+       { 0x404154,   1, 0x04, 0x00000400 },
+       { 0x404158,   1, 0x04, 0x00000200 },
+       { 0x404164,   1, 0x04, 0x00000055 },
+       { 0x404168,   1, 0x04, 0x00000000 },
+       { 0x404178,   2, 0x04, 0x00000000 },
+       { 0x404200,   8, 0x04, 0x00000000 },
+       {}
+};
+
+static struct nvc0_graph_init
+nvd7_grctx_init_unk58xx[] = {
+       { 0x405800,   1, 0x04, 0x0f8000bf },
+       { 0x405830,   1, 0x04, 0x02180324 },
+       { 0x405834,   1, 0x04, 0x08000000 },
+       { 0x405838,   1, 0x04, 0x00000000 },
+       { 0x405854,   1, 0x04, 0x00000000 },
+       { 0x405870,   4, 0x04, 0x00000001 },
+       { 0x405a00,   2, 0x04, 0x00000000 },
+       { 0x405a18,   1, 0x04, 0x00000000 },
+       {}
+};
+
+static struct nvc0_graph_init
+nvd7_grctx_init_unk64xx[] = {
+       { 0x4064a8,   1, 0x04, 0x00000000 },
+       { 0x4064ac,   1, 0x04, 0x00003fff },
+       { 0x4064b4,   3, 0x04, 0x00000000 },
+       { 0x4064c0,   1, 0x04, 0x801a0078 },
+       { 0x4064c4,   1, 0x04, 0x00c9ffff },
+       { 0x4064d0,   8, 0x04, 0x00000000 },
+       {}
+};
+
+static struct nvc0_graph_init
+nvd7_grctx_init_gpc_0[] = {
+       { 0x418380,   1, 0x04, 0x00000016 },
+       { 0x418400,   1, 0x04, 0x38004e00 },
+       { 0x418404,   1, 0x04, 0x71e0ffff },
+       { 0x41840c,   1, 0x04, 0x00001008 },
+       { 0x418410,   1, 0x04, 0x0fff0fff },
+       { 0x418414,   1, 0x04, 0x02200fff },
+       { 0x418450,   6, 0x04, 0x00000000 },
+       { 0x418468,   1, 0x04, 0x00000001 },
+       { 0x41846c,   2, 0x04, 0x00000000 },
+       { 0x418600,   1, 0x04, 0x0000001f },
+       { 0x418684,   1, 0x04, 0x0000000f },
+       { 0x418700,   1, 0x04, 0x00000002 },
+       { 0x418704,   1, 0x04, 0x00000080 },
+       { 0x418708,   3, 0x04, 0x00000000 },
+       { 0x418800,   1, 0x04, 0x7006860a },
+       { 0x418808,   3, 0x04, 0x00000000 },
+       { 0x418828,   1, 0x04, 0x00008442 },
+       { 0x418830,   1, 0x04, 0x10000001 },
+       { 0x4188d8,   1, 0x04, 0x00000008 },
+       { 0x4188e0,   1, 0x04, 0x01000000 },
+       { 0x4188e8,   5, 0x04, 0x00000000 },
+       { 0x4188fc,   1, 0x04, 0x20100018 },
+       { 0x41891c,   1, 0x04, 0x00ff00ff },
+       { 0x418924,   1, 0x04, 0x00000000 },
+       { 0x418928,   1, 0x04, 0x00ffff00 },
+       { 0x41892c,   1, 0x04, 0x0000ff00 },
+       { 0x418b00,   1, 0x04, 0x00000006 },
+       { 0x418b08,   1, 0x04, 0x0a418820 },
+       { 0x418b0c,   1, 0x04, 0x062080e6 },
+       { 0x418b10,   1, 0x04, 0x020398a4 },
+       { 0x418b14,   1, 0x04, 0x0e629062 },
+       { 0x418b18,   1, 0x04, 0x0a418820 },
+       { 0x418b1c,   1, 0x04, 0x000000e6 },
+       { 0x418bb8,   1, 0x04, 0x00000103 },
+       { 0x418c08,   1, 0x04, 0x00000001 },
+       { 0x418c10,   8, 0x04, 0x00000000 },
+       { 0x418c6c,   1, 0x04, 0x00000001 },
+       { 0x418c80,   1, 0x04, 0x20200004 },
+       { 0x418c8c,   1, 0x04, 0x00000001 },
+       { 0x419000,   1, 0x04, 0x00000780 },
+       { 0x419004,   2, 0x04, 0x00000000 },
+       { 0x419014,   1, 0x04, 0x00000004 },
+       {}
+};
+
+static struct nvc0_graph_init
+nvd7_grctx_init_tpc[] = {
+       { 0x419848,   1, 0x04, 0x00000000 },
+       { 0x419864,   1, 0x04, 0x00000129 },
+       { 0x419888,   1, 0x04, 0x00000000 },
+       { 0x419a00,   1, 0x04, 0x000001f0 },
+       { 0x419a04,   1, 0x04, 0x00000001 },
+       { 0x419a08,   1, 0x04, 0x00000023 },
+       { 0x419a0c,   1, 0x04, 0x00020000 },
+       { 0x419a10,   1, 0x04, 0x00000000 },
+       { 0x419a14,   1, 0x04, 0x00000200 },
+       { 0x419a1c,   1, 0x04, 0x00008000 },
+       { 0x419a20,   1, 0x04, 0x00000800 },
+       { 0x419ac4,   1, 0x04, 0x0017f440 },
+       { 0x419c00,   1, 0x04, 0x0000000a },
+       { 0x419c04,   1, 0x04, 0x00000006 },
+       { 0x419c08,   1, 0x04, 0x00000002 },
+       { 0x419c20,   1, 0x04, 0x00000000 },
+       { 0x419c24,   1, 0x04, 0x00084210 },
+       { 0x419c28,   1, 0x04, 0x3efbefbe },
+       { 0x419cb0,   1, 0x04, 0x00020048 },
+       { 0x419ce8,   1, 0x04, 0x00000000 },
+       { 0x419cf4,   1, 0x04, 0x00000183 },
+       { 0x419e04,   3, 0x04, 0x00000000 },
+       { 0x419e10,   1, 0x04, 0x00000002 },
+       { 0x419e44,   1, 0x04, 0x001beff2 },
+       { 0x419e48,   1, 0x04, 0x00000000 },
+       { 0x419e4c,   1, 0x04, 0x0000000f },
+       { 0x419e50,  17, 0x04, 0x00000000 },
+       { 0x419e98,   1, 0x04, 0x00000000 },
+       { 0x419ee0,   1, 0x04, 0x00010110 },
+       { 0x419f30,  11, 0x04, 0x00000000 },
+       {}
+};
+
+static struct nvc0_graph_init
+nvd7_grctx_init_unk[] = {
+       { 0x41be24,   1, 0x04, 0x00000002 },
+       { 0x41bec0,   1, 0x04, 0x12180000 },
+       { 0x41bec4,   1, 0x04, 0x00003fff },
+       { 0x41bee4,   1, 0x04, 0x03240218 },
+       { 0x41bf00,   1, 0x04, 0x0a418820 },
+       { 0x41bf04,   1, 0x04, 0x062080e6 },
+       { 0x41bf08,   1, 0x04, 0x020398a4 },
+       { 0x41bf0c,   1, 0x04, 0x0e629062 },
+       { 0x41bf10,   1, 0x04, 0x0a418820 },
+       { 0x41bf14,   1, 0x04, 0x000000e6 },
+       { 0x41bfd0,   1, 0x04, 0x00900103 },
+       { 0x41bfe0,   1, 0x04, 0x00400001 },
+       { 0x41bfe4,   1, 0x04, 0x00000000 },
+       {}
+};
+
+static void
+nvd7_grctx_generate_mods(struct nvc0_graph_priv *priv, struct nvc0_grctx *info)
+{
+       u32 magic[GPC_MAX][2];
+       u32 offset;
+       int gpc;
+
+       mmio_data(0x003000, 0x0100, NV_MEM_ACCESS_RW | NV_MEM_ACCESS_SYS);
+       mmio_data(0x008000, 0x0100, NV_MEM_ACCESS_RW | NV_MEM_ACCESS_SYS);
+       mmio_data(0x060000, 0x1000, NV_MEM_ACCESS_RW);
+       mmio_list(0x40800c, 0x00000000,  8, 1);
+       mmio_list(0x408010, 0x80000000,  0, 0);
+       mmio_list(0x419004, 0x00000000,  8, 1);
+       mmio_list(0x419008, 0x00000000,  0, 0);
+       mmio_list(0x408004, 0x00000000,  8, 0);
+       mmio_list(0x408008, 0x80000018,  0, 0);
+       mmio_list(0x418808, 0x00000000,  8, 0);
+       mmio_list(0x41880c, 0x80000018,  0, 0);
+       mmio_list(0x418810, 0x80000000, 12, 2);
+       mmio_list(0x419848, 0x10000000, 12, 2);
+
+       mmio_list(0x405830, 0x02180324,  0, 0);
+       mmio_list(0x4064c4, 0x00c9ffff,  0, 0);
+
+       for (gpc = 0, offset = 0; gpc < priv->gpc_nr; gpc++) {
+               u16 magic0 = 0x0218 * priv->tpc_nr[gpc];
+               u16 magic1 = 0x0324 * priv->tpc_nr[gpc];
+               magic[gpc][0]  = 0x10000000 | (magic0 << 16) | offset;
+               magic[gpc][1]  = 0x00000000 | (magic1 << 16);
+               offset += 0x0324 * priv->tpc_nr[gpc];
+       }
+
+       for (gpc = 0; gpc < priv->gpc_nr; gpc++) {
+               mmio_list(GPC_UNIT(gpc, 0x30c0), magic[gpc][0], 0, 0);
+               mmio_list(GPC_UNIT(gpc, 0x30e4), magic[gpc][1] | offset, 0, 0);
+               offset += 0x07ff * priv->tpc_nr[gpc];
+       }
+       mmio_list(0x17e91c, 0x03060609, 0, 0); /* different from kepler */
+}
+
+void
+nvd7_grctx_generate_main(struct nvc0_graph_priv *priv, struct nvc0_grctx *info)
+{
+       struct nvc0_grctx_oclass *oclass = (void *)nv_engine(priv)->cclass;
+       int i;
+
+       nv_mask(priv, 0x000260, 0x00000001, 0x00000000);
+
+       for (i = 0; oclass->hub[i]; i++)
+               nvc0_graph_mmio(priv, oclass->hub[i]);
+       for (i = 0; oclass->gpc[i]; i++)
+               nvc0_graph_mmio(priv, oclass->gpc[i]);
+
+       nv_wr32(priv, 0x404154, 0x00000000);
+
+       oclass->mods(priv, info);
+
+       nv_wr32(priv, 0x418c6c, 0x1);
+       nv_wr32(priv, 0x41980c, 0x10);
+       nv_wr32(priv, 0x41be08, 0x4);
+       nv_wr32(priv, 0x4064c0, 0x801a0078);
+       nv_wr32(priv, 0x405800, 0xf8000bf);
+       nv_wr32(priv, 0x419c00, 0xa);
+
+       nvc0_grctx_generate_tpcid(priv);
+       nvc0_grctx_generate_r406028(priv);
+
+       nv_wr32(priv, 0x40602c, 0x00000000);
+       nv_wr32(priv, 0x405874, 0x00000000);
+       nv_wr32(priv, 0x406030, 0x00000000);
+       nv_wr32(priv, 0x405878, 0x00000000);
+       nv_wr32(priv, 0x406034, 0x00000000);
+       nv_wr32(priv, 0x40587c, 0x00000000);
+
+       nvc0_grctx_generate_r4060a8(priv);
+       nve4_grctx_generate_r418bb8(priv);
+       nvc0_grctx_generate_r406800(priv);
+
+       for (i = 0; i < 8; i++)
+               nv_wr32(priv, 0x4064d0 + (i * 0x04), 0x00000000);
+
+       nvc0_graph_icmd(priv, oclass->icmd);
+       nv_wr32(priv, 0x404154, 0x00000400);
+       nvc0_graph_mthd(priv, oclass->mthd);
+       nv_mask(priv, 0x000260, 0x00000001, 0x00000001);
+}
+
+
+static struct nvc0_graph_init *
+nvd7_grctx_init_hub[] = {
+       nvc0_grctx_init_base,
+       nvd7_grctx_init_unk40xx,
+       nvc0_grctx_init_unk44xx,
+       nvc0_grctx_init_unk46xx,
+       nvc0_grctx_init_unk47xx,
+       nvd7_grctx_init_unk58xx,
+       nvc0_grctx_init_unk60xx,
+       nvd7_grctx_init_unk64xx,
+       nvc0_grctx_init_unk78xx,
+       nvc0_grctx_init_unk80xx,
+       nvd9_grctx_init_rop,
+};
+
+struct nvc0_graph_init *
+nvd7_grctx_init_gpc[] = {
+       nvd7_grctx_init_gpc_0,
+       nvc0_grctx_init_gpc_1,
+       nvd7_grctx_init_tpc,
+       nvd7_grctx_init_unk,
+       NULL
+};
+
+struct nouveau_oclass *
+nvd7_grctx_oclass = &(struct nvc0_grctx_oclass) {
+       .base.handle = NV_ENGCTX(GR, 0xd7),
+       .base.ofuncs = &(struct nouveau_ofuncs) {
+               .ctor = nvc0_graph_context_ctor,
+               .dtor = nvc0_graph_context_dtor,
+               .init = _nouveau_graph_context_init,
+               .fini = _nouveau_graph_context_fini,
+               .rd32 = _nouveau_graph_context_rd32,
+               .wr32 = _nouveau_graph_context_wr32,
+       },
+       .main = nvd7_grctx_generate_main,
+       .mods = nvd7_grctx_generate_mods,
+       .hub  = nvd7_grctx_init_hub,
+       .gpc  = nvd7_grctx_init_gpc,
+       .icmd = nvd9_grctx_init_icmd,
+       .mthd = nvd9_grctx_init_mthd,
+}.base;
index 97f775b0245193317ea8df0f13465b7fbca33bbd..32832720e4208480233dd6bda62a2b56702a28a7 100644 (file)
@@ -41,7 +41,7 @@ gpc_id:                       .b32 0
 tpc_count:             .b32 0
 tpc_mask:              .b32 0
 
-#ifdef NVGK
+#if NV_PGRAPH_GPCX_UNK__SIZE > 0
 unk_count:             .b32 1
 unk_mask:              .b32 1
 #endif
@@ -145,7 +145,7 @@ init:
        add b32 $r2 $r14
        add b32 $r3 $r14
 
-#ifdef NVGK
+#if NV_PGRAPH_GPCX_UNK__SIZE > 0
        // calculate per-UNK mmio context size
        ld b32 $r14 D[$r0 + #unk_mmio_list_head]
        ld b32 $r15 D[$r0 + #unk_mmio_list_tail]
@@ -342,7 +342,7 @@ ctx_xfer:
        mov $r14 0x800          // stride = 0x800
        call #mmctx_xfer
 
-#ifdef NVGK
+#if NV_PGRAPH_GPCX_UNK__SIZE > 0
        // per-UNK mmio context
        xbit $r10 $flags $p1    // direction
        or $r10 4               // last
index dcacfb5f6ff714b8ae9568fd6b5a730fb24cd4fb..5ae06a2d64c98fd22a80d5c4912ff27a415aa065 100644 (file)
@@ -22,7 +22,9 @@
  * Authors: Ben Skeggs <bskeggs@redhat.com>
  */
 
-#define NVGF
+#define NV_PGRAPH_GPCX_UNK__SIZE                                     0x00000000
+
+#define CHIPSET GF100
 #include "macros.fuc"
 
 .section #nvc0_grgpc_data
diff --git a/drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcnvd7.fuc b/drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcnvd7.fuc
new file mode 100644 (file)
index 0000000..c2f754e
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2013 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>
+ */
+
+#define NV_PGRAPH_GPCX_UNK__SIZE                                     0x00000001
+
+#define CHIPSET GF117
+#include "macros.fuc"
+
+.section #nvd7_grgpc_data
+#define INCLUDE_DATA
+#include "com.fuc"
+#include "gpc.fuc"
+#undef INCLUDE_DATA
+
+.section #nvd7_grgpc_code
+#define INCLUDE_CODE
+bra #init
+#include "com.fuc"
+#include "gpc.fuc"
+.align 256
+#undef INCLUDE_CODE
diff --git a/drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcnvd7.fuc.h b/drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcnvd7.fuc.h
new file mode 100644 (file)
index 0000000..95d13a1
--- /dev/null
@@ -0,0 +1,472 @@
+uint32_t nvd7_grgpc_data[] = {
+/* 0x0000: gpc_mmio_list_head */
+       0x0000006c,
+/* 0x0004: gpc_mmio_list_tail */
+/* 0x0004: tpc_mmio_list_head */
+       0x0000006c,
+/* 0x0008: tpc_mmio_list_tail */
+/* 0x0008: unk_mmio_list_head */
+       0x0000006c,
+/* 0x000c: unk_mmio_list_tail */
+       0x0000006c,
+/* 0x0010: gpc_id */
+       0x00000000,
+/* 0x0014: tpc_count */
+       0x00000000,
+/* 0x0018: tpc_mask */
+       0x00000000,
+/* 0x001c: unk_count */
+       0x00000001,
+/* 0x0020: unk_mask */
+       0x00000001,
+/* 0x0024: cmd_queue */
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+};
+
+uint32_t nvd7_grgpc_code[] = {
+       0x03060ef5,
+/* 0x0004: queue_put */
+       0x9800d898,
+       0x86f001d9,
+       0x0489b808,
+       0xf00c1bf4,
+       0x21f502f7,
+       0x00f802ec,
+/* 0x001c: queue_put_next */
+       0xb60798c4,
+       0x8dbb0384,
+       0x0880b600,
+       0x80008e80,
+       0x90b6018f,
+       0x0f94f001,
+       0xf801d980,
+/* 0x0039: queue_get */
+       0x0131f400,
+       0x9800d898,
+       0x89b801d9,
+       0x210bf404,
+       0xb60789c4,
+       0x9dbb0394,
+       0x0890b600,
+       0x98009e98,
+       0x80b6019f,
+       0x0f84f001,
+       0xf400d880,
+/* 0x0066: queue_get_done */
+       0x00f80132,
+/* 0x0068: nv_rd32 */
+       0x0728b7f1,
+       0xb906b4b6,
+       0xc9f002ec,
+       0x00bcd01f,
+/* 0x0078: nv_rd32_wait */
+       0xc800bccf,
+       0x1bf41fcc,
+       0x06a7f0fa,
+       0x010321f5,
+       0xf840bfcf,
+/* 0x008d: nv_wr32 */
+       0x28b7f100,
+       0x06b4b607,
+       0xb980bfd0,
+       0xc9f002ec,
+       0x1ec9f01f,
+/* 0x00a3: nv_wr32_wait */
+       0xcf00bcd0,
+       0xccc800bc,
+       0xfa1bf41f,
+/* 0x00ae: watchdog_reset */
+       0x87f100f8,
+       0x84b60430,
+       0x1ff9f006,
+       0xf8008fd0,
+/* 0x00bd: watchdog_clear */
+       0x3087f100,
+       0x0684b604,
+       0xf80080d0,
+/* 0x00c9: wait_donez */
+       0x3c87f100,
+       0x0684b608,
+       0x99f094bd,
+       0x0089d000,
+       0x081887f1,
+       0xd00684b6,
+/* 0x00e2: wait_donez_ne */
+       0x87f1008a,
+       0x84b60400,
+       0x0088cf06,
+       0xf4888aff,
+       0x87f1f31b,
+       0x84b6085c,
+       0xf094bd06,
+       0x89d00099,
+/* 0x0103: wait_doneo */
+       0xf100f800,
+       0xb6083c87,
+       0x94bd0684,
+       0xd00099f0,
+       0x87f10089,
+       0x84b60818,
+       0x008ad006,
+/* 0x011c: wait_doneo_e */
+       0x040087f1,
+       0xcf0684b6,
+       0x8aff0088,
+       0xf30bf488,
+       0x085c87f1,
+       0xbd0684b6,
+       0x0099f094,
+       0xf80089d0,
+/* 0x013d: mmctx_size */
+/* 0x013f: nv_mmctx_size_loop */
+       0x9894bd00,
+       0x85b600e8,
+       0x0180b61a,
+       0xbb0284b6,
+       0xe0b60098,
+       0x04efb804,
+       0xb9eb1bf4,
+       0x00f8029f,
+/* 0x015c: mmctx_xfer */
+       0x083c87f1,
+       0xbd0684b6,
+       0x0199f094,
+       0xf10089d0,
+       0xb6071087,
+       0x94bd0684,
+       0xf405bbfd,
+       0x8bd0090b,
+       0x0099f000,
+/* 0x0180: mmctx_base_disabled */
+       0xf405eefd,
+       0x8ed00c0b,
+       0xc08fd080,
+/* 0x018f: mmctx_multi_disabled */
+       0xb70199f0,
+       0xc8010080,
+       0xb4b600ab,
+       0x0cb9f010,
+       0xb601aec8,
+       0xbefd11e4,
+       0x008bd005,
+/* 0x01a8: mmctx_exec_loop */
+/* 0x01a8: mmctx_wait_free */
+       0xf0008ecf,
+       0x0bf41fe4,
+       0x00ce98fa,
+       0xd005e9fd,
+       0xc0b6c08e,
+       0x04cdb804,
+       0xc8e81bf4,
+       0x1bf402ab,
+/* 0x01c9: mmctx_fini_wait */
+       0x008bcf18,
+       0xb01fb4f0,
+       0x1bf410b4,
+       0x02a7f0f7,
+       0xf4c921f4,
+/* 0x01de: mmctx_stop */
+       0xabc81b0e,
+       0x10b4b600,
+       0xf00cb9f0,
+       0x8bd012b9,
+/* 0x01ed: mmctx_stop_wait */
+       0x008bcf00,
+       0xf412bbc8,
+/* 0x01f6: mmctx_done */
+       0x87f1fa1b,
+       0x84b6085c,
+       0xf094bd06,
+       0x89d00199,
+/* 0x0207: strand_wait */
+       0xf900f800,
+       0x02a7f0a0,
+       0xfcc921f4,
+/* 0x0213: strand_pre */
+       0xf100f8a0,
+       0xf04afc87,
+       0x97f00283,
+       0x0089d00c,
+       0x020721f5,
+/* 0x0226: strand_post */
+       0x87f100f8,
+       0x83f04afc,
+       0x0d97f002,
+       0xf50089d0,
+       0xf8020721,
+/* 0x0239: strand_set */
+       0xfca7f100,
+       0x02a3f04f,
+       0x0500aba2,
+       0xd00fc7f0,
+       0xc7f000ac,
+       0x00bcd00b,
+       0x020721f5,
+       0xf000aed0,
+       0xbcd00ac7,
+       0x0721f500,
+/* 0x0263: strand_ctx_init */
+       0xf100f802,
+       0xb6083c87,
+       0x94bd0684,
+       0xd00399f0,
+       0x21f50089,
+       0xe7f00213,
+       0x3921f503,
+       0xfca7f102,
+       0x02a3f046,
+       0x0400aba0,
+       0xf040a0d0,
+       0xbcd001c7,
+       0x0721f500,
+       0x010c9202,
+       0xf000acd0,
+       0xbcd002c7,
+       0x0721f500,
+       0x2621f502,
+       0x8087f102,
+       0x0684b608,
+       0xb70089cf,
+       0x95220080,
+/* 0x02ba: ctx_init_strand_loop */
+       0x8ed008fe,
+       0x408ed000,
+       0xb6808acf,
+       0xa0b606a5,
+       0x00eabb01,
+       0xb60480b6,
+       0x1bf40192,
+       0x08e4b6e8,
+       0xf1f2efbc,
+       0xb6085c87,
+       0x94bd0684,
+       0xd00399f0,
+       0x00f80089,
+/* 0x02ec: error */
+       0xe7f1e0f9,
+       0xe3f09814,
+       0x8d21f440,
+       0x041ce0b7,
+       0xf401f7f0,
+       0xe0fc8d21,
+/* 0x0306: init */
+       0x04bd00f8,
+       0xf10004fe,
+       0xf0120017,
+       0x12d00227,
+       0x2317f100,
+       0x0010fe04,
+       0x040017f1,
+       0xf0c010d0,
+       0x12d00427,
+       0x1031f400,
+       0x060817f1,
+       0xcf0614b6,
+       0x37f00012,
+       0x1f24f001,
+       0xb60432bb,
+       0x02800132,
+       0x06038005,
+       0x040010b7,
+       0x800012cf,
+       0x27f10402,
+       0x24b60800,
+       0x4022cf06,
+       0x47f134bd,
+       0x44b60700,
+       0x08259506,
+       0xd00045d0,
+       0x0e984045,
+       0x010f9800,
+       0x013d21f5,
+       0xbb002fbb,
+       0x0e98003f,
+       0x020f9801,
+       0x013d21f5,
+       0xfd050e98,
+       0x2ebb00ef,
+       0x003ebb00,
+       0x98020e98,
+       0x21f5030f,
+       0x0e98013d,
+       0x00effd07,
+       0xbb002ebb,
+       0x40b7003e,
+       0x35b61300,
+       0x0043d002,
+       0xb60825b6,
+       0x20b60635,
+       0x0130b601,
+       0xb60824b6,
+       0x2fb90834,
+       0x6321f502,
+       0x003fbb02,
+       0x080017f1,
+       0xd00614b6,
+       0x10b74013,
+       0x24bd0800,
+       0xd01f29f0,
+/* 0x03e6: main */
+       0x31f40012,
+       0x0028f400,
+       0xf424d7f0,
+       0x01f43921,
+       0x04e4b0f4,
+       0xfe1e18f4,
+       0x27f00181,
+       0xfd20bd06,
+       0xe4b60412,
+       0x051efd01,
+       0xf50018fe,
+       0xf404a821,
+/* 0x0416: main_not_ctx_xfer */
+       0xef94d30e,
+       0x01f5f010,
+       0x02ec21f5,
+/* 0x0423: ih */
+       0xf9c60ef4,
+       0x0188fe80,
+       0x90f980f9,
+       0xb0f9a0f9,
+       0xe0f9d0f9,
+       0x0acff0f9,
+       0x04abc480,
+       0xf11d0bf4,
+       0xf01900b7,
+       0xbecf24d7,
+       0x00bfcf40,
+       0xb70421f4,
+       0xf00400b0,
+       0xbed001e7,
+/* 0x0459: ih_no_fifo */
+       0x400ad000,
+       0xe0fcf0fc,
+       0xb0fcd0fc,
+       0x90fca0fc,
+       0x88fe80fc,
+       0xf480fc00,
+       0x01f80032,
+/* 0x0474: hub_barrier_done */
+       0x9801f7f0,
+       0xfebb040e,
+       0x18e7f104,
+       0x40e3f094,
+       0xf88d21f4,
+/* 0x0489: ctx_redswitch */
+       0x14e7f100,
+       0x06e4b606,
+       0xd020f7f0,
+       0xf7f000ef,
+/* 0x0499: ctx_redswitch_delay */
+       0x01f2b608,
+       0xf1fd1bf4,
+       0xd00a20f7,
+       0x00f800ef,
+/* 0x04a8: ctx_xfer */
+       0x0a0417f1,
+       0xd00614b6,
+       0x11f4001f,
+       0x8921f507,
+/* 0x04b9: ctx_xfer_not_load */
+       0xfc17f104,
+       0x0213f04a,
+       0xd00c27f0,
+       0x21f50012,
+       0x27f10207,
+       0x23f047fc,
+       0x0020d002,
+       0xb6012cf0,
+       0x12d00320,
+       0x01acf000,
+       0xf002a5f0,
+       0xb3f000b7,
+       0x040c9850,
+       0xbb0fc4b6,
+       0x0c9800bc,
+       0x010d9800,
+       0xf500e7f0,
+       0xf0015c21,
+       0xb7f101ac,
+       0xb3f04000,
+       0x040c9850,
+       0xbb0fc4b6,
+       0x0c9800bc,
+       0x020d9801,
+       0xf1060f98,
+       0xf50800e7,
+       0xf0015c21,
+       0xa5f001ac,
+       0x00b7f104,
+       0x50b3f030,
+       0xb6040c98,
+       0xbcbb0fc4,
+       0x020c9800,
+       0x98030d98,
+       0xe7f1080f,
+       0x21f50200,
+       0x21f5015c,
+       0x01f40207,
+       0x1412f406,
+/* 0x0554: ctx_xfer_post */
+       0x4afc17f1,
+       0xf00213f0,
+       0x12d00d27,
+       0x0721f500,
+/* 0x0565: ctx_xfer_done */
+       0x7421f502,
+       0x0000f804,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+};
index b2169be2d82f86b81505c1203a6117ae8432057c..6b906cd2a31fa44518e1501f546edeb052caf8ce 100644 (file)
@@ -22,7 +22,9 @@
  * Authors: Ben Skeggs <bskeggs@redhat.com>
  */
 
-#define NVGK
+#define NV_PGRAPH_GPCX_UNK__SIZE                                     0x00000001
+
+#define CHIPSET GK100
 #include "macros.fuc"
 
 .section #nve0_grgpc_data
index 2592a825e1a5dacbaf8693f58653fb6a36b4ede8..6b81e7bae13fe79e831af65cdf500fbe18377ec8 100644 (file)
@@ -377,7 +377,7 @@ ih:
        bclr $flags $p0
        iret
 
-#ifdef NVGF
+#if CHIPSET < GK100
 // Not real sure, but, MEM_CMD 7 will hang forever if this isn't done
 ctx_4160s:
        mov $r14 0x4160
@@ -541,7 +541,7 @@ ctx_load:
 // In: $r2 channel address
 //
 ctx_chan:
-#ifdef NVGF
+#if CHIPSET < GK100
        call #ctx_4160s
 #endif
        call #ctx_load
@@ -555,7 +555,7 @@ ctx_chan:
                iord $r2 I[$r1 + 0x000]
                or $r2 $r2
                bra ne #ctx_chan_wait
-#ifdef NVGF
+#if CHIPSET < GK100
        call #ctx_4160c
 #endif
        ret
@@ -634,7 +634,7 @@ ctx_xfer:
        ctx_xfer_pre:
                mov $r15 0x10
                call #ctx_86c
-#ifdef NVGF
+#if CHIPSET < GK100
                call #ctx_4160s
 #endif
                bra not $p1 #ctx_xfer_exec
@@ -725,7 +725,7 @@ ctx_xfer:
                        call #ctx_mmio_exec
 
                ctx_xfer_no_post_mmio:
-#ifdef NVGF
+#if CHIPSET < GK100
                call #ctx_4160c
 #endif
 
index 164d5b953c6889b6a72d0b88dbf099dd05220353..3ff52badf9320ea7fd34c4438937aee8fcfd5c3a 100644 (file)
@@ -22,7 +22,7 @@
  * Authors: Ben Skeggs <bskeggs@redhat.com>
  */
 
-#define NVGF
+#define CHIPSET GF100
 #include "macros.fuc"
 
 .section #nvc0_grhub_data
diff --git a/drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnvd7.fuc b/drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnvd7.fuc
new file mode 100644 (file)
index 0000000..afbe03a
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2013 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>
+ */
+
+#define CHIPSET GF117
+#include "macros.fuc"
+
+.section #nvd7_grhub_data
+#define INCLUDE_DATA
+#include "com.fuc"
+#include "hub.fuc"
+#undef INCLUDE_DATA
+
+.section #nvd7_grhub_code
+#define INCLUDE_CODE
+bra #init
+#include "com.fuc"
+#include "hub.fuc"
+.align 256
+#undef INCLUDE_CODE
diff --git a/drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnvd7.fuc.h b/drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnvd7.fuc.h
new file mode 100644 (file)
index 0000000..141d6a8
--- /dev/null
@@ -0,0 +1,857 @@
+uint32_t nvd7_grhub_data[] = {
+/* 0x0000: hub_mmio_list_head */
+       0x00000300,
+/* 0x0004: hub_mmio_list_tail */
+       0x00000304,
+/* 0x0008: gpc_count */
+       0x00000000,
+/* 0x000c: rop_count */
+       0x00000000,
+/* 0x0010: cmd_queue */
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+/* 0x0058: ctx_current */
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+/* 0x0100: chan_data */
+/* 0x0100: chan_mmio_count */
+       0x00000000,
+/* 0x0104: chan_mmio_address */
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+/* 0x0200: xfer_data */
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+/* 0x0300: hub_mmio_list_base */
+       0x0417e91c,
+};
+
+uint32_t nvd7_grhub_code[] = {
+       0x03090ef5,
+/* 0x0004: queue_put */
+       0x9800d898,
+       0x86f001d9,
+       0x0489b808,
+       0xf00c1bf4,
+       0x21f502f7,
+       0x00f802ec,
+/* 0x001c: queue_put_next */
+       0xb60798c4,
+       0x8dbb0384,
+       0x0880b600,
+       0x80008e80,
+       0x90b6018f,
+       0x0f94f001,
+       0xf801d980,
+/* 0x0039: queue_get */
+       0x0131f400,
+       0x9800d898,
+       0x89b801d9,
+       0x210bf404,
+       0xb60789c4,
+       0x9dbb0394,
+       0x0890b600,
+       0x98009e98,
+       0x80b6019f,
+       0x0f84f001,
+       0xf400d880,
+/* 0x0066: queue_get_done */
+       0x00f80132,
+/* 0x0068: nv_rd32 */
+       0x0728b7f1,
+       0xb906b4b6,
+       0xc9f002ec,
+       0x00bcd01f,
+/* 0x0078: nv_rd32_wait */
+       0xc800bccf,
+       0x1bf41fcc,
+       0x06a7f0fa,
+       0x010321f5,
+       0xf840bfcf,
+/* 0x008d: nv_wr32 */
+       0x28b7f100,
+       0x06b4b607,
+       0xb980bfd0,
+       0xc9f002ec,
+       0x1ec9f01f,
+/* 0x00a3: nv_wr32_wait */
+       0xcf00bcd0,
+       0xccc800bc,
+       0xfa1bf41f,
+/* 0x00ae: watchdog_reset */
+       0x87f100f8,
+       0x84b60430,
+       0x1ff9f006,
+       0xf8008fd0,
+/* 0x00bd: watchdog_clear */
+       0x3087f100,
+       0x0684b604,
+       0xf80080d0,
+/* 0x00c9: wait_donez */
+       0x3c87f100,
+       0x0684b608,
+       0x99f094bd,
+       0x0089d000,
+       0x081887f1,
+       0xd00684b6,
+/* 0x00e2: wait_donez_ne */
+       0x87f1008a,
+       0x84b60400,
+       0x0088cf06,
+       0xf4888aff,
+       0x87f1f31b,
+       0x84b6085c,
+       0xf094bd06,
+       0x89d00099,
+/* 0x0103: wait_doneo */
+       0xf100f800,
+       0xb6083c87,
+       0x94bd0684,
+       0xd00099f0,
+       0x87f10089,
+       0x84b60818,
+       0x008ad006,
+/* 0x011c: wait_doneo_e */
+       0x040087f1,
+       0xcf0684b6,
+       0x8aff0088,
+       0xf30bf488,
+       0x085c87f1,
+       0xbd0684b6,
+       0x0099f094,
+       0xf80089d0,
+/* 0x013d: mmctx_size */
+/* 0x013f: nv_mmctx_size_loop */
+       0x9894bd00,
+       0x85b600e8,
+       0x0180b61a,
+       0xbb0284b6,
+       0xe0b60098,
+       0x04efb804,
+       0xb9eb1bf4,
+       0x00f8029f,
+/* 0x015c: mmctx_xfer */
+       0x083c87f1,
+       0xbd0684b6,
+       0x0199f094,
+       0xf10089d0,
+       0xb6071087,
+       0x94bd0684,
+       0xf405bbfd,
+       0x8bd0090b,
+       0x0099f000,
+/* 0x0180: mmctx_base_disabled */
+       0xf405eefd,
+       0x8ed00c0b,
+       0xc08fd080,
+/* 0x018f: mmctx_multi_disabled */
+       0xb70199f0,
+       0xc8010080,
+       0xb4b600ab,
+       0x0cb9f010,
+       0xb601aec8,
+       0xbefd11e4,
+       0x008bd005,
+/* 0x01a8: mmctx_exec_loop */
+/* 0x01a8: mmctx_wait_free */
+       0xf0008ecf,
+       0x0bf41fe4,
+       0x00ce98fa,
+       0xd005e9fd,
+       0xc0b6c08e,
+       0x04cdb804,
+       0xc8e81bf4,
+       0x1bf402ab,
+/* 0x01c9: mmctx_fini_wait */
+       0x008bcf18,
+       0xb01fb4f0,
+       0x1bf410b4,
+       0x02a7f0f7,
+       0xf4c921f4,
+/* 0x01de: mmctx_stop */
+       0xabc81b0e,
+       0x10b4b600,
+       0xf00cb9f0,
+       0x8bd012b9,
+/* 0x01ed: mmctx_stop_wait */
+       0x008bcf00,
+       0xf412bbc8,
+/* 0x01f6: mmctx_done */
+       0x87f1fa1b,
+       0x84b6085c,
+       0xf094bd06,
+       0x89d00199,
+/* 0x0207: strand_wait */
+       0xf900f800,
+       0x02a7f0a0,
+       0xfcc921f4,
+/* 0x0213: strand_pre */
+       0xf100f8a0,
+       0xf04afc87,
+       0x97f00283,
+       0x0089d00c,
+       0x020721f5,
+/* 0x0226: strand_post */
+       0x87f100f8,
+       0x83f04afc,
+       0x0d97f002,
+       0xf50089d0,
+       0xf8020721,
+/* 0x0239: strand_set */
+       0xfca7f100,
+       0x02a3f04f,
+       0x0500aba2,
+       0xd00fc7f0,
+       0xc7f000ac,
+       0x00bcd00b,
+       0x020721f5,
+       0xf000aed0,
+       0xbcd00ac7,
+       0x0721f500,
+/* 0x0263: strand_ctx_init */
+       0xf100f802,
+       0xb6083c87,
+       0x94bd0684,
+       0xd00399f0,
+       0x21f50089,
+       0xe7f00213,
+       0x3921f503,
+       0xfca7f102,
+       0x02a3f046,
+       0x0400aba0,
+       0xf040a0d0,
+       0xbcd001c7,
+       0x0721f500,
+       0x010c9202,
+       0xf000acd0,
+       0xbcd002c7,
+       0x0721f500,
+       0x2621f502,
+       0x8087f102,
+       0x0684b608,
+       0xb70089cf,
+       0x95220080,
+/* 0x02ba: ctx_init_strand_loop */
+       0x8ed008fe,
+       0x408ed000,
+       0xb6808acf,
+       0xa0b606a5,
+       0x00eabb01,
+       0xb60480b6,
+       0x1bf40192,
+       0x08e4b6e8,
+       0xf1f2efbc,
+       0xb6085c87,
+       0x94bd0684,
+       0xd00399f0,
+       0x00f80089,
+/* 0x02ec: error */
+       0xe7f1e0f9,
+       0xe4b60814,
+       0x00efd006,
+       0x0c1ce7f1,
+       0xf006e4b6,
+       0xefd001f7,
+       0xf8e0fc00,
+/* 0x0309: init */
+       0xfe04bd00,
+       0x07fe0004,
+       0x0017f100,
+       0x0227f012,
+       0xf10012d0,
+       0xfe058517,
+       0x17f10010,
+       0x10d00400,
+       0x0437f1c0,
+       0x0634b604,
+       0x200327f1,
+       0xf10032d0,
+       0xd0200427,
+       0x27f10132,
+       0x32d0200b,
+       0x0c27f102,
+       0x0732d020,
+       0x0c2427f1,
+       0xb90624b6,
+       0x23d00003,
+       0x0427f100,
+       0x0023f087,
+       0xb70012d0,
+       0xf0010012,
+       0x12d00427,
+       0x1031f400,
+       0x9604e7f1,
+       0xf440e3f0,
+       0xf1c76821,
+       0x03018090,
+       0x801ff4f0,
+       0x17f0020f,
+       0x041fbb01,
+       0xf10112b6,
+       0xb6040c27,
+       0x21d00624,
+       0x4021d000,
+       0x010017f1,
+       0x98000e98,
+       0x21f5010f,
+       0x37f1013d,
+       0x34b60700,
+       0x08149506,
+       0xd00034d0,
+       0x30b74034,
+       0x1fbb1300,
+       0x02f5b600,
+       0xb6003fd0,
+       0x10b60815,
+       0x0814b601,
+       0xf5021fb9,
+       0xbb026321,
+       0x0398001f,
+       0x0047f102,
+       0x5043f020,
+/* 0x03e4: init_gpc */
+       0x08044ea0,
+       0xf4021fb9,
+       0x4ea08d21,
+       0xf4bd010c,
+       0xa08d21f4,
+       0xf401044e,
+       0x4ea08d21,
+       0xf7f00100,
+       0x8d21f402,
+       0x08004ea0,
+/* 0x040c: init_gpc_wait */
+       0xc86821f4,
+       0x0bf41fff,
+       0x044ea0fa,
+       0x6821f408,
+       0xb7001fbb,
+       0xb6800040,
+       0x1bf40132,
+       0x0027f1be,
+       0x0624b608,
+       0xb74021d0,
+       0xbd080020,
+       0x1f19f014,
+/* 0x043f: main */
+       0xf40021d0,
+       0x28f40031,
+       0x10d7f000,
+       0xf43921f4,
+       0xe4b1f401,
+       0x1bf54001,
+       0x87f100d1,
+       0x84b6083c,
+       0xf094bd06,
+       0x89d00499,
+       0x0017f100,
+       0x0614b60b,
+       0xcf4012cf,
+       0x13c80011,
+       0x7e0bf41f,
+       0xf41f23c8,
+       0x20f95a0b,
+       0xf10212b9,
+       0xb6083c87,
+       0x94bd0684,
+       0xd00799f0,
+       0x32f40089,
+       0x0231f401,
+       0x07f521f5,
+       0x085c87f1,
+       0xbd0684b6,
+       0x0799f094,
+       0xfc0089d0,
+       0x3c87f120,
+       0x0684b608,
+       0x99f094bd,
+       0x0089d006,
+       0xf50131f4,
+       0xf107f521,
+       0xb6085c87,
+       0x94bd0684,
+       0xd00699f0,
+       0x0ef40089,
+/* 0x04d5: chsw_prev_no_next */
+       0xb920f931,
+       0x32f40212,
+       0x0232f401,
+       0x07f521f5,
+       0x17f120fc,
+       0x14b60b00,
+       0x0012d006,
+/* 0x04f3: chsw_no_prev */
+       0xc8130ef4,
+       0x0bf41f23,
+       0x0131f40d,
+       0xf50232f4,
+/* 0x0503: chsw_done */
+       0xf107f521,
+       0xb60b0c17,
+       0x27f00614,
+       0x0012d001,
+       0x085c87f1,
+       0xbd0684b6,
+       0x0499f094,
+       0xf50089d0,
+/* 0x0523: main_not_ctx_switch */
+       0xb0ff200e,
+       0x1bf401e4,
+       0x02f2b90d,
+       0x078121f5,
+/* 0x0533: main_not_ctx_chan */
+       0xb0420ef4,
+       0x1bf402e4,
+       0x3c87f12e,
+       0x0684b608,
+       0x99f094bd,
+       0x0089d007,
+       0xf40132f4,
+       0x21f50232,
+       0x87f107f5,
+       0x84b6085c,
+       0xf094bd06,
+       0x89d00799,
+       0x110ef400,
+/* 0x0564: main_not_ctx_save */
+       0xf010ef94,
+       0x21f501f5,
+       0x0ef502ec,
+/* 0x0572: main_done */
+       0x17f1fed1,
+       0x14b60820,
+       0xf024bd06,
+       0x12d01f29,
+       0xbe0ef500,
+/* 0x0585: ih */
+       0xfe80f9fe,
+       0x80f90188,
+       0xa0f990f9,
+       0xd0f9b0f9,
+       0xf0f9e0f9,
+       0xc4800acf,
+       0x0bf404ab,
+       0x00b7f11d,
+       0x10d7f019,
+       0xcf40becf,
+       0x21f400bf,
+       0x00b0b704,
+       0x01e7f004,
+/* 0x05bb: ih_no_fifo */
+       0xe400bed0,
+       0xf40100ab,
+       0xd7f00d0b,
+       0x01e7f110,
+       0x0421f440,
+/* 0x05cc: ih_no_ctxsw */
+       0x0104b7f1,
+       0xabffb0bd,
+       0x0d0bf4b4,
+       0x0c1ca7f1,
+       0xd006a4b6,
+/* 0x05e2: ih_no_other */
+       0x0ad000ab,
+       0xfcf0fc40,
+       0xfcd0fce0,
+       0xfca0fcb0,
+       0xfe80fc90,
+       0x80fc0088,
+       0xf80032f4,
+/* 0x05fd: ctx_4160s */
+       0x60e7f101,
+       0x40e3f041,
+       0xf401f7f0,
+/* 0x060a: ctx_4160s_wait */
+       0x21f48d21,
+       0x04ffc868,
+       0xf8fa0bf4,
+/* 0x0615: ctx_4160c */
+       0x60e7f100,
+       0x40e3f041,
+       0x21f4f4bd,
+/* 0x0623: ctx_4170s */
+       0xf100f88d,
+       0xf04170e7,
+       0xf5f040e3,
+       0x8d21f410,
+/* 0x0632: ctx_4170w */
+       0xe7f100f8,
+       0xe3f04170,
+       0x6821f440,
+       0xf410f4f0,
+       0x00f8f31b,
+/* 0x0644: ctx_redswitch */
+       0x0614e7f1,
+       0xf106e4b6,
+       0xd00270f7,
+       0xf7f000ef,
+/* 0x0655: ctx_redswitch_delay */
+       0x01f2b608,
+       0xf1fd1bf4,
+       0xd00770f7,
+       0x00f800ef,
+/* 0x0664: ctx_86c */
+       0x086ce7f1,
+       0xd006e4b6,
+       0xe7f100ef,
+       0xe3f08a14,
+       0x8d21f440,
+       0xa86ce7f1,
+       0xf441e3f0,
+       0x00f88d21,
+/* 0x0684: ctx_load */
+       0x083c87f1,
+       0xbd0684b6,
+       0x0599f094,
+       0xf00089d0,
+       0x21f40ca7,
+       0x2417f1c9,
+       0x0614b60a,
+       0xf10010d0,
+       0xb60b0037,
+       0x32d00634,
+       0x0c17f140,
+       0x0614b60a,
+       0xd00747f0,
+       0x14d00012,
+/* 0x06bd: ctx_chan_wait_0 */
+       0x4014cf40,
+       0xf41f44f0,
+       0x32d0fa1b,
+       0x000bfe00,
+       0xb61f2af0,
+       0x20b60424,
+       0x3c87f102,
+       0x0684b608,
+       0x99f094bd,
+       0x0089d008,
+       0x0a0417f1,
+       0xd00614b6,
+       0x17f10012,
+       0x14b60a20,
+       0x0227f006,
+       0x800023f1,
+       0xf00012d0,
+       0x27f11017,
+       0x23f00200,
+       0x0512fa02,
+       0x87f103f8,
+       0x84b6085c,
+       0xf094bd06,
+       0x89d00899,
+       0x81019800,
+       0x981814b6,
+       0x25b68002,
+       0x0512fd08,
+       0xf1160180,
+       0xb6083c87,
+       0x94bd0684,
+       0xd00999f0,
+       0x27f10089,
+       0x24b60a04,
+       0x0021d006,
+       0xf10127f0,
+       0xb60a2017,
+       0x12d00614,
+       0x0017f100,
+       0x0613f001,
+       0xf80501fa,
+       0x5c87f103,
+       0x0684b608,
+       0x99f094bd,
+       0x0089d009,
+       0x085c87f1,
+       0xbd0684b6,
+       0x0599f094,
+       0xf80089d0,
+/* 0x0781: ctx_chan */
+       0xfd21f500,
+       0x8421f505,
+       0x0ca7f006,
+       0xf1c921f4,
+       0xb60a1017,
+       0x27f00614,
+       0x0012d005,
+/* 0x079c: ctx_chan_wait */
+       0xfd0012cf,
+       0x1bf40522,
+       0x1521f5fa,
+/* 0x07ab: ctx_mmio_exec */
+       0x9800f806,
+       0x27f14103,
+       0x24b60a04,
+       0x0023d006,
+/* 0x07ba: ctx_mmio_loop */
+       0x34c434bd,
+       0x0f1bf4ff,
+       0x020057f1,
+       0xfa0653f0,
+       0x03f80535,
+/* 0x07cc: ctx_mmio_pull */
+       0x98804e98,
+       0x21f4814f,
+       0x0830b68d,
+       0xf40112b6,
+/* 0x07de: ctx_mmio_done */
+       0x0398df1b,
+       0x0023d016,
+       0xf1400080,
+       0xf0010017,
+       0x01fa0613,
+       0xf803f806,
+/* 0x07f5: ctx_xfer */
+       0x00f7f100,
+       0x06f4b60c,
+       0xd004e7f0,
+/* 0x0802: ctx_xfer_idle */
+       0xfecf80fe,
+       0x00e4f100,
+       0xf91bf420,
+       0xf40611f4,
+/* 0x0812: ctx_xfer_pre */
+       0xf7f01102,
+       0x6421f510,
+       0xfd21f506,
+       0x1c11f405,
+/* 0x0820: ctx_xfer_pre_load */
+       0xf502f7f0,
+       0xf5062321,
+       0xf5063221,
+       0xbd064421,
+       0x2321f5f4,
+       0x8421f506,
+/* 0x0839: ctx_xfer_exec */
+       0x16019806,
+       0x041427f1,
+       0xd00624b6,
+       0xe7f10020,
+       0xe3f0a500,
+       0x021fb941,
+       0xb68d21f4,
+       0xfcf004e0,
+       0x022cf001,
+       0xfd0124b6,
+       0x21f405f2,
+       0xfc17f18d,
+       0x0213f04a,
+       0xd00c27f0,
+       0x21f50012,
+       0x27f10207,
+       0x23f047fc,
+       0x0020d002,
+       0xb6012cf0,
+       0x12d00320,
+       0x01acf000,
+       0xf006a5f0,
+       0x0c9800b7,
+       0x010d9800,
+       0xf500e7f0,
+       0xf0015c21,
+       0x21f508a7,
+       0x21f50103,
+       0x01f40207,
+       0x0ca7f022,
+       0xf1c921f4,
+       0xb60a1017,
+       0x27f00614,
+       0x0012d005,
+/* 0x08c0: ctx_xfer_post_save_wait */
+       0xfd0012cf,
+       0x1bf40522,
+       0x3202f4fa,
+/* 0x08cc: ctx_xfer_post */
+       0xf502f7f0,
+       0xbd062321,
+       0x6421f5f4,
+       0x2621f506,
+       0x3221f502,
+       0xf5f4bd06,
+       0xf4062321,
+       0x01981011,
+       0x0511fd40,
+       0xf5070bf4,
+/* 0x08f7: ctx_xfer_no_post_mmio */
+       0xf507ab21,
+/* 0x08fb: ctx_xfer_done */
+       0xf8061521,
+       0x00000000,
+};
index 27c6a0fdfe0e9fd9ec0041bd8cfd64d8cd4b7711..d4840f1879fd081414b111d65e470fd12c5a76b3 100644 (file)
@@ -22,7 +22,7 @@
  * Authors: Ben Skeggs <bskeggs@redhat.com>
  */
 
-#define NVGK
+#define CHIPSET GK100
 #include "macros.fuc"
 
 .section #nve0_grhub_data
index 43a0b9476efd8f3c9453b2155d63720335d23f30..f73cf3efbc35dcfe5c0375a51b020461d9129f49 100644 (file)
 
 #include "os.h"
 
+#define GF100 0xc0
+#define GF117 0xd7
+#define GK100 0xe0
+
 #define mmctx_data(r,c) .b32 (((c - 1) << 26) | r)
 #define queue_init      .skip 72 // (2 * 4) + ((8 * 4) * 2)
 
index 5f7a040cf0eba2cf2a4f9900baa68eb55ce2d027..fae6daec2a545a10e25d5b4c9da35b09ed53771b 100644 (file)
@@ -282,6 +282,12 @@ nvc0_graph_init_unk88xx[] = {
        {}
 };
 
+struct nvc0_graph_init
+nvc0_graph_tpc_0[] = {
+       { 0x50405c,   1, 0x04, 0x00000001 },
+       {}
+};
+
 void
 nvc0_graph_mmio(struct nvc0_graph_priv *priv, struct nvc0_graph_init *init)
 {
@@ -982,9 +988,6 @@ nvc0_graph_init(struct nouveau_object *object)
        for (i = 0; oclass->mmio[i]; i++)
                nvc0_graph_mmio(priv, oclass->mmio[i]);
 
-       /* affects TFB offset queries */
-       nv_wr32(priv, TPC_UNIT(0, 0, 0x5c), 1);
-
        memcpy(tpcnr, priv->tpc_nr, sizeof(priv->tpc_nr));
        for (i = 0, gpc = -1; i < priv->tpc_total; i++) {
                do {
@@ -1008,7 +1011,11 @@ nvc0_graph_init(struct nouveau_object *object)
                nv_wr32(priv, GPC_UNIT(gpc, 0x0918), magicgpc918);
        }
 
-       nv_wr32(priv, GPC_BCAST(0x1bd4), magicgpc918);
+       if (nv_device(priv)->chipset != 0xd7)
+               nv_wr32(priv, GPC_BCAST(0x1bd4), magicgpc918);
+       else
+               nv_wr32(priv, GPC_BCAST(0x3fd4), magicgpc918);
+
        nv_wr32(priv, GPC_BCAST(0x08ac), nv_rd32(priv, 0x100800));
 
        nv_wr32(priv, 0x400500, 0x00010001);
@@ -1123,10 +1130,9 @@ nvc0_graph_ctor(struct nouveau_object *parent, struct nouveau_object *engine,
        struct nvc0_graph_oclass *oclass = (void *)bclass;
        struct nouveau_device *device = nv_device(parent);
        struct nvc0_graph_priv *priv;
-       bool enable = device->chipset != 0xd7;
        int ret, i;
 
-       ret = nouveau_graph_create(parent, engine, bclass, enable, &priv);
+       ret = nouveau_graph_create(parent, engine, bclass, true, &priv);
        *pobject = nv_object(priv);
        if (ret)
                return ret;
@@ -1199,6 +1205,7 @@ nvc0_graph_ctor(struct nouveau_object *parent, struct nouveau_object *engine,
        case 0xcf: /* 4/0/0/0, 3 */
                priv->magic_not_rop_nr = 0x03;
                break;
+       case 0xd7:
        case 0xd9: /* 1/0/0/0, 1 */
                priv->magic_not_rop_nr = 0x01;
                break;
@@ -1221,6 +1228,7 @@ nvc0_graph_init_mmio[] = {
        nvc0_graph_init_gpc,
        nvc0_graph_init_tpc,
        nvc0_graph_init_unk88xx,
+       nvc0_graph_tpc_0,
        NULL
 };
 
index f8d653b11ad7e1f4a3bfe1aeb74e694f0441079e..0180f05f40c3c6cfdd8f5737b808530210b25f0c 100644 (file)
@@ -193,9 +193,11 @@ extern struct nvc0_graph_init nvc0_graph_init_unk58xx[];
 extern struct nvc0_graph_init nvc0_graph_init_unk80xx[];
 extern struct nvc0_graph_init nvc0_graph_init_gpc[];
 extern struct nvc0_graph_init nvc0_graph_init_unk88xx[];
+extern struct nvc0_graph_init nvc0_graph_tpc_0[];
 
 extern struct nvc0_graph_init nvc3_graph_init_unk58xx[];
 
+extern struct nvc0_graph_init nvd9_graph_init_unk58xx[];
 extern struct nvc0_graph_init nvd9_graph_init_unk64xx[];
 
 extern struct nvc0_graph_init nve4_graph_init_regs[];
@@ -209,6 +211,7 @@ void nvc0_grctx_generate_tpcid(struct nvc0_graph_priv *);
 void nvc0_grctx_generate_r406028(struct nvc0_graph_priv *);
 void nvc0_grctx_generate_r4060a8(struct nvc0_graph_priv *);
 void nvc0_grctx_generate_r418bb8(struct nvc0_graph_priv *);
+void nve4_grctx_generate_r418bb8(struct nvc0_graph_priv *);
 void nvc0_grctx_generate_r406800(struct nvc0_graph_priv *);
 
 extern struct nouveau_oclass *nvc0_grctx_oclass;
@@ -244,8 +247,11 @@ extern struct nouveau_oclass *nvc8_grctx_oclass;
 extern struct nvc0_graph_init nvc8_grctx_init_9197[];
 extern struct nvc0_graph_init nvc8_grctx_init_9297[];
 
+extern struct nouveau_oclass *nvd7_grctx_oclass;
+
 extern struct nouveau_oclass *nvd9_grctx_oclass;
 extern struct nvc0_graph_init nvd9_grctx_init_rop[];
+extern struct nvc0_graph_mthd nvd9_grctx_init_mthd[];
 
 void nve4_grctx_generate_main(struct nvc0_graph_priv *, struct nvc0_grctx *);
 void nve4_grctx_generate_mods(struct nvc0_graph_priv *, struct nvc0_grctx *);
index 6d192d2719c785de832e573c2784f047e2eef293..bc4a469b86cb98538e8411f9e5d628a781e079d7 100644 (file)
@@ -123,6 +123,7 @@ nvc1_graph_init_mmio[] = {
        nvc1_graph_init_gpc,
        nvc1_graph_init_tpc,
        nvc0_graph_init_unk88xx,
+       nvc0_graph_tpc_0,
        NULL
 };
 
index 48d3c761af5bb5b68b8b5cec38f50820971093d1..d44b3b3ee80026606bb0643486f369b6c7f592d3 100644 (file)
@@ -89,6 +89,7 @@ nvc3_graph_init_mmio[] = {
        nvc0_graph_init_gpc,
        nvc3_graph_init_tpc,
        nvc0_graph_init_unk88xx,
+       nvc0_graph_tpc_0,
        NULL
 };
 
index e5b5593a7024352bbb99ea9e234ec0f90b7cbef8..02845e5673147285e921ca7a2a639ae09b0cba7e 100644 (file)
@@ -120,6 +120,7 @@ nvc8_graph_init_mmio[] = {
        nvc8_graph_init_gpc,
        nvc8_graph_init_tpc,
        nvc0_graph_init_unk88xx,
+       nvc0_graph_tpc_0,
        NULL
 };
 
diff --git a/drivers/gpu/drm/nouveau/core/engine/graph/nvd7.c b/drivers/gpu/drm/nouveau/core/engine/graph/nvd7.c
new file mode 100644 (file)
index 0000000..5052d7a
--- /dev/null
@@ -0,0 +1,167 @@
+/*
+ * Copyright 2013 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 "nvc0.h"
+
+/*******************************************************************************
+ * PGRAPH engine/subdev functions
+ ******************************************************************************/
+
+#include "fuc/hubnvd7.fuc.h"
+
+struct nvc0_graph_ucode
+nvd7_graph_fecs_ucode = {
+       .code.data = nvd7_grhub_code,
+       .code.size = sizeof(nvd7_grhub_code),
+       .data.data = nvd7_grhub_data,
+       .data.size = sizeof(nvd7_grhub_data),
+};
+
+#include "fuc/gpcnvd7.fuc.h"
+
+struct nvc0_graph_ucode
+nvd7_graph_gpccs_ucode = {
+       .code.data = nvd7_grgpc_code,
+       .code.size = sizeof(nvd7_grgpc_code),
+       .data.data = nvd7_grgpc_data,
+       .data.size = sizeof(nvd7_grgpc_data),
+};
+
+static struct nvc0_graph_init
+nvd7_graph_init_gpc[] = {
+       { 0x418408,   1, 0x04, 0x00000000 },
+       { 0x4184a0,   1, 0x04, 0x00000000 },
+       { 0x4184a4,   2, 0x04, 0x00000000 },
+       { 0x418604,   1, 0x04, 0x00000000 },
+       { 0x418680,   1, 0x04, 0x00000000 },
+       { 0x418714,   1, 0x04, 0x00000000 },
+       { 0x418384,   1, 0x04, 0x00000000 },
+       { 0x418814,   3, 0x04, 0x00000000 },
+       { 0x418b04,   1, 0x04, 0x00000000 },
+       { 0x4188c8,   2, 0x04, 0x00000000 },
+       { 0x4188d0,   1, 0x04, 0x00010000 },
+       { 0x4188d4,   1, 0x04, 0x00000001 },
+       { 0x418910,   1, 0x04, 0x00010001 },
+       { 0x418914,   1, 0x04, 0x00000301 },
+       { 0x418918,   1, 0x04, 0x00800000 },
+       { 0x418980,   1, 0x04, 0x77777770 },
+       { 0x418984,   3, 0x04, 0x77777777 },
+       { 0x418c04,   1, 0x04, 0x00000000 },
+       { 0x418c64,   1, 0x04, 0x00000000 },
+       { 0x418c68,   1, 0x04, 0x00000000 },
+       { 0x418c88,   1, 0x04, 0x00000000 },
+       { 0x418cb4,   2, 0x04, 0x00000000 },
+       { 0x418d00,   1, 0x04, 0x00000000 },
+       { 0x418d28,   1, 0x04, 0x00000000 },
+       { 0x418f00,   1, 0x04, 0x00000000 },
+       { 0x418f08,   1, 0x04, 0x00000000 },
+       { 0x418f20,   2, 0x04, 0x00000000 },
+       { 0x418e00,   1, 0x04, 0x00000003 },
+       { 0x418e08,   1, 0x04, 0x00000000 },
+       { 0x418e1c,   1, 0x04, 0x00000000 },
+       { 0x418e20,   1, 0x04, 0x00000000 },
+       { 0x41900c,   1, 0x04, 0x00000000 },
+       { 0x419018,   1, 0x04, 0x00000000 },
+       {}
+};
+
+static struct nvc0_graph_init
+nvd7_graph_init_tpc[] = {
+       { 0x419d08,   2, 0x04, 0x00000000 },
+       { 0x419d10,   1, 0x04, 0x00000014 },
+       { 0x419ab0,   1, 0x04, 0x00000000 },
+       { 0x419ac8,   1, 0x04, 0x00000000 },
+       { 0x419ab8,   1, 0x04, 0x000000e7 },
+       { 0x419abc,   2, 0x04, 0x00000000 },
+       { 0x419ab4,   1, 0x04, 0x00000000 },
+       { 0x41980c,   1, 0x04, 0x00000010 },
+       { 0x419844,   1, 0x04, 0x00000000 },
+       { 0x41984c,   1, 0x04, 0x00005bc8 },
+       { 0x419850,   2, 0x04, 0x00000000 },
+       { 0x419c98,   1, 0x04, 0x00000000 },
+       { 0x419ca8,   1, 0x04, 0x80000000 },
+       { 0x419cb4,   1, 0x04, 0x00000000 },
+       { 0x419cb8,   1, 0x04, 0x00008bf4 },
+       { 0x419cbc,   1, 0x04, 0x28137606 },
+       { 0x419cc0,   2, 0x04, 0x00000000 },
+       { 0x419c0c,   1, 0x04, 0x00000000 },
+       { 0x419e00,   1, 0x04, 0x00000000 },
+       { 0x419ea0,   1, 0x04, 0x00000000 },
+       { 0x419ea4,   1, 0x04, 0x00000100 },
+       { 0x419ea8,   1, 0x04, 0x02001100 },
+       { 0x419eac,   1, 0x04, 0x11100702 },
+       { 0x419eb0,   1, 0x04, 0x00000003 },
+       { 0x419eb4,   4, 0x04, 0x00000000 },
+       { 0x419ec8,   1, 0x04, 0x0e063818 },
+       { 0x419ecc,   1, 0x04, 0x0e060e06 },
+       { 0x419ed0,   1, 0x04, 0x00003818 },
+       { 0x419ed4,   1, 0x04, 0x011104f1 },
+       { 0x419edc,   1, 0x04, 0x00000000 },
+       { 0x419f00,   1, 0x04, 0x00000000 },
+       { 0x419f2c,   1, 0x04, 0x00000000 },
+       {}
+};
+
+static struct nvc0_graph_init
+nvd7_graph_init_tpc_0[] = {
+       { 0x40402c,   1, 0x04, 0x00000000 },
+       { 0x4040f0,   1, 0x04, 0x00000000 },
+       { 0x404174,   1, 0x04, 0x00000000 },
+       { 0x503018,   1, 0x04, 0x00000001 },
+       {}
+};
+
+static struct nvc0_graph_init *
+nvd7_graph_init_mmio[] = {
+       nvc0_graph_init_regs,
+       nvc0_graph_init_unk40xx,
+       nvc0_graph_init_unk44xx,
+       nvc0_graph_init_unk78xx,
+       nvc0_graph_init_unk60xx,
+       nvd9_graph_init_unk64xx,
+       nvd9_graph_init_unk58xx,
+       nvc0_graph_init_unk80xx,
+       nvd7_graph_init_gpc,
+       nvd7_graph_init_tpc,
+       nve4_graph_init_unk,
+       nvc0_graph_init_unk88xx,
+       nvd7_graph_init_tpc_0,
+       NULL
+};
+
+struct nouveau_oclass *
+nvd7_graph_oclass = &(struct nvc0_graph_oclass) {
+       .base.handle = NV_ENGINE(GR, 0xd7),
+       .base.ofuncs = &(struct nouveau_ofuncs) {
+               .ctor = nvc0_graph_ctor,
+               .dtor = nvc0_graph_dtor,
+               .init = nvc0_graph_init,
+               .fini = _nouveau_graph_fini,
+       },
+       .cclass = &nvd7_grctx_oclass,
+       .sclass = nvc8_graph_sclass,
+       .mmio = nvd7_graph_init_mmio,
+       .fecs.ucode = &nvd7_graph_fecs_ucode,
+       .gpccs.ucode = &nvd7_graph_gpccs_ucode,
+}.base;
index 0059788af0f1b5d38c8304e8cd2a4751d902e1d9..652098e0df3f618129278a5f0193bf0351f4bb6b 100644 (file)
@@ -34,7 +34,7 @@ nvd9_graph_init_unk64xx[] = {
        {}
 };
 
-static struct nvc0_graph_init
+struct nvc0_graph_init
 nvd9_graph_init_unk58xx[] = {
        { 0x405844,   1, 0x04, 0x00ffffff },
        { 0x405850,   1, 0x04, 0x00000000 },
@@ -144,6 +144,7 @@ nvd9_graph_init_mmio[] = {
        nvd9_graph_init_gpc,
        nvd9_graph_init_tpc,
        nvc0_graph_init_unk88xx,
+       nvc0_graph_tpc_0,
        NULL
 };
 
index 4f5c6248a2192fa71c8b36e3cedaf28efa424d6e..8e1b52312ddc5cb2675696223ea8344548452ef1 100644 (file)
@@ -65,6 +65,7 @@ extern struct nouveau_oclass *nvc0_graph_oclass;
 extern struct nouveau_oclass *nvc1_graph_oclass;
 extern struct nouveau_oclass *nvc3_graph_oclass;
 extern struct nouveau_oclass *nvc8_graph_oclass;
+extern struct nouveau_oclass *nvd7_graph_oclass;
 extern struct nouveau_oclass *nvd9_graph_oclass;
 extern struct nouveau_oclass *nve4_graph_oclass;
 extern struct nouveau_oclass *nvf0_graph_oclass;