aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2016-09-27 22:08:49 -0400
committerDave Airlie <airlied@redhat.com>2016-09-27 22:08:49 -0400
commitca09fb9f60b5f3ab2d57e761aaeea89a5147d784 (patch)
tree908e42ecf32d2601f4c5c340c6c4626841baa661 /drivers/gpu/drm/amd
parent9f4ef05bcdcfdf911b056b471dd3c6a4f331b644 (diff)
parent08895a8b6b06ed2323cd97a36ee40a116b3db8ed (diff)
Merge tag 'v4.8-rc8' into drm-next
Linux 4.8-rc8 There was a lot of fallout in the imx/amdgpu/i915 drivers, so backmerge it now to avoid troubles. * tag 'v4.8-rc8': (1442 commits) Linux 4.8-rc8 fault_in_multipages_readable() throws set-but-unused error mm: check VMA flags to avoid invalid PROT_NONE NUMA balancing radix tree: fix sibling entry handling in radix_tree_descend() radix tree test suite: Test radix_tree_replace_slot() for multiorder entries fix memory leaks in tracing_buffers_splice_read() tracing: Move mutex to protect against resetting of seq data MIPS: Fix delay slot emulation count in debugfs MIPS: SMP: Fix possibility of deadlock when bringing CPUs online mm: delete unnecessary and unsafe init_tlb_ubc() huge tmpfs: fix Committed_AS leak shmem: fix tmpfs to handle the huge= option properly blk-mq: skip unmapped queues in blk_mq_alloc_request_hctx MIPS: Fix pre-r6 emulation FPU initialisation arm64: kgdb: handle read-only text / modules arm64: Call numa_store_cpu_info() earlier. locking/hung_task: Fix typo in CONFIG_DETECT_HUNG_TASK help text nvme-rdma: only clear queue flags after successful connect i2c: qup: skip qup_i2c_suspend if the device is already runtime suspended perf/core: Limit matching exclusive events to one PMU ...
Diffstat (limited to 'drivers/gpu/drm/amd')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu.h5
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c13
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c9
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c4
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c5
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c4
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c3
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c5
-rw-r--r--drivers/gpu/drm/amd/amdgpu/cik_sdma.c3
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c12
-rw-r--r--drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c2
-rw-r--r--drivers/gpu/drm/amd/amdkfd/kfd_doorbell.c2
-rw-r--r--drivers/gpu/drm/amd/scheduler/gpu_scheduler.c2
13 files changed, 43 insertions, 26 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
index 9d79e4ba0213..72c68dbb9821 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -407,7 +407,6 @@ unsigned amdgpu_fence_count_emitted(struct amdgpu_ring *ring);
407/* 407/*
408 * BO. 408 * BO.
409 */ 409 */
410
411struct amdgpu_bo_list_entry { 410struct amdgpu_bo_list_entry {
412 struct amdgpu_bo *robj; 411 struct amdgpu_bo *robj;
413 struct ttm_validate_buffer tv; 412 struct ttm_validate_buffer tv;
@@ -620,9 +619,9 @@ int amdgpu_gart_table_vram_pin(struct amdgpu_device *adev);
620void amdgpu_gart_table_vram_unpin(struct amdgpu_device *adev); 619void amdgpu_gart_table_vram_unpin(struct amdgpu_device *adev);
621int amdgpu_gart_init(struct amdgpu_device *adev); 620int amdgpu_gart_init(struct amdgpu_device *adev);
622void amdgpu_gart_fini(struct amdgpu_device *adev); 621void amdgpu_gart_fini(struct amdgpu_device *adev);
623void amdgpu_gart_unbind(struct amdgpu_device *adev, unsigned offset, 622void amdgpu_gart_unbind(struct amdgpu_device *adev, uint64_t offset,
624 int pages); 623 int pages);
625int amdgpu_gart_bind(struct amdgpu_device *adev, unsigned offset, 624int amdgpu_gart_bind(struct amdgpu_device *adev, uint64_t offset,
626 int pages, struct page **pagelist, 625 int pages, struct page **pagelist,
627 dma_addr_t *dma_addr, uint32_t flags); 626 dma_addr_t *dma_addr, uint32_t flags);
628int amdgpu_ttm_recover_gart(struct amdgpu_device *adev); 627int amdgpu_ttm_recover_gart(struct amdgpu_device *adev);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
index 59961db9c390..8e6bf548d689 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
@@ -348,6 +348,19 @@ bool amdgpu_atombios_get_connector_info_from_object_table(struct amdgpu_device *
348 (le16_to_cpu(path->usConnObjectId) & 348 (le16_to_cpu(path->usConnObjectId) &
349 OBJECT_TYPE_MASK) >> OBJECT_TYPE_SHIFT; 349 OBJECT_TYPE_MASK) >> OBJECT_TYPE_SHIFT;
350 350
351 /* Skip TV/CV support */
352 if ((le16_to_cpu(path->usDeviceTag) ==
353 ATOM_DEVICE_TV1_SUPPORT) ||
354 (le16_to_cpu(path->usDeviceTag) ==
355 ATOM_DEVICE_CV_SUPPORT))
356 continue;
357
358 if (con_obj_id >= ARRAY_SIZE(object_connector_convert)) {
359 DRM_ERROR("invalid con_obj_id %d for device tag 0x%04x\n",
360 con_obj_id, le16_to_cpu(path->usDeviceTag));
361 continue;
362 }
363
351 connector_type = 364 connector_type =
352 object_connector_convert[con_obj_id]; 365 object_connector_convert[con_obj_id];
353 connector_object_id = con_obj_id; 366 connector_object_id = con_obj_id;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c
index 550c5ee704ec..dae35a96a694 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atpx_handler.c
@@ -205,16 +205,7 @@ static int amdgpu_atpx_validate(struct amdgpu_atpx *atpx)
205 atpx->is_hybrid = false; 205 atpx->is_hybrid = false;
206 if (valid_bits & ATPX_MS_HYBRID_GFX_SUPPORTED) { 206 if (valid_bits & ATPX_MS_HYBRID_GFX_SUPPORTED) {
207 printk("ATPX Hybrid Graphics\n"); 207 printk("ATPX Hybrid Graphics\n");
208#if 1
209 /* This is a temporary hack until the D3 cold support
210 * makes it upstream. The ATPX power_control method seems
211 * to still work on even if the system should be using
212 * the new standardized hybrid D3 cold ACPI interface.
213 */
214 atpx->functions.power_cntl = true;
215#else
216 atpx->functions.power_cntl = false; 208 atpx->functions.power_cntl = false;
217#endif
218 atpx->is_hybrid = true; 209 atpx->is_hybrid = true;
219 } 210 }
220 211
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
index 921bce2df0b0..0feea347f680 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
@@ -221,7 +221,7 @@ void amdgpu_gart_table_vram_free(struct amdgpu_device *adev)
221 * Unbinds the requested pages from the gart page table and 221 * Unbinds the requested pages from the gart page table and
222 * replaces them with the dummy page (all asics). 222 * replaces them with the dummy page (all asics).
223 */ 223 */
224void amdgpu_gart_unbind(struct amdgpu_device *adev, unsigned offset, 224void amdgpu_gart_unbind(struct amdgpu_device *adev, uint64_t offset,
225 int pages) 225 int pages)
226{ 226{
227 unsigned t; 227 unsigned t;
@@ -268,7 +268,7 @@ void amdgpu_gart_unbind(struct amdgpu_device *adev, unsigned offset,
268 * (all asics). 268 * (all asics).
269 * Returns 0 for success, -EINVAL for failure. 269 * Returns 0 for success, -EINVAL for failure.
270 */ 270 */
271int amdgpu_gart_bind(struct amdgpu_device *adev, unsigned offset, 271int amdgpu_gart_bind(struct amdgpu_device *adev, uint64_t offset,
272 int pages, struct page **pagelist, dma_addr_t *dma_addr, 272 int pages, struct page **pagelist, dma_addr_t *dma_addr,
273 uint32_t flags) 273 uint32_t flags)
274{ 274{
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
index 4127e7ceace0..6a6c86c9c169 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
@@ -295,7 +295,7 @@ void amdgpu_ib_pool_fini(struct amdgpu_device *adev)
295int amdgpu_ib_ring_tests(struct amdgpu_device *adev) 295int amdgpu_ib_ring_tests(struct amdgpu_device *adev)
296{ 296{
297 unsigned i; 297 unsigned i;
298 int r; 298 int r, ret = 0;
299 299
300 for (i = 0; i < AMDGPU_MAX_RINGS; ++i) { 300 for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
301 struct amdgpu_ring *ring = adev->rings[i]; 301 struct amdgpu_ring *ring = adev->rings[i];
@@ -316,10 +316,11 @@ int amdgpu_ib_ring_tests(struct amdgpu_device *adev)
316 } else { 316 } else {
317 /* still not good, but we can live with it */ 317 /* still not good, but we can live with it */
318 DRM_ERROR("amdgpu: failed testing IB on ring %d (%d).\n", i, r); 318 DRM_ERROR("amdgpu: failed testing IB on ring %d (%d).\n", i, r);
319 ret = r;
319 } 320 }
320 } 321 }
321 } 322 }
322 return 0; 323 return ret;
323} 324}
324 325
325/* 326/*
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index b63969d7887c..160a094e1a93 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -273,8 +273,8 @@ static int amdgpu_move_blit(struct ttm_buffer_object *bo,
273 273
274 adev = amdgpu_get_adev(bo->bdev); 274 adev = amdgpu_get_adev(bo->bdev);
275 ring = adev->mman.buffer_funcs_ring; 275 ring = adev->mman.buffer_funcs_ring;
276 old_start = old_mem->start << PAGE_SHIFT; 276 old_start = (u64)old_mem->start << PAGE_SHIFT;
277 new_start = new_mem->start << PAGE_SHIFT; 277 new_start = (u64)new_mem->start << PAGE_SHIFT;
278 278
279 switch (old_mem->mem_type) { 279 switch (old_mem->mem_type) {
280 case TTM_PL_TT: 280 case TTM_PL_TT:
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
index 25dd58a65905..cee7bc9a2314 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
@@ -1154,7 +1154,8 @@ int amdgpu_uvd_ring_test_ib(struct amdgpu_ring *ring, long timeout)
1154 r = 0; 1154 r = 0;
1155 } 1155 }
1156 1156
1157error:
1158 fence_put(fence); 1157 fence_put(fence);
1158
1159error:
1159 return r; 1160 return r;
1160} 1161}
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
index bd5af328154f..a6a48ed9562e 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
@@ -1593,7 +1593,7 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm)
1593 r = amd_sched_entity_init(&ring->sched, &vm->entity, 1593 r = amd_sched_entity_init(&ring->sched, &vm->entity,
1594 rq, amdgpu_sched_jobs); 1594 rq, amdgpu_sched_jobs);
1595 if (r) 1595 if (r)
1596 return r; 1596 goto err;
1597 1597
1598 vm->page_directory_fence = NULL; 1598 vm->page_directory_fence = NULL;
1599 1599
@@ -1624,6 +1624,9 @@ error_free_page_directory:
1624error_free_sched_entity: 1624error_free_sched_entity:
1625 amd_sched_entity_fini(&ring->sched, &vm->entity); 1625 amd_sched_entity_fini(&ring->sched, &vm->entity);
1626 1626
1627err:
1628 drm_free_large(vm->page_tables);
1629
1627 return r; 1630 return r;
1628} 1631}
1629 1632
diff --git a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
index e6d7bf9520a0..cb952acc7133 100644
--- a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
+++ b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
@@ -52,6 +52,7 @@ static void cik_sdma_set_ring_funcs(struct amdgpu_device *adev);
52static void cik_sdma_set_irq_funcs(struct amdgpu_device *adev); 52static void cik_sdma_set_irq_funcs(struct amdgpu_device *adev);
53static void cik_sdma_set_buffer_funcs(struct amdgpu_device *adev); 53static void cik_sdma_set_buffer_funcs(struct amdgpu_device *adev);
54static void cik_sdma_set_vm_pte_funcs(struct amdgpu_device *adev); 54static void cik_sdma_set_vm_pte_funcs(struct amdgpu_device *adev);
55static int cik_sdma_soft_reset(void *handle);
55 56
56MODULE_FIRMWARE("radeon/bonaire_sdma.bin"); 57MODULE_FIRMWARE("radeon/bonaire_sdma.bin");
57MODULE_FIRMWARE("radeon/bonaire_sdma1.bin"); 58MODULE_FIRMWARE("radeon/bonaire_sdma1.bin");
@@ -1014,6 +1015,8 @@ static int cik_sdma_resume(void *handle)
1014{ 1015{
1015 struct amdgpu_device *adev = (struct amdgpu_device *)handle; 1016 struct amdgpu_device *adev = (struct amdgpu_device *)handle;
1016 1017
1018 cik_sdma_soft_reset(handle);
1019
1017 return cik_sdma_hw_init(adev); 1020 return cik_sdma_hw_init(adev);
1018} 1021}
1019 1022
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
index 32a676291e67..71116da9e782 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
@@ -2927,8 +2927,7 @@ static int gfx_v7_0_cp_compute_resume(struct amdgpu_device *adev)
2927 u64 wb_gpu_addr; 2927 u64 wb_gpu_addr;
2928 u32 *buf; 2928 u32 *buf;
2929 struct bonaire_mqd *mqd; 2929 struct bonaire_mqd *mqd;
2930 2930 struct amdgpu_ring *ring;
2931 gfx_v7_0_cp_compute_enable(adev, true);
2932 2931
2933 /* fix up chicken bits */ 2932 /* fix up chicken bits */
2934 tmp = RREG32(mmCP_CPF_DEBUG); 2933 tmp = RREG32(mmCP_CPF_DEBUG);
@@ -2963,7 +2962,7 @@ static int gfx_v7_0_cp_compute_resume(struct amdgpu_device *adev)
2963 2962
2964 /* init the queues. Just two for now. */ 2963 /* init the queues. Just two for now. */
2965 for (i = 0; i < adev->gfx.num_compute_rings; i++) { 2964 for (i = 0; i < adev->gfx.num_compute_rings; i++) {
2966 struct amdgpu_ring *ring = &adev->gfx.compute_ring[i]; 2965 ring = &adev->gfx.compute_ring[i];
2967 2966
2968 if (ring->mqd_obj == NULL) { 2967 if (ring->mqd_obj == NULL) {
2969 r = amdgpu_bo_create(adev, 2968 r = amdgpu_bo_create(adev,
@@ -3142,6 +3141,13 @@ static int gfx_v7_0_cp_compute_resume(struct amdgpu_device *adev)
3142 amdgpu_bo_unreserve(ring->mqd_obj); 3141 amdgpu_bo_unreserve(ring->mqd_obj);
3143 3142
3144 ring->ready = true; 3143 ring->ready = true;
3144 }
3145
3146 gfx_v7_0_cp_compute_enable(adev, true);
3147
3148 for (i = 0; i < adev->gfx.num_compute_rings; i++) {
3149 ring = &adev->gfx.compute_ring[i];
3150
3145 r = amdgpu_ring_test_ring(ring); 3151 r = amdgpu_ring_test_ring(ring);
3146 if (r) 3152 if (r)
3147 ring->ready = false; 3153 ring->ready = false;
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
index 9ae307505190..565dab3c7218 100644
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
@@ -710,7 +710,7 @@ static int sdma_v2_4_ring_test_ib(struct amdgpu_ring *ring, long timeout)
710 DRM_ERROR("amdgpu: IB test timed out\n"); 710 DRM_ERROR("amdgpu: IB test timed out\n");
711 r = -ETIMEDOUT; 711 r = -ETIMEDOUT;
712 goto err1; 712 goto err1;
713 } else if (r) { 713 } else if (r < 0) {
714 DRM_ERROR("amdgpu: fence wait failed (%ld).\n", r); 714 DRM_ERROR("amdgpu: fence wait failed (%ld).\n", r);
715 goto err1; 715 goto err1;
716 } 716 }
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_doorbell.c b/drivers/gpu/drm/amd/amdkfd/kfd_doorbell.c
index ad494b875311..453c5d66e5c3 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_doorbell.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_doorbell.c
@@ -186,7 +186,7 @@ u32 __iomem *kfd_get_kernel_doorbell(struct kfd_dev *kfd,
186 sizeof(u32)) + inx; 186 sizeof(u32)) + inx;
187 187
188 pr_debug("kfd: get kernel queue doorbell\n" 188 pr_debug("kfd: get kernel queue doorbell\n"
189 " doorbell offset == 0x%08d\n" 189 " doorbell offset == 0x%08X\n"
190 " kernel address == 0x%08lX\n", 190 " kernel address == 0x%08lX\n",
191 *doorbell_off, (uintptr_t)(kfd->doorbell_kernel_ptr + inx)); 191 *doorbell_off, (uintptr_t)(kfd->doorbell_kernel_ptr + inx));
192 192
diff --git a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c
index ef312bb75fda..963a24d46a93 100644
--- a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c
+++ b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c
@@ -405,7 +405,7 @@ void amd_sched_job_recovery(struct amd_gpu_scheduler *sched)
405 spin_lock(&sched->job_list_lock); 405 spin_lock(&sched->job_list_lock);
406 s_job = list_first_entry_or_null(&sched->ring_mirror_list, 406 s_job = list_first_entry_or_null(&sched->ring_mirror_list,
407 struct amd_sched_job, node); 407 struct amd_sched_job, node);
408 if (s_job) 408 if (s_job && sched->timeout != MAX_SCHEDULE_TIMEOUT)
409 schedule_delayed_work(&s_job->work_tdr, sched->timeout); 409 schedule_delayed_work(&s_job->work_tdr, sched->timeout);
410 410
411 list_for_each_entry_safe(s_job, tmp, &sched->ring_mirror_list, node) { 411 list_for_each_entry_safe(s_job, tmp, &sched->ring_mirror_list, node) {