aboutsummaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2015-10-16 09:39:14 +1000
committerDave Airlie <airlied@redhat.com>2015-10-16 09:39:14 +1000
commitaa1b36f2bb068e6d76b0bef2da286631bfa1bff1 (patch)
treec4acebfa46b13e556ec47fbbf3fa0697e50660cf /drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
parent99a91c94972d1d583beb4b4854f55984f7cc2dc8 (diff)
parent2fcef6ec87a044221fc3c2f16873f7c02b9ae991 (diff)
Merge branch 'drm-next-4.4' of git://people.freedesktop.org/~agd5f/linux into drm-next
This is the first radeon and amdgpu pull for drm-next. Highlights include: - Efficiency improvements to the CS checker for pre-SI asics - Cursor fixes ported from radeon to amdgpu - Enable GPU scheduler by default - Add a bunch of GPUVM debugging options - Add support for some new atombios opcodes - Misc cleanups and fixes * 'drm-next-4.4' of git://people.freedesktop.org/~agd5f/linux: (42 commits) drm/amdgpu: fix lockup when clean pending fences drm/amdgpu: add timer to fence to detect scheduler lockup drm/amdgpu: add VM CS mapping trace point drm/amdgpu: add option to clear VM page tables after every submit drm/amdgpu: add option to stop on VM fault drm/amdgpu: only print meaningful VM faults drm/amdgpu: also trace already allocated VMIDs drm/amdgpu: Drop unnecessary #include <linux/vga_switcheroo.h> drm/radeon: Drop unnecessary #include <linux/vga_switcheroo.h> drm/amdgpu: clean up pageflip interrupt handling drm/amdgpu: rework sdma structures drm/amdgpu: unpin cursor BOs on suspend and pin them again on resume drm/amdgpu/dce8: Fold set_cursor() into show_cursor() drm/amdgpu/dce8: Clean up reference counting and pinning of the cursor BOs drm/amdgpu/dce8: Move hotspot handling out of set_cursor drm/amdgpu/dce8: Re-show the cursor after a modeset (v2) drm/amdgpu/dce8: Use cursor_set2 hook for enabling / disabling the HW cursor drm/amdgpu/dce11: Fold set_cursor() into show_cursor() drm/amdgpu/dce11: Clean up reference counting and pinning of the cursor BOs drm/amdgpu/dce11: Move hotspot handling out of set_cursor ...
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
index 749420f1ea6f..25012c790f8f 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
@@ -104,10 +104,11 @@ int amdgpu_cs_get_ring(struct amdgpu_device *adev, u32 ip_type,
}
break;
case AMDGPU_HW_IP_DMA:
- if (ring < 2) {
- *out_ring = &adev->sdma[ring].ring;
+ if (ring < adev->sdma.num_instances) {
+ *out_ring = &adev->sdma.instance[ring].ring;
} else {
- DRM_ERROR("only two SDMA rings are supported\n");
+ DRM_ERROR("only %d SDMA rings are supported\n",
+ adev->sdma.num_instances);
return -EINVAL;
}
break;
@@ -566,9 +567,24 @@ static int amdgpu_bo_vm_update_pte(struct amdgpu_cs_parser *p,
if (r)
return r;
}
+
+ }
+
+ r = amdgpu_vm_clear_invalids(adev, vm, &p->ibs[0].sync);
+
+ if (amdgpu_vm_debug && p->bo_list) {
+ /* Invalidate all BOs to test for userspace bugs */
+ for (i = 0; i < p->bo_list->num_entries; i++) {
+ /* ignore duplicates */
+ bo = p->bo_list->array[i].robj;
+ if (!bo)
+ continue;
+
+ amdgpu_vm_bo_invalidate(adev, bo);
+ }
}
- return amdgpu_vm_clear_invalids(adev, vm, &p->ibs[0].sync);
+ return r;
}
static int amdgpu_cs_ib_vm_chunk(struct amdgpu_device *adev,