Linux Serial subsystem development
 help / color / mirror / Atom feed
* [PATCH 1/1] tty: serial: use dmaengine_desc_set_callback()
@ 2026-11-02 17:54 Frank.Li
  2026-11-02 18:10 ` sashiko-bot
  2026-11-03 11:39 ` Nicolai Buchwitz
  0 siblings, 2 replies; 3+ messages in thread
From: Frank.Li @ 2026-11-02 17:54 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Jiri Slaby, Matthias Brugger,
	AngeloGioacchino Del Regno, Russell King, Richard Genoud,
	Nicolas Ferre, Alexandre Belloni, Claudiu Beznea, Frank Li,
	Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
	Krzysztof Kozlowski, Peter Griffin, Alim Akhtar, Laxman Dewangan,
	Thierry Reding, Jonathan Hunter, Orson Zhai, Baolin Wang,
	Chunyan Zhang, Maxime Coquelin, Alexandre Torgue, Cunhao Lu,
	Raul E Rangel, Yenchia Chen, Zhiyong Tao, Carlo Caione,
	Moteen Shah, Kendall Willis, Andy Shevchenko, Kartik Rajput,
	Fan Wu, Nicolai Buchwitz, Karl Mehltretter, Stefan Dösinger,
	Shitalkumar Gandhi, Peng Fan, Sherry Sun, John Ogness, Pan Chuang,
	Petr Mladek, Robin Gong, Konrad Dybcio, Stephan Gerhold,
	Zhaoyang Yu, Nikola Z. Ivanov, Haoxiang Li,
	Mike Rapoport (Microsoft), Biju Das, Geert Uytterhoeven,
	Myeonghun Pak, Wenhua Lin, Cixi Geng,
	open list:TTY LAYER AND SERIAL DRIVERS,
	open list:TTY LAYER AND SERIAL DRIVERS,
	moderated list:ARM/Mediatek SoC support,
	moderated list:ARM/Mediatek SoC support,
	open list:ARM/FREESCALE IMX / MXC / LAYERSCAPE ARM ARCHIT...,
	open list:ARM/QUALCOMM MAILING LIST,
	open list:ARM/SAMSUNG S3C, S5P AND EXYNOS ARM ARCHITECTURES,
	open list:TEGRA ARCHITECTURE SUPPORT,
	moderated list:ARM/STM32 ARCHITECTURE
  Cc: imx, vkoul

From: Frank Li <Frank.Li@nxp.com>

Replace open-coded assignments to callback and callback_param fields
of struct dma_async_tx_descriptor with calls to the
dmaengine_desc_set_callback() helper across serial drivers.

No functional change intended. Prepare to make struct
dma_async_tx_descriptor private to the DMA engine.

Signed-off-by: Frank Li <Frank.Li@nxp.com>
---
 drivers/tty/serial/8250/8250_dma.c  | 6 ++----
 drivers/tty/serial/8250/8250_mtk.c  | 3 +--
 drivers/tty/serial/8250/8250_omap.c | 6 ++----
 drivers/tty/serial/amba-pl011.c     | 6 ++----
 drivers/tty/serial/atmel_serial.c   | 6 ++----
 drivers/tty/serial/fsl_lpuart.c     | 6 ++----
 drivers/tty/serial/imx.c            | 6 ++----
 drivers/tty/serial/msm_serial.c     | 6 ++----
 drivers/tty/serial/mxs-auart.c      | 6 ++----
 drivers/tty/serial/pch_uart.c       | 6 ++----
 drivers/tty/serial/samsung_tty.c    | 6 ++----
 drivers/tty/serial/serial-tegra.c   | 6 ++----
 drivers/tty/serial/sh-sci.c         | 9 +++------
 drivers/tty/serial/sprd_serial.c    | 3 +--
 drivers/tty/serial/stm32-usart.c    | 6 ++----
 15 files changed, 29 insertions(+), 58 deletions(-)

