diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c | 27 | 
1 files changed, 27 insertions, 0 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c index 115bb0c99b0f..8ad21865c9f0 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sdma.c @@ -24,6 +24,10 @@  #include "amdgpu.h"  #include "amdgpu_sdma.h" +#define AMDGPU_CSA_SDMA_SIZE 64 +/* SDMA CSA reside in the 3rd page of CSA */ +#define AMDGPU_CSA_SDMA_OFFSET (4096 * 2) +  /*   * GPU SDMA IP block helpers function.   */ @@ -56,3 +60,26 @@ int amdgpu_sdma_get_index_from_ring(struct amdgpu_ring *ring, uint32_t *index)  	return -EINVAL;  } + +uint64_t amdgpu_sdma_get_csa_mc_addr(struct amdgpu_ring *ring, +				     unsigned vmid) +{ +	struct amdgpu_device *adev = ring->adev; +	uint64_t csa_mc_addr; +	uint32_t index = 0; +	int r; + +	if (vmid == 0 || !amdgpu_mcbp) +		return 0; + +	r = amdgpu_sdma_get_index_from_ring(ring, &index); + +	if (r || index > 31) +		csa_mc_addr = 0; +	else +		csa_mc_addr = amdgpu_csa_vaddr(adev) + +			AMDGPU_CSA_SDMA_OFFSET + +			index * AMDGPU_CSA_SDMA_SIZE; + +	return csa_mc_addr; +} | 
