drivers/rpmsg_port_spi: fix SPI exchange length calculation

The cmdhdr->len was uninitialized before being used in SPI exchange
operations. This caused incorrect transfer lengths.

Changes:
- Initialize cmdhdr->len to sizeof(struct rpmsg_port_header_s) during
  initialization for both SPI master and slave drivers
- Use port.txq.len instead of cmdhdr->len for TX exchange length
- Use port.rxq.len instead of cmdhdr->len for RX getdata length

Signed-off-by: liaoao <liaoao@xiaomi.com>
This commit is contained in:
liaoao
2025-05-19 15:41:39 +08:00
committed by Xiang Xiao
parent ba81948741
commit fd6ab20362
2 changed files with 5 additions and 3 deletions
+2 -1
View File
@@ -312,7 +312,7 @@ static void rpmsg_port_spi_exchange(FAR struct rpmsg_port_spi_s *rpspi)
rpmsg_port_spi_pm_action(rpspi, true);
SPI_SELECT(rpspi->spi, rpspi->devid, true);
SPI_EXCHANGE(rpspi->spi, txhdr, rpspi->rxhdr,
RPMSG_PORT_SPI_BYTES2WORDS(rpspi, rpspi->cmdhdr->len));
RPMSG_PORT_SPI_BYTES2WORDS(rpspi, rpspi->port.txq.len));
rpspi->rxavail = txhdr->avail;
}
@@ -772,6 +772,7 @@ rpmsg_port_spi_initialize(FAR const struct rpmsg_port_config_s *cfg,
rpspi->rxhdr = rpmsg_port_queue_get_available_buffer(
&rpspi->port.rxq, true);
DEBUGASSERT(rpspi->cmdhdr != NULL && rpspi->rxhdr != NULL);
rpspi->cmdhdr->len = sizeof(struct rpmsg_port_header_s);
rpspi->rxthres = rpmsg_port_queue_navail(&rpspi->port.rxq) *
CONFIG_RPMSG_PORT_SPI_RX_THRESHOLD / 100;
+3 -2
View File
@@ -276,7 +276,7 @@ static void rpmsg_port_spi_exchange(FAR struct rpmsg_port_spi_s *rpspi)
rpmsg_port_spi_pm_action(rpspi, true);
SPIS_CTRLR_ENQUEUE(rpspi->spictrlr, txhdr,
RPMSG_PORT_SPI_BYTES2WORDS(rpspi, rpspi->cmdhdr->len));
RPMSG_PORT_SPI_BYTES2WORDS(rpspi, rpspi->port.txq.len));
IOEXP_WRITEPIN(rpspi->ioe, rpspi->sreq, 1);
rpspi->rxavail = txhdr->avail;
@@ -364,7 +364,7 @@ static size_t rpmsg_port_spi_slave_getdata(FAR struct spi_slave_dev_s *dev,
container_of(dev, struct rpmsg_port_spi_s, spislv);
*data = rpspi->rxhdr;
return RPMSG_PORT_SPI_BYTES2WORDS(rpspi, rpspi->cmdhdr->len);
return RPMSG_PORT_SPI_BYTES2WORDS(rpspi, rpspi->port.rxq.len);
}
/****************************************************************************
@@ -813,6 +813,7 @@ rpmsg_port_spi_slave_initialize(FAR const struct rpmsg_port_config_s *cfg,
rpspi->rxhdr = rpmsg_port_queue_get_available_buffer(
&rpspi->port.rxq, true);
DEBUGASSERT(rpspi->cmdhdr != NULL && rpspi->rxhdr != NULL);
rpspi->cmdhdr->len = sizeof(struct rpmsg_port_header_s);
rpspi->rxthres = rpmsg_port_queue_navail(&rpspi->port.rxq) *
CONFIG_RPMSG_PORT_SPI_RX_THRESHOLD / 100;