From: kernel test robot <lkp@intel.com>
To: Vladimir Moravcevic <vmoravcevic@axiado.com>,
Mark Brown <broonie@kernel.org>, Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Harshit Shah <hshah@axiado.com>, Tzu-Hao Wei <twei@axiado.com>,
Axiado Reviewers <linux-maintainer@axiado.com>
Cc: oe-kbuild-all@lists.linux.dev, linux-spi@vger.kernel.org,
devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org,
Vladimir Moravcevic <vmoravcevic@axiado.com>
Subject: Re: [PATCH 2/3] spi: axiado: Add driver for Axiado SPI DB controller
Date: Tue, 16 Sep 2025 13:55:39 +0800 [thread overview]
Message-ID: <202509161348.JWCcODvq-lkp@intel.com> (raw)
In-Reply-To: <20250915-axiado-ax3000-soc-spi-db-controller-driver-v1-2-814a1fa2a83e@axiado.com>
Hi Vladimir,
kernel test robot noticed the following build warnings:
[auto build test WARNING on e6b9dce0aeeb91dfc0974ab87f02454e24566182]
url: https://github.com/intel-lab-lkp/linux/commits/Vladimir-Moravcevic/dt-bindings-spi-axiado-ax3000-spi-Add-binding-for-Axiado-SPI-DB-controller/20250915-211453
base: e6b9dce0aeeb91dfc0974ab87f02454e24566182
patch link: https://lore.kernel.org/r/20250915-axiado-ax3000-soc-spi-db-controller-driver-v1-2-814a1fa2a83e%40axiado.com
patch subject: [PATCH 2/3] spi: axiado: Add driver for Axiado SPI DB controller
config: loongarch-allyesconfig (https://download.01.org/0day-ci/archive/20250916/202509161348.JWCcODvq-lkp@intel.com/config)
compiler: clang version 22.0.0git (https://github.com/llvm/llvm-project 65ad21d730d25789454d18e811f8ff5db79cb5d4)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250916/202509161348.JWCcODvq-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202509161348.JWCcODvq-lkp@intel.com/
All warnings (new ones prefixed by >>):
In file included from <built-in>:3:
In file included from include/linux/compiler_types.h:171:
include/linux/compiler-clang.h:28:9: warning: '__SANITIZE_ADDRESS__' macro redefined [-Wmacro-redefined]
28 | #define __SANITIZE_ADDRESS__
| ^
<built-in>:371:9: note: previous definition is here
371 | #define __SANITIZE_ADDRESS__ 1
| ^
>> drivers/spi/spi-axiado.c:480:6: warning: variable 'total_tx_bytes_for_op' set but not used [-Wunused-but-set-variable]
480 | int total_tx_bytes_for_op, bytes_to_discard_from_rx;
| ^
2 warnings generated.
vim +/total_tx_bytes_for_op +480 drivers/spi/spi-axiado.c
470
471 static int ax_spi_mem_exec_op(struct spi_mem *mem, const struct spi_mem_op *op)
472 {
473 struct spi_device *spi = mem->spi;
474 struct ax_spi *xspi = spi_controller_get_devdata(spi->controller);
475 u32 reg_val;
476 int ret = 0;
477 u8 cmd_buf[AX_SPI_COMMAND_BUFFER_SIZE];
478 int cmd_len = 0;
479 int i = 0, timeout = AX_SPI_TRX_FIFO_TIMEOUT;
> 480 int total_tx_bytes_for_op, bytes_to_discard_from_rx;
481 u8 *rx_buf_ptr = (u8 *)op->data.buf.in;
482 u8 *tx_buf_ptr = (u8 *)op->data.buf.out;
483 u32 rx_count_reg = 0;
484
485 dev_dbg(&spi->dev,
486 "%s: cmd:%02x mode:%d.%d.%d.%d addr:%llx len:%d\n",
487 __func__, op->cmd.opcode, op->cmd.buswidth, op->addr.buswidth,
488 op->dummy.buswidth, op->data.buswidth, op->addr.val,
489 op->data.nbytes);
490
491 /* Validate operation parameters: Only 1-bit bus width supported */
492 if (op->cmd.buswidth != 1 ||
493 (op->addr.nbytes && op->addr.buswidth != 0 &&
494 op->addr.buswidth != 1) ||
495 (op->dummy.nbytes && op->dummy.buswidth != 0 &&
496 op->dummy.buswidth != 1) ||
497 (op->data.nbytes && op->data.buswidth != 1)) {
498 dev_err(&spi->dev, "Unsupported bus width, only 1-bit bus width supported\n");
499 return -EOPNOTSUPP;
500 }
501
502 /* Initialize controller hardware */
503 ax_spi_init_hw(xspi);
504
505 /* Assert chip select (pull low) */
506 ax_spi_chipselect(spi, false);
507
508 /* Build command phase: Copy opcode to cmd_buf */
509 if (op->cmd.nbytes == 2) {
510 cmd_buf[cmd_len++] = (op->cmd.opcode >> 8) & 0xFF;
511 cmd_buf[cmd_len++] = op->cmd.opcode & 0xFF;
512 } else {
513 cmd_buf[cmd_len++] = op->cmd.opcode;
514 }
515
516 /* Put address bytes to cmd_buf */
517 if (op->addr.nbytes) {
518 for (i = op->addr.nbytes - 1; i >= 0; i--) {
519 cmd_buf[cmd_len] = (op->addr.val >> (i * 8)) & 0xFF;
520 cmd_len++;
521 }
522 }
523
524 /* Configure controller for desired operation mode (write/read) */
525 reg_val = ax_spi_read(xspi, AX_SPI_CR2);
526 reg_val |= AX_SPI_CR2_SWD | AX_SPI_CR2_SRI | AX_SPI_CR2_SRD;
527 ax_spi_write(xspi, AX_SPI_CR2, reg_val);
528
529 /* Calculate total bytes to clock out and fill TX FIFO */
530 total_tx_bytes_for_op = cmd_len;
531 if (op->data.dir == SPI_MEM_DATA_IN) {
532 total_tx_bytes_for_op += op->dummy.nbytes;
533 total_tx_bytes_for_op += op->data.nbytes;
534 } else {
535 total_tx_bytes_for_op += op->data.nbytes;
536 }
537
538 /* Write command and address bytes to TX_FIFO */
539 for (i = 0; i < cmd_len; i++)
540 ax_spi_write_b(xspi, AX_SPI_TXFIFO, cmd_buf[i]);
541
542 /* Add dummy bytes (for clock generation) or actual data bytes to TX_FIFO */
543 if (op->data.dir == SPI_MEM_DATA_IN) {
544 for (i = 0; i < op->dummy.nbytes; i++)
545 ax_spi_write_b(xspi, AX_SPI_TXFIFO, 0x00);
546 for (i = 0; i < op->data.nbytes; i++)
547 ax_spi_write_b(xspi, AX_SPI_TXFIFO, 0x00);
548 } else {
549 for (i = 0; i < op->data.nbytes; i++)
550 ax_spi_write_b(xspi, AX_SPI_TXFIFO, tx_buf_ptr[i]);
551 }
552
553 /* Start the SPI transmission */
554 reg_val = ax_spi_read(xspi, AX_SPI_CR2);
555 reg_val |= AX_SPI_CR2_HTE;
556 ax_spi_write(xspi, AX_SPI_CR2, reg_val);
557
558 /* Wait for TX FIFO to become empty */
559 while (timeout-- > 0) {
560 u32 tx_count_reg = ax_spi_read(xspi, AX_SPI_TX_FBCAR);
561
562 if (tx_count_reg == 0) {
563 udelay(1);
564 break;
565 }
566 udelay(1);
567 }
568
569 /* Handle Data Reception (for read operations) */
570 if (op->data.dir == SPI_MEM_DATA_IN) {
571 /* Reset the internal RX byte buffer for this new operation.
572 * This ensures ax_spi_get_rx_byte starts fresh for each exec_op call.
573 */
574 xspi->bytes_left_in_current_rx_word = 0;
575 xspi->current_rx_fifo_word = 0;
576
577 timeout = AX_SPI_TRX_FIFO_TIMEOUT;
578 while (timeout-- > 0) {
579 rx_count_reg = ax_spi_read(xspi, AX_SPI_RX_FBCAR);
580 if (rx_count_reg >= op->data.nbytes)
581 break;
582 udelay(1); // Small delay to prevent aggressive busy-waiting
583 }
584
585 if (timeout < 0) {
586 ret = -ETIMEDOUT;
587 goto out_unlock;
588 }
589
590 /* Calculate how many bytes we need to discard from the RX FIFO.
591 * Since we set SRI, we only need to discard the address bytes and
592 * dummy bytes from the RX FIFO.
593 */
594 bytes_to_discard_from_rx = op->addr.nbytes + op->dummy.nbytes;
595 for (i = 0; i < bytes_to_discard_from_rx; i++)
596 ax_spi_get_rx_byte(xspi);
597
598 /* Read actual data bytes into op->data.buf.in */
599 for (i = 0; i < op->data.nbytes; i++) {
600 *rx_buf_ptr = ax_spi_get_rx_byte(xspi);
601 rx_buf_ptr++;
602 }
603 } else if (op->data.dir == SPI_MEM_DATA_OUT) {
604 timeout = AX_SPI_TRX_FIFO_TIMEOUT;
605 while (timeout-- > 0) {
606 u32 tx_fifo_level = ax_spi_read(xspi, AX_SPI_TX_FBCAR);
607
608 if (tx_fifo_level == 0)
609 break;
610 udelay(1);
611 }
612 if (timeout < 0) {
613 ret = -ETIMEDOUT;
614 goto out_unlock;
615 }
616 }
617
618 out_unlock:
619 /* Deassert chip select (pull high) */
620 ax_spi_chipselect(spi, true);
621
622 return ret;
623 }
624
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
next prev parent reply other threads:[~2025-09-16 5:56 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-15 13:11 [PATCH 0/3] Axiado AX3000 SoC SPI DB controller driver Vladimir Moravcevic
2025-09-15 13:11 ` [PATCH 1/3] dt-bindings: spi: axiado,ax3000-spi: Add binding for Axiado SPI DB controller Vladimir Moravcevic
2025-09-15 17:22 ` Conor Dooley
2025-09-15 13:11 ` [PATCH 2/3] spi: axiado: Add driver " Vladimir Moravcevic
2025-09-15 14:30 ` Mark Brown
2025-09-16 5:55 ` kernel test robot [this message]
2025-09-15 13:11 ` [PATCH 3/3] MAINTAINERS: Add entries for the " Vladimir Moravcevic
2025-09-16 8:41 ` Tzu-Hao Wei
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=202509161348.JWCcODvq-lkp@intel.com \
--to=lkp@intel.com \
--cc=broonie@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=hshah@axiado.com \
--cc=krzk@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-maintainer@axiado.com \
--cc=linux-spi@vger.kernel.org \
--cc=oe-kbuild-all@lists.linux.dev \
--cc=robh@kernel.org \
--cc=twei@axiado.com \
--cc=vmoravcevic@axiado.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.