From: Dan Carpenter <dan.carpenter@oracle.com>
To: prabhakar.mahadev-lad.rj@bp.renesas.com
Cc: linux-renesas-soc@vger.kernel.org, linux-clk@vger.kernel.org
Subject: [bug report] clk: renesas: Add CPG core wrapper for RZ/G2L SoC
Date: Thu, 17 Jun 2021 16:37:01 +0300 [thread overview]
Message-ID: <YMtP/QHWljGcv3JX@mwanda> (raw)
Hello Lad Prabhakar,
The patch ef3c613ccd68: "clk: renesas: Add CPG core wrapper for
RZ/G2L SoC" from Jun 9, 2021, leads to the following static checker
warning:
drivers/clk/renesas/renesas-rzg2l-cpg.c:226 rzg2l_cpg_clk_src_twocell_get()
warn: array off by one? 'priv->clks[clkidx]'
drivers/clk/renesas/renesas-rzg2l-cpg.c
209 static struct clk
210 *rzg2l_cpg_clk_src_twocell_get(struct of_phandle_args *clkspec,
211 void *data)
212 {
213 unsigned int clkidx = clkspec->args[1];
214 struct rzg2l_cpg_priv *priv = data;
215 struct device *dev = priv->dev;
216 const char *type;
217 struct clk *clk;
218
219 switch (clkspec->args[0]) {
220 case CPG_CORE:
221 type = "core";
222 if (clkidx > priv->last_dt_core_clk) {
The ->last_dt_core_clk value comes from the device tree and I hate that
we have to trust it. I haven't looked at the device tree and I only
look at the code but based on the name "last_", I assume that
in the device tree data this is set to either:
last_dt_core_clk = priv->num_core_clks + priv->num_mod_clks - 1;
Or maybe it's set so that:
last_dt_core_clk = priv->num_core_clks - 1;
So I think that it is not off by one (based on the naming scheme). But
I would prefer that this code just used:
if (clkidx >= priv->num_core_clks)
Or:
if (clkidx >= priv->num_core_clks + priv->num_mod_clks)
223 dev_err(dev, "Invalid %s clock index %u\n", type, clkidx);
224 return ERR_PTR(-EINVAL);
225 }
226 clk = priv->clks[clkidx];
227 break;
228
229 case CPG_MOD:
230 type = "module";
231 if (clkidx > priv->num_mod_clks) {
^^^^^^^^^^^^^^^^^^^^^^^^^^^
Smatch did not catch it, but this condition is definitely off by one. ;)
232 dev_err(dev, "Invalid %s clock index %u\n", type,
233 clkidx);
234 return ERR_PTR(-EINVAL);
235 }
236 clk = priv->clks[priv->num_core_clks + clkidx];
237 break;
238
239 default:
240 dev_err(dev, "Invalid CPG clock type %u\n", clkspec->args[0]);
241 return ERR_PTR(-EINVAL);
242 }
243
244 if (IS_ERR(clk))
245 dev_err(dev, "Cannot get %s clock %u: %ld", type, clkidx,
246 PTR_ERR(clk));
247 else
248 dev_dbg(dev, "clock (%u, %u) is %pC at %lu Hz\n",
249 clkspec->args[0], clkspec->args[1], clk,
250 clk_get_rate(clk));
251 return clk;
252 }
regards,
dan carpenter
next reply other threads:[~2021-06-17 13:37 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-17 13:37 Dan Carpenter [this message]
2021-06-17 14:14 ` [bug report] clk: renesas: Add CPG core wrapper for RZ/G2L SoC Prabhakar Mahadev Lad
2021-06-17 14:43 ` Dan Carpenter
2021-06-17 14:55 ` Prabhakar Mahadev Lad
-- strict thread matches above, loose matches on Subject: below --
2021-06-17 12:02 Dan Carpenter
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=YMtP/QHWljGcv3JX@mwanda \
--to=dan.carpenter@oracle.com \
--cc=linux-clk@vger.kernel.org \
--cc=linux-renesas-soc@vger.kernel.org \
--cc=prabhakar.mahadev-lad.rj@bp.renesas.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox