[Intel-gfx] Help needed for unusual hack

Lukas Wunner lukas at wunner.de
Sat Aug 1 08:01:03 PDT 2015


Hi,

On Fri, Jul 31, 2015 at 02:34:06PM +0100, harrykipper wrote:
> Hello, I have a Thinkpad X230 (IvyBridge, HD4000) with a very clever display
> mod (described to some extent by a guy here --> http://boweihe.me/?p=1442).
> Practically the low res native LVDS panel of the laptop was replaced with a
> FHD IPS eDP panel. The FHD eDP screen is attached to the dock DisplayPort
> connector on the laptop's mainboard, which has been rewired in some way,
> possibly with an interface board. The setup works fairly well, the screen is
> detected as DP-3 (the laptop has two other external digital ports) and
> treated as external. I could disable the non existent lvds screen using
> video=lvds1:d to prevent the gpu from duplicating the signal and wasting
> power, but that doesn't give me brightness controls because the lvds port is
> still initialized by the drm module and the intel_backlight/ directory is
> found in /sys/devices/pci0000\:00/0000\:00\:02.0/drm/card0/card0-LVDS-1/.
> 
> To try and solve this I went ahead and:
> 1 - added my laptop's vendor and model number to the
> intel_no_lvds_dmi_callback() function in intel_lvds.c
> 2 - changed the is_edp() function in intel_dp.c to always return 'true' :-D

Change is_edp() to something like:

-	return intel_dig_port->base.type == INTEL_OUTPUT_EDP;
+	return intel_dig_port->base.type == INTEL_OUTPUT_EDP ||
+	       strncmp(intel_dp->base.name, "DP-1", 4) == 0;

An alternative solution might be to modify intel_bios.c and change what
has been read vom VBT, see parse_ddi_port().

Best regards,

Lukas

> 
> This way the lvds port skips being initialized, so card0-LVDS-1 doesn't
> exist at all, the DP port is detected as eDP and intel_backlight sits
> correctly in /sys/devices/pci0000\:00/0000\:00\:02.0/drm/card0/card0-DP-1/.
> The screen works perfectly, I have full backlight control and xrandr shows
> all the modes supported by the panel. The backdrop is that the other two
> digital ports are lost, because the kernel disables them when it tries to
> initialize them as eDP, which obviously they are not. In dmesg I see
> 
> [drm] failed to retrieve link info, disabling eDP
> 
> repeated twice, suggesting that the third port is configured correctly, as
> in fact it is.
> 
> Now obviously this is a very ugly hack that I came up with as a non
> programmer, unfamiliar with the kernel, and additionally I have an error at
> boot (see below)
> 
> My question is (are): could anyone suggest a more clever way of forcing the
> third DP port to be detected as eDP and keeping the other two alive? Is the
> error below something that I should worry about?
> 
> Thanks very much and sorry if this is not the right place to ask.
> 
> WARNING: CPU: 0 PID: 6 at drivers/gpu/drm/i915/intel_display.c:1034
> ironlake_crtc_disable+0x93/0x7f0()
> [    3.220452] pipe_off wait timed out
> [    3.220453] Modules linked in:
> [    3.220456] CPU: 0 PID: 6 Comm: kworker/u16:0 Tainted: G     U
> 4.1.3-eDP #7
> [    3.220458] Hardware name: LENOVO 2324B14/2324B14, BIOS G2ETA4WW (2.64 )
> 04/09/2015
> [    3.220463] Workqueue: events_unbound async_run_entry_fn
> [    3.220466]  ffffffff8174a298 000000004c6f2a3f ffffffff8174a298
> ffffffff815d398b
> [    3.220468]  ffff8802149377f0 ffffffff81071907 ffff8802146e0000
> ffff880214a92800
> [    3.220470]  0000000000000000 ffff880214a92b38 ffff880214a92b40
> ffffffff81071998
> [    3.220471] Call Trace:
> [    3.220478]  [<ffffffff815d398b>] ? dump_stack+0x47/0x67
> [    3.220482]  [<ffffffff81071907>] ? warn_slowpath_common+0x77/0xb0
> [    3.220484]  [<ffffffff81071998>] ? warn_slowpath_fmt+0x58/0x80
> [    3.220488]  [<ffffffff813c7183>] ? ironlake_crtc_disable+0x93/0x7f0
> [    3.220492]  [<ffffffff81358229>] ? drm_mode_copy+0x19/0x30
> [    3.220496]  [<ffffffff81158c30>] ? __kmalloc_track_caller+0x20/0x1d0
> [    3.220499]  [<ffffffff813c897c>] ? __intel_set_mode+0xb6c/0xc90
> [    3.220503]  [<ffffffff813be913>] ?
> intel_dump_pipe_config.isra.52+0x33/0x3e0
> [    3.220508]  [<ffffffff813b141c>] ? gen6_write32+0x2c/0x90
> [    3.220510]  [<ffffffff813cfc9a>] ? intel_crtc_set_config+0xd3a/0x1060
> [    3.220514]  [<ffffffff8136178a>] ? drm_atomic_state_clear+0x10a/0x180
> [    3.220517]  [<ffffffff81351fcf>] ?
> drm_mode_set_config_internal+0x5f/0x100
> [    3.220521]  [<ffffffff81340279>] ? restore_fbdev_mode+0xb9/0xe0
> [    3.220524]  [<ffffffff8134218b>] ?
> drm_fb_helper_restore_fbdev_mode_unlocked+0x1b/0x60
> [    3.220526]  [<ffffffff813421ed>] ? drm_fb_helper_set_par+0x1d/0x40
> [    3.220530]  [<ffffffff813de4f1>] ? intel_fbdev_set_par+0x11/0x60
> [    3.220533]  [<ffffffff812a50e0>] ? fbcon_init+0x580/0x610
> [    3.220536]  [<ffffffff8130bb4c>] ? visual_init+0xac/0x110
> [    3.220539]  [<ffffffff8130d694>] ? do_bind_con_driver+0x1e4/0x440
> [    3.220542]  [<ffffffff8130dc30>] ? do_take_over_console+0x110/0x1a0
> [    3.220545]  [<ffffffff812a51c3>] ? do_fbcon_takeover+0x53/0xc0
> [    3.220550]  [<ffffffff8108d647>] ? notifier_call_chain+0x47/0x70
> [    3.220552]  [<ffffffff8108d93c>] ?
> __blocking_notifier_call_chain+0x3c/0x60
> [    3.220556]  [<ffffffff812ae0d0>] ? register_framebuffer+0x210/0x360
> [    3.220559]  [<ffffffff81342492>] ?
> drm_fb_helper_initial_config+0x282/0x470
> [    3.220561]  [<ffffffff8108ed7e>] ? async_run_entry_fn+0x3e/0x150
> [    3.220564]  [<ffffffff81086d4e>] ? process_one_work+0x11e/0x3d0
> [    3.220566]  [<ffffffff81087048>] ? worker_thread+0x48/0x4c0
> [    3.220570]  [<ffffffff815d70ca>] ? preempt_schedule_common+0x1a/0x40
> [    3.220572]  [<ffffffff81087000>] ? process_one_work+0x3d0/0x3d0
> [    3.220576]  [<ffffffff8108ca38>] ? kthread+0xc8/0xe0
> [    3.220579]  [<ffffffff8108c970>] ? kthread_worker_fn+0x180/0x180
> [    3.220582]  [<ffffffff815da8d2>] ? ret_from_fork+0x42/0x70
> [    3.220585]  [<ffffffff8108c970>] ? kthread_worker_fn+0x180/0x180
> [    3.220587] ---[ end trace 5ff7400acd9836ea ]---
> [    3.330758] [drm:ironlake_crtc_disable] *ERROR* failed to disable
> transcoder A
> [    3.333347] [drm:intel_set_pch_fifo_underrun_reporting] *ERROR* uncleared
> pch fifo underrun on pch transcoder A
> [    3.333350] [drm:cpt_irq_handler] *ERROR* PCH transcoder A FIFO underrun


More information about the Intel-gfx mailing list