From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id BA267CCD18C for ; Sat, 11 Oct 2025 17:03:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=jLp6T6L2zW99BHei23N4qQleo9dYVs5bzxJ9QTg60a8=; b=q4mPXUKoX/cHF4JdasRu+meTVH mZeDCO18A689X10iyhiqzz2YstapcW2+rBq+XqJpUFmbLK5rXAb3mOOoR71rWiVeDF42CfD7Nk8fe oLfRFAe9ryEi3TlJI3xdLVYyC1NQJRNR5EKm2Pnp67klCLuI73LUajD4BtxzONv/Xx3h/6SWeDrRV qk9p0e5lZr+mmyIB8MIDXn7USWUfORPWu7KZUPmcDqC5jXLo5FIo/ojr9V/pe+QYZ4c2dFHwSMN0l NuLL4sPYp8CIkHyfMgPWCJY78bZz60nzRs7upsfqZfcNJyzOm7mSrWjQOLnQVAm9klnqUKG4XV0Xn /Y8vPRAA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1v7d0T-0000000ANap-2EAm; Sat, 11 Oct 2025 17:03:45 +0000 Received: from mout-p-101.mailbox.org ([2001:67c:2050:0:465::101]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1v7d0O-0000000ANRg-2wsd for linux-arm-kernel@lists.infradead.org; Sat, 11 Oct 2025 17:03:42 +0000 Received: from smtp102.mailbox.org (smtp102.mailbox.org [10.196.197.102]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-101.mailbox.org (Postfix) with ESMTPS id 4ckVLf5Wypz9swL; Sat, 11 Oct 2025 19:03:38 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mailbox.org; s=mail20150812; t=1760202218; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=jLp6T6L2zW99BHei23N4qQleo9dYVs5bzxJ9QTg60a8=; b=VIriWbjXu75+yG7PH3NUkt0J/DC+6Q3+WS7ftmR7QhMkg69Kj/BiirDdNuag1tTpITlpvq vZj0cGVx086GG9QGHWv4JWm8a5RJ6gKJ1TrqRtyfddZfDmQ6CZR4yso0bI8VOGQIATTsAE zZac5dqsXG2eW7/inMjSHsxAvjBGhLKgwa1VJxBCOZMKyTBtS5ZnGskqYhncyb46dWnpv7 frxTKWBNOS6Bgp0ugHHnxYt89apiOVXnEVHa9r+k6r/Iw/6GLCN3ObV6CZb5xhWqa+tnJf QNHzSfn8wtTGl5wFN496GJH0sbtics8bgh2LrULcW44k5RFa03jPXXeQTeCWcQ== From: Marek Vasut DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mailbox.org; s=mail20150812; t=1760202216; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=jLp6T6L2zW99BHei23N4qQleo9dYVs5bzxJ9QTg60a8=; b=eFh54WszjmQkSrkL5WCM21UxHE8vB0tuOQa0YkxQoOH5W9GDLwJ7ZzLpkkwOvXssgfhFKe Pyh2xfc3LDeGe9SfgggEtRSRXRN0W79FAwd1FA5GkHODsEG3/B6xnYCva/npFeGhbsY2f5 xBcjCAFB9A+IXelQmfoOX4Lf99qSdoopQI2/K/ThSgmOT0rzUlpg5sLCVPABKhVRkqCP8o 3nrwyKpJIlIv6r2J1hoOjXBiDJ3I47Wg+Q0B5hpKT3R+bcQDmlnDfao09dqqAPQkqDle6H 3x8Dq59zlFsRtbT7oJic5Kc3E/LqcvTC1GFetOsSU0P2ig5CHIBS9YFwRvlF+Q== To: dri-devel@lists.freedesktop.org Cc: Marek Vasut , Abel Vesa , Conor Dooley , Fabio Estevam , Krzysztof Kozlowski , Laurent Pinchart , Liu Ying , Lucas Stach , Peng Fan , Pengutronix Kernel Team , Rob Herring , Shawn Guo , Thomas Zimmermann , devicetree@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-clk@vger.kernel.org Subject: [PATCH 16/39] drm/imx: dc: lb: Pass struct dc_lb_subdev_match_data via OF match data Date: Sat, 11 Oct 2025 18:51:31 +0200 Message-ID: <20251011170213.128907-17-marek.vasut@mailbox.org> In-Reply-To: <20251011170213.128907-1-marek.vasut@mailbox.org> References: <20251011170213.128907-1-marek.vasut@mailbox.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-MBO-RS-META: 5j1qpo8ip6h94zo5na7oeqg8o57hh4n8 X-MBO-RS-ID: f7a1561dbebab1b85e0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20251011_100340_941470_7CB8A92E X-CRM114-Status: GOOD ( 18.02 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Introduce struct dc_lb_subdev_match_data which describes the differences between i.MX8QXP and i.MX95, which in this case link ID mapping as well as address space offsets, and pass it as OF match data into the driver, so the driver can use the match data to correctly select pixel data routing. This is a preparatory patch for i.MX95 addition. No functional change. Signed-off-by: Marek Vasut --- Cc: Abel Vesa Cc: Conor Dooley Cc: Fabio Estevam Cc: Krzysztof Kozlowski Cc: Laurent Pinchart Cc: Liu Ying Cc: Lucas Stach Cc: Peng Fan Cc: Pengutronix Kernel Team Cc: Rob Herring Cc: Shawn Guo Cc: Thomas Zimmermann Cc: devicetree@vger.kernel.org Cc: dri-devel@lists.freedesktop.org Cc: imx@lists.linux.dev Cc: linux-arm-kernel@lists.infradead.org Cc: linux-clk@vger.kernel.org --- drivers/gpu/drm/imx/dc/dc-lb.c | 42 ++++++++++++++++++++++++++-------- drivers/gpu/drm/imx/dc/dc-pe.h | 3 +++ 2 files changed, 35 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/drm/imx/dc/dc-lb.c b/drivers/gpu/drm/imx/dc/dc-lb.c index 619353456743c..ba9183b244ab3 100644 --- a/drivers/gpu/drm/imx/dc/dc-lb.c +++ b/drivers/gpu/drm/imx/dc/dc-lb.c @@ -56,6 +56,14 @@ #define YPOS_MASK GENMASK(31, 16) #define YPOS(x) FIELD_PREP(YPOS_MASK, (x)) +struct dc_lb_subdev_match_data { + const enum dc_link_id *pri_sels; + const enum dc_link_id *sec_sels; + const enum dc_link_id first_lb; + unsigned int last_cf; + const struct dc_subdev_info *info; +}; + enum dc_lb_blend_func { DC_LAYERBLEND_BLEND_ZERO, DC_LAYERBLEND_BLEND_ONE, @@ -119,7 +127,7 @@ static const struct regmap_config dc_lb_cfg_regmap_config = { .max_register = POSITION, }; -static const enum dc_link_id prim_sels[] = { +static const enum dc_link_id prim_sels_imx8qxp[] = { /* common options */ LINK_ID_NONE, LINK_ID_CONSTFRAME0, @@ -137,12 +145,22 @@ static const enum dc_link_id prim_sels[] = { LINK_ID_LAYERBLEND1_MX8QXP, LINK_ID_LAYERBLEND2_MX8QXP, LINK_ID_LAYERBLEND3_MX8QXP, + LINK_ID_LAST }; -static const enum dc_link_id sec_sels[] = { +static const enum dc_link_id sec_sels_imx8qxp[] = { LINK_ID_NONE, LINK_ID_FETCHWARP2, LINK_ID_FETCHLAYER0, + LINK_ID_LAST +}; + +static const struct dc_lb_subdev_match_data dc_lb_match_data_imx8qxp = { + .pri_sels = prim_sels_imx8qxp, + .sec_sels = sec_sels_imx8qxp, + .first_lb = LINK_ID_LAYERBLEND0_MX8QXP, + .last_cf = 5, + .info = dc_lb_info_imx8qxp, }; enum dc_link_id dc_lb_get_link_id(struct dc_lb *lb) @@ -152,11 +170,10 @@ enum dc_link_id dc_lb_get_link_id(struct dc_lb *lb) void dc_lb_pec_dynamic_prim_sel(struct dc_lb *lb, enum dc_link_id prim) { - int fixed_sels_num = ARRAY_SIZE(prim_sels) - 4; int i; - for (i = 0; i < fixed_sels_num + lb->id; i++) { - if (prim_sels[i] == prim) { + for (i = 0; i < lb->last_cf + lb->id; i++) { + if (lb->pri_sels[i] == prim) { regmap_write_bits(lb->reg_pec, PIXENGCFG_DYNAMIC, PIXENGCFG_DYNAMIC_PRIM_SEL_MASK, PIXENGCFG_DYNAMIC_PRIM_SEL(prim)); @@ -169,10 +186,10 @@ void dc_lb_pec_dynamic_prim_sel(struct dc_lb *lb, enum dc_link_id prim) void dc_lb_pec_dynamic_sec_sel(struct dc_lb *lb, enum dc_link_id sec) { - int i; + int i = 0; - for (i = 0; i < ARRAY_SIZE(sec_sels); i++) { - if (sec_sels[i] == sec) { + while (lb->sec_sels[i] != LINK_ID_LAST) { + if (lb->sec_sels[i++] == sec) { regmap_write_bits(lb->reg_pec, PIXENGCFG_DYNAMIC, PIXENGCFG_DYNAMIC_SEC_SEL_MASK, PIXENGCFG_DYNAMIC_SEC_SEL(sec)); @@ -245,6 +262,8 @@ void dc_lb_init(struct dc_lb *lb) static int dc_lb_bind(struct device *dev, struct device *master, void *data) { + const struct dc_lb_subdev_match_data *dc_lb_match_data = device_get_match_data(dev); + const struct dc_subdev_info *dc_lb_info = dc_lb_match_data->info; struct platform_device *pdev = to_platform_device(dev); struct dc_drm_device *dc_drm = data; struct resource *res_pec; @@ -281,7 +300,10 @@ static int dc_lb_bind(struct device *dev, struct device *master, void *data) } lb->dev = dev; - lb->link = LINK_ID_LAYERBLEND0_MX8QXP + lb->id; + lb->link = dc_lb_match_data->first_lb + lb->id; + lb->pri_sels = dc_lb_match_data->pri_sels; + lb->sec_sels = dc_lb_match_data->sec_sels; + lb->last_cf = dc_lb_match_data->last_cf; dc_drm->lb[lb->id] = lb; @@ -310,7 +332,7 @@ static void dc_lb_remove(struct platform_device *pdev) } static const struct of_device_id dc_lb_dt_ids[] = { - { .compatible = "fsl,imx8qxp-dc-layerblend" }, + { .compatible = "fsl,imx8qxp-dc-layerblend", .data = &dc_lb_match_data_imx8qxp }, { /* sentinel */ } }; MODULE_DEVICE_TABLE(of, dc_lb_dt_ids); diff --git a/drivers/gpu/drm/imx/dc/dc-pe.h b/drivers/gpu/drm/imx/dc/dc-pe.h index 7928f947b0cef..492d193127bc1 100644 --- a/drivers/gpu/drm/imx/dc/dc-pe.h +++ b/drivers/gpu/drm/imx/dc/dc-pe.h @@ -65,6 +65,9 @@ struct dc_lb { struct regmap *reg_cfg; int id; enum dc_link_id link; + const enum dc_link_id *pri_sels; + const enum dc_link_id *sec_sels; + unsigned int last_cf; }; struct dc_pe { -- 2.51.0