aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu.h9
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c27
-rw-r--r--drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c12
3 files changed, 37 insertions, 11 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
index 01a23157f6f5..c05b39438663 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -420,6 +420,15 @@ typedef enum _AMDGPU_DOORBELL64_ASSIGNMENT
420 AMDGPU_DOORBELL64_sDMA_ENGINE1 = 0xE8, 420 AMDGPU_DOORBELL64_sDMA_ENGINE1 = 0xE8,
421 AMDGPU_DOORBELL64_sDMA_HI_PRI_ENGINE1 = 0xE9, 421 AMDGPU_DOORBELL64_sDMA_HI_PRI_ENGINE1 = 0xE9,
422 422
423 /* For vega10 sriov, the sdma doorbell must be fixed as follow
424 * to keep the same setting with host driver, or it will
425 * happen conflicts
426 */
427 AMDGPU_VEGA10_DOORBELL64_sDMA_ENGINE0 = 0xF0,
428 AMDGPU_VEGA10_DOORBELL64_sDMA_HI_PRI_ENGINE0 = 0xF1,
429 AMDGPU_VEGA10_DOORBELL64_sDMA_ENGINE1 = 0xF2,
430 AMDGPU_VEGA10_DOORBELL64_sDMA_HI_PRI_ENGINE1 = 0xF3,
431
423 /* Interrupt handler */ 432 /* Interrupt handler */
424 AMDGPU_DOORBELL64_IH = 0xF4, /* For legacy interrupt ring buffer */ 433 AMDGPU_DOORBELL64_IH = 0xF4, /* For legacy interrupt ring buffer */
425 AMDGPU_DOORBELL64_IH_RING1 = 0xF5, /* For page migration request log */ 434 AMDGPU_DOORBELL64_IH_RING1 = 0xF5, /* For page migration request log */
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
index 079e32b650d4..03536a5e1232 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c
@@ -178,14 +178,25 @@ void amdgpu_amdkfd_device_init(struct amdgpu_device *adev)
178 * process in case of 64-bit doorbells so we 178 * process in case of 64-bit doorbells so we
179 * can use each doorbell assignment twice. 179 * can use each doorbell assignment twice.
180 */ 180 */
181 gpu_resources.sdma_doorbell[0][i] = 181 if (adev->asic_type == CHIP_VEGA10) {
182 AMDGPU_DOORBELL64_sDMA_ENGINE0 + (i >> 1); 182 gpu_resources.sdma_doorbell[0][i] =
183 gpu_resources.sdma_doorbell[0][i+1] = 183 AMDGPU_VEGA10_DOORBELL64_sDMA_ENGINE0 + (i >> 1);
184 AMDGPU_DOORBELL64_sDMA_ENGINE0 + 0x200 + (i >> 1); 184 gpu_resources.sdma_doorbell[0][i+1] =
185 gpu_resources.sdma_doorbell[1][i] = 185 AMDGPU_VEGA10_DOORBELL64_sDMA_ENGINE0 + 0x200 + (i >> 1);
186 AMDGPU_DOORBELL64_sDMA_ENGINE1 + (i >> 1); 186 gpu_resources.sdma_doorbell[1][i] =
187 gpu_resources.sdma_doorbell[1][i+1] = 187 AMDGPU_VEGA10_DOORBELL64_sDMA_ENGINE1 + (i >> 1);
188 AMDGPU_DOORBELL64_sDMA_ENGINE1 + 0x200 + (i >> 1); 188 gpu_resources.sdma_doorbell[1][i+1] =
189 AMDGPU_VEGA10_DOORBELL64_sDMA_ENGINE1 + 0x200 + (i >> 1);
190 } else {
191 gpu_resources.sdma_doorbell[0][i] =
192 AMDGPU_DOORBELL64_sDMA_ENGINE0 + (i >> 1);
193 gpu_resources.sdma_doorbell[0][i+1] =
194 AMDGPU_DOORBELL64_sDMA_ENGINE0 + 0x200 + (i >> 1);
195 gpu_resources.sdma_doorbell[1][i] =
196 AMDGPU_DOORBELL64_sDMA_ENGINE1 + (i >> 1);
197 gpu_resources.sdma_doorbell[1][i+1] =
198 AMDGPU_DOORBELL64_sDMA_ENGINE1 + 0x200 + (i >> 1);
199 }
189 } 200 }
190 /* Doorbells 0x0e0-0ff and 0x2e0-2ff are reserved for 201 /* Doorbells 0x0e0-0ff and 0x2e0-2ff are reserved for
191 * SDMA, IH and VCN. So don't use them for the CP. 202 * SDMA, IH and VCN. So don't use them for the CP.
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
index 2ea1f0d8f5be..9da4a1bff5c5 100644
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c
@@ -1320,9 +1320,15 @@ static int sdma_v4_0_sw_init(void *handle)
1320 DRM_INFO("use_doorbell being set to: [%s]\n", 1320 DRM_INFO("use_doorbell being set to: [%s]\n",
1321 ring->use_doorbell?"true":"false"); 1321 ring->use_doorbell?"true":"false");
1322 1322
1323 ring->doorbell_index = (i == 0) ? 1323 if (adev->asic_type == CHIP_VEGA10)
1324 (AMDGPU_DOORBELL64_sDMA_ENGINE0 << 1) //get DWORD offset 1324 ring->doorbell_index = (i == 0) ?
1325 : (AMDGPU_DOORBELL64_sDMA_ENGINE1 << 1); // get DWORD offset 1325 (AMDGPU_VEGA10_DOORBELL64_sDMA_ENGINE0 << 1) //get DWORD offset
1326 : (AMDGPU_VEGA10_DOORBELL64_sDMA_ENGINE1 << 1); // get DWORD offset
1327 else
1328 ring->doorbell_index = (i == 0) ?
1329 (AMDGPU_DOORBELL64_sDMA_ENGINE0 << 1) //get DWORD offset
1330 : (AMDGPU_DOORBELL64_sDMA_ENGINE1 << 1); // get DWORD offset
1331
1326 1332
1327 sprintf(ring->name, "sdma%d", i); 1333 sprintf(ring->name, "sdma%d", i);
1328 r = amdgpu_ring_init(adev, ring, 1024, 1334 r = amdgpu_ring_init(adev, ring, 1024,