From patchwork Thu Jul 23 01:35:43 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cristian Ciocaltea X-Patchwork-Id: 2778 Return-Path: X-Original-To: noreply@patchwork.local Delivered-To: noreply@patchwork.local Received: from sea.lore.kernel.org (sea.lore.kernel.org [172.234.253.10]) by mxe881.netcup.net (Postfix) with ESMTPS id 421651C2B5B for ; Thu, 23 Jul 2026 03:45:52 +0200 (CEST) Authentication-Results: mxe881; dkim=pass header.d=collabora.com; spf=pass (sender IP is 172.234.253.10) smtp.mailfrom=linux-sunxi+bounces-24695-noreply=patchwork.local@lists.linux.dev smtp.helo=sea.lore.kernel.org Received-SPF: pass (mxe881: domain of lists.linux.dev designates 172.234.253.10 as permitted sender) client-ip=172.234.253.10; envelope-from=linux-sunxi+bounces-24695-noreply=patchwork.local@lists.linux.dev; helo=sea.lore.kernel.org; Received: from smtp.subspace.kernel.org (conduit.subspace.kernel.org [100.90.174.1]) by sea.lore.kernel.org (Postfix) with ESMTP id 484C331A917B for ; Thu, 23 Jul 2026 01:39:44 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id F047F37E5F3; Thu, 23 Jul 2026 01:35:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="NNnee7vp" X-Original-To: linux-sunxi@lists.linux.dev Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4BA8D35C1B1 for ; Thu, 23 Jul 2026 01:35:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784770543; cv=none; b=vC9sBtDu1d/HNH4iMLU9mLzSouXHcZU59BNNcH1OOZbmAAIAs4bMV+uBw3qFDk/yMYNSN4Bu8D/BtbqhXmckWEuEr6p662KQhMqLeS/ZQ7N/kMiGf/1tmP/lA1Q7nWrn6T2f5L1G7+7FQZwMbEuBWFY6hAYh060SFFzW2Yl5jTI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784770543; c=relaxed/simple; bh=m0aVn7oVpLRV3T+P3o7A5EyP2Xr9eWPJQhZ1R/zeP4E=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=tWJZ95Z2Mo3DXMQHTb+5KLkz+MUwwkZdOUgXlwuNDH+W3YYgC/PkIi+dKsTgetiFDxB7/u3xMISEeRznsz9TT7eQB5P5m7w9Vw0E+Iqin4K8zipGv/M1FziQd/HHxRzfVqWqqVluEuukMvlJvzbWnH23LwHswaUApNKrHLARqlg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=NNnee7vp; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1784770539; bh=m0aVn7oVpLRV3T+P3o7A5EyP2Xr9eWPJQhZ1R/zeP4E=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=NNnee7vpE853jbSFKI+vsdxBFQLhcw5WsRWyjbDfGPgqxAcU3aeY2bPflA3EUQF8R mccyx3GQ2GQDjIS+YGpUMCPlP0CJqSND9Gp00JdUByAhPezg+NmclDH8gtZhUr3oAy sqVh72bHNuiuQLz5AW4vkxQ8FG5kDF2KoOgdaDTFJ9o6i3m+wnFg77J40hZrMSSjpA i5TSzkH+7QA70e3mjZZZPPnad21JZ2AZlOeBfqIEx4649ba2TF77WZQRW2v/WdjJH6 nRRU3xc+O+JUjhpSX2G+Obw7kZen1gaXdEMfXF1GEkZiBUan2GoHZ2kGg+jNRl8jBw LStngwQkHbNoA== Received: from localhost (unknown [100.64.0.241]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange secp256r1 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: cristicc) by bali.collaboradmins.com (Postfix) with ESMTPSA id 98A2117E151D; Thu, 23 Jul 2026 03:35:39 +0200 (CEST) From: Cristian Ciocaltea Date: Thu, 23 Jul 2026 04:35:43 +0300 Subject: [PATCH v9 54/61] drm/tests: connector: Add HDMI source-side scrambler coverage Precedence: bulk X-Mailing-List: linux-sunxi@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-Id: <20260723-dw-hdmi-qp-scramb-v9-54-4fb12ea22ac9@collabora.com> References: <20260723-dw-hdmi-qp-scramb-v9-0-4fb12ea22ac9@collabora.com> In-Reply-To: <20260723-dw-hdmi-qp-scramb-v9-0-4fb12ea22ac9@collabora.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Chen-Yu Tsai , Samuel Holland , Dave Stevenson , =?utf-8?q?Ma=C3=ADra_Canal?= , Raspberry Pi Kernel Maintenance , Sandy Huang , =?utf-8?q?Heiko_St=C3=BCbner?= , Andy Yan , Algea Cao , Daniel Stone , Liu Ying , Phong LE Cc: kernel@collabora.com, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-sunxi@lists.linux.dev, linux-rockchip@lists.infradead.org X-Mailer: b4 0.15.2 X-Rspamd-Server: rspamd-worker-8404 X-Spamd-Result: default: False [-2.16 / 15.00]; BAYES_HAM(-5.50)[100.00%]; RBL_SENDERSCORE(2.00)[172.234.253.10:from]; SUSPICIOUS_RECIPS(1.50)[]; MAILLIST(-0.15)[generic]; MIME_GOOD(-0.10)[text/plain]; BAD_REP_POLICIES(0.10)[]; HAS_LIST_UNSUB(-0.01)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[sea.lore.kernel.org:rdns,sea.lore.kernel.org:helo,collabora.com:email,collabora.com:dkim]; TAGGED_RCPT(0.00)[]; PRECEDENCE_BULK(0.00)[]; RCPT_COUNT_TWELVE(0.00)[30]; FUZZY_BLOCKED(0.00)[rspamd.com]; FROM_HAS_DN(0.00)[]; MID_RHS_MATCH_FROM(0.00)[]; RCVD_COUNT_FIVE(0.00)[5]; R_DKIM_ALLOW(0.00)[collabora.com:s=mail]; FROM_NEQ_ENVFROM(0.00)[cristian.ciocaltea@collabora.com,linux-sunxi@lists.linux.dev]; DMARC_POLICY_ALLOW(0.00)[collabora.com,none]; FREEMAIL_TO(0.00)[intel.com,linaro.org,kernel.org,ideasonboard.com,kwiboo.se,gmail.com,bootlin.com,linux.intel.com,suse.de,ffwll.ch,sholland.org,raspberrypi.com,igalia.com,rock-chips.com,sntech.de,collabora.com,nxp.com,baylibre.com]; DKIM_TRACE(0.00)[collabora.com:+]; TO_DN_SOME(0.00)[]; R_SPF_ALLOW(0.00)[+ip4:172.234.253.10]; FORGED_SENDER_MAILLIST(0.00)[]; FORGED_RECIPIENTS_MAILLIST(0.00)[]; RCVD_TLS_LAST(0.00)[]; ARC_ALLOW(0.00)[subspace.kernel.org:s=arc-20240116:i=1]; MIME_TRACE(0.00)[0:+]; TAGGED_FROM(0.00)[bounces-24695-noreply=patchwork.local]; ASN(0.00)[asn:63949, ipnet:172.234.224.0/19, country:SG]; RCVD_VIA_SMTP_AUTH(0.00)[] X-Rspamd-Queue-Id: 421651C2B5B X-MORS-Enabled: yes X-MORS-DOMAIN: patchwork.local X-MORS-HOSTING: hosting172546 X-MORS-USER: hosting172546 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= 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 --- 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 f14cd741b05e..3d050ac5e5f6 100644 --- a/drivers/gpu/drm/tests/drm_connector_test.c +++ b/drivers/gpu/drm/tests/drm_connector_test.c @@ -1412,6 +1412,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; + struct drm_connector_hdmi_funcs hdmi_funcs = dummy_hdmi_funcs_scrambler; + int ret; + + hdmi_funcs.scrambler_enable = NULL; + hdmi_funcs.scrambler_disable = NULL; + + ret = drmm_connector_hdmi_init(&priv->drm, &priv->connector, + &dummy_funcs, + &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; + struct drm_connector_hdmi_funcs hdmi_funcs = dummy_hdmi_funcs_scrambler; + int ret; + + hdmi_funcs.scrambler_disable = NULL; + + ret = drmm_connector_hdmi_init(&priv->drm, &priv->connector, + &dummy_funcs, + &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; + struct drm_connector_hdmi_funcs hdmi_funcs = dummy_hdmi_funcs_scrambler; + int ret; + + hdmi_funcs.supported_hdmi_ver = HDMI_VERSION_1_4; + + ret = drmm_connector_hdmi_init(&priv->drm, &priv->connector, + &dummy_funcs, + &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), @@ -1442,6 +1525,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_exceeds), 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), { } };