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