From ddb032bce21b0da838cfcb97bac454ac77d10b81 Mon Sep 17 00:00:00 2001 From: Emilio Benavente Date: Wed, 4 Sep 2024 15:24:32 +0000 Subject: [PATCH] tests: drivers: uart_async_api: fix userspace fault Updated driver to add missing configuration during init while using async APIs. Updated overlay and conf files for mimxrt1064 to run outside of usersapce mode to avoid inaccessible memory regions when using nocache. --- drivers/serial/uart_mcux_lpuart.c | 17 +++++++++++++++++ .../uart_async_api/boards/mimxrt1064_evk.conf | 2 ++ .../boards/mimxrt1064_evk.overlay | 6 ------ 3 files changed, 19 insertions(+), 6 deletions(-) create mode 100644 tests/drivers/uart/uart_async_api/boards/mimxrt1064_evk.conf diff --git a/drivers/serial/uart_mcux_lpuart.c b/drivers/serial/uart_mcux_lpuart.c index e4f752831deae50..7c7516c16f6d868 100644 --- a/drivers/serial/uart_mcux_lpuart.c +++ b/drivers/serial/uart_mcux_lpuart.c @@ -1090,6 +1090,23 @@ static int mcux_lpuart_configure_init(const struct device *dev, const struct uar return ret; } +#ifdef CONFIG_UART_ASYNC_API + uart_config.rxIdleType = kLPUART_IdleTypeStopBit; + uart_config.rxIdleConfig = kLPUART_IdleCharacter1; + data->async.next_rx_buffer = NULL; + data->async.next_rx_buffer_len = 0; + data->async.uart_dev = dev; + k_work_init_delayable(&data->async.rx_dma_params.timeout_work, + mcux_lpuart_async_rx_timeout); + k_work_init_delayable(&data->async.tx_dma_params.timeout_work, + mcux_lpuart_async_tx_timeout); + + /* Disable the UART Receiver until the async API provides a buffer to + * to receive into with rx_enable + */ + uart_config.enableRx = false; +#endif + LPUART_Init(config->base, &uart_config, clock_freq); if (cfg->flow_ctrl == UART_CFG_FLOW_CTRL_RS485) { diff --git a/tests/drivers/uart/uart_async_api/boards/mimxrt1064_evk.conf b/tests/drivers/uart/uart_async_api/boards/mimxrt1064_evk.conf new file mode 100644 index 000000000000000..5f2a8070c8948a5 --- /dev/null +++ b/tests/drivers/uart/uart_async_api/boards/mimxrt1064_evk.conf @@ -0,0 +1,2 @@ +# Userspace is unable to access the nocache region. +CONFIG_USERSPACE=n diff --git a/tests/drivers/uart/uart_async_api/boards/mimxrt1064_evk.overlay b/tests/drivers/uart/uart_async_api/boards/mimxrt1064_evk.overlay index 1a0c35e198aa765..22ecfdfa712aea9 100644 --- a/tests/drivers/uart/uart_async_api/boards/mimxrt1064_evk.overlay +++ b/tests/drivers/uart/uart_async_api/boards/mimxrt1064_evk.overlay @@ -1,11 +1,5 @@ /* SPDX-License-Identifier: Apache-2.0 */ -/ { - chosen { - zephyr,sram = &dtcm; - }; -}; - dut: &lpuart3 { status = "okay"; current-speed = <115200>;