diff options
author | Ben Skeggs <bskeggs@redhat.com> | 2012-09-06 20:26:38 -0400 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2012-10-02 23:13:10 -0400 |
commit | b3ccd34ded3e730bba33cd4bd4b7ab78b4a0bb03 (patch) | |
tree | 506ef482aba05c95c93b556794790d65ebd2e874 /drivers | |
parent | f73221e4aa766a58b784729968159013cc73459d (diff) |
drm/nvc0/fifo: re-bash PBUS regs after vm-fault to BARs/PEEPHOLE
Seems to be required to "re-arm" the engines after a vm fault.
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpu/drm/nouveau/core/engine/fifo/nvc0.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/drivers/gpu/drm/nouveau/core/engine/fifo/nvc0.c b/drivers/gpu/drm/nouveau/core/engine/fifo/nvc0.c index 2dd68126f845..6f21be600557 100644 --- a/drivers/gpu/drm/nouveau/core/engine/fifo/nvc0.c +++ b/drivers/gpu/drm/nouveau/core/engine/fifo/nvc0.c | |||
@@ -389,12 +389,26 @@ static const struct nouveau_bitfield nvc0_fifo_subfifo_intr[] = { | |||
389 | static void | 389 | static void |
390 | nvc0_fifo_isr_vm_fault(struct nvc0_fifo_priv *priv, int unit) | 390 | nvc0_fifo_isr_vm_fault(struct nvc0_fifo_priv *priv, int unit) |
391 | { | 391 | { |
392 | u32 inst = nv_rd32(priv, 0x2800 + (unit * 0x10)); | 392 | u32 inst = nv_rd32(priv, 0x002800 + (unit * 0x10)); |
393 | u32 valo = nv_rd32(priv, 0x2804 + (unit * 0x10)); | 393 | u32 valo = nv_rd32(priv, 0x002804 + (unit * 0x10)); |
394 | u32 vahi = nv_rd32(priv, 0x2808 + (unit * 0x10)); | 394 | u32 vahi = nv_rd32(priv, 0x002808 + (unit * 0x10)); |
395 | u32 stat = nv_rd32(priv, 0x280c + (unit * 0x10)); | 395 | u32 stat = nv_rd32(priv, 0x00280c + (unit * 0x10)); |
396 | u32 client = (stat & 0x00001f00) >> 8; | 396 | u32 client = (stat & 0x00001f00) >> 8; |
397 | 397 | ||
398 | switch (unit) { | ||
399 | case 3: /* PEEPHOLE */ | ||
400 | nv_mask(priv, 0x001718, 0x00000000, 0x00000000); | ||
401 | break; | ||
402 | case 4: /* BAR1 */ | ||
403 | nv_mask(priv, 0x001704, 0x00000000, 0x00000000); | ||
404 | break; | ||
405 | case 5: /* BAR3 */ | ||
406 | nv_mask(priv, 0x001714, 0x00000000, 0x00000000); | ||
407 | break; | ||
408 | default: | ||
409 | break; | ||
410 | } | ||
411 | |||
398 | nv_error(priv, "%s fault at 0x%010llx [", (stat & 0x00000080) ? | 412 | nv_error(priv, "%s fault at 0x%010llx [", (stat & 0x00000080) ? |
399 | "write" : "read", (u64)vahi << 32 | valo); | 413 | "write" : "read", (u64)vahi << 32 | valo); |
400 | nouveau_enum_print(nvc0_fifo_fault_reason, stat & 0x0000000f); | 414 | nouveau_enum_print(nvc0_fifo_fault_reason, stat & 0x0000000f); |