Hi, On Fri, Apr 25, 2025 at 01:27:14PM +0300, Cristian Ciocaltea wrote: > Provide a test to verify that if both driver and screen support RGB and > YUV420 formats, drm_atomic_helper_connector_hdmi_check() cannot succeed > when trying to set a mode unsupported by the display. > > Signed-off-by: Cristian Ciocaltea <cristian.ciocal...@collabora.com> > --- > drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c | 66 > ++++++++++++++++++++++ > 1 file changed, 66 insertions(+) > > diff --git a/drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c > b/drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c > index > d79084cfb516b69c4244098c0767d604ad02f2c3..6337a1c52b86810c638f446c4995e7ee63dbc084 > 100644 > --- a/drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c > +++ b/drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c > @@ -1622,6 +1622,71 @@ static void > drm_test_check_driver_unsupported_fallback_yuv420(struct kunit *test > drm_modeset_acquire_fini(&ctx); > } > > +/* > + * Test that if a driver and screen supports RGB and YUV420 formats, but the > + * chosen mode cannot be supported by the screen, we end up with unsuccessful > + * fallback attempts. > + */ > +static void drm_test_check_display_unsupported_fallback_rgb_yuv420(struct > kunit *test) > +{ > + struct drm_atomic_helper_connector_hdmi_priv *priv; > + struct drm_modeset_acquire_ctx ctx; > + struct drm_crtc_state *crtc_state; > + struct drm_atomic_state *state; > + struct drm_display_info *info; > + struct drm_display_mode *preferred, *unsupported_mode; > + struct drm_connector *conn; > + struct drm_device *drm; > + struct drm_crtc *crtc; > + int ret; > + > + priv = drm_kunit_helper_connector_hdmi_init_with_edid_funcs(test, > + BIT(HDMI_COLORSPACE_RGB) | > + BIT(HDMI_COLORSPACE_YUV420), > + 10, > + &dummy_connector_hdmi_funcs, > + test_edid_hdmi_4k_rgb_yuv420_dc_max_340mhz); > + KUNIT_ASSERT_NOT_NULL(test, priv); > + > + drm = &priv->drm; > + crtc = priv->crtc; > + conn = &priv->connector; > + info = &conn->display_info; > + KUNIT_ASSERT_TRUE(test, info->is_hdmi); > + KUNIT_ASSERT_TRUE(test, conn->ycbcr_420_allowed); > + > + preferred = find_preferred_mode(conn); > + KUNIT_ASSERT_NOT_NULL(test, preferred); > + > + unsupported_mode = drm_kunit_display_mode_from_cea_vic(test, drm, 96); > + KUNIT_ASSERT_NOT_NULL(test, unsupported_mode);
I'm not sure what this one is supposed to test. If the mode is unsupported by the screen, it will be for both YUV and RGB, right? So what are we testing here? Maxime
signature.asc
Description: PGP signature