Commit 6fdb383e authored by Ben Skeggs's avatar Ben Skeggs

drm/nv50: check for vm traps on every gr irq

Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 312d1d5f
...@@ -1076,7 +1076,7 @@ extern void nv40_fb_set_tile_region(struct drm_device *dev, int i); ...@@ -1076,7 +1076,7 @@ extern void nv40_fb_set_tile_region(struct drm_device *dev, int i);
/* nv50_fb.c */ /* nv50_fb.c */
extern int nv50_fb_init(struct drm_device *); extern int nv50_fb_init(struct drm_device *);
extern void nv50_fb_takedown(struct drm_device *); extern void nv50_fb_takedown(struct drm_device *);
extern void nv50_fb_vm_trap(struct drm_device *, int display, const char *); extern void nv50_fb_vm_trap(struct drm_device *, int display);
/* nvc0_fb.c */ /* nvc0_fb.c */
extern int nvc0_fb_init(struct drm_device *); extern int nvc0_fb_init(struct drm_device *);
......
...@@ -516,7 +516,7 @@ nv04_fifo_isr(struct drm_device *dev) ...@@ -516,7 +516,7 @@ nv04_fifo_isr(struct drm_device *dev)
if (dev_priv->card_type == NV_50) { if (dev_priv->card_type == NV_50) {
if (status & 0x00000010) { if (status & 0x00000010) {
nv50_fb_vm_trap(dev, 1, "PFIFO_BAR_FAULT"); nv50_fb_vm_trap(dev, nouveau_ratelimit());
status &= ~0x00000010; status &= ~0x00000010;
nv_wr32(dev, 0x002100, 0x00000010); nv_wr32(dev, 0x002100, 0x00000010);
} }
......
...@@ -210,7 +210,7 @@ static struct nouveau_enum vm_fault[] = { ...@@ -210,7 +210,7 @@ static struct nouveau_enum vm_fault[] = {
}; };
void void
nv50_fb_vm_trap(struct drm_device *dev, int display, const char *name) nv50_fb_vm_trap(struct drm_device *dev, int display)
{ {
struct drm_nouveau_private *dev_priv = dev->dev_private; struct drm_nouveau_private *dev_priv = dev->dev_private;
const struct nouveau_enum *en, *cl; const struct nouveau_enum *en, *cl;
......
...@@ -702,7 +702,6 @@ nv50_pgraph_tp_trap(struct drm_device *dev, int type, uint32_t ustatus_old, ...@@ -702,7 +702,6 @@ nv50_pgraph_tp_trap(struct drm_device *dev, int type, uint32_t ustatus_old,
tps++; tps++;
switch (type) { switch (type) {
case 6: /* texture error... unknown for now */ case 6: /* texture error... unknown for now */
nv50_fb_vm_trap(dev, display, name);
if (display) { if (display) {
NV_ERROR(dev, "magic set %d:\n", i); NV_ERROR(dev, "magic set %d:\n", i);
for (r = ustatus_addr + 4; r <= ustatus_addr + 0x10; r += 4) for (r = ustatus_addr + 4; r <= ustatus_addr + 0x10; r += 4)
...@@ -725,7 +724,6 @@ nv50_pgraph_tp_trap(struct drm_device *dev, int type, uint32_t ustatus_old, ...@@ -725,7 +724,6 @@ nv50_pgraph_tp_trap(struct drm_device *dev, int type, uint32_t ustatus_old,
uint32_t e1c = nv_rd32(dev, ustatus_addr + 0x14); uint32_t e1c = nv_rd32(dev, ustatus_addr + 0x14);
uint32_t e20 = nv_rd32(dev, ustatus_addr + 0x18); uint32_t e20 = nv_rd32(dev, ustatus_addr + 0x18);
uint32_t e24 = nv_rd32(dev, ustatus_addr + 0x1c); uint32_t e24 = nv_rd32(dev, ustatus_addr + 0x1c);
nv50_fb_vm_trap(dev, display, name);
/* 2d engine destination */ /* 2d engine destination */
if (ustatus & 0x00000010) { if (ustatus & 0x00000010) {
if (display) { if (display) {
...@@ -1068,6 +1066,7 @@ nv50_graph_isr(struct drm_device *dev) ...@@ -1068,6 +1066,7 @@ nv50_graph_isr(struct drm_device *dev)
NV_INFO(dev, "PGRAPH - ch %d (0x%010llx) subc %d " NV_INFO(dev, "PGRAPH - ch %d (0x%010llx) subc %d "
"class 0x%04x mthd 0x%04x data 0x%08x\n", "class 0x%04x mthd 0x%04x data 0x%08x\n",
chid, inst, subc, class, mthd, data); chid, inst, subc, class, mthd, data);
nv50_fb_vm_trap(dev, 1);
} }
} }
......
...@@ -136,5 +136,5 @@ nv84_crypt_isr(struct drm_device *dev) ...@@ -136,5 +136,5 @@ nv84_crypt_isr(struct drm_device *dev)
nv_wr32(dev, 0x102130, stat); nv_wr32(dev, 0x102130, stat);
nv_wr32(dev, 0x10200c, 0x10); nv_wr32(dev, 0x10200c, 0x10);
nv50_fb_vm_trap(dev, show, "PCRYPT"); nv50_fb_vm_trap(dev, show);
} }
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