diff --git a/drivers/tty/serial/8250/8250_dma.c b/drivers/tty/serial/8250/8250_dma.c
index 1da605cc86011..7d42afe1ce33b 100644
--- a/drivers/tty/serial/8250/8250_dma.c
+++ b/drivers/tty/serial/8250/8250_dma.c
@@ -131,8 +131,7 @@ int serial8250_tx_dma(struct uart_8250_port *p)
 	}
 
 	dma->tx_running = 1;
-	desc->callback = __dma_tx_complete;
-	desc->callback_param = p;
+	dmaengine_desc_set_callback(desc, __dma_tx_complete, NULL, p);
 
 	dma->tx_cookie = dmaengine_submit(desc);
 
@@ -197,8 +196,7 @@ int serial8250_rx_dma(struct uart_8250_port *p)
 		return -EBUSY;
 
 	dma->rx_running = 1;
-	desc->callback = dma_rx_complete;
-	desc->callback_param = p;
+	dmaengine_desc_set_callback(desc, dma_rx_complete, NULL, p);
 
 	dma->rx_cookie = dmaengine_submit(desc);
 
diff --git a/drivers/tty/serial/8250/8250_mtk.c b/drivers/tty/serial/8250/8250_mtk.c
index d1fb917b762a1..442856b3fe6d9 100644
--- a/drivers/tty/serial/8250/8250_mtk.c
+++ b/drivers/tty/serial/8250/8250_mtk.c
@@ -147,8 +147,7 @@ static void mtk8250_rx_dma(struct uart_8250_port *up)
 		return;
 	}
 
-	desc->callback = mtk8250_dma_rx_complete;
-	desc->callback_param = up;
+	dmaengine_desc_set_callback(desc, mtk8250_dma_rx_complete, NULL, up);
 
 	dma->rx_cookie = dmaengine_submit(desc);
 
diff --git a/drivers/tty/serial/8250/8250_omap.c b/drivers/tty/serial/8250/8250_omap.c
index 29a203ed93fd8..9bdc0f00dec5a 100644
--- a/drivers/tty/serial/8250/8250_omap.c
+++ b/drivers/tty/serial/8250/8250_omap.c
@@ -1048,8 +1048,7 @@ static int omap_8250_rx_dma(struct uart_8250_port *p)
 	}
 
 	dma->rx_running = 1;
-	desc->callback = __dma_rx_complete;
-	desc->callback_param = p;
+	dmaengine_desc_set_callback(desc, __dma_rx_complete, NULL, p);
 
 	dma->rx_cookie = dmaengine_submit(desc);
 
@@ -1192,8 +1191,7 @@ static int omap_8250_tx_dma(struct uart_8250_port *p)
 	dma->tx_size = sg_dma_len(&sg);
 	dma->tx_running = 1;
 
-	desc->callback = omap_8250_dma_tx_complete;
-	desc->callback_param = p;
+	dmaengine_desc_set_callback(desc, omap_8250_dma_tx_complete, NULL, p);
 
 	dma->tx_cookie = dmaengine_submit(desc);
 
diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c
index e6f652905ca6f..e7373cd11b621 100644
--- a/drivers/tty/serial/amba-pl011.c
+++ b/drivers/tty/serial/amba-pl011.c
@@ -715,8 +715,7 @@ static int pl011_dma_tx_refill(struct uart_amba_port *uap)
 	}
 
 	/* Some data to go along to the callback */
-	desc->callback = pl011_dma_tx_callback;
-	desc->callback_param = uap;
+	dmaengine_desc_set_callback(desc, pl011_dma_tx_callback, NULL, uap);
 
 	/* All errors should happen at prepare time */
 	dmaengine_submit(desc);
@@ -906,8 +905,7 @@ static int pl011_dma_rx_trigger_dma(struct uart_amba_port *uap)
 	}
 
 	/* Some data to go along to the callback */
-	desc->callback = pl011_dma_rx_callback;
-	desc->callback_param = uap;
+	dmaengine_desc_set_callback(desc, pl011_dma_rx_callback, NULL, uap);
 	dmarx->cookie = dmaengine_submit(desc);
 	dma_async_issue_pending(rxchan);
 
diff --git a/drivers/tty/serial/atmel_serial.c b/drivers/tty/serial/atmel_serial.c
index c3880259e3bce..886280bc8464a 100644
--- a/drivers/tty/serial/atmel_serial.c
+++ b/drivers/tty/serial/atmel_serial.c
@@ -993,8 +993,7 @@ static void atmel_tx_dma(struct uart_port *port)
 					   UART_XMIT_SIZE, DMA_TO_DEVICE);
 
 		atmel_port->desc_tx = desc;
-		desc->callback = atmel_complete_tx_dma;
-		desc->callback_param = atmel_port;
+		dmaengine_desc_set_callback(desc, atmel_complete_tx_dma, NULL, atmel_port);
 		atmel_port->cookie_tx = dmaengine_submit(desc);
 		if (dma_submit_error(atmel_port->cookie_tx)) {
 			dev_err(port->dev, "dma_submit_error %d\n",
@@ -1242,8 +1241,7 @@ static int atmel_prepare_rx_dma(struct uart_port *port)
 		dev_err(port->dev, "Preparing DMA cyclic failed\n");
 		goto chan_err;
 	}
-	desc->callback = atmel_complete_rx_dma;
-	desc->callback_param = port;
+	dmaengine_desc_set_callback(desc, atmel_complete_rx_dma, NULL, port);
 	atmel_port->desc_rx = desc;
 	atmel_port->cookie_rx = dmaengine_submit(desc);
 	if (dma_submit_error(atmel_port->cookie_rx)) {
diff --git a/drivers/tty/serial/fsl_lpuart.c b/drivers/tty/serial/fsl_lpuart.c
index c8575c9652035..3213519776b35 100644
--- a/drivers/tty/serial/fsl_lpuart.c
+++ b/drivers/tty/serial/fsl_lpuart.c
@@ -508,8 +508,7 @@ static void lpuart_dma_tx(struct lpuart_port *sport)
 		return;
 	}
 
-	sport->dma_tx_desc->callback = lpuart_dma_tx_complete;
-	sport->dma_tx_desc->callback_param = sport;
+	dmaengine_desc_set_callback(sport->dma_tx_desc, lpuart_dma_tx_complete, NULL, sport);
 	sport->dma_tx_in_progress = true;
 	sport->dma_tx_cookie = dmaengine_submit(sport->dma_tx_desc);
 	dma_async_issue_pending(chan);
@@ -1407,8 +1406,7 @@ static inline int lpuart_start_rx_dma(struct lpuart_port *sport)
 		goto err_unmap_sg;
 	}
 
-	sport->dma_rx_desc->callback = lpuart_dma_rx_complete;
-	sport->dma_rx_desc->callback_param = sport;
+	dmaengine_desc_set_callback(sport->dma_rx_desc, lpuart_dma_rx_complete, NULL, sport);
 	sport->dma_rx_cookie = dmaengine_submit(sport->dma_rx_desc);
 	dma_async_issue_pending(chan);
 
diff --git a/drivers/tty/serial/imx.c b/drivers/tty/serial/imx.c
index 986fefb45c632..c83da7c48b675 100644
--- a/drivers/tty/serial/imx.c
+++ b/drivers/tty/serial/imx.c
@@ -655,8 +655,7 @@ static void imx_uart_dma_tx(struct imx_port *sport)
 		dev_err(dev, "We cannot prepare for the TX slave dma!\n");
 		return;
 	}
-	desc->callback = imx_uart_dma_tx_callback;
-	desc->callback_param = sport;
+	dmaengine_desc_set_callback(desc, imx_uart_dma_tx_callback, NULL, sport);
 
 	dev_dbg(dev, "TX: prepare to send %u bytes by DMA.\n", sport->tx_bytes);
 
@@ -1294,8 +1293,7 @@ static int imx_uart_start_rx_dma(struct imx_port *sport)
 		dev_err(dev, "We cannot prepare for the RX slave dma!\n");
 		return -EINVAL;
 	}
-	desc->callback = imx_uart_dma_rx_callback;
-	desc->callback_param = sport;
+	dmaengine_desc_set_callback(desc, imx_uart_dma_rx_callback, NULL, sport);
 
 	dev_dbg(dev, "RX: prepare for the DMA.\n");
 	sport->dma_is_rxing = 1;
diff --git a/drivers/tty/serial/msm_serial.c b/drivers/tty/serial/msm_serial.c
index bfa44b01c3e97..62c7872f9ffbd 100644
--- a/drivers/tty/serial/msm_serial.c
+++ b/drivers/tty/serial/msm_serial.c
@@ -521,8 +521,7 @@ static int msm_handle_tx_dma(struct msm_port *msm_port, unsigned int count)
 		goto unmap;
 	}
 
-	dma->desc->callback = msm_complete_tx_dma;
-	dma->desc->callback_param = msm_port;
+	dmaengine_desc_set_callback(dma->desc, msm_complete_tx_dma, NULL, msm_port);
 
 	dma->cookie = dmaengine_submit(dma->desc);
 	ret = dma_submit_error(dma->cookie);
@@ -642,8 +641,7 @@ static void msm_start_rx_dma(struct msm_port *msm_port)
 	if (!dma->desc)
 		goto unmap;
 
-	dma->desc->callback = msm_complete_rx_dma;
-	dma->desc->callback_param = msm_port;
+	dmaengine_desc_set_callback(dma->desc, msm_complete_rx_dma, NULL, msm_port);
 
 	dma->cookie = dmaengine_submit(dma->desc);
 	ret = dma_submit_error(dma->cookie);
diff --git a/drivers/tty/serial/mxs-auart.c b/drivers/tty/serial/mxs-auart.c
index 697318dbb146b..0b39dd2d653ee 100644
--- a/drivers/tty/serial/mxs-auart.c
+++ b/drivers/tty/serial/mxs-auart.c
@@ -559,8 +559,7 @@ static int mxs_auart_dma_tx(struct mxs_auart_port *s, int size)
 	}
 
 	/* [3] : submit the DMA */
-	desc->callback = dma_tx_callback;
-	desc->callback_param = s;
+	dmaengine_desc_set_callback(desc, dma_tx_callback, NULL, s);
 	dmaengine_submit(desc);
 	dma_async_issue_pending(channel);
 	return 0;
@@ -858,8 +857,7 @@ static int mxs_auart_dma_prep_rx(struct mxs_auart_port *s)
 	}
 
 	/* [3] : submit the DMA, but do not issue it. */
-	desc->callback = dma_rx_callback;
-	desc->callback_param = s;
+	dmaengine_desc_set_callback(desc, dma_rx_callback, NULL, s);
 	dmaengine_submit(desc);
 	dma_async_issue_pending(channel);
 	return 0;
diff --git a/drivers/tty/serial/pch_uart.c b/drivers/tty/serial/pch_uart.c
index 9505d255f09c5..8f3ffe39a5857 100644
--- a/drivers/tty/serial/pch_uart.c
+++ b/drivers/tty/serial/pch_uart.c
@@ -809,8 +809,7 @@ static int dma_handle_rx(struct eg20t_port *priv)
 		return 0;
 
 	priv->desc_rx = desc;
-	desc->callback = pch_dma_rx_complete;
-	desc->callback_param = priv;
+	dmaengine_desc_set_callback(desc, pch_dma_rx_complete, NULL, priv);
 	dmaengine_submit(desc);
 	dma_async_issue_pending(priv->chan_rx);
 
