diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.c index 9f1500a5b854..d386ecddf7f1 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_connector.c @@ -2281,8 +2281,8 @@ amdgpu_dm_create_validate_stream_for_sink(struct drm_connector *connector, * below gate which of these entries are actually attempted. */ static const enum dc_pixel_encoding encoding_order[] = { - PIXEL_ENCODING_YCBCR444, PIXEL_ENCODING_RGB, + PIXEL_ENCODING_YCBCR444, PIXEL_ENCODING_YCBCR422, PIXEL_ENCODING_YCBCR420, }; diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_connector_test.c b/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_connector_test.c index 576d84be2363..666d10f76ce3 100644 --- a/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_connector_test.c +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/tests/amdgpu_dm_connector_test.c @@ -7122,6 +7122,39 @@ static void dm_test_create_validate_stream_prune_context(struct kunit *test) NULL)); } +static enum dc_pixel_encoding dm_test_cvs_first_encoding; + +static bool dm_test_cvs_record_first_encoding(struct timing_generator *tg, + const struct dc_crtc_timing *timing) +{ + if (dm_test_cvs_first_encoding == PIXEL_ENCODING_UNDEFINED) + dm_test_cvs_first_encoding = timing->pixel_encoding; + + return false; +} + +/** + * dm_test_create_validate_stream_hdmi_rgb_first - HDMI tries RGB before YCbCr 4:4:4 + * @test: The KUnit test context + */ +static void dm_test_create_validate_stream_hdmi_rgb_first(struct kunit *test) +{ + struct dm_test_cvs_dc *c = dm_test_cvs_dc_alloc(test); + + c->link->connector_signal = SIGNAL_TYPE_HDMI_TYPE_A; + c->aconnector->base.display_info.color_formats = + BIT(DRM_OUTPUT_COLOR_FORMAT_YCBCR444); + c->tgfuncs->validate_timing = dm_test_cvs_record_first_encoding; + dm_test_cvs_first_encoding = PIXEL_ENCODING_UNDEFINED; + + KUNIT_EXPECT_NULL(test, + amdgpu_dm_create_validate_stream_for_sink(&c->aconnector->base, + c->mode, + c->dm_state, + NULL)); + KUNIT_EXPECT_EQ(test, (int)dm_test_cvs_first_encoding, (int)PIXEL_ENCODING_RGB); +} + /* Further tests for amdgpu_dm_connector_mode_valid() */ /** @@ -10257,6 +10290,7 @@ static struct kunit_case amdgpu_dm_connector_tests[] = { KUNIT_CASE(dm_test_create_validate_stream_force_ycbcr444), KUNIT_CASE(dm_test_create_validate_stream_prune_timing), KUNIT_CASE(dm_test_create_validate_stream_prune_context), + KUNIT_CASE(dm_test_create_validate_stream_hdmi_rgb_first), /* amdgpu_dm_update_connector_after_detect */ KUNIT_CASE(dm_test_update_after_detect_mst_noop), KUNIT_CASE(dm_test_update_after_detect_sink_unchanged),