]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
drm/nouveau/gr/gf100-gk208: make use of init_gpc_mmu() hook to share setup
authorBen Skeggs <bskeggs@redhat.com>
Tue, 31 Oct 2017 17:56:19 +0000 (03:56 +1000)
committerBen Skeggs <bskeggs@redhat.com>
Thu, 2 Nov 2017 03:32:20 +0000 (13:32 +1000)
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c
drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.h
drivers/gpu/drm/nouveau/nvkm/engine/gr/gf104.c
drivers/gpu/drm/nouveau/nvkm/engine/gr/gf108.c
drivers/gpu/drm/nouveau/nvkm/engine/gr/gf110.c
drivers/gpu/drm/nouveau/nvkm/engine/gr/gf117.c
drivers/gpu/drm/nouveau/nvkm/engine/gr/gf119.c
drivers/gpu/drm/nouveau/nvkm/engine/gr/gk104.c
drivers/gpu/drm/nouveau/nvkm/engine/gr/gk110.c
drivers/gpu/drm/nouveau/nvkm/engine/gr/gk110b.c
drivers/gpu/drm/nouveau/nvkm/engine/gr/gk208.c

index 99689f4de502d66b174825afc922a2fc3d397401..48556bfdbd4af365f557d732367349f36f8d3f17 100644 (file)
@@ -1903,25 +1903,33 @@ gf100_gr_new_(const struct gf100_gr_func *func, struct nvkm_device *device,
        return 0;
 }
 
