diff options
Diffstat (limited to 'target/linux/bcm27xx/patches-4.19/950-0640-drm-modes-Support-modes-names-on-the-command-line.patch')
-rw-r--r-- | target/linux/bcm27xx/patches-4.19/950-0640-drm-modes-Support-modes-names-on-the-command-line.patch | 174 |
1 files changed, 0 insertions, 174 deletions
diff --git a/target/linux/bcm27xx/patches-4.19/950-0640-drm-modes-Support-modes-names-on-the-command-line.patch b/target/linux/bcm27xx/patches-4.19/950-0640-drm-modes-Support-modes-names-on-the-command-line.patch deleted file mode 100644 index 1cacab25e2..0000000000 --- a/target/linux/bcm27xx/patches-4.19/950-0640-drm-modes-Support-modes-names-on-the-command-line.patch +++ /dev/null @@ -1,174 +0,0 @@ -From 2cea4924c69b6be5cfe8d976810ccf76a3991230 Mon Sep 17 00:00:00 2001 -From: Maxime Ripard <maxime.ripard@bootlin.com> -Date: Wed, 19 Jun 2019 12:17:50 +0200 -Subject: [PATCH] drm/modes: Support modes names on the command line -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -commit 3aeeb13d899627fe2b86bdbdcd0927cf7192234f upstream. -Minor conflict resolution as upstream has moved functions -from drm_fb_helper.c to a new drm_client_modeset.c - -The drm subsystem also uses the video= kernel parameter, and in the -documentation refers to the fbdev documentation for that parameter. - -However, that documentation also says that instead of giving the mode using -its resolution we can also give a name. However, DRM doesn't handle that -case at the moment. Even though in most case it shouldn't make any -difference, it might be useful for analog modes, where different standards -might have the same resolution, but still have a few different parameters -that are not encoded in the modes (NTSC vs NTSC-J vs PAL-M for example). - -Reviewed-by: Noralf Trønnes <noralf@tronnes.org> -Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com> -Link: https://patchwork.freedesktop.org/patch/msgid/18443e0c3bdbbd16cea4ec63bc7f2079b820b43b.1560783090.git-series.maxime.ripard@bootlin.com ---- - drivers/gpu/drm/drm_connector.c | 3 +- - drivers/gpu/drm/drm_fb_helper.c | 4 +++ - drivers/gpu/drm/drm_modes.c | 62 ++++++++++++++++++++++++--------- - include/drm/drm_connector.h | 7 ++++ - 4 files changed, 59 insertions(+), 17 deletions(-) - ---- a/drivers/gpu/drm/drm_connector.c -+++ b/drivers/gpu/drm/drm_connector.c -@@ -135,8 +135,9 @@ static void drm_connector_get_cmdline_mo - connector->force = mode->force; - } - -- DRM_DEBUG_KMS("cmdline mode for connector %s %dx%d@%dHz%s%s%s\n", -+ DRM_DEBUG_KMS("cmdline mode for connector %s %s %dx%d@%dHz%s%s%s\n", - connector->name, -+ mode->name ? mode->name : "", - mode->xres, mode->yres, - mode->refresh_specified ? mode->refresh : 60, - mode->rb ? " reduced blanking" : "", ---- a/drivers/gpu/drm/drm_fb_helper.c -+++ b/drivers/gpu/drm/drm_fb_helper.c -@@ -2104,6 +2104,10 @@ struct drm_display_mode *drm_pick_cmdlin - prefer_non_interlace = !cmdline_mode->interlace; - again: - list_for_each_entry(mode, &fb_helper_conn->connector->modes, head) { -+ /* Check (optional) mode name first */ -+ if (!strcmp(mode->name, cmdline_mode->name)) -+ return mode; -+ - /* check width/height */ - if (mode->hdisplay != cmdline_mode->xres || - mode->vdisplay != cmdline_mode->yres) ---- a/drivers/gpu/drm/drm_modes.c -+++ b/drivers/gpu/drm/drm_modes.c -@@ -1586,7 +1586,7 @@ bool drm_mode_parse_command_line_for_con - struct drm_cmdline_mode *mode) - { - const char *name; -- bool parse_extras = false; -+ bool named_mode = false, parse_extras = false; - unsigned int bpp_off = 0, refresh_off = 0; - unsigned int mode_end = 0; - char *bpp_ptr = NULL, *refresh_ptr = NULL, *extra_ptr = NULL; -@@ -1605,8 +1605,22 @@ bool drm_mode_parse_command_line_for_con - - name = mode_option; - -- if (!isdigit(name[0])) -- return false; -+ /* -+ * This is a bit convoluted. To differentiate between the -+ * named modes and poorly formatted resolutions, we need a -+ * bunch of things: -+ * - We need to make sure that the first character (which -+ * would be our resolution in X) is a digit. -+ * - However, if the X resolution is missing, then we end up -+ * with something like x<yres>, with our first character -+ * being an alpha-numerical character, which would be -+ * considered a named mode. -+ * -+ * If this isn't enough, we should add more heuristics here, -+ * and matching unit-tests. -+ */ -+ if (!isdigit(name[0]) && name[0] != 'x') -+ named_mode = true; - - /* Try to locate the bpp and refresh specifiers, if any */ - bpp_ptr = strchr(name, '-'); -@@ -1617,6 +1631,9 @@ bool drm_mode_parse_command_line_for_con - - refresh_ptr = strchr(name, '@'); - if (refresh_ptr) { -+ if (named_mode) -+ return false; -+ - refresh_off = refresh_ptr - name; - mode->refresh_specified = true; - } -@@ -1633,12 +1650,16 @@ bool drm_mode_parse_command_line_for_con - parse_extras = true; - } - -- ret = drm_mode_parse_cmdline_res_mode(name, mode_end, -- parse_extras, -- connector, -- mode); -- if (ret) -- return false; -+ if (named_mode) { -+ strncpy(mode->name, name, mode_end); -+ } else { -+ ret = drm_mode_parse_cmdline_res_mode(name, mode_end, -+ parse_extras, -+ connector, -+ mode); -+ if (ret) -+ return false; -+ } - mode->specified = true; - - if (bpp_ptr) { -@@ -1666,14 +1687,23 @@ bool drm_mode_parse_command_line_for_con - extra_ptr = refresh_end_ptr; - - if (extra_ptr) { -- int remaining = strlen(name) - (extra_ptr - name); -+ if (!named_mode) { -+ int len = strlen(name) - (extra_ptr - name); - -- /* -- * We still have characters to process, while -- * we shouldn't have any -- */ -- if (remaining > 0) -- return false; -+ ret = drm_mode_parse_cmdline_extra(extra_ptr, len, -+ connector, mode); -+ if (ret) -+ return false; -+ } else { -+ int remaining = strlen(name) - (extra_ptr - name); -+ -+ /* -+ * We still have characters to process, while -+ * we shouldn't have any -+ */ -+ if (remaining > 0) -+ return false; -+ } - } - - return true; ---- a/include/drm/drm_connector.h -+++ b/include/drm/drm_connector.h -@@ -765,6 +765,13 @@ struct drm_connector_funcs { - */ - struct drm_cmdline_mode { - /** -+ * @name: -+ * -+ * Name of the mode. -+ */ -+ char name[DRM_DISPLAY_MODE_LEN]; -+ -+ /** - * @specified: - * - * Has a mode been read from the command-line? |