summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c
diff options
context:
space:
mode:
authorLe Ma <le.ma@amd.com>2022-03-01 19:42:29 +0800
committerAlex Deucher <alexander.deucher@amd.com>2023-06-09 09:43:41 -0400
commit2a47a2d90e5cd96c24503061c8920a1e6ee248a0 (patch)
tree9e0a241e27989e4de1cdbc7e44793312257707d0 /drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c
parentf786b1d4ec778a5fc23911f06a0e38c9f4953b0c (diff)
downloadlinux-stable-2a47a2d90e5cd96c24503061c8920a1e6ee248a0.tar.gz
linux-stable-2a47a2d90e5cd96c24503061c8920a1e6ee248a0.tar.bz2
linux-stable-2a47a2d90e5cd96c24503061c8920a1e6ee248a0.zip
drm/amdgpu: assign the doorbell index for sdma on non-AID0
Allocate new sdma doorbell index for the instances only on AID1 for now. Todo: there's limitation that SDMA doorbell index on SDMA 4.4.2 needs to be less than 0x1FF, so the tail part in _AMDGPU_VEGA20_DOORBELL_ASSIGNMENT is not enough to store sdma doorbell range on maximum 4 AIDs if doorbell_range is 20. So it looks better to create a new doorbell index assignment table for 4.4.2. v2: change "(x << 1) + 2" to "(x + 1) << 1" for readability. Signed-off-by: Le Ma <le.ma@amd.com> Acked-by: Felix Kuehling <Felix.Kuehling@amd.com> Reviewed-by: Lijo Lazar <lijo.lazar@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c b/drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c
index 7deadea03caa..6935a24d1e89 100644
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_4_2.c
@@ -1310,7 +1310,14 @@ static int sdma_v4_4_2_sw_init(void *handle)
ring->use_doorbell?"true":"false");
/* doorbell size is 2 dwords, get DWORD offset */
- ring->doorbell_index = adev->doorbell_index.sdma_engine[i] << 1;
+ if (aid_id > 0)
+ ring->doorbell_index =
+ (adev->doorbell_index.aid1_sdma_start << 1)
+ + adev->doorbell_index.sdma_doorbell_range
+ * (i - adev->sdma.num_inst_per_aid);
+ else
+ ring->doorbell_index =
+ adev->doorbell_index.sdma_engine[i] << 1;
ring->vm_hub = AMDGPU_MMHUB0(aid_id);
sprintf(ring->name, "sdma%d.%d", aid_id,
@@ -1329,7 +1336,14 @@ static int sdma_v4_4_2_sw_init(void *handle)
/* doorbell index of page queue is assigned right after
* gfx queue on the same instance
*/
- ring->doorbell_index = (adev->doorbell_index.sdma_engine[i] + 1) << 1;
+ if (aid_id > 0)
+ ring->doorbell_index =
+ ((adev->doorbell_index.aid1_sdma_start + 1) << 1)
+ + adev->doorbell_index.sdma_doorbell_range
+ * (i - adev->sdma.num_inst_per_aid);
+ else
+ ring->doorbell_index =
+ (adev->doorbell_index.sdma_engine[i] + 1) << 1;
ring->vm_hub = AMDGPU_MMHUB0(aid_id);
sprintf(ring->name, "page%d.%d", aid_id,