diff options
| author | Christian König <christian.koenig@amd.com> | 2020-02-21 15:10:31 +0100 | 
|---|---|---|
| committer | Alex Deucher <alexander.deucher@amd.com> | 2020-04-01 14:44:45 -0400 | 
| commit | 1675c3a24d075d484377003789245f48c2114a0b (patch) | |
| tree | 5215d781fb0aa52be7c582a83ca25a2a4cd4da2a /drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | |
| parent | 6b6706cdaca344a9279fe124bf87da040f5711fb (diff) | |
drm/amdgpu: stop disable the scheduler during HW fini
When we stop the HW for example for GPU reset we should not stop the
front-end scheduler. Otherwise we run into intermediate failures during
command submission.
The scheduler should only be stopped in very few cases:
1. We can't get the hardware working in ring or IB test after a GPU reset.
2. The KIQ scheduler is not used in the front-end and should be disabled during GPU reset.
3. In amdgpu_ring_fini() when the driver unloads.
Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Acked-by: Nirmoy Das <nirmoy.das@amd.com>
Test-by: Dennis Li <dennis.li@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | 25 | 
1 files changed, 9 insertions, 16 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c index a06239fdd79b..3b24fa17ca38 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c @@ -2432,15 +2432,12 @@ err1:   */  static void gfx_v7_0_cp_gfx_enable(struct amdgpu_device *adev, bool enable)  { -	int i; - -	if (enable) { +	if (enable)  		WREG32(mmCP_ME_CNTL, 0); -	} else { -		WREG32(mmCP_ME_CNTL, (CP_ME_CNTL__ME_HALT_MASK | CP_ME_CNTL__PFP_HALT_MASK | CP_ME_CNTL__CE_HALT_MASK)); -		for (i = 0; i < adev->gfx.num_gfx_rings; i++) -			adev->gfx.gfx_ring[i].sched.ready = false; -	} +	else +		WREG32(mmCP_ME_CNTL, (CP_ME_CNTL__ME_HALT_MASK | +				      CP_ME_CNTL__PFP_HALT_MASK | +				      CP_ME_CNTL__CE_HALT_MASK));  	udelay(50);  } @@ -2701,15 +2698,11 @@ static void gfx_v7_0_ring_set_wptr_compute(struct amdgpu_ring *ring)   */  static void gfx_v7_0_cp_compute_enable(struct amdgpu_device *adev, bool enable)  { -	int i; - -	if (enable) { +	if (enable)  		WREG32(mmCP_MEC_CNTL, 0); -	} else { -		WREG32(mmCP_MEC_CNTL, (CP_MEC_CNTL__MEC_ME1_HALT_MASK | CP_MEC_CNTL__MEC_ME2_HALT_MASK)); -		for (i = 0; i < adev->gfx.num_compute_rings; i++) -			adev->gfx.compute_ring[i].sched.ready = false; -	} +	else +		WREG32(mmCP_MEC_CNTL, (CP_MEC_CNTL__MEC_ME1_HALT_MASK | +				       CP_MEC_CNTL__MEC_ME2_HALT_MASK));  	udelay(50);  } | 
