From nobody Tue Feb 10 04:07:58 2026 Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) (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 2C69232BF35 for ; Tue, 23 Dec 2025 18:03:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766513000; cv=pass; b=Br4udB4m0K3Te7otM7xz4TRgIxCRFafndkfRlQzW6muJ9C3Cw9smcD491WdOTR17DPIJN9SK6HDVFEzivHYdQpGFP7qnzpKvlxyFuokPw2ZlMH3EjudSNEvPuXYMepnhgaBDGek3fExYNRYcYHVeLBE3R4bVMQz5rTmravDd+4I= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766513000; c=relaxed/simple; bh=6MmIMVnL3PkmKdmWtXNbCsW3PQrG4C0SsHDq44AutiU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=axrwOxcdE5lnm+XyzZ4PKPsaMuTA6XUwEvWB1gRyO3jYhEeV6xXlAadQBd0UBoBMEuhZJsJqWo2Col8xgtPxXGJAAlB8rlF+9oW+f6l9SSFpQVBLS/u7rDPvQSdID17enPqKetD38RIIATfFCg0ksxpcdqeMhSAX6WNCw060m3o= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=ariel.dalessandro@collabora.com header.b=ZRLzwvwk; arc=pass smtp.client-ip=136.143.188.112 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 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=ariel.dalessandro@collabora.com header.b="ZRLzwvwk" ARC-Seal: i=1; a=rsa-sha256; t=1766512968; cv=none; d=zohomail.com; s=zohoarc; b=HpdUob6t1Xl2/3PjfLNrFueMsFxdAE9nbrES2kBedg2MObL6Ute7AuFC29gTH7x3lLw1XFZ3nZHsM92HGPdCuGdaCzHgCNQFjO407A4rHdAVD4Ysqri2WxHfIjPenNKNo/hHasyMeT3y67LEyYoxTSb9plrmTjBidY5sJqEF6Bo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1766512968; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=TTP2nlfF4TVr6/Gr417b9vvRxgYthN/xdBwufZt5Fp0=; b=EhMMZwlQwQtf3zn7aVQRnDUgz+nScaDlqistZBvGUn+4TTt/PqwZYhqQ0B5vX8utMS5yj6GjYU5HkoTFJrvOMfJ4B4Wh4W4jEQYpx6Z/V3ZPjeK6b06BWhyE3sBJ6Gbj9SRaxxkf0pkFOC6Uzu5pRunXHylPLUy3AEnhSWmD3L4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=ariel.dalessandro@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1766512968; s=zohomail; d=collabora.com; i=ariel.dalessandro@collabora.com; h=From:From:Date:Date:Subject:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Message-Id:References:In-Reply-To:To:To:Cc:Cc:Reply-To; bh=TTP2nlfF4TVr6/Gr417b9vvRxgYthN/xdBwufZt5Fp0=; b=ZRLzwvwk9X9Im3smvZA/0yBp4aoRr7GK2T4HzF/Ekc9bbjoWoJ2USjZukXqJ22GP ue1vlI9MQYmBFmsqK53/4JIFl8gHSzE2QhybWpaF/VJ9d8M+3Vvw5bBWZWy+/k+iR1e sHUkvL4P3HUeN9JZEVlcH1eTPvs8mxPh6dKMlN5c= Received: by mx.zohomail.com with SMTPS id 1766512966401297.4740004327332; Tue, 23 Dec 2025 10:02:46 -0800 (PST) From: Ariel D'Alessandro Date: Tue, 23 Dec 2025 15:01:29 -0300 Subject: [PATCH v3 09/21] drm/colorop: Factor out common paths from colorops helpers Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251223-mtk-post-blend-color-pipeline-v3-9-7d969f9a37a0@collabora.com> References: <20251223-mtk-post-blend-color-pipeline-v3-0-7d969f9a37a0@collabora.com> In-Reply-To: <20251223-mtk-post-blend-color-pipeline-v3-0-7d969f9a37a0@collabora.com> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Chun-Kuang Hu , Philipp Zabel , Matthias Brugger , AngeloGioacchino Del Regno , Louis Chauvet , Haneen Mohammed , Melissa Wen Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-arm-kernel@lists.infradead.org, kernel@collabora.com, =?utf-8?q?N=C3=ADcolas_F=2E_R=2E_A=2E_Prado?= , Ariel D'Alessandro , Harry Wentland X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1766512902; l=8035; i=ariel.dalessandro@collabora.com; s=20251223; h=from:subject:message-id; bh=5Qni8H4yUQhtfmB3ydT1m5AL0OONphS8F8GXu44wugo=; b=IzIHGHHAg4aiERlzri8xSRIIzbx0Vof/Kv9r5nHjhaH7BfQCsvvmvolnAS7nGYUEbyr4QFDxd i7w968a9jKGC6xEv5fp7Ebg63623cB2mijjg+tmAHInvt5Zij5rad00 X-Developer-Key: i=ariel.dalessandro@collabora.com; a=ed25519; pk=QZRL9EsSBV3/FhDHi9L/7ZTz2dwa7iyqgl+y1UYaQXQ= X-ZohoMailClient: External From: "N=C3=ADcolas F. R. A. Prado" Factor out the common code paths from the colorop helpers so they can be reused by the post-blend colorop helpers. Signed-off-by: N=C3=ADcolas F. R. A. Prado Co-developed-by: Ariel D'Alessandro Signed-off-by: Ariel D'Alessandro Reviewed-by: Louis Chauvet Reviewed-by: Harry Wentland --- drivers/gpu/drm/drm_colorop.c | 146 ++++++++++++++++++++++++++++----------= ---- 1 file changed, 99 insertions(+), 47 deletions(-) diff --git a/drivers/gpu/drm/drm_colorop.c b/drivers/gpu/drm/drm_colorop.c index bf3b8ff51571b..6a285cdb0a354 100644 --- a/drivers/gpu/drm/drm_colorop.c +++ b/drivers/gpu/drm/drm_colorop.c @@ -93,9 +93,9 @@ static const struct drm_prop_enum_list drm_colorop_lut3d_= interpolation_list[] =3D =20 /* Init Helpers */ =20 -static int drm_plane_colorop_init(struct drm_device *dev, struct drm_color= op *colorop, - struct drm_plane *plane, enum drm_colorop_type type, - uint32_t flags) +static int drm_common_colorop_init(struct drm_device *dev, + struct drm_colorop *colorop, + enum drm_colorop_type type, uint32_t flags) { struct drm_mode_config *config =3D &dev->mode_config; struct drm_property *prop; @@ -108,7 +108,6 @@ static int drm_plane_colorop_init(struct drm_device *de= v, struct drm_colorop *co colorop->base.properties =3D &colorop->properties; colorop->dev =3D dev; colorop->type =3D type; - colorop->plane =3D plane; colorop->next =3D NULL; =20 list_add_tail(&colorop->head, &config->colorop_list); @@ -157,6 +156,20 @@ static int drm_plane_colorop_init(struct drm_device *d= ev, struct drm_colorop *co return ret; } =20 +static int drm_plane_colorop_init(struct drm_device *dev, + struct drm_colorop *colorop, + struct drm_plane *plane, + enum drm_colorop_type type, uint32_t flags) +{ + int ret; + + ret =3D drm_common_colorop_init(dev, colorop, type, flags); + + colorop->plane =3D plane; + + return ret; +} + /** * drm_colorop_cleanup - Cleanup a drm_colorop object in color_pipeline * @@ -210,31 +223,13 @@ EXPORT_SYMBOL(drm_colorop_pipeline_destroy); * @flags: bitmask of misc, see DRM_COLOROP_FLAG_* defines. * @return zero on success, -E value on failure */ -int drm_plane_colorop_curve_1d_init(struct drm_device *dev, struct drm_col= orop *colorop, - struct drm_plane *plane, u64 supported_tfs, uint32_t flags) +static int drm_common_colorop_curve_1d_init(struct drm_device *dev, struct= drm_colorop *colorop, + u64 supported_tfs, uint32_t flags) { struct drm_prop_enum_list enum_list[DRM_COLOROP_1D_CURVE_COUNT]; int i, len; =20 struct drm_property *prop; - int ret; - - if (!supported_tfs) { - drm_err(dev, - "No supported TFs for new 1D curve colorop on [PLANE:%d:%s]\n", - plane->base.id, plane->name); - return -EINVAL; - } - - if ((supported_tfs & -BIT(DRM_COLOROP_1D_CURVE_COUNT)) !=3D 0) { - drm_err(dev, "Unknown TF provided on [PLANE:%d:%s]\n", - plane->base.id, plane->name); - return -EINVAL; - } - - ret =3D drm_plane_colorop_init(dev, colorop, plane, DRM_COLOROP_1D_CURVE,= flags); - if (ret) - return ret; =20 len =3D 0; for (i =3D 0; i < DRM_COLOROP_1D_CURVE_COUNT; i++) { @@ -263,6 +258,41 @@ int drm_plane_colorop_curve_1d_init(struct drm_device = *dev, struct drm_colorop * =20 return 0; } + +static int drm_colorop_has_supported_tf(struct drm_device *dev, struct drm= _mode_object *obj, + const char *name, u64 supported_tfs) +{ + if (!supported_tfs) { + drm_err(dev, + "No supported TFs for new 1D curve colorop on [PLANE:%d:%s]\n", + obj->id, name); + return -EINVAL; + } + + if ((supported_tfs & -BIT(DRM_COLOROP_1D_CURVE_COUNT)) !=3D 0) { + drm_err(dev, "Unknown TF provided on [PLANE:%d:%s]\n", + obj->id, name); + return -EINVAL; + } + + return 0; +} + +int drm_plane_colorop_curve_1d_init(struct drm_device *dev, struct drm_col= orop *colorop, + struct drm_plane *plane, u64 supported_tfs, uint32_t flags) +{ + int ret; + + ret =3D drm_colorop_has_supported_tf(dev, &plane->base, plane->name, supp= orted_tfs); + if (ret) + return ret; + + ret =3D drm_plane_colorop_init(dev, colorop, plane, DRM_COLOROP_1D_CURVE,= flags); + if (ret) + return ret; + + return drm_common_colorop_curve_1d_init(dev, colorop, supported_tfs, flag= s); +} EXPORT_SYMBOL(drm_plane_colorop_curve_1d_init); =20 static int drm_colorop_create_data_prop(struct drm_device *dev, struct drm= _colorop *colorop) @@ -283,29 +313,16 @@ static int drm_colorop_create_data_prop(struct drm_de= vice *dev, struct drm_color return 0; } =20 -/** - * drm_plane_colorop_curve_1d_lut_init - Initialize a DRM_COLOROP_1D_LUT - * - * @dev: DRM device - * @colorop: The drm_colorop object to initialize - * @plane: The associated drm_plane - * @lut_size: LUT size supported by driver - * @interpolation: 1D LUT interpolation type - * @flags: bitmask of misc, see DRM_COLOROP_FLAG_* defines. - * @return zero on success, -E value on failure - */ -int drm_plane_colorop_curve_1d_lut_init(struct drm_device *dev, struct drm= _colorop *colorop, - struct drm_plane *plane, uint32_t lut_size, - enum drm_colorop_lut1d_interpolation_type interpolation, - uint32_t flags) +static int +drm_common_colorop_curve_1d_lut_init(struct drm_device *dev, + struct drm_colorop *colorop, + uint32_t lut_size, + enum drm_colorop_lut1d_interpolation_type interpolation, + uint32_t flags) { struct drm_property *prop; int ret; =20 - ret =3D drm_plane_colorop_init(dev, colorop, plane, DRM_COLOROP_1D_LUT, f= lags); - if (ret) - return ret; - /* initialize 1D LUT only attribute */ /* LUT size */ prop =3D drm_property_create_range(dev, DRM_MODE_PROP_IMMUTABLE | DRM_MOD= E_PROP_ATOMIC, @@ -337,17 +354,40 @@ int drm_plane_colorop_curve_1d_lut_init(struct drm_de= vice *dev, struct drm_color =20 return 0; } -EXPORT_SYMBOL(drm_plane_colorop_curve_1d_lut_init); =20 -int drm_plane_colorop_ctm_3x4_init(struct drm_device *dev, struct drm_colo= rop *colorop, - struct drm_plane *plane, uint32_t flags) +/** + * drm_plane_colorop_curve_1d_lut_init - Initialize a DRM_COLOROP_1D_LUT + * + * @dev: DRM device + * @colorop: The drm_colorop object to initialize + * @plane: The associated drm_plane + * @lut_size: LUT size supported by driver + * @lut1d_interpolation: 1D LUT interpolation type + * @flags: bitmask of misc, see DRM_COLOROP_FLAG_* defines. + * @return zero on success, -E value on failure + */ +int +drm_plane_colorop_curve_1d_lut_init(struct drm_device *dev, struct drm_col= orop *colorop, + struct drm_plane *plane, uint32_t lut_size, + enum drm_colorop_lut1d_interpolation_type lut1d_interpolation, + uint32_t flags) { int ret; =20 - ret =3D drm_plane_colorop_init(dev, colorop, plane, DRM_COLOROP_CTM_3X4, = flags); + ret =3D drm_plane_colorop_init(dev, colorop, plane, DRM_COLOROP_1D_LUT, f= lags); if (ret) return ret; =20 + return drm_common_colorop_curve_1d_lut_init(dev, colorop, lut_size, + lut1d_interpolation, flags); +} +EXPORT_SYMBOL(drm_plane_colorop_curve_1d_lut_init); + +static int drm_common_colorop_ctm_3x4_init(struct drm_device *dev, struct = drm_colorop *colorop, + uint32_t flags) +{ + int ret; + ret =3D drm_colorop_create_data_prop(dev, colorop); if (ret) return ret; @@ -356,6 +396,18 @@ int drm_plane_colorop_ctm_3x4_init(struct drm_device *= dev, struct drm_colorop *c =20 return 0; } + +int drm_plane_colorop_ctm_3x4_init(struct drm_device *dev, struct drm_colo= rop *colorop, + struct drm_plane *plane, uint32_t flags) +{ + int ret; + + ret =3D drm_plane_colorop_init(dev, colorop, plane, DRM_COLOROP_CTM_3X4, = flags); + if (ret) + return ret; + + return drm_common_colorop_ctm_3x4_init(dev, colorop, flags); +} EXPORT_SYMBOL(drm_plane_colorop_ctm_3x4_init); =20 /** --=20 2.51.0