Browse Source

driver: uart: stm32: Clear buffer length only in UART TC event

The buffer_length != 0 is used to check if there is transfer ongoing
inside the uart_stm32_async_tx function. uart_stm32_dma_tx_cb clears
it to 0 when TX DMA is finished, but before the USART send all
the data from shift register.
buffer_length is also cleared in callback async_evt_tx_done,
which is called when USART finished sending all the bytes.
If the uart_stm32_async_tx would be called after
uart_stm32_async_tx, but before async_evt_tx_done there
could be race condition on buffer_length.

Signed-off-by: Adam BERLINGER <adam.berlinger@st.com>
pull/89751/head
Adam BERLINGER 2 months ago committed by Benjamin Cabé
parent
commit
ccf07d45b5
  1. 2
      drivers/serial/uart_stm32.c

2
drivers/serial/uart_stm32.c

@ -1532,8 +1532,6 @@ void uart_stm32_dma_tx_cb(const struct device *dma_dev, void *user_data, @@ -1532,8 +1532,6 @@ void uart_stm32_dma_tx_cb(const struct device *dma_dev, void *user_data,
stat.pending_length;
}
data->dma_tx.buffer_length = 0;
irq_unlock(key);
}

Loading…
Cancel
Save