Skip to content

Commit 5f58da2

Browse files
committed
Merge tag 'drm-fixes-2021-12-03-1' of git://anongit.freedesktop.org/drm/drm
Pull drm fixes from Dave Airlie: "Bit of an uptick in patch count this week, though it's all relatively small overall. I suspect msm has been queuing up a few fixes to skew it here. Otherwise amdgpu has a scattered bunch of small fixes, and then some vc4, i915. virtio-gpu changes an rc1 introduced uAPI mistake, and makes it operate more like other drivers. This should be fine as no userspace relies on the behaviour yet. Summary: dma-buf: - memory leak fix msm: - kasan found memory overwrite - mmap flags - fencing error bug - ioctl NULL ptr - uninit var - devfreqless devices fix - dsi lanes fix - dp: avoid unpowered aux xfers amdgpu: - IP discovery based enumeration fixes - vkms fixes - DSC fixes for DP MST - Audio fix for hotplug with tiled displays - Misc display fixes - DP tunneling fix - DP fix - Aldebaran fix amdkfd: - Locking fix - Static checker fix - Fix double free i915: - backlight regression - Intel HDR backlight detection fix - revert TGL workaround that caused hangs virtio-gpu: - switch back to drm_poll vc4: - memory leak - error check fix - HVS modesetting fixes" * tag 'drm-fixes-2021-12-03-1' of git://anongit.freedesktop.org/drm/drm: (41 commits) Revert "drm/i915: Implement Wa_1508744258" drm/amdkfd: process_info lock not needed for svm drm/amdgpu: adjust the kfd reset sequence in reset sriov function drm/amd/display: add connector type check for CRC source set drm/amdkfd: fix double free mem structure drm/amdkfd: set "r = 0" explicitly before goto drm/amd/display: Add work around for tunneled MST. drm/amd/display: Fix for the no Audio bug with Tiled Displays drm/amd/display: Clear DPCD lane settings after repeater training drm/amd/display: Allow DSC on supported MST branch devices drm/amdgpu: Don't halt RLC on GFX suspend drm/amdgpu: fix the missed handling for SDMA2 and SDMA3 drm/amdgpu: check atomic flag to differeniate with legacy path drm/amdgpu: cancel the correct hrtimer on exit drm/amdgpu/sriov/vcn: add new vcn ip revision check case for SIENNA_CICHLID drm/i915/dp: Perform 30ms delay after source OUI write dma-buf: system_heap: Use 'for_each_sgtable_sg' in pages free flow drm/i915: Add support for panels with VESA backlights with PWM enable/disable drm/vc4: kms: Fix previous HVS commit wait drm/vc4: kms: Don't duplicate pending commit ...
2 parents a51e3ac + a687efe commit 5f58da2

39 files changed

+244
-159
lines changed

drivers/dma-buf/heaps/system_heap.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -290,7 +290,7 @@ static void system_heap_dma_buf_release(struct dma_buf *dmabuf)
290290
int i;
291291

