Commit 2854ab8d authored by Ben Skeggs's avatar Ben Skeggs
Browse files

drm/nouveau/fb: finalise big page size selection in constructor



MMU will need to know this during its constructor, so we can't delay
deciding this until init-time.

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 0b11b30d
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -135,8 +135,13 @@ nvkm_fb_init(struct nvkm_subdev *subdev)

	if (fb->func->init)
		fb->func->init(fb);
	if (fb->func->init_page)
		fb->func->init_page(fb);

	if (fb->func->init_page) {
		ret = fb->func->init_page(fb);
		if (WARN_ON(ret))
			return ret;
	}

	if (fb->func->init_unkn)
		fb->func->init_unkn(fb);
	return 0;
@@ -176,7 +181,8 @@ nvkm_fb_ctor(const struct nvkm_fb_func *func, struct nvkm_device *device,
	nvkm_subdev_ctor(&nvkm_fb, device, index, &fb->subdev);
	fb->func = func;
	fb->tile.regions = fb->func->tile.regions;
	fb->page = nvkm_longopt(device->cfgopt, "NvFbBigPage", 0);
	fb->page = nvkm_longopt(device->cfgopt, "NvFbBigPage",
				fb->func->default_bigpage);
}

int
+6 −8
Original line number Diff line number Diff line
@@ -80,20 +80,17 @@ gf100_fb_oneinit(struct nvkm_fb *base)
	return 0;
}

void
int
gf100_fb_init_page(struct nvkm_fb *fb)
{
	struct nvkm_device *device = fb->subdev.device;
	switch (fb->page) {
	case 16:
		nvkm_mask(device, 0x100c80, 0x00000001, 0x00000001);
		break;
	case 17:
	case 16: nvkm_mask(device, 0x100c80, 0x00000001, 0x00000001); break;
	case 17: nvkm_mask(device, 0x100c80, 0x00000001, 0x00000000); break;
	default:
		nvkm_mask(device, 0x100c80, 0x00000001, 0x00000000);
		fb->page = 17;
		break;
		return -EINVAL;
	}
	return 0;
}

void
@@ -144,6 +141,7 @@ gf100_fb = {
	.intr = gf100_fb_intr,
	.ram_new = gf100_ram_new,
	.memtype_valid = gf100_fb_memtype_valid,
	.default_bigpage = 17,
};

int
+0 −2
Original line number Diff line number Diff line
@@ -17,7 +17,5 @@ void gf100_fb_intr(struct nvkm_fb *);

void gp100_fb_init(struct nvkm_fb *);

void gm200_fb_init_page(struct nvkm_fb *fb);
void gm200_fb_init(struct nvkm_fb *base);

#endif
+1 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ gf108_fb = {
	.intr = gf100_fb_intr,
	.ram_new = gf108_ram_new,
	.memtype_valid = gf100_fb_memtype_valid,
	.default_bigpage = 17,
};

int
+1 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ gk104_fb = {
	.intr = gf100_fb_intr,
	.ram_new = gk104_ram_new,
	.memtype_valid = gf100_fb_memtype_valid,
	.default_bigpage = 17,
};

int
Loading