Re: [PATCH v4 2/2] clk: ingenic-tcu: Fix missing TCU clock for X1000 SoCs

From: Dan Carpenter
Date: Tue Apr 12 2022 - 08:08:14 EST


Hi Aidan,

url: https://github.com/intel-lab-lkp/linux/commits/Aidan-MacDonald/Fix-missing-TCU-clock-for-X1000-X1830-SoCs/20220411-234531
base: https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git for-next
config: arc-randconfig-m031-20220411 (https://download.01.org/0day-ci/archive/20220412/202204121856.LxK9kEyg-lkp@xxxxxxxxx/config)
compiler: arc-elf-gcc (GCC) 11.2.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@xxxxxxxxx>
Reported-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx>

smatch warnings:
drivers/clk/ingenic/tcu.c:456 ingenic_tcu_probe() error: uninitialized symbol 'ret'.

vim +/ret +456 drivers/clk/ingenic/tcu.c

4f89e4b8f1215c1 Paul Cercueil 2019-07-24 337 static int __init ingenic_tcu_probe(struct device_node *np)
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 338 {
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 339 const struct of_device_id *id = of_match_node(ingenic_tcu_of_match, np);
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 340 struct ingenic_tcu *tcu;
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 341 struct regmap *map;
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 342 unsigned int i;
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 343 int ret;
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 344
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 345 map = device_node_to_regmap(np);
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 346 if (IS_ERR(map))
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 347 return PTR_ERR(map);
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 348
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 349 tcu = kzalloc(sizeof(*tcu), GFP_KERNEL);
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 350 if (!tcu)
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 351 return -ENOMEM;
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 352
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 353 tcu->map = map;
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 354 tcu->soc_info = id->data;
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 355
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 356 if (tcu->soc_info->has_tcu_clk) {
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 357 tcu->clk = of_clk_get_by_name(np, "tcu");
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 358 if (IS_ERR(tcu->clk)) {
8c04eee82a9d67a Aidan MacDonald 2022-04-11 359 /*
8c04eee82a9d67a Aidan MacDonald 2022-04-11 360 * Old device trees for some SoCs did not include the
8c04eee82a9d67a Aidan MacDonald 2022-04-11 361 * TCU clock because this driver (incorrectly) didn't
8c04eee82a9d67a Aidan MacDonald 2022-04-11 362 * use it. In this case we complain loudly and attempt
8c04eee82a9d67a Aidan MacDonald 2022-04-11 363 * to continue without the clock, which might work if
8c04eee82a9d67a Aidan MacDonald 2022-04-11 364 * booting with workarounds like "clk_ignore_unused".
8c04eee82a9d67a Aidan MacDonald 2022-04-11 365 */
8c04eee82a9d67a Aidan MacDonald 2022-04-11 366 if (tcu->soc_info->allow_missing_tcu_clk &&
8c04eee82a9d67a Aidan MacDonald 2022-04-11 367 PTR_ERR(tcu->clk) == -EINVAL) {
8c04eee82a9d67a Aidan MacDonald 2022-04-11 368 pr_warn("TCU clock missing from device tree, please update your device tree\n");
8c04eee82a9d67a Aidan MacDonald 2022-04-11 369 tcu->clk = NULL;
8c04eee82a9d67a Aidan MacDonald 2022-04-11 370 } else {
8c04eee82a9d67a Aidan MacDonald 2022-04-11 371 pr_crit("Cannot get TCU clock from device tree\n");
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 372 goto err_free_tcu;

no error code.

4f89e4b8f1215c1 Paul Cercueil 2019-07-24 373 }
8c04eee82a9d67a Aidan MacDonald 2022-04-11 374 } else {
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 375 ret = clk_prepare_enable(tcu->clk);
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 376 if (ret) {
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 377 pr_crit("Unable to enable TCU clock\n");
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 378 goto err_put_clk;
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 379 }
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 380 }
8c04eee82a9d67a Aidan MacDonald 2022-04-11 381 }
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 382
e620a1e061c4738 Stephen Kitt 2019-09-27 383 tcu->clocks = kzalloc(struct_size(tcu->clocks, hws, TCU_CLK_COUNT),
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 384 GFP_KERNEL);
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 385 if (!tcu->clocks) {
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 386 ret = -ENOMEM;
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 387 goto err_clk_disable;
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 388 }
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 389
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 390 tcu->clocks->num = TCU_CLK_COUNT;
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 391
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 392 for (i = 0; i < tcu->soc_info->num_channels; i++) {
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 393 ret = ingenic_tcu_register_clock(tcu, i, TCU_PARENT_EXT,
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 394 &ingenic_tcu_clk_info[i],
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 395 tcu->clocks);
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 396 if (ret) {
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 397 pr_crit("cannot register clock %d\n", i);
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 398 goto err_unregister_timer_clocks;
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 399 }
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 400 }
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 401
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 402 /*
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 403 * We set EXT as the default parent clock for all the TCU clocks
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 404 * except for the watchdog one, where we set the RTC clock as the
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 405 * parent. Since the EXT and PCLK are much faster than the RTC clock,
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 406 * the watchdog would kick after a maximum time of 5s, and we might
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 407 * want a slower kicking time.
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 408 */
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 409 ret = ingenic_tcu_register_clock(tcu, TCU_CLK_WDT, TCU_PARENT_RTC,
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 410 &ingenic_tcu_watchdog_clk_info,
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 411 tcu->clocks);
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 412 if (ret) {
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 413 pr_crit("cannot register watchdog clock\n");
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 414 goto err_unregister_timer_clocks;
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 415 }
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 416
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 417 if (tcu->soc_info->has_ost) {
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 418 ret = ingenic_tcu_register_clock(tcu, TCU_CLK_OST,
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 419 TCU_PARENT_EXT,
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 420 &ingenic_tcu_ost_clk_info,
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 421 tcu->clocks);
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 422 if (ret) {
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 423 pr_crit("cannot register ost clock\n");
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 424 goto err_unregister_watchdog_clock;
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 425 }
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 426 }
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 427
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 428 ret = of_clk_add_hw_provider(np, of_clk_hw_onecell_get, tcu->clocks);
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 429 if (ret) {
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 430 pr_crit("cannot add OF clock provider\n");
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 431 goto err_unregister_ost_clock;
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 432 }
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 433
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 434 ingenic_tcu = tcu;
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 435
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 436 return 0;
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 437
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 438 err_unregister_ost_clock:
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 439 if (tcu->soc_info->has_ost)
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 440 clk_hw_unregister(tcu->clocks->hws[i + 1]);
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 441 err_unregister_watchdog_clock:
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 442 clk_hw_unregister(tcu->clocks->hws[i]);
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 443 err_unregister_timer_clocks:
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 444 for (i = 0; i < tcu->clocks->num; i++)
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 445 if (tcu->clocks->hws[i])
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 446 clk_hw_unregister(tcu->clocks->hws[i]);
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 447 kfree(tcu->clocks);
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 448 err_clk_disable:
8c04eee82a9d67a Aidan MacDonald 2022-04-11 449 if (tcu->clk)
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 450 clk_disable_unprepare(tcu->clk);
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 451 err_put_clk:
8c04eee82a9d67a Aidan MacDonald 2022-04-11 452 if (tcu->clk)
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 453 clk_put(tcu->clk);
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 454 err_free_tcu:
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 455 kfree(tcu);
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 @456 return ret;
4f89e4b8f1215c1 Paul Cercueil 2019-07-24 457 }

--
0-DAY CI Kernel Test Service
https://01.org/lkp