drm/client: Don't add new command-line mode
authorThomas Zimmermann <tzimmermann@suse.de>
Wed, 11 May 2022 18:31:25 +0000 (20:31 +0200)
committerThomas Zimmermann <tzimmermann@suse.de>
Mon, 16 May 2022 11:43:24 +0000 (13:43 +0200)
Don't add a mode for the kernel's command-line parameters from
within the DRM client code. Doing so can result in an unusable
display. If there's no compatible command-line mode, the client
will use one of the connector's preferred modes.

All mode creation and validation has to be performed by the
connector. When clients run, the connector's fill_modes callback
has already processed the kernel parameters and validated each
mode before adding it. The connector's mode list does not contain
invalid modes.

v2:
* grammar in commit message (Javier)

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
Reviewed-by: Maxime Ripard <maxime@cerno.tech>
Link: https://patchwork.freedesktop.org/patch/msgid/20220511183125.14294-4-tzimmermann@suse.de
drivers/gpu/drm/drm_client_modeset.c

index b777faa87f043d5b34ba806429c6d692dc4baf7e..48e6ce16439fd01b3e8349a3347e27c52e5959dc 100644 (file)
@@ -158,8 +158,7 @@ drm_connector_has_preferred_mode(struct drm_connector *connector, int width, int
        return NULL;
 }
 
-static struct drm_display_mode *
-drm_connector_pick_cmdline_mode(struct drm_connector *connector)
+static struct drm_display_mode *drm_connector_pick_cmdline_mode(struct drm_connector *connector)
 {
        struct drm_cmdline_mode *cmdline_mode;
        struct drm_display_mode *mode;
@@ -180,11 +179,10 @@ drm_connector_pick_cmdline_mode(struct drm_connector *connector)
        if (cmdline_mode->specified == false)
                return NULL;
 
-       /* attempt to find a matching mode in the list of modes
-        *  we have gotten so far, if not add a CVT mode that conforms
+       /*
+        * Attempt to find a matching mode in the list of modes we
+        * have gotten so far.
         */
-       if (cmdline_mode->rb || cmdline_mode->margins)
-               goto create_mode;
 
        prefer_non_interlace = !cmdline_mode->interlace;
 again:
@@ -218,12 +216,7 @@ again:
                goto again;
        }
 
-create_mode:
-       mode = drm_mode_create_from_cmdline_mode(connector->dev, cmdline_mode);
-       if (mode)
-               list_add(&mode->head, &connector->modes);
-
-       return mode;
+       return NULL;
 }
 
 static bool drm_connector_enabled(struct drm_connector *connector, bool strict)