[PATCH v10 62/69] drm/tests: connector: Add HDMI source-side scrambler coverage
Cristian Ciocaltea <[email protected]> Fri, 31 Jul 2026 19:20:09 +0300
| Newsgroups | dev.linux.lists.linux-sunxi,org.freedesktop.lists.dri-devel,org.infradead.lists.linux-arm-kernel,org.infradead.lists.linux-rockchip,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
Add KUnit tests for the HDMI source-side scrambling validation done by the new drmm_connector_hdmi_init() helper. Connector initialization derives scrambler support from the driver-provided supported_hdmi_ver capability. The scrambler callbacks are only valid for connectors advertising HDMI 2.0 or later, as drm_connector_hdmi_scrambler_supported() uses their presence to report source-side scrambling support. Therefore, connectors that advertise source-side scrambling support must provide both .scrambler_enable and .scrambler_disable. Registration is rejected if either callback is missing. Conversely, connectors that do not advertise source-side scrambling support must not provide these callbacks, and registration is rejected if they are present. Test the valid and invalid callback combinations for both supported and unsupported scrambling configurations. Signed-off-by: Cristian Ciocaltea <[email protected]> --- drivers/gpu/drm/tests/drm_connector_test.c | 87 ++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) diff --git a/drivers/gpu/drm/tests/drm_connector_test.c b/drivers/gpu/drm/tests/drm_connector_test.c index 17242d1c1b16..3d8500ad8be9 100644 --- a/drivers/gpu/drm/tests/drm_connector_test.c +++ b/drivers/gpu/drm/tests/drm_connector_test.c @@ -1417,6 +1417,89 @@ static void drm_test_connector_hdmi_init_max_tmds_rate_no_version(struct kunit * KUNIT_EXPECT_LT(test, ret, 0); } +/* + * Test that the registration of an HDMI connector advertising source-side + * scrambling support succeeds when the .scrambler_{enable,disable} callbacks + * are provided. + */ +static void drm_test_connector_hdmi_init_scrambler_valid(struct kunit *test) +{ + struct drm_connector_init_priv *priv = test->priv; + int ret; + + ret = drmm_connector_hdmi_init(&priv->drm, &priv->connector, + &dummy_funcs, + &dummy_hdmi_funcs_scrambler, + DRM_MODE_CONNECTOR_HDMIA, + &priv->ddc); + KUNIT_EXPECT_EQ(test, ret, 0); + KUNIT_EXPECT_TRUE(test, drm_connector_hdmi_scrambler_supported(&priv->connector)); +} + +/* + * Test that the registration of an HDMI connector advertising source-side + * scrambling support fails when the .scrambler_{enable,disable} callbacks + * are not provided. + */ +static void drm_test_connector_hdmi_init_scrambler_no_callbacks(struct kunit *test) +{ + struct drm_connector_init_priv *priv = test->priv; + int ret; + + priv->hdmi_funcs = dummy_hdmi_funcs_scrambler; + priv->hdmi_funcs.scrambler_enable = NULL; + priv->hdmi_funcs.scrambler_disable = NULL; + + ret = drmm_connector_hdmi_init(&priv->drm, &priv->connector, + &dummy_funcs, + &priv->hdmi_funcs, + DRM_MODE_CONNECTOR_HDMIA, + &priv->ddc); + KUNIT_EXPECT_LT(test, ret, 0); +} + +/* + * Test that the registration of an HDMI connector advertising source-side + * scrambling support fails when only one of the .scrambler_{enable,disable} + * callbacks are provided. + */ +static void drm_test_connector_hdmi_init_scrambler_partial_callbacks(struct kunit *test) +{ + struct drm_connector_init_priv *priv = test->priv; + int ret; + + priv->hdmi_funcs = dummy_hdmi_funcs_scrambler; + priv->hdmi_funcs.scrambler_disable = NULL; + + ret = drmm_connector_hdmi_init(&priv->drm, &priv->connector, + &dummy_funcs, + &priv->hdmi_funcs, + DRM_MODE_CONNECTOR_HDMIA, + &priv->ddc); + KUNIT_EXPECT_LT(test, ret, 0); +} + +/* + * Test that the registration of an HDMI connector not advertising source-side + * scrambling support fails when .scrambler_{enable,disable} callbacks are + * provided. + */ +static void drm_test_connector_hdmi_init_scrambler_unexpected_callbacks(struct kunit *test) +{ + struct drm_connector_init_priv *priv = test->priv; + int ret; + + priv->hdmi_funcs = dummy_hdmi_funcs_scrambler; + priv->hdmi_funcs.supported_hdmi_ver = HDMI_VERSION_1_4; + + ret = drmm_connector_hdmi_init(&priv->drm, &priv->connector, + &dummy_funcs, + &priv->hdmi_funcs, + DRM_MODE_CONNECTOR_HDMIA, + &priv->ddc); + KUNIT_EXPECT_LT(test, ret, 0); +} + static struct kunit_case drmm_connector_hdmi_init_tests[] = { KUNIT_CASE(drm_test_connector_hdmi_init_valid), KUNIT_CASE(drm_test_connector_hdmi_init_bpc_8), @@ -1447,6 +1530,10 @@ static struct kunit_case drmm_connector_hdmi_init_tests[] = { KUNIT_CASE(drm_test_connector_hdmi_init_max_tmds_rate_at_limit), KUNIT_CASE(drm_test_connector_hdmi_init_max_tmds_rate_off_limit), KUNIT_CASE(drm_test_connector_hdmi_init_max_tmds_rate_no_version), + KUNIT_CASE(drm_test_connector_hdmi_init_scrambler_valid), + KUNIT_CASE(drm_test_connector_hdmi_init_scrambler_no_callbacks), + KUNIT_CASE(drm_test_connector_hdmi_init_scrambler_partial_callbacks), + KUNIT_CASE(drm_test_connector_hdmi_init_scrambler_unexpected_callbacks), { } }; -- 2.55.0