summaryrefslogtreecommitdiff
path: root/cts/interrupt
diff options
context:
space:
mode:
Diffstat (limited to 'cts/interrupt')
-rw-r--r--cts/interrupt/cts.testlist44
-rw-r--r--cts/interrupt/dut.c184
-rw-r--r--cts/interrupt/th.c78
3 files changed, 0 insertions, 306 deletions
diff --git a/cts/interrupt/cts.testlist b/cts/interrupt/cts.testlist
deleted file mode 100644
index 0fdaf6fca2..0000000000
--- a/cts/interrupt/cts.testlist
+++ /dev/null
@@ -1,44 +0,0 @@
-/* Copyright 2016 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-/* Test interrupt_enable/disable */
-CTS_TEST(test_interrupt_enable,,,,)
-CTS_TEST(test_interrupt_disable,,,,)
-
-/* Test task_wait_for_event */
-CTS_TEST(test_task_wait_event,,,,)
-
-/* Test task_disable_irq */
-CTS_TEST(test_task_disable_irq,,,,)
-
-/* Test nested interrupt. Lower priority IRQ is fired, followed by
- * higher priority IRQ. Handler executions should be nested.
- *
- * P1 *-----*
- * / \
- * P2 *----* *----*
- * / \
- * task_cts ----* *----
- * A B C D
- */
-CTS_TEST(test_nested_interrupt_low_high,,,,)
-
-/* Test nested interrupt. Higher priority IRQ is fired, followed by
- * lower priority IRQ. Handlers should be executed sequentially.
- *
- * P1 *-----*
- * / \
- * P2 / *-----*
- * / \
- * task_cts ----* *----
- * B C A D
- */
-CTS_TEST(test_nested_interrupt_high_low,,,,)
-
-/*
- * Other ideas
- *
- * Test back-to-back interrupts, NVIC, Priorities
- */ \ No newline at end of file
diff --git a/cts/interrupt/dut.c b/cts/interrupt/dut.c
deleted file mode 100644
index 3c83e5701f..0000000000
--- a/cts/interrupt/dut.c
+++ /dev/null
@@ -1,184 +0,0 @@
-/* Copyright 2016 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include <string.h>
-#include "common.h"
-#include "cts_common.h"
-#include "gpio.h"
-#include "registers.h"
-#include "task.h"
-#include "timer.h"
-#include "watchdog.h"
-
-static int got_interrupt;
-static int wake_me_up;
-static int state_index;
-static char state[4];
-
-/*
- * Raw busy loop. Returns 1 if loop finishes before interrupt is triggered.
- * Loop length is controlled by busy_loop_timeout. It has to be set to the
- * value which makes the loop last longer than CTS_INTERRUPT_TRIGGER_DELAY_US.
- */
-static int busy_loop(void)
-{
- /* TODO: Derive a proper value from clock speed */
- const uint32_t busy_loop_timeout = 0xfffff;
- uint32_t counter = 0;
-
- while (counter++ < busy_loop_timeout) {
- if (got_interrupt)
- break;
- watchdog_reload();
- }
- if (counter > busy_loop_timeout)
- return 1;
-
- return 0;
-}
-
-/*
- * Interrupt handler.
- */
-void cts_irq1(enum gpio_signal signal)
-{
- state[state_index++] = 'B';
-
- got_interrupt = in_interrupt_context();
-
- /* Wake up the CTS task */
- if (wake_me_up)
- task_wake(TASK_ID_CTS);
-
- busy_loop();
-
- state[state_index++] = 'C';
-}
-
-void cts_irq2(enum gpio_signal signal)
-{
- state[state_index++] = 'A';
- busy_loop();
- state[state_index++] = 'D';
-}
-
-void clean_state(void)
-{
- uint32_t *event;
-
- interrupt_enable();
- got_interrupt = 0;
- wake_me_up = 0;
- state_index = 0;
- memset(state, '_', sizeof(state));
- event = task_get_event_bitmap(TASK_ID_CTS);
- *event = 0;
-}
-
-enum cts_rc test_task_wait_event(void)
-{
- uint32_t event;
-
- wake_me_up = 1;
-
- /* Sleep and wait for interrupt. This shouldn't time out. */
- event = task_wait_event(CTS_INTERRUPT_TRIGGER_DELAY_US * 2);
- if (event != TASK_EVENT_WAKE) {
- CPRINTS("Woken up by unexpected event: 0x%08x", event);
- return CTS_RC_FAILURE;
- }
- if (!got_interrupt) {
- CPRINTS("Interrupt context not detected");
- return CTS_RC_TIMEOUT;
- }
-
- return CTS_RC_SUCCESS;
-}
-
-enum cts_rc test_task_disable_irq(void)
-{
- uint32_t event;
-
- wake_me_up = 1;
-
- task_disable_irq(CTS_IRQ_NUMBER);
- /* Sleep and wait for interrupt. This should time out. */
- event = task_wait_event(CTS_INTERRUPT_TRIGGER_DELAY_US * 2);
- if (event != TASK_EVENT_TIMER) {
- CPRINTS("Woken up by unexpected event: 0x%08x", event);
- return CTS_RC_FAILURE;
- }
- task_enable_irq(CTS_IRQ_NUMBER);
-
- return CTS_RC_SUCCESS;
-}
-
-enum cts_rc test_interrupt_enable(void)
-{
- if (busy_loop()) {
- CPRINTS("Timeout before interrupt");
- return CTS_RC_TIMEOUT;
- }
- return CTS_RC_SUCCESS;
-}
-
-enum cts_rc test_interrupt_disable(void)
-{
- interrupt_disable();
- if (!busy_loop()) {
- CPRINTS("Expected timeout but didn't");
- return CTS_RC_FAILURE;
- }
- return CTS_RC_SUCCESS;
-}
-
-enum cts_rc test_nested_interrupt_low_high(void)
-{
- uint32_t event;
-
- event = task_wait_event(CTS_INTERRUPT_TRIGGER_DELAY_US * 4);
- if (event != TASK_EVENT_TIMER) {
- CPRINTS("Woken up by unexpected event: 0x%08x", event);
- return CTS_RC_FAILURE;
- }
- if (!got_interrupt) {
- CPRINTS("Interrupt context not detected");
- return CTS_RC_TIMEOUT;
- }
- if (memcmp(state, "ABCD", sizeof(state))) {
- CPRINTS("State transition differs from expectation");
- return CTS_RC_FAILURE;
- }
-
- return CTS_RC_SUCCESS;
-}
-
-enum cts_rc test_nested_interrupt_high_low(void)
-{
- uint32_t event;
-
- event = task_wait_event(CTS_INTERRUPT_TRIGGER_DELAY_US * 4);
- if (event != TASK_EVENT_TIMER) {
- CPRINTS("Woken up by unexpected event: 0x%08x", event);
- return CTS_RC_FAILURE;
- }
-
- if (memcmp(state, "BCAD", sizeof(state))) {
- CPRINTS("State transition differs from expectation");
- return CTS_RC_FAILURE;
- }
-
- return CTS_RC_SUCCESS;
-}
-
-#include "cts_testlist.h"
-
-void cts_task(void)
-{
- gpio_enable_interrupt(GPIO_CTS_IRQ1);
- gpio_enable_interrupt(GPIO_CTS_IRQ2);
- cts_main_loop(tests, "Interrupt");
- task_wait_event(-1);
-}
diff --git a/cts/interrupt/th.c b/cts/interrupt/th.c
deleted file mode 100644
index 1639a1868c..0000000000
--- a/cts/interrupt/th.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/* Copyright 2016 The Chromium OS Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include "common.h"
-#include "cts_common.h"
-#include "gpio.h"
-#include "task.h"
-#include "timer.h"
-#include "watchdog.h"
-
-void clean_state(void)
-{
- gpio_set_level(GPIO_OUTPUT_TEST, 1);
- gpio_set_level(GPIO_CTS_IRQ2, 1);
-}
-
-static void trigger_interrupt1(void)
-{
- usleep(CTS_INTERRUPT_TRIGGER_DELAY_US);
- gpio_set_level(GPIO_OUTPUT_TEST, 0);
- usleep(CTS_INTERRUPT_TRIGGER_DELAY_US);
-}
-
-static void trigger_interrupt2(void)
-{
- usleep(CTS_INTERRUPT_TRIGGER_DELAY_US);
- gpio_set_level(GPIO_CTS_IRQ2, 0);
- usleep(CTS_INTERRUPT_TRIGGER_DELAY_US);
-}
-
-enum cts_rc test_task_wait_event(void)
-{
- trigger_interrupt1();
- return CTS_RC_SUCCESS;
-}
-
-enum cts_rc test_task_disable_irq(void)
-{
- trigger_interrupt1();
- return CTS_RC_SUCCESS;
-}
-
-enum cts_rc test_interrupt_enable(void)
-{
- trigger_interrupt1();
- return CTS_RC_SUCCESS;
-}
-
-enum cts_rc test_interrupt_disable(void)
-{
- trigger_interrupt1();
- return CTS_RC_SUCCESS;
-}
-
-enum cts_rc test_nested_interrupt_low_high(void)
-{
- trigger_interrupt2();
- trigger_interrupt1();
- return CTS_RC_SUCCESS;
-}
-
-enum cts_rc test_nested_interrupt_high_low(void)
-{
- trigger_interrupt1();
- trigger_interrupt2();
- return CTS_RC_SUCCESS;
-}
-
-#include "cts_testlist.h"
-
-void cts_task(void)
-{
- gpio_set_flags(GPIO_OUTPUT_TEST, GPIO_ODR_HIGH);
- cts_main_loop(tests, "Interrupt");
- task_wait_event(-1);
-}