Commit e50d0237 authored by Ben Skeggs's avatar Ben Skeggs

drm/nouveau/fifo/gk104-: implement support for PTOP fault info

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 91419acf
...@@ -300,7 +300,7 @@ gk104_fifo_intr_fault(struct gk104_fifo *fifo, int unit) ...@@ -300,7 +300,7 @@ gk104_fifo_intr_fault(struct gk104_fifo *fifo, int unit)
struct nvkm_engine *engine = NULL; struct nvkm_engine *engine = NULL;
struct nvkm_fifo_chan *chan; struct nvkm_fifo_chan *chan;
unsigned long flags; unsigned long flags;
char gpcid[8] = ""; char gpcid[8] = "", en[16] = "";
er = nvkm_enum_find(fifo->func->fault.reason, reason); er = nvkm_enum_find(fifo->func->fault.reason, reason);
eu = nvkm_enum_find(fifo->func->fault.engine, unit); eu = nvkm_enum_find(fifo->func->fault.engine, unit);
...@@ -328,13 +328,27 @@ gk104_fifo_intr_fault(struct gk104_fifo *fifo, int unit) ...@@ -328,13 +328,27 @@ gk104_fifo_intr_fault(struct gk104_fifo *fifo, int unit)
} }
} }
if (eu == NULL) {
enum nvkm_devidx engidx = nvkm_top_fault(device->top, unit);
if (engidx < NVKM_SUBDEV_NR) {
const char *src = nvkm_subdev_name[engidx];
char *dst = en;
do {
*dst++ = toupper(*src++);
} while(*src);
engine = nvkm_device_engine(device, engidx);
}
} else {
snprintf(en, sizeof(en), "%s", eu->name);
}
chan = nvkm_fifo_chan_inst(&fifo->base, (u64)inst << 12, &flags); chan = nvkm_fifo_chan_inst(&fifo->base, (u64)inst << 12, &flags);
nvkm_error(subdev, nvkm_error(subdev,
"%s fault at %010llx engine %02x [%s] client %02x [%s%s] " "%s fault at %010llx engine %02x [%s] client %02x [%s%s] "
"reason %02x [%s] on channel %d [%010llx %s]\n", "reason %02x [%s] on channel %d [%010llx %s]\n",
write ? "write" : "read", (u64)vahi << 32 | valo, write ? "write" : "read", (u64)vahi << 32 | valo,
unit, eu ? eu->name : "", client, gpcid, ec ? ec->name : "", unit, en, client, gpcid, ec ? ec->name : "",
reason, er ? er->name : "", chan ? chan->chid : -1, reason, er ? er->name : "", chan ? chan->chid : -1,
(u64)inst << 12, (u64)inst << 12,
chan ? chan->object.client->name : "unknown"); chan ? chan->object.client->name : "unknown");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment