drm/nouveau/ltc: init comptag mm in fb subdev
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:22 +0000 (13:32 +1000)
A single location for the MM allows us to share allocation logic.

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
drivers/gpu/drm/nouveau/include/nvkm/subdev/ltc.h
drivers/gpu/drm/nouveau/nvkm/subdev/ltc/base.c
drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gf100.c
drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gp100.c

index 93eeb557a9f2654a3610e4748bd56449e77cbca0..0e2751bbf153b585eaf80f6e73a1929caaf0cbb0 100644 (file)
@@ -14,7 +14,6 @@ struct nvkm_ltc {
 
        u32 num_tags;
        u32 tag_base;
-       struct nvkm_mm tags;
        struct nvkm_mm_node *tag_ram;
 
        int zbc_min;
index a75320943187d08b27e0e17aaeb8bbee0ca9a7dc..f4aa81dd8978d971e411a2e548b51d9b9e2d3744 100644 (file)
@@ -28,7 +28,8 @@
 int
 nvkm_ltc_tags_alloc(struct nvkm_ltc *ltc, u32 n, struct nvkm_mm_node **pnode)
 {
-       int ret = nvkm_mm_head(&ltc->tags, 0, 1, n, n, 1, pnode);
+       struct nvkm_fb *fb = ltc->subdev.device->fb;
+       int ret = nvkm_mm_head(&fb->tags, 0, 1, n, n, 1, pnode);
        if (ret)
                *pnode = NULL;
        return ret;
@@ -37,7 +38,8 @@ nvkm_ltc_tags_alloc(struct nvkm_ltc *ltc, u32 n, struct nvkm_mm_node **pnode)
 void
 nvkm_ltc_tags_free(struct nvkm_ltc *ltc, struct nvkm_mm_node **pnode)
 {
-       nvkm_mm_free(&ltc->tags, pnode);
+       struct nvkm_fb *fb = ltc->subdev.device->fb;
+       nvkm_mm_free(&fb->tags, pnode);
 }
 
 void
@@ -118,7 +120,6 @@ nvkm_ltc_dtor(struct nvkm_subdev *subdev)
 {
        struct nvkm_ltc *ltc = nvkm_ltc(subdev);
        struct nvkm_ram *ram = ltc->subdev.device->fb->ram;
-       nvkm_mm_fini(&ltc->tags);
        if (ram)
                nvkm_mm_free(&ram->vram, &ltc->tag_ram);
        return ltc;
index 6b0cb7f3fa776be579ae8a87223a2de6a02be1ee..60a5e9e2b2643883db38641a5d2053d9c8cc7429 100644 (file)
@@ -152,7 +152,8 @@ gf100_ltc_flush(struct nvkm_ltc *ltc)
 int
 gf100_ltc_oneinit_tag_ram(struct nvkm_ltc *ltc)
 {
-       struct nvkm_ram *ram = ltc->subdev.device->fb->ram;
+       struct nvkm_fb *fb = ltc->subdev.device->fb;
+       struct nvkm_ram *ram = fb->ram;
        u32 tag_size, tag_margin, tag_align;
        int ret;
 
@@ -197,7 +198,8 @@ gf100_ltc_oneinit_tag_ram(struct nvkm_ltc *ltc)
        }
 
 mm_init:
-       return nvkm_mm_init(&ltc->tags, 0, 0, ltc->num_tags, 1);
+       nvkm_mm_fini(&fb->tags);
+       return nvkm_mm_init(&fb->tags, 0, 0, ltc->num_tags, 1);
 }
 
 int
index 74ed4dd203bc6e3bfee235e8c83bab177244db1b..e34d4210801967cb361c61810be97c888995fddf 100644 (file)
@@ -45,7 +45,7 @@ gp100_ltc_oneinit(struct nvkm_ltc *ltc)
        ltc->ltc_nr = nvkm_rd32(device, 0x12006c);
        ltc->lts_nr = nvkm_rd32(device, 0x17e280) >> 28;
        /*XXX: tagram allocation - TBD */
-       return nvkm_mm_init(&ltc->tags, 0, 0, 0, 1);
+       return 0;
 }
 
 static void