[PATCH v4 06/10] clk: Add Sunplus SP7021 clock driver
kernel test robot
lkp at intel.com
Thu Nov 4 04:32:08 PDT 2021
Hi Qin,
I love your patch! Perhaps something to improve:
[auto build test WARNING on pza/reset/next]
[also build test WARNING on robh/for-next clk/clk-next tip/irq/core linus/master v5.15 next-20211104]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Qin-Jian/dt-bindings-vendor-prefixes-Add-Sunplus/20211104-115746
base: https://git.pengutronix.de/git/pza/linux reset/next
config: xtensa-randconfig-r012-20211104 (attached as .config)
compiler: xtensa-linux-gcc (GCC) 11.2.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/604141a9aad536dff720a6337561171d72d63d74
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Qin-Jian/dt-bindings-vendor-prefixes-Add-Sunplus/20211104-115746
git checkout 604141a9aad536dff720a6337561171d72d63d74
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross ARCH=xtensa
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp at intel.com>
All warnings (new ones prefixed by >>):
drivers/clk/clk-sp7021.c: In function 'plltv_fractional_div':
>> drivers/clk/clk-sp7021.c:292:13: warning: variable 'diff_min_sign' set but not used [-Wunused-but-set-variable]
292 | u32 diff_min_sign = 0;
| ^~~~~~~~~~~~~
drivers/clk/clk-sp7021.c: At top level:
drivers/clk/clk-sp7021.c:625:13: warning: no previous prototype for 'clk_register_sp_pll' [-Wmissing-prototypes]
625 | struct clk *clk_register_sp_pll(const char *name, const char *parent,
| ^~~~~~~~~~~~~~~~~~~
vim +/diff_min_sign +292 drivers/clk/clk-sp7021.c
286
287 static long plltv_fractional_div(struct sp_pll *clk, unsigned long freq)
288 {
289 u32 m, r;
290 u32 nint, nfra;
291 u32 diff_min_quotient = 210000000, diff_min_remainder = 0;
> 292 u32 diff_min_sign = 0;
293 unsigned long fvco, nf, f, fout = 0;
294 int sdm, ph;
295
296 /* check freq */
297 if (freq < F_MIN) {
298 pr_warn("%s: %s freq:%lu < F_MIN:%lu, round up\n",
299 __func__, clk_hw_get_name(&clk->hw), freq, F_MIN);
300 freq = F_MIN;
301 } else if (freq > F_MAX) {
302 pr_warn("%s: %s freq:%lu > F_MAX:%lu, round down\n",
303 __func__, clk_hw_get_name(&clk->hw), freq, F_MAX);
304 freq = F_MAX;
305 }
306
307 /* DIVR 0~3 */
308 for (r = 0; r <= 3; r++) {
309 fvco = freq << r;
310 if (fvco <= FVCO_MAX)
311 break;
312 }
313 f = F_27M >> r;
314
315 /* PH_SEL 1/0 */
316 for (ph = 1; ph >= 0; ph--) {
317 const u32 *pp = pt[ph];
318 u32 ms = 1;
319
320 /* SDM_MOD 0/1 */
321 for (sdm = 0; sdm <= 1; sdm++) {
322 u32 mod = mods[sdm];
323
324 /* DIVM 1~32 */
325 for (m = ms; m <= 32; m++) {
326 u32 diff_freq;
327 u32 diff_freq_quotient = 0, diff_freq_remainder = 0;
328 u32 diff_freq_sign = 0; /* 0:Positive number, 1:Negative number */
329
330 nf = fvco * m;
331 nint = nf / pp[3];
332
333 if (nint < pp[1])
334 continue;
335 if (nint > pp[1])
336 break;
337
338 nfra = (((nf % pp[3]) * mod * pp[4]) + (F_27M / 2)) / F_27M;
339 if (nfra)
340 diff_freq = (f * (nint + pp[2]) / pp[0]) -
341 (f * (mod - nfra) / mod / pp[4]);
342 else
343 diff_freq = (f * (nint) / pp[0]);
344
345 diff_freq_quotient = diff_freq / m;
346 diff_freq_remainder = ((diff_freq % m) * 1000) / m;
347
348 if (freq > diff_freq_quotient) {
349 diff_freq_quotient = freq - diff_freq_quotient - 1;
350 diff_freq_remainder = 1000 - diff_freq_remainder;
351 diff_freq_sign = 1;
352 } else {
353 diff_freq_quotient = diff_freq_quotient - freq;
354 diff_freq_sign = 0;
355 }
356
357 if ((diff_min_quotient > diff_freq_quotient) ||
358 ((diff_min_quotient == diff_freq_quotient) &&
359 (diff_min_remainder > diff_freq_remainder))) {
360
361 /* found a closer freq, save parameters */
362 clk->p[SEL_FRA] = 1;
363 clk->p[SDM_MOD] = sdm;
364 clk->p[PH_SEL] = ph;
365 clk->p[NFRA] = nfra;
366 clk->p[DIVR] = r;
367 clk->p[DIVM] = m;
368
369 fout = diff_freq / m;
370 diff_min_quotient = diff_freq_quotient;
371 diff_min_remainder = diff_freq_remainder;
372 diff_min_sign = diff_freq_sign;
373 }
374 }
375 }
376 }
377
378 if (!fout) {
379 pr_err("%s: %s freq:%lu not found a valid setting\n",
380 __func__, clk_hw_get_name(&clk->hw), freq);
381 return -EINVAL;
382 }
383
384 return fout;
385 }
386
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 33007 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20211104/80c57649/attachment-0001.gz>
More information about the linux-arm-kernel
mailing list