From: kernel test robot <lkp@intel.com>
To: "周琰杰 (Zhou Yanjie)" <zhouyanjie@wanyeetech.com>,
linux-kernel@vger.kernel.org
Cc: kbuild-all@lists.01.org, clang-built-linux@googlegroups.com,
devicetree@vger.kernel.org, daniel.lezcano@linaro.org,
tglx@linutronix.de, robh+dt@kernel.org, paul@crapouillou.net,
dongsheng.qiu@ingenic.com, aric.pzqi@ingenic.com,
rick.tyliu@ingenic.com, yanfei.li@ingenic.com
Subject: Re: [PATCH 2/2] clocksource: Ingenic: Add support for the Ingenic X1000 OST.
Date: Thu, 25 Jun 2020 19:00:36 +0800 [thread overview]
Message-ID: <202006251840.R3rvKVd6%lkp@intel.com> (raw)
In-Reply-To: <20200624165113.30873-3-zhouyanjie@wanyeetech.com>
[-- Attachment #1: Type: text/plain, Size: 10766 bytes --]
Hi "周琰杰,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on tip/timers/core]
[also build test WARNING on linux/master robh/for-next linus/master v5.8-rc2 next-20200624]
[cannot apply to daniel.lezcano/clockevents/next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Zhou-Yanjie/Add-support-for-the-OST-in-Ingenic-X1000/20200625-005621
base: https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git 809eb4e9bf9d84eb5b703358afd0d564d514f6d2
config: x86_64-allyesconfig (attached as .config)
compiler: clang version 11.0.0 (https://github.com/llvm/llvm-project 1d4c87335d5236ea1f35937e1014980ba961ae34)
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
# install x86_64 cross compiling tool for clang build
# apt-get install binutils-x86-64-linux-gnu
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
>> drivers/clocksource/ingenic-sysost.c:221:9: warning: implicit conversion from 'unsigned long' to 'unsigned int' changes value from 18446744073709551614 to 4294967294 [-Wconstant-conversion]
writel(~OSTFR_FFLAG, ost->base + OST_REG_OSTFR);
~~~~~~ ^~~~~~~~~~~~
drivers/clocksource/ingenic-sysost.c:225:9: warning: implicit conversion from 'unsigned long' to 'unsigned int' changes value from 18446744073709551614 to 4294967294 [-Wconstant-conversion]
writel(~OSTMR_FMASK, ost->base + OST_REG_OSTMR);
~~~~~~ ^~~~~~~~~~~~
>> drivers/clocksource/ingenic-sysost.c:408:6: warning: variable 'ret' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
if (!ost->base) {
^~~~~~~~~~
drivers/clocksource/ingenic-sysost.c:469:9: note: uninitialized use occurs here
return ret;
^~~
drivers/clocksource/ingenic-sysost.c:408:2: note: remove the 'if' if its condition is always false
if (!ost->base) {
^~~~~~~~~~~~~~~~~
drivers/clocksource/ingenic-sysost.c:401:9: note: initialize the variable 'ret' to silence this warning
int ret;
^
= 0
3 warnings generated.
vim +221 drivers/clocksource/ingenic-sysost.c
215
216 static int ingenic_ost_cevt_set_next(unsigned long next,
217 struct clock_event_device *evt)
218 {
219 struct ingenic_ost *ost = to_ingenic_ost(evt);
220
> 221 writel(~OSTFR_FFLAG, ost->base + OST_REG_OSTFR);
222 writel(next, ost->base + OST_REG_OST1DFR);
223 writel(OSTCR_OST1CLR, ost->base + OST_REG_OSTCR);
224 writel(OSTESR_OST1ENS, ost->base + OST_REG_OSTESR);
225 writel(~OSTMR_FMASK, ost->base + OST_REG_OSTMR);
226
227 return 0;
228 }
229
230 static irqreturn_t ingenic_ost_cevt_cb(int irq, void *dev_id)
231 {
232 struct clock_event_device *evt = dev_id;
233 struct ingenic_ost *ost = to_ingenic_ost(evt);
234
235 writel(OSTECR_OST1ENC, ost->base + OST_REG_OSTECR);
236
237 if (evt->event_handler)
238 evt->event_handler(evt);
239
240 return IRQ_HANDLED;
241 }
242
243 static int __init ingenic_ost_register_clock(struct ingenic_ost *ost,
244 unsigned int idx, const struct ingenic_ost_clk_info *info,
245 struct clk_hw_onecell_data *clocks)
246 {
247 struct ingenic_ost_clk *ost_clk;
248 int val, err;
249
250 ost_clk = kzalloc(sizeof(*ost_clk), GFP_KERNEL);
251 if (!ost_clk)
252 return -ENOMEM;
253
254 ost_clk->hw.init = &info->init_data;
255 ost_clk->idx = idx;
256 ost_clk->info = info;
257 ost_clk->ost = ost;
258
259 /* Reset clock divider */
260 val = readl(ost->base + info->ostccr_reg);
261 val &= ~(OSTCCR_PRESCALE1_MASK | OSTCCR_PRESCALE2_MASK);
262 writel(val, ost->base + info->ostccr_reg);
263
264 err = clk_hw_register(NULL, &ost_clk->hw);
265 if (err) {
266 kfree(ost_clk);
267 return err;
268 }
269
270 clocks->hws[idx] = &ost_clk->hw;
271
272 return 0;
273 }
274
275 static struct clk * __init ingenic_ost_get_clock(struct device_node *np, int id)
276 {
277 struct of_phandle_args args;
278
279 args.np = np;
280 args.args_count = 1;
281 args.args[0] = id;
282
283 return of_clk_get_from_provider(&args);
284 }
285
286 static int __init ingenic_ost_percpu_timer_init(struct device_node *np,
287 struct ingenic_ost *ost)
288 {
289 unsigned int timer_virq, channel = ost->percpu_timer_channel;
290 unsigned long rate;
291 int err;
292
293 ost->percpu_timer_clk = ingenic_ost_get_clock(np, channel);
294 if (IS_ERR(ost->percpu_timer_clk))
295 return PTR_ERR(ost->percpu_timer_clk);
296
297 err = clk_prepare_enable(ost->percpu_timer_clk);
298 if (err)
299 goto err_clk_put;
300
301 rate = clk_get_rate(ost->percpu_timer_clk);
302 if (!rate) {
303 err = -EINVAL;
304 goto err_clk_disable;
305 }
306
307 timer_virq = of_irq_get(np, 0);
308 if (!timer_virq) {
309 err = -EINVAL;
310 goto err_clk_disable;
311 }
312
313 snprintf(ost->name, sizeof(ost->name), "OST percpu timer");
314
315 err = request_irq(timer_virq, ingenic_ost_cevt_cb, IRQF_TIMER,
316 ost->name, &ost->cevt);
317 if (err)
318 goto err_irq_dispose_mapping;
319
320 ost->cevt.cpumask = cpumask_of(smp_processor_id());
321 ost->cevt.features = CLOCK_EVT_FEAT_ONESHOT;
322 ost->cevt.name = ost->name;
323 ost->cevt.rating = 400;
324 ost->cevt.set_state_shutdown = ingenic_ost_cevt_set_state_shutdown;
325 ost->cevt.set_next_event = ingenic_ost_cevt_set_next;
326
327 clockevents_config_and_register(&ost->cevt, rate, 4, 0xffffffff);
328
329 return 0;
330
331 err_irq_dispose_mapping:
332 irq_dispose_mapping(timer_virq);
333 err_clk_disable:
334 clk_disable_unprepare(ost->percpu_timer_clk);
335 err_clk_put:
336 clk_put(ost->percpu_timer_clk);
337 return err;
338 }
339
340 static int __init ingenic_ost_global_timer_init(struct device_node *np,
341 struct ingenic_ost *ost)
342 {
343 unsigned int channel = ost->global_timer_channel;
344 struct clocksource *cs = &ost->cs;
345 unsigned long rate;
346 int err;
347
348 ost->global_timer_clk = ingenic_ost_get_clock(np, channel);
349 if (IS_ERR(ost->global_timer_clk))
350 return PTR_ERR(ost->global_timer_clk);
351
352 err = clk_prepare_enable(ost->global_timer_clk);
353 if (err)
354 goto err_clk_put;
355
356 rate = clk_get_rate(ost->global_timer_clk);
357 if (!rate) {
358 err = -EINVAL;
359 goto err_clk_disable;
360 }
361
362 /* Clear counter CNT registers */
363 writel(OSTCR_OST2CLR, ost->base + OST_REG_OSTCR);
364
365 /* Enable OST channel */
366 writel(OSTESR_OST2ENS, ost->base + OST_REG_OSTESR);
367
368 cs->name = "ingenic-ost";
369 cs->rating = 400;
370 cs->flags = CLOCK_SOURCE_IS_CONTINUOUS;
371 cs->mask = CLOCKSOURCE_MASK(32);
372 cs->read = ingenic_ost_clocksource_read;
373
374 err = clocksource_register_hz(cs, rate);
375 if (err)
376 goto err_clk_disable;
377
378 return 0;
379
380 err_clk_disable:
381 clk_disable_unprepare(ost->global_timer_clk);
382 err_clk_put:
383 clk_put(ost->global_timer_clk);
384 return err;
385 }
386
387 static const struct ingenic_soc_info x1000_soc_info = {
388 .num_channels = 2,
389 };
390
391 static const struct of_device_id __maybe_unused ingenic_ost_of_match[] __initconst = {
392 { .compatible = "ingenic,x1000-ost", .data = &x1000_soc_info, },
393 { /* sentinel */ }
394 };
395
396 static int __init ingenic_ost_probe(struct device_node *np)
397 {
398 const struct of_device_id *id = of_match_node(ingenic_ost_of_match, np);
399 struct ingenic_ost *ost;
400 unsigned int i;
401 int ret;
402
403 ost = kzalloc(sizeof(*ost), GFP_KERNEL);
404 if (!ost)
405 return -ENOMEM;
406
407 ost->base = of_iomap(np, 0);
> 408 if (!ost->base) {
409 pr_err("%s: Failed to map OST registers\n", __func__);
410 goto err_free_ost;
411 }
412
413 ost->clk = of_clk_get_by_name(np, "ost");
414 if (IS_ERR(ost->clk)) {
415 ret = PTR_ERR(ost->clk);
416 pr_crit("%s: Cannot get OST clock\n", __func__);
417 goto err_free_ost;
418 }
419
420 ret = clk_prepare_enable(ost->clk);
421 if (ret) {
422 pr_crit("%s: Unable to enable OST clock\n", __func__);
423 goto err_put_clk;
424 }
425
426 ost->soc_info = id->data;
427
428 ost->clocks = kzalloc(struct_size(ost->clocks, hws, ost->soc_info->num_channels),
429 GFP_KERNEL);
430 if (!ost->clocks) {
431 ret = -ENOMEM;
432 goto err_clk_disable;
433 }
434
435 ost->clocks->num = ost->soc_info->num_channels;
436
437 for (i = 0; i < ost->clocks->num; i++) {
438 ret = ingenic_ost_register_clock(ost, i, &ingenic_ost_clk_info[i], ost->clocks);
439 if (ret) {
440 pr_crit("%s: Cannot register clock %d\n", __func__, i);
441 goto err_unregister_ost_clocks;
442 }
443 }
444
445 ret = of_clk_add_hw_provider(np, of_clk_hw_onecell_get, ost->clocks);
446 if (ret) {
447 pr_crit("%s: Cannot add OF clock provider\n", __func__);
448 goto err_unregister_ost_clocks;
449 }
450
451 ost->percpu_timer_channel = OST_CLK_PERCPU_TIMER;
452 ost->global_timer_channel = OST_CLK_GLOBAL_TIMER;
453
454 ingenic_ost = ost;
455
456 return 0;
457
458 err_unregister_ost_clocks:
459 for (i = 0; i < ost->clocks->num; i++)
460 if (ost->clocks->hws[i])
461 clk_hw_unregister(ost->clocks->hws[i]);
462 kfree(ost->clocks);
463 err_clk_disable:
464 clk_disable_unprepare(ost->clk);
465 err_put_clk:
466 clk_put(ost->clk);
467 err_free_ost:
468 kfree(ost);
469 return ret;
470 }
471
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 73988 bytes --]
prev parent reply other threads:[~2020-06-25 11:01 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-24 16:51 [PATCH 0/2] Add support for the OST in Ingenic X1000 周琰杰 (Zhou Yanjie)
2020-06-24 16:51 ` [PATCH 1/2] dt-bindings: timer: Add Ingenic X1000 OST bindings 周琰杰 (Zhou Yanjie)
2020-06-24 16:51 ` [PATCH 2/2] clocksource: Ingenic: Add support for the Ingenic X1000 OST 周琰杰 (Zhou Yanjie)
2020-06-25 8:47 ` kernel test robot
2020-06-25 11:00 ` kernel test robot [this message]
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=202006251840.R3rvKVd6%lkp@intel.com \
--to=lkp@intel.com \
--cc=aric.pzqi@ingenic.com \
--cc=clang-built-linux@googlegroups.com \
--cc=daniel.lezcano@linaro.org \
--cc=devicetree@vger.kernel.org \
--cc=dongsheng.qiu@ingenic.com \
--cc=kbuild-all@lists.01.org \
--cc=linux-kernel@vger.kernel.org \
--cc=paul@crapouillou.net \
--cc=rick.tyliu@ingenic.com \
--cc=robh+dt@kernel.org \
--cc=tglx@linutronix.de \
--cc=yanfei.li@ingenic.com \
--cc=zhouyanjie@wanyeetech.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