diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c | 5 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/cik_sdma.c | 3 | ||||
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | 12 | 
3 files changed, 15 insertions, 5 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c index a31d7ef3032c..ec1282af2479 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c @@ -280,7 +280,7 @@ void amdgpu_ib_pool_fini(struct amdgpu_device *adev)  int amdgpu_ib_ring_tests(struct amdgpu_device *adev)  {  	unsigned i; -	int r; +	int r, ret = 0;  	for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {  		struct amdgpu_ring *ring = adev->rings[i]; @@ -301,10 +301,11 @@ int amdgpu_ib_ring_tests(struct amdgpu_device *adev)  			} else {  				/* still not good, but we can live with it */  				DRM_ERROR("amdgpu: failed testing IB on ring %d (%d).\n", i, r); +				ret = r;  			}  		}  	} -	return 0; +	return ret;  }  /* diff --git a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c index ee6466912497..77fdd9911c3c 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);  static void cik_sdma_set_irq_funcs(struct amdgpu_device *adev);  static void cik_sdma_set_buffer_funcs(struct amdgpu_device *adev);  static void cik_sdma_set_vm_pte_funcs(struct amdgpu_device *adev); +static int cik_sdma_soft_reset(void *handle);  MODULE_FIRMWARE("radeon/bonaire_sdma.bin");  MODULE_FIRMWARE("radeon/bonaire_sdma1.bin"); @@ -1037,6 +1038,8 @@ static int cik_sdma_resume(void *handle)  {  	struct amdgpu_device *adev = (struct amdgpu_device *)handle; +	cik_sdma_soft_reset(handle); +  	return cik_sdma_hw_init(adev);  } diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c index d869d058ef24..425413fcaf02 100644 --- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c +++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c @@ -2755,8 +2755,7 @@ static int gfx_v7_0_cp_compute_resume(struct amdgpu_device *adev)  	u64 wb_gpu_addr;  	u32 *buf;  	struct bonaire_mqd *mqd; - -	gfx_v7_0_cp_compute_enable(adev, true); +	struct amdgpu_ring *ring;  	/* fix up chicken bits */  	tmp = RREG32(mmCP_CPF_DEBUG); @@ -2791,7 +2790,7 @@ static int gfx_v7_0_cp_compute_resume(struct amdgpu_device *adev)  	/* init the queues.  Just two for now. */  	for (i = 0; i < adev->gfx.num_compute_rings; i++) { -		struct amdgpu_ring *ring = &adev->gfx.compute_ring[i]; +		ring = &adev->gfx.compute_ring[i];  		if (ring->mqd_obj == NULL) {  			r = amdgpu_bo_create(adev, @@ -2970,6 +2969,13 @@ static int gfx_v7_0_cp_compute_resume(struct amdgpu_device *adev)  		amdgpu_bo_unreserve(ring->mqd_obj);  		ring->ready = true; +	} + +	gfx_v7_0_cp_compute_enable(adev, true); + +	for (i = 0; i < adev->gfx.num_compute_rings; i++) { +		ring = &adev->gfx.compute_ring[i]; +  		r = amdgpu_ring_test_ring(ring);  		if (r)  			ring->ready = false; | 