292292
table = &buffer->sg_table;
293-
for_each_sg(table->sgl, sg, table->nents, i) {
293+
for_each_sgtable_sg(table, sg, i) {
294294
struct page *page = sg_page(sg);
295295

296296
__free_pages(page, compound_order(page));

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1396,7 +1396,7 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu(
13961396
struct sg_table *sg = NULL;
13971397
uint64_t user_addr = 0;
13981398
struct amdgpu_bo *bo;
1399-
struct drm_gem_object *gobj;
1399+
struct drm_gem_object *gobj = NULL;
14001400
u32 domain, alloc_domain;
14011401
u64 alloc_flags;
14021402
int ret;
@@ -1506,14 +1506,16 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu(
15061506
remove_kgd_mem_from_kfd_bo_list(*mem, avm->process_info);
15071507
drm_vma_node_revoke(&gobj->vma_node, drm_priv);
15081508
err_node_allow:
1509-
drm_gem_object_put(gobj);
15101509
/* Don't unreserve system mem limit twice */
15111510
goto err_reserve_limit;
15121511
err_bo_create:
15131512
unreserve_mem_limit(adev, size, alloc_domain, !!sg);
15141513
err_reserve_limit:
15151514
mutex_destroy(&(*mem)->lock);
1516-
kfree(*mem);
1515+
if (gobj)
1516+
drm_gem_object_put(gobj);
1517+
else
1518+
kfree(*mem);
15171519
err:
15181520
if (sg) {
15191521
sg_free_table(sg);

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

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3833,7 +3833,7 @@ void amdgpu_device_fini_hw(struct amdgpu_device *adev)
38333833
/* disable all interrupts */
38343834
amdgpu_irq_disable_all(adev);
38353835
if (adev->mode_info.mode_config_initialized){
3836-
if (!amdgpu_device_has_dc_support(adev))
3836+
if (!drm_drv_uses_atomic_modeset(adev_to_drm(adev)))
38373837
drm_helper_force_disable_all(adev_to_drm(adev));
38383838
else
38393839
drm_atomic_helper_shutdown(adev_to_drm(adev));
@@ -4289,6 +4289,8 @@ static int amdgpu_device_reset_sriov(struct amdgpu_device *adev,
42894289
{
42904290
int r;
42914291

4292+
amdgpu_amdkfd_pre_reset(adev);
4293+
42924294
if (from_hypervisor)
42934295
r = amdgpu_virt_request_full_gpu(adev, true);
42944296
else
@@ -4316,6 +4318,7 @@ static int amdgpu_device_reset_sriov(struct amdgpu_device *adev,
43164318

43174319
amdgpu_irq_gpu_reset_resume_helper(adev);
43184320
r = amdgpu_ib_ring_tests(adev);
4321+
amdgpu_amdkfd_post_reset(adev);
43194322

43204323
error:
43214324
if (!r && adev->virt.gim_feature & AMDGIM_FEATURE_GIM_FLR_VRAMLOST) {
@@ -5030,7 +5033,8 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev,
50305033

50315034
cancel_delayed_work_sync(&tmp_adev->delayed_init_work);
50325035

5033-
amdgpu_amdkfd_pre_reset(tmp_adev);
5036+
if (!amdgpu_sriov_vf(tmp_adev))
5037+
amdgpu_amdkfd_pre_reset(tmp_adev);
50345038

50355039
/*
50365040
* Mark these ASICs to be reseted as untracked first
@@ -5129,7 +5133,7 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev,
51295133
drm_sched_start(&ring->sched, !tmp_adev->asic_reset_res);
51305134
}
51315135

5132-
if (!amdgpu_device_has_dc_support(tmp_adev) && !job_signaled) {
5136+
if (!drm_drv_uses_atomic_modeset(adev_to_drm(tmp_adev)) && !job_signaled) {
51335137
drm_helper_resume_force_mode(adev_to_drm(tmp_adev));
51345138
}
51355139

@@ -5148,9 +5152,9 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev,
51485152

51495153
skip_sched_resume:
51505154
list_for_each_entry(tmp_adev, device_list_handle, reset_list) {
5151-
/* unlock kfd */
5152-
if (!need_emergency_restart)
5153-
amdgpu_amdkfd_post_reset(tmp_adev);
5155+
/* unlock kfd: SRIOV would do it separately */
5156+
if (!need_emergency_restart && !amdgpu_sriov_vf(tmp_adev))
5157+
amdgpu_amdkfd_post_reset(tmp_adev);
51545158

51555159
/* kfd_post_reset will do nothing if kfd device is not initialized,
51565160
* need to bring up kfd here if it's not be initialized before

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,8 @@ static int hw_id_map[MAX_HWIP] = {
157157
[HDP_HWIP] = HDP_HWID,
158158
[SDMA0_HWIP] = SDMA0_HWID,
159159
[SDMA1_HWIP] = SDMA1_HWID,
160+
[SDMA2_HWIP] = SDMA2_HWID,
161+
[SDMA3_HWIP] = SDMA3_HWID,
160162
[MMHUB_HWIP] = MMHUB_HWID,
161163
[ATHUB_HWIP] = ATHUB_HWID,
162164
[NBIO_HWIP] = NBIF_HWID,
@@ -918,6 +920,7 @@ static int amdgpu_discovery_set_mm_ip_blocks(struct amdgpu_device *adev)
918920
case IP_VERSION(3, 0, 64):
919921
case IP_VERSION(3, 1, 1):
920922
case IP_VERSION(3, 0, 2):
923+
case IP_VERSION(3, 0, 192):
921924
amdgpu_device_ip_block_add(adev, &vcn_v3_0_ip_block);
922925
if (!amdgpu_sriov_vf(adev))
923926
amdgpu_device_ip_block_add(adev, &jpeg_v3_0_ip_block);

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ int amdgpu_vcn_sw_init(struct amdgpu_device *adev)
135135
break;
136136
case IP_VERSION(3, 0, 0):
137137
case IP_VERSION(3, 0, 64):
138+
case IP_VERSION(3, 0, 192):
138139
if (adev->ip_versions[GC_HWIP][0] == IP_VERSION(10, 3, 0))
139140
fw_name = FIRMWARE_SIENNA_CICHLID;
140141
else

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -504,8 +504,8 @@ static int amdgpu_vkms_sw_fini(void *handle)
504504
int i = 0;
505505

506506
for (i = 0; i < adev->mode_info.num_crtc; i++)
507-
if (adev->mode_info.crtcs[i])
508-
hrtimer_cancel(&adev->mode_info.crtcs[i]->vblank_timer);
507+
if (adev->amdgpu_vkms_output[i].vblank_hrtimer.function)
508+
hrtimer_cancel(&adev->amdgpu_vkms_output[i].vblank_hrtimer);
509509

510510
kfree(adev->mode_info.bios_hardcoded_edid);
511511
kfree(adev->amdgpu_vkms_output);

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4060,9 +4060,10 @@ static int gfx_v9_0_hw_fini(void *handle)
40604060

40614061
gfx_v9_0_cp_enable(adev, false);
40624062

4063-
/* Skip suspend with A+A reset */
4064-
if (adev->gmc.xgmi.connected_to_cpu && amdgpu_in_reset(adev)) {
4065-
dev_dbg(adev->dev, "Device in reset. Skipping RLC halt\n");
4063+
/* Skip stopping RLC with A+A reset or when RLC controls GFX clock */
4064+
if ((adev->gmc.xgmi.connected_to_cpu && amdgpu_in_reset(adev)) ||
4065+
(adev->ip_versions[GC_HWIP][0] >= IP_VERSION(9, 4, 2))) {
4066+
dev_dbg(adev->dev, "Skipping RLC halt\n");
40664067
return 0;
40674068
}
40684069

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@ static int nv_query_video_codecs(struct amdgpu_device *adev, bool encode,
183183
switch (adev->ip_versions[UVD_HWIP][0]) {
184184
case IP_VERSION(3, 0, 0):
185185
case IP_VERSION(3, 0, 64):
186+
case IP_VERSION(3, 0, 192):
186187
if (amdgpu_sriov_vf(adev)) {
187188
if (encode)
188189
*codecs = &sriov_sc_video_codecs_encode;

drivers/gpu/drm/amd/amdkfd/kfd_svm.c

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1574,7 +1574,6 @@ svm_range_list_lock_and_flush_work(struct svm_range_list *svms,
15741574
static void svm_range_restore_work(struct work_struct *work)
15751575
{
15761576
struct delayed_work *dwork = to_delayed_work(work);
1577-
struct amdkfd_process_info *process_info;
15781577
struct svm_range_list *svms;
15791578
struct svm_range *prange;
15801579
struct kfd_process *p;
@@ -1594,12 +1593,10 @@ static void svm_range_restore_work(struct work_struct *work)
15941593
* the lifetime of this thread, kfd_process and mm will be valid.
15951594
*/
15961595
p = container_of(svms, struct kfd_process, svms);
1597-
process_info = p->kgd_process_info;
15981596
mm = p->mm;
15991597
if (!mm)
16001598
return;
16011599

1602-
mutex_lock(&process_info->lock);
16031600
svm_range_list_lock_and_flush_work(svms, mm);
16041601
mutex_lock(&svms->lock);
16051602

@@ -1652,7 +1649,6 @@ static void svm_range_restore_work(struct work_struct *work)
16521649
out_reschedule:
16531650
mutex_unlock(&svms->lock);
16541651
mmap_write_unlock(mm);
1655-
mutex_unlock(&process_info->lock);
16561652

16571653
/* If validation failed, reschedule another attempt */
16581654
if (evicted_ranges) {
@@ -2614,6 +2610,7 @@ svm_range_restore_pages(struct amdgpu_device *adev, unsigned int pasid,
26142610

26152611
if (atomic_read(&svms->drain_pagefaults)) {
26162612
pr_debug("draining retry fault, drop fault 0x%llx\n", addr);
2613+
r = 0;
26172614
goto out;
26182615
}
26192616

@@ -2623,6 +2620,7 @@ svm_range_restore_pages(struct amdgpu_device *adev, unsigned int pasid,
26232620
mm = get_task_mm(p->lead_thread);
26242621
if (!mm) {
26252622
pr_debug("svms 0x%p failed to get mm\n", svms);
2623+
r = 0;
26262624
goto out;
26272625
}
26282626

@@ -2660,6 +2658,7 @@ svm_range_restore_pages(struct amdgpu_device *adev, unsigned int pasid,
26602658

26612659
if (svm_range_skip_recover(prange)) {
26622660
amdgpu_gmc_filter_faults_remove(adev, addr, pasid);
2661+
r = 0;
26632662
goto out_unlock_range;
26642663
}
26652664

@@ -2668,6 +2667,7 @@ svm_range_restore_pages(struct amdgpu_device *adev, unsigned int pasid,
26682667
if (timestamp < AMDGPU_SVM_RANGE_RETRY_FAULT_PENDING) {
26692668
pr_debug("svms 0x%p [0x%lx %lx] already restored\n",
26702669
svms, prange->start, prange->last);
2670+
r = 0;
26712671
goto out_unlock_range;
26722672
}
26732673

@@ -3177,7 +3177,6 @@ static int
31773177
svm_range_set_attr(struct kfd_process *p, uint64_t start, uint64_t size,
31783178
uint32_t nattr, struct kfd_ioctl_svm_attribute *attrs)
31793179
{
3180-
struct amdkfd_process_info *process_info = p->kgd_process_info;
31813180
struct mm_struct *mm = current->mm;
31823181
struct list_head update_list;
31833182
struct list_head insert_list;
@@ -3196,8 +3195,6 @@ svm_range_set_attr(struct kfd_process *p, uint64_t start, uint64_t size,
31963195

31973196
svms = &p->svms;
31983197

3199-
mutex_lock(&process_info->lock);
3200-
32013198
svm_range_list_lock_and_flush_work(svms, mm);
32023199

32033200
r = svm_range_is_valid(p, start, size);
@@ -3273,8 +3270,6 @@ svm_range_set_attr(struct kfd_process *p, uint64_t start, uint64_t size,
32733270
mutex_unlock(&svms->lock);
32743271
mmap_read_unlock(mm);
32753272
out:
3276-
mutex_unlock(&process_info->lock);
3277-
32783273
pr_debug("pasid 0x%x svms 0x%p [0x%llx 0x%llx] done, r=%d\n", p->pasid,
32793274
&p->svms, start, start + size - 1, r);
32803275

drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_crc.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,14 @@ int amdgpu_dm_crtc_set_crc_source(struct drm_crtc *crtc, const char *src_name)
314314
ret = -EINVAL;
315315
goto cleanup;
316316
}
317+
318+
if ((aconn->base.connector_type != DRM_MODE_CONNECTOR_DisplayPort) &&
319+
(aconn->base.connector_type != DRM_MODE_CONNECTOR_eDP)) {
320+
DRM_DEBUG_DRIVER("No DP connector available for CRC source\n");
321+
ret = -EINVAL;
322+
goto cleanup;
323+
}
324+
317325
}
318326

319327
#if defined(CONFIG_DRM_AMD_SECURE_DISPLAY)

0 commit comments

Comments
 (0)