[PATCH 4/5] drm/intel/dp: Try harder to get bpc of a DP sink if EDID doesn't tell.

Mario Kleiner mario.kleiner.de at gmail.com
Wed Aug 3 12:03:53 UTC 2016


On 08/03/2016 08:09 AM, Daniel Vetter wrote:
> On Wed, Aug 03, 2016 at 01:07:12PM +1000, Dave Airlie wrote:
>> On 6 July 2016 at 20:05, Mario Kleiner <mario.kleiner.de at gmail.com> wrote:
>>> For DP sinks which don't expose color depth via EDID, use
>>> the drm_dp_sink_bpc() helper to derive the bpc of the sink.
>>>
>>> This should handle DP native sinks with the "Assume 6 bpc if EDID
>>> doesn't tell us" as mandated by DP spec. It gives more accurate
>>> values for DP->legacy converters for HDMI, DVI and VGA.
>>
>> Haswell says no.
>
> Yup indeed, sorry for missing that. Tomeu and Mika Kahola are working on
> some fancy new dp helper to probe all that, and as part of that suitably
> fill out connector->display_info, too. That would allow both the
> inversion, and the dpcd transaction from within atomic_check (which is
> kinda not that cool either).
> -Daniel
>

Ups, sorry. They were only successfully tested with Ironlake and 
Ivybridge, non-MST, all the Intel hw i have here.

Anyway, patches 1+2 and 5 are independent of those and will fix existing 
bugs and regressions in stable kernels. Patch 1 fixes what the commit 
reverted in patch 2 was fixing. Patch 2 fixes the DP->legacy regressions 
which affect my users, patch 5 adds robustness for DVI sinks in general, 
making full use of EDID 1.3 info.

Maybe the logic in patch 3 can be somehow useful for Tomeu and Mika, as 
it was tested with different dp -> xx adapters. Happy to review or test 
once they have stuff ready.

thanks,
-mario

