aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd
diff options
context:
space:
mode:
authorEmily Deng <Emily.Deng@amd.com>2018-08-09 03:05:31 -0400
committerAlex Deucher <alexander.deucher@amd.com>2018-09-26 22:09:16 -0400
commita2a8fb512e09bd3735c92421e93cd2e1baa2723d (patch)
tree07833c43705016f02c3ffc90804df6fd868ca794 /drivers/gpu/drm/amd
parentc5892230d98b043b3948aec7ce60e636d19c8e50 (diff)
drm/amdgpu/sriov: Correct the setting about sdma doorbell offset of Vega10
Correct the format For vega10 sriov, the sdma doorbell must be fixed as follow to keep the same setting with host driver, or it will happen conflicts. Signed-off-by: Emily Deng <Emily.Deng@amd.com> Acked-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd')
-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,