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

drm/amdgpu: properly enable VM fault interrupts

This fixes not printing VM faults.

Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Christian König and committed by
Alex Deucher
140b519f 5134e999

+18 -15
+9 -7
drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
··· 523 523 tmp = RREG32(mmVM_CONTEXT1_CNTL); 524 524 tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, ENABLE_CONTEXT, 1); 525 525 tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, PAGE_TABLE_DEPTH, 1); 526 - tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, RANGE_PROTECTION_FAULT_ENABLE_INTERRUPT, 1); 527 526 tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, RANGE_PROTECTION_FAULT_ENABLE_DEFAULT, 1); 528 - tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, DUMMY_PAGE_PROTECTION_FAULT_ENABLE_INTERRUPT, 1); 529 527 tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, DUMMY_PAGE_PROTECTION_FAULT_ENABLE_DEFAULT, 1); 530 - tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, PDE0_PROTECTION_FAULT_ENABLE_INTERRUPT, 1); 531 528 tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, PDE0_PROTECTION_FAULT_ENABLE_DEFAULT, 1); 532 - tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, VALID_PROTECTION_FAULT_ENABLE_INTERRUPT, 1); 533 529 tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, VALID_PROTECTION_FAULT_ENABLE_DEFAULT, 1); 534 - tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, READ_PROTECTION_FAULT_ENABLE_INTERRUPT, 1); 535 530 tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, READ_PROTECTION_FAULT_ENABLE_DEFAULT, 1); 536 - tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, WRITE_PROTECTION_FAULT_ENABLE_INTERRUPT, 1); 537 531 tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, WRITE_PROTECTION_FAULT_ENABLE_DEFAULT, 1); 538 532 tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, PAGE_TABLE_BLOCK_SIZE, 539 533 amdgpu_vm_block_size - 9); ··· 846 852 return 0; 847 853 } 848 854 855 + static int gmc_v7_0_late_init(void *handle) 856 + { 857 + struct amdgpu_device *adev = (struct amdgpu_device *)handle; 858 + 859 + return amdgpu_irq_get(adev, &adev->mc.vm_fault, 0); 860 + } 861 + 849 862 static int gmc_v7_0_sw_init(void *handle) 850 863 { 851 864 int r; ··· 977 976 { 978 977 struct amdgpu_device *adev = (struct amdgpu_device *)handle; 979 978 979 + amdgpu_irq_put(adev, &adev->mc.vm_fault, 0); 980 980 gmc_v7_0_gart_disable(adev); 981 981 982 982 return 0; ··· 1303 1301 1304 1302 const struct amd_ip_funcs gmc_v7_0_ip_funcs = { 1305 1303 .early_init = gmc_v7_0_early_init, 1306 - .late_init = NULL, 1304 + .late_init = gmc_v7_0_late_init, 1307 1305 .sw_init = gmc_v7_0_sw_init, 1308 1306 .sw_fini = gmc_v7_0_sw_fini, 1309 1307 .hw_init = gmc_v7_0_hw_init,
+9 -8
drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
··· 653 653 tmp = RREG32(mmVM_CONTEXT1_CNTL); 654 654 tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, ENABLE_CONTEXT, 1); 655 655 tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, PAGE_TABLE_DEPTH, 1); 656 - tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, RANGE_PROTECTION_FAULT_ENABLE_INTERRUPT, 1); 657 656 tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, RANGE_PROTECTION_FAULT_ENABLE_DEFAULT, 1); 658 - tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, DUMMY_PAGE_PROTECTION_FAULT_ENABLE_INTERRUPT, 1); 659 657 tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, DUMMY_PAGE_PROTECTION_FAULT_ENABLE_DEFAULT, 1); 660 - tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, PDE0_PROTECTION_FAULT_ENABLE_INTERRUPT, 1); 661 658 tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, PDE0_PROTECTION_FAULT_ENABLE_DEFAULT, 1); 662 - tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, VALID_PROTECTION_FAULT_ENABLE_INTERRUPT, 1); 663 659 tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, VALID_PROTECTION_FAULT_ENABLE_DEFAULT, 1); 664 - tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, READ_PROTECTION_FAULT_ENABLE_INTERRUPT, 1); 665 660 tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, READ_PROTECTION_FAULT_ENABLE_DEFAULT, 1); 666 - tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, WRITE_PROTECTION_FAULT_ENABLE_INTERRUPT, 1); 667 661 tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, WRITE_PROTECTION_FAULT_ENABLE_DEFAULT, 1); 668 - tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, EXECUTE_PROTECTION_FAULT_ENABLE_INTERRUPT, 1); 669 662 tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, EXECUTE_PROTECTION_FAULT_ENABLE_DEFAULT, 1); 670 663 tmp = REG_SET_FIELD(tmp, VM_CONTEXT1_CNTL, PAGE_TABLE_BLOCK_SIZE, 671 664 amdgpu_vm_block_size - 9); ··· 845 852 return 0; 846 853 } 847 854 855 + static int gmc_v8_0_late_init(void *handle) 856 + { 857 + struct amdgpu_device *adev = (struct amdgpu_device *)handle; 858 + 859 + return amdgpu_irq_get(adev, &adev->mc.vm_fault, 0); 860 + } 861 + 848 862 static int gmc_v8_0_sw_init(void *handle) 849 863 { 850 864 int r; ··· 978 978 { 979 979 struct amdgpu_device *adev = (struct amdgpu_device *)handle; 980 980 981 + amdgpu_irq_put(adev, &adev->mc.vm_fault, 0); 981 982 gmc_v8_0_gart_disable(adev); 982 983 983 984 return 0; ··· 1289 1288 1290 1289 const struct amd_ip_funcs gmc_v8_0_ip_funcs = { 1291 1290 .early_init = gmc_v8_0_early_init, 1292 - .late_init = NULL, 1291 + .late_init = gmc_v8_0_late_init, 1293 1292 .sw_init = gmc_v8_0_sw_init, 1294 1293 .sw_fini = gmc_v8_0_sw_fini, 1295 1294 .hw_init = gmc_v8_0_hw_init,