Skip to content

Commit e577020

Browse files
committed
Merge tag 'amd-drm-fixes-6.1-2022-11-23' of https://gitlab.freedesktop.org/agd5f/linux into drm-fixes
amd-drm-fixes-6.1-2022-11-23: amdgpu: - DCN 3.1.4 fixes - DP MST DSC deadlock fixes - HMM userptr fixes - Fix Aldebaran CU occupancy reporting - GFX11 fixes - PSP suspend/resume fix - DCE12 KASAN fix - DCN 3.2.x fixes - Rotated cursor fix - SMU 13.x fix - DELL platform suspend/resume fixes - VCN4 SR-IOV fix - Display regression fix for polled connectors Signed-off-by: Dave Airlie <[email protected]> From: Alex Deucher <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
2 parents b65a648 + ecb41b7 commit e577020

32 files changed

+440
-294
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,5 +41,6 @@ const struct kfd2kgd_calls aldebaran_kfd2kgd = {
4141
.get_atc_vmid_pasid_mapping_info =
4242
kgd_gfx_v9_get_atc_vmid_pasid_mapping_info,
4343
.set_vm_context_page_table_base = kgd_gfx_v9_set_vm_context_page_table_base,
44+
.get_cu_occupancy = kgd_gfx_v9_get_cu_occupancy,
4445
.program_trap_handler_settings = kgd_gfx_v9_program_trap_handler_settings
4546
};

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -986,6 +986,7 @@ static int init_user_pages(struct kgd_mem *mem, uint64_t user_addr,
986986
struct amdkfd_process_info *process_info = mem->process_info;
987987
struct amdgpu_bo *bo = mem->bo;
988988
struct ttm_operation_ctx ctx = { true, false };
989+
struct hmm_range *range;
989990
int ret = 0;
990991

991992
mutex_lock(&process_info->lock);
@@ -1015,7 +1016,7 @@ static int init_user_pages(struct kgd_mem *mem, uint64_t user_addr,
10151016
return 0;
10161017
}
10171018

1018-
ret = amdgpu_ttm_tt_get_user_pages(bo, bo->tbo.ttm->pages);
1019+
ret = amdgpu_ttm_tt_get_user_pages(bo, bo->tbo.ttm->pages, &range);
10191020
if (ret) {
10201021
pr_err("%s: Failed to get user pages: %d\n", __func__, ret);
10211022
goto unregister_out;
@@ -1033,7 +1034,7 @@ static int init_user_pages(struct kgd_mem *mem, uint64_t user_addr,
10331034
amdgpu_bo_unreserve(bo);
10341035

10351036
release_out:
1036-
amdgpu_ttm_tt_get_user_pages_done(bo->tbo.ttm);
1037+
amdgpu_ttm_tt_get_user_pages_done(bo->tbo.ttm, range);
10371038
unregister_out:
10381039
if (ret)
10391040
amdgpu_mn_unregister(bo);
@@ -2370,6 +2371,8 @@ static int update_invalid_user_pages(struct amdkfd_process_info *process_info,
23702371
/* Go through userptr_inval_list and update any invalid user_pages */
23712372
list_for_each_entry(mem, &process_info->userptr_inval_list,
23722373
validate_list.head) {
2374+
struct hmm_range *range;
2375+
23732376
invalid = atomic_read(&mem->invalid);
23742377
if (!invalid)
23752378
/* BO hasn't been invalidated since the last
@@ -2380,7 +2383,8 @@ static int update_invalid_user_pages(struct amdkfd_process_info *process_info,
23802383
bo = mem->bo;
23812384

23822385
/* Get updated user pages */
2383-
ret = amdgpu_ttm_tt_get_user_pages(bo, bo->tbo.ttm->pages);
2386+
ret = amdgpu_ttm_tt_get_user_pages(bo, bo->tbo.ttm->pages,
2387+
&range);
23842388
if (ret) {
23852389
pr_debug("Failed %d to get user pages\n", ret);
23862390

@@ -2399,7 +2403,7 @@ static int update_invalid_user_pages(struct amdkfd_process_info *process_info,
23992403
* FIXME: Cannot ignore the return code, must hold
24002404
* notifier_lock
24012405
*/
2402-
amdgpu_ttm_tt_get_user_pages_done(bo->tbo.ttm);
2406+
amdgpu_ttm_tt_get_user_pages_done(bo->tbo.ttm, range);
24032407
}
24042408

24052409
/* Mark the BO as valid unless it was invalidated

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,7 @@ void amdgpu_bo_list_get_list(struct amdgpu_bo_list *list,
209209
list_add_tail(&e->tv.head, &bucket[priority]);
210210

211211
e->user_pages = NULL;
212+
e->range = NULL;
212213
}
213214

214215
/* Connect the sorted buckets in the output list. */

drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
#include <drm/ttm/ttm_execbuf_util.h>
2727
#include <drm/amdgpu_drm.h>
2828

29+
struct hmm_range;
30+
2931
struct amdgpu_device;
3032
struct amdgpu_bo;
3133
struct amdgpu_bo_va;
@@ -36,6 +38,7 @@ struct amdgpu_bo_list_entry {
3638
struct amdgpu_bo_va *bo_va;
3739
uint32_t priority;
3840
struct page **user_pages;
41+
struct hmm_range *range;
3942
bool user_invalidated;
4043
};
4144

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,6 @@ static void amdgpu_connector_free_edid(struct drm_connector *connector)
328328

329329
kfree(amdgpu_connector->edid);
330330
amdgpu_connector->edid = NULL;
331-
drm_connector_update_edid_property(connector, NULL);
332331
}
333332

334333
static int amdgpu_connector_ddc_get_modes(struct drm_connector *connector)

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -913,7 +913,7 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p,
913913
goto out_free_user_pages;
914914
}
915915

916-
r = amdgpu_ttm_tt_get_user_pages(bo, e->user_pages);
916+
r = amdgpu_ttm_tt_get_user_pages(bo, e->user_pages, &e->range);
917917
if (r) {
918918
kvfree(e->user_pages);
919919
e->user_pages = NULL;
@@ -991,9 +991,10 @@ static int amdgpu_cs_parser_bos(struct amdgpu_cs_parser *p,
991991

992992
if (!e->user_pages)
993993
continue;
994-
amdgpu_ttm_tt_get_user_pages_done(bo->tbo.ttm);
994+
amdgpu_ttm_tt_get_user_pages_done(bo->tbo.ttm, e->range);
995995
kvfree(e->user_pages);
996996
e->user_pages = NULL;
997+
e->range = NULL;
997998
}
998999
mutex_unlock(&p->bo_list->bo_list_mutex);
9991000
return r;
@@ -1273,7 +1274,8 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p,
12731274
amdgpu_bo_list_for_each_userptr_entry(e, p->bo_list) {
12741275
struct amdgpu_bo *bo = ttm_to_amdgpu_bo(e->tv.bo);
12751276

1276-
r |= !amdgpu_ttm_tt_get_user_pages_done(bo->tbo.ttm);
1277+
r |= !amdgpu_ttm_tt_get_user_pages_done(bo->tbo.ttm, e->range);
1278+
e->range = NULL;
12771279
}
12781280
if (r) {
12791281
r = -EAGAIN;

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,7 @@ int amdgpu_gem_userptr_ioctl(struct drm_device *dev, void *data,
378378
struct amdgpu_device *adev = drm_to_adev(dev);
379379
struct drm_amdgpu_gem_userptr *args = data;
380380
struct drm_gem_object *gobj;
381+
struct hmm_range *range;
381382
struct amdgpu_bo *bo;
382383
uint32_t handle;
383384
int r;
@@ -413,14 +414,13 @@ int amdgpu_gem_userptr_ioctl(struct drm_device *dev, void *data,
413414
if (r)
414415
goto release_object;
415416

416-
if (args->flags & AMDGPU_GEM_USERPTR_REGISTER) {
417-
r = amdgpu_mn_register(bo, args->addr);
418-
if (r)
419-
goto release_object;
420-
}
417+
r = amdgpu_mn_register(bo, args->addr);
418+
if (r)
419+
goto release_object;
421420

422421
if (args->flags & AMDGPU_GEM_USERPTR_VALIDATE) {
423-
r = amdgpu_ttm_tt_get_user_pages(bo, bo->tbo.ttm->pages);
422+
r = amdgpu_ttm_tt_get_user_pages(bo, bo->tbo.ttm->pages,
423+
&range);
424424
if (r)
425425
goto release_object;
426426

@@ -443,7 +443,7 @@ int amdgpu_gem_userptr_ioctl(struct drm_device *dev, void *data,
443443

444444
user_pages_done:
445445
if (args->flags & AMDGPU_GEM_USERPTR_VALIDATE)
446-
amdgpu_ttm_tt_get_user_pages_done(bo->tbo.ttm);
446+
amdgpu_ttm_tt_get_user_pages_done(bo->tbo.ttm, range);
447447

448448
release_object:
449449
drm_gem_object_put(gobj);

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -479,6 +479,12 @@ int amdgpu_gmc_allocate_vm_inv_eng(struct amdgpu_device *adev)
479479
unsigned i;
480480
unsigned vmhub, inv_eng;
481481

482+
if (adev->enable_mes) {
483+
/* reserve engine 5 for firmware */
484+
for (vmhub = 0; vmhub < AMDGPU_MAX_VMHUBS; vmhub++)
485+
vm_inv_engs[vmhub] &= ~(1 << 5);
486+
}
487+
482488
for (i = 0; i < adev->num_rings; ++i) {
483489
ring = adev->rings[i];
484490
vmhub = ring->funcs->vmhub;

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,11 @@ static void amdgpu_job_free_cb(struct drm_sched_job *s_job)
169169
amdgpu_sync_free(&job->sync);
170170
amdgpu_sync_free(&job->sched_sync);
171171

172-
dma_fence_put(&job->hw_fence);
172+
/* only put the hw fence if has embedded fence */
173+
if (!job->hw_fence.ops)
174+
kfree(job);
175+
else
176+
dma_fence_put(&job->hw_fence);
173177
}
174178

175179
void amdgpu_job_set_gang_leader(struct amdgpu_job *job,

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

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ void psp_ta_free_shared_buf(struct ta_mem_context *mem_ctx)
172172
{
173173
amdgpu_bo_free_kernel(&mem_ctx->shared_bo, &mem_ctx->shared_mc_addr,
174174
&mem_ctx->shared_buf);
175+
mem_ctx->shared_bo = NULL;
175176
}
176177

177178
static void psp_free_shared_bufs(struct psp_context *psp)
@@ -182,6 +183,7 @@ static void psp_free_shared_bufs(struct psp_context *psp)
182183
/* free TMR memory buffer */
183184
pptr = amdgpu_sriov_vf(psp->adev) ? &tmr_buf : NULL;
184185
amdgpu_bo_free_kernel(&psp->tmr_bo, &psp->tmr_mc_addr, pptr);
186+
psp->tmr_bo = NULL;
185187

186188
/* free xgmi shared memory */
187189
psp_ta_free_shared_buf(&psp->xgmi_context.context.mem_context);
@@ -743,7 +745,7 @@ static int psp_load_toc(struct psp_context *psp,
743745
/* Set up Trusted Memory Region */
744746
static int psp_tmr_init(struct psp_context *psp)
745747
{
746-
int ret;
748+
int ret = 0;
747749
int tmr_size;
748750
void *tmr_buf;
749751
void **pptr;
@@ -770,10 +772,12 @@ static int psp_tmr_init(struct psp_context *psp)
770772
}
771773
}
772774

773-
pptr = amdgpu_sriov_vf(psp->adev) ? &tmr_buf : NULL;
774-
ret = amdgpu_bo_create_kernel(psp->adev, tmr_size, PSP_TMR_ALIGNMENT,
775-
AMDGPU_GEM_DOMAIN_VRAM,
776-
&psp->tmr_bo, &psp->tmr_mc_addr, pptr);
775+
if (!psp->tmr_bo) {
776+
pptr = amdgpu_sriov_vf(psp->adev) ? &tmr_buf : NULL;
777+
ret = amdgpu_bo_create_kernel(psp->adev, tmr_size, PSP_TMR_ALIGNMENT,
778+
AMDGPU_GEM_DOMAIN_VRAM,
779+
&psp->tmr_bo, &psp->tmr_mc_addr, pptr);
780+
}
777781

778782
return ret;
779783
}
@@ -2732,8 +2736,6 @@ static int psp_suspend(void *handle)
27322736
}
27332737

27342738
out:
2735-
psp_free_shared_bufs(psp);
2736-
27372739
return ret;
27382740
}
27392741

0 commit comments

Comments
 (0)