瀏覽代碼

drm/amdgpu:fix ring init sequence

ring->buf_mask need be set prior to ring_clear_ring invoke
and fix ring_clear_ring as well which should use buf_mask
instead of ptr_mask

Signed-off-by: Monk Liu <Monk.Liu@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Monk Liu 8 年之前
父節點
當前提交
e09706f46e
共有 2 個文件被更改,包括 4 次插入4 次删除
  1. 3 3
      drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
  2. 1 1
      drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h

+ 3 - 3
drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c

@@ -235,6 +235,9 @@ int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring,
 	ring->ring_size = roundup_pow_of_two(max_dw * 4 *
 	ring->ring_size = roundup_pow_of_two(max_dw * 4 *
 					     amdgpu_sched_hw_submission);
 					     amdgpu_sched_hw_submission);
 
 
+	ring->buf_mask = (ring->ring_size / 4) - 1;
+	ring->ptr_mask = ring->funcs->support_64bit_ptrs ?
+		0xffffffffffffffff : ring->buf_mask;
 	/* Allocate ring buffer */
 	/* Allocate ring buffer */
 	if (ring->ring_obj == NULL) {
 	if (ring->ring_obj == NULL) {
 		r = amdgpu_bo_create_kernel(adev, ring->ring_size, PAGE_SIZE,
 		r = amdgpu_bo_create_kernel(adev, ring->ring_size, PAGE_SIZE,
@@ -248,9 +251,6 @@ int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring,
 		}
 		}
 		amdgpu_ring_clear_ring(ring);
 		amdgpu_ring_clear_ring(ring);
 	}
 	}
-	ring->buf_mask = (ring->ring_size / 4) - 1;
-	ring->ptr_mask = ring->funcs->support_64bit_ptrs ?
-		0xffffffffffffffff : ring->buf_mask;
 
 
 	ring->max_dw = max_dw;
 	ring->max_dw = max_dw;
 
 

+ 1 - 1
drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h

@@ -195,7 +195,7 @@ void amdgpu_ring_fini(struct amdgpu_ring *ring);
 static inline void amdgpu_ring_clear_ring(struct amdgpu_ring *ring)
 static inline void amdgpu_ring_clear_ring(struct amdgpu_ring *ring)
 {
 {
 	int i = 0;
 	int i = 0;
-	while (i <= ring->ptr_mask)
+	while (i <= ring->buf_mask)
 		ring->ring[i++] = ring->funcs->nop;
 		ring->ring[i++] = ring->funcs->nop;
 
 
 }
 }