drivers/media/i2c/ccs-pll.c:386:5: warning: stack frame size of 2976 bytes in function 'ccs_pll_calculate'

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

 



tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   61556703b610a104de324e4f061dc6cf7b218b46
commit: 9e05bbac43ebfc2fd1ff95e072730ceed807d149 media: smiapp-pll: Rename as ccs-pll
date:   9 weeks ago
config: powerpc64-randconfig-r025-20210205 (attached as .config)
compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project c9439ca36342fb6013187d0a69aef92736951476)
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 powerpc64 cross compiling tool for clang build
        # apt-get install binutils-powerpc64-linux-gnu
        # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=9e05bbac43ebfc2fd1ff95e072730ceed807d149
        git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
        git fetch --no-tags linus master
        git checkout 9e05bbac43ebfc2fd1ff95e072730ceed807d149
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=powerpc64 

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/media/i2c/ccs-pll.c:386:5: warning: stack frame size of 2976 bytes in function 'ccs_pll_calculate' [-Wframe-larger-than=]
   int ccs_pll_calculate(struct device *dev, const struct ccs_pll_limits *limits,
       ^
   1 warning generated.


vim +/ccs_pll_calculate +386 drivers/media/i2c/ccs-pll.c

   385	
 > 386	int ccs_pll_calculate(struct device *dev, const struct ccs_pll_limits *limits,
   387			      struct ccs_pll *pll)
   388	{
   389		const struct ccs_pll_branch_limits *op_limits = &limits->op;
   390		struct ccs_pll_branch *op_pll = &pll->op;
   391		uint16_t min_pre_pll_clk_div;
   392		uint16_t max_pre_pll_clk_div;
   393		uint32_t lane_op_clock_ratio;
   394		uint32_t mul, div;
   395		unsigned int i;
   396		int rval = -EINVAL;
   397	
   398		if (pll->flags & CCS_PLL_FLAG_NO_OP_CLOCKS) {
   399			/*
   400			 * If there's no OP PLL at all, use the VT values
   401			 * instead. The OP values are ignored for the rest of
   402			 * the PLL calculation.
   403			 */
   404			op_limits = &limits->vt;
   405			op_pll = &pll->vt;
   406		}
   407	
   408		if (pll->flags & CCS_PLL_FLAG_OP_PIX_CLOCK_PER_LANE)
   409			lane_op_clock_ratio = pll->csi2.lanes;
   410		else
   411			lane_op_clock_ratio = 1;
   412		dev_dbg(dev, "lane_op_clock_ratio: %u\n", lane_op_clock_ratio);
   413	
   414		dev_dbg(dev, "binning: %ux%u\n", pll->binning_horizontal,
   415			pll->binning_vertical);
   416	
   417		switch (pll->bus_type) {
   418		case CCS_PLL_BUS_TYPE_CSI2:
   419			/* CSI transfers 2 bits per clock per lane; thus times 2 */
   420			pll->pll_op_clk_freq_hz = pll->link_freq * 2
   421				* (pll->csi2.lanes / lane_op_clock_ratio);
   422			break;
   423		case CCS_PLL_BUS_TYPE_PARALLEL:
   424			pll->pll_op_clk_freq_hz = pll->link_freq * pll->bits_per_pixel
   425				/ DIV_ROUND_UP(pll->bits_per_pixel,
   426					       pll->parallel.bus_width);
   427			break;
   428		default:
   429			return -EINVAL;
   430		}
   431	
   432		/* Figure out limits for pre-pll divider based on extclk */
   433		dev_dbg(dev, "min / max pre_pll_clk_div: %u / %u\n",
   434			limits->min_pre_pll_clk_div, limits->max_pre_pll_clk_div);
   435		max_pre_pll_clk_div =
   436			min_t(uint16_t, limits->max_pre_pll_clk_div,
   437			      clk_div_even(pll->ext_clk_freq_hz /
   438					   limits->min_pll_ip_freq_hz));
   439		min_pre_pll_clk_div =
   440			max_t(uint16_t, limits->min_pre_pll_clk_div,
   441			      clk_div_even_up(
   442				      DIV_ROUND_UP(pll->ext_clk_freq_hz,
   443						   limits->max_pll_ip_freq_hz)));
   444		dev_dbg(dev, "pre-pll check: min / max pre_pll_clk_div: %u / %u\n",
   445			min_pre_pll_clk_div, max_pre_pll_clk_div);
   446	
   447		i = gcd(pll->pll_op_clk_freq_hz, pll->ext_clk_freq_hz);
   448		mul = div_u64(pll->pll_op_clk_freq_hz, i);
   449		div = pll->ext_clk_freq_hz / i;
   450		dev_dbg(dev, "mul %u / div %u\n", mul, div);
   451	
   452		min_pre_pll_clk_div =
   453			max_t(uint16_t, min_pre_pll_clk_div,
   454			      clk_div_even_up(
   455				      DIV_ROUND_UP(mul * pll->ext_clk_freq_hz,
   456						   limits->max_pll_op_freq_hz)));
   457		dev_dbg(dev, "pll_op check: min / max pre_pll_clk_div: %u / %u\n",
   458			min_pre_pll_clk_div, max_pre_pll_clk_div);
   459	
   460		for (pll->pre_pll_clk_div = min_pre_pll_clk_div;
   461		     pll->pre_pll_clk_div <= max_pre_pll_clk_div;
   462		     pll->pre_pll_clk_div += 2 - (pll->pre_pll_clk_div & 1)) {
   463			rval = __ccs_pll_calculate(dev, limits, op_limits, pll, op_pll,
   464						   mul, div, lane_op_clock_ratio);
   465			if (rval)
   466				continue;
   467	
   468			print_pll(dev, pll);
   469			return 0;
   470		}
   471	
   472		dev_dbg(dev, "unable to compute pre_pll divisor\n");
   473	
   474		return rval;
   475	}
   476	EXPORT_SYMBOL_GPL(ccs_pll_calculate);
   477	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx

Attachment: .config.gz
Description: application/gzip


[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux