drm/nouveau/gr/gf100-: virtualise patch_ltc, noting missing init
authorBen Skeggs <bskeggs@redhat.com>
Tue, 8 May 2018 10:39:46 +0000 (20:39 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Fri, 18 May 2018 05:01:24 +0000 (15:01 +1000)
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf100.c
drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgf100.h
drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk104.c
drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk110.c
drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk110b.c
drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk208.c

index e2c8077b70df987bc4f6c280ab7aff8aa1b3b70c..450059996b95db1e22f13e911a17aa02a9b617aa 100644 (file)
@@ -1254,6 +1254,8 @@ gf100_grctx_generate_main(struct gf100_gr *gr, struct gf100_grctx *info)
        grctx->bundle(info);
        grctx->pagepool(info);
        grctx->attrib(info);
+       if (grctx->patch_ltc)
+               grctx->patch_ltc(info);
        grctx->unkn(gr);
 
        gf100_grctx_generate_tpcid(gr);
index 5199e5aa0cb726d0e19a0e46fa9c8a5e976550d0..94612ca3704395a05d47eca92b60be5cdec45ffa 100644 (file)
@@ -48,6 +48,8 @@ struct gf100_grctx_func {
        u32 attrib_nr;
        u32 alpha_nr_max;
        u32 alpha_nr;
+       /* other patch buffer stuff */
+       void (*patch_ltc)(struct gf100_grctx *);
 };
 
 extern const struct gf100_grctx_func gf100_grctx;
@@ -80,6 +82,7 @@ extern const struct gf100_grctx_func gk20a_grctx;
 void gk104_grctx_generate_main(struct gf100_gr *, struct gf100_grctx *);
 void gk104_grctx_generate_bundle(struct gf100_grctx *);
 void gk104_grctx_generate_pagepool(struct gf100_grctx *);
+void gk104_grctx_generate_patch_ltc(struct gf100_grctx *);
 void gk104_grctx_generate_unkn(struct gf100_gr *);
 void gk104_grctx_generate_r418bb8(struct gf100_gr *);
 
index 825c8fd500bc99bb1033e5799e05d8400a610b26..da019c4904ba0b770ca65bd65f2b4e4408cabec6 100644 (file)
@@ -840,6 +840,17 @@ gk104_grctx_pack_ppc[] = {
  * PGRAPH context implementation
  ******************************************************************************/
 
+void
+gk104_grctx_generate_patch_ltc(struct gf100_grctx *info)
+{
+       struct nvkm_device *device = info->gr->base.engine.subdev.device;
+       u32 data0 = nvkm_rd32(device, 0x17e91c);
+       u32 data1 = nvkm_rd32(device, 0x17e920);
+       /*XXX: Figure out how to modify this correctly! */
+       mmio_wr32(info, 0x17e91c, data0);
+       mmio_wr32(info, 0x17e920, data1);
+}
+
 void
 gk104_grctx_generate_bundle(struct gf100_grctx *info)
 {
@@ -1005,4 +1016,5 @@ gk104_grctx = {
        .attrib_nr = 0x218,
        .alpha_nr_max = 0x7ff,
        .alpha_nr = 0x648,
+       .patch_ltc = gk104_grctx_generate_patch_ltc,
 };
index 7b95ec2fe4536dd4bf26a8c15aa00835a56237b1..3ad98cd8d53144096b729e1bec5169dd139181ac 100644 (file)
@@ -830,4 +830,5 @@ gk110_grctx = {
        .attrib_nr = 0x218,
        .alpha_nr_max = 0x7ff,
        .alpha_nr = 0x648,
+       .patch_ltc = gk104_grctx_generate_patch_ltc,
 };
index 048b1152da443c1d2d763d1bfc959e4a91991d89..47a4a071a7123bfe467725aac9f0adec87af3562 100644 (file)
@@ -91,4 +91,5 @@ gk110b_grctx = {
        .attrib_nr = 0x218,
        .alpha_nr_max = 0x7ff,
        .alpha_nr = 0x648,
+       .patch_ltc = gk104_grctx_generate_patch_ltc,
 };
index 67b7a1b43617e2863f4381882552f7a031f1a67b..ba04c86b54a25043af1bfc01f60f8e0ddd9309c2 100644 (file)
@@ -552,4 +552,5 @@ gk208_grctx = {
        .attrib_nr = 0x218,
        .alpha_nr_max = 0x7ff,
        .alpha_nr = 0x648,
+       .patch_ltc = gk104_grctx_generate_patch_ltc,
 };