|
17 | 17 |
|
18 | 18 | #define DRM_TEST_CONN_0 BIT(0) |
19 | 19 |
|
| 20 | +struct drm_clone_mode_test { |
| 21 | + const char *name; |
| 22 | + u32 encoder_mask; |
| 23 | + int expected_result; |
| 24 | +}; |
| 25 | + |
20 | 26 | static const struct drm_display_mode drm_atomic_test_mode = { |
21 | 27 | DRM_MODE("1024x768", 0, 65000, 1024, 1048, |
22 | 28 | 1184, 1344, 0, 768, 771, 777, 806, 0, |
@@ -227,17 +233,71 @@ static void drm_test_check_connector_changed_modeset(struct kunit *test) |
227 | 233 | KUNIT_ASSERT_EQ(test, modeset_counter, initial_modeset_count + 1); |
228 | 234 | } |
229 | 235 |
|
| 236 | +/* |
| 237 | + * Test that the drm_crtc_in_clone_mode() helper can detect if a given CRTC |
| 238 | + * state is in clone mode |
| 239 | + */ |
| 240 | +static void drm_test_check_in_clone_mode(struct kunit *test) |
| 241 | +{ |
| 242 | + bool ret; |
| 243 | + const struct drm_clone_mode_test *param = test->param_value; |
| 244 | + struct drm_crtc_state *crtc_state; |
| 245 | + |
| 246 | + crtc_state = kunit_kzalloc(test, sizeof(*crtc_state), GFP_KERNEL); |
| 247 | + KUNIT_ASSERT_NOT_NULL(test, crtc_state); |
| 248 | + |
| 249 | + crtc_state->encoder_mask = param->encoder_mask; |
| 250 | + |
| 251 | + ret = drm_crtc_in_clone_mode(crtc_state); |
| 252 | + |
| 253 | + KUNIT_ASSERT_EQ(test, ret, param->expected_result); |
| 254 | +} |
| 255 | + |
| 256 | +static void drm_check_in_clone_mode_desc(const struct drm_clone_mode_test *t, |
| 257 | + char *desc) |
| 258 | +{ |
| 259 | + sprintf(desc, "%s", t->name); |
| 260 | +} |
| 261 | + |
| 262 | +static const struct drm_clone_mode_test drm_clone_mode_tests[] = { |
| 263 | + { |
| 264 | + .name = "in_clone_mode", |
| 265 | + .encoder_mask = DRM_TEST_ENC_0 | DRM_TEST_ENC_1, |
| 266 | + .expected_result = true, |
| 267 | + }, |
| 268 | + { |
| 269 | + .name = "not_in_clone_mode", |
| 270 | + .encoder_mask = DRM_TEST_ENC_0, |
| 271 | + .expected_result = false, |
| 272 | + }, |
| 273 | +}; |
| 274 | + |
| 275 | +KUNIT_ARRAY_PARAM(drm_check_in_clone_mode, drm_clone_mode_tests, |
| 276 | + drm_check_in_clone_mode_desc); |
| 277 | + |
230 | 278 | static struct kunit_case drm_test_check_modeset_test[] = { |
231 | 279 | KUNIT_CASE(drm_test_check_connector_changed_modeset), |
232 | 280 | {} |
233 | 281 | }; |
234 | 282 |
|
| 283 | +static struct kunit_case drm_in_clone_mode_check_test[] = { |
| 284 | + KUNIT_CASE_PARAM(drm_test_check_in_clone_mode, |
| 285 | + drm_check_in_clone_mode_gen_params), |
| 286 | + {} |
| 287 | +}; |
| 288 | + |
235 | 289 | static struct kunit_suite drm_test_check_modeset_test_suite = { |
236 | 290 | .name = "drm_validate_modeset", |
237 | 291 | .test_cases = drm_test_check_modeset_test, |
238 | 292 | }; |
239 | 293 |
|
240 | | -kunit_test_suite(drm_test_check_modeset_test_suite); |
| 294 | +static struct kunit_suite drm_in_clone_mode_check_test_suite = { |
| 295 | + .name = "drm_validate_clone_mode", |
| 296 | + .test_cases = drm_in_clone_mode_check_test, |
| 297 | +}; |
| 298 | + |
| 299 | +kunit_test_suites(&drm_in_clone_mode_check_test_suite, |
| 300 | + &drm_test_check_modeset_test_suite); |
241 | 301 |
|
242 | 302 | MODULE_AUTHOR( "Jessica Zhang <[email protected]"); |
243 | 303 | MODULE_DESCRIPTION("Test cases for the drm_atomic_helper functions"); |
|
0 commit comments