treewide: remove redundant IS_ERR() before error code check
[linux/fpc-iii.git] / drivers / gpu / drm / selftests / test-drm_cmdline_parser.c
blob520f3e66a384a27f694a92f823a489ca439a88bf
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3 * Copyright (c) 2019 Bootlin
4 */
6 #define pr_fmt(fmt) "drm_cmdline: " fmt
8 #include <linux/kernel.h>
9 #include <linux/module.h>
11 #include <drm/drm_connector.h>
12 #include <drm/drm_modes.h>
14 #define TESTS "drm_cmdline_selftests.h"
15 #include "drm_selftest.h"
16 #include "test-drm_modeset_common.h"
18 static const struct drm_connector no_connector = {};
20 static int drm_cmdline_test_force_e_only(void *ignored)
22 struct drm_cmdline_mode mode = { };
24 FAIL_ON(!drm_mode_parse_command_line_for_connector("e",
25 &no_connector,
26 &mode));
27 FAIL_ON(mode.specified);
28 FAIL_ON(mode.refresh_specified);
29 FAIL_ON(mode.bpp_specified);
31 FAIL_ON(mode.rb);
32 FAIL_ON(mode.cvt);
33 FAIL_ON(mode.interlace);
34 FAIL_ON(mode.margins);
35 FAIL_ON(mode.force != DRM_FORCE_ON);
37 return 0;
40 static int drm_cmdline_test_force_D_only_not_digital(void *ignored)
42 struct drm_cmdline_mode mode = { };
44 FAIL_ON(!drm_mode_parse_command_line_for_connector("D",
45 &no_connector,
46 &mode));
47 FAIL_ON(mode.specified);
48 FAIL_ON(mode.refresh_specified);
49 FAIL_ON(mode.bpp_specified);
51 FAIL_ON(mode.rb);
52 FAIL_ON(mode.cvt);
53 FAIL_ON(mode.interlace);
54 FAIL_ON(mode.margins);
55 FAIL_ON(mode.force != DRM_FORCE_ON);
57 return 0;
60 static const struct drm_connector connector_hdmi = {
61 .connector_type = DRM_MODE_CONNECTOR_HDMIB,
64 static int drm_cmdline_test_force_D_only_hdmi(void *ignored)
66 struct drm_cmdline_mode mode = { };
68 FAIL_ON(!drm_mode_parse_command_line_for_connector("D",
69 &connector_hdmi,
70 &mode));
71 FAIL_ON(mode.specified);
72 FAIL_ON(mode.refresh_specified);
73 FAIL_ON(mode.bpp_specified);
75 FAIL_ON(mode.rb);
76 FAIL_ON(mode.cvt);
77 FAIL_ON(mode.interlace);
78 FAIL_ON(mode.margins);
79 FAIL_ON(mode.force != DRM_FORCE_ON_DIGITAL);
81 return 0;
84 static const struct drm_connector connector_dvi = {
85 .connector_type = DRM_MODE_CONNECTOR_DVII,
88 static int drm_cmdline_test_force_D_only_dvi(void *ignored)
90 struct drm_cmdline_mode mode = { };
92 FAIL_ON(!drm_mode_parse_command_line_for_connector("D",
93 &connector_dvi,
94 &mode));
95 FAIL_ON(mode.specified);
96 FAIL_ON(mode.refresh_specified);
97 FAIL_ON(mode.bpp_specified);
99 FAIL_ON(mode.rb);
100 FAIL_ON(mode.cvt);
101 FAIL_ON(mode.interlace);
102 FAIL_ON(mode.margins);
103 FAIL_ON(mode.force != DRM_FORCE_ON_DIGITAL);
105 return 0;
108 static int drm_cmdline_test_force_d_only(void *ignored)
110 struct drm_cmdline_mode mode = { };
112 FAIL_ON(!drm_mode_parse_command_line_for_connector("d",
113 &no_connector,
114 &mode));
115 FAIL_ON(mode.specified);
116 FAIL_ON(mode.refresh_specified);
117 FAIL_ON(mode.bpp_specified);
119 FAIL_ON(mode.rb);
120 FAIL_ON(mode.cvt);
121 FAIL_ON(mode.interlace);
122 FAIL_ON(mode.margins);
123 FAIL_ON(mode.force != DRM_FORCE_OFF);
125 return 0;
128 static int drm_cmdline_test_margin_only(void *ignored)
130 struct drm_cmdline_mode mode = { };
132 FAIL_ON(drm_mode_parse_command_line_for_connector("m",
133 &no_connector,
134 &mode));
136 return 0;
139 static int drm_cmdline_test_interlace_only(void *ignored)
141 struct drm_cmdline_mode mode = { };
143 FAIL_ON(drm_mode_parse_command_line_for_connector("i",
144 &no_connector,
145 &mode));
147 return 0;
150 static int drm_cmdline_test_res(void *ignored)
152 struct drm_cmdline_mode mode = { };
154 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480",
155 &no_connector,
156 &mode));
157 FAIL_ON(!mode.specified);
158 FAIL_ON(mode.xres != 720);
159 FAIL_ON(mode.yres != 480);
161 FAIL_ON(mode.refresh_specified);
163 FAIL_ON(mode.bpp_specified);
165 FAIL_ON(mode.rb);
166 FAIL_ON(mode.cvt);
167 FAIL_ON(mode.interlace);
168 FAIL_ON(mode.margins);
169 FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
171 return 0;
174 static int drm_cmdline_test_res_missing_x(void *ignored)
176 struct drm_cmdline_mode mode = { };
178 FAIL_ON(drm_mode_parse_command_line_for_connector("x480",
179 &no_connector,
180 &mode));
182 return 0;
185 static int drm_cmdline_test_res_missing_y(void *ignored)
187 struct drm_cmdline_mode mode = { };
189 FAIL_ON(drm_mode_parse_command_line_for_connector("1024x",
190 &no_connector,
191 &mode));
193 return 0;
196 static int drm_cmdline_test_res_bad_y(void *ignored)
198 struct drm_cmdline_mode mode = { };
200 FAIL_ON(drm_mode_parse_command_line_for_connector("1024xtest",
201 &no_connector,
202 &mode));
204 return 0;
207 static int drm_cmdline_test_res_missing_y_bpp(void *ignored)
209 struct drm_cmdline_mode mode = { };
211 FAIL_ON(drm_mode_parse_command_line_for_connector("1024x-24",
212 &no_connector,
213 &mode));
215 return 0;
218 static int drm_cmdline_test_res_vesa(void *ignored)
220 struct drm_cmdline_mode mode = { };
222 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480M",
223 &no_connector,
224 &mode));
225 FAIL_ON(!mode.specified);
226 FAIL_ON(mode.xres != 720);
227 FAIL_ON(mode.yres != 480);
229 FAIL_ON(mode.refresh_specified);
231 FAIL_ON(mode.bpp_specified);
233 FAIL_ON(mode.rb);
234 FAIL_ON(!mode.cvt);
235 FAIL_ON(mode.interlace);
236 FAIL_ON(mode.margins);
237 FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
239 return 0;
242 static int drm_cmdline_test_res_vesa_rblank(void *ignored)
244 struct drm_cmdline_mode mode = { };
246 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480MR",
247 &no_connector,
248 &mode));
249 FAIL_ON(!mode.specified);
250 FAIL_ON(mode.xres != 720);
251 FAIL_ON(mode.yres != 480);
253 FAIL_ON(mode.refresh_specified);
255 FAIL_ON(mode.bpp_specified);
257 FAIL_ON(!mode.rb);
258 FAIL_ON(!mode.cvt);
259 FAIL_ON(mode.interlace);
260 FAIL_ON(mode.margins);
261 FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
263 return 0;
266 static int drm_cmdline_test_res_rblank(void *ignored)
268 struct drm_cmdline_mode mode = { };
270 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480R",
271 &no_connector,
272 &mode));
273 FAIL_ON(!mode.specified);
274 FAIL_ON(mode.xres != 720);
275 FAIL_ON(mode.yres != 480);
277 FAIL_ON(mode.refresh_specified);
279 FAIL_ON(mode.bpp_specified);
281 FAIL_ON(!mode.rb);
282 FAIL_ON(mode.cvt);
283 FAIL_ON(mode.interlace);
284 FAIL_ON(mode.margins);
285 FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
287 return 0;
290 static int drm_cmdline_test_res_bpp(void *ignored)
292 struct drm_cmdline_mode mode = { };
294 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480-24",
295 &no_connector,
296 &mode));
297 FAIL_ON(!mode.specified);
298 FAIL_ON(mode.xres != 720);
299 FAIL_ON(mode.yres != 480);
301 FAIL_ON(mode.refresh_specified);
303 FAIL_ON(!mode.bpp_specified);
304 FAIL_ON(mode.bpp != 24);
306 FAIL_ON(mode.rb);
307 FAIL_ON(mode.cvt);
308 FAIL_ON(mode.interlace);
309 FAIL_ON(mode.margins);
310 FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
312 return 0;
315 static int drm_cmdline_test_res_bad_bpp(void *ignored)
317 struct drm_cmdline_mode mode = { };
319 FAIL_ON(drm_mode_parse_command_line_for_connector("720x480-test",
320 &no_connector,
321 &mode));
323 return 0;
326 static int drm_cmdline_test_res_refresh(void *ignored)
328 struct drm_cmdline_mode mode = { };
330 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480@60",
331 &no_connector,
332 &mode));
333 FAIL_ON(!mode.specified);
334 FAIL_ON(mode.xres != 720);
335 FAIL_ON(mode.yres != 480);
337 FAIL_ON(!mode.refresh_specified);
338 FAIL_ON(mode.refresh != 60);
340 FAIL_ON(mode.bpp_specified);
342 FAIL_ON(mode.rb);
343 FAIL_ON(mode.cvt);
344 FAIL_ON(mode.interlace);
345 FAIL_ON(mode.margins);
346 FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
348 return 0;
351 static int drm_cmdline_test_res_bad_refresh(void *ignored)
353 struct drm_cmdline_mode mode = { };
355 FAIL_ON(drm_mode_parse_command_line_for_connector("720x480@refresh",
356 &no_connector,
357 &mode));
359 return 0;
362 static int drm_cmdline_test_res_bpp_refresh(void *ignored)
364 struct drm_cmdline_mode mode = { };
366 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480-24@60",
367 &no_connector,
368 &mode));
369 FAIL_ON(!mode.specified);
370 FAIL_ON(mode.xres != 720);
371 FAIL_ON(mode.yres != 480);
373 FAIL_ON(!mode.refresh_specified);
374 FAIL_ON(mode.refresh != 60);
376 FAIL_ON(!mode.bpp_specified);
377 FAIL_ON(mode.bpp != 24);
379 FAIL_ON(mode.rb);
380 FAIL_ON(mode.cvt);
381 FAIL_ON(mode.interlace);
382 FAIL_ON(mode.margins);
383 FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
385 return 0;
388 static int drm_cmdline_test_res_bpp_refresh_interlaced(void *ignored)
390 struct drm_cmdline_mode mode = { };
392 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480-24@60i",
393 &no_connector,
394 &mode));
395 FAIL_ON(!mode.specified);
396 FAIL_ON(mode.xres != 720);
397 FAIL_ON(mode.yres != 480);
399 FAIL_ON(!mode.refresh_specified);
400 FAIL_ON(mode.refresh != 60);
402 FAIL_ON(!mode.bpp_specified);
403 FAIL_ON(mode.bpp != 24);
405 FAIL_ON(mode.rb);
406 FAIL_ON(mode.cvt);
407 FAIL_ON(!mode.interlace);
408 FAIL_ON(mode.margins);
409 FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
411 return 0;
414 static int drm_cmdline_test_res_bpp_refresh_margins(void *ignored)
416 struct drm_cmdline_mode mode = { };
418 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480-24@60m",
419 &no_connector,
420 &mode));
421 FAIL_ON(!mode.specified);
422 FAIL_ON(mode.xres != 720);
423 FAIL_ON(mode.yres != 480);
425 FAIL_ON(!mode.refresh_specified);
426 FAIL_ON(mode.refresh != 60);
428 FAIL_ON(!mode.bpp_specified);
429 FAIL_ON(mode.bpp != 24);
431 FAIL_ON(mode.rb);
432 FAIL_ON(mode.cvt);
433 FAIL_ON(mode.interlace);
434 FAIL_ON(!mode.margins);
435 FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
437 return 0;
440 static int drm_cmdline_test_res_bpp_refresh_force_off(void *ignored)
442 struct drm_cmdline_mode mode = { };
444 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480-24@60d",
445 &no_connector,
446 &mode));
447 FAIL_ON(!mode.specified);
448 FAIL_ON(mode.xres != 720);
449 FAIL_ON(mode.yres != 480);
451 FAIL_ON(!mode.refresh_specified);
452 FAIL_ON(mode.refresh != 60);
454 FAIL_ON(!mode.bpp_specified);
455 FAIL_ON(mode.bpp != 24);
457 FAIL_ON(mode.rb);
458 FAIL_ON(mode.cvt);
459 FAIL_ON(mode.interlace);
460 FAIL_ON(mode.margins);
461 FAIL_ON(mode.force != DRM_FORCE_OFF);
463 return 0;
466 static int drm_cmdline_test_res_bpp_refresh_force_on_off(void *ignored)
468 struct drm_cmdline_mode mode = { };
470 FAIL_ON(drm_mode_parse_command_line_for_connector("720x480-24@60de",
471 &no_connector,
472 &mode));
474 return 0;
477 static int drm_cmdline_test_res_bpp_refresh_force_on(void *ignored)
479 struct drm_cmdline_mode mode = { };
481 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480-24@60e",
482 &no_connector,
483 &mode));
484 FAIL_ON(!mode.specified);
485 FAIL_ON(mode.xres != 720);
486 FAIL_ON(mode.yres != 480);
488 FAIL_ON(!mode.refresh_specified);
489 FAIL_ON(mode.refresh != 60);
491 FAIL_ON(!mode.bpp_specified);
492 FAIL_ON(mode.bpp != 24);
494 FAIL_ON(mode.rb);
495 FAIL_ON(mode.cvt);
496 FAIL_ON(mode.interlace);
497 FAIL_ON(mode.margins);
498 FAIL_ON(mode.force != DRM_FORCE_ON);
500 return 0;
503 static int drm_cmdline_test_res_bpp_refresh_force_on_analog(void *ignored)
505 struct drm_cmdline_mode mode = { };
507 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480-24@60D",
508 &no_connector,
509 &mode));
510 FAIL_ON(!mode.specified);
511 FAIL_ON(mode.xres != 720);
512 FAIL_ON(mode.yres != 480);
514 FAIL_ON(!mode.refresh_specified);
515 FAIL_ON(mode.refresh != 60);
517 FAIL_ON(!mode.bpp_specified);
518 FAIL_ON(mode.bpp != 24);
520 FAIL_ON(mode.rb);
521 FAIL_ON(mode.cvt);
522 FAIL_ON(mode.interlace);
523 FAIL_ON(mode.margins);
524 FAIL_ON(mode.force != DRM_FORCE_ON);
526 return 0;
529 static int drm_cmdline_test_res_bpp_refresh_force_on_digital(void *ignored)
531 struct drm_cmdline_mode mode = { };
532 static const struct drm_connector connector = {
533 .connector_type = DRM_MODE_CONNECTOR_DVII,
536 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480-24@60D",
537 &connector,
538 &mode));
539 FAIL_ON(!mode.specified);
540 FAIL_ON(mode.xres != 720);
541 FAIL_ON(mode.yres != 480);
543 FAIL_ON(!mode.refresh_specified);
544 FAIL_ON(mode.refresh != 60);
546 FAIL_ON(!mode.bpp_specified);
547 FAIL_ON(mode.bpp != 24);
549 FAIL_ON(mode.rb);
550 FAIL_ON(mode.cvt);
551 FAIL_ON(mode.interlace);
552 FAIL_ON(mode.margins);
553 FAIL_ON(mode.force != DRM_FORCE_ON_DIGITAL);
555 return 0;
558 static int drm_cmdline_test_res_bpp_refresh_interlaced_margins_force_on(void *ignored)
560 struct drm_cmdline_mode mode = { };
562 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480-24@60ime",
563 &no_connector,
564 &mode));
565 FAIL_ON(!mode.specified);
566 FAIL_ON(mode.xres != 720);
567 FAIL_ON(mode.yres != 480);
569 FAIL_ON(!mode.refresh_specified);
570 FAIL_ON(mode.refresh != 60);
572 FAIL_ON(!mode.bpp_specified);
573 FAIL_ON(mode.bpp != 24);
575 FAIL_ON(mode.rb);
576 FAIL_ON(mode.cvt);
577 FAIL_ON(!mode.interlace);
578 FAIL_ON(!mode.margins);
579 FAIL_ON(mode.force != DRM_FORCE_ON);
581 return 0;
584 static int drm_cmdline_test_res_margins_force_on(void *ignored)
586 struct drm_cmdline_mode mode = { };
588 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480me",
589 &no_connector,
590 &mode));
591 FAIL_ON(!mode.specified);
592 FAIL_ON(mode.xres != 720);
593 FAIL_ON(mode.yres != 480);
595 FAIL_ON(mode.refresh_specified);
597 FAIL_ON(mode.bpp_specified);
599 FAIL_ON(mode.rb);
600 FAIL_ON(mode.cvt);
601 FAIL_ON(mode.interlace);
602 FAIL_ON(!mode.margins);
603 FAIL_ON(mode.force != DRM_FORCE_ON);
605 return 0;
608 static int drm_cmdline_test_res_vesa_margins(void *ignored)
610 struct drm_cmdline_mode mode = { };
612 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480Mm",
613 &no_connector,
614 &mode));
615 FAIL_ON(!mode.specified);
616 FAIL_ON(mode.xres != 720);
617 FAIL_ON(mode.yres != 480);
619 FAIL_ON(mode.refresh_specified);
621 FAIL_ON(mode.bpp_specified);
623 FAIL_ON(mode.rb);
624 FAIL_ON(!mode.cvt);
625 FAIL_ON(mode.interlace);
626 FAIL_ON(!mode.margins);
627 FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
629 return 0;
632 static int drm_cmdline_test_res_invalid_mode(void *ignored)
634 struct drm_cmdline_mode mode = { };
636 FAIL_ON(drm_mode_parse_command_line_for_connector("720x480f",
637 &no_connector,
638 &mode));
640 return 0;
643 static int drm_cmdline_test_res_bpp_wrong_place_mode(void *ignored)
645 struct drm_cmdline_mode mode = { };
647 FAIL_ON(drm_mode_parse_command_line_for_connector("720x480e-24",
648 &no_connector,
649 &mode));
651 return 0;
654 static int drm_cmdline_test_name(void *ignored)
656 struct drm_cmdline_mode mode = { };
658 FAIL_ON(!drm_mode_parse_command_line_for_connector("NTSC",
659 &no_connector,
660 &mode));
661 FAIL_ON(strcmp(mode.name, "NTSC"));
662 FAIL_ON(mode.refresh_specified);
663 FAIL_ON(mode.bpp_specified);
665 return 0;
668 static int drm_cmdline_test_name_bpp(void *ignored)
670 struct drm_cmdline_mode mode = { };
672 FAIL_ON(!drm_mode_parse_command_line_for_connector("NTSC-24",
673 &no_connector,
674 &mode));
675 FAIL_ON(strcmp(mode.name, "NTSC"));
677 FAIL_ON(mode.refresh_specified);
679 FAIL_ON(!mode.bpp_specified);
680 FAIL_ON(mode.bpp != 24);
682 return 0;
685 static int drm_cmdline_test_name_bpp_refresh(void *ignored)
687 struct drm_cmdline_mode mode = { };
689 FAIL_ON(drm_mode_parse_command_line_for_connector("NTSC-24@60",
690 &no_connector,
691 &mode));
693 return 0;
696 static int drm_cmdline_test_name_refresh(void *ignored)
698 struct drm_cmdline_mode mode = { };
700 FAIL_ON(drm_mode_parse_command_line_for_connector("NTSC@60",
701 &no_connector,
702 &mode));
704 return 0;
707 static int drm_cmdline_test_name_refresh_wrong_mode(void *ignored)
709 struct drm_cmdline_mode mode = { };
711 FAIL_ON(drm_mode_parse_command_line_for_connector("NTSC@60m",
712 &no_connector,
713 &mode));
715 return 0;
718 static int drm_cmdline_test_name_refresh_invalid_mode(void *ignored)
720 struct drm_cmdline_mode mode = { };
722 FAIL_ON(drm_mode_parse_command_line_for_connector("NTSC@60f",
723 &no_connector,
724 &mode));
726 return 0;
729 static int drm_cmdline_test_name_option(void *ignored)
731 struct drm_cmdline_mode mode = { };
733 FAIL_ON(!drm_mode_parse_command_line_for_connector("NTSC,rotate=180",
734 &no_connector,
735 &mode));
736 FAIL_ON(!mode.specified);
737 FAIL_ON(strcmp(mode.name, "NTSC"));
738 FAIL_ON(mode.rotation_reflection != DRM_MODE_ROTATE_180);
740 return 0;
743 static int drm_cmdline_test_name_bpp_option(void *ignored)
745 struct drm_cmdline_mode mode = { };
747 FAIL_ON(!drm_mode_parse_command_line_for_connector("NTSC-24,rotate=180",
748 &no_connector,
749 &mode));
750 FAIL_ON(!mode.specified);
751 FAIL_ON(strcmp(mode.name, "NTSC"));
752 FAIL_ON(mode.rotation_reflection != DRM_MODE_ROTATE_180);
753 FAIL_ON(!mode.bpp_specified);
754 FAIL_ON(mode.bpp != 24);
756 return 0;
759 static int drm_cmdline_test_rotate_0(void *ignored)
761 struct drm_cmdline_mode mode = { };
763 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480,rotate=0",
764 &no_connector,
765 &mode));
766 FAIL_ON(!mode.specified);
767 FAIL_ON(mode.xres != 720);
768 FAIL_ON(mode.yres != 480);
769 FAIL_ON(mode.rotation_reflection != DRM_MODE_ROTATE_0);
771 FAIL_ON(mode.refresh_specified);
773 FAIL_ON(mode.bpp_specified);
775 FAIL_ON(mode.rb);
776 FAIL_ON(mode.cvt);
777 FAIL_ON(mode.interlace);
778 FAIL_ON(mode.margins);
779 FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
781 return 0;
784 static int drm_cmdline_test_rotate_90(void *ignored)
786 struct drm_cmdline_mode mode = { };
788 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480,rotate=90",
789 &no_connector,
790 &mode));
791 FAIL_ON(!mode.specified);
792 FAIL_ON(mode.xres != 720);
793 FAIL_ON(mode.yres != 480);
794 FAIL_ON(mode.rotation_reflection != DRM_MODE_ROTATE_90);
796 FAIL_ON(mode.refresh_specified);
798 FAIL_ON(mode.bpp_specified);
800 FAIL_ON(mode.rb);
801 FAIL_ON(mode.cvt);
802 FAIL_ON(mode.interlace);
803 FAIL_ON(mode.margins);
804 FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
806 return 0;
809 static int drm_cmdline_test_rotate_180(void *ignored)
811 struct drm_cmdline_mode mode = { };
813 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480,rotate=180",
814 &no_connector,
815 &mode));
816 FAIL_ON(!mode.specified);
817 FAIL_ON(mode.xres != 720);
818 FAIL_ON(mode.yres != 480);
819 FAIL_ON(mode.rotation_reflection != DRM_MODE_ROTATE_180);
821 FAIL_ON(mode.refresh_specified);
823 FAIL_ON(mode.bpp_specified);
825 FAIL_ON(mode.rb);
826 FAIL_ON(mode.cvt);
827 FAIL_ON(mode.interlace);
828 FAIL_ON(mode.margins);
829 FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
831 return 0;
834 static int drm_cmdline_test_rotate_270(void *ignored)
836 struct drm_cmdline_mode mode = { };
838 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480,rotate=270",
839 &no_connector,
840 &mode));
841 FAIL_ON(!mode.specified);
842 FAIL_ON(mode.xres != 720);
843 FAIL_ON(mode.yres != 480);
844 FAIL_ON(mode.rotation_reflection != DRM_MODE_ROTATE_270);
846 FAIL_ON(mode.refresh_specified);
848 FAIL_ON(mode.bpp_specified);
850 FAIL_ON(mode.rb);
851 FAIL_ON(mode.cvt);
852 FAIL_ON(mode.interlace);
853 FAIL_ON(mode.margins);
854 FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
856 return 0;
859 static int drm_cmdline_test_rotate_invalid_val(void *ignored)
861 struct drm_cmdline_mode mode = { };
863 FAIL_ON(drm_mode_parse_command_line_for_connector("720x480,rotate=42",
864 &no_connector,
865 &mode));
867 return 0;
870 static int drm_cmdline_test_rotate_truncated(void *ignored)
872 struct drm_cmdline_mode mode = { };
874 FAIL_ON(drm_mode_parse_command_line_for_connector("720x480,rotate=",
875 &no_connector,
876 &mode));
878 return 0;
881 static int drm_cmdline_test_hmirror(void *ignored)
883 struct drm_cmdline_mode mode = { };
885 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480,reflect_x",
886 &no_connector,
887 &mode));
888 FAIL_ON(!mode.specified);
889 FAIL_ON(mode.xres != 720);
890 FAIL_ON(mode.yres != 480);
891 FAIL_ON(mode.rotation_reflection != DRM_MODE_REFLECT_X);
893 FAIL_ON(mode.refresh_specified);
895 FAIL_ON(mode.bpp_specified);
897 FAIL_ON(mode.rb);
898 FAIL_ON(mode.cvt);
899 FAIL_ON(mode.interlace);
900 FAIL_ON(mode.margins);
901 FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
903 return 0;
906 static int drm_cmdline_test_vmirror(void *ignored)
908 struct drm_cmdline_mode mode = { };
910 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480,reflect_y",
911 &no_connector,
912 &mode));
913 FAIL_ON(!mode.specified);
914 FAIL_ON(mode.xres != 720);
915 FAIL_ON(mode.yres != 480);
916 FAIL_ON(mode.rotation_reflection != DRM_MODE_REFLECT_Y);
918 FAIL_ON(mode.refresh_specified);
920 FAIL_ON(mode.bpp_specified);
922 FAIL_ON(mode.rb);
923 FAIL_ON(mode.cvt);
924 FAIL_ON(mode.interlace);
925 FAIL_ON(mode.margins);
926 FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
928 return 0;
931 static int drm_cmdline_test_margin_options(void *ignored)
933 struct drm_cmdline_mode mode = { };
935 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480,margin_right=14,margin_left=24,margin_bottom=36,margin_top=42",
936 &no_connector,
937 &mode));
938 FAIL_ON(!mode.specified);
939 FAIL_ON(mode.xres != 720);
940 FAIL_ON(mode.yres != 480);
941 FAIL_ON(mode.tv_margins.right != 14);
942 FAIL_ON(mode.tv_margins.left != 24);
943 FAIL_ON(mode.tv_margins.bottom != 36);
944 FAIL_ON(mode.tv_margins.top != 42);
946 FAIL_ON(mode.refresh_specified);
948 FAIL_ON(mode.bpp_specified);
950 FAIL_ON(mode.rb);
951 FAIL_ON(mode.cvt);
952 FAIL_ON(mode.interlace);
953 FAIL_ON(mode.margins);
954 FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
956 return 0;
959 static int drm_cmdline_test_multiple_options(void *ignored)
961 struct drm_cmdline_mode mode = { };
963 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480,rotate=270,reflect_x",
964 &no_connector,
965 &mode));
966 FAIL_ON(!mode.specified);
967 FAIL_ON(mode.xres != 720);
968 FAIL_ON(mode.yres != 480);
969 FAIL_ON(mode.rotation_reflection != (DRM_MODE_ROTATE_270 | DRM_MODE_REFLECT_X));
971 FAIL_ON(mode.refresh_specified);
973 FAIL_ON(mode.bpp_specified);
975 FAIL_ON(mode.rb);
976 FAIL_ON(mode.cvt);
977 FAIL_ON(mode.interlace);
978 FAIL_ON(mode.margins);
979 FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
981 return 0;
984 static int drm_cmdline_test_invalid_option(void *ignored)
986 struct drm_cmdline_mode mode = { };
988 FAIL_ON(drm_mode_parse_command_line_for_connector("720x480,test=42",
989 &no_connector,
990 &mode));
992 return 0;
995 static int drm_cmdline_test_bpp_extra_and_option(void *ignored)
997 struct drm_cmdline_mode mode = { };
999 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480-24e,rotate=180",
1000 &no_connector,
1001 &mode));
1002 FAIL_ON(!mode.specified);
1003 FAIL_ON(mode.xres != 720);
1004 FAIL_ON(mode.yres != 480);
1005 FAIL_ON(mode.rotation_reflection != DRM_MODE_ROTATE_180);
1007 FAIL_ON(mode.refresh_specified);
1009 FAIL_ON(!mode.bpp_specified);
1010 FAIL_ON(mode.bpp != 24);
1012 FAIL_ON(mode.rb);
1013 FAIL_ON(mode.cvt);
1014 FAIL_ON(mode.interlace);
1015 FAIL_ON(mode.margins);
1016 FAIL_ON(mode.force != DRM_FORCE_ON);
1018 return 0;
1021 static int drm_cmdline_test_extra_and_option(void *ignored)
1023 struct drm_cmdline_mode mode = { };
1025 FAIL_ON(!drm_mode_parse_command_line_for_connector("720x480e,rotate=180",
1026 &no_connector,
1027 &mode));
1028 FAIL_ON(!mode.specified);
1029 FAIL_ON(mode.xres != 720);
1030 FAIL_ON(mode.yres != 480);
1031 FAIL_ON(mode.rotation_reflection != DRM_MODE_ROTATE_180);
1033 FAIL_ON(mode.refresh_specified);
1034 FAIL_ON(mode.bpp_specified);
1036 FAIL_ON(mode.rb);
1037 FAIL_ON(mode.cvt);
1038 FAIL_ON(mode.interlace);
1039 FAIL_ON(mode.margins);
1040 FAIL_ON(mode.force != DRM_FORCE_ON);
1042 return 0;
1045 static int drm_cmdline_test_freestanding_options(void *ignored)
1047 struct drm_cmdline_mode mode = { };
1049 FAIL_ON(!drm_mode_parse_command_line_for_connector("margin_right=14,margin_left=24,margin_bottom=36,margin_top=42",
1050 &no_connector,
1051 &mode));
1052 FAIL_ON(mode.specified);
1053 FAIL_ON(mode.refresh_specified);
1054 FAIL_ON(mode.bpp_specified);
1056 FAIL_ON(mode.tv_margins.right != 14);
1057 FAIL_ON(mode.tv_margins.left != 24);
1058 FAIL_ON(mode.tv_margins.bottom != 36);
1059 FAIL_ON(mode.tv_margins.top != 42);
1061 FAIL_ON(mode.rb);
1062 FAIL_ON(mode.cvt);
1063 FAIL_ON(mode.interlace);
1064 FAIL_ON(mode.margins);
1065 FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
1067 return 0;
1070 static int drm_cmdline_test_freestanding_force_e_and_options(void *ignored)
1072 struct drm_cmdline_mode mode = { };
1074 FAIL_ON(!drm_mode_parse_command_line_for_connector("e,margin_right=14,margin_left=24,margin_bottom=36,margin_top=42",
1075 &no_connector,
1076 &mode));
1077 FAIL_ON(mode.specified);
1078 FAIL_ON(mode.refresh_specified);
1079 FAIL_ON(mode.bpp_specified);
1081 FAIL_ON(mode.tv_margins.right != 14);
1082 FAIL_ON(mode.tv_margins.left != 24);
1083 FAIL_ON(mode.tv_margins.bottom != 36);
1084 FAIL_ON(mode.tv_margins.top != 42);
1086 FAIL_ON(mode.rb);
1087 FAIL_ON(mode.cvt);
1088 FAIL_ON(mode.interlace);
1089 FAIL_ON(mode.margins);
1090 FAIL_ON(mode.force != DRM_FORCE_ON);
1092 return 0;
1095 static int drm_cmdline_test_panel_orientation(void *ignored)
1097 struct drm_cmdline_mode mode = { };
1099 FAIL_ON(!drm_mode_parse_command_line_for_connector("panel_orientation=upside_down",
1100 &no_connector,
1101 &mode));
1102 FAIL_ON(mode.specified);
1103 FAIL_ON(mode.refresh_specified);
1104 FAIL_ON(mode.bpp_specified);
1106 FAIL_ON(mode.panel_orientation != DRM_MODE_PANEL_ORIENTATION_BOTTOM_UP);
1108 FAIL_ON(mode.rb);
1109 FAIL_ON(mode.cvt);
1110 FAIL_ON(mode.interlace);
1111 FAIL_ON(mode.margins);
1112 FAIL_ON(mode.force != DRM_FORCE_UNSPECIFIED);
1114 return 0;
1117 #include "drm_selftest.c"
1119 static int __init test_drm_cmdline_init(void)
1121 int err;
1123 err = run_selftests(selftests, ARRAY_SIZE(selftests), NULL);
1125 return err > 0 ? 0 : err;
1127 module_init(test_drm_cmdline_init);
1129 MODULE_AUTHOR("Maxime Ripard <maxime.ripard@bootlin.com>");
1130 MODULE_LICENSE("GPL");