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

drm/nouveau/fault: remove manual mapping of fault buffers into BAR2



Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 1786bf56
Loading
Loading
Loading
Loading
+5 −10
Original line number Diff line number Diff line
@@ -23,8 +23,6 @@

#include <core/memory.h>
#include <core/notify.h>
#include <subdev/bar.h>
#include <subdev/mmu.h>

static void
nvkm_fault_ntfy_fini(struct nvkm_event *event, int type, int index)
@@ -91,7 +89,6 @@ nvkm_fault_oneinit_buffer(struct nvkm_fault *fault, int id)
{
	struct nvkm_subdev *subdev = &fault->subdev;
	struct nvkm_device *device = subdev->device;
	struct nvkm_vmm *bar2 = nvkm_bar_bar2_vmm(device);
	struct nvkm_fault_buffer *buffer;
	int ret;

@@ -110,12 +107,12 @@ nvkm_fault_oneinit_buffer(struct nvkm_fault *fault, int id)
	if (ret)
		return ret;

	ret = nvkm_vmm_get(bar2, 12, nvkm_memory_size(buffer->mem),
			   &buffer->vma);
	if (ret)
		return ret;
	/* Pin fault buffer in BAR2. */
	buffer->addr = nvkm_memory_bar2(buffer->mem);
	if (buffer->addr == ~0ULL)
		return -EFAULT;

	return nvkm_memory_map(buffer->mem, 0, bar2, buffer->vma, NULL, 0);
	return 0;
}

static int
@@ -146,7 +143,6 @@ nvkm_fault_oneinit(struct nvkm_subdev *subdev)
static void *
nvkm_fault_dtor(struct nvkm_subdev *subdev)
{
	struct nvkm_vmm *bar2 = nvkm_bar_bar2_vmm(subdev->device);
	struct nvkm_fault *fault = nvkm_fault(subdev);
	int i;

@@ -154,7 +150,6 @@ nvkm_fault_dtor(struct nvkm_subdev *subdev)

	for (i = 0; i < fault->buffer_nr; i++) {
		if (fault->buffer[i]) {
			nvkm_vmm_put(bar2, &fault->buffer[i]->vma);
			nvkm_memory_unref(&fault->buffer[i]->mem);
			kfree(fault->buffer[i]);
		}
+2 −4
Original line number Diff line number Diff line
@@ -21,8 +21,6 @@
 */
#include "priv.h"

#include <subdev/mmu.h>

static void
gp100_fault_buffer_fini(struct nvkm_fault_buffer *buffer)
{
@@ -34,8 +32,8 @@ static void
gp100_fault_buffer_init(struct nvkm_fault_buffer *buffer)
{
	struct nvkm_device *device = buffer->fault->subdev.device;
	nvkm_wr32(device, 0x002a74, upper_32_bits(buffer->vma->addr));
	nvkm_wr32(device, 0x002a70, lower_32_bits(buffer->vma->addr));
	nvkm_wr32(device, 0x002a74, upper_32_bits(buffer->addr));
	nvkm_wr32(device, 0x002a70, lower_32_bits(buffer->addr));
	nvkm_mask(device, 0x002a70, 0x00000001, 0x00000001);
}

+2 −2
Original line number Diff line number Diff line
@@ -88,8 +88,8 @@ gv100_fault_buffer_init(struct nvkm_fault_buffer *buffer)
	const u32 foff = buffer->id * 0x14;

	nvkm_mask(device, 0x100e34 + foff, 0xc0000000, 0x40000000);
	nvkm_wr32(device, 0x100e28 + foff, upper_32_bits(buffer->vma->addr));
	nvkm_wr32(device, 0x100e24 + foff, lower_32_bits(buffer->vma->addr));
	nvkm_wr32(device, 0x100e28 + foff, upper_32_bits(buffer->addr));
	nvkm_wr32(device, 0x100e24 + foff, lower_32_bits(buffer->addr));
	nvkm_mask(device, 0x100e34 + foff, 0x80000000, 0x80000000);
	nvkm_mask(device, 0x100a2c, intr, intr);
}
+1 −1
Original line number Diff line number Diff line
@@ -13,7 +13,7 @@ struct nvkm_fault_buffer {
	int id;
	int entries;
	struct nvkm_memory *mem;
	struct nvkm_vma *vma;
	u64 addr;
};

int nvkm_fault_new_(const struct nvkm_fault_func *, struct nvkm_device *,