19f0527d2SMaíra Canal // SPDX-License-Identifier: GPL-2.0
29f0527d2SMaíra Canal /*
39f0527d2SMaíra Canal * Copyright (c) 2019 Bootlin
49f0527d2SMaíra Canal * Copyright (c) 2022 Maíra Canal <[email protected]>
59f0527d2SMaíra Canal */
69f0527d2SMaíra Canal
79f0527d2SMaíra Canal #include <kunit/test.h>
89f0527d2SMaíra Canal
99f0527d2SMaíra Canal #include <drm/drm_connector.h>
10*70f29ca3SMaxime Ripard #include <drm/drm_kunit_helpers.h>
119f0527d2SMaíra Canal #include <drm/drm_modes.h>
129f0527d2SMaíra Canal
139f0527d2SMaíra Canal static const struct drm_connector no_connector = {};
149f0527d2SMaíra Canal
drm_test_cmdline_force_e_only(struct kunit * test)15961bcdf9SMaíra Canal static void drm_test_cmdline_force_e_only(struct kunit *test)
169f0527d2SMaíra Canal {
179f0527d2SMaíra Canal struct drm_cmdline_mode mode = { };
189f0527d2SMaíra Canal const char *cmdline = "e";
199f0527d2SMaíra Canal
20169a32b7SMichał Winiarski KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,
219f0527d2SMaíra Canal &no_connector, &mode));
229f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.specified);
239f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.refresh_specified);
249f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.bpp_specified);
259f0527d2SMaíra Canal
269f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.rb);
279f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.cvt);
289f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.interlace);
299f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.margins);
309f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON);
319f0527d2SMaíra Canal }
329f0527d2SMaíra Canal
drm_test_cmdline_force_D_only_not_digital(struct kunit * test)33961bcdf9SMaíra Canal static void drm_test_cmdline_force_D_only_not_digital(struct kunit *test)
349f0527d2SMaíra Canal {
359f0527d2SMaíra Canal struct drm_cmdline_mode mode = { };
369f0527d2SMaíra Canal const char *cmdline = "D";
379f0527d2SMaíra Canal
38169a32b7SMichał Winiarski KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,
399f0527d2SMaíra Canal &no_connector, &mode));
409f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.specified);
419f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.refresh_specified);
429f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.bpp_specified);
439f0527d2SMaíra Canal
449f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.rb);
459f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.cvt);
469f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.interlace);
479f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.margins);
489f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON);
499f0527d2SMaíra Canal }
509f0527d2SMaíra Canal
519f0527d2SMaíra Canal static const struct drm_connector connector_hdmi = {
529f0527d2SMaíra Canal .connector_type = DRM_MODE_CONNECTOR_HDMIB,
539f0527d2SMaíra Canal };
549f0527d2SMaíra Canal
drm_test_cmdline_force_D_only_hdmi(struct kunit * test)55961bcdf9SMaíra Canal static void drm_test_cmdline_force_D_only_hdmi(struct kunit *test)
569f0527d2SMaíra Canal {
579f0527d2SMaíra Canal struct drm_cmdline_mode mode = { };
589f0527d2SMaíra Canal const char *cmdline = "D";
599f0527d2SMaíra Canal
60169a32b7SMichał Winiarski KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,
619f0527d2SMaíra Canal &connector_hdmi, &mode));
629f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.specified);
639f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.refresh_specified);
649f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.bpp_specified);
659f0527d2SMaíra Canal
669f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.rb);
679f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.cvt);
689f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.interlace);
699f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.margins);
709f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON_DIGITAL);
719f0527d2SMaíra Canal }
729f0527d2SMaíra Canal
739f0527d2SMaíra Canal static const struct drm_connector connector_dvi = {
749f0527d2SMaíra Canal .connector_type = DRM_MODE_CONNECTOR_DVII,
759f0527d2SMaíra Canal };
769f0527d2SMaíra Canal
drm_test_cmdline_force_D_only_dvi(struct kunit * test)77961bcdf9SMaíra Canal static void drm_test_cmdline_force_D_only_dvi(struct kunit *test)
789f0527d2SMaíra Canal {
799f0527d2SMaíra Canal struct drm_cmdline_mode mode = { };
809f0527d2SMaíra Canal const char *cmdline = "D";
819f0527d2SMaíra Canal
82169a32b7SMichał Winiarski KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,
839f0527d2SMaíra Canal &connector_dvi, &mode));
849f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.specified);
859f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.refresh_specified);
869f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.bpp_specified);
879f0527d2SMaíra Canal
889f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.rb);
899f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.cvt);
909f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.interlace);
919f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.margins);
929f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON_DIGITAL);
939f0527d2SMaíra Canal }
949f0527d2SMaíra Canal
drm_test_cmdline_force_d_only(struct kunit * test)95961bcdf9SMaíra Canal static void drm_test_cmdline_force_d_only(struct kunit *test)
969f0527d2SMaíra Canal {
979f0527d2SMaíra Canal struct drm_cmdline_mode mode = { };
989f0527d2SMaíra Canal const char *cmdline = "d";
999f0527d2SMaíra Canal
100169a32b7SMichał Winiarski KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,
1019f0527d2SMaíra Canal &no_connector, &mode));
1029f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.specified);
1039f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.refresh_specified);
1049f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.bpp_specified);
1059f0527d2SMaíra Canal
1069f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.rb);
1079f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.cvt);
1089f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.interlace);
1099f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.margins);
1109f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_OFF);
1119f0527d2SMaíra Canal }
1129f0527d2SMaíra Canal
drm_test_cmdline_res(struct kunit * test)113961bcdf9SMaíra Canal static void drm_test_cmdline_res(struct kunit *test)
1149f0527d2SMaíra Canal {
1159f0527d2SMaíra Canal struct drm_cmdline_mode mode = { };
1169f0527d2SMaíra Canal const char *cmdline = "720x480";
1179f0527d2SMaíra Canal
118169a32b7SMichał Winiarski KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,
1199f0527d2SMaíra Canal &no_connector, &mode));
1209f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.specified);
1219f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.xres, 720);
1229f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.yres, 480);
1239f0527d2SMaíra Canal
1249f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.refresh_specified);
1259f0527d2SMaíra Canal
1269f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.bpp_specified);
1279f0527d2SMaíra Canal
1289f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.rb);
1299f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.cvt);
1309f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.interlace);
1319f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.margins);
1329f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED);
1339f0527d2SMaíra Canal }
1349f0527d2SMaíra Canal
drm_test_cmdline_res_vesa(struct kunit * test)135961bcdf9SMaíra Canal static void drm_test_cmdline_res_vesa(struct kunit *test)
1369f0527d2SMaíra Canal {
1379f0527d2SMaíra Canal struct drm_cmdline_mode mode = { };
1389f0527d2SMaíra Canal const char *cmdline = "720x480M";
1399f0527d2SMaíra Canal
140169a32b7SMichał Winiarski KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,
1419f0527d2SMaíra Canal &no_connector, &mode));
1429f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.specified);
1439f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.xres, 720);
1449f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.yres, 480);
1459f0527d2SMaíra Canal
1469f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.refresh_specified);
1479f0527d2SMaíra Canal
1489f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.bpp_specified);
1499f0527d2SMaíra Canal
1509f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.rb);
1519f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.cvt);
1529f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.interlace);
1539f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.margins);
1549f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED);
1559f0527d2SMaíra Canal }
1569f0527d2SMaíra Canal
drm_test_cmdline_res_vesa_rblank(struct kunit * test)157961bcdf9SMaíra Canal static void drm_test_cmdline_res_vesa_rblank(struct kunit *test)
1589f0527d2SMaíra Canal {
1599f0527d2SMaíra Canal struct drm_cmdline_mode mode = { };
1609f0527d2SMaíra Canal const char *cmdline = "720x480MR";
1619f0527d2SMaíra Canal
162169a32b7SMichał Winiarski KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,
1639f0527d2SMaíra Canal &no_connector, &mode));
1649f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.specified);
1659f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.xres, 720);
1669f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.yres, 480);
1679f0527d2SMaíra Canal
1689f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.refresh_specified);
1699f0527d2SMaíra Canal
1709f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.bpp_specified);
1719f0527d2SMaíra Canal
1729f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.rb);
1739f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.cvt);
1749f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.interlace);
1759f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.margins);
1769f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED);
1779f0527d2SMaíra Canal }
1789f0527d2SMaíra Canal
drm_test_cmdline_res_rblank(struct kunit * test)179961bcdf9SMaíra Canal static void drm_test_cmdline_res_rblank(struct kunit *test)
1809f0527d2SMaíra Canal {
1819f0527d2SMaíra Canal struct drm_cmdline_mode mode = { };
1829f0527d2SMaíra Canal const char *cmdline = "720x480R";
1839f0527d2SMaíra Canal
184169a32b7SMichał Winiarski KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,
1859f0527d2SMaíra Canal &no_connector, &mode));
1869f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.specified);
1879f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.xres, 720);
1889f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.yres, 480);
1899f0527d2SMaíra Canal
1909f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.refresh_specified);
1919f0527d2SMaíra Canal
1929f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.bpp_specified);
1939f0527d2SMaíra Canal
1949f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.rb);
1959f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.cvt);
1969f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.interlace);
1979f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.margins);
1989f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED);
1999f0527d2SMaíra Canal }
2009f0527d2SMaíra Canal
drm_test_cmdline_res_bpp(struct kunit * test)201961bcdf9SMaíra Canal static void drm_test_cmdline_res_bpp(struct kunit *test)
2029f0527d2SMaíra Canal {
2039f0527d2SMaíra Canal struct drm_cmdline_mode mode = { };
2049f0527d2SMaíra Canal const char *cmdline = "720x480-24";
2059f0527d2SMaíra Canal
206169a32b7SMichał Winiarski KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,
2079f0527d2SMaíra Canal &no_connector, &mode));
2089f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.specified);
2099f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.xres, 720);
2109f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.yres, 480);
2119f0527d2SMaíra Canal
2129f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.refresh_specified);
2139f0527d2SMaíra Canal
2149f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.bpp_specified);
2159f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.bpp, 24);
2169f0527d2SMaíra Canal
2179f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.rb);
2189f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.cvt);
2199f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.interlace);
2209f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.margins);
2219f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED);
2229f0527d2SMaíra Canal }
2239f0527d2SMaíra Canal
drm_test_cmdline_res_refresh(struct kunit * test)224961bcdf9SMaíra Canal static void drm_test_cmdline_res_refresh(struct kunit *test)
2259f0527d2SMaíra Canal {
2269f0527d2SMaíra Canal struct drm_cmdline_mode mode = { };
2279f0527d2SMaíra Canal const char *cmdline = "720x480@60";
2289f0527d2SMaíra Canal
229169a32b7SMichał Winiarski KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,
2309f0527d2SMaíra Canal &no_connector, &mode));
2319f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.specified);
2329f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.xres, 720);
2339f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.yres, 480);
2349f0527d2SMaíra Canal
2359f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.refresh_specified);
2369f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.refresh, 60);
2379f0527d2SMaíra Canal
2389f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.bpp_specified);
2399f0527d2SMaíra Canal
2409f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.rb);
2419f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.cvt);
2429f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.interlace);
2439f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.margins);
2449f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED);
2459f0527d2SMaíra Canal }
2469f0527d2SMaíra Canal
drm_test_cmdline_res_bpp_refresh(struct kunit * test)247961bcdf9SMaíra Canal static void drm_test_cmdline_res_bpp_refresh(struct kunit *test)
2489f0527d2SMaíra Canal {
2499f0527d2SMaíra Canal struct drm_cmdline_mode mode = { };
2509f0527d2SMaíra Canal const char *cmdline = "720x480-24@60";
2519f0527d2SMaíra Canal
252169a32b7SMichał Winiarski KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,
2539f0527d2SMaíra Canal &no_connector, &mode));
2549f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.specified);
2559f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.xres, 720);
2569f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.yres, 480);
2579f0527d2SMaíra Canal
2589f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.refresh_specified);
2599f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.refresh, 60);
2609f0527d2SMaíra Canal
2619f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.bpp_specified);
2629f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.bpp, 24);
2639f0527d2SMaíra Canal
2649f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.rb);
2659f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.cvt);
2669f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.interlace);
2679f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.margins);
2689f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED);
2699f0527d2SMaíra Canal }
2709f0527d2SMaíra Canal
drm_test_cmdline_res_bpp_refresh_interlaced(struct kunit * test)271961bcdf9SMaíra Canal static void drm_test_cmdline_res_bpp_refresh_interlaced(struct kunit *test)
2729f0527d2SMaíra Canal {
2739f0527d2SMaíra Canal struct drm_cmdline_mode mode = { };
2749f0527d2SMaíra Canal const char *cmdline = "720x480-24@60i";
2759f0527d2SMaíra Canal
276169a32b7SMichał Winiarski KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,
2779f0527d2SMaíra Canal &no_connector, &mode));
2789f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.specified);
2799f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.xres, 720);
2809f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.yres, 480);
2819f0527d2SMaíra Canal
2829f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.refresh_specified);
2839f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.refresh, 60);
2849f0527d2SMaíra Canal
2859f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.bpp_specified);
2869f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.bpp, 24);
2879f0527d2SMaíra Canal
2889f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.rb);
2899f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.cvt);
2909f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.interlace);
2919f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.margins);
2929f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED);
2939f0527d2SMaíra Canal }
2949f0527d2SMaíra Canal
drm_test_cmdline_res_bpp_refresh_margins(struct kunit * test)295961bcdf9SMaíra Canal static void drm_test_cmdline_res_bpp_refresh_margins(struct kunit *test)
2969f0527d2SMaíra Canal {
2979f0527d2SMaíra Canal struct drm_cmdline_mode mode = { };
2989f0527d2SMaíra Canal const char *cmdline = "720x480-24@60m";
2999f0527d2SMaíra Canal
300169a32b7SMichał Winiarski KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,
3019f0527d2SMaíra Canal &no_connector, &mode));
3029f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.specified);
3039f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.xres, 720);
3049f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.yres, 480);
3059f0527d2SMaíra Canal
3069f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.refresh_specified);
3079f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.refresh, 60);
3089f0527d2SMaíra Canal
3099f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.bpp_specified);
3109f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.bpp, 24);
3119f0527d2SMaíra Canal
3129f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.rb);
3139f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.cvt);
3149f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.interlace);
3159f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.margins);
3169f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED);
3179f0527d2SMaíra Canal }
3189f0527d2SMaíra Canal
drm_test_cmdline_res_bpp_refresh_force_off(struct kunit * test)319961bcdf9SMaíra Canal static void drm_test_cmdline_res_bpp_refresh_force_off(struct kunit *test)
3209f0527d2SMaíra Canal {
3219f0527d2SMaíra Canal struct drm_cmdline_mode mode = { };
3229f0527d2SMaíra Canal const char *cmdline = "720x480-24@60d";
3239f0527d2SMaíra Canal
324169a32b7SMichał Winiarski KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,
3259f0527d2SMaíra Canal &no_connector, &mode));
3269f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.specified);
3279f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.xres, 720);
3289f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.yres, 480);
3299f0527d2SMaíra Canal
3309f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.refresh_specified);
3319f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.refresh, 60);
3329f0527d2SMaíra Canal
3339f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.bpp_specified);
3349f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.bpp, 24);
3359f0527d2SMaíra Canal
3369f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.rb);
3379f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.cvt);
3389f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.interlace);
3399f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.margins);
3409f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_OFF);
3419f0527d2SMaíra Canal }
3429f0527d2SMaíra Canal
drm_test_cmdline_res_bpp_refresh_force_on(struct kunit * test)343961bcdf9SMaíra Canal static void drm_test_cmdline_res_bpp_refresh_force_on(struct kunit *test)
3449f0527d2SMaíra Canal {
3459f0527d2SMaíra Canal struct drm_cmdline_mode mode = { };
3469f0527d2SMaíra Canal const char *cmdline = "720x480-24@60e";
3479f0527d2SMaíra Canal
348169a32b7SMichał Winiarski KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,
3499f0527d2SMaíra Canal &no_connector, &mode));
3509f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.specified);
3519f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.xres, 720);
3529f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.yres, 480);
3539f0527d2SMaíra Canal
3549f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.refresh_specified);
3559f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.refresh, 60);
3569f0527d2SMaíra Canal
3579f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.bpp_specified);
3589f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.bpp, 24);
3599f0527d2SMaíra Canal
3609f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.rb);
3619f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.cvt);
3629f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.interlace);
3639f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.margins);
3649f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON);
3659f0527d2SMaíra Canal }
3669f0527d2SMaíra Canal
drm_test_cmdline_res_bpp_refresh_force_on_analog(struct kunit * test)367961bcdf9SMaíra Canal static void drm_test_cmdline_res_bpp_refresh_force_on_analog(struct kunit *test)
3689f0527d2SMaíra Canal {
3699f0527d2SMaíra Canal struct drm_cmdline_mode mode = { };
3709f0527d2SMaíra Canal const char *cmdline = "720x480-24@60D";
3719f0527d2SMaíra Canal
372169a32b7SMichał Winiarski KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,
3739f0527d2SMaíra Canal &no_connector, &mode));
3749f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.specified);
3759f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.xres, 720);
3769f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.yres, 480);
3779f0527d2SMaíra Canal
3789f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.refresh_specified);
3799f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.refresh, 60);
3809f0527d2SMaíra Canal
3819f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.bpp_specified);
3829f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.bpp, 24);
3839f0527d2SMaíra Canal
3849f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.rb);
3859f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.cvt);
3869f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.interlace);
3879f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.margins);
3889f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON);
3899f0527d2SMaíra Canal }
3909f0527d2SMaíra Canal
drm_test_cmdline_res_bpp_refresh_force_on_digital(struct kunit * test)391961bcdf9SMaíra Canal static void drm_test_cmdline_res_bpp_refresh_force_on_digital(struct kunit *test)
3929f0527d2SMaíra Canal {
3939f0527d2SMaíra Canal struct drm_cmdline_mode mode = { };
3949f0527d2SMaíra Canal static const struct drm_connector connector = {
3959f0527d2SMaíra Canal .connector_type = DRM_MODE_CONNECTOR_DVII,
3969f0527d2SMaíra Canal };
3979f0527d2SMaíra Canal const char *cmdline = "720x480-24@60D";
3989f0527d2SMaíra Canal
399169a32b7SMichał Winiarski KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,
4009f0527d2SMaíra Canal &connector, &mode));
4019f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.specified);
4029f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.xres, 720);
4039f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.yres, 480);
4049f0527d2SMaíra Canal
4059f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.refresh_specified);
4069f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.refresh, 60);
4079f0527d2SMaíra Canal
4089f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.bpp_specified);
4099f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.bpp, 24);
4109f0527d2SMaíra Canal
4119f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.rb);
4129f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.cvt);
4139f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.interlace);
4149f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.margins);
4159f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON_DIGITAL);
4169f0527d2SMaíra Canal }
4179f0527d2SMaíra Canal
drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on(struct kunit * test)418961bcdf9SMaíra Canal static void drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on(struct kunit *test)
4199f0527d2SMaíra Canal {
4209f0527d2SMaíra Canal struct drm_cmdline_mode mode = { };
4219f0527d2SMaíra Canal const char *cmdline = "720x480-24@60ime";
4229f0527d2SMaíra Canal
4239f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,
4249f0527d2SMaíra Canal &no_connector, &mode));
4259f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.specified);
4269f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.xres, 720);
4279f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.yres, 480);
4289f0527d2SMaíra Canal
4299f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.refresh_specified);
4309f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.refresh, 60);
4319f0527d2SMaíra Canal
4329f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.bpp_specified);
4339f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.bpp, 24);
4349f0527d2SMaíra Canal
4359f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.rb);
4369f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.cvt);
4379f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.interlace);
4389f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.margins);
4399f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON);
4409f0527d2SMaíra Canal }
4419f0527d2SMaíra Canal
drm_test_cmdline_res_margins_force_on(struct kunit * test)442961bcdf9SMaíra Canal static void drm_test_cmdline_res_margins_force_on(struct kunit *test)
4439f0527d2SMaíra Canal {
4449f0527d2SMaíra Canal struct drm_cmdline_mode mode = { };
4459f0527d2SMaíra Canal const char *cmdline = "720x480me";
4469f0527d2SMaíra Canal
447169a32b7SMichał Winiarski KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,
4489f0527d2SMaíra Canal &no_connector, &mode));
4499f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.specified);
4509f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.xres, 720);
4519f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.yres, 480);
4529f0527d2SMaíra Canal
4539f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.refresh_specified);
4549f0527d2SMaíra Canal
4559f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.bpp_specified);
4569f0527d2SMaíra Canal
4579f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.rb);
4589f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.cvt);
4599f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.interlace);
4609f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.margins);
4619f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON);
4629f0527d2SMaíra Canal }
4639f0527d2SMaíra Canal
drm_test_cmdline_res_vesa_margins(struct kunit * test)464961bcdf9SMaíra Canal static void drm_test_cmdline_res_vesa_margins(struct kunit *test)
4659f0527d2SMaíra Canal {
4669f0527d2SMaíra Canal struct drm_cmdline_mode mode = { };
4679f0527d2SMaíra Canal const char *cmdline = "720x480Mm";
4689f0527d2SMaíra Canal
469169a32b7SMichał Winiarski KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,
4709f0527d2SMaíra Canal &no_connector, &mode));
4719f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.specified);
4729f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.xres, 720);
4739f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.yres, 480);
4749f0527d2SMaíra Canal
4759f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.refresh_specified);
4769f0527d2SMaíra Canal
4779f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.bpp_specified);
4789f0527d2SMaíra Canal
4799f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.rb);
4809f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.cvt);
4819f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.interlace);
4829f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.margins);
4839f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED);
4849f0527d2SMaíra Canal }
4859f0527d2SMaíra Canal
drm_test_cmdline_name(struct kunit * test)486961bcdf9SMaíra Canal static void drm_test_cmdline_name(struct kunit *test)
4879f0527d2SMaíra Canal {
4889f0527d2SMaíra Canal struct drm_cmdline_mode mode = { };
4899f0527d2SMaíra Canal const char *cmdline = "NTSC";
4909f0527d2SMaíra Canal
491169a32b7SMichał Winiarski KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,
4929f0527d2SMaíra Canal &no_connector, &mode));
4939f0527d2SMaíra Canal KUNIT_EXPECT_STREQ(test, mode.name, "NTSC");
4949f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.refresh_specified);
4959f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.bpp_specified);
4969f0527d2SMaíra Canal }
4979f0527d2SMaíra Canal
drm_test_cmdline_name_bpp(struct kunit * test)498961bcdf9SMaíra Canal static void drm_test_cmdline_name_bpp(struct kunit *test)
4999f0527d2SMaíra Canal {
5009f0527d2SMaíra Canal struct drm_cmdline_mode mode = { };
5019f0527d2SMaíra Canal const char *cmdline = "NTSC-24";
5029f0527d2SMaíra Canal
503169a32b7SMichał Winiarski KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,
5049f0527d2SMaíra Canal &no_connector, &mode));
5059f0527d2SMaíra Canal KUNIT_EXPECT_STREQ(test, mode.name, "NTSC");
5069f0527d2SMaíra Canal
5079f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.refresh_specified);
5089f0527d2SMaíra Canal
5099f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.bpp_specified);
5109f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.bpp, 24);
5119f0527d2SMaíra Canal }
5129f0527d2SMaíra Canal
drm_test_cmdline_name_option(struct kunit * test)513961bcdf9SMaíra Canal static void drm_test_cmdline_name_option(struct kunit *test)
5149f0527d2SMaíra Canal {
5159f0527d2SMaíra Canal struct drm_cmdline_mode mode = { };
5169f0527d2SMaíra Canal const char *cmdline = "NTSC,rotate=180";
5179f0527d2SMaíra Canal
518169a32b7SMichał Winiarski KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,
5199f0527d2SMaíra Canal &no_connector, &mode));
5209f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.specified);
5219f0527d2SMaíra Canal KUNIT_EXPECT_STREQ(test, mode.name, "NTSC");
5229f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.rotation_reflection, DRM_MODE_ROTATE_180);
5239f0527d2SMaíra Canal }
5249f0527d2SMaíra Canal
drm_test_cmdline_name_bpp_option(struct kunit * test)525961bcdf9SMaíra Canal static void drm_test_cmdline_name_bpp_option(struct kunit *test)
5269f0527d2SMaíra Canal {
5279f0527d2SMaíra Canal struct drm_cmdline_mode mode = { };
5289f0527d2SMaíra Canal const char *cmdline = "NTSC-24,rotate=180";
5299f0527d2SMaíra Canal
530169a32b7SMichał Winiarski KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,
5319f0527d2SMaíra Canal &no_connector, &mode));
5329f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.specified);
5339f0527d2SMaíra Canal KUNIT_EXPECT_STREQ(test, mode.name, "NTSC");
5349f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.rotation_reflection, DRM_MODE_ROTATE_180);
5359f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.bpp_specified);
5369f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.bpp, 24);
5379f0527d2SMaíra Canal }
5389f0527d2SMaíra Canal
drm_test_cmdline_rotate_0(struct kunit * test)539961bcdf9SMaíra Canal static void drm_test_cmdline_rotate_0(struct kunit *test)
5409f0527d2SMaíra Canal {
5419f0527d2SMaíra Canal struct drm_cmdline_mode mode = { };
5429f0527d2SMaíra Canal const char *cmdline = "720x480,rotate=0";
5439f0527d2SMaíra Canal
544169a32b7SMichał Winiarski KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,
5459f0527d2SMaíra Canal &no_connector, &mode));
5469f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.specified);
5479f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.xres, 720);
5489f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.yres, 480);
5499f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.rotation_reflection, DRM_MODE_ROTATE_0);
5509f0527d2SMaíra Canal
5519f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.refresh_specified);
5529f0527d2SMaíra Canal
5539f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.bpp_specified);
5549f0527d2SMaíra Canal
5559f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.rb);
5569f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.cvt);
5579f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.interlace);
5589f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.margins);
5599f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED);
5609f0527d2SMaíra Canal }
5619f0527d2SMaíra Canal
drm_test_cmdline_rotate_90(struct kunit * test)562961bcdf9SMaíra Canal static void drm_test_cmdline_rotate_90(struct kunit *test)
5639f0527d2SMaíra Canal {
5649f0527d2SMaíra Canal struct drm_cmdline_mode mode = { };
5659f0527d2SMaíra Canal const char *cmdline = "720x480,rotate=90";
5669f0527d2SMaíra Canal
567169a32b7SMichał Winiarski KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,
5689f0527d2SMaíra Canal &no_connector, &mode));
5699f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.specified);
5709f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.xres, 720);
5719f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.yres, 480);
5729f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.rotation_reflection, DRM_MODE_ROTATE_90);
5739f0527d2SMaíra Canal
5749f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.refresh_specified);
5759f0527d2SMaíra Canal
5769f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.bpp_specified);
5779f0527d2SMaíra Canal
5789f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.rb);
5799f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.cvt);
5809f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.interlace);
5819f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.margins);
5829f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED);
5839f0527d2SMaíra Canal }
5849f0527d2SMaíra Canal
drm_test_cmdline_rotate_180(struct kunit * test)585961bcdf9SMaíra Canal static void drm_test_cmdline_rotate_180(struct kunit *test)
5869f0527d2SMaíra Canal {
5879f0527d2SMaíra Canal struct drm_cmdline_mode mode = { };
5889f0527d2SMaíra Canal const char *cmdline = "720x480,rotate=180";
5899f0527d2SMaíra Canal
590169a32b7SMichał Winiarski KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,
5919f0527d2SMaíra Canal &no_connector, &mode));
5929f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.specified);
5939f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.xres, 720);
5949f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.yres, 480);
5959f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.rotation_reflection, DRM_MODE_ROTATE_180);
5969f0527d2SMaíra Canal
5979f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.refresh_specified);
5989f0527d2SMaíra Canal
5999f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.bpp_specified);
6009f0527d2SMaíra Canal
6019f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.rb);
6029f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.cvt);
6039f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.interlace);
6049f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.margins);
6059f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED);
6069f0527d2SMaíra Canal }
6079f0527d2SMaíra Canal
drm_test_cmdline_rotate_270(struct kunit * test)608961bcdf9SMaíra Canal static void drm_test_cmdline_rotate_270(struct kunit *test)
6099f0527d2SMaíra Canal {
6109f0527d2SMaíra Canal struct drm_cmdline_mode mode = { };
6119f0527d2SMaíra Canal const char *cmdline = "720x480,rotate=270";
6129f0527d2SMaíra Canal
613169a32b7SMichał Winiarski KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,
6149f0527d2SMaíra Canal &no_connector, &mode));
6159f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.specified);
6169f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.xres, 720);
6179f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.yres, 480);
6189f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.rotation_reflection, DRM_MODE_ROTATE_270);
6199f0527d2SMaíra Canal
6209f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.refresh_specified);
6219f0527d2SMaíra Canal
6229f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.bpp_specified);
6239f0527d2SMaíra Canal
6249f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.rb);
6259f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.cvt);
6269f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.interlace);
6279f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.margins);
6289f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED);
6299f0527d2SMaíra Canal }
6309f0527d2SMaíra Canal
drm_test_cmdline_hmirror(struct kunit * test)631961bcdf9SMaíra Canal static void drm_test_cmdline_hmirror(struct kunit *test)
6329f0527d2SMaíra Canal {
6339f0527d2SMaíra Canal struct drm_cmdline_mode mode = { };
6349f0527d2SMaíra Canal const char *cmdline = "720x480,reflect_x";
6359f0527d2SMaíra Canal
636169a32b7SMichał Winiarski KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,
6379f0527d2SMaíra Canal &no_connector, &mode));
6389f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.specified);
6399f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.xres, 720);
6409f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.yres, 480);
6419f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.rotation_reflection, (DRM_MODE_ROTATE_0 | DRM_MODE_REFLECT_X));
6429f0527d2SMaíra Canal
6439f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.refresh_specified);
6449f0527d2SMaíra Canal
6459f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.bpp_specified);
6469f0527d2SMaíra Canal
6479f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.rb);
6489f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.cvt);
6499f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.interlace);
6509f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.margins);
6519f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED);
6529f0527d2SMaíra Canal }
6539f0527d2SMaíra Canal
drm_test_cmdline_vmirror(struct kunit * test)654961bcdf9SMaíra Canal static void drm_test_cmdline_vmirror(struct kunit *test)
6559f0527d2SMaíra Canal {
6569f0527d2SMaíra Canal struct drm_cmdline_mode mode = { };
6579f0527d2SMaíra Canal const char *cmdline = "720x480,reflect_y";
6589f0527d2SMaíra Canal
659169a32b7SMichał Winiarski KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,
6609f0527d2SMaíra Canal &no_connector, &mode));
6619f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.specified);
6629f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.xres, 720);
6639f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.yres, 480);
6649f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.rotation_reflection, (DRM_MODE_ROTATE_0 | DRM_MODE_REFLECT_Y));
6659f0527d2SMaíra Canal
6669f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.refresh_specified);
6679f0527d2SMaíra Canal
6689f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.bpp_specified);
6699f0527d2SMaíra Canal
6709f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.rb);
6719f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.cvt);
6729f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.interlace);
6739f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.margins);
6749f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED);
6759f0527d2SMaíra Canal }
6769f0527d2SMaíra Canal
drm_test_cmdline_margin_options(struct kunit * test)677961bcdf9SMaíra Canal static void drm_test_cmdline_margin_options(struct kunit *test)
6789f0527d2SMaíra Canal {
6799f0527d2SMaíra Canal struct drm_cmdline_mode mode = { };
6809f0527d2SMaíra Canal const char *cmdline =
6819f0527d2SMaíra Canal "720x480,margin_right=14,margin_left=24,margin_bottom=36,margin_top=42";
6829f0527d2SMaíra Canal
683169a32b7SMichał Winiarski KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,
6849f0527d2SMaíra Canal &no_connector, &mode));
6859f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.specified);
6869f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.xres, 720);
6879f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.yres, 480);
6889f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.tv_margins.right, 14);
6899f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.tv_margins.left, 24);
6909f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.tv_margins.bottom, 36);
6919f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.tv_margins.top, 42);
6929f0527d2SMaíra Canal
6939f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.refresh_specified);
6949f0527d2SMaíra Canal
6959f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.bpp_specified);
6969f0527d2SMaíra Canal
6979f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.rb);
6989f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.cvt);
6999f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.interlace);
7009f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.margins);
7019f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED);
7029f0527d2SMaíra Canal }
7039f0527d2SMaíra Canal
drm_test_cmdline_multiple_options(struct kunit * test)704961bcdf9SMaíra Canal static void drm_test_cmdline_multiple_options(struct kunit *test)
7059f0527d2SMaíra Canal {
7069f0527d2SMaíra Canal struct drm_cmdline_mode mode = { };
7079f0527d2SMaíra Canal const char *cmdline = "720x480,rotate=270,reflect_x";
7089f0527d2SMaíra Canal
709169a32b7SMichał Winiarski KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,
7109f0527d2SMaíra Canal &no_connector, &mode));
7119f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.specified);
7129f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.xres, 720);
7139f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.yres, 480);
7149f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.rotation_reflection, (DRM_MODE_ROTATE_270 | DRM_MODE_REFLECT_X));
7159f0527d2SMaíra Canal
7169f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.refresh_specified);
7179f0527d2SMaíra Canal
7189f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.bpp_specified);
7199f0527d2SMaíra Canal
7209f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.rb);
7219f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.cvt);
7229f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.interlace);
7239f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.margins);
7249f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED);
7259f0527d2SMaíra Canal }
7269f0527d2SMaíra Canal
drm_test_cmdline_bpp_extra_and_option(struct kunit * test)727961bcdf9SMaíra Canal static void drm_test_cmdline_bpp_extra_and_option(struct kunit *test)
7289f0527d2SMaíra Canal {
7299f0527d2SMaíra Canal struct drm_cmdline_mode mode = { };
7309f0527d2SMaíra Canal const char *cmdline = "720x480-24e,rotate=180";
7319f0527d2SMaíra Canal
732169a32b7SMichał Winiarski KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,
7339f0527d2SMaíra Canal &no_connector, &mode));
7349f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.specified);
7359f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.xres, 720);
7369f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.yres, 480);
7379f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.rotation_reflection, DRM_MODE_ROTATE_180);
7389f0527d2SMaíra Canal
7399f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.refresh_specified);
7409f0527d2SMaíra Canal
7419f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.bpp_specified);
7429f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.bpp, 24);
7439f0527d2SMaíra Canal
7449f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.rb);
7459f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.cvt);
7469f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.interlace);
7479f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.margins);
7489f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON);
7499f0527d2SMaíra Canal }
7509f0527d2SMaíra Canal
drm_test_cmdline_extra_and_option(struct kunit * test)751961bcdf9SMaíra Canal static void drm_test_cmdline_extra_and_option(struct kunit *test)
7529f0527d2SMaíra Canal {
7539f0527d2SMaíra Canal struct drm_cmdline_mode mode = { };
7549f0527d2SMaíra Canal const char *cmdline = "720x480e,rotate=180";
7559f0527d2SMaíra Canal
756169a32b7SMichał Winiarski KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,
7579f0527d2SMaíra Canal &no_connector, &mode));
7589f0527d2SMaíra Canal KUNIT_EXPECT_TRUE(test, mode.specified);
7599f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.xres, 720);
7609f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.yres, 480);
7619f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.rotation_reflection, DRM_MODE_ROTATE_180);
7629f0527d2SMaíra Canal
7639f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.refresh_specified);
7649f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.bpp_specified);
7659f0527d2SMaíra Canal
7669f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.rb);
7679f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.cvt);
7689f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.interlace);
7699f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.margins);
7709f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON);
7719f0527d2SMaíra Canal }
7729f0527d2SMaíra Canal
drm_test_cmdline_freestanding_options(struct kunit * test)773961bcdf9SMaíra Canal static void drm_test_cmdline_freestanding_options(struct kunit *test)
7749f0527d2SMaíra Canal {
7759f0527d2SMaíra Canal struct drm_cmdline_mode mode = { };
7769f0527d2SMaíra Canal const char *cmdline = "margin_right=14,margin_left=24,margin_bottom=36,margin_top=42";
7779f0527d2SMaíra Canal
778169a32b7SMichał Winiarski KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,
7799f0527d2SMaíra Canal &no_connector, &mode));
7809f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.specified);
7819f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.refresh_specified);
7829f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.bpp_specified);
7839f0527d2SMaíra Canal
7849f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.tv_margins.right, 14);
7859f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.tv_margins.left, 24);
7869f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.tv_margins.bottom, 36);
7879f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.tv_margins.top, 42);
7889f0527d2SMaíra Canal
7899f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.rb);
7909f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.cvt);
7919f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.interlace);
7929f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.margins);
7939f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED);
7949f0527d2SMaíra Canal }
7959f0527d2SMaíra Canal
drm_test_cmdline_freestanding_force_e_and_options(struct kunit * test)796961bcdf9SMaíra Canal static void drm_test_cmdline_freestanding_force_e_and_options(struct kunit *test)
7979f0527d2SMaíra Canal {
7989f0527d2SMaíra Canal struct drm_cmdline_mode mode = { };
7999f0527d2SMaíra Canal const char *cmdline = "e,margin_right=14,margin_left=24,margin_bottom=36,margin_top=42";
8009f0527d2SMaíra Canal
801169a32b7SMichał Winiarski KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,
8029f0527d2SMaíra Canal &no_connector, &mode));
8039f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.specified);
8049f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.refresh_specified);
8059f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.bpp_specified);
8069f0527d2SMaíra Canal
8079f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.tv_margins.right, 14);
8089f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.tv_margins.left, 24);
8099f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.tv_margins.bottom, 36);
8109f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.tv_margins.top, 42);
8119f0527d2SMaíra Canal
8129f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.rb);
8139f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.cvt);
8149f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.interlace);
8159f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.margins);
8169f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON);
8179f0527d2SMaíra Canal }
8189f0527d2SMaíra Canal
drm_test_cmdline_panel_orientation(struct kunit * test)819961bcdf9SMaíra Canal static void drm_test_cmdline_panel_orientation(struct kunit *test)
8209f0527d2SMaíra Canal {
8219f0527d2SMaíra Canal struct drm_cmdline_mode mode = { };
8229f0527d2SMaíra Canal const char *cmdline = "panel_orientation=upside_down";
8239f0527d2SMaíra Canal
824169a32b7SMichał Winiarski KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline,
8259f0527d2SMaíra Canal &no_connector, &mode));
8269f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.specified);
8279f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.refresh_specified);
8289f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.bpp_specified);
8299f0527d2SMaíra Canal
8309f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.panel_orientation, DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP);
8319f0527d2SMaíra Canal
8329f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.rb);
8339f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.cvt);
8349f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.interlace);
8359f0527d2SMaíra Canal KUNIT_EXPECT_FALSE(test, mode.margins);
8369f0527d2SMaíra Canal KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED);
8379f0527d2SMaíra Canal }
8389f0527d2SMaíra Canal
8390af02a0eSMichał Winiarski struct drm_cmdline_invalid_test {
8400af02a0eSMichał Winiarski const char *name;
8410af02a0eSMichał Winiarski const char *cmdline;
8420af02a0eSMichał Winiarski };
8430af02a0eSMichał Winiarski
drm_test_cmdline_invalid(struct kunit * test)844961bcdf9SMaíra Canal static void drm_test_cmdline_invalid(struct kunit *test)
8450af02a0eSMichał Winiarski {
8460af02a0eSMichał Winiarski const struct drm_cmdline_invalid_test *params = test->param_value;
8470af02a0eSMichał Winiarski struct drm_cmdline_mode mode = { };
8480af02a0eSMichał Winiarski
8490af02a0eSMichał Winiarski KUNIT_EXPECT_FALSE(test, drm_mode_parse_command_line_for_connector(params->cmdline,
8500af02a0eSMichał Winiarski &no_connector,
8510af02a0eSMichał Winiarski &mode));
8520af02a0eSMichał Winiarski }
8530af02a0eSMichał Winiarski
8540af02a0eSMichał Winiarski static const struct drm_cmdline_invalid_test drm_cmdline_invalid_tests[] = {
8550af02a0eSMichał Winiarski {
8560af02a0eSMichał Winiarski .name = "margin_only",
8570af02a0eSMichał Winiarski .cmdline = "m",
8580af02a0eSMichał Winiarski },
8590af02a0eSMichał Winiarski {
8600af02a0eSMichał Winiarski .name = "interlace_only",
8610af02a0eSMichał Winiarski .cmdline = "i",
8620af02a0eSMichał Winiarski },
8630af02a0eSMichał Winiarski {
8640af02a0eSMichał Winiarski .name = "res_missing_x",
8650af02a0eSMichał Winiarski .cmdline = "x480",
8660af02a0eSMichał Winiarski },
8670af02a0eSMichał Winiarski {
8680af02a0eSMichał Winiarski .name = "res_missing_y",
8690af02a0eSMichał Winiarski .cmdline = "1024x",
8700af02a0eSMichał Winiarski },
8710af02a0eSMichał Winiarski {
8720af02a0eSMichał Winiarski .name = "res_bad_y",
8730af02a0eSMichał Winiarski .cmdline = "1024xtest",
8740af02a0eSMichał Winiarski },
8750af02a0eSMichał Winiarski {
8760af02a0eSMichał Winiarski .name = "res_missing_y_bpp",
8770af02a0eSMichał Winiarski .cmdline = "1024x-24",
8780af02a0eSMichał Winiarski },
8790af02a0eSMichał Winiarski {
8800af02a0eSMichał Winiarski .name = "res_bad_bpp",
8810af02a0eSMichał Winiarski .cmdline = "720x480-test",
8820af02a0eSMichał Winiarski },
8830af02a0eSMichał Winiarski {
8840af02a0eSMichał Winiarski .name = "res_bad_refresh",
8850af02a0eSMichał Winiarski .cmdline = "720x480@refresh",
8860af02a0eSMichał Winiarski },
8870af02a0eSMichał Winiarski {
8880af02a0eSMichał Winiarski .name = "res_bpp_refresh_force_on_off",
8890af02a0eSMichał Winiarski .cmdline = "720x480-24@60de",
8900af02a0eSMichał Winiarski },
8910af02a0eSMichał Winiarski {
8920af02a0eSMichał Winiarski .name = "res_invalid_mode",
8930af02a0eSMichał Winiarski .cmdline = "720x480f",
8940af02a0eSMichał Winiarski },
8950af02a0eSMichał Winiarski {
8960af02a0eSMichał Winiarski .name = "res_bpp_wrong_place_mode",
8970af02a0eSMichał Winiarski .cmdline = "720x480e-24",
8980af02a0eSMichał Winiarski },
8990af02a0eSMichał Winiarski {
9000af02a0eSMichał Winiarski .name = "name_bpp_refresh",
9010af02a0eSMichał Winiarski .cmdline = "NTSC-24@60",
9020af02a0eSMichał Winiarski },
9030af02a0eSMichał Winiarski {
9040af02a0eSMichał Winiarski .name = "name_refresh",
9050af02a0eSMichał Winiarski .cmdline = "NTSC@60",
9060af02a0eSMichał Winiarski },
9070af02a0eSMichał Winiarski {
9080af02a0eSMichał Winiarski .name = "name_refresh_wrong_mode",
9090af02a0eSMichał Winiarski .cmdline = "NTSC@60m",
9100af02a0eSMichał Winiarski },
9110af02a0eSMichał Winiarski {
9120af02a0eSMichał Winiarski .name = "name_refresh_invalid_mode",
9130af02a0eSMichał Winiarski .cmdline = "NTSC@60f",
9140af02a0eSMichał Winiarski },
9150af02a0eSMichał Winiarski {
9160af02a0eSMichał Winiarski .name = "rotate_multiple",
9170af02a0eSMichał Winiarski .cmdline = "720x480,rotate=0,rotate=90",
9180af02a0eSMichał Winiarski },
9190af02a0eSMichał Winiarski {
9200af02a0eSMichał Winiarski .name = "rotate_invalid_val",
9210af02a0eSMichał Winiarski .cmdline = "720x480,rotate=42",
9220af02a0eSMichał Winiarski },
9230af02a0eSMichał Winiarski {
9240af02a0eSMichał Winiarski .name = "rotate_truncated",
9250af02a0eSMichał Winiarski .cmdline = "720x480,rotate=",
9260af02a0eSMichał Winiarski },
9270af02a0eSMichał Winiarski {
9280af02a0eSMichał Winiarski .name = "invalid_option",
9290af02a0eSMichał Winiarski .cmdline = "720x480,test=42",
9300af02a0eSMichał Winiarski },
931e691c999SMaxime Ripard {
932e691c999SMaxime Ripard .name = "invalid_tv_option",
933e691c999SMaxime Ripard .cmdline = "720x480i,tv_mode=invalid",
934e691c999SMaxime Ripard },
935e691c999SMaxime Ripard {
936e691c999SMaxime Ripard .name = "truncated_tv_option",
937e691c999SMaxime Ripard .cmdline = "720x480i,tv_mode=NTS",
938e691c999SMaxime Ripard },
9390af02a0eSMichał Winiarski };
9400af02a0eSMichał Winiarski
drm_cmdline_invalid_desc(const struct drm_cmdline_invalid_test * t,char * desc)9410af02a0eSMichał Winiarski static void drm_cmdline_invalid_desc(const struct drm_cmdline_invalid_test *t,
9420af02a0eSMichał Winiarski char *desc)
9430af02a0eSMichał Winiarski {
9440af02a0eSMichał Winiarski sprintf(desc, "%s", t->name);
9450af02a0eSMichał Winiarski }
9460af02a0eSMichał Winiarski
9470af02a0eSMichał Winiarski KUNIT_ARRAY_PARAM(drm_cmdline_invalid, drm_cmdline_invalid_tests, drm_cmdline_invalid_desc);
9480af02a0eSMichał Winiarski
949e691c999SMaxime Ripard struct drm_cmdline_tv_option_test {
950e691c999SMaxime Ripard const char *name;
951e691c999SMaxime Ripard const char *cmdline;
952e691c999SMaxime Ripard struct drm_display_mode *(*mode_fn)(struct drm_device *dev);
953e691c999SMaxime Ripard enum drm_connector_tv_mode tv_mode;
954e691c999SMaxime Ripard };
955e691c999SMaxime Ripard
drm_test_cmdline_tv_options(struct kunit * test)956e691c999SMaxime Ripard static void drm_test_cmdline_tv_options(struct kunit *test)
957e691c999SMaxime Ripard {
958e691c999SMaxime Ripard const struct drm_cmdline_tv_option_test *params = test->param_value;
959*70f29ca3SMaxime Ripard struct drm_display_mode *expected_mode;
960e691c999SMaxime Ripard struct drm_cmdline_mode mode = { };
961*70f29ca3SMaxime Ripard int ret;
962*70f29ca3SMaxime Ripard
963*70f29ca3SMaxime Ripard expected_mode = params->mode_fn(NULL);
964*70f29ca3SMaxime Ripard KUNIT_ASSERT_NOT_NULL(test, expected_mode);
965*70f29ca3SMaxime Ripard
966*70f29ca3SMaxime Ripard ret = drm_kunit_add_mode_destroy_action(test, expected_mode);
967*70f29ca3SMaxime Ripard KUNIT_ASSERT_EQ(test, ret, 0);
968e691c999SMaxime Ripard
969e691c999SMaxime Ripard KUNIT_EXPECT_TRUE(test, drm_mode_parse_command_line_for_connector(params->cmdline,
970e691c999SMaxime Ripard &no_connector, &mode));
971e691c999SMaxime Ripard KUNIT_EXPECT_TRUE(test, mode.specified);
972e691c999SMaxime Ripard KUNIT_EXPECT_EQ(test, mode.xres, expected_mode->hdisplay);
973e691c999SMaxime Ripard KUNIT_EXPECT_EQ(test, mode.yres, expected_mode->vdisplay);
974e691c999SMaxime Ripard KUNIT_EXPECT_EQ(test, mode.tv_mode, params->tv_mode);
975e691c999SMaxime Ripard
976e691c999SMaxime Ripard KUNIT_EXPECT_FALSE(test, mode.refresh_specified);
977e691c999SMaxime Ripard
978e691c999SMaxime Ripard KUNIT_EXPECT_FALSE(test, mode.bpp_specified);
979e691c999SMaxime Ripard
980e691c999SMaxime Ripard KUNIT_EXPECT_FALSE(test, mode.rb);
981e691c999SMaxime Ripard KUNIT_EXPECT_FALSE(test, mode.cvt);
982e691c999SMaxime Ripard KUNIT_EXPECT_EQ(test, mode.interlace, !!(expected_mode->flags & DRM_MODE_FLAG_INTERLACE));
983e691c999SMaxime Ripard KUNIT_EXPECT_FALSE(test, mode.margins);
984e691c999SMaxime Ripard KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED);
985e691c999SMaxime Ripard }
986e691c999SMaxime Ripard
987e691c999SMaxime Ripard #define TV_OPT_TEST(_opt, _cmdline, _mode_fn) \
988e691c999SMaxime Ripard { \
989e691c999SMaxime Ripard .name = #_opt, \
990e691c999SMaxime Ripard .cmdline = _cmdline, \
991e691c999SMaxime Ripard .mode_fn = _mode_fn, \
992e691c999SMaxime Ripard .tv_mode = DRM_MODE_TV_MODE_ ## _opt, \
993e691c999SMaxime Ripard }
994e691c999SMaxime Ripard
995e691c999SMaxime Ripard static const struct drm_cmdline_tv_option_test drm_cmdline_tv_option_tests[] = {
996e691c999SMaxime Ripard TV_OPT_TEST(NTSC, "720x480i,tv_mode=NTSC", drm_mode_analog_ntsc_480i),
997e691c999SMaxime Ripard TV_OPT_TEST(NTSC_443, "720x480i,tv_mode=NTSC-443", drm_mode_analog_ntsc_480i),
998e691c999SMaxime Ripard TV_OPT_TEST(NTSC_J, "720x480i,tv_mode=NTSC-J", drm_mode_analog_ntsc_480i),
999e691c999SMaxime Ripard TV_OPT_TEST(PAL, "720x576i,tv_mode=PAL", drm_mode_analog_pal_576i),
1000e691c999SMaxime Ripard TV_OPT_TEST(PAL_M, "720x480i,tv_mode=PAL-M", drm_mode_analog_ntsc_480i),
1001e691c999SMaxime Ripard TV_OPT_TEST(PAL_N, "720x576i,tv_mode=PAL-N", drm_mode_analog_pal_576i),
1002e691c999SMaxime Ripard TV_OPT_TEST(SECAM, "720x576i,tv_mode=SECAM", drm_mode_analog_pal_576i),
1003e3153848SDave Stevenson {
1004e3153848SDave Stevenson .name = "MONO_525",
1005e3153848SDave Stevenson .cmdline = "720x480i,tv_mode=Mono",
1006e3153848SDave Stevenson .mode_fn = drm_mode_analog_ntsc_480i,
1007e3153848SDave Stevenson .tv_mode = DRM_MODE_TV_MODE_MONOCHROME,
1008e3153848SDave Stevenson }, {
1009e3153848SDave Stevenson .name = "MONO_625",
1010e3153848SDave Stevenson .cmdline = "720x576i,tv_mode=Mono",
1011e3153848SDave Stevenson .mode_fn = drm_mode_analog_pal_576i,
1012e3153848SDave Stevenson .tv_mode = DRM_MODE_TV_MODE_MONOCHROME,
1013e3153848SDave Stevenson },
1014e691c999SMaxime Ripard };
1015e691c999SMaxime Ripard
drm_cmdline_tv_option_desc(const struct drm_cmdline_tv_option_test * t,char * desc)1016e691c999SMaxime Ripard static void drm_cmdline_tv_option_desc(const struct drm_cmdline_tv_option_test *t,
1017e691c999SMaxime Ripard char *desc)
1018e691c999SMaxime Ripard {
1019e691c999SMaxime Ripard sprintf(desc, "%s", t->name);
1020e691c999SMaxime Ripard }
1021e691c999SMaxime Ripard
1022e691c999SMaxime Ripard KUNIT_ARRAY_PARAM(drm_cmdline_tv_option,
1023e691c999SMaxime Ripard drm_cmdline_tv_option_tests,
1024e691c999SMaxime Ripard drm_cmdline_tv_option_desc);
1025e691c999SMaxime Ripard
10269f0527d2SMaíra Canal static struct kunit_case drm_cmdline_parser_tests[] = {
1027961bcdf9SMaíra Canal KUNIT_CASE(drm_test_cmdline_force_d_only),
1028961bcdf9SMaíra Canal KUNIT_CASE(drm_test_cmdline_force_D_only_dvi),
1029961bcdf9SMaíra Canal KUNIT_CASE(drm_test_cmdline_force_D_only_hdmi),
1030961bcdf9SMaíra Canal KUNIT_CASE(drm_test_cmdline_force_D_only_not_digital),
1031961bcdf9SMaíra Canal KUNIT_CASE(drm_test_cmdline_force_e_only),
1032961bcdf9SMaíra Canal KUNIT_CASE(drm_test_cmdline_res),
1033961bcdf9SMaíra Canal KUNIT_CASE(drm_test_cmdline_res_vesa),
1034961bcdf9SMaíra Canal KUNIT_CASE(drm_test_cmdline_res_vesa_rblank),
1035961bcdf9SMaíra Canal KUNIT_CASE(drm_test_cmdline_res_rblank),
1036961bcdf9SMaíra Canal KUNIT_CASE(drm_test_cmdline_res_bpp),
1037961bcdf9SMaíra Canal KUNIT_CASE(drm_test_cmdline_res_refresh),
1038961bcdf9SMaíra Canal KUNIT_CASE(drm_test_cmdline_res_bpp_refresh),
1039961bcdf9SMaíra Canal KUNIT_CASE(drm_test_cmdline_res_bpp_refresh_interlaced),
1040961bcdf9SMaíra Canal KUNIT_CASE(drm_test_cmdline_res_bpp_refresh_margins),
1041961bcdf9SMaíra Canal KUNIT_CASE(drm_test_cmdline_res_bpp_refresh_force_off),
1042961bcdf9SMaíra Canal KUNIT_CASE(drm_test_cmdline_res_bpp_refresh_force_on),
1043961bcdf9SMaíra Canal KUNIT_CASE(drm_test_cmdline_res_bpp_refresh_force_on_analog),
1044961bcdf9SMaíra Canal KUNIT_CASE(drm_test_cmdline_res_bpp_refresh_force_on_digital),
1045961bcdf9SMaíra Canal KUNIT_CASE(drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on),
1046961bcdf9SMaíra Canal KUNIT_CASE(drm_test_cmdline_res_margins_force_on),
1047961bcdf9SMaíra Canal KUNIT_CASE(drm_test_cmdline_res_vesa_margins),
1048961bcdf9SMaíra Canal KUNIT_CASE(drm_test_cmdline_name),
1049961bcdf9SMaíra Canal KUNIT_CASE(drm_test_cmdline_name_bpp),
1050961bcdf9SMaíra Canal KUNIT_CASE(drm_test_cmdline_name_option),
1051961bcdf9SMaíra Canal KUNIT_CASE(drm_test_cmdline_name_bpp_option),
1052961bcdf9SMaíra Canal KUNIT_CASE(drm_test_cmdline_rotate_0),
1053961bcdf9SMaíra Canal KUNIT_CASE(drm_test_cmdline_rotate_90),
1054961bcdf9SMaíra Canal KUNIT_CASE(drm_test_cmdline_rotate_180),
1055961bcdf9SMaíra Canal KUNIT_CASE(drm_test_cmdline_rotate_270),
1056961bcdf9SMaíra Canal KUNIT_CASE(drm_test_cmdline_hmirror),
1057961bcdf9SMaíra Canal KUNIT_CASE(drm_test_cmdline_vmirror),
1058961bcdf9SMaíra Canal KUNIT_CASE(drm_test_cmdline_margin_options),
1059961bcdf9SMaíra Canal KUNIT_CASE(drm_test_cmdline_multiple_options),
1060961bcdf9SMaíra Canal KUNIT_CASE(drm_test_cmdline_bpp_extra_and_option),
1061961bcdf9SMaíra Canal KUNIT_CASE(drm_test_cmdline_extra_and_option),
1062961bcdf9SMaíra Canal KUNIT_CASE(drm_test_cmdline_freestanding_options),
1063961bcdf9SMaíra Canal KUNIT_CASE(drm_test_cmdline_freestanding_force_e_and_options),
1064961bcdf9SMaíra Canal KUNIT_CASE(drm_test_cmdline_panel_orientation),
1065961bcdf9SMaíra Canal KUNIT_CASE_PARAM(drm_test_cmdline_invalid, drm_cmdline_invalid_gen_params),
1066e691c999SMaxime Ripard KUNIT_CASE_PARAM(drm_test_cmdline_tv_options, drm_cmdline_tv_option_gen_params),
10679f0527d2SMaíra Canal {}
10689f0527d2SMaíra Canal };
10699f0527d2SMaíra Canal
10709f0527d2SMaíra Canal static struct kunit_suite drm_cmdline_parser_test_suite = {
10719f0527d2SMaíra Canal .name = "drm_cmdline_parser",
10729f0527d2SMaíra Canal .test_cases = drm_cmdline_parser_tests
10739f0527d2SMaíra Canal };
10749f0527d2SMaíra Canal
10759f0527d2SMaíra Canal kunit_test_suite(drm_cmdline_parser_test_suite);
10769f0527d2SMaíra Canal
10779f0527d2SMaíra Canal MODULE_AUTHOR("Maxime Ripard <[email protected]>");
1078ecc24fc3SJeff Johnson MODULE_DESCRIPTION("Kunit test for drm_cmdline_parser functions");
10799f0527d2SMaíra Canal MODULE_LICENSE("GPL");
1080