Commit bd447053 authored by Ben Skeggs's avatar Ben Skeggs

drm/nouveau/ltc/gf100-: allocate tagram with nvkm_ram_get()

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 7f4f82af
...@@ -14,7 +14,7 @@ struct nvkm_ltc { ...@@ -14,7 +14,7 @@ struct nvkm_ltc {
u32 num_tags; u32 num_tags;
u32 tag_base; u32 tag_base;
struct nvkm_mm_node *tag_ram; struct nvkm_memory *tag_ram;
int zbc_min; int zbc_min;
int zbc_max; int zbc_max;
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
*/ */
#include "priv.h" #include "priv.h"
#include <core/memory.h>
#include <subdev/fb.h> #include <subdev/fb.h>
int int
...@@ -119,9 +120,7 @@ static void * ...@@ -119,9 +120,7 @@ static void *
nvkm_ltc_dtor(struct nvkm_subdev *subdev) nvkm_ltc_dtor(struct nvkm_subdev *subdev)
{ {
struct nvkm_ltc *ltc = nvkm_ltc(subdev); struct nvkm_ltc *ltc = nvkm_ltc(subdev);
struct nvkm_ram *ram = ltc->subdev.device->fb->ram; nvkm_memory_unref(&ltc->tag_ram);
if (ram)
nvkm_mm_free(&ram->vram, &ltc->tag_ram);
return ltc; return ltc;
} }
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
*/ */
#include "priv.h" #include "priv.h"
#include <core/memory.h>
#include <subdev/fb.h> #include <subdev/fb.h>
#include <subdev/timer.h> #include <subdev/timer.h>
...@@ -152,7 +153,8 @@ gf100_ltc_flush(struct nvkm_ltc *ltc) ...@@ -152,7 +153,8 @@ gf100_ltc_flush(struct nvkm_ltc *ltc)
int int
gf100_ltc_oneinit_tag_ram(struct nvkm_ltc *ltc) gf100_ltc_oneinit_tag_ram(struct nvkm_ltc *ltc)
{ {
struct nvkm_fb *fb = ltc->subdev.device->fb; struct nvkm_device *device = ltc->subdev.device;
struct nvkm_fb *fb = device->fb;
struct nvkm_ram *ram = fb->ram; struct nvkm_ram *ram = fb->ram;
u32 tag_size, tag_margin, tag_align; u32 tag_size, tag_margin, tag_align;
int ret; int ret;
...@@ -182,14 +184,13 @@ gf100_ltc_oneinit_tag_ram(struct nvkm_ltc *ltc) ...@@ -182,14 +184,13 @@ gf100_ltc_oneinit_tag_ram(struct nvkm_ltc *ltc)
*/ */
tag_size = (ltc->num_tags / 64) * 0x6000 + tag_margin; tag_size = (ltc->num_tags / 64) * 0x6000 + tag_margin;
tag_size += tag_align; tag_size += tag_align;
tag_size = (tag_size + 0xfff) >> 12; /* round up */
ret = nvkm_mm_tail(&ram->vram, NVKM_RAM_MM_NORMAL, 1, tag_size, ret = nvkm_ram_get(device, NVKM_RAM_MM_NORMAL, 0x01, 12, tag_size,
tag_size, 1, &ltc->tag_ram); true, true, &ltc->tag_ram);
if (ret) { if (ret) {
ltc->num_tags = 0; ltc->num_tags = 0;
} else { } else {
u64 tag_base = ((u64)ltc->tag_ram->offset << 12) + tag_margin; u64 tag_base = nvkm_memory_addr(ltc->tag_ram) + tag_margin;
tag_base += tag_align - 1; tag_base += tag_align - 1;
do_div(tag_base, tag_align); do_div(tag_base, tag_align);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment