diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu')
-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, |