mirror of
https://github.com/apache/nuttx.git
synced 2026-05-23 14:58:13 +08:00
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:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user