aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
index 61fcf264c247..8a081e162d13 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
@@ -22,6 +22,7 @@
22 */ 22 */
23 23
24#include "amdgpu.h" 24#include "amdgpu.h"
25#define MAX_KIQ_REG_WAIT 100000
25 26
26int amdgpu_allocate_static_csa(struct amdgpu_device *adev) 27int amdgpu_allocate_static_csa(struct amdgpu_device *adev)
27{ 28{
@@ -128,10 +129,12 @@ uint32_t amdgpu_virt_kiq_rreg(struct amdgpu_device *adev, uint32_t reg)
128 amdgpu_ring_commit(ring); 129 amdgpu_ring_commit(ring);
129 mutex_unlock(&kiq->ring_mutex); 130 mutex_unlock(&kiq->ring_mutex);
130 131
131 r = dma_fence_wait(f, false); 132 r = dma_fence_wait_timeout(f, false, msecs_to_jiffies(MAX_KIQ_REG_WAIT));
132 if (r)
133 DRM_ERROR("wait for kiq fence error: %ld.\n", r);
134 dma_fence_put(f); 133 dma_fence_put(f);
134 if (r < 1) {
135 DRM_ERROR("wait for kiq fence error: %ld.\n", r);
136 return ~0;
137 }
135 138
136 val = adev->wb.wb[adev->virt.reg_val_offs]; 139 val = adev->wb.wb[adev->virt.reg_val_offs];
137 140
@@ -154,8 +157,8 @@ void amdgpu_virt_kiq_wreg(struct amdgpu_device *adev, uint32_t reg, uint32_t v)
154 amdgpu_ring_commit(ring); 157 amdgpu_ring_commit(ring);
155 mutex_unlock(&kiq->ring_mutex); 158 mutex_unlock(&kiq->ring_mutex);
156 159
157 r = dma_fence_wait(f, false); 160 r = dma_fence_wait_timeout(f, false, msecs_to_jiffies(MAX_KIQ_REG_WAIT));
158 if (r) 161 if (r < 1)
159 DRM_ERROR("wait for kiq fence error: %ld.\n", r); 162 DRM_ERROR("wait for kiq fence error: %ld.\n", r);
160 dma_fence_put(f); 163 dma_fence_put(f);
161} 164}