Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bd447053 authored by Ben Skeggs's avatar Ben Skeggs
Browse files

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



Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 7f4f82af
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -14,7 +14,7 @@ struct nvkm_ltc {

	u32 num_tags;
	u32 tag_base;
	struct nvkm_mm_node *tag_ram;
	struct nvkm_memory *tag_ram;

	int zbc_min;
	int zbc_max;
+2 −3
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@
 */
#include "priv.h"

#include <core/memory.h>
#include <subdev/fb.h>

int
@@ -119,9 +120,7 @@ static void *
nvkm_ltc_dtor(struct nvkm_subdev *subdev)
{
	struct nvkm_ltc *ltc = nvkm_ltc(subdev);
	struct nvkm_ram *ram = ltc->subdev.device->fb->ram;
	if (ram)
		nvkm_mm_free(&ram->vram, &ltc->tag_ram);
	nvkm_memory_unref(&ltc->tag_ram);
	return ltc;
}

+6 −5
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@
 */
#include "priv.h"

#include <core/memory.h>
#include <subdev/fb.h>
#include <subdev/timer.h>

@@ -152,7 +153,8 @@ gf100_ltc_flush(struct nvkm_ltc *ltc)
int
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;
	u32 tag_size, tag_margin, tag_align;
	int ret;
@@ -182,14 +184,13 @@ gf100_ltc_oneinit_tag_ram(struct nvkm_ltc *ltc)
	 */
	tag_size  = (ltc->num_tags / 64) * 0x6000 + tag_margin;
	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,
			   tag_size, 1, &ltc->tag_ram);
	ret = nvkm_ram_get(device, NVKM_RAM_MM_NORMAL, 0x01, 12, tag_size,
			   true, true, &ltc->tag_ram);
	if (ret) {
		ltc->num_tags = 0;
	} 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;
		do_div(tag_base, tag_align);