Skip to content

Commit 79b10f2

Browse files
tests: kernel: Add sys_irq test suites
Add test suites to validate the sys_irq API, shared IRQs, dynamic IRQs and direct IRQs. Signed-off-by: Bjarki Arge Andreasen <bjarki@arge-andreasen.me>
1 parent 1f93fec commit 79b10f2

30 files changed

+726
-0
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# Copyright (c) 2024 Bjarki Arge Andreasen
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
cmake_minimum_required(VERSION 3.20.0)
5+
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
6+
project(test_sys_irq_direct_irq)
7+
8+
target_sources(app PRIVATE src/test.c)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Copyright (c) 2024 Nordic Semiconductor
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
CONFIG_GEN_ISR_TABLES=n
5+
CONFIG_GEN_IRQ_VECTOR_TABLE=n
6+
CONFIG_BOARD_ENABLE_CPUNET=y
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
* Copyright (c) 2024 Nordic Semiconductor
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
/ {
8+
aliases {
9+
test-intd0 = &spi1;
10+
test-intd1 = &spi2;
11+
};
12+
};
13+
14+
&spi1 {
15+
status = "reserved";
16+
};
17+
18+
&spi2 {
19+
status = "reserved";
20+
};
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# Copyright (c) 2024 Nordic Semiconductor
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
CONFIG_GEN_ISR_TABLES=n
5+
CONFIG_GEN_IRQ_VECTOR_TABLE=n
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
* Copyright (c) 2024 Nordic Semiconductor
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
/ {
8+
aliases {
9+
test-intd0 = &timer1;
10+
test-intd1 = &timer2;
11+
};
12+
};
13+
14+
&timer1 {
15+
status = "reserved";
16+
};
17+
18+
&timer2 {
19+
status = "reserved";
20+
};
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# Copyright (c) 2024 Bjarki Arge Andreasen
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
CONFIG_ZTEST=y
5+
CONFIG_ZTEST_FAIL_FAST=y
6+
CONFIG_INTC=y
7+
CONFIG_SYS_IRQ=y
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
/*
2+
* Copyright (c) 2024 Bjarki Arge Andreasen
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
#include <zephyr/drivers/intc/irq_vector.h>
8+
#include <zephyr/sys/irq.h>
9+
#include <zephyr/kernel.h>
10+
#include <zephyr/ztest.h>
11+
12+
#define TEST_IRQ_MAX_DELAY K_MSEC(10)
13+
14+
#define INTD0_NODE DT_ALIAS(test_intd0)
15+
#define INTD1_NODE DT_ALIAS(test_intd1)
16+
17+
#define INTD0_SYS_IRQN SYS_DT_IRQN(INTD0_NODE)
18+
#define INTD1_SYS_IRQN SYS_DT_IRQN(INTD1_NODE)
19+
20+
#define INTD0_IRQ_FLAGS SYS_DT_IRQ_FLAGS(INTD0_NODE)
21+
#define INTD1_IRQ_FLAGS SYS_DT_IRQ_FLAGS(INTD1_NODE)
22+
23+
BUILD_ASSERT(INTD0_SYS_IRQN != INTD1_SYS_IRQN, "INTDs must not share INTL");
24+
BUILD_ASSERT(DT_NODE_HAS_STATUS(INTD0_NODE, reserved), "INTD0 must have status reserved");
25+
BUILD_ASSERT(DT_NODE_HAS_STATUS(INTD1_NODE, reserved), "INTD1 must have status reserved");
26+
27+
static K_SEM_DEFINE(irq0_sem, 0, 1);
28+
static K_SEM_DEFINE(irq1_sem, 0, 1);
29+
30+
INTC_DT_DEFINE_IRQ_VECTOR(INTD0_NODE)
31+
{
32+
k_sem_give(&irq0_sem);
33+
return 1;
34+
}
35+
36+
INTC_DT_DEFINE_IRQ_VECTOR(INTD1_NODE)
37+
{
38+
k_sem_give(&irq1_sem);
39+
return 1;
40+
}
41+
42+
ZTEST(sys_irq_direct_irq, test__trigger_irq_while_disabled__no_irq)
43+
{
44+
zassert_ok(sys_irq_trigger(INTD0_SYS_IRQN));
45+
zassert_equal(k_sem_take(&irq0_sem, TEST_IRQ_MAX_DELAY), -EAGAIN);
46+
zassert_ok(sys_irq_trigger(INTD1_SYS_IRQN));
47+
zassert_equal(k_sem_take(&irq1_sem, TEST_IRQ_MAX_DELAY), -EAGAIN);
48+
}
49+
50+
ZTEST(sys_irq_direct_irq, test__trigger_irq_while_enabled__irq)
51+
{
52+
zassert_ok(sys_irq_enable(INTD0_SYS_IRQN));
53+
zassert_equal(k_sem_take(&irq0_sem, TEST_IRQ_MAX_DELAY), -EAGAIN);
54+
zassert_ok(sys_irq_enable(INTD1_SYS_IRQN));
55+
zassert_equal(k_sem_take(&irq1_sem, TEST_IRQ_MAX_DELAY), -EAGAIN);
56+
zassert_ok(sys_irq_trigger(INTD0_SYS_IRQN));
57+
zassert_equal(k_sem_take(&irq0_sem, TEST_IRQ_MAX_DELAY), 0);
58+
zassert_ok(sys_irq_trigger(INTD1_SYS_IRQN));
59+
zassert_equal(k_sem_take(&irq1_sem, TEST_IRQ_MAX_DELAY), 0);
60+
}
61+
62+
ZTEST(sys_irq_irq, test__disable_disabled_irq__retval_0)
63+
{
64+
zassert_equal(sys_irq_disable(INTD0_SYS_IRQN), 0);
65+
zassert_equal(sys_irq_disable(INTD1_SYS_IRQN), 0);
66+
}
67+
68+
ZTEST(sys_irq_direct_irq, test__disable_enabled_irq__retval_1)
69+
{
70+
zassert_ok(sys_irq_enable(INTD0_SYS_IRQN));
71+
zassert_ok(sys_irq_enable(INTD1_SYS_IRQN));
72+
zassert_equal(sys_irq_disable(INTD0_SYS_IRQN), 1);
73+
zassert_equal(sys_irq_disable(INTD1_SYS_IRQN), 1);
74+
}
75+
76+
ZTEST(sys_irq_direct_irq, test__clear_cleared_irq__retval_0)
77+
{
78+
zassert_equal(sys_irq_clear(INTD0_SYS_IRQN), 0);
79+
zassert_equal(sys_irq_clear(INTD1_SYS_IRQN), 0);
80+
}
81+
82+
ZTEST(sys_irq_direct_irq, test__clear_triggered_irq__retval_1)
83+
{
84+
zassert_ok(sys_irq_trigger(INTD0_SYS_IRQN));
85+
zassert_ok(sys_irq_trigger(INTD1_SYS_IRQN));
86+
zassert_equal(sys_irq_clear(INTD0_SYS_IRQN), 1);
87+
zassert_equal(sys_irq_clear(INTD1_SYS_IRQN), 1);
88+
}
89+
90+
void *test_init(void)
91+
{
92+
zassert_ok(sys_irq_configure(INTD0_SYS_IRQN, INTD0_IRQ_FLAGS));
93+
zassert_equal(k_sem_take(&irq0_sem, TEST_IRQ_MAX_DELAY), -EAGAIN);
94+
zassert_ok(sys_irq_configure(INTD1_SYS_IRQN, INTD1_IRQ_FLAGS));
95+
zassert_equal(k_sem_take(&irq1_sem, TEST_IRQ_MAX_DELAY), -EAGAIN);
96+
zassert_ok(sys_irq_trigger(INTD0_SYS_IRQN));
97+
zassert_equal(k_sem_take(&irq0_sem, TEST_IRQ_MAX_DELAY), -EAGAIN);
98+
zassert_ok(sys_irq_trigger(INTD1_SYS_IRQN));
99+
zassert_equal(k_sem_take(&irq1_sem, TEST_IRQ_MAX_DELAY), -EAGAIN);
100+
return NULL;
101+
}
102+
103+
void test_before(void *f)
104+
{
105+
ARG_UNUSED(f);
106+
107+
zassert(sys_irq_disable(INTD0_SYS_IRQN) > -1, "retval must be positive");
108+
zassert(sys_irq_disable(INTD1_SYS_IRQN) > -1, "retval must be positive");
109+
zassert(sys_irq_clear(INTD0_SYS_IRQN) > -1, "retval must be positive");
110+
zassert(sys_irq_clear(INTD1_SYS_IRQN) > -1, "retval must be positive");
111+
k_sem_reset(&irq0_sem);
112+
k_sem_reset(&irq1_sem);
113+
}
114+
115+
ZTEST_SUITE(sys_irq_direct_irq, NULL, test_init, test_before, NULL, NULL);
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
tests:
2+
kernel.sys_irq.direct_irq:
3+
platform_allow:
4+
- nrf5340dk/nrf5340/cpuapp
5+
- nrf5340dk/nrf5340/cpunet
6+
kernel.sys_irq.direct_irq.lto:
7+
extra_configs:
8+
- CONFIG_LTO=y
9+
platform_allow:
10+
- nrf5340dk/nrf5340/cpuapp
11+
- nrf5340dk/nrf5340/cpunet
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# Copyright (c) 2024 Bjarki Arge Andreasen
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
cmake_minimum_required(VERSION 3.20.0)
5+
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
6+
project(test_sys_irq_dynamic_irq)
7+
8+
target_sources(app PRIVATE src/test.c)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Copyright (c) 2024 Nordic Semiconductor
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
CONFIG_GEN_ISR_TABLES=n
5+
CONFIG_GEN_IRQ_VECTOR_TABLE=n
6+
CONFIG_BOARD_ENABLE_CPUNET=y

0 commit comments

Comments
 (0)