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:
committed by
Dan Kalowsky
parent
0a878179f7
commit
ba35b4d076
@@ -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.
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user