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

Commit 4d058fab authored by Ben Skeggs's avatar Ben Skeggs
Browse files

drm/nouveau/core/mm: have users explicitly define heap identifiers



Different sections of VRAM may have different properties (ie. can't be used
for compression/display, can't be mapped, etc).

We currently already support this, but it's a bit magic.  This change makes
it more obvious where we're allocating from.

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 24e8375b
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -30,7 +30,7 @@ nvkm_mm_initialised(struct nvkm_mm *mm)
	return mm->heap_nodes;
}

int  nvkm_mm_init(struct nvkm_mm *, u32 offset, u32 length, u32 block);
int  nvkm_mm_init(struct nvkm_mm *, u8 heap, u32 offset, u32 length, u32 block);
int  nvkm_mm_fini(struct nvkm_mm *);
int  nvkm_mm_head(struct nvkm_mm *, u8 heap, u8 type, u32 size_max,
		  u32 size_min, u32 align, struct nvkm_mm_node **);
+4 −0
Original line number Diff line number Diff line
@@ -123,6 +123,10 @@ struct nvkm_ram {
	u64 size;

#define NVKM_RAM_MM_SHIFT 12
#define NVKM_RAM_MM_ANY    (NVKM_MM_HEAP_ANY + 0)
#define NVKM_RAM_MM_NORMAL (NVKM_MM_HEAP_ANY + 1)
#define NVKM_RAM_MM_NOMAP  (NVKM_MM_HEAP_ANY + 2)
#define NVKM_RAM_MM_MIXED  (NVKM_MM_HEAP_ANY + 3)
	struct nvkm_mm vram;
	struct nvkm_mm tags;
	u64 stolen;
+1 −1
Original line number Diff line number Diff line
@@ -340,7 +340,7 @@ nouveau_abi16_ioctl_channel_alloc(ABI16_IOCTL_ARGS)
	if (ret)
		goto done;

	ret = nvkm_mm_init(&chan->heap, 0, PAGE_SIZE, 1);
	ret = nvkm_mm_init(&chan->heap, 0, 0, PAGE_SIZE, 1);
done:
	if (ret)
		nouveau_abi16_chan_fini(abi16, chan);
+1 −1
Original line number Diff line number Diff line
@@ -185,7 +185,7 @@ nvkm_gpuobj_ctor(struct nvkm_device *device, u32 size, int align, bool zero,
		gpuobj->size = nvkm_memory_size(gpuobj->memory);
	}

	return nvkm_mm_init(&gpuobj->heap, 0, gpuobj->size, 1);
	return nvkm_mm_init(&gpuobj->heap, 0, 0, gpuobj->size, 1);
}

void
+3 −2
Original line number Diff line number Diff line
@@ -237,7 +237,7 @@ nvkm_mm_tail(struct nvkm_mm *mm, u8 heap, u8 type, u32 size_max, u32 size_min,
}

int
nvkm_mm_init(struct nvkm_mm *mm, u32 offset, u32 length, u32 block)
nvkm_mm_init(struct nvkm_mm *mm, u8 heap, u32 offset, u32 length, u32 block)
{
	struct nvkm_mm_node *node, *prev;
	u32 next;
@@ -274,7 +274,8 @@ nvkm_mm_init(struct nvkm_mm *mm, u32 offset, u32 length, u32 block)

	list_add_tail(&node->nl_entry, &mm->nodes);
	list_add_tail(&node->fl_entry, &mm->free);
	node->heap = ++mm->heap_nodes;
	node->heap = heap;
	mm->heap_nodes++;
	return 0;
}

Loading