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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Aidan,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on robh/for-next]
[also build test WARNING on clk/clk-next linus/master linux/master v5.18-rc2 next-20220411]
[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/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: mips-randconfig-c004-20220411 (https://download.01.org/0day-ci/archive/20220412/202204120958.uBiGandq-lkp@xxxxxxxxx/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project c6e83f560f06cdfe8aa47b248d8bdc58f947274b)
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 mips cross compiling tool for clang build
        # apt-get install binutils-mips-linux-gnu
        # https://github.com/intel-lab-lkp/linux/commit/8c04eee82a9d67a768bb6c787d66724782fce89b
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Aidan-MacDonald/Fix-missing-TCU-clock-for-X1000-X1830-SoCs/20220411-234531
        git checkout 8c04eee82a9d67a768bb6c787d66724782fce89b
        # save the config file to linux build tree
        mkdir build_dir
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=mips SHELL=/bin/bash drivers/clk/ingenic/

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

All warnings (new ones prefixed by >>):

>> drivers/clk/ingenic/tcu.c:366:8: warning: variable 'ret' is used uninitialized whenever 'if' condition is false [-Wsometimes-uninitialized]
                           if (tcu->soc_info->allow_missing_tcu_clk &&
                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/clk/ingenic/tcu.c:456:9: note: uninitialized use occurs here
           return ret;
                  ^~~
   drivers/clk/ingenic/tcu.c:366:4: note: remove the 'if' if its condition is always true
                           if (tcu->soc_info->allow_missing_tcu_clk &&
                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/clk/ingenic/tcu.c:366:8: warning: variable 'ret' is used uninitialized whenever '&&' condition is false [-Wsometimes-uninitialized]
                           if (tcu->soc_info->allow_missing_tcu_clk &&
                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/clk/ingenic/tcu.c:456:9: note: uninitialized use occurs here
           return ret;
                  ^~~
   drivers/clk/ingenic/tcu.c:366:8: note: remove the '&&' if its condition is always true
                           if (tcu->soc_info->allow_missing_tcu_clk &&
                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/clk/ingenic/tcu.c:343:9: note: initialize the variable 'ret' to silence this warning
           int ret;
                  ^
                   = 0
   2 warnings generated.


vim +366 drivers/clk/ingenic/tcu.c

   336	
   337	static int __init ingenic_tcu_probe(struct device_node *np)
   338	{
   339		const struct of_device_id *id = of_match_node(ingenic_tcu_of_match, np);
   340		struct ingenic_tcu *tcu;
   341		struct regmap *map;
   342		unsigned int i;
   343		int ret;
   344	
   345		map = device_node_to_regmap(np);
   346		if (IS_ERR(map))
   347			return PTR_ERR(map);
   348	
   349		tcu = kzalloc(sizeof(*tcu), GFP_KERNEL);
   350		if (!tcu)
   351			return -ENOMEM;
   352	
   353		tcu->map = map;
   354		tcu->soc_info = id->data;
   355	
   356		if (tcu->soc_info->has_tcu_clk) {
   357			tcu->clk = of_clk_get_by_name(np, "tcu");
   358			if (IS_ERR(tcu->clk)) {
   359				/*
   360				 * Old device trees for some SoCs did not include the
   361				 * TCU clock because this driver (incorrectly) didn't
   362				 * use it. In this case we complain loudly and attempt
   363				 * to continue without the clock, which might work if
   364				 * booting with workarounds like "clk_ignore_unused".
   365				 */
 > 366				if (tcu->soc_info->allow_missing_tcu_clk &&
   367				    PTR_ERR(tcu->clk) == -EINVAL) {
   368					pr_warn("TCU clock missing from device tree, please update your device tree\n");
   369					tcu->clk = NULL;
   370				} else {
   371					pr_crit("Cannot get TCU clock from device tree\n");
   372					goto err_free_tcu;
   373				}
   374			} else {
   375				ret = clk_prepare_enable(tcu->clk);
   376				if (ret) {
   377					pr_crit("Unable to enable TCU clock\n");
   378					goto err_put_clk;
   379				}
   380			}
   381		}
   382	
   383		tcu->clocks = kzalloc(struct_size(tcu->clocks, hws, TCU_CLK_COUNT),
   384				      GFP_KERNEL);
   385		if (!tcu->clocks) {
   386			ret = -ENOMEM;
   387			goto err_clk_disable;
   388		}
   389	
   390		tcu->clocks->num = TCU_CLK_COUNT;
   391	
   392		for (i = 0; i < tcu->soc_info->num_channels; i++) {
   393			ret = ingenic_tcu_register_clock(tcu, i, TCU_PARENT_EXT,
   394							 &ingenic_tcu_clk_info[i],
   395							 tcu->clocks);
   396			if (ret) {
   397				pr_crit("cannot register clock %d\n", i);
   398				goto err_unregister_timer_clocks;
   399			}
   400		}
   401	
   402		/*
   403		 * We set EXT as the default parent clock for all the TCU clocks
   404		 * except for the watchdog one, where we set the RTC clock as the
   405		 * parent. Since the EXT and PCLK are much faster than the RTC clock,
   406		 * the watchdog would kick after a maximum time of 5s, and we might
   407		 * want a slower kicking time.
   408		 */
   409		ret = ingenic_tcu_register_clock(tcu, TCU_CLK_WDT, TCU_PARENT_RTC,
   410						 &ingenic_tcu_watchdog_clk_info,
   411						 tcu->clocks);
   412		if (ret) {
   413			pr_crit("cannot register watchdog clock\n");
   414			goto err_unregister_timer_clocks;
   415		}
   416	
   417		if (tcu->soc_info->has_ost) {
   418			ret = ingenic_tcu_register_clock(tcu, TCU_CLK_OST,
   419							 TCU_PARENT_EXT,
   420							 &ingenic_tcu_ost_clk_info,
   421							 tcu->clocks);
   422			if (ret) {
   423				pr_crit("cannot register ost clock\n");
   424				goto err_unregister_watchdog_clock;
   425			}
   426		}
   427	
   428		ret = of_clk_add_hw_provider(np, of_clk_hw_onecell_get, tcu->clocks);
   429		if (ret) {
   430			pr_crit("cannot add OF clock provider\n");
   431			goto err_unregister_ost_clock;
   432		}
   433	
   434		ingenic_tcu = tcu;
   435	
   436		return 0;
   437	
   438	err_unregister_ost_clock:
   439		if (tcu->soc_info->has_ost)
   440			clk_hw_unregister(tcu->clocks->hws[i + 1]);
   441	err_unregister_watchdog_clock:
   442		clk_hw_unregister(tcu->clocks->hws[i]);
   443	err_unregister_timer_clocks:
   444		for (i = 0; i < tcu->clocks->num; i++)
   445			if (tcu->clocks->hws[i])
   446				clk_hw_unregister(tcu->clocks->hws[i]);
   447		kfree(tcu->clocks);
   448	err_clk_disable:
   449		if (tcu->clk)
   450			clk_disable_unprepare(tcu->clk);
   451	err_put_clk:
   452		if (tcu->clk)
   453			clk_put(tcu->clk);
   454	err_free_tcu:
   455		kfree(tcu);
   456		return ret;
   457	}
   458	

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



[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux