stm32-usart.c (db89728abad5ab6b8f30349142897bd55f1f5b00) stm32-usart.c (00bc5e8fc91743753a3ac9de1e9567e844ae3967)
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Copyright (C) Maxime Coquelin 2015
4 * Copyright (C) STMicroelectronics SA 2017
5 * Authors: Maxime Coquelin <mcoquelin.stm32@gmail.com>
6 * Gerald Baeza <gerald.baeza@foss.st.com>
7 * Erwan Le Ray <erwan.leray@foss.st.com>
8 *

--- 496 unchanged lines hidden (view full) ---

505 */
506 return stm32_port->tx_dma_busy;
507}
508
509static void stm32_usart_tx_dma_complete(void *arg)
510{
511 struct uart_port *port = arg;
512 struct stm32_port *stm32port = to_stm32_port(port);
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Copyright (C) Maxime Coquelin 2015
4 * Copyright (C) STMicroelectronics SA 2017
5 * Authors: Maxime Coquelin <mcoquelin.stm32@gmail.com>
6 * Gerald Baeza <gerald.baeza@foss.st.com>
7 * Erwan Le Ray <erwan.leray@foss.st.com>
8 *

--- 496 unchanged lines hidden (view full) ---

505 */
506 return stm32_port->tx_dma_busy;
507}
508
509static void stm32_usart_tx_dma_complete(void *arg)
510{
511 struct uart_port *port = arg;
512 struct stm32_port *stm32port = to_stm32_port(port);
513 const struct stm32_usart_offsets *ofs = &stm32port->info->ofs;
514 unsigned long flags;
515
513 unsigned long flags;
514
516 stm32_usart_clr_bits(port, ofs->cr3, USART_CR3_DMAT);
517 stm32_usart_tx_dma_terminate(stm32port);
518
519 /* Let's see if we have pending data to send */
520 spin_lock_irqsave(&port->lock, flags);
521 stm32_usart_transmit_chars(port);
522 spin_unlock_irqrestore(&port->lock, flags);
523}
524

--- 72 unchanged lines hidden (view full) ---

597 stm32_usart_tx_interrupt_disable(port);
598 else
599 stm32_usart_tx_interrupt_enable(port);
600}
601
602static void stm32_usart_transmit_chars_dma(struct uart_port *port)
603{
604 struct stm32_port *stm32port = to_stm32_port(port);
515 stm32_usart_tx_dma_terminate(stm32port);
516
517 /* Let's see if we have pending data to send */
518 spin_lock_irqsave(&port->lock, flags);
519 stm32_usart_transmit_chars(port);
520 spin_unlock_irqrestore(&port->lock, flags);
521}
522

--- 72 unchanged lines hidden (view full) ---

595 stm32_usart_tx_interrupt_disable(port);
596 else
597 stm32_usart_tx_interrupt_enable(port);
598}
599
600static void stm32_usart_transmit_chars_dma(struct uart_port *port)
601{
602 struct stm32_port *stm32port = to_stm32_port(port);
605 const struct stm32_usart_offsets *ofs = &stm32port->info->ofs;
606 struct circ_buf *xmit = &port->state->xmit;
607 struct dma_async_tx_descriptor *desc = NULL;
608 unsigned int count;
609 int ret;
610
611 if (stm32_usart_tx_dma_started(stm32port)) {
612 if (dmaengine_tx_status(stm32port->tx_ch,
613 stm32port->tx_ch->cookie,

--- 48 unchanged lines hidden (view full) ---

662 /* Push current DMA TX transaction in the pending queue */
663 /* DMA no yet started, safe to free resources */
664 if (dma_submit_error(dmaengine_submit(desc)))
665 goto dma_err;
666
667 /* Issue pending DMA TX requests */
668 dma_async_issue_pending(stm32port->tx_ch);
669
603 struct circ_buf *xmit = &port->state->xmit;
604 struct dma_async_tx_descriptor *desc = NULL;
605 unsigned int count;
606 int ret;
607
608 if (stm32_usart_tx_dma_started(stm32port)) {
609 if (dmaengine_tx_status(stm32port->tx_ch,
610 stm32port->tx_ch->cookie,

--- 48 unchanged lines hidden (view full) ---

659 /* Push current DMA TX transaction in the pending queue */
660 /* DMA no yet started, safe to free resources */
661 if (dma_submit_error(dmaengine_submit(desc)))
662 goto dma_err;
663
664 /* Issue pending DMA TX requests */
665 dma_async_issue_pending(stm32port->tx_ch);
666
670 stm32_usart_set_bits(port, ofs->cr3, USART_CR3_DMAT);
671
672 uart_xmit_advance(port, count);
673
674 return;
675
676dma_err:
677 dev_err(port->dev, "DMA failed with error code: %d\n", ret);
678 stm32_usart_tx_dma_terminate(stm32port);
679

--- 585 unchanged lines hidden (view full) ---

1265 * This also enables break reception when using DMA.
1266 */
1267 cr1 |= USART_CR1_PEIE;
1268 cr3 |= USART_CR3_EIE;
1269 cr3 |= USART_CR3_DMAR;
1270 cr3 |= USART_CR3_DDRE;
1271 }
1272
667 uart_xmit_advance(port, count);
668
669 return;
670
671dma_err:
672 dev_err(port->dev, "DMA failed with error code: %d\n", ret);
673 stm32_usart_tx_dma_terminate(stm32port);
674

--- 585 unchanged lines hidden (view full) ---

1260 * This also enables break reception when using DMA.
1261 */
1262 cr1 |= USART_CR1_PEIE;
1263 cr3 |= USART_CR3_EIE;
1264 cr3 |= USART_CR3_DMAR;
1265 cr3 |= USART_CR3_DDRE;
1266 }
1267
1268 if (stm32_port->tx_ch)
1269 cr3 |= USART_CR3_DMAT;
1270
1273 if (rs485conf->flags & SER_RS485_ENABLED) {
1274 stm32_usart_config_reg_rs485(&cr1, &cr3,
1275 rs485conf->delay_rts_before_send,
1276 rs485conf->delay_rts_after_send,
1277 baud);
1278 if (rs485conf->flags & SER_RS485_RTS_ON_SEND) {
1279 cr3 &= ~USART_CR3_DEP;
1280 rs485conf->flags &= ~SER_RS485_RTS_AFTER_SEND;

--- 846 unchanged lines hidden ---
1271 if (rs485conf->flags & SER_RS485_ENABLED) {
1272 stm32_usart_config_reg_rs485(&cr1, &cr3,
1273 rs485conf->delay_rts_before_send,
1274 rs485conf->delay_rts_after_send,
1275 baud);
1276 if (rs485conf->flags & SER_RS485_RTS_ON_SEND) {
1277 cr3 &= ~USART_CR3_DEP;
1278 rs485conf->flags &= ~SER_RS485_RTS_AFTER_SEND;

--- 846 unchanged lines hidden ---