Patch "drm: Fix broken VT switch with video=1366x768 option" has been added to the 4.4-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
drm: Fix broken VT switch with video=1366x768 option
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
drm-fix-broken-vt-switch-with-video-1366x768-option.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
fdf35a6b22247746a7053fc764d04218a9306f82Mon Sep 17 00:00:00 2001
From: Takashi Iwai <[email protected]>
Date: Mon, 9 Jan 2017 15:56:14 +0100
Subject: drm: Fix broken VT switch with video=1366x768 option
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
From: Takashi Iwai <[email protected]>
commit fdf35a6b22247746a7053fc764d04218a9306f82 upstream.
I noticed that the VT switch doesn't work any longer with a Dell laptop with 1366x768 eDP when the machine is connected with a DP monitor. It behaves as if VT were switched, but the graphics remain frozen. Actually the keyboard works, so I could switch back to VT7 again.
I tried to track down the problem, and encountered a long story until we reach to this error:
- The machine is booted with video=1366x768 option (the distro installer seems to add it as default).
- Recently, drm_helper_probe_single_connector_modes() deals with cmdline modes, and it tries to create a new mode when no matching mode is found.
- The drm_mode_create_from_cmdline_mode() creates a mode based on either CVT of GFT according to the given cmdline mode; in our case, it's 1366x768.
- Since both CVT and GFT can't express the width 1366 due to alignment, the resultant mode becomes 1368x768, slightly larger than the given size.
- Later on, the atomic commit is performed, and in drm_atomic_check_only(), the size of each plane is checked.
- The size check of 1366x768 fails due to the above, and eventually the whole VT switch fails.
Back in the history, we've had a manual fix-up of 1368x768 in various places via c09dedb7a50e ("drm/edid: Add a workaround for 1366x768 HD panel"), but they have been all in drm_edid.c at probing the modes from EDID. For addressing the problem above, we need a similar hack to the mode newly created from cmdline, manually adjusting the width when the expected size is 1366 while we get 1368 instead.
--- drivers/gpu/drm/drm_modes.c | 7 +++++++ 1 file changed, 7 insertions(+)
drivers/gpu/drm/drm_modes.c +7 -0
@@ -1401,6 +1401,13 @@ drm_mode_create_from_cmdline_mode(structreturn NULL ; mode->type |=DRM_MODE_TYPE_USERDEF ; +/* fix up 1368x768: GFT/CVT can't express 1366 width due to alignment */ +if (cmd->xres ==1366 && mode->hdisplay ==1368 ) { + mode->hdisplay =1366 ; + mode->hsync_start--; + mode->hsync_end--; +drm_mode_set_name (mode); + }drm_mode_set_crtcinfo (mode,CRTC_INTERLACE_HALVE_V );return mode; }
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/drm-fix-broken-vt-switch-with-video-1366x768-option.patch