From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Rob Herring <robh@kernel.org>
Cc: Frank Li <Frank.li@nxp.com>,
Mauro Carvalho Chehab <mchehab@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Shawn Guo <shawnguo@kernel.org>,
Sascha Hauer <s.hauer@pengutronix.de>,
Pengutronix Kernel Team <kernel@pengutronix.de>,
Fabio Estevam <festevam@gmail.com>,
Rui Miguel Silva <rmfrfs@gmail.com>,
Martin Kepplinger <martink@posteo.de>,
Purism Kernel Team <kernel@puri.sm>,
linux-media@vger.kernel.org, devicetree@vger.kernel.org,
imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org,
Robert Chiras <robert.chiras@nxp.com>,
"Guoniu.zhou" <guoniu.zhou@nxp.com>
Subject: Re: [PATCH v4 04/13] media: nxp: imx8-isi: Use devm_clk_bulk_get_all() to fetch clocks
Date: Wed, 11 Jun 2025 17:14:49 +0300 [thread overview]
Message-ID: <20250611141449.GA24607@pendragon.ideasonboard.com> (raw)
In-Reply-To: <aBylKcZyFInlKQAR@lizhi-Precision-Tower-5810>
Hi Rob,
On Thu, May 08, 2025 at 08:35:53AM -0400, Frank Li wrote:
> On Fri, May 02, 2025 at 06:57:47PM +0300, Laurent Pinchart wrote:
> > On Thu, May 01, 2025 at 09:02:04PM -0400, Frank Li wrote:
> > > On Tue, Apr 22, 2025 at 12:14:38AM +0300, Laurent Pinchart wrote:
> > > > On Tue, Apr 08, 2025 at 05:53:02PM -0400, Frank Li wrote:
> > > > > Use devm_clk_bulk_get_all() helper to simplify clock handle code.
> > > > >
> > > > > No functional changes intended.
> > > > >
> > > > > Signed-off-by: Frank Li <Frank.Li@nxp.com>
> > > > > ---
> > > > > .../media/platform/nxp/imx8-isi/imx8-isi-core.c | 46 +++-------------------
> > > > > .../media/platform/nxp/imx8-isi/imx8-isi-core.h | 3 +-
> > > > > 2 files changed, 6 insertions(+), 43 deletions(-)
> > > > >
> > > > > diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c b/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c
> > > > > index ecfc95882f903..015350c6f2784 100644
> > > > > --- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c
> > > > > +++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.c
> > > > > @@ -275,11 +275,6 @@ static const struct mxc_isi_set_thd mxc_imx8_isi_thd_v1 = {
> > > > > .panic_set_thd_v = { .mask = 0xf0000, .offset = 16, .threshold = 0x7 },
> > > > > };
> > > > >
> > > > > -static const struct clk_bulk_data mxc_imx8mn_clks[] = {
> > > > > - { .id = "axi" },
> > > > > - { .id = "apb" },
> > > > > -};
> > > > > -
> > > > > static const struct mxc_isi_plat_data mxc_imx8mn_data = {
> > > > > .model = MXC_ISI_IMX8MN,
> > > > > .num_ports = 1,
> > > > > @@ -287,8 +282,6 @@ static const struct mxc_isi_plat_data mxc_imx8mn_data = {
> > > > > .reg_offset = 0,
> > > > > .ier_reg = &mxc_imx8_isi_ier_v1,
> > > > > .set_thd = &mxc_imx8_isi_thd_v1,
> > > > > - .clks = mxc_imx8mn_clks,
> > > > > - .num_clks = ARRAY_SIZE(mxc_imx8mn_clks),
> > > > > .buf_active_reverse = false,
> > > > > .gasket_ops = &mxc_imx8_gasket_ops,
> > > > > .has_36bit_dma = false,
> > > > > @@ -301,8 +294,6 @@ static const struct mxc_isi_plat_data mxc_imx8mp_data = {
> > > > > .reg_offset = 0x2000,
> > > > > .ier_reg = &mxc_imx8_isi_ier_v2,
> > > > > .set_thd = &mxc_imx8_isi_thd_v1,
> > > > > - .clks = mxc_imx8mn_clks,
> > > > > - .num_clks = ARRAY_SIZE(mxc_imx8mn_clks),
> > > > > .buf_active_reverse = true,
> > > > > .gasket_ops = &mxc_imx8_gasket_ops,
> > > > > .has_36bit_dma = true,
> > > > > @@ -315,8 +306,6 @@ static const struct mxc_isi_plat_data mxc_imx8ulp_data = {
> > > > > .reg_offset = 0x0,
> > > > > .ier_reg = &mxc_imx8_isi_ier_v2,
> > > > > .set_thd = &mxc_imx8_isi_thd_v1,
> > > > > - .clks = mxc_imx8mn_clks,
> > > > > - .num_clks = ARRAY_SIZE(mxc_imx8mn_clks),
> > > > > .buf_active_reverse = true,
> > > > > .has_36bit_dma = false,
> > > > > };
> > > > > @@ -328,8 +317,6 @@ static const struct mxc_isi_plat_data mxc_imx93_data = {
> > > > > .reg_offset = 0,
> > > > > .ier_reg = &mxc_imx8_isi_ier_v2,
> > > > > .set_thd = &mxc_imx8_isi_thd_v1,
> > > > > - .clks = mxc_imx8mn_clks,
> > > > > - .num_clks = ARRAY_SIZE(mxc_imx8mn_clks),
> > > > > .buf_active_reverse = true,
> > > > > .gasket_ops = &mxc_imx93_gasket_ops,
> > > > > .has_36bit_dma = false,
> > > > > @@ -386,7 +373,7 @@ static int mxc_isi_runtime_suspend(struct device *dev)
> > > > > {
> > > > > struct mxc_isi_dev *isi = dev_get_drvdata(dev);
> > > > >
> > > > > - clk_bulk_disable_unprepare(isi->pdata->num_clks, isi->clks);
> > > > > + clk_bulk_disable_unprepare(isi->num_clks, isi->clks);
> > > > >
> > > > > return 0;
> > > > > }
> > > > > @@ -396,7 +383,7 @@ static int mxc_isi_runtime_resume(struct device *dev)
> > > > > struct mxc_isi_dev *isi = dev_get_drvdata(dev);
> > > > > int ret;
> > > > >
> > > > > - ret = clk_bulk_prepare_enable(isi->pdata->num_clks, isi->clks);
> > > > > + ret = clk_bulk_prepare_enable(isi->num_clks, isi->clks);
> > > > > if (ret) {
> > > > > dev_err(dev, "Failed to enable clocks (%d)\n", ret);
> > > > > return ret;
> > > > > @@ -414,27 +401,6 @@ static const struct dev_pm_ops mxc_isi_pm_ops = {
> > > > > * Probe, remove & driver
> > > > > */
> > > > >
> > > > > -static int mxc_isi_clk_get(struct mxc_isi_dev *isi)
> > > > > -{
> > > > > - unsigned int size = isi->pdata->num_clks
> > > > > - * sizeof(*isi->clks);
> > > > > - int ret;
> > > > > -
> > > > > - isi->clks = devm_kmemdup(isi->dev, isi->pdata->clks, size, GFP_KERNEL);
> > > > > - if (!isi->clks)
> > > > > - return -ENOMEM;
> > > > > -
> > > > > - ret = devm_clk_bulk_get(isi->dev, isi->pdata->num_clks,
> > > > > - isi->clks);
> > > > > - if (ret < 0) {
> > > > > - dev_err(isi->dev, "Failed to acquire clocks: %d\n",
> > > > > - ret);
> > > > > - return ret;
> > > > > - }
> > > > > -
> > > > > - return 0;
> > > > > -}
> > > > > -
> > > > > static int mxc_isi_probe(struct platform_device *pdev)
> > > > > {
> > > > > struct device *dev = &pdev->dev;
> > > > > @@ -457,11 +423,9 @@ static int mxc_isi_probe(struct platform_device *pdev)
> > > > > if (!isi->pipes)
> > > > > return -ENOMEM;
> > > > >
> > > > > - ret = mxc_isi_clk_get(isi);
> > > > > - if (ret < 0) {
> > > > > - dev_err(dev, "Failed to get clocks\n");
> > > > > - return ret;
> > > > > - }
> > > > > + isi->num_clks = devm_clk_bulk_get_all(dev, &isi->clks);
> > > >
> > > > This prevents validating that the DT contains the expected clocks, which
> > > > could cause hard to debug issues. Isn't it a problem ?
> > >
> > > It is checked by dt-binding. Now no warning by DTB_CHECK under arm64 freecale.
> > > CHECK_DTB should be enough to find expected clocks.
> >
> > Yes, the DTB check will catch issues at build time, but the driver will
> > not enforce that. I'm not sure if there's a clear policy here, and if
> > ensuring at runtime in drivers that the expected clocks are present is
> > considered as a good practice by the DT maintainers. Rob, Krzysztof,
> > Conor, do you have an opinion ?
>
> Rob:
> can you comment this?
Rob, any comment on this ?
> Laurent:
> Many driver already switch to devm_clk_bulk_get_all() such as qcom/imx6
> pci drivers recently.
>
> > > > > + if (isi->num_clks < 0)
> > > > > + return dev_err_probe(dev, isi->num_clks, "Failed to get clocks\n");
> > > > >
> > > > > isi->regs = devm_platform_ioremap_resource(pdev, 0);
> > > > > if (IS_ERR(isi->regs)) {
> > > > > diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.h b/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.h
> > > > > index e7534a80af7b4..bd3cfe5fbe063 100644
> > > > > --- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.h
> > > > > +++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-core.h
> > > > > @@ -169,8 +169,6 @@ struct mxc_isi_plat_data {
> > > > > const struct mxc_isi_ier_reg *ier_reg;
> > > > > const struct mxc_isi_set_thd *set_thd;
> > > > > const struct mxc_gasket_ops *gasket_ops;
> > > > > - const struct clk_bulk_data *clks;
> > > > > - unsigned int num_clks;
> > > > > bool buf_active_reverse;
> > > > > bool has_36bit_dma;
> > > > > };
> > > > > @@ -282,6 +280,7 @@ struct mxc_isi_dev {
> > > > >
> > > > > void __iomem *regs;
> > > > > struct clk_bulk_data *clks;
> > > > > + int num_clks;
> > > > > struct regmap *gasket;
> > > > >
> > > > > struct mxc_isi_crossbar crossbar;
--
Regards,
Laurent Pinchart
next prev parent reply other threads:[~2025-06-11 14:15 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-08 21:52 [PATCH v4 00/13] media: imx8: add camera support Frank Li
2025-04-08 21:52 ` [PATCH v4 01/13] media: dt-bindings: Add binding doc for i.MX8QXP and i.MX8QM ISI Frank Li
2025-04-08 21:53 ` [PATCH v4 02/13] media: nxp: imx8-isi: Allow num_sources to be greater than num_sink Frank Li
2025-04-08 21:53 ` [PATCH v4 03/13] media: nxp: imx8-isi: Remove unused offset in mxc_isi_reg and use BIT() macro for mask Frank Li
2025-04-21 21:06 ` Laurent Pinchart
2025-05-02 0:53 ` Frank Li
2025-05-02 15:25 ` Laurent Pinchart
2025-04-08 21:53 ` [PATCH v4 04/13] media: nxp: imx8-isi: Use devm_clk_bulk_get_all() to fetch clocks Frank Li
2025-04-21 21:14 ` Laurent Pinchart
2025-05-02 1:02 ` Frank Li
2025-05-02 15:57 ` Laurent Pinchart
2025-05-08 12:35 ` Frank Li
2025-06-11 14:14 ` Laurent Pinchart [this message]
2025-06-17 14:11 ` Rob Herring
2025-06-17 14:29 ` Laurent Pinchart
2025-04-08 21:53 ` [PATCH v4 05/13] media: nxp: imx8-isi: Remove redundant check for dma_set_mask_and_coherent() Frank Li
2025-04-21 21:19 ` Laurent Pinchart
2025-04-08 21:53 ` [PATCH v4 06/13] media: nxp: imx8-isi: Use dev_err_probe() simplify code Frank Li
2025-04-21 21:21 ` Laurent Pinchart
2025-04-08 21:53 ` [PATCH v4 07/13] media: imx8-isi: Add support for i.MX8QM and i.MX8QXP Frank Li
2025-04-21 21:32 ` Laurent Pinchart
2025-04-08 21:53 ` [PATCH v4 08/13] media: dt-bindings: nxp,imx8mq-mipi-csi2: Add i.MX8QM(QXP) compatible strings Frank Li
2025-04-08 21:53 ` [PATCH v4 09/13] media: imx8mq-mipi-csi2: Add imx8mq_plat_data for different " Frank Li
2025-04-08 21:53 ` [PATCH v4 10/13] media: imx8mq-mipi-csi2: Add support for i.MX8QXP Frank Li
2025-04-21 21:41 ` Laurent Pinchart
2025-04-08 21:53 ` [PATCH v4 11/13] arm64: dts: imx8: add capture controller for i.MX8's img subsystem Frank Li
2025-04-21 21:46 ` Laurent Pinchart
2025-04-08 21:53 ` [PATCH v4 12/13] arm64: dts: imx8q: add linux,cma node for imx8qm-mek and imx8qxp-mek Frank Li
2025-04-08 21:53 ` [PATCH v4 13/13] arm64: dts: imx8q: add camera ov5640 support " Frank Li
2025-04-21 18:44 ` [PATCH v4 00/13] media: imx8: add camera support Frank Li
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250611141449.GA24607@pendragon.ideasonboard.com \
--to=laurent.pinchart@ideasonboard.com \
--cc=Frank.li@nxp.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=festevam@gmail.com \
--cc=guoniu.zhou@nxp.com \
--cc=imx@lists.linux.dev \
--cc=kernel@pengutronix.de \
--cc=kernel@puri.sm \
--cc=krzk+dt@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=martink@posteo.de \
--cc=mchehab@kernel.org \
--cc=rmfrfs@gmail.com \
--cc=robert.chiras@nxp.com \
--cc=robh@kernel.org \
--cc=s.hauer@pengutronix.de \
--cc=shawnguo@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.