Skip to content

Commit 424c38a

Browse files
committed
drm/selftests: modes: Add more unit tests for the cmdline parser
Let's add some unit tests for the recent bugs we just fixed. Signed-off-by: Maxime Ripard <[email protected]> Tested-by: Thomas Graichen <[email protected]> Reviewed-by: Jernej Skrabec <[email protected]> Signed-off-by: Maxime Ripard <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
1 parent 3764137 commit 424c38a

File tree

2 files changed

+137
-0
lines changed

2 files changed

+137
-0
lines changed

drivers/gpu/drm/selftests/drm_cmdline_selftests.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,13 @@
99

1010
#define cmdline_test(test) selftest(test, test)
1111

12+
cmdline_test(drm_cmdline_test_force_d_only)
13+
cmdline_test(drm_cmdline_test_force_D_only_dvi)
14+
cmdline_test(drm_cmdline_test_force_D_only_hdmi)
15+
cmdline_test(drm_cmdline_test_force_D_only_not_digital)
16+
cmdline_test(drm_cmdline_test_force_e_only)
17+
cmdline_test(drm_cmdline_test_margin_only)
18+
cmdline_test(drm_cmdline_test_interlace_only)
1219
cmdline_test(drm_cmdline_test_res)
1320
cmdline_test(drm_cmdline_test_res_missing_x)
1421
cmdline_test(drm_cmdline_test_res_missing_y)

drivers/gpu/drm/selftests/test-drm_cmdline_parser.c

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,136 @@
1717

1818
static const struct drm_connector no_connector = {};
1919

20+
static int drm_cmdline_test_force_e_only(void *ignored)
21+
{
22+
struct drm_cmdline_mode mode = { };
23+
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);
30+
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);
36+
37+
return 0;
38+
}
39+
40+
static int drm_cmdline_test_force_D_only_not_digital(void *ignored)
41+
{
42+
struct drm_cmdline_mode mode = { };
43+
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);
50+
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);
56+
57+
return 0;
58+
}
59+
60+
static const struct drm_connector connector_hdmi = {
61+
.connector_type = DRM_MODE_CONNECTOR_HDMIB,
62+
};
63+
64+
static int drm_cmdline_test_force_D_only_hdmi(void *ignored)
65+
{
66+
struct drm_cmdline_mode mode = { };
67+
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);
74+
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);
80+
81+
return 0;
82+
}
83+
84+
static const struct drm_connector connector_dvi = {
85+
.connector_type = DRM_MODE_CONNECTOR_DVII,
86+
};
87+
88+
static int drm_cmdline_test_force_D_only_dvi(void *ignored)
89+
{
90+
struct drm_cmdline_mode mode = { };
91+
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);
98+
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);
104+
105+
return 0;
106+
}
107+
108+
static int drm_cmdline_test_force_d_only(void *ignored)
109+
{
110+
struct drm_cmdline_mode mode = { };
111+
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);
118+
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);
124+
125+
return 0;
126+
}
127+
128+
static int drm_cmdline_test_margin_only(void *ignored)
129+
{
130+
struct drm_cmdline_mode mode = { };
131+
132+
FAIL_ON(drm_mode_parse_command_line_for_connector("m",
133+
&no_connector,
134+
&mode));
135+
136+
return 0;
137+
}
138+
139+
static int drm_cmdline_test_interlace_only(void *ignored)
140+
{
141+
struct drm_cmdline_mode mode = { };
142+
143+
FAIL_ON(drm_mode_parse_command_line_for_connector("i",
144+
&no_connector,
145+
&mode));
146+
147+
return 0;
148+
}
149+
20150
static int drm_cmdline_test_res(void *ignored)
21151
{
22152
struct drm_cmdline_mode mode = { };

0 commit comments

Comments
 (0)