diff options
author | Emily Deng <Emily.Deng@amd.com> | 2018-08-09 03:05:31 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2018-09-26 22:09:16 -0400 |
commit | a2a8fb512e09bd3735c92421e93cd2e1baa2723d (patch) | |
tree | 07833c43705016f02c3ffc90804df6fd868ca794 /drivers/gpu/drm/amd | |
parent | c5892230d98b043b3948aec7ce60e636d19c8e50 (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.h | 9 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c | 27 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c | 12 |
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, |