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

Commit 570889dc authored by Ben Skeggs's avatar Ben Skeggs
Browse files

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



Upcoming changes will remove the nvkm_vmm pointer from nvkm_vma, instead
requiring it to be explicitly specified on each operation.

It's not currently possible to get this information for BAR1 mappings,
so let's fix that ahead of time.

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent e988952e
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
#ifndef __NVKM_OS_H__
#define __NVKM_OS_H__
#include <nvif/os.h>
#define nvkm_vmm nvkm_vm
#endif
+1 −1
Original line number Diff line number Diff line
@@ -14,11 +14,11 @@ struct nvkm_bar {
	bool iomap_uncached;
};

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 *);
void nvkm_bar_flush(struct nvkm_bar *);
struct nvkm_vm *nvkm_bar_kmap(struct nvkm_bar *);
int nvkm_bar_umap(struct nvkm_bar *, u64 size, int type, struct nvkm_vma *);

int nv50_bar_new(struct nvkm_device *, int, struct nvkm_bar **);
int g84_bar_new(struct nvkm_device *, int, struct nvkm_bar **);
+3 −3
Original line number Diff line number Diff line
@@ -1362,13 +1362,13 @@ nouveau_ttm_io_mem_reserve(struct ttm_bo_device *bdev, struct ttm_mem_reg *reg)
		reg->bus.base = device->func->resource_addr(device, 1);
		reg->bus.is_iomem = true;
		if (drm->client.device.info.family >= NV_DEVICE_INFO_V0_TESLA) {
			struct nvkm_bar *bar = nvxx_bar(&drm->client.device);
			struct nvkm_vmm *bar = nvkm_bar_bar1_vmm(device);
			int page_shift = 12;
			if (drm->client.device.info.family >= NV_DEVICE_INFO_V0_FERMI)
				page_shift = mem->page_shift;

			ret = nvkm_bar_umap(bar, mem->size << 12, page_shift,
					    &mem->bar_vma);
			ret = nvkm_vm_get(bar, mem->size << 12, page_shift,
					  NV_MEM_ACCESS_RW, &mem->bar_vma);
			if (ret)
				return ret;

+4 −1
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@
#include <core/enum.h>
#include <core/gpuobj.h>
#include <subdev/bar.h>
#include <subdev/fb.h>
#include <engine/sw.h>

#include <nvif/class.h>
@@ -559,6 +560,7 @@ gf100_fifo_oneinit(struct nvkm_fifo *base)
	struct gf100_fifo *fifo = gf100_fifo(base);
	struct nvkm_subdev *subdev = &fifo->base.engine.subdev;
	struct nvkm_device *device = subdev->device;
	struct nvkm_vmm *bar = nvkm_bar_bar1_vmm(device);
	int ret;

	/* Determine number of PBDMAs by checking valid enable bits. */
@@ -584,7 +586,8 @@ gf100_fifo_oneinit(struct nvkm_fifo *base)
	if (ret)
		return ret;

	ret = nvkm_bar_umap(device->bar, 128 * 0x1000, 12, &fifo->user.bar);
	ret = nvkm_vm_get(bar, nvkm_memory_size(fifo->user.mem), 12,
			  NV_MEM_ACCESS_RW, &fifo->user.bar);
	if (ret)
		return ret;

+4 −2
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@
#include <core/client.h>
#include <core/gpuobj.h>
#include <subdev/bar.h>
#include <subdev/fb.h>
#include <subdev/timer.h>
#include <subdev/top.h>
#include <engine/sw.h>
@@ -771,6 +772,7 @@ gk104_fifo_oneinit(struct nvkm_fifo *base)
	struct gk104_fifo *fifo = gk104_fifo(base);
	struct nvkm_subdev *subdev = &fifo->base.engine.subdev;
	struct nvkm_device *device = subdev->device;
	struct nvkm_vmm *bar = nvkm_bar_bar1_vmm(device);
	int engn, runl, pbid, ret, i, j;
	enum nvkm_devidx engidx;
	u32 *map;
@@ -834,8 +836,8 @@ gk104_fifo_oneinit(struct nvkm_fifo *base)
	if (ret)
		return ret;

	ret = nvkm_bar_umap(device->bar, fifo->base.nr * 0x200, 12,
			    &fifo->user.bar);
	ret = nvkm_vm_get(bar, nvkm_memory_size(fifo->user.mem), 12,
			  NV_MEM_ACCESS_RW, &fifo->user.bar);
	if (ret)
		return ret;

Loading