Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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: 352e683b72e7 ("drm/amdgpu: Enable translate_further to extend UTCL2 reach")
Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com>
Acked-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Mukul Joshi <mukul.joshi@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Mukul Joshi and committed by
Alex Deucher
894c9c54 da1acbb1

+10 -2
+10 -2
drivers/gpu/drm/amd/amdgpu/mmhub_v9_4.c
··· 295 295 static void mmhub_v9_4_setup_vmid_config(struct amdgpu_device *adev, int hubid) 296 296 { 297 297 struct amdgpu_vmhub *hub = &adev->vmhub[AMDGPU_MMHUB_0]; 298 + unsigned int num_level, block_size; 298 299 uint32_t tmp; 299 300 int i; 301 + 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; 300 308 301 309 for (i = 0; i <= 14; i++) { 302 310 tmp = RREG32_SOC15_OFFSET(MMHUB, 0, mmVML2VC0_VM_CONTEXT1_CNTL, ··· 313 305 ENABLE_CONTEXT, 1); 314 306 tmp = REG_SET_FIELD(tmp, VML2VC0_VM_CONTEXT1_CNTL, 315 307 PAGE_TABLE_DEPTH, 316 - adev->vm_manager.num_level); 308 + num_level); 317 309 tmp = REG_SET_FIELD(tmp, VML2VC0_VM_CONTEXT1_CNTL, 318 310 RANGE_PROTECTION_FAULT_ENABLE_DEFAULT, 1); 319 311 tmp = REG_SET_FIELD(tmp, VML2VC0_VM_CONTEXT1_CNTL, ··· 331 323 EXECUTE_PROTECTION_FAULT_ENABLE_DEFAULT, 1); 332 324 tmp = REG_SET_FIELD(tmp, VML2VC0_VM_CONTEXT1_CNTL, 333 325 PAGE_TABLE_BLOCK_SIZE, 334 - adev->vm_manager.block_size - 9); 326 + block_size); 335 327 /* Send no-retry XNACK on fault to suppress VM fault storm. */ 336 328 tmp = REG_SET_FIELD(tmp, VML2VC0_VM_CONTEXT1_CNTL, 337 329 RETRY_PERMISSION_OR_INVALID_PAGE_FAULT,