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

Commit 7ef44bee authored by Ben Skeggs's avatar Ben Skeggs
Browse files

drm/nouveau/fb: move comptags mm into nvkm_fb



We're moving towards having a central place to handle comptag allocation,
and as some GPUs don't have a ram submodule (ie. Tegra), we need to move
the mm somewhere else.

It probably never belonged in ram anyways.

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent b7e1f3f1
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@ struct nvkm_fb {
	struct nvkm_subdev subdev;

	struct nvkm_ram *ram;
	struct nvkm_mm tags;

	struct {
		struct nvkm_fb_tile region[16];
@@ -128,7 +129,6 @@ struct nvkm_ram {
#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;

	int ranks;
+1 −0
Original line number Diff line number Diff line
@@ -159,6 +159,7 @@ nvkm_fb_dtor(struct nvkm_subdev *subdev)
	for (i = 0; i < fb->tile.regions; i++)
		fb->func->tile.fini(fb, i, &fb->tile.region[i]);

	nvkm_mm_fini(&fb->tags);
	nvkm_ram_del(&fb->ram);

	if (fb->func->dtor)
+2 −2
Original line number Diff line number Diff line
@@ -45,7 +45,7 @@ nv20_fb_tile_comp(struct nvkm_fb *fb, int i, u32 size, u32 flags,
{
	u32 tiles = DIV_ROUND_UP(size, 0x40);
	u32 tags  = round_up(tiles / fb->ram->parts, 0x40);
	if (!nvkm_mm_head(&fb->ram->tags, 0, 1, tags, tags, 1, &tile->tag)) {
	if (!nvkm_mm_head(&fb->tags, 0, 1, tags, tags, 1, &tile->tag)) {
		if (!(flags & 2)) tile->zcomp = 0x00000000; /* Z16 */
		else              tile->zcomp = 0x04000000; /* Z24S8 */
		tile->zcomp |= tile->tag->offset;
@@ -63,7 +63,7 @@ nv20_fb_tile_fini(struct nvkm_fb *fb, int i, struct nvkm_fb_tile *tile)
	tile->limit = 0;
	tile->pitch = 0;
	tile->zcomp = 0;
	nvkm_mm_free(&fb->ram->tags, &tile->tag);
	nvkm_mm_free(&fb->tags, &tile->tag);
}

void
+1 −1
Original line number Diff line number Diff line
@@ -32,7 +32,7 @@ nv25_fb_tile_comp(struct nvkm_fb *fb, int i, u32 size, u32 flags,
{
	u32 tiles = DIV_ROUND_UP(size, 0x40);
	u32 tags  = round_up(tiles / fb->ram->parts, 0x40);
	if (!nvkm_mm_head(&fb->ram->tags, 0, 1, tags, tags, 1, &tile->tag)) {
	if (!nvkm_mm_head(&fb->tags, 0, 1, tags, tags, 1, &tile->tag)) {
		if (!(flags & 2)) tile->zcomp = 0x00100000; /* Z16 */
		else              tile->zcomp = 0x00200000; /* Z24S8 */
		tile->zcomp |= tile->tag->offset;
+1 −1
Original line number Diff line number Diff line
@@ -51,7 +51,7 @@ nv30_fb_tile_comp(struct nvkm_fb *fb, int i, u32 size, u32 flags,
{
	u32 tiles = DIV_ROUND_UP(size, 0x40);
	u32 tags  = round_up(tiles / fb->ram->parts, 0x40);
	if (!nvkm_mm_head(&fb->ram->tags, 0, 1, tags, tags, 1, &tile->tag)) {
	if (!nvkm_mm_head(&fb->tags, 0, 1, tags, tags, 1, &tile->tag)) {
		if (flags & 2) tile->zcomp |= 0x01000000; /* Z16 */
		else           tile->zcomp |= 0x02000000; /* Z24S8 */
		tile->zcomp |= ((tile->tag->offset           ) >> 6);
Loading