From 68c48cd1168e409cb64170f6fb5c7925e1e935f8 Mon Sep 17 00:00:00 2001 From: Marcin Szymczyk Date: Thu, 23 May 2024 17:03:40 +0200 Subject: [PATCH] tests: kernel: interrupt: account for table offset When verifying sw_isr_table, take into account custom offset, like `CONFIG_RISCV_RESERVED_IRQ_ISR_TABLES_OFFSET` in some RISC-V SoCs. Relates to #71948 and #73232. Signed-off-by: Marcin Szymczyk --- .../kernel/interrupt/src/dynamic_shared_irq.c | 38 +++++++++++-------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/tests/kernel/interrupt/src/dynamic_shared_irq.c b/tests/kernel/interrupt/src/dynamic_shared_irq.c index db7bc1a688c..a439bac278d 100644 --- a/tests/kernel/interrupt/src/dynamic_shared_irq.c +++ b/tests/kernel/interrupt/src/dynamic_shared_irq.c @@ -97,6 +97,12 @@ static void *dynamic_shared_irq_suite_setup(void) return NULL; } +#if defined(CONFIG_RISCV_RESERVED_IRQ_ISR_TABLES_OFFSET) +#define TABLE_OFFSET CONFIG_RISCV_RESERVED_IRQ_ISR_TABLES_OFFSET +#else +#define TABLE_OFFSET 0 +#endif + static void dynamic_shared_irq_suite_before(void *data) { ARG_UNUSED(data); @@ -104,37 +110,39 @@ static void dynamic_shared_irq_suite_before(void *data) arch_irq_connect_dynamic(fixture.irq1, fixture.irq_priority, test_isr_0, 0, 0); - zassert_true(_sw_isr_table[fixture.irq1_table_idx].isr == test_isr_0, + zassert_true(_sw_isr_table[fixture.irq1_table_idx + TABLE_OFFSET].isr == test_isr_0, "wrong _sw_isr_table ISR at irq1"); - zassert_true(!_sw_isr_table[fixture.irq1_table_idx].arg, + zassert_true(!_sw_isr_table[fixture.irq1_table_idx + TABLE_OFFSET].arg, "wrong _sw_isr_table argument at irq1"); - zassert_true(!z_shared_sw_isr_table[fixture.irq1_table_idx].client_num, + zassert_true(!z_shared_sw_isr_table[fixture.irq1_table_idx + TABLE_OFFSET].client_num, "wrong client number at irq1"); arch_irq_connect_dynamic(fixture.irq1, fixture.irq_priority, test_isr_1, (void *)1, 0); - zassert_true(_sw_isr_table[fixture.irq1_table_idx].isr == z_shared_isr, + zassert_true(_sw_isr_table[fixture.irq1_table_idx + TABLE_OFFSET].isr == z_shared_isr, "wrong _sw_isr_table ISR at irq1"); - zassert_true(_sw_isr_table[fixture.irq1_table_idx].arg == - &z_shared_sw_isr_table[fixture.irq1_table_idx], + zassert_true(_sw_isr_table[fixture.irq1_table_idx + TABLE_OFFSET].arg == + &z_shared_sw_isr_table[fixture.irq1_table_idx + TABLE_OFFSET], "wrong _sw_isr_table argument at irq1"); - zassert_true(z_shared_sw_isr_table[fixture.irq1_table_idx].client_num == 2, + zassert_true(z_shared_sw_isr_table[fixture.irq1_table_idx + TABLE_OFFSET].client_num == 2, "wrong client number at irq1"); - zassert_true(client_exists_at_index(test_isr_0, 0, fixture.irq1_table_idx, 0), + zassert_true(client_exists_at_index(test_isr_0, 0, fixture.irq1_table_idx + TABLE_OFFSET, + 0), "unexpected client data for irq1, index 0"); - zassert_true(client_exists_at_index(test_isr_1, (void *)1, fixture.irq1_table_idx, 1), + zassert_true(client_exists_at_index(test_isr_1, (void *)1, + fixture.irq1_table_idx + TABLE_OFFSET, 1), "unexpected client data for irq1, index 1"); arch_irq_connect_dynamic(fixture.irq2, fixture.irq_priority, test_isr_2, (void *)2, 0); - zassert_true(_sw_isr_table[fixture.irq2_table_idx].isr == test_isr_2, + zassert_true(_sw_isr_table[fixture.irq2_table_idx + TABLE_OFFSET].isr == test_isr_2, "wrong _sw_isr_table ISR at irq2"); - zassert_true(_sw_isr_table[fixture.irq2_table_idx].arg == (void *)2, + zassert_true(_sw_isr_table[fixture.irq2_table_idx + TABLE_OFFSET].arg == (void *)2, "wrong _sw_isr_table argument at irq2"); - zassert_true(!z_shared_sw_isr_table[fixture.irq2_table_idx].client_num, + zassert_true(!z_shared_sw_isr_table[fixture.irq2_table_idx + TABLE_OFFSET].client_num, "wrong client number at irq2"); reset_test_vector(); @@ -191,11 +199,11 @@ ZTEST(shared_irq_feature, test_dynamic_shared_irq_disconnect_write) arch_irq_disconnect_dynamic(fixture.irq1, fixture.irq_priority, test_isr_0, 0, 0); - zassert_true(_sw_isr_table[fixture.irq1_table_idx].isr == test_isr_1, + zassert_true(_sw_isr_table[fixture.irq1_table_idx + TABLE_OFFSET].isr == test_isr_1, "wrong _sw_isr_table ISR at irq1"); - zassert_true(_sw_isr_table[fixture.irq1_table_idx].arg == (void *)1, + zassert_true(_sw_isr_table[fixture.irq1_table_idx + TABLE_OFFSET].arg == (void *)1, "wrong _sw_isr_table arg at irq1"); - zassert_true(!z_shared_sw_isr_table[fixture.irq1_table_idx].client_num, + zassert_true(!z_shared_sw_isr_table[fixture.irq1_table_idx + TABLE_OFFSET].client_num, "wrong client number at irq1"); irq_enable(fixture.irq1);