linux-i2c.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Vinod Koul <vkoul@kernel.org>,
	Bjorn Andersson <bjorn.andersson@linaro.org>,
	Mark Brown <broonie@kernel.org>,
	Wolfram Sang <wsa-dev@sang-engineering.com>
Cc: kbuild-all@lists.01.org, clang-built-linux@googlegroups.com,
	Vinod Koul <vkoul@kernel.org>, Andy Gross <agross@kernel.org>,
	Sumit Semwal <sumit.semwal@linaro.org>,
	Douglas Anderson <dianders@chromium.org>,
	Matthias Kaehlcke <mka@chromium.org>,
	linux-spi@vger.kernel.org, linux-i2c@vger.kernel.org
Subject: Re: [PATCH v3 4/5] spi: spi-geni-qcom: Add support for GPI dma
Date: Fri, 25 Jun 2021 20:10:09 +0800	[thread overview]
Message-ID: <202106252043.yop2gBOp-lkp@intel.com> (raw)
In-Reply-To: <20210625052213.32260-5-vkoul@kernel.org>

[-- Attachment #1: Type: text/plain, Size: 9709 bytes --]

Hi Vinod,

I love your patch! Perhaps something to improve:

[auto build test WARNING on spi/for-next]
[also build test WARNING on wsa/i2c/for-next asoc/for-next linus/master v5.13-rc7 next-20210624]
[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/Vinod-Koul/Add-and-enable-GPI-DMA-users/20210625-132320
base:   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git for-next
config: x86_64-randconfig-a012-20210625 (attached as .config)
compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project 9ca0171a9ffdef5fdb1511d197a3fd72490362de)
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
        # https://github.com/0day-ci/linux/commit/3632ac4a40c3ef7f86f081d462bf17b45e4c0085
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Vinod-Koul/Add-and-enable-GPI-DMA-users/20210625-132320
        git checkout 3632ac4a40c3ef7f86f081d462bf17b45e4c0085
        # 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/spi/spi-geni-qcom.c:496:44: warning: variable 'i' is uninitialized when used here [-Wuninitialized]
                   dev_err(mas->dev, "Tx[%d] timeout%lu\n", i, timeout);
                                                            ^
   include/linux/dev_printk.h:112:32: note: expanded from macro 'dev_err'
           _dev_err(dev, dev_fmt(fmt), ##__VA_ARGS__)
                                         ^~~~~~~~~~~
   drivers/spi/spi-geni-qcom.c:407:12: note: initialize the variable 'i' to silence this warning
           int ret, i;
                     ^
                      = 0
>> drivers/spi/spi-geni-qcom.c:579:6: warning: variable 'ret' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized]
           if (IS_ERR_OR_NULL(mas->gsi))
               ^~~~~~~~~~~~~~~~~~~~~~~~
   drivers/spi/spi-geni-qcom.c:590:9: note: uninitialized use occurs here
           return ret;
                  ^~~
   drivers/spi/spi-geni-qcom.c:579:2: note: remove the 'if' if its condition is always false
           if (IS_ERR_OR_NULL(mas->gsi))
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/spi/spi-geni-qcom.c:562:9: note: initialize the variable 'ret' to silence this warning
           int ret;
                  ^
                   = 0
   2 warnings generated.


vim +/i +496 drivers/spi/spi-geni-qcom.c

   398	
   399	static int setup_gsi_xfer(struct spi_transfer *xfer, struct spi_geni_master *mas,
   400				  struct spi_device *spi_slv, struct spi_master *spi)
   401	{
   402		unsigned long flags = DMA_PREP_INTERRUPT | DMA_CTRL_ACK;
   403		struct spi_geni_gsi *gsi;
   404		struct dma_slave_config config = {};
   405		struct gpi_spi_config peripheral = {};
   406		unsigned long timeout, jiffies;
   407		int ret, i;
   408	
   409		config.peripheral_config = &peripheral;
   410		config.peripheral_size = sizeof(peripheral);
   411		peripheral.set_config = true;
   412	
   413		if (xfer->bits_per_word != mas->cur_bits_per_word ||
   414		    xfer->speed_hz != mas->cur_speed_hz) {
   415			mas->cur_bits_per_word = xfer->bits_per_word;
   416			mas->cur_speed_hz = xfer->speed_hz;
   417		}
   418	
   419		if (!(mas->cur_bits_per_word % MIN_WORD_LEN)) {
   420			peripheral.rx_len = ((xfer->len << 3) / mas->cur_bits_per_word);
   421		} else {
   422			int bytes_per_word = (mas->cur_bits_per_word / BITS_PER_BYTE) + 1;
   423	
   424			peripheral.rx_len = (xfer->len / bytes_per_word);
   425		}
   426	
   427		if (xfer->tx_buf && xfer->rx_buf) {
   428			peripheral.cmd = SPI_DUPLEX;
   429		} else if (xfer->tx_buf) {
   430			peripheral.cmd = SPI_TX;
   431			peripheral.rx_len = 0;
   432		} else if (xfer->rx_buf) {
   433			peripheral.cmd = SPI_RX;
   434		}
   435	
   436		if (spi_slv->mode & SPI_LOOP)
   437			peripheral.loopback_en = true;
   438		if (spi_slv->mode & SPI_CPOL)
   439			peripheral.clock_pol_high = true;
   440		if (spi_slv->mode & SPI_CPHA)
   441			peripheral.data_pol_high = true;
   442	
   443		peripheral.cs = spi_slv->chip_select;
   444		peripheral.pack_en = true;
   445		peripheral.word_len = xfer->bits_per_word - MIN_WORD_LEN;
   446		peripheral.fragmentation = FRAGMENTATION;
   447	
   448		ret = get_spi_clk_cfg(mas->cur_speed_hz, mas,
   449				      &peripheral.clk_src, &peripheral.clk_div);
   450		if (ret) {
   451			dev_err(mas->dev, "Err in get_spi_clk_cfg() :%d\n", ret);
   452			return ret;
   453		}
   454	
   455		gsi = &mas->gsi[mas->num_xfers];
   456		gsi->rx_cb.mas = mas;
   457		gsi->rx_cb.xfer = xfer;
   458	
   459		if (peripheral.cmd & SPI_RX) {
   460			dmaengine_slave_config(mas->rx, &config);
   461			gsi->rx_desc = dmaengine_prep_slave_sg(mas->rx, xfer->rx_sg.sgl, xfer->rx_sg.nents,
   462							       DMA_DEV_TO_MEM, flags);
   463			if (!gsi->rx_desc) {
   464				dev_err(mas->dev, "Err setting up rx desc\n");
   465				return -EIO;
   466			}
   467			gsi->rx_desc->callback_result = spi_gsi_rx_callback_result;
   468			gsi->rx_desc->callback_param = &gsi->rx_cb;
   469		}
   470	
   471		dmaengine_slave_config(mas->tx, &config);
   472		gsi->tx_desc = dmaengine_prep_slave_sg(mas->tx, xfer->tx_sg.sgl, xfer->tx_sg.nents,
   473						       DMA_MEM_TO_DEV, flags);
   474		if (!gsi->tx_desc) {
   475			dev_err(mas->dev, "Err setting up tx desc\n");
   476			return -EIO;
   477		}
   478	
   479		gsi->tx_cb.mas = mas;
   480		gsi->tx_cb.xfer = xfer;
   481		gsi->tx_desc->callback_result = spi_gsi_tx_callback_result;
   482		gsi->tx_desc->callback_param = &gsi->tx_cb;
   483	
   484		if (peripheral.cmd & SPI_RX)
   485			gsi->rx_cookie = dmaengine_submit(gsi->rx_desc);
   486		gsi->tx_cookie = dmaengine_submit(gsi->tx_desc);
   487	
   488		if (peripheral.cmd & SPI_RX)
   489			dma_async_issue_pending(mas->rx);
   490		dma_async_issue_pending(mas->tx);
   491		mas->num_xfers++;
   492	
   493		jiffies = msecs_to_jiffies(SPI_XFER_TIMEOUT_MS);
   494		timeout = wait_for_completion_timeout(&mas->tx_cb, jiffies);
   495		if (timeout <= 0) {
 > 496			dev_err(mas->dev, "Tx[%d] timeout%lu\n", i, timeout);
   497			ret = -ETIMEDOUT;
   498			goto err_gsi_geni_transfer_one;
   499		}
   500	
   501		if (peripheral.cmd & SPI_RX) {
   502			jiffies = msecs_to_jiffies(SPI_XFER_TIMEOUT_MS);
   503			timeout = wait_for_completion_timeout(&mas->rx_cb, jiffies);
   504			if (timeout <= 0) {
   505				dev_err(mas->dev, "Rx[%d] timeout%lu\n", i, timeout);
   506				ret = -ETIMEDOUT;
   507				goto err_gsi_geni_transfer_one;
   508			}
   509		}
   510	
   511		spi_finalize_current_transfer(spi);
   512		return 0;
   513	
   514	err_gsi_geni_transfer_one:
   515		dmaengine_terminate_all(mas->tx);
   516		return ret;
   517	}
   518	
   519	static bool geni_can_dma(struct spi_controller *ctlr,
   520				 struct spi_device *slv, struct spi_transfer *xfer)
   521	{
   522		struct spi_geni_master *mas = spi_master_get_devdata(slv->master);
   523	
   524		/* check if dma is supported */
   525		if (mas->cur_xfer_mode == GENI_GPI_DMA)
   526			return true;
   527	
   528		return false;
   529	}
   530	
   531	static int spi_geni_prepare_message(struct spi_master *spi,
   532						struct spi_message *spi_msg)
   533	{
   534		struct spi_geni_master *mas = spi_master_get_devdata(spi);
   535		int ret;
   536	
   537		switch (mas->cur_xfer_mode) {
   538		case GENI_SE_FIFO:
   539			if (spi_geni_is_abort_still_pending(mas))
   540				return -EBUSY;
   541			ret = setup_fifo_params(spi_msg->spi, spi);
   542			if (ret)
   543				dev_err(mas->dev, "Couldn't select mode %d\n", ret);
   544			return ret;
   545	
   546		case GENI_GPI_DMA:
   547			mas->num_xfers = 0;
   548			reinit_completion(&mas->tx_cb);
   549			reinit_completion(&mas->rx_cb);
   550			memset(mas->gsi, 0, (sizeof(struct spi_geni_gsi) * NUM_SPI_XFER));
   551	
   552			return 0;
   553		}
   554	
   555		dev_err(mas->dev, "Mode not supported %d", mas->cur_xfer_mode);
   556		return -EINVAL;
   557	}
   558	
   559	static int spi_geni_grab_gpi_chan(struct spi_geni_master *mas)
   560	{
   561		size_t gsi_sz;
   562		int ret;
   563	
   564		mas->tx = dma_request_chan(mas->dev, "tx");
   565		if (IS_ERR_OR_NULL(mas->tx)) {
   566			dev_err(mas->dev, "Failed to get tx DMA ch %ld", PTR_ERR(mas->tx));
   567			ret = PTR_ERR(mas->tx);
   568			goto err_tx;
   569		}
   570		mas->rx = dma_request_chan(mas->dev, "rx");
   571		if (IS_ERR_OR_NULL(mas->rx)) {
   572			dev_err(mas->dev, "Failed to get rx DMA ch %ld", PTR_ERR(mas->rx));
   573			ret = PTR_ERR(mas->rx);
   574			goto err_rx;
   575		}
   576	
   577		gsi_sz = sizeof(struct spi_geni_gsi) * NUM_SPI_XFER;
   578		mas->gsi = devm_kzalloc(mas->dev, gsi_sz, GFP_KERNEL);
 > 579		if (IS_ERR_OR_NULL(mas->gsi))
   580			goto err_mem;
   581		return 0;
   582	
   583	err_mem:
   584		dma_release_channel(mas->rx);
   585	err_rx:
   586		dma_release_channel(mas->tx);
   587	err_tx:
   588		mas->tx = NULL;
   589		mas->rx = NULL;
   590		return ret;
   591	}
   592	

---
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: 46664 bytes --]

  reply	other threads:[~2021-06-25 12:11 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-25  5:22 [PATCH v3 0/5] Add and enable GPI DMA users Vinod Koul
2021-06-25  5:22 ` [PATCH v3 1/5] soc: qcom: geni: move GENI_IF_DISABLE_RO to common header Vinod Koul
2021-06-28 23:37   ` Doug Anderson
2021-06-25  5:22 ` [PATCH v3 2/5] soc: qcom: geni: Add support for gpi dma Vinod Koul
2021-06-28 23:38   ` Doug Anderson
2021-06-29  3:37     ` Vinod Koul
2021-06-25  5:22 ` [PATCH v3 3/5] spi: core: add dma_map_dev for dma device Vinod Koul
2021-06-25  5:22 ` [PATCH v3 4/5] spi: spi-geni-qcom: Add support for GPI dma Vinod Koul
2021-06-25 12:10   ` kernel test robot [this message]
2021-06-28 23:37   ` Doug Anderson
2021-10-14 16:04     ` Vinod Koul
2021-10-14 16:55       ` Doug Anderson
2021-10-18 16:53         ` Vinod Koul
2021-06-25  5:22 ` [PATCH v3 5/5] i2c: qcom-geni: Add support for GPI DMA Vinod Koul
2021-06-25 13:24 ` (subset) [PATCH v3 0/5] Add and enable GPI DMA users Mark Brown

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=202106252043.yop2gBOp-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=agross@kernel.org \
    --cc=bjorn.andersson@linaro.org \
    --cc=broonie@kernel.org \
    --cc=clang-built-linux@googlegroups.com \
    --cc=dianders@chromium.org \
    --cc=kbuild-all@lists.01.org \
    --cc=linux-i2c@vger.kernel.org \
    --cc=linux-spi@vger.kernel.org \
    --cc=mka@chromium.org \
    --cc=sumit.semwal@linaro.org \
    --cc=vkoul@kernel.org \
    --cc=wsa-dev@sang-engineering.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;
as well as URLs for NNTP newsgroup(s).