All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] soc: fsl: qmc: Only set completion interrupt when needed
@ 2025-05-09  7:48 Christophe Leroy
  2025-05-09  7:48 ` [PATCH 2/2] ASoC: fsl: fsl_qmc_audio: Only request completion on last channel Christophe Leroy
  2025-05-09  9:15 ` [PATCH 1/2] soc: fsl: qmc: Only set completion interrupt when needed Herve Codina
  0 siblings, 2 replies; 6+ messages in thread
From: Christophe Leroy @ 2025-05-09  7:48 UTC (permalink / raw)
  To: Herve Codina, Qiang Zhao, Shengjiu Wang, Xiubo Li, Fabio Estevam,
	Nicolin Chen, Liam Girdwood, Mark Brown, Jaroslav Kysela,
	Takashi Iwai
  Cc: Christophe Leroy, linux-kernel, linuxppc-dev, linux-arm-kernel,
	linux-sound

When no post-completion processing is expected, don't waste time
handling useless interrupts.

Only set QMC_BD_[R/T]X_I and QMC_BD_[R/T]X_UB when a completion
function is passed in.

Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
---
 drivers/soc/fsl/qe/qmc.c | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/drivers/soc/fsl/qe/qmc.c b/drivers/soc/fsl/qe/qmc.c
index 36c0ccc06151..0a704fd0b1a0 100644
--- a/drivers/soc/fsl/qe/qmc.c
+++ b/drivers/soc/fsl/qe/qmc.c
@@ -474,7 +474,9 @@ int qmc_chan_write_submit(struct qmc_chan *chan, dma_addr_t addr, size_t length,
 	xfer_desc->context = context;
 
 	/* Activate the descriptor */
-	ctrl |= (QMC_BD_TX_R | QMC_BD_TX_UB);
+	ctrl |= QMC_BD_TX_R;
+	if (complete)
+		ctrl |= QMC_BD_TX_I | QMC_BD_TX_UB;
 	wmb(); /* Be sure to flush the descriptor before control update */
 	qmc_write16(&bd->cbd_sc, ctrl);
 
@@ -586,7 +588,9 @@ int qmc_chan_read_submit(struct qmc_chan *chan, dma_addr_t addr, size_t length,
 		  QMC_BD_RX_AB | QMC_BD_RX_CR);
 
 	/* Activate the descriptor */
-	ctrl |= (QMC_BD_RX_E | QMC_BD_RX_UB);
+	ctrl |= QMC_BD_RX_E;
+	if (complete)
+		ctrl |= QMC_BD_RX_I | QMC_BD_RX_UB;
 	wmb(); /* Be sure to flush data before descriptor activation */
 	qmc_write16(&bd->cbd_sc, ctrl);
 
@@ -1482,19 +1486,19 @@ static int qmc_setup_chan(struct qmc *qmc, struct qmc_chan *chan)
 
 	/* Init Rx BDs and set Wrap bit on last descriptor */
 	BUILD_BUG_ON(QMC_NB_RXBDS == 0);
-	val = QMC_BD_RX_I;
 	for (i = 0; i < QMC_NB_RXBDS; i++) {
 		bd = chan->rxbds + i;
-		qmc_write16(&bd->cbd_sc, val);
+		qmc_write16(&bd->cbd_sc, 0);
 	}
 	bd = chan->rxbds + QMC_NB_RXBDS - 1;
-	qmc_write16(&bd->cbd_sc, val | QMC_BD_RX_W);
+	qmc_write16(&bd->cbd_sc, QMC_BD_RX_W);
 
 	/* Init Tx BDs and set Wrap bit on last descriptor */
 	BUILD_BUG_ON(QMC_NB_TXBDS == 0);
-	val = QMC_BD_TX_I;
 	if (chan->mode == QMC_HDLC)
-		val |= QMC_BD_TX_L | QMC_BD_TX_TC;
+		val = QMC_BD_TX_L | QMC_BD_TX_TC;
+	else
+		val = 0;
 	for (i = 0; i < QMC_NB_TXBDS; i++) {
 		bd = chan->txbds + i;
 		qmc_write16(&bd->cbd_sc, val);
-- 
2.47.0



^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2025-05-09 10:57 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-05-09  7:48 [PATCH 1/2] soc: fsl: qmc: Only set completion interrupt when needed Christophe Leroy
2025-05-09  7:48 ` [PATCH 2/2] ASoC: fsl: fsl_qmc_audio: Only request completion on last channel Christophe Leroy
2025-05-09  8:45   ` Herve Codina
2025-05-09  9:13     ` Christophe Leroy
2025-05-09 10:12       ` Herve Codina
2025-05-09  9:15 ` [PATCH 1/2] soc: fsl: qmc: Only set completion interrupt when needed Herve Codina

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.