drm/amdgpu/sdma: allocate CSA per sdma ring
Allocate CSA for the given sdma ring. Acked-by: Hawking Zhang <Hawking.Zhang@amd.com> Signed-off-by: Jack Xiao <Jack.Xiao@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
d8780dc71d
commit
ca1eb73207
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -97,5 +97,5 @@ struct amdgpu_buffer_funcs {
|
|||
struct amdgpu_sdma_instance *
|
||||
amdgpu_sdma_get_instance_from_ring(struct amdgpu_ring *ring);
|
||||
int amdgpu_sdma_get_index_from_ring(struct amdgpu_ring *ring, uint32_t *index);
|
||||
|
||||
uint64_t amdgpu_sdma_get_csa_mc_addr(struct amdgpu_ring *ring, unsigned vmid);
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue