diff options
Diffstat (limited to 'drivers/gpu/drm')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 38 |
1 files changed, 24 insertions, 14 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c index 21e66f86de92..3594704a6f9b 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | |||
@@ -2684,7 +2684,6 @@ static int gfx_v9_0_kiq_kcq_enable(struct amdgpu_device *adev) | |||
2684 | queue_mask |= (1ull << i); | 2684 | queue_mask |= (1ull << i); |
2685 | } | 2685 | } |
2686 | 2686 | ||
2687 | kiq_ring->ready = true; | ||
2688 | r = amdgpu_ring_alloc(kiq_ring, (7 * adev->gfx.num_compute_rings) + 8); | 2687 | r = amdgpu_ring_alloc(kiq_ring, (7 * adev->gfx.num_compute_rings) + 8); |
2689 | if (r) { | 2688 | if (r) { |
2690 | DRM_ERROR("Failed to lock KIQ (%d).\n", r); | 2689 | DRM_ERROR("Failed to lock KIQ (%d).\n", r); |
@@ -3091,26 +3090,33 @@ static int gfx_v9_0_kcq_init_queue(struct amdgpu_ring *ring) | |||
3091 | 3090 | ||
3092 | static int gfx_v9_0_kiq_resume(struct amdgpu_device *adev) | 3091 | static int gfx_v9_0_kiq_resume(struct amdgpu_device *adev) |
3093 | { | 3092 | { |
3094 | struct amdgpu_ring *ring = NULL; | 3093 | struct amdgpu_ring *ring; |
3095 | int r = 0, i; | 3094 | int r; |
3096 | |||
3097 | gfx_v9_0_cp_compute_enable(adev, true); | ||
3098 | 3095 | ||
3099 | ring = &adev->gfx.kiq.ring; | 3096 | ring = &adev->gfx.kiq.ring; |
3100 | 3097 | ||
3101 | r = amdgpu_bo_reserve(ring->mqd_obj, false); | 3098 | r = amdgpu_bo_reserve(ring->mqd_obj, false); |
3102 | if (unlikely(r != 0)) | 3099 | if (unlikely(r != 0)) |
3103 | goto done; | 3100 | return r; |
3104 | 3101 | ||
3105 | r = amdgpu_bo_kmap(ring->mqd_obj, (void **)&ring->mqd_ptr); | 3102 | r = amdgpu_bo_kmap(ring->mqd_obj, (void **)&ring->mqd_ptr); |
3106 | if (!r) { | 3103 | if (unlikely(r != 0)) |
3107 | r = gfx_v9_0_kiq_init_queue(ring); | 3104 | return r; |
3108 | amdgpu_bo_kunmap(ring->mqd_obj); | 3105 | |
3109 | ring->mqd_ptr = NULL; | 3106 | gfx_v9_0_kiq_init_queue(ring); |
3110 | } | 3107 | amdgpu_bo_kunmap(ring->mqd_obj); |
3108 | ring->mqd_ptr = NULL; | ||
3111 | amdgpu_bo_unreserve(ring->mqd_obj); | 3109 | amdgpu_bo_unreserve(ring->mqd_obj); |
3112 | if (r) | 3110 | ring->ready = true; |
3113 | goto done; | 3111 | return 0; |
3112 | } | ||
3113 | |||
3114 | static int gfx_v9_0_kcq_resume(struct amdgpu_device *adev) | ||
3115 | { | ||
3116 | struct amdgpu_ring *ring = NULL; | ||
3117 | int r = 0, i; | ||
3118 | |||
3119 | gfx_v9_0_cp_compute_enable(adev, true); | ||
3114 | 3120 | ||
3115 | for (i = 0; i < adev->gfx.num_compute_rings; i++) { | 3121 | for (i = 0; i < adev->gfx.num_compute_rings; i++) { |
3116 | ring = &adev->gfx.compute_ring[i]; | 3122 | ring = &adev->gfx.compute_ring[i]; |
@@ -3153,11 +3159,15 @@ static int gfx_v9_0_cp_resume(struct amdgpu_device *adev) | |||
3153 | return r; | 3159 | return r; |
3154 | } | 3160 | } |
3155 | 3161 | ||
3162 | r = gfx_v9_0_kiq_resume(adev); | ||
3163 | if (r) | ||
3164 | return r; | ||
3165 | |||
3156 | r = gfx_v9_0_cp_gfx_resume(adev); | 3166 | r = gfx_v9_0_cp_gfx_resume(adev); |
3157 | if (r) | 3167 | if (r) |
3158 | return r; | 3168 | return r; |
3159 | 3169 | ||
3160 | r = gfx_v9_0_kiq_resume(adev); | 3170 | r = gfx_v9_0_kcq_resume(adev); |
3161 | if (r) | 3171 | if (r) |
3162 | return r; | 3172 | return r; |
3163 | 3173 | ||