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 54010CCD18F for ; Sat, 11 Oct 2025 17:03:15 +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=SC+/Y0nmVIFcQ2pWahGO/IJdntF+c5+bodHF9PVowes=; b=m8Sf9quKHgnCypdAcl79Rgq4SF 7GiXMIvI8ObhdhQF6/nJqeQ6gndeRSrT8xZjLJs8jgQWzYzuG7CUkxTlxWuvWwHbK7w9Kf2elB2AY px8KRMVgnTXlQp/XEPzxhsLwTi9LfY9BdcEaZRJ6zltJ186hUWT3Bs9yEf6HBiHUKX8UfELGcVPD+ PXQaYEi+0rTWKYZH6Tg2Zj8n/XdeAgBp2kvl9dU24lG5tUeXR8kvDl1ZR9ehB/2OdaOzBS5gbfUkA Z93i+WIpEI5L0ncLRASvew7pnFj+V/s2EIx2qcpPkt/7N7m+DAUu3BSa3YLn408uAr8OiBwkir/yt u2OMWDyw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1v7czs-0000000AMmo-49R4; Sat, 11 Oct 2025 17:03:08 +0000 Received: from mout-p-201.mailbox.org ([80.241.56.171]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1v7czq-0000000AMjk-02NS for linux-arm-kernel@lists.infradead.org; Sat, 11 Oct 2025 17:03:07 +0000 Received: from smtp102.mailbox.org (smtp102.mailbox.org [IPv6:2001:67c:2050:b231:465::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-201.mailbox.org (Postfix) with ESMTPS id 4ckVL00C43z9sm3; Sat, 11 Oct 2025 19:03:04 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mailbox.org; s=mail20150812; t=1760202184; 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=SC+/Y0nmVIFcQ2pWahGO/IJdntF+c5+bodHF9PVowes=; b=bpdAM743DEFe5YIgViwjz8+83tTREKdB49L9J6jrCCNy0NJf2HLnXGaQ1RII62qNuFLUVP nskSpWSDe0vWAb/bbiwzVNkMrjzdDy/IsysmPJID1ovb4jm6OTs/eDZ7TZLjHJsMC4U14x 1hfUKIvIvmsQ0sIjqBPI3OxBOOfO2ZoeT9UoxZrkKmpRPhtL14Kdvm1u/o1GOgjBaA7VGl 3k3+2GpXz0nVazkRpBFHO7SO+6NwFVXOypk167Ar3Svv2N85RRJy8KwpXiZPVhc9Qrj2Mb q6aT9aZKpDuZQ7HGabFCbZQNruuCqmY2Te9nB/ikMv4IYEOv30CQXwgHqE0OlQ== Authentication-Results: outgoing_mbo_mout; dkim=pass header.d=mailbox.org header.s=mail20150812 header.b=ixLvw9ab; spf=pass (outgoing_mbo_mout: domain of marek.vasut@mailbox.org designates 2001:67c:2050:b231:465::102 as permitted sender) smtp.mailfrom=marek.vasut@mailbox.org From: Marek Vasut DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mailbox.org; s=mail20150812; t=1760202182; 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=SC+/Y0nmVIFcQ2pWahGO/IJdntF+c5+bodHF9PVowes=; b=ixLvw9abgHVEI0sZWQjxG9Dth/ksM86xmAnTuLBG6jlH5UDQRR6rnLnW/xo9nmY9eS6slf joEiPvEk5PhcXD2r8idWnYZoN2DkFbRHjsbI9rlpzQ06DMf5i9KNn+rKjkAkguL3ogcQV4 fQe3UDrH/oRXMFAcvMjvb0G23aPXWNbdbg3j86zzhDwYkXznNmGak2m4mMvKkpVF3AbCXa AEmSgsnGZgnTxUc0eJFdaNG4FdLop1yXsBzPomopY0SYJ4r6hAOtITznt26TC+DEmk50y4 p7Mmnbccao3YVYhxOAIEdIIJ0/IiMxQgSrvhu7hzrM70ibpTN4N3B3M9n23MaQ== 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 04/39] drm/imx: dc: Use bulk clock Date: Sat, 11 Oct 2025 18:51:19 +0200 Message-ID: <20251011170213.128907-5-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-ID: 3c19b5b512e3de1a7b6 X-MBO-RS-META: m6utjgyz4k4mj83qbrydrpkc6xgkcgte X-Rspamd-Queue-Id: 4ckVL00C43z9sm3 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20251011_100306_191777_C70B57EF X-CRM114-Status: GOOD ( 14.23 ) 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 Switch to bulk clock operations, as many of the blocks present in DC use multiple clock on i.MX95. The use of bulk clock operations allows the driver to seamlessly handle one or multiple clock. 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-drv.c | 14 ++++++++------ drivers/gpu/drm/imx/dc/dc-ic.c | 14 ++++++++------ drivers/gpu/drm/imx/dc/dc-pe.c | 12 ++++++------ drivers/gpu/drm/imx/dc/dc-pe.h | 3 ++- 4 files changed, 24 insertions(+), 19 deletions(-) diff --git a/drivers/gpu/drm/imx/dc/dc-drv.c b/drivers/gpu/drm/imx/dc/dc-drv.c index f108964bf89f4..2717c92aba6c5 100644 --- a/drivers/gpu/drm/imx/dc/dc-drv.c +++ b/drivers/gpu/drm/imx/dc/dc-drv.c @@ -31,7 +31,8 @@ struct dc_priv { struct drm_device *drm; - struct clk *clk_cfg; + struct clk_bulk_data *clk_cfg; + int clk_cfg_count; }; DEFINE_DRM_GEM_DMA_FOPS(dc_drm_driver_fops); @@ -163,10 +164,11 @@ static int dc_probe(struct platform_device *pdev) if (!priv) return -ENOMEM; - priv->clk_cfg = devm_clk_get(&pdev->dev, NULL); - if (IS_ERR(priv->clk_cfg)) - return dev_err_probe(&pdev->dev, PTR_ERR(priv->clk_cfg), + ret = devm_clk_bulk_get_all(&pdev->dev, &priv->clk_cfg); + if (ret < 0) + return dev_err_probe(&pdev->dev, ret, "failed to get cfg clock\n"); + priv->clk_cfg_count = ret; dev_set_drvdata(&pdev->dev, priv); @@ -201,7 +203,7 @@ static int dc_runtime_suspend(struct device *dev) { struct dc_priv *priv = dev_get_drvdata(dev); - clk_disable_unprepare(priv->clk_cfg); + clk_bulk_disable_unprepare(priv->clk_cfg_count, priv->clk_cfg); return 0; } @@ -211,7 +213,7 @@ static int dc_runtime_resume(struct device *dev) struct dc_priv *priv = dev_get_drvdata(dev); int ret; - ret = clk_prepare_enable(priv->clk_cfg); + ret = clk_bulk_prepare_enable(priv->clk_cfg_count, priv->clk_cfg); if (ret) dev_err(dev, "failed to enable cfg clock: %d\n", ret); diff --git a/drivers/gpu/drm/imx/dc/dc-ic.c b/drivers/gpu/drm/imx/dc/dc-ic.c index a270ae4030cdc..67441b349a7d2 100644 --- a/drivers/gpu/drm/imx/dc/dc-ic.c +++ b/drivers/gpu/drm/imx/dc/dc-ic.c @@ -30,7 +30,8 @@ struct dc_ic_data { struct regmap *regs; - struct clk *clk_axi; + struct clk_bulk_data *clk_axi; + int clk_axi_count; int irq[IRQ_COUNT]; struct irq_domain *domain; }; @@ -136,10 +137,11 @@ static int dc_ic_probe(struct platform_device *pdev) if (IS_ERR(data->regs)) return PTR_ERR(data->regs); - data->clk_axi = devm_clk_get(dev, NULL); - if (IS_ERR(data->clk_axi)) - return dev_err_probe(dev, PTR_ERR(data->clk_axi), + ret = devm_clk_bulk_get_all(dev, &data->clk_axi); + if (ret < 0) + return dev_err_probe(dev, ret, "failed to get AXI clock\n"); + data->clk_axi_count = ret; for (i = 0; i < IRQ_COUNT; i++) { /* skip the reserved IRQ */ @@ -242,7 +244,7 @@ static int dc_ic_runtime_suspend(struct device *dev) { struct dc_ic_data *data = dev_get_drvdata(dev); - clk_disable_unprepare(data->clk_axi); + clk_bulk_disable_unprepare(data->clk_axi_count, data->clk_axi); return 0; } @@ -252,7 +254,7 @@ static int dc_ic_runtime_resume(struct device *dev) struct dc_ic_data *data = dev_get_drvdata(dev); int ret; - ret = clk_prepare_enable(data->clk_axi); + ret = clk_bulk_prepare_enable(data->clk_axi_count, data->clk_axi); if (ret) dev_err(dev, "failed to enable AXI clock: %d\n", ret); diff --git a/drivers/gpu/drm/imx/dc/dc-pe.c b/drivers/gpu/drm/imx/dc/dc-pe.c index 6676c22f3f458..eb96a6206cc6d 100644 --- a/drivers/gpu/drm/imx/dc/dc-pe.c +++ b/drivers/gpu/drm/imx/dc/dc-pe.c @@ -27,10 +27,10 @@ static int dc_pe_bind(struct device *dev, struct device *master, void *data) if (!pe) return -ENOMEM; - pe->clk_axi = devm_clk_get(dev, NULL); - if (IS_ERR(pe->clk_axi)) - return dev_err_probe(dev, PTR_ERR(pe->clk_axi), - "failed to get AXI clock\n"); + ret = devm_clk_bulk_get_all(dev, &pe->clk_axi); + if (ret < 0) + return dev_err_probe(dev, ret, "failed to get AXI clock\n"); + pe->clk_axi_count = ret; pe->dev = dev; @@ -99,7 +99,7 @@ static int dc_pe_runtime_suspend(struct device *dev) { struct dc_pe *pe = dev_get_drvdata(dev); - clk_disable_unprepare(pe->clk_axi); + clk_bulk_disable_unprepare(pe->clk_axi_count, pe->clk_axi); return 0; } @@ -109,7 +109,7 @@ static int dc_pe_runtime_resume(struct device *dev) struct dc_pe *pe = dev_get_drvdata(dev); int i, ret; - ret = clk_prepare_enable(pe->clk_axi); + ret = clk_bulk_prepare_enable(pe->clk_axi_count, pe->clk_axi); if (ret) { dev_err(dev, "failed to enable AXI clock: %d\n", ret); return ret; diff --git a/drivers/gpu/drm/imx/dc/dc-pe.h b/drivers/gpu/drm/imx/dc/dc-pe.h index f5e01a6eb9e91..ffeb1c7af1c9f 100644 --- a/drivers/gpu/drm/imx/dc/dc-pe.h +++ b/drivers/gpu/drm/imx/dc/dc-pe.h @@ -67,7 +67,8 @@ struct dc_lb { struct dc_pe { struct device *dev; - struct clk *clk_axi; + struct clk_bulk_data *clk_axi; + int clk_axi_count; struct dc_cf *cf_safe[DC_DISPLAYS]; struct dc_cf *cf_cont[DC_DISPLAYS]; struct dc_ed *ed_safe[DC_DISPLAYS]; -- 2.51.0