[PATCH 04/39] drm/imx: dc: Use bulk clock

Marek Vasut marek.vasut at mailbox.org
Tue Oct 14 05:02:37 PDT 2025


On 10/13/25 6:54 PM, Frank Li wrote:
> On Sat, Oct 11, 2025 at 06:51:19PM +0200, Marek Vasut wrote:
>> Switch to bulk clock operations, as many of the blocks present in DC
> 
> s/operations/API
> 
>> 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 <marek.vasut at mailbox.org>
>> ---
>> Cc: Abel Vesa <abelvesa at kernel.org>
>> Cc: Conor Dooley <conor+dt at kernel.org>
>> Cc: Fabio Estevam <festevam at gmail.com>
>> Cc: Krzysztof Kozlowski <krzk+dt at kernel.org>
>> Cc: Laurent Pinchart <Laurent.pinchart at ideasonboard.com>
>> Cc: Liu Ying <victor.liu at nxp.com>
>> Cc: Lucas Stach <l.stach at pengutronix.de>
>> Cc: Peng Fan <peng.fan at nxp.com>
>> Cc: Pengutronix Kernel Team <kernel at pengutronix.de>
>> Cc: Rob Herring <robh at kernel.org>
>> Cc: Shawn Guo <shawnguo at kernel.org>
>> Cc: Thomas Zimmermann <tzimmermann at suse.de>
>> Cc: devicetree at vger.kernel.org
>> Cc: dri-devel at lists.freedesktop.org
>> Cc: imx at lists.linux.dev
>> Cc: linux-arm-kernel at lists.infradead.org
>> Cc: linux-clk at 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;
> 
> I am not sure if "axi' is good name for bulk clks. Maybe use 'clks'. _axi
> quite specific to special 'axi' clocks.
Fixed both, thanks.



More information about the linux-arm-kernel mailing list