• Takashi Iwai's avatar
    drm: Fix broken VT switch with video=1366x768 option · c83ad970
    Takashi Iwai authored
    commit fdf35a6b 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 c09dedb7 ("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.
    
    Fixes: eaf99c74 ("drm: Perform cmdline mode parsing during...")
    Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    Link: http://patchwork.freedesktop.org/patch/msgid/20170109145614.29454-1-tiwai@suse.deReviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
    Signed-off-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    c83ad970
drm_modes.c 44.9 KB