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.2-2023-01-11' of https://gitlab.freedesktop.org/agd5f/linux into drm-fixes

amd-drm-fixes-6.2-2023-01-11:

amdgpu:
- SMU13 fan speed fix
- SMU13 fix power cap handling
- SMU13 BACO fix
- Fix a possible segfault in bo validation error case
- Delay removal of firmware framebuffer
- Fix error when unloading

amdkfd:
- SVM fix when clearing vram
- GC11 fix for multi-GPU

Signed-off-by: Dave Airlie <airlied@redhat.com>
From: Alex Deucher <alexander.deucher@amd.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230112033004.8184-1-alexander.deucher@amd.com

+31 -13
+1 -1
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
··· 2099 2099 } 2100 2100 2101 2101 amdgpu_amdkfd_remove_eviction_fence( 2102 - bo, bo->kfd_bo->process_info->eviction_fence); 2102 + bo, bo->vm_bo->vm->process_info->eviction_fence); 2103 2103 2104 2104 amdgpu_bo_unreserve(bo); 2105 2105
+8
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
··· 36 36 #include <generated/utsrelease.h> 37 37 #include <linux/pci-p2pdma.h> 38 38 39 + #include <drm/drm_aperture.h> 39 40 #include <drm/drm_atomic_helper.h> 40 41 #include <drm/drm_fb_helper.h> 41 42 #include <drm/drm_probe_helper.h> ··· 90 89 #define AMDGPU_RESUME_MS 2000 91 90 #define AMDGPU_MAX_RETRY_LIMIT 2 92 91 #define AMDGPU_RETRY_SRIOV_RESET(r) ((r) == -EBUSY || (r) == -ETIMEDOUT || (r) == -EINVAL) 92 + 93 + static const struct drm_driver amdgpu_kms_driver; 93 94 94 95 const char *amdgpu_asic_name[] = { 95 96 "TAHITI", ··· 3687 3684 3688 3685 /* early init functions */ 3689 3686 r = amdgpu_device_ip_early_init(adev); 3687 + if (r) 3688 + return r; 3689 + 3690 + /* Get rid of things like offb */ 3691 + r = drm_aperture_remove_conflicting_pci_framebuffers(adev->pdev, &amdgpu_kms_driver); 3690 3692 if (r) 3691 3693 return r; 3692 3694
-6
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
··· 23 23 */ 24 24 25 25 #include <drm/amdgpu_drm.h> 26 - #include <drm/drm_aperture.h> 27 26 #include <drm/drm_drv.h> 28 27 #include <drm/drm_fbdev_generic.h> 29 28 #include <drm/drm_gem.h> ··· 2120 2121 } 2121 2122 } 2122 2123 #endif 2123 - 2124 - /* Get rid of things like offb */ 2125 - ret = drm_aperture_remove_conflicting_pci_framebuffers(pdev, &amdgpu_kms_driver); 2126 - if (ret) 2127 - return ret; 2128 2124 2129 2125 adev = devm_drm_dev_alloc(&pdev->dev, &amdgpu_kms_driver, typeof(*adev), ddev); 2130 2126 if (IS_ERR(adev))
+3 -2
drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
··· 470 470 return true; 471 471 472 472 fail: 473 - DRM_DEBUG("BO size %lu > total memory in domain: %llu\n", size, 474 - man->size); 473 + if (man) 474 + DRM_DEBUG("BO size %lu > total memory in domain: %llu\n", size, 475 + man->size); 475 476 return false; 476 477 } 477 478
+1 -1
drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
··· 882 882 kfree(rsv); 883 883 884 884 list_for_each_entry_safe(rsv, temp, &mgr->reserved_pages, blocks) { 885 - drm_buddy_free_list(&mgr->mm, &rsv->blocks); 885 + drm_buddy_free_list(&mgr->mm, &rsv->allocated); 886 886 kfree(rsv); 887 887 } 888 888 drm_buddy_fini(&mgr->mm);
+1 -1
drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
··· 200 200 queue_input.wptr_addr = (uint64_t)q->properties.write_ptr; 201 201 202 202 if (q->wptr_bo) { 203 - wptr_addr_off = (uint64_t)q->properties.write_ptr - (uint64_t)q->wptr_bo->kfd_bo->va; 203 + wptr_addr_off = (uint64_t)q->properties.write_ptr & (PAGE_SIZE - 1); 204 204 queue_input.wptr_mc_addr = ((uint64_t)q->wptr_bo->tbo.resource->start << PAGE_SHIFT) + wptr_addr_off; 205 205 } 206 206
+9
drivers/gpu/drm/amd/amdkfd/kfd_svm.c
··· 570 570 goto reserve_bo_failed; 571 571 } 572 572 573 + if (clear) { 574 + r = amdgpu_bo_sync_wait(bo, AMDGPU_FENCE_OWNER_KFD, false); 575 + if (r) { 576 + pr_debug("failed %d to sync bo\n", r); 577 + amdgpu_bo_unreserve(bo); 578 + goto reserve_bo_failed; 579 + } 580 + } 581 + 573 582 r = dma_resv_reserve_fences(bo->tbo.base.resv, 1); 574 583 if (r) { 575 584 pr_debug("failed %d to reserve bo\n", r);
+6 -2
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c
··· 1261 1261 uint32_t speed) 1262 1262 { 1263 1263 struct amdgpu_device *adev = smu->adev; 1264 - uint32_t tach_period, crystal_clock_freq; 1264 + uint32_t crystal_clock_freq = 2500; 1265 + uint32_t tach_period; 1265 1266 int ret; 1266 1267 1267 1268 if (!speed) ··· 1272 1271 if (ret) 1273 1272 return ret; 1274 1273 1275 - crystal_clock_freq = amdgpu_asic_get_xclk(adev); 1276 1274 tach_period = 60 * crystal_clock_freq * 10000 / (8 * speed); 1277 1275 WREG32_SOC15(THM, 0, regCG_TACH_CTRL, 1278 1276 REG_SET_FIELD(RREG32_SOC15(THM, 0, regCG_TACH_CTRL), ··· 2297 2297 if (amdgpu_sriov_vf(smu->adev) || 2298 2298 !smu_baco->platform_support) 2299 2299 return false; 2300 + 2301 + /* return true if ASIC is in BACO state already */ 2302 + if (smu_v13_0_baco_get_state(smu) == SMU_BACO_STATE_ENTER) 2303 + return true; 2300 2304 2301 2305 if (smu_cmn_feature_is_supported(smu, SMU_FEATURE_BACO_BIT) && 2302 2306 !smu_cmn_feature_is_enabled(smu, SMU_FEATURE_BACO_BIT))
+1
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c
··· 213 213 FEA_MAP(SOC_PCC), 214 214 [SMU_FEATURE_DPM_VCLK_BIT] = {1, FEATURE_MM_DPM_BIT}, 215 215 [SMU_FEATURE_DPM_DCLK_BIT] = {1, FEATURE_MM_DPM_BIT}, 216 + [SMU_FEATURE_PPT_BIT] = {1, FEATURE_THROTTLERS_BIT}, 216 217 }; 217 218 218 219 static struct cmn2asic_mapping smu_v13_0_0_table_map[SMU_TABLE_COUNT] = {
+1
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c
··· 192 192 FEA_MAP(SOC_PCC), 193 193 [SMU_FEATURE_DPM_VCLK_BIT] = {1, FEATURE_MM_DPM_BIT}, 194 194 [SMU_FEATURE_DPM_DCLK_BIT] = {1, FEATURE_MM_DPM_BIT}, 195 + [SMU_FEATURE_PPT_BIT] = {1, FEATURE_THROTTLERS_BIT}, 195 196 }; 196 197 197 198 static struct cmn2asic_mapping smu_v13_0_7_table_map[SMU_TABLE_COUNT] = {