forked from Minki/linux
drm/nouveau/fault: remove manual mapping of fault buffers into BAR2
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
1786bf56e4
commit
4d326469d9
@ -23,8 +23,6 @@
|
|||||||
|
|
||||||
#include <core/memory.h>
|
#include <core/memory.h>
|
||||||
#include <core/notify.h>
|
#include <core/notify.h>
|
||||||
#include <subdev/bar.h>
|
|
||||||
#include <subdev/mmu.h>
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
nvkm_fault_ntfy_fini(struct nvkm_event *event, int type, int index)
|
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_subdev *subdev = &fault->subdev;
|
||||||
struct nvkm_device *device = subdev->device;
|
struct nvkm_device *device = subdev->device;
|
||||||
struct nvkm_vmm *bar2 = nvkm_bar_bar2_vmm(device);
|
|
||||||
struct nvkm_fault_buffer *buffer;
|
struct nvkm_fault_buffer *buffer;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
@ -110,12 +107,12 @@ nvkm_fault_oneinit_buffer(struct nvkm_fault *fault, int id)
|
|||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
ret = nvkm_vmm_get(bar2, 12, nvkm_memory_size(buffer->mem),
|
/* Pin fault buffer in BAR2. */
|
||||||
&buffer->vma);
|
buffer->addr = nvkm_memory_bar2(buffer->mem);
|
||||||
if (ret)
|
if (buffer->addr == ~0ULL)
|
||||||
return ret;
|
return -EFAULT;
|
||||||
|
|
||||||
return nvkm_memory_map(buffer->mem, 0, bar2, buffer->vma, NULL, 0);
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@ -146,7 +143,6 @@ nvkm_fault_oneinit(struct nvkm_subdev *subdev)
|
|||||||
static void *
|
static void *
|
||||||
nvkm_fault_dtor(struct nvkm_subdev *subdev)
|
nvkm_fault_dtor(struct nvkm_subdev *subdev)
|
||||||
{
|
{
|
||||||
struct nvkm_vmm *bar2 = nvkm_bar_bar2_vmm(subdev->device);
|
|
||||||
struct nvkm_fault *fault = nvkm_fault(subdev);
|
struct nvkm_fault *fault = nvkm_fault(subdev);
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -154,7 +150,6 @@ nvkm_fault_dtor(struct nvkm_subdev *subdev)
|
|||||||
|
|
||||||
for (i = 0; i < fault->buffer_nr; i++) {
|
for (i = 0; i < fault->buffer_nr; i++) {
|
||||||
if (fault->buffer[i]) {
|
if (fault->buffer[i]) {
|
||||||
nvkm_vmm_put(bar2, &fault->buffer[i]->vma);
|
|
||||||
nvkm_memory_unref(&fault->buffer[i]->mem);
|
nvkm_memory_unref(&fault->buffer[i]->mem);
|
||||||
kfree(fault->buffer[i]);
|
kfree(fault->buffer[i]);
|
||||||
}
|
}
|
||||||
|
@ -21,8 +21,6 @@
|
|||||||
*/
|
*/
|
||||||
#include "priv.h"
|
#include "priv.h"
|
||||||
|
|
||||||
#include <subdev/mmu.h>
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gp100_fault_buffer_fini(struct nvkm_fault_buffer *buffer)
|
gp100_fault_buffer_fini(struct nvkm_fault_buffer *buffer)
|
||||||
{
|
{
|
||||||
@ -34,8 +32,8 @@ static void
|
|||||||
gp100_fault_buffer_init(struct nvkm_fault_buffer *buffer)
|
gp100_fault_buffer_init(struct nvkm_fault_buffer *buffer)
|
||||||
{
|
{
|
||||||
struct nvkm_device *device = buffer->fault->subdev.device;
|
struct nvkm_device *device = buffer->fault->subdev.device;
|
||||||
nvkm_wr32(device, 0x002a74, upper_32_bits(buffer->vma->addr));
|
nvkm_wr32(device, 0x002a74, upper_32_bits(buffer->addr));
|
||||||
nvkm_wr32(device, 0x002a70, lower_32_bits(buffer->vma->addr));
|
nvkm_wr32(device, 0x002a70, lower_32_bits(buffer->addr));
|
||||||
nvkm_mask(device, 0x002a70, 0x00000001, 0x00000001);
|
nvkm_mask(device, 0x002a70, 0x00000001, 0x00000001);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -88,8 +88,8 @@ gv100_fault_buffer_init(struct nvkm_fault_buffer *buffer)
|
|||||||
const u32 foff = buffer->id * 0x14;
|
const u32 foff = buffer->id * 0x14;
|
||||||
|
|
||||||
nvkm_mask(device, 0x100e34 + foff, 0xc0000000, 0x40000000);
|
nvkm_mask(device, 0x100e34 + foff, 0xc0000000, 0x40000000);
|
||||||
nvkm_wr32(device, 0x100e28 + foff, upper_32_bits(buffer->vma->addr));
|
nvkm_wr32(device, 0x100e28 + foff, upper_32_bits(buffer->addr));
|
||||||
nvkm_wr32(device, 0x100e24 + foff, lower_32_bits(buffer->vma->addr));
|
nvkm_wr32(device, 0x100e24 + foff, lower_32_bits(buffer->addr));
|
||||||
nvkm_mask(device, 0x100e34 + foff, 0x80000000, 0x80000000);
|
nvkm_mask(device, 0x100e34 + foff, 0x80000000, 0x80000000);
|
||||||
nvkm_mask(device, 0x100a2c, intr, intr);
|
nvkm_mask(device, 0x100a2c, intr, intr);
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@ struct nvkm_fault_buffer {
|
|||||||
int id;
|
int id;
|
||||||
int entries;
|
int entries;
|
||||||
struct nvkm_memory *mem;
|
struct nvkm_memory *mem;
|
||||||
struct nvkm_vma *vma;
|
u64 addr;
|
||||||
};
|
};
|
||||||
|
|
||||||
int nvkm_fault_new_(const struct nvkm_fault_func *, struct nvkm_device *,
|
int nvkm_fault_new_(const struct nvkm_fault_func *, struct nvkm_device *,
|
||||||
|
Loading…
Reference in New Issue
Block a user