Skip to content

Commit 4ad051d

Browse files
nordic-krchanangl
authored andcommitted
[nrf fromtree] drivers: serial: nrfx_uarte: Use of legacy shim on RISCV
Legacy shim takes less flash so it should be a first choice on cores with less code memory (like RISCV cores on nrf54h20). Adding new instances support to the legacy shim. Signed-off-by: Krzysztof Chruściński <[email protected]> (cherry picked from commit d07b13d)
1 parent 3be10b7 commit 4ad051d

File tree

3 files changed

+38
-37
lines changed

3 files changed

+38
-37
lines changed

drivers/serial/Kconfig.nrfx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ config UART_NRFX_UARTE
3131
config UART_NRFX_UARTE_LEGACY_SHIM
3232
bool "Legacy UARTE shim"
3333
depends on UART_NRFX_UARTE
34-
depends on !SOC_SERIES_NRF54LX && !SOC_SERIES_NRF54HX
34+
depends on !SOC_SERIES_NRF54LX
35+
depends on RISCV || !SOC_SERIES_NRF54HX
3536
# New shim takes more ROM. Until it is fixed use legacy shim.
3637
default y
3738

drivers/serial/Kconfig.nrfx_uart_instance

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ config UART_$(nrfx_uart_num)_NRF_HW_ASYNC
5454
depends on HAS_HW_NRF_UARTE$(nrfx_uart_num)
5555
depends on UART_ASYNC_API
5656
depends on UART_NRFX_UARTE_LEGACY_SHIM
57+
depends on HAS_HW_NRF_PPI || HAS_HW_NRF_DPPIC
5758
select NRFX_PPI if HAS_HW_NRF_PPI
5859
select NRFX_DPPI if HAS_HW_NRF_DPPIC
5960
help

drivers/serial/uart_nrfx_uarte.c

Lines changed: 35 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,12 @@ LOG_MODULE_REGISTER(uart_nrfx_uarte, CONFIG_UART_LOG_LEVEL);
2525
#include <zephyr/drivers/pinctrl.h>
2626

2727
/* Generalize PPI or DPPI channel management */
28-
#if defined(CONFIG_HAS_HW_NRF_PPI)
28+
#if defined(PPI_PRESENT)
2929
#include <nrfx_ppi.h>
3030
#define gppi_channel_t nrf_ppi_channel_t
3131
#define gppi_channel_alloc nrfx_ppi_channel_alloc
3232
#define gppi_channel_enable nrfx_ppi_channel_enable
33-
#elif defined(CONFIG_HAS_HW_NRF_DPPIC)
33+
#elif defined(DPPI_PRESENT)
3434
#include <nrfx_dppi.h>
3535
#define gppi_channel_t uint8_t
3636
#define gppi_channel_alloc nrfx_dppi_channel_alloc
@@ -39,39 +39,49 @@ LOG_MODULE_REGISTER(uart_nrfx_uarte, CONFIG_UART_LOG_LEVEL);
3939
#error "No PPI or DPPI"
4040
#endif
4141

42+
/* Execute macro f(x) for all instances. */
43+
#define UARTE_FOR_EACH_INSTANCE(f, sep, off_code) \
44+
NRFX_FOREACH_PRESENT(UARTE, f, sep, off_code, _)
4245

43-
#if (defined(CONFIG_HAS_HW_NRF_UARTE0) && \
44-
defined(CONFIG_UART_0_INTERRUPT_DRIVEN)) || \
45-
(defined(CONFIG_HAS_HW_NRF_UARTE1) && \
46-
defined(CONFIG_UART_1_INTERRUPT_DRIVEN)) || \
47-
(defined(CONFIG_HAS_HW_NRF_UARTE2) && \
48-
defined(CONFIG_UART_2_INTERRUPT_DRIVEN)) || \
49-
(defined(CONFIG_HAS_HW_NRF_UARTE3) && \
50-
defined(CONFIG_UART_3_INTERRUPT_DRIVEN))
46+
/* Determine if any instance is using interrupt driven API. */
47+
#define IS_INT_DRIVEN(unused, prefix, i, _) \
48+
(IS_ENABLED(CONFIG_HAS_HW_NRF_UARTE##prefix##i) && \
49+
IS_ENABLED(CONFIG_UART_##prefix##i##_INTERRUPT_DRIVEN))
50+
51+
#if UARTE_FOR_EACH_INSTANCE(IS_INT_DRIVEN, (||), (0))
5152
#define UARTE_INTERRUPT_DRIVEN 1
5253
#endif
5354

54-
#if (defined(CONFIG_HAS_HW_NRF_UARTE0) && !defined(CONFIG_UART_0_ASYNC)) || \
55-
(defined(CONFIG_HAS_HW_NRF_UARTE1) && !defined(CONFIG_UART_1_ASYNC)) || \
56-
(defined(CONFIG_HAS_HW_NRF_UARTE2) && !defined(CONFIG_UART_2_ASYNC)) || \
57-
(defined(CONFIG_HAS_HW_NRF_UARTE3) && !defined(CONFIG_UART_3_ASYNC))
55+
/* Determine if any instance is not using asynchronous API. */
56+
#define IS_NOT_ASYNC(unused, prefix, i, _) \
57+
(IS_ENABLED(CONFIG_HAS_HW_NRF_UARTE##prefix##i) && \
58+
!IS_ENABLED(CONFIG_UART_##prefix##i##_ASYNC))
59+
60+
#if UARTE_FOR_EACH_INSTANCE(IS_NOT_ASYNC, (||), (0))
5861
#define UARTE_ANY_NONE_ASYNC 1
5962
#endif
6063

61-
#if (defined(CONFIG_HAS_HW_NRF_UARTE0) && defined(CONFIG_UART_0_ASYNC)) || \
62-
(defined(CONFIG_HAS_HW_NRF_UARTE1) && defined(CONFIG_UART_1_ASYNC)) || \
63-
(defined(CONFIG_HAS_HW_NRF_UARTE2) && defined(CONFIG_UART_2_ASYNC)) || \
64-
(defined(CONFIG_HAS_HW_NRF_UARTE3) && defined(CONFIG_UART_3_ASYNC))
64+
/* Determine if any instance is using asynchronous API. */
65+
#define IS_ASYNC(unused, prefix, i, _) \
66+
(IS_ENABLED(CONFIG_HAS_HW_NRF_UARTE##prefix##i) && \
67+
IS_ENABLED(CONFIG_UART_##prefix##i##_ASYNC))
68+
69+
#if UARTE_FOR_EACH_INSTANCE(IS_ASYNC, (||), (0))
6570
#define UARTE_ANY_ASYNC 1
6671
#endif
6772

68-
#if defined(CONFIG_UART_0_NRF_HW_ASYNC) || defined(CONFIG_UART_1_NRF_HW_ASYNC) || \
69-
defined(CONFIG_UART_2_NRF_HW_ASYNC) || defined(CONFIG_UART_3_NRF_HW_ASYNC)
73+
/* Determine if any instance is using asynchronous API with HW byte counting. */
74+
#define IS_HW_ASYNC(unused, prefix, i, _) IS_ENABLED(CONFIG_UART_##prefix##i##_NRF_HW_ASYNC)
75+
76+
#if UARTE_FOR_EACH_INSTANCE(IS_HW_ASYNC, (||), (0))
7077
#define UARTE_HW_ASYNC 1
7178
#endif
7279

73-
#if defined(CONFIG_UART_0_ENHANCED_POLL_OUT) || defined(CONFIG_UART_1_ENHANCED_POLL_OUT) || \
74-
defined(CONFIG_UART_2_ENHANCED_POLL_OUT) || defined(CONFIG_UART_3_ENHANCED_POLL_OUT)
80+
/* Determine if any instance is using enhanced poll_out feature. */
81+
#define IS_ENHANCED_POLL_OUT(unused, prefix, i, _) \
82+
IS_ENABLED(CONFIG_UART_##prefix##i##_ENHANCED_POLL_OUT)
83+
84+
#if UARTE_FOR_EACH_INSTANCE(IS_ENHANCED_POLL_OUT, (||), (0))
7585
#define UARTE_ENHANCED_POLL_OUT 1
7686
#endif
7787

@@ -2074,18 +2084,7 @@ static int uarte_nrfx_pm_action(const struct device *dev,
20742084
DT_PHANDLE(UARTE(idx), memory_regions)))))), \
20752085
())
20762086

2077-
#ifdef CONFIG_HAS_HW_NRF_UARTE0
2078-
UART_NRF_UARTE_DEVICE(0);
2079-
#endif
2087+
#define COND_UART_NRF_UARTE_DEVICE(unused, prefix, i, _) \
2088+
IF_ENABLED(CONFIG_HAS_HW_NRF_UARTE##prefix##i, (UART_NRF_UARTE_DEVICE(prefix##i);))
20802089

2081-
#ifdef CONFIG_HAS_HW_NRF_UARTE1
2082-
UART_NRF_UARTE_DEVICE(1);
2083-
#endif
2084-
2085-
#ifdef CONFIG_HAS_HW_NRF_UARTE2
2086-
UART_NRF_UARTE_DEVICE(2);
2087-
#endif
2088-
2089-
#ifdef CONFIG_HAS_HW_NRF_UARTE3
2090-
UART_NRF_UARTE_DEVICE(3);
2091-
#endif
2090+
UARTE_FOR_EACH_INSTANCE(COND_UART_NRF_UARTE_DEVICE, (), ())

0 commit comments

Comments
 (0)