1079 lines · 33.9 KB · C
RawDownload
// SPDX-License-Identifier: GPL-2.0/* * Copyright (c) 2019 Bootlin * Copyright (c) 2022 Maíra Canal <mairacanal@riseup.net> */ #include <kunit/test.h> #include <drm/drm_connector.h>#include <drm/drm_kunit_helpers.h>#include <drm/drm_modes.h> static const struct drm_connector no_connector = {}; static void drm_test_cmdline_force_e_only(struct kunit *test){	struct drm_cmdline_mode mode = { };	const char *cmdline = "e"; 	KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,									  &no_connector, &mode));	KUNIT_EXPECT_FALSE(test, mode.specified);	KUNIT_EXPECT_FALSE(test, mode.refresh_specified);	KUNIT_EXPECT_FALSE(test, mode.bpp_specified); 	KUNIT_EXPECT_FALSE(test, mode.rb);	KUNIT_EXPECT_FALSE(test, mode.cvt);	KUNIT_EXPECT_FALSE(test, mode.interlace);	KUNIT_EXPECT_FALSE(test, mode.margins);	KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON);} static void drm_test_cmdline_force_D_only_not_digital(struct kunit *test){	struct drm_cmdline_mode mode = { };	const char *cmdline = "D"; 	KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,									  &no_connector, &mode));	KUNIT_EXPECT_FALSE(test, mode.specified);	KUNIT_EXPECT_FALSE(test, mode.refresh_specified);	KUNIT_EXPECT_FALSE(test, mode.bpp_specified); 	KUNIT_EXPECT_FALSE(test, mode.rb);	KUNIT_EXPECT_FALSE(test, mode.cvt);	KUNIT_EXPECT_FALSE(test, mode.interlace);	KUNIT_EXPECT_FALSE(test, mode.margins);	KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON);} static const struct drm_connector connector_hdmi = {	.connector_type	= DRM_MODE_CONNECTOR_HDMIB,}; static void drm_test_cmdline_force_D_only_hdmi(struct kunit *test){	struct drm_cmdline_mode mode = { };	const char *cmdline = "D"; 	KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,									  &connector_hdmi, &mode));	KUNIT_EXPECT_FALSE(test, mode.specified);	KUNIT_EXPECT_FALSE(test, mode.refresh_specified);	KUNIT_EXPECT_FALSE(test, mode.bpp_specified); 	KUNIT_EXPECT_FALSE(test, mode.rb);	KUNIT_EXPECT_FALSE(test, mode.cvt);	KUNIT_EXPECT_FALSE(test, mode.interlace);	KUNIT_EXPECT_FALSE(test, mode.margins);	KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON_DIGITAL);} static const struct drm_connector connector_dvi = {	.connector_type	= DRM_MODE_CONNECTOR_DVII,}; static void drm_test_cmdline_force_D_only_dvi(struct kunit *test){	struct drm_cmdline_mode mode = { };	const char *cmdline = "D"; 	KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,									  &connector_dvi, &mode));	KUNIT_EXPECT_FALSE(test, mode.specified);	KUNIT_EXPECT_FALSE(test, mode.refresh_specified);	KUNIT_EXPECT_FALSE(test, mode.bpp_specified); 	KUNIT_EXPECT_FALSE(test, mode.rb);	KUNIT_EXPECT_FALSE(test, mode.cvt);	KUNIT_EXPECT_FALSE(test, mode.interlace);	KUNIT_EXPECT_FALSE(test, mode.margins);	KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON_DIGITAL);} static void drm_test_cmdline_force_d_only(struct kunit *test){	struct drm_cmdline_mode mode = { };	const char *cmdline = "d"; 	KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,									  &no_connector, &mode));	KUNIT_EXPECT_FALSE(test, mode.specified);	KUNIT_EXPECT_FALSE(test, mode.refresh_specified);	KUNIT_EXPECT_FALSE(test, mode.bpp_specified); 	KUNIT_EXPECT_FALSE(test, mode.rb);	KUNIT_EXPECT_FALSE(test, mode.cvt);	KUNIT_EXPECT_FALSE(test, mode.interlace);	KUNIT_EXPECT_FALSE(test, mode.margins);	KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_OFF);} static void drm_test_cmdline_res(struct kunit *test){	struct drm_cmdline_mode mode = { };	const char *cmdline = "720x480"; 	KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,									  &no_connector, &mode));	KUNIT_EXPECT_TRUE(test, mode.specified);	KUNIT_EXPECT_EQ(test, mode.xres, 720);	KUNIT_EXPECT_EQ(test, mode.yres, 480); 	KUNIT_EXPECT_FALSE(test, mode.refresh_specified); 	KUNIT_EXPECT_FALSE(test, mode.bpp_specified); 	KUNIT_EXPECT_FALSE(test, mode.rb);	KUNIT_EXPECT_FALSE(test, mode.cvt);	KUNIT_EXPECT_FALSE(test, mode.interlace);	KUNIT_EXPECT_FALSE(test, mode.margins);	KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED);} static void drm_test_cmdline_res_vesa(struct kunit *test){	struct drm_cmdline_mode mode = { };	const char *cmdline = "720x480M"; 	KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,									  &no_connector, &mode));	KUNIT_EXPECT_TRUE(test, mode.specified);	KUNIT_EXPECT_EQ(test, mode.xres, 720);	KUNIT_EXPECT_EQ(test, mode.yres, 480); 	KUNIT_EXPECT_FALSE(test, mode.refresh_specified); 	KUNIT_EXPECT_FALSE(test, mode.bpp_specified); 	KUNIT_EXPECT_FALSE(test, mode.rb);	KUNIT_EXPECT_TRUE(test, mode.cvt);	KUNIT_EXPECT_FALSE(test, mode.interlace);	KUNIT_EXPECT_FALSE(test, mode.margins);	KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED);} static void drm_test_cmdline_res_vesa_rblank(struct kunit *test){	struct drm_cmdline_mode mode = { };	const char *cmdline = "720x480MR"; 	KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,									  &no_connector, &mode));	KUNIT_EXPECT_TRUE(test, mode.specified);	KUNIT_EXPECT_EQ(test, mode.xres, 720);	KUNIT_EXPECT_EQ(test, mode.yres, 480); 	KUNIT_EXPECT_FALSE(test, mode.refresh_specified); 	KUNIT_EXPECT_FALSE(test, mode.bpp_specified); 	KUNIT_EXPECT_TRUE(test, mode.rb);	KUNIT_EXPECT_TRUE(test, mode.cvt);	KUNIT_EXPECT_FALSE(test, mode.interlace);	KUNIT_EXPECT_FALSE(test, mode.margins);	KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED);} static void drm_test_cmdline_res_rblank(struct kunit *test){	struct drm_cmdline_mode mode = { };	const char *cmdline = "720x480R"; 	KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,									  &no_connector, &mode));	KUNIT_EXPECT_TRUE(test, mode.specified);	KUNIT_EXPECT_EQ(test, mode.xres, 720);	KUNIT_EXPECT_EQ(test, mode.yres, 480); 	KUNIT_EXPECT_FALSE(test, mode.refresh_specified); 	KUNIT_EXPECT_FALSE(test, mode.bpp_specified); 	KUNIT_EXPECT_TRUE(test, mode.rb);	KUNIT_EXPECT_FALSE(test, mode.cvt);	KUNIT_EXPECT_FALSE(test, mode.interlace);	KUNIT_EXPECT_FALSE(test, mode.margins);	KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED);} static void drm_test_cmdline_res_bpp(struct kunit *test){	struct drm_cmdline_mode mode = { };	const char *cmdline = "720x480-24"; 	KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,									  &no_connector, &mode));	KUNIT_EXPECT_TRUE(test, mode.specified);	KUNIT_EXPECT_EQ(test, mode.xres, 720);	KUNIT_EXPECT_EQ(test, mode.yres, 480); 	KUNIT_EXPECT_FALSE(test, mode.refresh_specified); 	KUNIT_EXPECT_TRUE(test, mode.bpp_specified);	KUNIT_EXPECT_EQ(test, mode.bpp, 24); 	KUNIT_EXPECT_FALSE(test, mode.rb);	KUNIT_EXPECT_FALSE(test, mode.cvt);	KUNIT_EXPECT_FALSE(test, mode.interlace);	KUNIT_EXPECT_FALSE(test, mode.margins);	KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED);} static void drm_test_cmdline_res_refresh(struct kunit *test){	struct drm_cmdline_mode mode = { };	const char *cmdline = "720x480@60"; 	KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,									  &no_connector, &mode));	KUNIT_EXPECT_TRUE(test, mode.specified);	KUNIT_EXPECT_EQ(test, mode.xres, 720);	KUNIT_EXPECT_EQ(test, mode.yres, 480); 	KUNIT_EXPECT_TRUE(test, mode.refresh_specified);	KUNIT_EXPECT_EQ(test, mode.refresh, 60); 	KUNIT_EXPECT_FALSE(test, mode.bpp_specified); 	KUNIT_EXPECT_FALSE(test, mode.rb);	KUNIT_EXPECT_FALSE(test, mode.cvt);	KUNIT_EXPECT_FALSE(test, mode.interlace);	KUNIT_EXPECT_FALSE(test, mode.margins);	KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED);} static void drm_test_cmdline_res_bpp_refresh(struct kunit *test){	struct drm_cmdline_mode mode = { };	const char *cmdline = "720x480-24@60"; 	KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,									  &no_connector, &mode));	KUNIT_EXPECT_TRUE(test, mode.specified);	KUNIT_EXPECT_EQ(test, mode.xres, 720);	KUNIT_EXPECT_EQ(test, mode.yres, 480); 	KUNIT_EXPECT_TRUE(test, mode.refresh_specified);	KUNIT_EXPECT_EQ(test, mode.refresh, 60); 	KUNIT_EXPECT_TRUE(test, mode.bpp_specified);	KUNIT_EXPECT_EQ(test, mode.bpp, 24); 	KUNIT_EXPECT_FALSE(test, mode.rb);	KUNIT_EXPECT_FALSE(test, mode.cvt);	KUNIT_EXPECT_FALSE(test, mode.interlace);	KUNIT_EXPECT_FALSE(test, mode.margins);	KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED);} static void drm_test_cmdline_res_bpp_refresh_interlaced(struct kunit *test){	struct drm_cmdline_mode mode = { };	const char *cmdline = "720x480-24@60i"; 	KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,									  &no_connector, &mode));	KUNIT_EXPECT_TRUE(test, mode.specified);	KUNIT_EXPECT_EQ(test, mode.xres, 720);	KUNIT_EXPECT_EQ(test, mode.yres, 480); 	KUNIT_EXPECT_TRUE(test, mode.refresh_specified);	KUNIT_EXPECT_EQ(test, mode.refresh, 60); 	KUNIT_EXPECT_TRUE(test, mode.bpp_specified);	KUNIT_EXPECT_EQ(test, mode.bpp, 24); 	KUNIT_EXPECT_FALSE(test, mode.rb);	KUNIT_EXPECT_FALSE(test, mode.cvt);	KUNIT_EXPECT_TRUE(test, mode.interlace);	KUNIT_EXPECT_FALSE(test, mode.margins);	KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED);} static void drm_test_cmdline_res_bpp_refresh_margins(struct kunit *test){	struct drm_cmdline_mode mode = { };	const char *cmdline = "720x480-24@60m"; 	KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,									  &no_connector, &mode));	KUNIT_EXPECT_TRUE(test, mode.specified);	KUNIT_EXPECT_EQ(test, mode.xres, 720);	KUNIT_EXPECT_EQ(test, mode.yres, 480); 	KUNIT_EXPECT_TRUE(test, mode.refresh_specified);	KUNIT_EXPECT_EQ(test, mode.refresh, 60); 	KUNIT_EXPECT_TRUE(test, mode.bpp_specified);	KUNIT_EXPECT_EQ(test, mode.bpp, 24); 	KUNIT_EXPECT_FALSE(test, mode.rb);	KUNIT_EXPECT_FALSE(test, mode.cvt);	KUNIT_EXPECT_FALSE(test, mode.interlace);	KUNIT_EXPECT_TRUE(test, mode.margins);	KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED);} static void drm_test_cmdline_res_bpp_refresh_force_off(struct kunit *test){	struct drm_cmdline_mode mode = { };	const char *cmdline = "720x480-24@60d"; 	KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,									  &no_connector, &mode));	KUNIT_EXPECT_TRUE(test, mode.specified);	KUNIT_EXPECT_EQ(test, mode.xres, 720);	KUNIT_EXPECT_EQ(test, mode.yres, 480); 	KUNIT_EXPECT_TRUE(test, mode.refresh_specified);	KUNIT_EXPECT_EQ(test, mode.refresh, 60); 	KUNIT_EXPECT_TRUE(test, mode.bpp_specified);	KUNIT_EXPECT_EQ(test, mode.bpp, 24); 	KUNIT_EXPECT_FALSE(test, mode.rb);	KUNIT_EXPECT_FALSE(test, mode.cvt);	KUNIT_EXPECT_FALSE(test, mode.interlace);	KUNIT_EXPECT_FALSE(test, mode.margins);	KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_OFF);} static void drm_test_cmdline_res_bpp_refresh_force_on(struct kunit *test){	struct drm_cmdline_mode mode = { };	const char *cmdline = "720x480-24@60e"; 	KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,									  &no_connector, &mode));	KUNIT_EXPECT_TRUE(test, mode.specified);	KUNIT_EXPECT_EQ(test, mode.xres, 720);	KUNIT_EXPECT_EQ(test, mode.yres, 480); 	KUNIT_EXPECT_TRUE(test, mode.refresh_specified);	KUNIT_EXPECT_EQ(test, mode.refresh, 60); 	KUNIT_EXPECT_TRUE(test, mode.bpp_specified);	KUNIT_EXPECT_EQ(test, mode.bpp, 24); 	KUNIT_EXPECT_FALSE(test, mode.rb);	KUNIT_EXPECT_FALSE(test, mode.cvt);	KUNIT_EXPECT_FALSE(test, mode.interlace);	KUNIT_EXPECT_FALSE(test, mode.margins);	KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON);} static void drm_test_cmdline_res_bpp_refresh_force_on_analog(struct kunit *test){	struct drm_cmdline_mode mode = { };	const char *cmdline = "720x480-24@60D"; 	KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,									  &no_connector, &mode));	KUNIT_EXPECT_TRUE(test, mode.specified);	KUNIT_EXPECT_EQ(test, mode.xres, 720);	KUNIT_EXPECT_EQ(test, mode.yres, 480); 	KUNIT_EXPECT_TRUE(test, mode.refresh_specified);	KUNIT_EXPECT_EQ(test, mode.refresh, 60); 	KUNIT_EXPECT_TRUE(test, mode.bpp_specified);	KUNIT_EXPECT_EQ(test, mode.bpp, 24); 	KUNIT_EXPECT_FALSE(test, mode.rb);	KUNIT_EXPECT_FALSE(test, mode.cvt);	KUNIT_EXPECT_FALSE(test, mode.interlace);	KUNIT_EXPECT_FALSE(test, mode.margins);	KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON);} static void drm_test_cmdline_res_bpp_refresh_force_on_digital(struct kunit *test){	struct drm_cmdline_mode mode = { };	static const struct drm_connector connector = {		.connector_type = DRM_MODE_CONNECTOR_DVII,	};	const char *cmdline = "720x480-24@60D"; 	KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,									  &connector, &mode));	KUNIT_EXPECT_TRUE(test, mode.specified);	KUNIT_EXPECT_EQ(test, mode.xres, 720);	KUNIT_EXPECT_EQ(test, mode.yres, 480); 	KUNIT_EXPECT_TRUE(test, mode.refresh_specified);	KUNIT_EXPECT_EQ(test, mode.refresh, 60); 	KUNIT_EXPECT_TRUE(test, mode.bpp_specified);	KUNIT_EXPECT_EQ(test, mode.bpp, 24); 	KUNIT_EXPECT_FALSE(test, mode.rb);	KUNIT_EXPECT_FALSE(test, mode.cvt);	KUNIT_EXPECT_FALSE(test, mode.interlace);	KUNIT_EXPECT_FALSE(test, mode.margins);	KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON_DIGITAL);} static void drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on(struct kunit *test){	struct drm_cmdline_mode mode = { };	const char *cmdline = "720x480-24@60ime"; 	KUNIT_EXPECT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,									  &no_connector, &mode));	KUNIT_EXPECT_TRUE(test, mode.specified);	KUNIT_EXPECT_EQ(test, mode.xres, 720);	KUNIT_EXPECT_EQ(test, mode.yres, 480); 	KUNIT_EXPECT_TRUE(test, mode.refresh_specified);	KUNIT_EXPECT_EQ(test, mode.refresh, 60); 	KUNIT_EXPECT_TRUE(test, mode.bpp_specified);	KUNIT_EXPECT_EQ(test, mode.bpp, 24); 	KUNIT_EXPECT_FALSE(test, mode.rb);	KUNIT_EXPECT_FALSE(test, mode.cvt);	KUNIT_EXPECT_TRUE(test, mode.interlace);	KUNIT_EXPECT_TRUE(test, mode.margins);	KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON);} static void drm_test_cmdline_res_margins_force_on(struct kunit *test){	struct drm_cmdline_mode mode = { };	const char *cmdline = "720x480me"; 	KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,									  &no_connector, &mode));	KUNIT_EXPECT_TRUE(test, mode.specified);	KUNIT_EXPECT_EQ(test, mode.xres, 720);	KUNIT_EXPECT_EQ(test, mode.yres, 480); 	KUNIT_EXPECT_FALSE(test, mode.refresh_specified); 	KUNIT_EXPECT_FALSE(test, mode.bpp_specified); 	KUNIT_EXPECT_FALSE(test, mode.rb);	KUNIT_EXPECT_FALSE(test, mode.cvt);	KUNIT_EXPECT_FALSE(test, mode.interlace);	KUNIT_EXPECT_TRUE(test, mode.margins);	KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON);} static void drm_test_cmdline_res_vesa_margins(struct kunit *test){	struct drm_cmdline_mode mode = { };	const char *cmdline = "720x480Mm"; 	KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,									  &no_connector, &mode));	KUNIT_EXPECT_TRUE(test, mode.specified);	KUNIT_EXPECT_EQ(test, mode.xres, 720);	KUNIT_EXPECT_EQ(test, mode.yres, 480); 	KUNIT_EXPECT_FALSE(test, mode.refresh_specified); 	KUNIT_EXPECT_FALSE(test, mode.bpp_specified); 	KUNIT_EXPECT_FALSE(test, mode.rb);	KUNIT_EXPECT_TRUE(test, mode.cvt);	KUNIT_EXPECT_FALSE(test, mode.interlace);	KUNIT_EXPECT_TRUE(test, mode.margins);	KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED);} static void drm_test_cmdline_name(struct kunit *test){	struct drm_cmdline_mode mode = { };	const char *cmdline = "NTSC"; 	KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,									  &no_connector, &mode));	KUNIT_EXPECT_STREQ(test, mode.name, "NTSC");	KUNIT_EXPECT_FALSE(test, mode.refresh_specified);	KUNIT_EXPECT_FALSE(test, mode.bpp_specified);} static void drm_test_cmdline_name_bpp(struct kunit *test){	struct drm_cmdline_mode mode = { };

Lines 1–500 of 1079.