>>
>> ug 03 12:58:46 tyrion-bne-redhat-com kernel: fbcon: inteldrmfb (fb0)
>> is primary device
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel: BUG: unable to handle
>> kernel NULL pointer dereference at 000000000000011b
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel: IP: [<ffffffffa00e6cf5>]
>> drm_dp_sink_bpc+0x5/0xb0 [drm_kms_helper]
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel: PGD 0
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel: Oops: 0000 [#1] SMP
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel: Modules linked in: i915
>> ccm xt_CHECKSUM ipt_MASQUERADE nf_nat_masquerade_ipv4 tun
>> ip6t_rpfilter ip6t_
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel:  videobuf2_core
>> snd_hda_codec videodev mei_me mei snd_hwdep snd_seq snd_hda_core
>> rtsx_pci media i2c_i
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel: CPU: 1 PID: 752 Comm:
>> kworker/1:3 Not tainted 4.7.0+ #12
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel: Hardware name: LENOVO
>> 20ARS25701/20ARS25701, BIOS GJET72WW (2.22 ) 02/21/2014
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel: Workqueue: events_long
>> drm_dp_mst_link_probe_work [drm_kms_helper]
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel: task: ffff880308583a80
>> task.stack: ffff880309f20000
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel: RIP:
>> 0010:[<ffffffffa00e6cf5>]  [<ffffffffa00e6cf5>]
>> drm_dp_sink_bpc+0x5/0xb0 [drm_kms_helper]
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel: RSP:
>> 0018:ffff880309f23b48  EFLAGS: 00010202
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel: RAX: 000000000000000a
>> RBX: 0000000000000006 RCX: 0000000000000000
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel: RDX: 0000000000000000
>> RSI: 0000000000000127 RDI: 0000000000000116
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel: RBP: ffff880309f23b50
>> R08: ffff880309734800 R09: 0000000000000024
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel: R10: 0000000000000000
>> R11: 0000000000000000 R12: ffff880309737800
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel: R13: ffff88030a334000
>> R14: ffff880309737000 R15: ffff880309737800
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel: FS:
>> 0000000000000000(0000) GS:ffff88031e240000(0000)
>> knlGS:0000000000000000
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel: CS:  0010 DS: 0000 ES:
>> 0000 CR0: 0000000080050033
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel: CR2: 000000000000011b
>> CR3: 0000000001c06000 CR4: 00000000001406e0
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel: Stack:
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel:  ffffffffa09d4295
>> ffff880309f23bd8 ffffffffa09a7c1f ffffffff8122544d
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel:  ffff880306660258
>> ffff880306660000 0000000009737800 ffff88030a331000
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel:  0100880300000024
>> ffff880309f23bb8 ffffffff00000024 ffff880309737800
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel: Call Trace:
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel:  [<ffffffffa09d4295>] ?
>> intel_dp_sink_bpc+0x25/0x30 [i915]
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel:  [<ffffffffa09a7c1f>]
>> intel_atomic_check+0xacf/0x1250 [i915]
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel:  [<ffffffff8122544d>] ?
>> __kmalloc_track_caller+0x12d/0x210
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel:  [<ffffffffa0097ea7>]
>> drm_atomic_check_only+0x187/0x610 [drm]
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel:  [<ffffffffa0098857>] ?
>> drm_atomic_add_affected_connectors+0x27/0xf0 [drm]
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel:  [<ffffffffa0098347>]
>> drm_atomic_commit+0x17/0x60 [drm]
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel:  [<ffffffffa00f4e0c>]
>> restore_fbdev_mode+0x14c/0x260 [drm_kms_helper]
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel:  [<ffffffffa00f6a23>]
>> drm_fb_helper_restore_fbdev_mode_unlocked+0x33/0x80 [drm_kms_helper]
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel:  [<ffffffffa00f6a9d>]
>> drm_fb_helper_set_par+0x2d/0x50 [drm_kms_helper]
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel:  [<ffffffffa00f69b8>]
>> drm_fb_helper_hotplug_event+0x148/0x180 [drm_kms_helper]
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel:  [<ffffffffa09c238a>]
>> intel_fbdev_output_poll_changed+0x1a/0x20 [i915]
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel:  [<ffffffffa00e79c7>]
>> drm_kms_helper_hotplug_event+0x27/0x30 [drm_kms_helper]
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel:  [<ffffffffa09cafa5>]
>> intel_dp_mst_hotplug+0x15/0x20 [i915]
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel:  [<ffffffffa00ee31a>]
>> drm_dp_send_link_address+0x19a/0x220 [drm_kms_helper]
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel:  [<ffffffff810df553>] ?
>> put_prev_entity+0x33/0x410
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel:  [<ffffffff8111280b>] ?
>> add_timer_on+0xdb/0x1b0
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel:  [<ffffffff8102c766>] ?
>> __switch_to+0x2b6/0x600
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel:  [<ffffffff810e361e>] ?
>> pick_next_task_fair+0x10e/0x4d0
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel:  [<ffffffffa00ee44d>]
>> drm_dp_check_and_send_link_address+0xad/0xc0 [drm_kms_helper]
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel:  [<ffffffffa00ee4b7>]
>> drm_dp_mst_link_probe_work+0x57/0xb0 [drm_kms_helper]
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel:  [<ffffffff810c086f>]
>> process_one_work+0x15f/0x410
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel:  [<ffffffff810c0b6e>]
>> worker_thread+0x4e/0x480
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel:  [<ffffffff810c0b20>] ?
>> process_one_work+0x410/0x410
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel:  [<ffffffff810c0b20>] ?
>> process_one_work+0x410/0x410
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel:  [<ffffffff810c64c8>]
>> kthread+0xd8/0xf0
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel:  [<ffffffff817d527f>]
>> ret_from_fork+0x1f/0x40
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel:  [<ffffffff810c63f0>] ?
>> kthread_worker_fn+0x170/0x170
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel: Code: b8 b0 1e 04 00 48
>> 89 e5 74 11 40 80 ff 14 ba d0 78 02 00 b8 60 3d 08 00 0f 45 c2 5d c3
>> 66 0f 1f
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel: RIP
>> [<ffffffffa00e6cf5>] drm_dp_sink_bpc+0x5/0xb0 [drm_kms_helper]
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel:  RSP <ffff880309f23b48>
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel: CR2: 000000000000011b
>> Aug 03 12:58:46 tyrion-bne-redhat-com kernel: ---[ end trace
>> d3270996301ba013 ]---
>>
>> Possibly MST related.
>>
>> Dave.
>


More information about the dri-devel mailing list