aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/nouveau/nvkm/subdev/ltc
diff options
context:
space:
mode:
authorBen Skeggs <bskeggs@redhat.com>2017-11-01 03:56:19 +1000
committerBen Skeggs <bskeggs@redhat.com>2017-11-02 13:32:22 +1000
commit6cd7670c1e2a4a70a3d421521aea548e68992621 (patch)
treea52369fccaa767794190d240cd7b3f9b66d9f7a8 /drivers/gpu/drm/nouveau/nvkm/subdev/ltc
parentdrm/nouveau/fb/gf100: clear comptags at allocation time rather than mmu map (diff)
downloadlinux-dev-6cd7670c1e2a4a70a3d421521aea548e68992621.tar.xz
linux-dev-6cd7670c1e2a4a70a3d421521aea548e68992621.zip
drm/nouveau/ltc: init comptag mm in fb subdev
A single location for the MM allows us to share allocation logic. Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/nouveau/nvkm/subdev/ltc')
-rw-r--r--drivers/gpu/drm/nouveau/nvkm/subdev/ltc/base.c7
-rw-r--r--drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gf100.c6
-rw-r--r--drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gp100.c2
3 files changed, 9 insertions, 6 deletions
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/base.c
index a75320943187..f4aa81dd8978 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/base.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/base.c
@@ -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;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gf100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gf100.c
index 6b0cb7f3fa77..60a5e9e2b264 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gf100.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gf100.c
@@ -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
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gp100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gp100.c
index 74ed4dd203bc..e34d42108019 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gp100.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gp100.c
@@ -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