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

Merge tag 'amd-drm-fixes-6.17-2025-08-13' of https://gitlab.freedesktop.org/agd5f/linux into drm-fixes

amd-drm-fixes-6.17-2025-08-13:

amdgpu:
- PSP fix
- VRAM reservation fix
- CSA fix
- Process kill fix

Signed-off-by: Dave Airlie <airlied@redhat.com>

From: Alex Deucher <alexander.deucher@amd.com>
Link: https://lore.kernel.org/r/20250813151905.2040816-1-alexander.deucher@amd.com

+33 -11
+3
drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
··· 1139 1139 } 1140 1140 } 1141 1141 1142 + if (!amdgpu_vm_ready(vm)) 1143 + return -EINVAL; 1144 + 1142 1145 r = amdgpu_vm_clear_freed(adev, vm, NULL); 1143 1146 if (r) 1144 1147 return r;
+2 -2
drivers/gpu/drm/amd/amdgpu/amdgpu_csa.c
··· 88 88 } 89 89 90 90 r = amdgpu_vm_bo_map(adev, *bo_va, csa_addr, 0, size, 91 - AMDGPU_PTE_READABLE | AMDGPU_PTE_WRITEABLE | 92 - AMDGPU_PTE_EXECUTABLE); 91 + AMDGPU_VM_PAGE_READABLE | AMDGPU_VM_PAGE_WRITEABLE | 92 + AMDGPU_VM_PAGE_EXECUTABLE); 93 93 94 94 if (r) { 95 95 DRM_ERROR("failed to do bo_map on static CSA, err=%d\n", r);
+16 -3
drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c
··· 1039 1039 { 1040 1040 int ret; 1041 1041 uint64_t reserv_addr, reserv_addr_ext; 1042 - uint32_t reserv_size, reserv_size_ext; 1042 + uint32_t reserv_size, reserv_size_ext, mp0_ip_ver; 1043 1043 struct amdgpu_device *adev = psp->adev; 1044 + 1045 + mp0_ip_ver = amdgpu_ip_version(adev, MP0_HWIP, 0); 1044 1046 1045 1047 if (amdgpu_sriov_vf(psp->adev)) 1046 1048 return 0; 1047 1049 1048 - if ((amdgpu_ip_version(adev, MP0_HWIP, 0) != IP_VERSION(14, 0, 2)) && 1049 - (amdgpu_ip_version(adev, MP0_HWIP, 0) != IP_VERSION(14, 0, 3))) 1050 + switch (mp0_ip_ver) { 1051 + case IP_VERSION(14, 0, 2): 1052 + if (adev->psp.sos.fw_version < 0x3b0e0d) 1053 + return 0; 1054 + break; 1055 + 1056 + case IP_VERSION(14, 0, 3): 1057 + if (adev->psp.sos.fw_version < 0x3a0e14) 1058 + return 0; 1059 + break; 1060 + 1061 + default: 1050 1062 return 0; 1063 + } 1051 1064 1052 1065 ret = psp_get_fw_reservation_info(psp, GFX_CMD_ID_FB_FW_RESERV_ADDR, &reserv_addr, &reserv_size); 1053 1066 if (ret)
+11 -4
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
··· 654 654 * Check if all VM PDs/PTs are ready for updates 655 655 * 656 656 * Returns: 657 - * True if VM is not evicting. 657 + * True if VM is not evicting and all VM entities are not stopped 658 658 */ 659 659 bool amdgpu_vm_ready(struct amdgpu_vm *vm) 660 660 { 661 - bool empty; 662 661 bool ret; 663 662 664 663 amdgpu_vm_eviction_lock(vm); ··· 665 666 amdgpu_vm_eviction_unlock(vm); 666 667 667 668 spin_lock(&vm->status_lock); 668 - empty = list_empty(&vm->evicted); 669 + ret &= list_empty(&vm->evicted); 669 670 spin_unlock(&vm->status_lock); 670 671 671 - return ret && empty; 672 + spin_lock(&vm->immediate.lock); 673 + ret &= !vm->immediate.stopped; 674 + spin_unlock(&vm->immediate.lock); 675 + 676 + spin_lock(&vm->delayed.lock); 677 + ret &= !vm->delayed.stopped; 678 + spin_unlock(&vm->delayed.lock); 679 + 680 + return ret; 672 681 } 673 682 674 683 /**
+1 -2
drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
··· 648 648 list_for_each_entry(block, &vres->blocks, link) 649 649 vis_usage += amdgpu_vram_mgr_vis_size(adev, block); 650 650 651 - amdgpu_vram_mgr_do_reserve(man); 652 - 653 651 drm_buddy_free_list(mm, &vres->blocks, vres->flags); 652 + amdgpu_vram_mgr_do_reserve(man); 654 653 mutex_unlock(&mgr->lock); 655 654 656 655 atomic64_sub(vis_usage, &mgr->vis_usage);