+void
+gf100_gr_init_gpc_mmu(struct gf100_gr *gr)
+{
+       struct nvkm_device *device = gr->base.engine.subdev.device;
+       struct nvkm_fb *fb = device->fb;
+
+       nvkm_wr32(device, 0x418880, 0x00000000);
+       nvkm_wr32(device, 0x4188a4, 0x00000000);
+       nvkm_wr32(device, 0x418888, 0x00000000);
+       nvkm_wr32(device, 0x41888c, 0x00000000);
+       nvkm_wr32(device, 0x418890, 0x00000000);
+       nvkm_wr32(device, 0x418894, 0x00000000);
+       nvkm_wr32(device, 0x4188b4, nvkm_memory_addr(fb->mmu_wr) >> 8);
+       nvkm_wr32(device, 0x4188b8, nvkm_memory_addr(fb->mmu_rd) >> 8);
+}
+
 int
 gf100_gr_init(struct gf100_gr *gr)
 {
        struct nvkm_device *device = gr->base.engine.subdev.device;
-       struct nvkm_fb *fb = device->fb;
        const u32 magicgpc918 = DIV_ROUND_UP(0x00800000, gr->tpc_total);
        u32 data[TPC_MAX / 8] = {};
        u8  tpcnr[GPC_MAX];
        int gpc, tpc, rop;
        int i;
 
-       nvkm_wr32(device, GPC_BCAST(0x0880), 0x00000000);
-       nvkm_wr32(device, GPC_BCAST(0x08a4), 0x00000000);
-       nvkm_wr32(device, GPC_BCAST(0x0888), 0x00000000);
-       nvkm_wr32(device, GPC_BCAST(0x088c), 0x00000000);
-       nvkm_wr32(device, GPC_BCAST(0x0890), 0x00000000);
-       nvkm_wr32(device, GPC_BCAST(0x0894), 0x00000000);
-       nvkm_wr32(device, GPC_BCAST(0x08b4), nvkm_memory_addr(fb->mmu_wr) >> 8);
-       nvkm_wr32(device, GPC_BCAST(0x08b8), nvkm_memory_addr(fb->mmu_rd) >> 8);
+       gr->func->init_gpc_mmu(gr);
 
        gf100_gr_mmio(gr, gr->func->mmio);
 
@@ -2036,6 +2044,7 @@ gf100_gr_gpccs_ucode = {
 static const struct gf100_gr_func
 gf100_gr = {
        .init = gf100_gr_init,
+       .init_gpc_mmu = gf100_gr_init_gpc_mmu,
        .mmio = gf100_gr_pack_mmio,
        .fecs.ucode = &gf100_gr_fecs_ucode,
        .gpccs.ucode = &gf100_gr_gpccs_ucode,
index 2901488163606232397c1fd6bcaf14f7b73cf981..51c1e380ffb68613e133114ba7f283c2e2cde283 100644 (file)
@@ -254,6 +254,7 @@ extern const struct gf100_gr_init gf100_gr_init_mpc_0[];
 extern const struct gf100_gr_init gf100_gr_init_be_0[];
 extern const struct gf100_gr_init gf100_gr_init_fe_1[];
 extern const struct gf100_gr_init gf100_gr_init_pe_1[];
+void gf100_gr_init_gpc_mmu(struct gf100_gr *);
 
 extern const struct gf100_gr_init gf104_gr_init_ds_0[];
 extern const struct gf100_gr_init gf104_gr_init_tex_0[];
index d736dcd55ea2068f9119be1a261466f4d51bfd8b..ec0f11983b23316de2b1888151c6b268f3af5c07 100644 (file)
@@ -115,6 +115,7 @@ gf104_gr_pack_mmio[] = {
 static const struct gf100_gr_func
 gf104_gr = {
        .init = gf100_gr_init,
+       .init_gpc_mmu = gf100_gr_init_gpc_mmu,
        .mmio = gf104_gr_pack_mmio,
        .fecs.ucode = &gf100_gr_fecs_ucode,
        .gpccs.ucode = &gf100_gr_gpccs_ucode,
index 2f0d24498427b779fc17e6f7ea23b04ef29fd901..cc152eb7412359f6ee1a81453502b2d24913c5f6 100644 (file)
@@ -106,6 +106,7 @@ gf108_gr_pack_mmio[] = {
 static const struct gf100_gr_func
 gf108_gr = {
        .init = gf100_gr_init,
+       .init_gpc_mmu = gf100_gr_init_gpc_mmu,
        .mmio = gf108_gr_pack_mmio,
        .fecs.ucode = &gf100_gr_fecs_ucode,
        .gpccs.ucode = &gf100_gr_gpccs_ucode,
index d1d942eb86af2cf191b22c01c79997599fe5247e..10d2d73ca8c3a2a4978bbbd04f2f5eac38d483ca 100644 (file)
@@ -87,6 +87,7 @@ gf110_gr_pack_mmio[] = {
 static const struct gf100_gr_func
 gf110_gr = {
        .init = gf100_gr_init,
+       .init_gpc_mmu = gf100_gr_init_gpc_mmu,
        .mmio = gf110_gr_pack_mmio,
        .fecs.ucode = &gf100_gr_fecs_ucode,
        .gpccs.ucode = &gf100_gr_gpccs_ucode,
index 0124e468086ebbcaec0954105a83167ef720e992..ac09a07c4150bf4d566cacb7f6e2b8928ac7357b 100644 (file)
@@ -123,6 +123,7 @@ gf117_gr_gpccs_ucode = {
 static const struct gf100_gr_func
 gf117_gr = {
        .init = gf100_gr_init,
+       .init_gpc_mmu = gf100_gr_init_gpc_mmu,
        .mmio = gf117_gr_pack_mmio,
        .fecs.ucode = &gf117_gr_fecs_ucode,
        .gpccs.ucode = &gf117_gr_gpccs_ucode,
index 8d8e4cafe28f8c0bead7f64bfc10ab115a776d6b..7f449ec6f7603c768c16a7bc97dfe7182a308155 100644 (file)
@@ -178,6 +178,7 @@ gf119_gr_pack_mmio[] = {
 static const struct gf100_gr_func
 gf119_gr = {
        .init = gf100_gr_init,
+       .init_gpc_mmu = gf100_gr_init_gpc_mmu,
        .mmio = gf119_gr_pack_mmio,
        .fecs.ucode = &gf100_gr_fecs_ucode,
        .gpccs.ucode = &gf100_gr_gpccs_ucode,
index ec22da6c99fc4863efbc8364749801338e383f6d..5e82f94c224514d15a2950d927b8d5cdff1c1f44 100644 (file)
@@ -24,8 +24,6 @@
 #include "gf100.h"
 #include "ctxgf100.h"
 
-#include <subdev/fb.h>
-
 #include <nvif/class.h>
 
 /*******************************************************************************
@@ -207,21 +205,13 @@ int
 gk104_gr_init(struct gf100_gr *gr)
 {
        struct nvkm_device *device = gr->base.engine.subdev.device;
-       struct nvkm_fb *fb = device->fb;
        const u32 magicgpc918 = DIV_ROUND_UP(0x00800000, gr->tpc_total);
        u32 data[TPC_MAX / 8] = {};
        u8  tpcnr[GPC_MAX];
        int gpc, tpc, rop;
        int i;
 
-       nvkm_wr32(device, GPC_BCAST(0x0880), 0x00000000);
-       nvkm_wr32(device, GPC_BCAST(0x08a4), 0x00000000);
-       nvkm_wr32(device, GPC_BCAST(0x0888), 0x00000000);
-       nvkm_wr32(device, GPC_BCAST(0x088c), 0x00000000);
-       nvkm_wr32(device, GPC_BCAST(0x0890), 0x00000000);
-       nvkm_wr32(device, GPC_BCAST(0x0894), 0x00000000);
-       nvkm_wr32(device, GPC_BCAST(0x08b4), nvkm_memory_addr(fb->mmu_wr) >> 8);
-       nvkm_wr32(device, GPC_BCAST(0x08b8), nvkm_memory_addr(fb->mmu_rd) >> 8);
+       gr->func->init_gpc_mmu(gr);
 
        gf100_gr_mmio(gr, gr->func->mmio);
 
@@ -339,6 +329,7 @@ gk104_gr_gpccs_ucode = {
 static const struct gf100_gr_func
 gk104_gr = {
        .init = gk104_gr_init,
+       .init_gpc_mmu = gf100_gr_init_gpc_mmu,
        .init_rop_active_fbps = gk104_gr_init_rop_active_fbps,
        .init_ppc_exceptions = gk104_gr_init_ppc_exceptions,
        .mmio = gk104_gr_pack_mmio,
index f31b171a4102d00db49b38a9e3db12cdc43295da..a38e19b61c1da24c59f18ad0e8acaf74787a31c5 100644 (file)
@@ -183,6 +183,7 @@ gk110_gr_gpccs_ucode = {
 static const struct gf100_gr_func
 gk110_gr = {
        .init = gk104_gr_init,
+       .init_gpc_mmu = gf100_gr_init_gpc_mmu,
        .init_rop_active_fbps = gk104_gr_init_rop_active_fbps,
        .init_ppc_exceptions = gk104_gr_init_ppc_exceptions,
        .mmio = gk110_gr_pack_mmio,
index d76dd178007fbc1a5eed220a663b2476187f438c..1912c0bfd7eedf6039fac743775bb067e80ed3e1 100644 (file)
@@ -103,6 +103,7 @@ gk110b_gr_pack_mmio[] = {
 static const struct gf100_gr_func
 gk110b_gr = {
        .init = gk104_gr_init,
+       .init_gpc_mmu = gf100_gr_init_gpc_mmu,
        .init_rop_active_fbps = gk104_gr_init_rop_active_fbps,
        .init_ppc_exceptions = gk104_gr_init_ppc_exceptions,
        .mmio = gk110b_gr_pack_mmio,
index 14bbe6ed02a9ae4fc9cef9f1a8be5f9d53f4f8bf..1fc258163f25a0ef1386b1417ea807a3505b36f6 100644 (file)
@@ -162,6 +162,7 @@ gk208_gr_gpccs_ucode = {
 static const struct gf100_gr_func
 gk208_gr = {
        .init = gk104_gr_init,
+       .init_gpc_mmu = gf100_gr_init_gpc_mmu,
        .init_rop_active_fbps = gk104_gr_init_rop_active_fbps,
        .init_ppc_exceptions = gk104_gr_init_ppc_exceptions,
        .mmio = gk208_gr_pack_mmio,