@@ -968,8 +967,7 @@ static unsigned int dma_handle_tx(struct eg20t_port *priv)
 	}
 	dma_sync_sg_for_device(port->dev, priv->sg_tx_p, num, DMA_TO_DEVICE);
 	priv->desc_tx = desc;
-	desc->callback = pch_dma_tx_complete;
-	desc->callback_param = priv;
+	dmaengine_desc_set_callback(desc, pch_dma_tx_complete, NULL, priv);
 
 	dmaengine_submit(desc);
 
diff --git a/drivers/tty/serial/samsung_tty.c b/drivers/tty/serial/samsung_tty.c
index 640f85e2d636b..3f82a83998e1c 100644
--- a/drivers/tty/serial/samsung_tty.c
+++ b/drivers/tty/serial/samsung_tty.c
@@ -447,8 +447,7 @@ static int s3c24xx_serial_start_tx_dma(struct s3c24xx_uart_port *ourport,
 		return -EIO;
 	}
 
-	dma->tx_desc->callback = s3c24xx_serial_tx_dma_complete;
-	dma->tx_desc->callback_param = ourport;
+	dmaengine_desc_set_callback(dma->tx_desc, s3c24xx_serial_tx_dma_complete, NULL, ourport);
 	dma->tx_bytes_requested = dma->tx_size;
 
 	ourport->tx_in_progress = S3C24XX_TX_DMA;
@@ -642,8 +641,7 @@ static void s3c64xx_start_rx_dma(struct s3c24xx_uart_port *ourport)
 		return;
 	}
 
-	dma->rx_desc->callback = s3c24xx_serial_rx_dma_complete;
-	dma->rx_desc->callback_param = ourport;
+	dmaengine_desc_set_callback(dma->rx_desc, s3c24xx_serial_rx_dma_complete, NULL, ourport);
 	dma->rx_bytes_requested = dma->rx_size;
 
 	dma->rx_cookie = dmaengine_submit(dma->rx_desc);
diff --git a/drivers/tty/serial/serial-tegra.c b/drivers/tty/serial/serial-tegra.c
index b0fc4ae3686f8..05ba808bdbaef 100644
--- a/drivers/tty/serial/serial-tegra.c
+++ b/drivers/tty/serial/serial-tegra.c
@@ -568,8 +568,7 @@ static int tegra_uart_start_tx_dma(struct tegra_uart_port *tup,
 		return -EIO;
 	}
 
-	tup->tx_dma_desc->callback = tegra_uart_tx_dma_complete;
-	tup->tx_dma_desc->callback_param = tup;
+	dmaengine_desc_set_callback(tup->tx_dma_desc, tegra_uart_tx_dma_complete, NULL, tup);
 	tup->tx_in_progress = TEGRA_UART_TX_DMA;
 	tup->tx_bytes_requested = tup->tx_bytes;
 	tup->tx_cookie = dmaengine_submit(tup->tx_dma_desc);
@@ -817,8 +816,7 @@ static int tegra_uart_start_rx_dma(struct tegra_uart_port *tup)
 	}
 
 	tup->rx_dma_active = true;
-	tup->rx_dma_desc->callback = tegra_uart_rx_dma_complete;
-	tup->rx_dma_desc->callback_param = tup;
+	dmaengine_desc_set_callback(tup->rx_dma_desc, tegra_uart_rx_dma_complete, NULL, tup);
 	tup->rx_bytes_requested = count;
 	tup->rx_cookie = dmaengine_submit(tup->rx_dma_desc);
 	dma_async_issue_pending(tup->rx_dma_chan);
diff --git a/drivers/tty/serial/sh-sci.c b/drivers/tty/serial/sh-sci.c
index bd58bbfa65aa7..f7b4d35b2d5bb 100644
--- a/drivers/tty/serial/sh-sci.c
+++ b/drivers/tty/serial/sh-sci.c
@@ -1556,8 +1556,7 @@ static void sci_dma_rx_complete(void *arg)
 	if (!desc)
 		goto fail;
 
