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

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

drm/nouveau/bar: modify interface to bar2 vmm mapping



Match API with the BAR1 version.

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 570889dc
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -17,8 +17,8 @@ struct nvkm_bar {
struct nvkm_vmm *nvkm_bar_bar1_vmm(struct nvkm_device *);
void nvkm_bar_bar2_init(struct nvkm_device *);
void nvkm_bar_bar2_fini(struct nvkm_device *);
struct nvkm_vmm *nvkm_bar_bar2_vmm(struct nvkm_device *);
void nvkm_bar_flush(struct nvkm_bar *);
struct nvkm_vm *nvkm_bar_kmap(struct nvkm_bar *);

int nv50_bar_new(struct nvkm_device *, int, struct nvkm_bar **);
int g84_bar_new(struct nvkm_device *, int, struct nvkm_bar **);
+11 −8
Original line number Diff line number Diff line
@@ -30,19 +30,22 @@ nvkm_bar_flush(struct nvkm_bar *bar)
		bar->func->flush(bar);
}

struct nvkm_vm *
nvkm_bar_kmap(struct nvkm_bar *bar)
struct nvkm_vmm *
nvkm_bar_bar1_vmm(struct nvkm_device *device)
{
	/* disallow kmap() until after vm has been bootstrapped */
	if (bar && bar->func->kmap && bar->subdev.oneinit)
		return bar->func->kmap(bar);
	return NULL;
	return device->bar->func->bar1.vmm(device->bar);
}

struct nvkm_vmm *
nvkm_bar_bar1_vmm(struct nvkm_device *device)
nvkm_bar_bar2_vmm(struct nvkm_device *device)
{
	return device->bar->func->bar1.vmm(device->bar);
	/* Denies access to BAR2 when it's not initialised, used by INSTMEM
	 * to know when object access needs to go through the BAR0 window.
	 */
	struct nvkm_bar *bar = device->bar;
	if (bar && bar->func->bar2.vmm && bar->subdev.oneinit)
		return bar->func->bar2.vmm(bar);
	return NULL;
}

void
+1 −1
Original line number Diff line number Diff line
@@ -51,7 +51,7 @@ g84_bar_func = {
	.bar2.init = nv50_bar_bar2_init,
	.bar2.fini = nv50_bar_bar2_fini,
	.bar2.wait = nv50_bar_bar1_wait,
	.kmap = nv50_bar_kmap,
	.bar2.vmm = nv50_bar_bar2_vmm,
	.flush = g84_bar_flush,
};

+8 −8
Original line number Diff line number Diff line
@@ -28,12 +28,6 @@
#include <subdev/fb.h>
#include <subdev/mmu.h>

static struct nvkm_vm *
gf100_bar_kmap(struct nvkm_bar *base)
{
	return gf100_bar(base)->bar[0].vm;
}

struct nvkm_vmm *
gf100_bar_bar1_vmm(struct nvkm_bar *base)
{
@@ -63,6 +57,12 @@ gf100_bar_bar1_init(struct nvkm_bar *base)
	nvkm_wr32(device, 0x001704, 0x80000000 | addr);
}

struct nvkm_vmm *
gf100_bar_bar2_vmm(struct nvkm_bar *base)
{
	return gf100_bar(base)->bar[0].vm;
}

void
gf100_bar_bar2_fini(struct nvkm_bar *bar)
{
@@ -142,7 +142,7 @@ gf100_bar_oneinit(struct nvkm_bar *base)
	int ret;

	/* BAR2 */
	if (bar->base.func->kmap) {
	if (bar->base.func->bar2.init) {
		ret = gf100_bar_oneinit_bar(bar, &bar->bar[0], &bar2_lock, 3);
		if (ret)
			return ret;
@@ -198,7 +198,7 @@ gf100_bar_func = {
	.bar2.init = gf100_bar_bar2_init,
	.bar2.fini = gf100_bar_bar2_fini,
	.bar2.wait = gf100_bar_bar1_wait,
	.kmap = gf100_bar_kmap,
	.bar2.vmm = gf100_bar_bar2_vmm,
	.flush = g84_bar_flush,
};

+1 −0
Original line number Diff line number Diff line
@@ -23,4 +23,5 @@ void gf100_bar_bar1_init(struct nvkm_bar *);
void gf100_bar_bar1_wait(struct nvkm_bar *);
struct nvkm_vmm *gf100_bar_bar1_vmm(struct nvkm_bar *);
void gf100_bar_bar2_init(struct nvkm_bar *);
struct nvkm_vmm *gf100_bar_bar2_vmm(struct nvkm_bar *);
#endif
Loading