drm/gf100-/gr: unhardcode pagepool config
authorBen Skeggs <bskeggs@redhat.com>
Sat, 9 Aug 2014 18:10:29 +0000 (04:10 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Sat, 9 Aug 2014 19:28:15 +0000 (05:28 +1000)
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
13 files changed:
drivers/gpu/drm/nouveau/core/engine/graph/ctxgk110b.c
drivers/gpu/drm/nouveau/core/engine/graph/ctxgk20a.c
drivers/gpu/drm/nouveau/core/engine/graph/ctxgm107.c
drivers/gpu/drm/nouveau/core/engine/graph/ctxnv108.c
drivers/gpu/drm/nouveau/core/engine/graph/ctxnvc0.c
drivers/gpu/drm/nouveau/core/engine/graph/ctxnvc0.h
drivers/gpu/drm/nouveau/core/engine/graph/ctxnvc1.c
drivers/gpu/drm/nouveau/core/engine/graph/ctxnvc4.c
drivers/gpu/drm/nouveau/core/engine/graph/ctxnvc8.c
drivers/gpu/drm/nouveau/core/engine/graph/ctxnvd7.c
drivers/gpu/drm/nouveau/core/engine/graph/ctxnvd9.c
drivers/gpu/drm/nouveau/core/engine/graph/ctxnve4.c
drivers/gpu/drm/nouveau/core/engine/graph/ctxnvf0.c

index b3f5ea66566e105eb6d28aa26792afa39540fdc0..11bf8b3a45df298763b871e4e7ddc24bcb1a7287 100644 (file)
@@ -95,4 +95,6 @@ gk110b_grctx_oclass = &(struct nvc0_grctx_oclass) {
        .bundle_size = 0x3000,
        .bundle_min_gpm_fifo_depth = 0x180,
        .bundle_token_limit = 0x600,
+       .pagepool = nve4_grctx_generate_pagepool,
+       .pagepool_size = 0x8000,
 }.base;
index 1ec78bdca4b17f6148bb352e37f72a41ff649a20..c560f486dcfbd830848713e3f874ebd46fb93cd1 100644 (file)
@@ -54,4 +54,6 @@ gk20a_grctx_oclass = &(struct nvc0_grctx_oclass) {
        .bundle_size = 0x1800,
        .bundle_min_gpm_fifo_depth = 0x62,
        .bundle_token_limit = 0x100,
+       .pagepool = nve4_grctx_generate_pagepool,
+       .pagepool_size = 0x8000,
 }.base;
index a4f008855966506dbcf43ad253390bb9a8c201bb..5f4d60e0ea07559b849c455f84e2b1c7e1b7f431 100644 (file)
@@ -875,19 +875,26 @@ gm107_grctx_generate_bundle(struct nvc0_grctx *info)
        mmio_wr32(info, 0x4064c8, (state_limit << 16) | token_limit);
 }
 
