Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/tests: Add test for drm_crtc_in_clone_mode()

Add kunit test to validate drm_crtc_in_clone_mode() helper

Signed-off-by: Jessica Zhang <quic_jesszhan@quicinc.com>
Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
Reviewed-by: Maxime Ripard <mripard@kernel.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20241216-concurrent-wb-v4-2-fe220297a7f0@quicinc.com
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>

authored by

Jessica Zhang and committed by
Dmitry Baryshkov
5a6e8c36 eee0912a

+61 -1
+61 -1
drivers/gpu/drm/tests/drm_atomic_state_test.c
··· 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, ··· 233 227 KUNIT_ASSERT_EQ(test, modeset_counter, initial_modeset_count + 1); 234 228 } 235 229 230 + /* 231 + * Test that the drm_crtc_in_clone_mode() helper can detect if a given CRTC 232 + * state is in clone mode 233 + */ 234 + static void drm_test_check_in_clone_mode(struct kunit *test) 235 + { 236 + bool ret; 237 + const struct drm_clone_mode_test *param = test->param_value; 238 + struct drm_crtc_state *crtc_state; 239 + 240 + crtc_state = kunit_kzalloc(test, sizeof(*crtc_state), GFP_KERNEL); 241 + KUNIT_ASSERT_NOT_NULL(test, crtc_state); 242 + 243 + crtc_state->encoder_mask = param->encoder_mask; 244 + 245 + ret = drm_crtc_in_clone_mode(crtc_state); 246 + 247 + KUNIT_ASSERT_EQ(test, ret, param->expected_result); 248 + } 249 + 250 + static void drm_check_in_clone_mode_desc(const struct drm_clone_mode_test *t, 251 + char *desc) 252 + { 253 + sprintf(desc, "%s", t->name); 254 + } 255 + 256 + static const struct drm_clone_mode_test drm_clone_mode_tests[] = { 257 + { 258 + .name = "in_clone_mode", 259 + .encoder_mask = DRM_TEST_ENC_0 | DRM_TEST_ENC_1, 260 + .expected_result = true, 261 + }, 262 + { 263 + .name = "not_in_clone_mode", 264 + .encoder_mask = DRM_TEST_ENC_0, 265 + .expected_result = false, 266 + }, 267 + }; 268 + 269 + KUNIT_ARRAY_PARAM(drm_check_in_clone_mode, drm_clone_mode_tests, 270 + drm_check_in_clone_mode_desc); 271 + 236 272 static struct kunit_case drm_test_check_modeset_test[] = { 237 273 KUNIT_CASE(drm_test_check_connector_changed_modeset), 274 + {} 275 + }; 276 + 277 + static struct kunit_case drm_in_clone_mode_check_test[] = { 278 + KUNIT_CASE_PARAM(drm_test_check_in_clone_mode, 279 + drm_check_in_clone_mode_gen_params), 238 280 {} 239 281 }; 240 282 ··· 291 237 .test_cases = drm_test_check_modeset_test, 292 238 }; 293 239 294 - kunit_test_suite(drm_test_check_modeset_test_suite); 240 + static struct kunit_suite drm_in_clone_mode_check_test_suite = { 241 + .name = "drm_validate_clone_mode", 242 + .test_cases = drm_in_clone_mode_check_test, 243 + }; 244 + 245 + kunit_test_suites(&drm_in_clone_mode_check_test_suite, 246 + &drm_test_check_modeset_test_suite); 295 247 296 248 MODULE_AUTHOR("Jessica Zhang <quic_jesszhan@quicinc.com"); 297 249 MODULE_DESCRIPTION("Test cases for the drm_atomic_helper functions");