diff options
| -rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_mem.c | 28 | ||||
| -rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_sgdma.c | 18 |
2 files changed, 46 insertions, 0 deletions
diff --git a/drivers/gpu/drm/nouveau/nouveau_mem.c b/drivers/gpu/drm/nouveau/nouveau_mem.c index 2dc09dbd817d..a4d5ecc6ed5a 100644 --- a/drivers/gpu/drm/nouveau/nouveau_mem.c +++ b/drivers/gpu/drm/nouveau/nouveau_mem.c | |||
| @@ -347,6 +347,20 @@ nv50_mem_vm_bind_linear(struct drm_device *dev, uint64_t virt, uint32_t size, | |||
| 347 | return -EBUSY; | 347 | return -EBUSY; |
| 348 | } | 348 | } |
| 349 | 349 | ||
| 350 | nv_wr32(dev, 0x100c80, 0x00040001); | ||
| 351 | if (!nv_wait(0x100c80, 0x00000001, 0x00000000)) { | ||
| 352 | NV_ERROR(dev, "timeout: (0x100c80 & 1) == 0 (2)\n"); | ||
| 353 | NV_ERROR(dev, "0x100c80 = 0x%08x\n", nv_rd32(dev, 0x100c80)); | ||
| 354 | return -EBUSY; | ||
| 355 | } | ||
| 356 | |||
| 357 | nv_wr32(dev, 0x100c80, 0x00060001); | ||
| 358 | if (!nv_wait(0x100c80, 0x00000001, 0x00000000)) { | ||
| 359 | NV_ERROR(dev, "timeout: (0x100c80 & 1) == 0 (2)\n"); | ||
| 360 | NV_ERROR(dev, "0x100c80 = 0x%08x\n", nv_rd32(dev, 0x100c80)); | ||
| 361 | return -EBUSY; | ||
| 362 | } | ||
| 363 | |||
| 350 | return 0; | 364 | return 0; |
| 351 | } | 365 | } |
| 352 | 366 | ||
| @@ -387,6 +401,20 @@ nv50_mem_vm_unbind(struct drm_device *dev, uint64_t virt, uint32_t size) | |||
| 387 | if (!nv_wait(0x100c80, 0x00000001, 0x00000000)) { | 401 | if (!nv_wait(0x100c80, 0x00000001, 0x00000000)) { |
| 388 | NV_ERROR(dev, "timeout: (0x100c80 & 1) == 0 (2)\n"); | 402 | NV_ERROR(dev, "timeout: (0x100c80 & 1) == 0 (2)\n"); |
| 389 | NV_ERROR(dev, "0x100c80 = 0x%08x\n", nv_rd32(dev, 0x100c80)); | 403 | NV_ERROR(dev, "0x100c80 = 0x%08x\n", nv_rd32(dev, 0x100c80)); |
| 404 | return; | ||
| 405 | } | ||
| 406 | |||
| 407 | nv_wr32(dev, 0x100c80, 0x00040001); | ||
| 408 | if (!nv_wait(0x100c80, 0x00000001, 0x00000000)) { | ||
| 409 | NV_ERROR(dev, "timeout: (0x100c80 & 1) == 0 (2)\n"); | ||
| 410 | NV_ERROR(dev, "0x100c80 = 0x%08x\n", nv_rd32(dev, 0x100c80)); | ||
| 411 | return; | ||
| 412 | } | ||
| 413 | |||
| 414 | nv_wr32(dev, 0x100c80, 0x00060001); | ||
| 415 | if (!nv_wait(0x100c80, 0x00000001, 0x00000000)) { | ||
| 416 | NV_ERROR(dev, "timeout: (0x100c80 & 1) == 0 (2)\n"); | ||
| 417 | NV_ERROR(dev, "0x100c80 = 0x%08x\n", nv_rd32(dev, 0x100c80)); | ||
| 390 | } | 418 | } |
| 391 | } | 419 | } |
| 392 | 420 | ||
diff --git a/drivers/gpu/drm/nouveau/nouveau_sgdma.c b/drivers/gpu/drm/nouveau/nouveau_sgdma.c index ed1590577b6c..554fb45730c1 100644 --- a/drivers/gpu/drm/nouveau/nouveau_sgdma.c +++ b/drivers/gpu/drm/nouveau/nouveau_sgdma.c | |||
| @@ -171,6 +171,24 @@ nouveau_sgdma_unbind(struct ttm_backend *be) | |||
| 171 | } | 171 | } |
| 172 | dev_priv->engine.instmem.finish_access(nvbe->dev); | 172 | dev_priv->engine.instmem.finish_access(nvbe->dev); |
| 173 | 173 | ||
| 174 | if (dev_priv->card_type == NV_50) { | ||
| 175 | nv_wr32(dev, 0x100c80, 0x00050001); | ||
| 176 | if (!nv_wait(0x100c80, 0x00000001, 0x00000000)) { | ||
| 177 | NV_ERROR(dev, "timeout: (0x100c80 & 1) == 0 (2)\n"); | ||
| 178 | NV_ERROR(dev, "0x100c80 = 0x%08x\n", | ||
| 179 | nv_rd32(dev, 0x100c80)); | ||
| 180 | return -EBUSY; | ||
| 181 | } | ||
| 182 | |||
| 183 | nv_wr32(dev, 0x100c80, 0x00000001); | ||
| 184 | if (!nv_wait(0x100c80, 0x00000001, 0x00000000)) { | ||
| 185 | NV_ERROR(dev, "timeout: (0x100c80 & 1) == 0 (2)\n"); | ||
| 186 | NV_ERROR(dev, "0x100c80 = 0x%08x\n", | ||
| 187 | nv_rd32(dev, 0x100c80)); | ||
| 188 | return -EBUSY; | ||
| 189 | } | ||
| 190 | } | ||
| 191 | |||
| 174 | nvbe->bound = false; | 192 | nvbe->bound = false; |
| 175 | return 0; | 193 | return 0; |
| 176 | } | 194 | } |
