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 --]
next prev parent 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).