Commit 33f8c6d0 authored by Ben Skeggs's avatar Ben Skeggs

drm/nvc0/fifo: use subdev identifiers for bar/ifb fault recovery cases

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 3cf6290a
...@@ -409,9 +409,9 @@ nvc0_fifo_intr_sched(struct nvc0_fifo_priv *priv) ...@@ -409,9 +409,9 @@ nvc0_fifo_intr_sched(struct nvc0_fifo_priv *priv)
static const struct nouveau_enum static const struct nouveau_enum
nvc0_fifo_fault_engine[] = { nvc0_fifo_fault_engine[] = {
{ 0x00, "PGRAPH", NULL, NVDEV_ENGINE_GR }, { 0x00, "PGRAPH", NULL, NVDEV_ENGINE_GR },
{ 0x03, "PEEPHOLE" }, { 0x03, "PEEPHOLE", NULL, NVDEV_ENGINE_IFB },
{ 0x04, "BAR1" }, { 0x04, "BAR1", NULL, NVDEV_SUBDEV_BAR },
{ 0x05, "BAR3" }, { 0x05, "BAR3", NULL, NVDEV_SUBDEV_INSTMEM },
{ 0x07, "PFIFO", NULL, NVDEV_ENGINE_FIFO }, { 0x07, "PFIFO", NULL, NVDEV_ENGINE_FIFO },
{ 0x10, "PBSP", NULL, NVDEV_ENGINE_BSP }, { 0x10, "PBSP", NULL, NVDEV_ENGINE_BSP },
{ 0x11, "PPPP", NULL, NVDEV_ENGINE_PPP }, { 0x11, "PPPP", NULL, NVDEV_ENGINE_PPP },
...@@ -485,30 +485,27 @@ nvc0_fifo_intr_fault(struct nvc0_fifo_priv *priv, int unit) ...@@ -485,30 +485,27 @@ nvc0_fifo_intr_fault(struct nvc0_fifo_priv *priv, int unit)
char ecunk[6] = ""; char ecunk[6] = "";
char gpcid[3] = ""; char gpcid[3] = "";
switch (unit) {
case 3: /* PEEPHOLE */
nv_mask(priv, 0x001718, 0x00000000, 0x00000000);
break;
case 4: /* BAR1 */
nv_mask(priv, 0x001704, 0x00000000, 0x00000000);
break;
case 5: /* BAR3 */
nv_mask(priv, 0x001714, 0x00000000, 0x00000000);
break;
default:
break;
}
er = nouveau_enum_find(nvc0_fifo_fault_reason, reason); er = nouveau_enum_find(nvc0_fifo_fault_reason, reason);
if (!er) if (!er)
snprintf(erunk, sizeof(erunk), "UNK%02X", reason); snprintf(erunk, sizeof(erunk), "UNK%02X", reason);
eu = nouveau_enum_find(nvc0_fifo_fault_engine, unit); eu = nouveau_enum_find(nvc0_fifo_fault_engine, unit);
if (eu) { if (eu) {
if (eu->data2) { switch (eu->data2) {
case NVDEV_SUBDEV_BAR:
nv_mask(priv, 0x001704, 0x00000000, 0x00000000);
break;
case NVDEV_SUBDEV_INSTMEM:
nv_mask(priv, 0x001714, 0x00000000, 0x00000000);
break;
case NVDEV_ENGINE_IFB:
nv_mask(priv, 0x001718, 0x00000000, 0x00000000);
break;
default:
engine = nouveau_engine(priv, eu->data2); engine = nouveau_engine(priv, eu->data2);
if (engine) if (engine)
engctx = nouveau_engctx_get(engine, inst); engctx = nouveau_engctx_get(engine, inst);
break;
} }
} else { } else {
snprintf(euunk, sizeof(euunk), "UNK%02x", unit); snprintf(euunk, sizeof(euunk), "UNK%02x", unit);
......
...@@ -40,6 +40,7 @@ enum nv_subdev_type { ...@@ -40,6 +40,7 @@ enum nv_subdev_type {
NVDEV_ENGINE_FIRST, NVDEV_ENGINE_FIRST,
NVDEV_ENGINE_DMAOBJ = NVDEV_ENGINE_FIRST, NVDEV_ENGINE_DMAOBJ = NVDEV_ENGINE_FIRST,
NVDEV_ENGINE_IFB,
NVDEV_ENGINE_FIFO, NVDEV_ENGINE_FIFO,
NVDEV_ENGINE_SW, NVDEV_ENGINE_SW,
NVDEV_ENGINE_GR, NVDEV_ENGINE_GR,
......
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