forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-11 04dd17822334871b23ea2862f7798fb0e0007777
kernel/drivers/gpu/drm/nouveau/nvkm/subdev/fault/base.c
....@@ -23,21 +23,19 @@
2323
2424 #include <core/memory.h>
2525 #include <core/notify.h>
26
-#include <subdev/bar.h>
27
-#include <subdev/mmu.h>
2826
2927 static void
3028 nvkm_fault_ntfy_fini(struct nvkm_event *event, int type, int index)
3129 {
3230 struct nvkm_fault *fault = container_of(event, typeof(*fault), event);
33
- fault->func->buffer.fini(fault->buffer[index]);
31
+ fault->func->buffer.intr(fault->buffer[index], false);
3432 }
3533
3634 static void
3735 nvkm_fault_ntfy_init(struct nvkm_event *event, int type, int index)
3836 {
3937 struct nvkm_fault *fault = container_of(event, typeof(*fault), event);
40
- fault->func->buffer.init(fault->buffer[index]);
38
+ fault->func->buffer.intr(fault->buffer[index], true);
4139 }
4240
4341 static int
....@@ -91,7 +89,6 @@
9189 {
9290 struct nvkm_subdev *subdev = &fault->subdev;
9391 struct nvkm_device *device = subdev->device;
94
- struct nvkm_vmm *bar2 = nvkm_bar_bar2_vmm(device);
9592 struct nvkm_fault_buffer *buffer;
9693 int ret;
9794
....@@ -99,7 +96,7 @@
9996 return -ENOMEM;
10097 buffer->fault = fault;
10198 buffer->id = id;
102
- buffer->entries = fault->func->buffer.entries(buffer);
99
+ fault->func->buffer.info(buffer);
103100 fault->buffer[id] = buffer;
104101
105102 nvkm_debug(subdev, "buffer %d: %d entries\n", id, buffer->entries);
....@@ -110,12 +107,12 @@
110107 if (ret)
111108 return ret;
112109
113
- ret = nvkm_vmm_get(bar2, 12, nvkm_memory_size(buffer->mem),
114
- &buffer->vma);
115
- if (ret)
116
- return ret;
110
+ /* Pin fault buffer in BAR2. */
111
+ buffer->addr = fault->func->buffer.pin(buffer);
112
+ if (buffer->addr == ~0ULL)
113
+ return -EFAULT;
117114
118
- return nvkm_memory_map(buffer->mem, 0, bar2, buffer->vma, NULL, 0);
115
+ return 0;
119116 }
120117
121118 static int
....@@ -146,7 +143,6 @@
146143 static void *
147144 nvkm_fault_dtor(struct nvkm_subdev *subdev)
148145 {
149
- struct nvkm_vmm *bar2 = nvkm_bar_bar2_vmm(subdev->device);
150146 struct nvkm_fault *fault = nvkm_fault(subdev);
151147 int i;
152148
....@@ -155,7 +151,6 @@
155151
156152 for (i = 0; i < fault->buffer_nr; i++) {
157153 if (fault->buffer[i]) {
158
- nvkm_vmm_put(bar2, &fault->buffer[i]->vma);
159154 nvkm_memory_unref(&fault->buffer[i]->mem);
160155 kfree(fault->buffer[i]);
161156 }
....@@ -182,5 +177,7 @@
182177 return -ENOMEM;
183178 nvkm_subdev_ctor(&nvkm_fault, device, index, &fault->subdev);
184179 fault->func = func;
180
+ fault->user.ctor = nvkm_ufault_new;
181
+ fault->user.base = func->user.base;
185182 return 0;
186183 }