Skip to content

Commit

Permalink
drm/selftests: modes: Add more unit tests for the cmdline parser
Browse files Browse the repository at this point in the history
Let's add some unit tests for the recent bugs we just fixed.

Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
Tested-by: Thomas Graichen <thomas.graichen@gmail.com>
Reviewed-by: Jernej Skrabec <jernej.skrabec@siol.net>
Signed-off-by: Maxime Ripard <mripard@kernel.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20190827115850.25731-4-mripard@kernel.org
  • Loading branch information
Maxime Ripard authored and Maxime Ripard committed Aug 30, 2019
1 parent 3764137 commit 424c38a
Show file tree
Hide file tree
Showing 2 changed files with 137 additions and 0 deletions.
7 changes: 7 additions & 0 deletions drivers/gpu/drm/selftests/drm_cmdline_selftests.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,13 @@

#define cmdline_test(test) selftest(test, test)

cmdline_test(drm_cmdline_test_force_d_only)
cmdline_test(drm_cmdline_test_force_D_only_dvi)
cmdline_test(drm_cmdline_test_force_D_only_hdmi)
cmdline_test(drm_cmdline_test_force_D_only_not_digital)
cmdline_test(drm_cmdline_test_force_e_only)
cmdline_test(drm_cmdline_test_margin_only)
cmdline_test(drm_cmdline_test_interlace_only)
cmdline_test(drm_cmdline_test_res)
cmdline_test(drm_cmdline_test_res_missing_x)
cmdline_test(drm_cmdline_test_res_missing_y)
Expand Down
130 changes: 130 additions & 0 deletions drivers/gpu/drm/selftests/test-drm_cmdline_parser.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,136 @@

static const struct drm_connector no_connector = {};

static int drm_cmdline_test_force_e_only(void *ignored)
{
struct drm_cmdline_mode mode = { };

FAIL_ON(!drm_mode_parse_command_line_for_connector("e",
&no_connector,
&mode));
FAIL_ON(mode.specified);
FAIL_ON(mode.refresh_specified);
FAIL_ON(mode.bpp_specified);

FAIL_ON(mode.rb);
FAIL_ON(mode.cvt);
FAIL_ON(mode.interlace);
FAIL_ON(mode.margins);
FAIL_ON(mode.force != DRM_FORCE_ON);

return 0;
}

static int drm_cmdline_test_force_D_only_not_digital(void *ignored)
{
struct drm_cmdline_mode mode = { };

FAIL_ON(!drm_mode_parse_command_line_for_connector("D",
&no_connector,
&mode));
FAIL_ON(mode.specified);
FAIL_ON(mode.refresh_specified);
FAIL_ON(mode.bpp_specified);

FAIL_ON(mode.rb);
FAIL_ON(mode.cvt);
FAIL_ON(mode.interlace);
FAIL_ON(mode.margins);
FAIL_ON(mode.force != DRM_FORCE_ON);

return 0;
}

static const struct drm_connector connector_hdmi = {
.connector_type = DRM_MODE_CONNECTOR_HDMIB,
};

static int drm_cmdline_test_force_D_only_hdmi(void *ignored)
{
struct drm_cmdline_mode mode = { };

FAIL_ON(!drm_mode_parse_command_line_for_connector("D",
&connector_hdmi,
&mode));
FAIL_ON(mode.specified);
FAIL_ON(mode.refresh_specified);
FAIL_ON(mode.bpp_specified);

FAIL_ON(mode.rb);
FAIL_ON(mode.cvt);
FAIL_ON(mode.interlace);
FAIL_ON(mode.margins);
FAIL_ON(mode.force != DRM_FORCE_ON_DIGITAL);

return 0;
}

static const struct drm_connector connector_dvi = {
.connector_type = DRM_MODE_CONNECTOR_DVII,
};

static int drm_cmdline_test_force_D_only_dvi(void *ignored)
{
struct drm_cmdline_mode mode = { };

FAIL_ON(!drm_mode_parse_command_line_for_connector("D",
&connector_dvi,
&mode));
FAIL_ON(mode.specified);
FAIL_ON(mode.refresh_specified);
FAIL_ON(mode.bpp_specified);

FAIL_ON(mode.rb);
FAIL_ON(mode.cvt);
FAIL_ON(mode.interlace);
FAIL_ON(mode.margins);
FAIL_ON(mode.force != DRM_FORCE_ON_DIGITAL);

return 0;
}

static int drm_cmdline_test_force_d_only(void *ignored)
{
struct drm_cmdline_mode mode = { };

FAIL_ON(!drm_mode_parse_command_line_for_connector("d",
&no_connector,
&mode));
FAIL_ON(mode.specified);
FAIL_ON(mode.refresh_specified);
FAIL_ON(mode.bpp_specified);

FAIL_ON(mode.rb);
FAIL_ON(mode.cvt);
FAIL_ON(mode.interlace);
FAIL_ON(mode.margins);
FAIL_ON(mode.force != DRM_FORCE_OFF);

return 0;
}

static int drm_cmdline_test_margin_only(void *ignored)
{
struct drm_cmdline_mode mode = { };

FAIL_ON(drm_mode_parse_command_line_for_connector("m",
&no_connector,
&mode));

return 0;
}

static int drm_cmdline_test_interlace_only(void *ignored)
{
struct drm_cmdline_mode mode = { };

FAIL_ON(drm_mode_parse_command_line_for_connector("i",
&no_connector,
&mode));

return 0;
}

static int drm_cmdline_test_res(void *ignored)
{
struct drm_cmdline_mode mode = { };
Expand Down

0 comments on commit 424c38a

Please sign in to comment.