driver: uart: stm32: Disable UART DMA before shutdown

Use LL_USART_DisableDMAReq_RX to disable UART RX DMA requests.
This should be called before entering shutdown mode.

Force to use UART_STM32U5_ERRATA_DMAT_LOWPOWER
when POWEROFF is selected. This ensure the system to shut down
properly instead of hanging due to DMA staying active.

Signed-off-by: Khaoula Bidani <khaoula.bidani-ext@st.com>
Signed-off-by: Julien Racki <julien.racki-ext@st.com>
This commit is contained in:
Khaoula Bidani
2025-09-24 18:35:05 +02:00
committed by Dan Kalowsky
parent 0a878179f7
commit ba35b4d076
2 changed files with 5 additions and 1 deletions

View File

@@ -39,8 +39,8 @@ if UART_STM32U5_ERRATA_DMAT_AFFECTED
choice UART_STM32U5_ERRATA_DMAT
prompt "Workaround for DMAT errata on selected devices"
default UART_STM32U5_ERRATA_DMAT_LOWPOWER if PM
default UART_STM32U5_ERRATA_DMAT_NOCLEAR if !PM
default UART_STM32U5_ERRATA_DMAT_LOWPOWER
help
Handles erratum "USART does not generate DMA requests after
setting/clearing DMAT bit" as described in the errata sheets:
@@ -59,6 +59,7 @@ config UART_STM32U5_ERRATA_DMAT_LOWPOWER
config UART_STM32U5_ERRATA_DMAT_NOCLEAR
bool "Do not clear DMAT"
depends on !POWEROFF # DMAT must be clear to enter LL_PWR_SHUTDOWN_MODE
help
This option keeps DMAT bit set. This may cause additional power
consumption in STOP low-power modes.

View File

@@ -1508,8 +1508,11 @@ static inline void uart_stm32_dma_rx_enable(const struct device *dev)
static inline void uart_stm32_dma_rx_disable(const struct device *dev)
{
const struct uart_stm32_config *config = dev->config;
struct uart_stm32_data *data = dev->data;
LL_USART_DisableDMAReq_RX(config->usart);
data->dma_rx.enabled = false;
}