+static void
+gm107_grctx_generate_pagepool(struct nvc0_grctx *info)
+{
+       const struct nvc0_grctx_oclass *impl = nvc0_grctx_impl(info->priv);
+       const u32 access = NV_MEM_ACCESS_RW | NV_MEM_ACCESS_SYS;
+       const int s = 8;
+       const int b = mmio_vram(info, impl->pagepool_size, (1 << s), access);
+       mmio_refn(info, 0x40800c, 0x00000000, s, b);
+       mmio_wr32(info, 0x408010, 0x80000000);
+       mmio_refn(info, 0x419004, 0x00000000, s, b);
+       mmio_wr32(info, 0x419008, 0x00000000);
+       mmio_wr32(info, 0x4064cc, 0x80000000);
+       mmio_wr32(info, 0x418e30, 0x80000000); /* guess at it being related */
+}
+
 static void
 gm107_grctx_generate_mods(struct nvc0_graph_priv *priv, struct nvc0_grctx *info)
 {
-       mmio_data(0x008000, 0x0100, NV_MEM_ACCESS_RW | NV_MEM_ACCESS_SYS);
        mmio_data(0x200000, 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(0x4064cc, 0x80000000,  0, 0);
-       mmio_list(0x418e30, 0x80000000,  0, 0);
-
        mmio_list(0x418810, 0x80000000, 12, 2);
        mmio_list(0x419848, 0x10000000, 12, 2);
        mmio_list(0x419c2c, 0x10000000, 12, 2);
@@ -944,6 +951,7 @@ gm107_grctx_generate_main(struct nvc0_graph_priv *priv, struct nvc0_grctx *info)
        nv_wr32(priv, 0x404154, 0x00000000);
 
        oclass->bundle(info);
+       oclass->pagepool(info);
        oclass->mods(priv, info);
        oclass->unkn(priv);
 
@@ -1002,4 +1010,6 @@ gm107_grctx_oclass = &(struct nvc0_grctx_oclass) {
        .bundle_size = 0x3000,
        .bundle_min_gpm_fifo_depth = 0x180,
        .bundle_token_limit = 0x2c0,
+       .pagepool = gm107_grctx_generate_pagepool,
+       .pagepool_size = 0x8000,
 }.base;
index c9eb8ed46d127608837c30b6fffa14474d042693..c3487c42e5d6f6371fa850520e40422925d8b167 100644 (file)
@@ -538,13 +538,7 @@ nv108_grctx_generate_mods(struct nvc0_graph_priv *priv, struct nvc0_grctx *info)
        u32 offset;
        int gpc;
 
-       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(0x4064cc, 0x80000000,  0, 0);
        mmio_list(0x418810, 0x80000000, 12, 2);
        mmio_list(0x419848, 0x10000000, 12, 2);
 
@@ -594,4 +588,6 @@ nv108_grctx_oclass = &(struct nvc0_grctx_oclass) {
        .bundle_size = 0x3000,
        .bundle_min_gpm_fifo_depth = 0xc2,
        .bundle_token_limit = 0x200,
+       .pagepool = nve4_grctx_generate_pagepool,
+       .pagepool_size = 0x8000,
 }.base;
index 4186a0a2baa523e990eaef7f6d2f9070fc992b7f..8dd3a5b56cd3490c2b06a1ba4980e1bed1dc848d 100644 (file)
@@ -1033,21 +1033,29 @@ nvc0_grctx_generate_bundle(struct nvc0_grctx *info)
        mmio_refn(info, 0x41880c, 0x80000000 | (impl->bundle_size >> s), 0, b);
 }
 
+void
+nvc0_grctx_generate_pagepool(struct nvc0_grctx *info)
+{
+       const struct nvc0_grctx_oclass *impl = nvc0_grctx_impl(info->priv);
+       const u32 access = NV_MEM_ACCESS_RW | NV_MEM_ACCESS_SYS;
+       const int s = 8;
+       const int b = mmio_vram(info, impl->pagepool_size, (1 << s), access);
+       mmio_refn(info, 0x40800c, 0x00000000, s, b);
+       mmio_wr32(info, 0x408010, 0x80000000);
+       mmio_refn(info, 0x419004, 0x00000000, s, b);
+       mmio_wr32(info, 0x419008, 0x00000000);
+}
+
 void
 nvc0_grctx_generate_mods(struct nvc0_graph_priv *priv, struct nvc0_grctx *info)
 {
        int gpc, tpc;
        u32 offset;
 
-       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(0x418810, 0x80000000, 12, 2);
        mmio_list(0x419848, 0x10000000, 12, 2);
-       mmio_list(0x419004, 0x00000000,  8, 1);
-       mmio_list(0x419008, 0x00000000,  0, 0);
 
        mmio_list(0x405830, 0x02180000, 0, 0);
 
@@ -1227,6 +1235,7 @@ nvc0_grctx_generate_main(struct nvc0_graph_priv *priv, struct nvc0_grctx *info)
        nv_wr32(priv, 0x404154, 0x00000000);
 
        oclass->bundle(info);
+       oclass->pagepool(info);
        oclass->mods(priv, info);
        oclass->unkn(priv);
 
@@ -1365,4 +1374,6 @@ nvc0_grctx_oclass = &(struct nvc0_grctx_oclass) {
        .mthd  = nvc0_grctx_pack_mthd,
        .bundle = nvc0_grctx_generate_bundle,
        .bundle_size = 0x1800,
+       .pagepool = nvc0_grctx_generate_pagepool,
+       .pagepool_size = 0x8000,
 }.base;
index 26744ac89fb720638710665df87ea183d2132b10..6387a160ac18878db86649f10caa74c04cbdc0c3 100644 (file)
@@ -44,6 +44,9 @@ struct nvc0_grctx_oclass {
        u32 bundle_size;
        u32 bundle_min_gpm_fifo_depth;
        u32 bundle_token_limit;
+       /* pagepool */
+       void (*pagepool)(struct nvc0_grctx *);
+       u32 pagepool_size;
 };
 
 static inline const struct nvc0_grctx_oclass *
@@ -56,6 +59,7 @@ extern struct nouveau_oclass *nvc0_grctx_oclass;
 int  nvc0_grctx_generate(struct nvc0_graph_priv *);
 void nvc0_grctx_generate_main(struct nvc0_graph_priv *, struct nvc0_grctx *);
 void nvc0_grctx_generate_bundle(struct nvc0_grctx *);
+void nvc0_grctx_generate_pagepool(struct nvc0_grctx *);
 void nvc0_grctx_generate_mods(struct nvc0_graph_priv *, struct nvc0_grctx *);
 void nvc0_grctx_generate_unkn(struct nvc0_graph_priv *);
 void nvc0_grctx_generate_tpcid(struct nvc0_graph_priv *);
@@ -77,6 +81,7 @@ extern struct nouveau_oclass *nve4_grctx_oclass;
 extern struct nouveau_oclass *gk20a_grctx_oclass;
 void nve4_grctx_generate_main(struct nvc0_graph_priv *, struct nvc0_grctx *);
 void nve4_grctx_generate_bundle(struct nvc0_grctx *);
+void nve4_grctx_generate_pagepool(struct nvc0_grctx *);
 void nve4_grctx_generate_mods(struct nvc0_graph_priv *, struct nvc0_grctx *);
 void nve4_grctx_generate_unkn(struct nvc0_graph_priv *);
 void nve4_grctx_generate_r418bb8(struct nvc0_graph_priv *);
index 9043965c27a4bcc68ab29a56fb95a8f712893e94..f174204c18ab01c4cd19df016b921a1c8f3f452e 100644 (file)
@@ -732,14 +732,9 @@ nvc1_grctx_generate_mods(struct nvc0_graph_priv *priv, struct nvc0_grctx *info)
        int gpc, tpc;
        u32 offset;
 
-       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(0x418810, 0x80000000, 12, 2);
        mmio_list(0x419848, 0x10000000, 12, 2);
-       mmio_list(0x419004, 0x00000000,  8, 1);
-       mmio_list(0x419008, 0x00000000,  0, 0);
 
        mmio_list(0x405830, 0x02180218, 0, 0);
        mmio_list(0x4064c4, 0x0086ffff, 0, 0);
@@ -791,4 +786,6 @@ nvc1_grctx_oclass = &(struct nvc0_grctx_oclass) {
        .mthd  = nvc1_grctx_pack_mthd,
        .bundle = nvc0_grctx_generate_bundle,
        .bundle_size = 0x1800,
+       .pagepool = nvc0_grctx_generate_pagepool,
+       .pagepool_size = 0x8000,
 }.base;
index e96606a5743254320d71859747b638a57e515322..ec7f32a6a0f9556ffa301382869658e897681157 100644 (file)
@@ -102,4 +102,6 @@ nvc4_grctx_oclass = &(struct nvc0_grctx_oclass) {
        .mthd  = nvc0_grctx_pack_mthd,
        .bundle = nvc0_grctx_generate_bundle,
        .bundle_size = 0x1800,
+       .pagepool = nvc0_grctx_generate_pagepool,
+       .pagepool_size = 0x8000,
 }.base;
index cc4646e514fc4c5f28d24efcfd124e3f19c1b8fc..de0586829ce1647e96557b3b0f1942e9f38bb398 100644 (file)
@@ -353,4 +353,6 @@ nvc8_grctx_oclass = &(struct nvc0_grctx_oclass) {
        .mthd  = nvc8_grctx_pack_mthd,
        .bundle = nvc0_grctx_generate_bundle,
        .bundle_size = 0x1800,
+       .pagepool = nvc0_grctx_generate_pagepool,
+       .pagepool_size = 0x8000,
 }.base;
index 930a205111b26fae2a305c4abe15a581219148ce..ce016ac225a92def8e47fff3b909482d81aaf219 100644 (file)
@@ -184,12 +184,7 @@ nvd7_grctx_generate_mods(struct nvc0_graph_priv *priv, struct nvc0_grctx *info)
        u32 offset;
        int gpc;
 
-       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(0x418810, 0x80000000, 12, 2);
        mmio_list(0x419848, 0x10000000, 12, 2);
 
@@ -229,6 +224,7 @@ nvd7_grctx_generate_main(struct nvc0_graph_priv *priv, struct nvc0_grctx *info)
        nv_wr32(priv, 0x404154, 0x00000000);
 
        oclass->bundle(info);
+       oclass->pagepool(info);
        oclass->mods(priv, info);
        oclass->unkn(priv);
 
@@ -270,4 +266,6 @@ nvd7_grctx_oclass = &(struct nvc0_grctx_oclass) {
        .mthd  = nvd9_grctx_pack_mthd,
        .bundle = nvc0_grctx_generate_bundle,
        .bundle_size = 0x1800,
+       .pagepool = nvc0_grctx_generate_pagepool,
+       .pagepool_size = 0x8000,
 }.base;
index 8aa5e69aecc6131956d03692dd807805849a3d42..b2b0f7085ea7145e74d5728c332df9651eae7c04 100644 (file)
@@ -521,4 +521,6 @@ nvd9_grctx_oclass = &(struct nvc0_grctx_oclass) {
        .mthd  = nvd9_grctx_pack_mthd,
        .bundle = nvc0_grctx_generate_bundle,
        .bundle_size = 0x1800,
+       .pagepool = nvc0_grctx_generate_pagepool,
+       .pagepool_size = 0x8000,
 }.base;
index 678708e15718568b8ead4a700575271f9c46047a..9dfb60d8e5a8856f2b49e0402d2cd30c2ce80737 100644 (file)
@@ -855,6 +855,20 @@ nve4_grctx_generate_bundle(struct nvc0_grctx *info)
        mmio_wr32(info, 0x4064c8, (state_limit << 16) | token_limit);
 }
 
+void
+nve4_grctx_generate_pagepool(struct nvc0_grctx *info)
+{
+       const struct nvc0_grctx_oclass *impl = nvc0_grctx_impl(info->priv);
+       const u32 access = NV_MEM_ACCESS_RW | NV_MEM_ACCESS_SYS;
+       const int s = 8;
+       const int b = mmio_vram(info, impl->pagepool_size, (1 << s), access);
+       mmio_refn(info, 0x40800c, 0x00000000, s, b);
+       mmio_wr32(info, 0x408010, 0x80000000);
+       mmio_refn(info, 0x419004, 0x00000000, s, b);
+       mmio_wr32(info, 0x419008, 0x00000000);
+       mmio_wr32(info, 0x4064cc, 0x80000000);
+}
+
 void
 nve4_grctx_generate_mods(struct nvc0_graph_priv *priv, struct nvc0_grctx *info)
 {
@@ -862,13 +876,7 @@ nve4_grctx_generate_mods(struct nvc0_graph_priv *priv, struct nvc0_grctx *info)
        u32 offset;
        int gpc;
 
-       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(0x4064cc, 0x80000000,  0, 0);
        mmio_list(0x418810, 0x80000000, 12, 2);
        mmio_list(0x419848, 0x10000000, 12, 2);
 
@@ -979,6 +987,7 @@ nve4_grctx_generate_main(struct nvc0_graph_priv *priv, struct nvc0_grctx *info)
        nv_wr32(priv, 0x404154, 0x00000000);
 
        oclass->bundle(info);
+       oclass->pagepool(info);
        oclass->mods(priv, info);
        oclass->unkn(priv);
 
@@ -1034,4 +1043,6 @@ nve4_grctx_oclass = &(struct nvc0_grctx_oclass) {
        .bundle_size = 0x3000,
        .bundle_min_gpm_fifo_depth = 0x180,
        .bundle_token_limit = 0x600,
+       .pagepool = nve4_grctx_generate_pagepool,
+       .pagepool_size = 0x8000,
 }.base;
index 89a77a2788ba0267a50ab98c28f16be3fba91408..e25ec47defa817a55b11fcba15279100edf54f91 100644 (file)
@@ -816,13 +816,7 @@ nvf0_grctx_generate_mods(struct nvc0_graph_priv *priv, struct nvc0_grctx *info)
        u32 offset;
        int gpc;
 
-       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(0x4064cc, 0x80000000,  0, 0);
        mmio_list(0x418810, 0x80000000, 12, 2);
        mmio_list(0x419848, 0x10000000, 12, 2);
 
@@ -880,4 +874,6 @@ nvf0_grctx_oclass = &(struct nvc0_grctx_oclass) {
        .bundle_size = 0x3000,
        .bundle_min_gpm_fifo_depth = 0x180,
        .bundle_token_limit = 0x7c0,
+       .pagepool = nve4_grctx_generate_pagepool,
+       .pagepool_size = 0x8000,
 }.base;