diff options
Diffstat (limited to 'drivers/gpu/drm/nouveau/nvkm/subdev/fault/tu102.c')
| -rw-r--r-- | drivers/gpu/drm/nouveau/nvkm/subdev/fault/tu102.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fault/tu102.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fault/tu102.c index 91eb6729c84d..2d3660d21b9a 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fault/tu102.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fault/tu102.c @@ -126,7 +126,7 @@ tu102_fault_intr(struct nvkm_fault *fault) nvkm_wr32(device, 0xb81010, 0x10); if (fault->buffer[0]) { - nvkm_event_send(&fault->event, 1, 0, NULL, 0); + nvkm_event_send(&fault->event, NVKM_FAULT_BUFFER_EVENT_PENDING, 0, NULL, 0); stat &= ~0x00000200; } } @@ -137,7 +137,7 @@ tu102_fault_intr(struct nvkm_fault *fault) nvkm_wr32(device, 0xb81008, 0x1); if (fault->buffer[1]) { - nvkm_event_send(&fault->event, 1, 1, NULL, 0); + nvkm_event_send(&fault->event, NVKM_FAULT_BUFFER_EVENT_PENDING, 1, NULL, 0); stat &= ~0x00000100; } } @@ -150,7 +150,9 @@ tu102_fault_intr(struct nvkm_fault *fault) static void tu102_fault_fini(struct nvkm_fault *fault) { - nvkm_notify_put(&fault->nrpfb); + nvkm_event_ntfy_block(&fault->nrpfb); + flush_work(&fault->nrpfb_work); + if (fault->buffer[0]) fault->func->buffer.fini(fault->buffer[0]); /*XXX: disable priv faults */ @@ -161,7 +163,7 @@ tu102_fault_init(struct nvkm_fault *fault) { /*XXX: enable priv faults */ fault->func->buffer.init(fault->buffer[0]); - nvkm_notify_get(&fault->nrpfb); + nvkm_event_ntfy_allow(&fault->nrpfb); } static const struct nvkm_fault_func @@ -184,5 +186,10 @@ int tu102_fault_new(struct nvkm_device *device, enum nvkm_subdev_type type, int inst, struct nvkm_fault **pfault) { - return nvkm_fault_new_(&tu102_fault, device, type, inst, pfault); + int ret = nvkm_fault_new_(&tu102_fault, device, type, inst, pfault); + if (ret) + return ret; + + INIT_WORK(&(*pfault)->nrpfb_work, gv100_fault_buffer_process); + return 0; } |
