]> www.infradead.org Git - users/hch/misc.git/commitdiff
drm/tests: connector: Add ycbcr_420_allowed tests
authorCristian Ciocaltea <cristian.ciocaltea@collabora.com>
Tue, 24 Dec 2024 18:22:44 +0000 (20:22 +0200)
committerDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Mon, 13 Jan 2025 09:18:20 +0000 (11:18 +0200)
Extend HDMI connector output format tests to verify its registration
succeeds only when the presence of YUV420 in the supported formats
matches the state of ycbcr_420_allowed flag.

Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Reviewed-by: Maxime Ripard <mripard@kernel.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20241224-bridge-conn-fmt-prio-v4-4-a9ceb5671379@collabora.com
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
drivers/gpu/drm/tests/drm_connector_test.c

index 6bba97d0be88ef34f01c8786175cf2b06c414ef5..3d48d676e0018ada5a680e754a5f5b711e274406 100644 (file)
@@ -635,6 +635,64 @@ static void drm_test_connector_hdmi_init_formats_no_rgb(struct kunit *test)
        KUNIT_EXPECT_LT(test, ret, 0);
 }
 
+struct drm_connector_hdmi_init_formats_yuv420_allowed_test {
+       unsigned long supported_formats;
+       bool yuv420_allowed;
+       int expected_result;
+};
+
+#define YUV420_ALLOWED_TEST(_formats, _allowed, _result)                       \
+       {                                                                       \
+               .supported_formats = BIT(HDMI_COLORSPACE_RGB) | (_formats),     \
+               .yuv420_allowed = _allowed,                                     \
+               .expected_result = _result,                                     \
+       }
+
+static const struct drm_connector_hdmi_init_formats_yuv420_allowed_test
+drm_connector_hdmi_init_formats_yuv420_allowed_tests[] = {
+       YUV420_ALLOWED_TEST(BIT(HDMI_COLORSPACE_YUV420), true, 0),
+       YUV420_ALLOWED_TEST(BIT(HDMI_COLORSPACE_YUV420), false, -EINVAL),
+       YUV420_ALLOWED_TEST(BIT(HDMI_COLORSPACE_YUV422), true, -EINVAL),
+       YUV420_ALLOWED_TEST(BIT(HDMI_COLORSPACE_YUV422), false, 0),
+};
+
+static void
+drm_connector_hdmi_init_formats_yuv420_allowed_desc(const struct drm_connector_hdmi_init_formats_yuv420_allowed_test *t,
+                                                   char *desc)
+{
+       sprintf(desc, "supported_formats=0x%lx yuv420_allowed=%d",
+               t->supported_formats, t->yuv420_allowed);
+}
+
+KUNIT_ARRAY_PARAM(drm_connector_hdmi_init_formats_yuv420_allowed,
+                 drm_connector_hdmi_init_formats_yuv420_allowed_tests,
+                 drm_connector_hdmi_init_formats_yuv420_allowed_desc);
+
+/*
+ * Test that the registration of an HDMI connector succeeds only when
+ * the presence of YUV420 in the supported formats matches the value
+ * of the ycbcr_420_allowed flag.
+ */
+static void drm_test_connector_hdmi_init_formats_yuv420_allowed(struct kunit *test)
+{
+       const struct drm_connector_hdmi_init_formats_yuv420_allowed_test *params;
+       struct drm_connector_init_priv *priv = test->priv;
+       int ret;
+
+       params = test->param_value;
+       priv->connector.ycbcr_420_allowed = params->yuv420_allowed;
+
+       ret = drmm_connector_hdmi_init(&priv->drm, &priv->connector,
+                                      "Vendor", "Product",
+                                      &dummy_funcs,
+                                      &dummy_hdmi_funcs,
+                                      DRM_MODE_CONNECTOR_HDMIA,
+                                      &priv->ddc,
+                                      params->supported_formats,
+                                      8);
+       KUNIT_EXPECT_EQ(test, ret, params->expected_result);
+}
+
 /*
  * Test that the registration of an HDMI connector with an HDMI
  * connector type succeeds.
@@ -726,6 +784,8 @@ static struct kunit_case drmm_connector_hdmi_init_tests[] = {
        KUNIT_CASE(drm_test_connector_hdmi_init_bpc_null),
        KUNIT_CASE(drm_test_connector_hdmi_init_formats_empty),
        KUNIT_CASE(drm_test_connector_hdmi_init_formats_no_rgb),
+       KUNIT_CASE_PARAM(drm_test_connector_hdmi_init_formats_yuv420_allowed,
+                        drm_connector_hdmi_init_formats_yuv420_allowed_gen_params),
        KUNIT_CASE(drm_test_connector_hdmi_init_null_ddc),
        KUNIT_CASE(drm_test_connector_hdmi_init_null_product),
        KUNIT_CASE(drm_test_connector_hdmi_init_null_vendor),