Skip to content

Commit 894c9c5

Browse files
mukjoshialexdeucher
authored andcommitted
drm/amdgpu: Fix page table setup on Arcturus
When translate_further is enabled, page table depth needs to be updated. This was missing on Arcturus MMHUB init. This was causing address translations to fail for SDMA user-mode queues. Fixes: 352e683 ("drm/amdgpu: Enable translate_further to extend UTCL2 reach") Reviewed-by: Felix Kuehling <[email protected]> Acked-by: Christian König <[email protected]> Signed-off-by: Mukul Joshi <[email protected]> Signed-off-by: Alex Deucher <[email protected]>
1 parent da1acbb commit 894c9c5

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

drivers/gpu/drm/amd/amdgpu/mmhub_v9_4.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -295,17 +295,25 @@ static void mmhub_v9_4_disable_identity_aperture(struct amdgpu_device *adev,
295295
static void mmhub_v9_4_setup_vmid_config(struct amdgpu_device *adev, int hubid)
296296
{
297297
struct amdgpu_vmhub *hub = &adev->vmhub[AMDGPU_MMHUB_0];
298+
unsigned int num_level, block_size;
298299
uint32_t tmp;
299300
int i;
300301

302+
num_level = adev->vm_manager.num_level;
303+
block_size = adev->vm_manager.block_size;
304+
if (adev->gmc.translate_further)
305+
num_level -= 1;
306+
else
307+
block_size -= 9;
308+
301309
for (i = 0; i <= 14; i++) {
302310
tmp = RREG32_SOC15_OFFSET(MMHUB, 0, mmVML2VC0_VM_CONTEXT1_CNTL,
303311
hubid * MMHUB_INSTANCE_REGISTER_OFFSET + i);
304312
tmp = REG_SET_FIELD(tmp, VML2VC0_VM_CONTEXT1_CNTL,
305313
ENABLE_CONTEXT, 1);
306314
tmp = REG_SET_FIELD(tmp, VML2VC0_VM_CONTEXT1_CNTL,
307315
PAGE_TABLE_DEPTH,
308-
adev->vm_manager.num_level);
316+
num_level);
309317
tmp = REG_SET_FIELD(tmp, VML2VC0_VM_CONTEXT1_CNTL,
310318
RANGE_PROTECTION_FAULT_ENABLE_DEFAULT, 1);
311319
tmp = REG_SET_FIELD(tmp, VML2VC0_VM_CONTEXT1_CNTL,
@@ -323,7 +331,7 @@ static void mmhub_v9_4_setup_vmid_config(struct amdgpu_device *adev, int hubid)
323331
EXECUTE_PROTECTION_FAULT_ENABLE_DEFAULT, 1);
324332
tmp = REG_SET_FIELD(tmp, VML2VC0_VM_CONTEXT1_CNTL,
325333
PAGE_TABLE_BLOCK_SIZE,
326-
adev->vm_manager.block_size - 9);
334+
block_size);
327335
/* Send no-retry XNACK on fault to suppress VM fault storm. */
328336
tmp = REG_SET_FIELD(tmp, VML2VC0_VM_CONTEXT1_CNTL,
329337
RETRY_PERMISSION_OR_INVALID_PAGE_FAULT,

0 commit comments

Comments
 (0)