diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c | 26 | 
1 files changed, 24 insertions, 2 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c index 82452606ae6c..c770cb201e64 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c @@ -509,6 +509,16 @@ int amdgpu_gfx_disable_kcq(struct amdgpu_device *adev, int xcc_id)  	int i, r = 0;  	int j; +	if (adev->enable_mes) { +		for (i = 0; i < adev->gfx.num_compute_rings; i++) { +			j = i + xcc_id * adev->gfx.num_compute_rings; +			amdgpu_mes_unmap_legacy_queue(adev, +						   &adev->gfx.compute_ring[j], +						   RESET_QUEUES, 0, 0); +		} +		return 0; +	} +  	if (!kiq->pmf || !kiq->pmf->kiq_unmap_queues)  		return -EINVAL; @@ -551,6 +561,18 @@ int amdgpu_gfx_disable_kgq(struct amdgpu_device *adev, int xcc_id)  	int i, r = 0;  	int j; +	if (adev->enable_mes) { +		if (amdgpu_gfx_is_master_xcc(adev, xcc_id)) { +			for (i = 0; i < adev->gfx.num_gfx_rings; i++) { +				j = i + xcc_id * adev->gfx.num_gfx_rings; +				amdgpu_mes_unmap_legacy_queue(adev, +						      &adev->gfx.gfx_ring[j], +						      PREEMPT_QUEUES, 0, 0); +			} +		} +		return 0; +	} +  	if (!kiq->pmf || !kiq->pmf->kiq_unmap_queues)  		return -EINVAL; @@ -995,7 +1017,7 @@ uint32_t amdgpu_kiq_rreg(struct amdgpu_device *adev, uint32_t reg, uint32_t xcc_  	if (amdgpu_device_skip_hw_access(adev))  		return 0; -	if (adev->mes.ring.sched.ready) +	if (adev->mes.ring[0].sched.ready)  		return amdgpu_mes_rreg(adev, reg);  	BUG_ON(!ring->funcs->emit_rreg); @@ -1065,7 +1087,7 @@ void amdgpu_kiq_wreg(struct amdgpu_device *adev, uint32_t reg, uint32_t v, uint3  	if (amdgpu_device_skip_hw_access(adev))  		return; -	if (adev->mes.ring.sched.ready) { +	if (adev->mes.ring[0].sched.ready) {  		amdgpu_mes_wreg(adev, reg, v);  		return;  	}  | 
