at master 1079 lines 35 kB view raw
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * Copyright (c) 2019 Bootlin 4 * Copyright (c) 2022 Maíra Canal <mairacanal@riseup.net> 5 */ 6 7#include <kunit/test.h> 8 9#include <drm/drm_connector.h> 10#include <drm/drm_kunit_helpers.h> 11#include <drm/drm_modes.h> 12 13static const struct drm_connector no_connector = {}; 14 15static void drm_test_cmdline_force_e_only(struct kunit *test) 16{ 17 struct drm_cmdline_mode mode = { }; 18 const char *cmdline = "e"; 19 20 KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, 21 &no_connector, &mode)); 22 KUNIT_EXPECT_FALSE(test, mode.specified); 23 KUNIT_EXPECT_FALSE(test, mode.refresh_specified); 24 KUNIT_EXPECT_FALSE(test, mode.bpp_specified); 25 26 KUNIT_EXPECT_FALSE(test, mode.rb); 27 KUNIT_EXPECT_FALSE(test, mode.cvt); 28 KUNIT_EXPECT_FALSE(test, mode.interlace); 29 KUNIT_EXPECT_FALSE(test, mode.margins); 30 KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON); 31} 32 33static void drm_test_cmdline_force_D_only_not_digital(struct kunit *test) 34{ 35 struct drm_cmdline_mode mode = { }; 36 const char *cmdline = "D"; 37 38 KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, 39 &no_connector, &mode)); 40 KUNIT_EXPECT_FALSE(test, mode.specified); 41 KUNIT_EXPECT_FALSE(test, mode.refresh_specified); 42 KUNIT_EXPECT_FALSE(test, mode.bpp_specified); 43 44 KUNIT_EXPECT_FALSE(test, mode.rb); 45 KUNIT_EXPECT_FALSE(test, mode.cvt); 46 KUNIT_EXPECT_FALSE(test, mode.interlace); 47 KUNIT_EXPECT_FALSE(test, mode.margins); 48 KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON); 49} 50 51static const struct drm_connector connector_hdmi = { 52 .connector_type = DRM_MODE_CONNECTOR_HDMIB, 53}; 54 55static void drm_test_cmdline_force_D_only_hdmi(struct kunit *test) 56{ 57 struct drm_cmdline_mode mode = { }; 58 const char *cmdline = "D"; 59 60 KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, 61 &connector_hdmi, &mode)); 62 KUNIT_EXPECT_FALSE(test, mode.specified); 63 KUNIT_EXPECT_FALSE(test, mode.refresh_specified); 64 KUNIT_EXPECT_FALSE(test, mode.bpp_specified); 65 66 KUNIT_EXPECT_FALSE(test, mode.rb); 67 KUNIT_EXPECT_FALSE(test, mode.cvt); 68 KUNIT_EXPECT_FALSE(test, mode.interlace); 69 KUNIT_EXPECT_FALSE(test, mode.margins); 70 KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON_DIGITAL); 71} 72 73static const struct drm_connector connector_dvi = { 74 .connector_type = DRM_MODE_CONNECTOR_DVII, 75}; 76 77static void drm_test_cmdline_force_D_only_dvi(struct kunit *test) 78{ 79 struct drm_cmdline_mode mode = { }; 80 const char *cmdline = "D"; 81 82 KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, 83 &connector_dvi, &mode)); 84 KUNIT_EXPECT_FALSE(test, mode.specified); 85 KUNIT_EXPECT_FALSE(test, mode.refresh_specified); 86 KUNIT_EXPECT_FALSE(test, mode.bpp_specified); 87 88 KUNIT_EXPECT_FALSE(test, mode.rb); 89 KUNIT_EXPECT_FALSE(test, mode.cvt); 90 KUNIT_EXPECT_FALSE(test, mode.interlace); 91 KUNIT_EXPECT_FALSE(test, mode.margins); 92 KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON_DIGITAL); 93} 94 95static void drm_test_cmdline_force_d_only(struct kunit *test) 96{ 97 struct drm_cmdline_mode mode = { }; 98 const char *cmdline = "d"; 99 100 KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, 101 &no_connector, &mode)); 102 KUNIT_EXPECT_FALSE(test, mode.specified); 103 KUNIT_EXPECT_FALSE(test, mode.refresh_specified); 104 KUNIT_EXPECT_FALSE(test, mode.bpp_specified); 105 106 KUNIT_EXPECT_FALSE(test, mode.rb); 107 KUNIT_EXPECT_FALSE(test, mode.cvt); 108 KUNIT_EXPECT_FALSE(test, mode.interlace); 109 KUNIT_EXPECT_FALSE(test, mode.margins); 110 KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_OFF); 111} 112 113static void drm_test_cmdline_res(struct kunit *test) 114{ 115 struct drm_cmdline_mode mode = { }; 116 const char *cmdline = "720x480"; 117 118 KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, 119 &no_connector, &mode)); 120 KUNIT_EXPECT_TRUE(test, mode.specified); 121 KUNIT_EXPECT_EQ(test, mode.xres, 720); 122 KUNIT_EXPECT_EQ(test, mode.yres, 480); 123 124 KUNIT_EXPECT_FALSE(test, mode.refresh_specified); 125 126 KUNIT_EXPECT_FALSE(test, mode.bpp_specified); 127 128 KUNIT_EXPECT_FALSE(test, mode.rb); 129 KUNIT_EXPECT_FALSE(test, mode.cvt); 130 KUNIT_EXPECT_FALSE(test, mode.interlace); 131 KUNIT_EXPECT_FALSE(test, mode.margins); 132 KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); 133} 134 135static void drm_test_cmdline_res_vesa(struct kunit *test) 136{ 137 struct drm_cmdline_mode mode = { }; 138 const char *cmdline = "720x480M"; 139 140 KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, 141 &no_connector, &mode)); 142 KUNIT_EXPECT_TRUE(test, mode.specified); 143 KUNIT_EXPECT_EQ(test, mode.xres, 720); 144 KUNIT_EXPECT_EQ(test, mode.yres, 480); 145 146 KUNIT_EXPECT_FALSE(test, mode.refresh_specified); 147 148 KUNIT_EXPECT_FALSE(test, mode.bpp_specified); 149 150 KUNIT_EXPECT_FALSE(test, mode.rb); 151 KUNIT_EXPECT_TRUE(test, mode.cvt); 152 KUNIT_EXPECT_FALSE(test, mode.interlace); 153 KUNIT_EXPECT_FALSE(test, mode.margins); 154 KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); 155} 156 157static void drm_test_cmdline_res_vesa_rblank(struct kunit *test) 158{ 159 struct drm_cmdline_mode mode = { }; 160 const char *cmdline = "720x480MR"; 161 162 KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, 163 &no_connector, &mode)); 164 KUNIT_EXPECT_TRUE(test, mode.specified); 165 KUNIT_EXPECT_EQ(test, mode.xres, 720); 166 KUNIT_EXPECT_EQ(test, mode.yres, 480); 167 168 KUNIT_EXPECT_FALSE(test, mode.refresh_specified); 169 170 KUNIT_EXPECT_FALSE(test, mode.bpp_specified); 171 172 KUNIT_EXPECT_TRUE(test, mode.rb); 173 KUNIT_EXPECT_TRUE(test, mode.cvt); 174 KUNIT_EXPECT_FALSE(test, mode.interlace); 175 KUNIT_EXPECT_FALSE(test, mode.margins); 176 KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); 177} 178 179static void drm_test_cmdline_res_rblank(struct kunit *test) 180{ 181 struct drm_cmdline_mode mode = { }; 182 const char *cmdline = "720x480R"; 183 184 KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, 185 &no_connector, &mode)); 186 KUNIT_EXPECT_TRUE(test, mode.specified); 187 KUNIT_EXPECT_EQ(test, mode.xres, 720); 188 KUNIT_EXPECT_EQ(test, mode.yres, 480); 189 190 KUNIT_EXPECT_FALSE(test, mode.refresh_specified); 191 192 KUNIT_EXPECT_FALSE(test, mode.bpp_specified); 193 194 KUNIT_EXPECT_TRUE(test, mode.rb); 195 KUNIT_EXPECT_FALSE(test, mode.cvt); 196 KUNIT_EXPECT_FALSE(test, mode.interlace); 197 KUNIT_EXPECT_FALSE(test, mode.margins); 198 KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); 199} 200 201static void drm_test_cmdline_res_bpp(struct kunit *test) 202{ 203 struct drm_cmdline_mode mode = { }; 204 const char *cmdline = "720x480-24"; 205 206 KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, 207 &no_connector, &mode)); 208 KUNIT_EXPECT_TRUE(test, mode.specified); 209 KUNIT_EXPECT_EQ(test, mode.xres, 720); 210 KUNIT_EXPECT_EQ(test, mode.yres, 480); 211 212 KUNIT_EXPECT_FALSE(test, mode.refresh_specified); 213 214 KUNIT_EXPECT_TRUE(test, mode.bpp_specified); 215 KUNIT_EXPECT_EQ(test, mode.bpp, 24); 216 217 KUNIT_EXPECT_FALSE(test, mode.rb); 218 KUNIT_EXPECT_FALSE(test, mode.cvt); 219 KUNIT_EXPECT_FALSE(test, mode.interlace); 220 KUNIT_EXPECT_FALSE(test, mode.margins); 221 KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); 222} 223 224static void drm_test_cmdline_res_refresh(struct kunit *test) 225{ 226 struct drm_cmdline_mode mode = { }; 227 const char *cmdline = "720x480@60"; 228 229 KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, 230 &no_connector, &mode)); 231 KUNIT_EXPECT_TRUE(test, mode.specified); 232 KUNIT_EXPECT_EQ(test, mode.xres, 720); 233 KUNIT_EXPECT_EQ(test, mode.yres, 480); 234 235 KUNIT_EXPECT_TRUE(test, mode.refresh_specified); 236 KUNIT_EXPECT_EQ(test, mode.refresh, 60); 237 238 KUNIT_EXPECT_FALSE(test, mode.bpp_specified); 239 240 KUNIT_EXPECT_FALSE(test, mode.rb); 241 KUNIT_EXPECT_FALSE(test, mode.cvt); 242 KUNIT_EXPECT_FALSE(test, mode.interlace); 243 KUNIT_EXPECT_FALSE(test, mode.margins); 244 KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); 245} 246 247static void drm_test_cmdline_res_bpp_refresh(struct kunit *test) 248{ 249 struct drm_cmdline_mode mode = { }; 250 const char *cmdline = "720x480-24@60"; 251 252 KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, 253 &no_connector, &mode)); 254 KUNIT_EXPECT_TRUE(test, mode.specified); 255 KUNIT_EXPECT_EQ(test, mode.xres, 720); 256 KUNIT_EXPECT_EQ(test, mode.yres, 480); 257 258 KUNIT_EXPECT_TRUE(test, mode.refresh_specified); 259 KUNIT_EXPECT_EQ(test, mode.refresh, 60); 260 261 KUNIT_EXPECT_TRUE(test, mode.bpp_specified); 262 KUNIT_EXPECT_EQ(test, mode.bpp, 24); 263 264 KUNIT_EXPECT_FALSE(test, mode.rb); 265 KUNIT_EXPECT_FALSE(test, mode.cvt); 266 KUNIT_EXPECT_FALSE(test, mode.interlace); 267 KUNIT_EXPECT_FALSE(test, mode.margins); 268 KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); 269} 270 271static void drm_test_cmdline_res_bpp_refresh_interlaced(struct kunit *test) 272{ 273 struct drm_cmdline_mode mode = { }; 274 const char *cmdline = "720x480-24@60i"; 275 276 KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, 277 &no_connector, &mode)); 278 KUNIT_EXPECT_TRUE(test, mode.specified); 279 KUNIT_EXPECT_EQ(test, mode.xres, 720); 280 KUNIT_EXPECT_EQ(test, mode.yres, 480); 281 282 KUNIT_EXPECT_TRUE(test, mode.refresh_specified); 283 KUNIT_EXPECT_EQ(test, mode.refresh, 60); 284 285 KUNIT_EXPECT_TRUE(test, mode.bpp_specified); 286 KUNIT_EXPECT_EQ(test, mode.bpp, 24); 287 288 KUNIT_EXPECT_FALSE(test, mode.rb); 289 KUNIT_EXPECT_FALSE(test, mode.cvt); 290 KUNIT_EXPECT_TRUE(test, mode.interlace); 291 KUNIT_EXPECT_FALSE(test, mode.margins); 292 KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); 293} 294 295static void drm_test_cmdline_res_bpp_refresh_margins(struct kunit *test) 296{ 297 struct drm_cmdline_mode mode = { }; 298 const char *cmdline = "720x480-24@60m"; 299 300 KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, 301 &no_connector, &mode)); 302 KUNIT_EXPECT_TRUE(test, mode.specified); 303 KUNIT_EXPECT_EQ(test, mode.xres, 720); 304 KUNIT_EXPECT_EQ(test, mode.yres, 480); 305 306 KUNIT_EXPECT_TRUE(test, mode.refresh_specified); 307 KUNIT_EXPECT_EQ(test, mode.refresh, 60); 308 309 KUNIT_EXPECT_TRUE(test, mode.bpp_specified); 310 KUNIT_EXPECT_EQ(test, mode.bpp, 24); 311 312 KUNIT_EXPECT_FALSE(test, mode.rb); 313 KUNIT_EXPECT_FALSE(test, mode.cvt); 314 KUNIT_EXPECT_FALSE(test, mode.interlace); 315 KUNIT_EXPECT_TRUE(test, mode.margins); 316 KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); 317} 318 319static void drm_test_cmdline_res_bpp_refresh_force_off(struct kunit *test) 320{ 321 struct drm_cmdline_mode mode = { }; 322 const char *cmdline = "720x480-24@60d"; 323 324 KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, 325 &no_connector, &mode)); 326 KUNIT_EXPECT_TRUE(test, mode.specified); 327 KUNIT_EXPECT_EQ(test, mode.xres, 720); 328 KUNIT_EXPECT_EQ(test, mode.yres, 480); 329 330 KUNIT_EXPECT_TRUE(test, mode.refresh_specified); 331 KUNIT_EXPECT_EQ(test, mode.refresh, 60); 332 333 KUNIT_EXPECT_TRUE(test, mode.bpp_specified); 334 KUNIT_EXPECT_EQ(test, mode.bpp, 24); 335 336 KUNIT_EXPECT_FALSE(test, mode.rb); 337 KUNIT_EXPECT_FALSE(test, mode.cvt); 338 KUNIT_EXPECT_FALSE(test, mode.interlace); 339 KUNIT_EXPECT_FALSE(test, mode.margins); 340 KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_OFF); 341} 342 343static void drm_test_cmdline_res_bpp_refresh_force_on(struct kunit *test) 344{ 345 struct drm_cmdline_mode mode = { }; 346 const char *cmdline = "720x480-24@60e"; 347 348 KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, 349 &no_connector, &mode)); 350 KUNIT_EXPECT_TRUE(test, mode.specified); 351 KUNIT_EXPECT_EQ(test, mode.xres, 720); 352 KUNIT_EXPECT_EQ(test, mode.yres, 480); 353 354 KUNIT_EXPECT_TRUE(test, mode.refresh_specified); 355 KUNIT_EXPECT_EQ(test, mode.refresh, 60); 356 357 KUNIT_EXPECT_TRUE(test, mode.bpp_specified); 358 KUNIT_EXPECT_EQ(test, mode.bpp, 24); 359 360 KUNIT_EXPECT_FALSE(test, mode.rb); 361 KUNIT_EXPECT_FALSE(test, mode.cvt); 362 KUNIT_EXPECT_FALSE(test, mode.interlace); 363 KUNIT_EXPECT_FALSE(test, mode.margins); 364 KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON); 365} 366 367static void drm_test_cmdline_res_bpp_refresh_force_on_analog(struct kunit *test) 368{ 369 struct drm_cmdline_mode mode = { }; 370 const char *cmdline = "720x480-24@60D"; 371 372 KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, 373 &no_connector, &mode)); 374 KUNIT_EXPECT_TRUE(test, mode.specified); 375 KUNIT_EXPECT_EQ(test, mode.xres, 720); 376 KUNIT_EXPECT_EQ(test, mode.yres, 480); 377 378 KUNIT_EXPECT_TRUE(test, mode.refresh_specified); 379 KUNIT_EXPECT_EQ(test, mode.refresh, 60); 380 381 KUNIT_EXPECT_TRUE(test, mode.bpp_specified); 382 KUNIT_EXPECT_EQ(test, mode.bpp, 24); 383 384 KUNIT_EXPECT_FALSE(test, mode.rb); 385 KUNIT_EXPECT_FALSE(test, mode.cvt); 386 KUNIT_EXPECT_FALSE(test, mode.interlace); 387 KUNIT_EXPECT_FALSE(test, mode.margins); 388 KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON); 389} 390 391static void drm_test_cmdline_res_bpp_refresh_force_on_digital(struct kunit *test) 392{ 393 struct drm_cmdline_mode mode = { }; 394 static const struct drm_connector connector = { 395 .connector_type = DRM_MODE_CONNECTOR_DVII, 396 }; 397 const char *cmdline = "720x480-24@60D"; 398 399 KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, 400 &connector, &mode)); 401 KUNIT_EXPECT_TRUE(test, mode.specified); 402 KUNIT_EXPECT_EQ(test, mode.xres, 720); 403 KUNIT_EXPECT_EQ(test, mode.yres, 480); 404 405 KUNIT_EXPECT_TRUE(test, mode.refresh_specified); 406 KUNIT_EXPECT_EQ(test, mode.refresh, 60); 407 408 KUNIT_EXPECT_TRUE(test, mode.bpp_specified); 409 KUNIT_EXPECT_EQ(test, mode.bpp, 24); 410 411 KUNIT_EXPECT_FALSE(test, mode.rb); 412 KUNIT_EXPECT_FALSE(test, mode.cvt); 413 KUNIT_EXPECT_FALSE(test, mode.interlace); 414 KUNIT_EXPECT_FALSE(test, mode.margins); 415 KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON_DIGITAL); 416} 417 418static void drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on(struct kunit *test) 419{ 420 struct drm_cmdline_mode mode = { }; 421 const char *cmdline = "720x480-24@60ime"; 422 423 KUNIT_EXPECT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, 424 &no_connector, &mode)); 425 KUNIT_EXPECT_TRUE(test, mode.specified); 426 KUNIT_EXPECT_EQ(test, mode.xres, 720); 427 KUNIT_EXPECT_EQ(test, mode.yres, 480); 428 429 KUNIT_EXPECT_TRUE(test, mode.refresh_specified); 430 KUNIT_EXPECT_EQ(test, mode.refresh, 60); 431 432 KUNIT_EXPECT_TRUE(test, mode.bpp_specified); 433 KUNIT_EXPECT_EQ(test, mode.bpp, 24); 434 435 KUNIT_EXPECT_FALSE(test, mode.rb); 436 KUNIT_EXPECT_FALSE(test, mode.cvt); 437 KUNIT_EXPECT_TRUE(test, mode.interlace); 438 KUNIT_EXPECT_TRUE(test, mode.margins); 439 KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON); 440} 441 442static void drm_test_cmdline_res_margins_force_on(struct kunit *test) 443{ 444 struct drm_cmdline_mode mode = { }; 445 const char *cmdline = "720x480me"; 446 447 KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, 448 &no_connector, &mode)); 449 KUNIT_EXPECT_TRUE(test, mode.specified); 450 KUNIT_EXPECT_EQ(test, mode.xres, 720); 451 KUNIT_EXPECT_EQ(test, mode.yres, 480); 452 453 KUNIT_EXPECT_FALSE(test, mode.refresh_specified); 454 455 KUNIT_EXPECT_FALSE(test, mode.bpp_specified); 456 457 KUNIT_EXPECT_FALSE(test, mode.rb); 458 KUNIT_EXPECT_FALSE(test, mode.cvt); 459 KUNIT_EXPECT_FALSE(test, mode.interlace); 460 KUNIT_EXPECT_TRUE(test, mode.margins); 461 KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON); 462} 463 464static void drm_test_cmdline_res_vesa_margins(struct kunit *test) 465{ 466 struct drm_cmdline_mode mode = { }; 467 const char *cmdline = "720x480Mm"; 468 469 KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, 470 &no_connector, &mode)); 471 KUNIT_EXPECT_TRUE(test, mode.specified); 472 KUNIT_EXPECT_EQ(test, mode.xres, 720); 473 KUNIT_EXPECT_EQ(test, mode.yres, 480); 474 475 KUNIT_EXPECT_FALSE(test, mode.refresh_specified); 476 477 KUNIT_EXPECT_FALSE(test, mode.bpp_specified); 478 479 KUNIT_EXPECT_FALSE(test, mode.rb); 480 KUNIT_EXPECT_TRUE(test, mode.cvt); 481 KUNIT_EXPECT_FALSE(test, mode.interlace); 482 KUNIT_EXPECT_TRUE(test, mode.margins); 483 KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); 484} 485 486static void drm_test_cmdline_name(struct kunit *test) 487{ 488 struct drm_cmdline_mode mode = { }; 489 const char *cmdline = "NTSC"; 490 491 KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, 492 &no_connector, &mode)); 493 KUNIT_EXPECT_STREQ(test, mode.name, "NTSC"); 494 KUNIT_EXPECT_FALSE(test, mode.refresh_specified); 495 KUNIT_EXPECT_FALSE(test, mode.bpp_specified); 496} 497 498static void drm_test_cmdline_name_bpp(struct kunit *test) 499{ 500 struct drm_cmdline_mode mode = { }; 501 const char *cmdline = "NTSC-24"; 502 503 KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, 504 &no_connector, &mode)); 505 KUNIT_EXPECT_STREQ(test, mode.name, "NTSC"); 506 507 KUNIT_EXPECT_FALSE(test, mode.refresh_specified); 508 509 KUNIT_EXPECT_TRUE(test, mode.bpp_specified); 510 KUNIT_EXPECT_EQ(test, mode.bpp, 24); 511} 512 513static void drm_test_cmdline_name_option(struct kunit *test) 514{ 515 struct drm_cmdline_mode mode = { }; 516 const char *cmdline = "NTSC,rotate=180"; 517 518 KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, 519 &no_connector, &mode)); 520 KUNIT_EXPECT_TRUE(test, mode.specified); 521 KUNIT_EXPECT_STREQ(test, mode.name, "NTSC"); 522 KUNIT_EXPECT_EQ(test, mode.rotation_reflection, DRM_MODE_ROTATE_180); 523} 524 525static void drm_test_cmdline_name_bpp_option(struct kunit *test) 526{ 527 struct drm_cmdline_mode mode = { }; 528 const char *cmdline = "NTSC-24,rotate=180"; 529 530 KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, 531 &no_connector, &mode)); 532 KUNIT_EXPECT_TRUE(test, mode.specified); 533 KUNIT_EXPECT_STREQ(test, mode.name, "NTSC"); 534 KUNIT_EXPECT_EQ(test, mode.rotation_reflection, DRM_MODE_ROTATE_180); 535 KUNIT_EXPECT_TRUE(test, mode.bpp_specified); 536 KUNIT_EXPECT_EQ(test, mode.bpp, 24); 537} 538 539static void drm_test_cmdline_rotate_0(struct kunit *test) 540{ 541 struct drm_cmdline_mode mode = { }; 542 const char *cmdline = "720x480,rotate=0"; 543 544 KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, 545 &no_connector, &mode)); 546 KUNIT_EXPECT_TRUE(test, mode.specified); 547 KUNIT_EXPECT_EQ(test, mode.xres, 720); 548 KUNIT_EXPECT_EQ(test, mode.yres, 480); 549 KUNIT_EXPECT_EQ(test, mode.rotation_reflection, DRM_MODE_ROTATE_0); 550 551 KUNIT_EXPECT_FALSE(test, mode.refresh_specified); 552 553 KUNIT_EXPECT_FALSE(test, mode.bpp_specified); 554 555 KUNIT_EXPECT_FALSE(test, mode.rb); 556 KUNIT_EXPECT_FALSE(test, mode.cvt); 557 KUNIT_EXPECT_FALSE(test, mode.interlace); 558 KUNIT_EXPECT_FALSE(test, mode.margins); 559 KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); 560} 561 562static void drm_test_cmdline_rotate_90(struct kunit *test) 563{ 564 struct drm_cmdline_mode mode = { }; 565 const char *cmdline = "720x480,rotate=90"; 566 567 KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, 568 &no_connector, &mode)); 569 KUNIT_EXPECT_TRUE(test, mode.specified); 570 KUNIT_EXPECT_EQ(test, mode.xres, 720); 571 KUNIT_EXPECT_EQ(test, mode.yres, 480); 572 KUNIT_EXPECT_EQ(test, mode.rotation_reflection, DRM_MODE_ROTATE_90); 573 574 KUNIT_EXPECT_FALSE(test, mode.refresh_specified); 575 576 KUNIT_EXPECT_FALSE(test, mode.bpp_specified); 577 578 KUNIT_EXPECT_FALSE(test, mode.rb); 579 KUNIT_EXPECT_FALSE(test, mode.cvt); 580 KUNIT_EXPECT_FALSE(test, mode.interlace); 581 KUNIT_EXPECT_FALSE(test, mode.margins); 582 KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); 583} 584 585static void drm_test_cmdline_rotate_180(struct kunit *test) 586{ 587 struct drm_cmdline_mode mode = { }; 588 const char *cmdline = "720x480,rotate=180"; 589 590 KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, 591 &no_connector, &mode)); 592 KUNIT_EXPECT_TRUE(test, mode.specified); 593 KUNIT_EXPECT_EQ(test, mode.xres, 720); 594 KUNIT_EXPECT_EQ(test, mode.yres, 480); 595 KUNIT_EXPECT_EQ(test, mode.rotation_reflection, DRM_MODE_ROTATE_180); 596 597 KUNIT_EXPECT_FALSE(test, mode.refresh_specified); 598 599 KUNIT_EXPECT_FALSE(test, mode.bpp_specified); 600 601 KUNIT_EXPECT_FALSE(test, mode.rb); 602 KUNIT_EXPECT_FALSE(test, mode.cvt); 603 KUNIT_EXPECT_FALSE(test, mode.interlace); 604 KUNIT_EXPECT_FALSE(test, mode.margins); 605 KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); 606} 607 608static void drm_test_cmdline_rotate_270(struct kunit *test) 609{ 610 struct drm_cmdline_mode mode = { }; 611 const char *cmdline = "720x480,rotate=270"; 612 613 KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, 614 &no_connector, &mode)); 615 KUNIT_EXPECT_TRUE(test, mode.specified); 616 KUNIT_EXPECT_EQ(test, mode.xres, 720); 617 KUNIT_EXPECT_EQ(test, mode.yres, 480); 618 KUNIT_EXPECT_EQ(test, mode.rotation_reflection, DRM_MODE_ROTATE_270); 619 620 KUNIT_EXPECT_FALSE(test, mode.refresh_specified); 621 622 KUNIT_EXPECT_FALSE(test, mode.bpp_specified); 623 624 KUNIT_EXPECT_FALSE(test, mode.rb); 625 KUNIT_EXPECT_FALSE(test, mode.cvt); 626 KUNIT_EXPECT_FALSE(test, mode.interlace); 627 KUNIT_EXPECT_FALSE(test, mode.margins); 628 KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); 629} 630 631static void drm_test_cmdline_hmirror(struct kunit *test) 632{ 633 struct drm_cmdline_mode mode = { }; 634 const char *cmdline = "720x480,reflect_x"; 635 636 KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, 637 &no_connector, &mode)); 638 KUNIT_EXPECT_TRUE(test, mode.specified); 639 KUNIT_EXPECT_EQ(test, mode.xres, 720); 640 KUNIT_EXPECT_EQ(test, mode.yres, 480); 641 KUNIT_EXPECT_EQ(test, mode.rotation_reflection, (DRM_MODE_ROTATE_0 | DRM_MODE_REFLECT_X)); 642 643 KUNIT_EXPECT_FALSE(test, mode.refresh_specified); 644 645 KUNIT_EXPECT_FALSE(test, mode.bpp_specified); 646 647 KUNIT_EXPECT_FALSE(test, mode.rb); 648 KUNIT_EXPECT_FALSE(test, mode.cvt); 649 KUNIT_EXPECT_FALSE(test, mode.interlace); 650 KUNIT_EXPECT_FALSE(test, mode.margins); 651 KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); 652} 653 654static void drm_test_cmdline_vmirror(struct kunit *test) 655{ 656 struct drm_cmdline_mode mode = { }; 657 const char *cmdline = "720x480,reflect_y"; 658 659 KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, 660 &no_connector, &mode)); 661 KUNIT_EXPECT_TRUE(test, mode.specified); 662 KUNIT_EXPECT_EQ(test, mode.xres, 720); 663 KUNIT_EXPECT_EQ(test, mode.yres, 480); 664 KUNIT_EXPECT_EQ(test, mode.rotation_reflection, (DRM_MODE_ROTATE_0 | DRM_MODE_REFLECT_Y)); 665 666 KUNIT_EXPECT_FALSE(test, mode.refresh_specified); 667 668 KUNIT_EXPECT_FALSE(test, mode.bpp_specified); 669 670 KUNIT_EXPECT_FALSE(test, mode.rb); 671 KUNIT_EXPECT_FALSE(test, mode.cvt); 672 KUNIT_EXPECT_FALSE(test, mode.interlace); 673 KUNIT_EXPECT_FALSE(test, mode.margins); 674 KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); 675} 676 677static void drm_test_cmdline_margin_options(struct kunit *test) 678{ 679 struct drm_cmdline_mode mode = { }; 680 const char *cmdline = 681 "720x480,margin_right=14,margin_left=24,margin_bottom=36,margin_top=42"; 682 683 KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, 684 &no_connector, &mode)); 685 KUNIT_EXPECT_TRUE(test, mode.specified); 686 KUNIT_EXPECT_EQ(test, mode.xres, 720); 687 KUNIT_EXPECT_EQ(test, mode.yres, 480); 688 KUNIT_EXPECT_EQ(test, mode.tv_margins.right, 14); 689 KUNIT_EXPECT_EQ(test, mode.tv_margins.left, 24); 690 KUNIT_EXPECT_EQ(test, mode.tv_margins.bottom, 36); 691 KUNIT_EXPECT_EQ(test, mode.tv_margins.top, 42); 692 693 KUNIT_EXPECT_FALSE(test, mode.refresh_specified); 694 695 KUNIT_EXPECT_FALSE(test, mode.bpp_specified); 696 697 KUNIT_EXPECT_FALSE(test, mode.rb); 698 KUNIT_EXPECT_FALSE(test, mode.cvt); 699 KUNIT_EXPECT_FALSE(test, mode.interlace); 700 KUNIT_EXPECT_FALSE(test, mode.margins); 701 KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); 702} 703 704static void drm_test_cmdline_multiple_options(struct kunit *test) 705{ 706 struct drm_cmdline_mode mode = { }; 707 const char *cmdline = "720x480,rotate=270,reflect_x"; 708 709 KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, 710 &no_connector, &mode)); 711 KUNIT_EXPECT_TRUE(test, mode.specified); 712 KUNIT_EXPECT_EQ(test, mode.xres, 720); 713 KUNIT_EXPECT_EQ(test, mode.yres, 480); 714 KUNIT_EXPECT_EQ(test, mode.rotation_reflection, (DRM_MODE_ROTATE_270 | DRM_MODE_REFLECT_X)); 715 716 KUNIT_EXPECT_FALSE(test, mode.refresh_specified); 717 718 KUNIT_EXPECT_FALSE(test, mode.bpp_specified); 719 720 KUNIT_EXPECT_FALSE(test, mode.rb); 721 KUNIT_EXPECT_FALSE(test, mode.cvt); 722 KUNIT_EXPECT_FALSE(test, mode.interlace); 723 KUNIT_EXPECT_FALSE(test, mode.margins); 724 KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); 725} 726 727static void drm_test_cmdline_bpp_extra_and_option(struct kunit *test) 728{ 729 struct drm_cmdline_mode mode = { }; 730 const char *cmdline = "720x480-24e,rotate=180"; 731 732 KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, 733 &no_connector, &mode)); 734 KUNIT_EXPECT_TRUE(test, mode.specified); 735 KUNIT_EXPECT_EQ(test, mode.xres, 720); 736 KUNIT_EXPECT_EQ(test, mode.yres, 480); 737 KUNIT_EXPECT_EQ(test, mode.rotation_reflection, DRM_MODE_ROTATE_180); 738 739 KUNIT_EXPECT_FALSE(test, mode.refresh_specified); 740 741 KUNIT_EXPECT_TRUE(test, mode.bpp_specified); 742 KUNIT_EXPECT_EQ(test, mode.bpp, 24); 743 744 KUNIT_EXPECT_FALSE(test, mode.rb); 745 KUNIT_EXPECT_FALSE(test, mode.cvt); 746 KUNIT_EXPECT_FALSE(test, mode.interlace); 747 KUNIT_EXPECT_FALSE(test, mode.margins); 748 KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON); 749} 750 751static void drm_test_cmdline_extra_and_option(struct kunit *test) 752{ 753 struct drm_cmdline_mode mode = { }; 754 const char *cmdline = "720x480e,rotate=180"; 755 756 KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, 757 &no_connector, &mode)); 758 KUNIT_EXPECT_TRUE(test, mode.specified); 759 KUNIT_EXPECT_EQ(test, mode.xres, 720); 760 KUNIT_EXPECT_EQ(test, mode.yres, 480); 761 KUNIT_EXPECT_EQ(test, mode.rotation_reflection, DRM_MODE_ROTATE_180); 762 763 KUNIT_EXPECT_FALSE(test, mode.refresh_specified); 764 KUNIT_EXPECT_FALSE(test, mode.bpp_specified); 765 766 KUNIT_EXPECT_FALSE(test, mode.rb); 767 KUNIT_EXPECT_FALSE(test, mode.cvt); 768 KUNIT_EXPECT_FALSE(test, mode.interlace); 769 KUNIT_EXPECT_FALSE(test, mode.margins); 770 KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON); 771} 772 773static void drm_test_cmdline_freestanding_options(struct kunit *test) 774{ 775 struct drm_cmdline_mode mode = { }; 776 const char *cmdline = "margin_right=14,margin_left=24,margin_bottom=36,margin_top=42"; 777 778 KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, 779 &no_connector, &mode)); 780 KUNIT_EXPECT_FALSE(test, mode.specified); 781 KUNIT_EXPECT_FALSE(test, mode.refresh_specified); 782 KUNIT_EXPECT_FALSE(test, mode.bpp_specified); 783 784 KUNIT_EXPECT_EQ(test, mode.tv_margins.right, 14); 785 KUNIT_EXPECT_EQ(test, mode.tv_margins.left, 24); 786 KUNIT_EXPECT_EQ(test, mode.tv_margins.bottom, 36); 787 KUNIT_EXPECT_EQ(test, mode.tv_margins.top, 42); 788 789 KUNIT_EXPECT_FALSE(test, mode.rb); 790 KUNIT_EXPECT_FALSE(test, mode.cvt); 791 KUNIT_EXPECT_FALSE(test, mode.interlace); 792 KUNIT_EXPECT_FALSE(test, mode.margins); 793 KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); 794} 795 796static void drm_test_cmdline_freestanding_force_e_and_options(struct kunit *test) 797{ 798 struct drm_cmdline_mode mode = { }; 799 const char *cmdline = "e,margin_right=14,margin_left=24,margin_bottom=36,margin_top=42"; 800 801 KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, 802 &no_connector, &mode)); 803 KUNIT_EXPECT_FALSE(test, mode.specified); 804 KUNIT_EXPECT_FALSE(test, mode.refresh_specified); 805 KUNIT_EXPECT_FALSE(test, mode.bpp_specified); 806 807 KUNIT_EXPECT_EQ(test, mode.tv_margins.right, 14); 808 KUNIT_EXPECT_EQ(test, mode.tv_margins.left, 24); 809 KUNIT_EXPECT_EQ(test, mode.tv_margins.bottom, 36); 810 KUNIT_EXPECT_EQ(test, mode.tv_margins.top, 42); 811 812 KUNIT_EXPECT_FALSE(test, mode.rb); 813 KUNIT_EXPECT_FALSE(test, mode.cvt); 814 KUNIT_EXPECT_FALSE(test, mode.interlace); 815 KUNIT_EXPECT_FALSE(test, mode.margins); 816 KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_ON); 817} 818 819static void drm_test_cmdline_panel_orientation(struct kunit *test) 820{ 821 struct drm_cmdline_mode mode = { }; 822 const char *cmdline = "panel_orientation=upside_down"; 823 824 KUNIT_ASSERT_TRUE(test, drm_mode_parse_command_line_for_connector(cmdline, 825 &no_connector, &mode)); 826 KUNIT_EXPECT_FALSE(test, mode.specified); 827 KUNIT_EXPECT_FALSE(test, mode.refresh_specified); 828 KUNIT_EXPECT_FALSE(test, mode.bpp_specified); 829 830 KUNIT_EXPECT_EQ(test, mode.panel_orientation, DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP); 831 832 KUNIT_EXPECT_FALSE(test, mode.rb); 833 KUNIT_EXPECT_FALSE(test, mode.cvt); 834 KUNIT_EXPECT_FALSE(test, mode.interlace); 835 KUNIT_EXPECT_FALSE(test, mode.margins); 836 KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); 837} 838 839struct drm_cmdline_invalid_test { 840 const char *name; 841 const char *cmdline; 842}; 843 844static void drm_test_cmdline_invalid(struct kunit *test) 845{ 846 const struct drm_cmdline_invalid_test *params = test->param_value; 847 struct drm_cmdline_mode mode = { }; 848 849 KUNIT_EXPECT_FALSE(test, drm_mode_parse_command_line_for_connector(params->cmdline, 850 &no_connector, 851 &mode)); 852} 853 854static const struct drm_cmdline_invalid_test drm_cmdline_invalid_tests[] = { 855 { 856 .name = "margin_only", 857 .cmdline = "m", 858 }, 859 { 860 .name = "interlace_only", 861 .cmdline = "i", 862 }, 863 { 864 .name = "res_missing_x", 865 .cmdline = "x480", 866 }, 867 { 868 .name = "res_missing_y", 869 .cmdline = "1024x", 870 }, 871 { 872 .name = "res_bad_y", 873 .cmdline = "1024xtest", 874 }, 875 { 876 .name = "res_missing_y_bpp", 877 .cmdline = "1024x-24", 878 }, 879 { 880 .name = "res_bad_bpp", 881 .cmdline = "720x480-test", 882 }, 883 { 884 .name = "res_bad_refresh", 885 .cmdline = "720x480@refresh", 886 }, 887 { 888 .name = "res_bpp_refresh_force_on_off", 889 .cmdline = "720x480-24@60de", 890 }, 891 { 892 .name = "res_invalid_mode", 893 .cmdline = "720x480f", 894 }, 895 { 896 .name = "res_bpp_wrong_place_mode", 897 .cmdline = "720x480e-24", 898 }, 899 { 900 .name = "name_bpp_refresh", 901 .cmdline = "NTSC-24@60", 902 }, 903 { 904 .name = "name_refresh", 905 .cmdline = "NTSC@60", 906 }, 907 { 908 .name = "name_refresh_wrong_mode", 909 .cmdline = "NTSC@60m", 910 }, 911 { 912 .name = "name_refresh_invalid_mode", 913 .cmdline = "NTSC@60f", 914 }, 915 { 916 .name = "rotate_multiple", 917 .cmdline = "720x480,rotate=0,rotate=90", 918 }, 919 { 920 .name = "rotate_invalid_val", 921 .cmdline = "720x480,rotate=42", 922 }, 923 { 924 .name = "rotate_truncated", 925 .cmdline = "720x480,rotate=", 926 }, 927 { 928 .name = "invalid_option", 929 .cmdline = "720x480,test=42", 930 }, 931 { 932 .name = "invalid_tv_option", 933 .cmdline = "720x480i,tv_mode=invalid", 934 }, 935 { 936 .name = "truncated_tv_option", 937 .cmdline = "720x480i,tv_mode=NTS", 938 }, 939}; 940 941static void drm_cmdline_invalid_desc(const struct drm_cmdline_invalid_test *t, 942 char *desc) 943{ 944 sprintf(desc, "%s", t->name); 945} 946 947KUNIT_ARRAY_PARAM(drm_cmdline_invalid, drm_cmdline_invalid_tests, drm_cmdline_invalid_desc); 948 949struct drm_cmdline_tv_option_test { 950 const char *name; 951 const char *cmdline; 952 struct drm_display_mode *(*mode_fn)(struct drm_device *dev); 953 enum drm_connector_tv_mode tv_mode; 954}; 955 956static void drm_test_cmdline_tv_options(struct kunit *test) 957{ 958 const struct drm_cmdline_tv_option_test *params = test->param_value; 959 struct drm_display_mode *expected_mode; 960 struct drm_cmdline_mode mode = { }; 961 int ret; 962 963 expected_mode = params->mode_fn(NULL); 964 KUNIT_ASSERT_NOT_NULL(test, expected_mode); 965 966 ret = drm_kunit_add_mode_destroy_action(test, expected_mode); 967 KUNIT_ASSERT_EQ(test, ret, 0); 968 969 KUNIT_EXPECT_TRUE(test, drm_mode_parse_command_line_for_connector(params->cmdline, 970 &no_connector, &mode)); 971 KUNIT_EXPECT_TRUE(test, mode.specified); 972 KUNIT_EXPECT_EQ(test, mode.xres, expected_mode->hdisplay); 973 KUNIT_EXPECT_EQ(test, mode.yres, expected_mode->vdisplay); 974 KUNIT_EXPECT_EQ(test, mode.tv_mode, params->tv_mode); 975 976 KUNIT_EXPECT_FALSE(test, mode.refresh_specified); 977 978 KUNIT_EXPECT_FALSE(test, mode.bpp_specified); 979 980 KUNIT_EXPECT_FALSE(test, mode.rb); 981 KUNIT_EXPECT_FALSE(test, mode.cvt); 982 KUNIT_EXPECT_EQ(test, mode.interlace, !!(expected_mode->flags & DRM_MODE_FLAG_INTERLACE)); 983 KUNIT_EXPECT_FALSE(test, mode.margins); 984 KUNIT_EXPECT_EQ(test, mode.force, DRM_FORCE_UNSPECIFIED); 985} 986 987#define TV_OPT_TEST(_opt, _cmdline, _mode_fn) \ 988 { \ 989 .name = #_opt, \ 990 .cmdline = _cmdline, \ 991 .mode_fn = _mode_fn, \ 992 .tv_mode = DRM_MODE_TV_MODE_ ## _opt, \ 993 } 994 995static const struct drm_cmdline_tv_option_test drm_cmdline_tv_option_tests[] = { 996 TV_OPT_TEST(NTSC, "720x480i,tv_mode=NTSC", drm_mode_analog_ntsc_480i), 997 TV_OPT_TEST(NTSC_443, "720x480i,tv_mode=NTSC-443", drm_mode_analog_ntsc_480i), 998 TV_OPT_TEST(NTSC_J, "720x480i,tv_mode=NTSC-J", drm_mode_analog_ntsc_480i), 999 TV_OPT_TEST(PAL, "720x576i,tv_mode=PAL", drm_mode_analog_pal_576i), 1000 TV_OPT_TEST(PAL_M, "720x480i,tv_mode=PAL-M", drm_mode_analog_ntsc_480i), 1001 TV_OPT_TEST(PAL_N, "720x576i,tv_mode=PAL-N", drm_mode_analog_pal_576i), 1002 TV_OPT_TEST(SECAM, "720x576i,tv_mode=SECAM", drm_mode_analog_pal_576i), 1003 { 1004 .name = "MONO_525", 1005 .cmdline = "720x480i,tv_mode=Mono", 1006 .mode_fn = drm_mode_analog_ntsc_480i, 1007 .tv_mode = DRM_MODE_TV_MODE_MONOCHROME, 1008 }, { 1009 .name = "MONO_625", 1010 .cmdline = "720x576i,tv_mode=Mono", 1011 .mode_fn = drm_mode_analog_pal_576i, 1012 .tv_mode = DRM_MODE_TV_MODE_MONOCHROME, 1013 }, 1014}; 1015 1016static void drm_cmdline_tv_option_desc(const struct drm_cmdline_tv_option_test *t, 1017 char *desc) 1018{ 1019 sprintf(desc, "%s", t->name); 1020} 1021 1022KUNIT_ARRAY_PARAM(drm_cmdline_tv_option, 1023 drm_cmdline_tv_option_tests, 1024 drm_cmdline_tv_option_desc); 1025 1026static struct kunit_case drm_cmdline_parser_tests[] = { 1027 KUNIT_CASE(drm_test_cmdline_force_d_only), 1028 KUNIT_CASE(drm_test_cmdline_force_D_only_dvi), 1029 KUNIT_CASE(drm_test_cmdline_force_D_only_hdmi), 1030 KUNIT_CASE(drm_test_cmdline_force_D_only_not_digital), 1031 KUNIT_CASE(drm_test_cmdline_force_e_only), 1032 KUNIT_CASE(drm_test_cmdline_res), 1033 KUNIT_CASE(drm_test_cmdline_res_vesa), 1034 KUNIT_CASE(drm_test_cmdline_res_vesa_rblank), 1035 KUNIT_CASE(drm_test_cmdline_res_rblank), 1036 KUNIT_CASE(drm_test_cmdline_res_bpp), 1037 KUNIT_CASE(drm_test_cmdline_res_refresh), 1038 KUNIT_CASE(drm_test_cmdline_res_bpp_refresh), 1039 KUNIT_CASE(drm_test_cmdline_res_bpp_refresh_interlaced), 1040 KUNIT_CASE(drm_test_cmdline_res_bpp_refresh_margins), 1041 KUNIT_CASE(drm_test_cmdline_res_bpp_refresh_force_off), 1042 KUNIT_CASE(drm_test_cmdline_res_bpp_refresh_force_on), 1043 KUNIT_CASE(drm_test_cmdline_res_bpp_refresh_force_on_analog), 1044 KUNIT_CASE(drm_test_cmdline_res_bpp_refresh_force_on_digital), 1045 KUNIT_CASE(drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on), 1046 KUNIT_CASE(drm_test_cmdline_res_margins_force_on), 1047 KUNIT_CASE(drm_test_cmdline_res_vesa_margins), 1048 KUNIT_CASE(drm_test_cmdline_name), 1049 KUNIT_CASE(drm_test_cmdline_name_bpp), 1050 KUNIT_CASE(drm_test_cmdline_name_option), 1051 KUNIT_CASE(drm_test_cmdline_name_bpp_option), 1052 KUNIT_CASE(drm_test_cmdline_rotate_0), 1053 KUNIT_CASE(drm_test_cmdline_rotate_90), 1054 KUNIT_CASE(drm_test_cmdline_rotate_180), 1055 KUNIT_CASE(drm_test_cmdline_rotate_270), 1056 KUNIT_CASE(drm_test_cmdline_hmirror), 1057 KUNIT_CASE(drm_test_cmdline_vmirror), 1058 KUNIT_CASE(drm_test_cmdline_margin_options), 1059 KUNIT_CASE(drm_test_cmdline_multiple_options), 1060 KUNIT_CASE(drm_test_cmdline_bpp_extra_and_option), 1061 KUNIT_CASE(drm_test_cmdline_extra_and_option), 1062 KUNIT_CASE(drm_test_cmdline_freestanding_options), 1063 KUNIT_CASE(drm_test_cmdline_freestanding_force_e_and_options), 1064 KUNIT_CASE(drm_test_cmdline_panel_orientation), 1065 KUNIT_CASE_PARAM(drm_test_cmdline_invalid, drm_cmdline_invalid_gen_params), 1066 KUNIT_CASE_PARAM(drm_test_cmdline_tv_options, drm_cmdline_tv_option_gen_params), 1067 {} 1068}; 1069 1070static struct kunit_suite drm_cmdline_parser_test_suite = { 1071 .name = "drm_cmdline_parser", 1072 .test_cases = drm_cmdline_parser_tests 1073}; 1074 1075kunit_test_suite(drm_cmdline_parser_test_suite); 1076 1077MODULE_AUTHOR("Maxime Ripard <maxime.ripard@bootlin.com>"); 1078MODULE_DESCRIPTION("Kunit test for drm_cmdline_parser functions"); 1079MODULE_LICENSE("GPL");