-	desc->callback = sci_dma_rx_complete;
-	desc->callback_param = s;
+	dmaengine_desc_set_callback(desc, sci_dma_rx_complete, NULL, s);
 	s->cookie_rx[active] = dmaengine_submit(desc);
 	if (dma_submit_error(s->cookie_rx[active]))
 		goto fail;
@@ -1613,8 +1612,7 @@ static int sci_dma_rx_submit(struct sci_port *s, bool port_lock_held)
 		if (!desc)
 			goto fail;
 
-		desc->callback = sci_dma_rx_complete;
-		desc->callback_param = s;
+		dmaengine_desc_set_callback(desc, sci_dma_rx_complete, NULL, s);
 		s->cookie_rx[i] = dmaengine_submit(desc);
 		if (dma_submit_error(s->cookie_rx[i]))
 			goto fail;
@@ -1679,8 +1677,7 @@ static void sci_dma_tx_work_fn(struct work_struct *work)
 	dma_sync_single_for_device(dmaengine_get_dma_device(chan), buf, s->tx_dma_len,
 				   DMA_TO_DEVICE);
 
-	desc->callback = sci_dma_tx_complete;
-	desc->callback_param = s;
+	dmaengine_desc_set_callback(desc, sci_dma_tx_complete, NULL, s);
 	s->cookie_tx = dmaengine_submit(desc);
 	if (dma_submit_error(s->cookie_tx)) {
 		uart_port_unlock_irq(port);
diff --git a/drivers/tty/serial/sprd_serial.c b/drivers/tty/serial/sprd_serial.c
index 3fdf5939a62c1..3801b0c03482f 100644
--- a/drivers/tty/serial/sprd_serial.c
+++ b/drivers/tty/serial/sprd_serial.c
@@ -303,8 +303,7 @@ static int sprd_uart_dma_submit(struct uart_port *port,
 	if (!dma_des)
 		return -ENODEV;
 
-	dma_des->callback = callback;
-	dma_des->callback_param = port;
+	dmaengine_desc_set_callback(dma_des, callback, NULL, port);
 
 	ud->cookie = dmaengine_submit(dma_des);
 	if (dma_submit_error(ud->cookie))
diff --git a/drivers/tty/serial/stm32-usart.c b/drivers/tty/serial/stm32-usart.c
index ad06b760cfca7..a27b8797ad953 100644
--- a/drivers/tty/serial/stm32-usart.c
+++ b/drivers/tty/serial/stm32-usart.c
@@ -585,8 +585,7 @@ static int stm32_usart_rx_dma_start_or_resume(struct uart_port *port)
 		return -ENODEV;
 	}
 
-	desc->callback = stm32_usart_rx_dma_complete;
-	desc->callback_param = port;
+	dmaengine_desc_set_callback(desc, stm32_usart_rx_dma_complete, NULL, port);
 
 	/* Push current DMA transaction in the pending queue */
 	ret = dma_submit_error(dmaengine_submit(desc));
@@ -753,8 +752,7 @@ static void stm32_usart_transmit_chars_dma(struct uart_port *port)
 	 */
 	stm32port->tx_dma_busy = true;
 
-	desc->callback = stm32_usart_tx_dma_complete;
-	desc->callback_param = port;
+	dmaengine_desc_set_callback(desc, stm32_usart_tx_dma_complete, NULL, port);
 
 	/* Push current DMA TX transaction in the pending queue */
 	/* DMA no yet started, safe to free resources */
-- 
2.43.0


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

end of thread, other threads:[~2026-11-03 11:39 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-11-02 17:54 [PATCH 1/1] tty: serial: use dmaengine_desc_set_callback() Frank.Li
2026-11-02 18:10 ` sashiko-bot
2026-11-03 11:39 ` Nicolai Buchwitz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox