Skip to content

Commit 8f47c9f

Browse files
committed
[nrf fromtree] tests: drivers: uart: async_api: Rework for multi instance
Rework the test to be able to run on multiple instances. Signed-off-by: Krzysztof Chruściński <[email protected]> (cherry picked from commit d2b69a4)
1 parent d016abe commit 8f47c9f

File tree

1 file changed

+73
-33
lines changed

1 file changed

+73
-33
lines changed

tests/drivers/uart/uart_async_api/src/test_uart_async.c

Lines changed: 73 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -25,39 +25,49 @@ K_SEM_DEFINE(rx_buf_released, 0, 1);
2525
K_SEM_DEFINE(rx_disabled, 0, 1);
2626

2727
static ZTEST_BMEM volatile bool failed_in_isr;
28-
static ZTEST_BMEM const struct device *const uart_dev =
29-
DEVICE_DT_GET(UART_NODE);
28+
29+
struct dut_data {
30+
const struct device *dev;
31+
const char *name;
32+
};
33+
34+
static ZTEST_DMEM struct dut_data duts[] = {
35+
{
36+
.dev = DEVICE_DT_GET(UART_NODE),
37+
.name = DT_NODE_FULL_NAME(UART_NODE),
38+
},
39+
/* More instances can be added here. */
40+
};
41+
42+
static ZTEST_BMEM const struct device *uart_dev;
43+
static ZTEST_BMEM const char *uart_name;
3044

3145
static void read_abort_timeout(struct k_timer *timer);
3246
static K_TIMER_DEFINE(read_abort_timer, read_abort_timeout, NULL);
3347

3448

35-
static void init_test(void)
36-
{
37-
__ASSERT_NO_MSG(device_is_ready(uart_dev));
38-
uart_rx_disable(uart_dev);
39-
uart_tx_abort(uart_dev);
40-
k_sem_reset(&tx_done);
41-
k_sem_reset(&tx_aborted);
42-
k_sem_reset(&rx_rdy);
43-
k_sem_reset(&rx_buf_released);
44-
k_sem_reset(&rx_disabled);
45-
}
46-
4749
#ifdef CONFIG_USERSPACE
4850
static void set_permissions(void)
4951
{
5052
k_thread_access_grant(k_current_get(), &tx_done, &tx_aborted,
5153
&rx_rdy, &rx_buf_coherency, &rx_buf_released,
5254
&rx_disabled, uart_dev, &read_abort_timer);
55+
56+
for (size_t i = 0; i < ARRAY_SIZE(duts); i++) {
57+
k_thread_access_grant(k_current_get(), duts[i].dev);
58+
}
5359
}
5460
#endif
5561

56-
static void uart_async_test_init(void)
62+
static void uart_async_test_init(int idx)
5763
{
5864
static bool initialized;
5965

66+
uart_dev = duts[idx].dev;
67+
uart_name = duts[idx].name;
68+
6069
__ASSERT_NO_MSG(device_is_ready(uart_dev));
70+
TC_PRINT("UART instance:%s\n", uart_name);
6171
uart_rx_disable(uart_dev);
6272
uart_tx_abort(uart_dev);
6373
k_sem_reset(&tx_done);
@@ -79,7 +89,6 @@ static void uart_async_test_init(void)
7989
#endif
8090

8191
if (!initialized) {
82-
init_test();
8392
initialized = true;
8493
#ifdef CONFIG_USERSPACE
8594
set_permissions();
@@ -143,11 +152,13 @@ static void test_single_read_callback(const struct device *dev,
143152
}
144153
}
145154

146-
ZTEST_BMEM volatile uint32_t tx_aborted_count;
155+
static ZTEST_BMEM volatile uint32_t tx_aborted_count;
147156

148157
static void *single_read_setup(void)
149158
{
150-
uart_async_test_init();
159+
static int idx;
160+
161+
uart_async_test_init(idx++);
151162

152163
memset(&tdata, 0, sizeof(tdata));
153164
tdata.supply_second_buffer = true;
@@ -228,7 +239,9 @@ ZTEST_USER(uart_async_single_read, test_single_read)
228239

229240
static void *multiple_rx_enable_setup(void)
230241
{
231-
uart_async_test_init();
242+
static int idx;
243+
244+
uart_async_test_init(idx++);
232245

233246
memset(&tdata, 0, sizeof(tdata));
234247
/* Reuse the callback from the single_read test case, as this test case
@@ -375,7 +388,9 @@ static void test_chained_read_callback(const struct device *dev,
375388

376389
static void *chained_read_setup(void)
377390
{
378-
uart_async_test_init();
391+
static int idx;
392+
393+
uart_async_test_init(idx++);
379394

380395
uart_callback_set(uart_dev, test_chained_read_callback, NULL);
381396

@@ -455,7 +470,9 @@ static void test_double_buffer_callback(const struct device *dev,
455470

456471
static void *double_buffer_setup(void)
457472
{
458-
uart_async_test_init();
473+
static int idx;
474+
475+
uart_async_test_init(idx++);
459476

460477
uart_callback_set(uart_dev, test_double_buffer_callback, NULL);
461478

@@ -501,6 +518,7 @@ static ZTEST_BMEM uint8_t test_read_abort_rx_buf[2][100];
501518
static ZTEST_BMEM uint8_t test_read_abort_read_buf[100];
502519
#endif /* NOCACHE_MEM */
503520
static ZTEST_BMEM int test_read_abort_rx_cnt;
521+
static ZTEST_BMEM bool test_read_abort_rx_buf_req_once;
504522

505523
static void test_read_abort_callback(const struct device *dev,
506524
struct uart_event *evt, void *user_data)
@@ -515,14 +533,12 @@ static void test_read_abort_callback(const struct device *dev,
515533
break;
516534
case UART_RX_BUF_REQUEST:
517535
{
518-
static bool once;
519-
520-
if (!once) {
536+
if (!test_read_abort_rx_buf_req_once) {
521537
k_sem_give(&rx_buf_coherency);
522538
uart_rx_buf_rsp(dev,
523539
test_read_abort_rx_buf[1],
524540
sizeof(test_read_abort_rx_buf[1]));
525-
once = true;
541+
test_read_abort_rx_buf_req_once = true;
526542
}
527543
break;
528544
}
@@ -558,8 +574,11 @@ static void read_abort_timeout(struct k_timer *timer)
558574

559575
static void *read_abort_setup(void)
560576
{
561-
uart_async_test_init();
577+
static int idx;
562578

579+
uart_async_test_init(idx++);
580+
581+
test_read_abort_rx_buf_req_once = false;
563582
failed_in_isr = false;
564583
uart_callback_set(uart_dev, test_read_abort_callback, NULL);
565584

@@ -654,7 +673,9 @@ static void test_write_abort_callback(const struct device *dev,
654673

655674
static void *write_abort_setup(void)
656675
{
657-
uart_async_test_init();
676+
static int idx;
677+
678+
uart_async_test_init(idx++);
658679

659680
uart_callback_set(uart_dev, test_write_abort_callback, NULL);
660681

@@ -727,7 +748,9 @@ static void test_forever_timeout_callback(const struct device *dev,
727748

728749
static void *forever_timeout_setup(void)
729750
{
730-
uart_async_test_init();
751+
static int idx;
752+
753+
uart_async_test_init(idx++);
731754

732755
uart_callback_set(uart_dev, test_forever_timeout_callback, NULL);
733756

@@ -816,8 +839,12 @@ static void test_chained_write_callback(const struct device *dev,
816839

817840
static void *chained_write_setup(void)
818841
{
819-
uart_async_test_init();
842+
static int idx;
843+
844+
uart_async_test_init(idx++);
820845

846+
tx_sent = 0;
847+
chained_write_next_buf = true;
821848
uart_callback_set(uart_dev, test_chained_write_callback, NULL);
822849

823850
return NULL;
@@ -869,11 +896,11 @@ static ZTEST_BMEM uint8_t long_tx_buf[TX_LONG_BUFFER];
869896
#endif /* NOCACHE_MEM */
870897
static ZTEST_BMEM volatile uint8_t evt_num;
871898
static ZTEST_BMEM size_t long_received[2];
899+
static ZTEST_BMEM uint8_t *long_next_buffer;
872900

873901
static void test_long_buffers_callback(const struct device *dev,
874902
struct uart_event *evt, void *user_data)
875903
{
876-
static uint8_t *next_buffer = long_rx_buf2;
877904

878905
switch (evt->type) {
879906
case UART_TX_DONE:
@@ -895,8 +922,8 @@ static void test_long_buffers_callback(const struct device *dev,
895922
k_sem_give(&rx_disabled);
896923
break;
897924
case UART_RX_BUF_REQUEST:
898-
uart_rx_buf_rsp(dev, next_buffer, RX_LONG_BUFFER);
899-
next_buffer = (next_buffer == long_rx_buf2) ? long_rx_buf : long_rx_buf2;
925+
uart_rx_buf_rsp(dev, long_next_buffer, RX_LONG_BUFFER);
926+
long_next_buffer = (long_next_buffer == long_rx_buf2) ? long_rx_buf : long_rx_buf2;
900927
break;
901928
default:
902929
break;
@@ -905,8 +932,12 @@ static void test_long_buffers_callback(const struct device *dev,
905932

906933
static void *long_buffers_setup(void)
907934
{
908-
uart_async_test_init();
935+
static int idx;
909936

937+
uart_async_test_init(idx++);
938+
939+
evt_num = 0;
940+
long_next_buffer = long_rx_buf2;
910941
uart_callback_set(uart_dev, test_long_buffers_callback, NULL);
911942

912943
return NULL;
@@ -988,3 +1019,12 @@ ZTEST_SUITE(uart_async_write_abort, NULL, write_abort_setup,
9881019

9891020
ZTEST_SUITE(uart_async_timeout, NULL, forever_timeout_setup,
9901021
NULL, NULL, NULL);
1022+
1023+
void test_main(void)
1024+
{
1025+
/* Run all suites for each dut UART. Setup function for each suite is picking
1026+
* next UART from the array.
1027+
*/
1028+
ztest_run_all(NULL, false, ARRAY_SIZE(duts), 1);
1029+
ztest_verify_all_test_suites_ran();
1030+
}

0 commit comments

Comments
 (0)