|
@@ -347,6 +347,20 @@ nv50_mem_vm_bind_linear(struct drm_device *dev, uint64_t virt, uint32_t size,
|
|
return -EBUSY;
|
|
return -EBUSY;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ nv_wr32(dev, 0x100c80, 0x00040001);
|
|
|
|
+ if (!nv_wait(0x100c80, 0x00000001, 0x00000000)) {
|
|
|
|
+ NV_ERROR(dev, "timeout: (0x100c80 & 1) == 0 (2)\n");
|
|
|
|
+ NV_ERROR(dev, "0x100c80 = 0x%08x\n", nv_rd32(dev, 0x100c80));
|
|
|
|
+ return -EBUSY;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ nv_wr32(dev, 0x100c80, 0x00060001);
|
|
|
|
+ if (!nv_wait(0x100c80, 0x00000001, 0x00000000)) {
|
|
|
|
+ NV_ERROR(dev, "timeout: (0x100c80 & 1) == 0 (2)\n");
|
|
|
|
+ NV_ERROR(dev, "0x100c80 = 0x%08x\n", nv_rd32(dev, 0x100c80));
|
|
|
|
+ return -EBUSY;
|
|
|
|
+ }
|
|
|
|
+
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -384,6 +398,20 @@ nv50_mem_vm_unbind(struct drm_device *dev, uint64_t virt, uint32_t size)
|
|
}
|
|
}
|
|
|
|
|
|
nv_wr32(dev, 0x100c80, 0x00000001);
|
|
nv_wr32(dev, 0x100c80, 0x00000001);
|
|
|
|
+ if (!nv_wait(0x100c80, 0x00000001, 0x00000000)) {
|
|
|
|
+ NV_ERROR(dev, "timeout: (0x100c80 & 1) == 0 (2)\n");
|
|
|
|
+ NV_ERROR(dev, "0x100c80 = 0x%08x\n", nv_rd32(dev, 0x100c80));
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ nv_wr32(dev, 0x100c80, 0x00040001);
|
|
|
|
+ if (!nv_wait(0x100c80, 0x00000001, 0x00000000)) {
|
|
|
|
+ NV_ERROR(dev, "timeout: (0x100c80 & 1) == 0 (2)\n");
|
|
|
|
+ NV_ERROR(dev, "0x100c80 = 0x%08x\n", nv_rd32(dev, 0x100c80));
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ nv_wr32(dev, 0x100c80, 0x00060001);
|
|
if (!nv_wait(0x100c80, 0x00000001, 0x00000000)) {
|
|
if (!nv_wait(0x100c80, 0x00000001, 0x00000000)) {
|
|
NV_ERROR(dev, "timeout: (0x100c80 & 1) == 0 (2)\n");
|
|
NV_ERROR(dev, "timeout: (0x100c80 & 1) == 0 (2)\n");
|
|
NV_ERROR(dev, "0x100c80 = 0x%08x\n", nv_rd32(dev, 0x100c80));
|
|
NV_ERROR(dev, "0x100c80 = 0x%08x\n", nv_rd32(dev, 0x100c80));
|