tests/qtest: Ensure STM32L4x5 EXTI state is correct at the end of QTests

EXTI's new field `irq_levels` tracks irq levels between tests when using
`global_qtest`.
This happens in `stm32l4x5_exti-test.c`, `stm32l4x5_syscfg-test.c` and
`stm32l4x5_gpio-test.c` (`dm163.c` doesn't use `global_qtest`).

To ensure that `irq_levels` has the same value before and after each
QTest, this commit toggles back the irq lines that were changed at the
end of each problematic test. Most QTests were already doing this.

Signed-off-by: Inès Varhol <ines.varhol@telecom-paris.fr>
Message-id: 20240629110800.539969-3-ines.varhol@telecom-paris.fr
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
Inès Varhol 2024-06-29 13:07:09 +02:00 committed by Peter Maydell
parent 9c4887e3b6
commit 58c782de55
2 changed files with 9 additions and 1 deletions

View File

@ -448,6 +448,9 @@ static void test_masked_interrupt(void)
g_assert_cmphex(exti_readl(EXTI_PR1), ==, 0x00000000); g_assert_cmphex(exti_readl(EXTI_PR1), ==, 0x00000000);
/* Check that the interrupt isn't pending in NVIC */ /* Check that the interrupt isn't pending in NVIC */
g_assert_false(check_nvic_pending(EXTI1_IRQ)); g_assert_false(check_nvic_pending(EXTI1_IRQ));
/* Clean EXTI */
exti_set_irq(1, 0);
} }
static void test_interrupt(void) static void test_interrupt(void)
@ -498,6 +501,9 @@ static void test_interrupt(void)
/* Clean NVIC */ /* Clean NVIC */
unpend_nvic_irq(EXTI1_IRQ); unpend_nvic_irq(EXTI1_IRQ);
g_assert_false(check_nvic_pending(EXTI1_IRQ)); g_assert_false(check_nvic_pending(EXTI1_IRQ));
/* Clean EXTI */
exti_set_irq(1, 0);
} }
static void test_orred_interrupts(void) static void test_orred_interrupts(void)
@ -531,6 +537,8 @@ static void test_orred_interrupts(void)
unpend_nvic_irq(EXTI5_9_IRQ); unpend_nvic_irq(EXTI5_9_IRQ);
g_assert_false(check_nvic_pending(EXTI5_9_IRQ)); g_assert_false(check_nvic_pending(EXTI5_9_IRQ));
exti_set_irq(i, 0);
} }
} }

View File

@ -221,10 +221,10 @@ static void test_interrupt(void)
g_assert_true(get_irq(1)); g_assert_true(get_irq(1));
/* Clean the test */ /* Clean the test */
syscfg_writel(SYSCFG_EXTICR1, 0x00000000);
syscfg_set_irq(0, 0); syscfg_set_irq(0, 0);
/* irq 15 is high at reset because GPIOA15 is high at reset */ /* irq 15 is high at reset because GPIOA15 is high at reset */
syscfg_set_irq(17, 0); syscfg_set_irq(17, 0);
syscfg_writel(SYSCFG_EXTICR1, 0x00000000);
} }
static void test_irq_pin_multiplexer(void) static void test_irq_pin_multiplexer(void)