summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorDmitriy Korovkin <dmitriy.korovkin@windriver.com>2016-10-14 12:12:46 -0400
committerAnas Nashif <nashif@linux.intel.com>2016-10-22 01:27:02 +0000
commit3ef74d4fea8cc265dfbbccdb17601401ae60c131 (patch)
treeca6ad628ada99e5a1f845899be8791579d1b6b41 /tests
parent792140a5023d56d74ef7a5843d9db6a02256af66 (diff)
unified/arc: Add tickless idle test for Arduino 101 ARC core
Change-Id: I19375d70e875ea94570956598409a28b1f237b13 Signed-off-by: Dmitriy Korovkin <dmitriy.korovkin@windriver.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/kernel/test_tickless/microkernel/Makefile8
-rw-r--r--tests/kernel/test_tickless/microkernel/prj_soc_quark_se_c1000_ss.conf7
-rw-r--r--tests/kernel/test_tickless/microkernel/src/Makefile1
-rw-r--r--tests/kernel/test_tickless/microkernel/src/test_tickless.c17
-rw-r--r--tests/kernel/test_tickless/microkernel/src/timestamps.c31
-rw-r--r--tests/kernel/test_tickless/microkernel/testcase.ini5
6 files changed, 65 insertions, 4 deletions
diff --git a/tests/kernel/test_tickless/microkernel/Makefile b/tests/kernel/test_tickless/microkernel/Makefile
index 0d56ce66d..a06e9a3ec 100644
--- a/tests/kernel/test_tickless/microkernel/Makefile
+++ b/tests/kernel/test_tickless/microkernel/Makefile
@@ -1,6 +1,14 @@
MDEF_FILE = prj.mdef
KERNEL_TYPE = micro
BOARD ?= qemu_x86
+
+soc_arduino_101_sss = soc_quark_se_c1000_ss
+soc_quark_se_c1000_ss_devboard = soc_quark_se_c1000_ss
+
+ifeq ($(soc_$(BOARD)),soc_quark_se_c1000_ss)
+CONF_FILE = prj_soc_quark_se_c1000_ss.conf
+else
CONF_FILE = prj.conf
+endif
include ${ZEPHYR_BASE}/Makefile.inc
diff --git a/tests/kernel/test_tickless/microkernel/prj_soc_quark_se_c1000_ss.conf b/tests/kernel/test_tickless/microkernel/prj_soc_quark_se_c1000_ss.conf
new file mode 100644
index 000000000..4db5ce306
--- /dev/null
+++ b/tests/kernel/test_tickless/microkernel/prj_soc_quark_se_c1000_ss.conf
@@ -0,0 +1,7 @@
+CONFIG_SYS_POWER_MANAGEMENT=y
+CONFIG_TICKLESS_IDLE=y
+CONFIG_TEST_RANDOM_GENERATOR=y
+CONFIG_ASSERT=y
+CONFIG_RTC=y
+CONFIG_RTC_QMSI=y
+CONFIG_RTC_0_IRQ_PRI=1
diff --git a/tests/kernel/test_tickless/microkernel/src/Makefile b/tests/kernel/test_tickless/microkernel/src/Makefile
index f29e6badb..722cfcaa7 100644
--- a/tests/kernel/test_tickless/microkernel/src/Makefile
+++ b/tests/kernel/test_tickless/microkernel/src/Makefile
@@ -2,3 +2,4 @@ ccflags-y += -I${ZEPHYR_BASE}/tests/include
obj-y = test_tickless.o
obj-$(CONFIG_ARM) += timestamps.o
+obj-$(CONFIG_ARC) += timestamps.o
diff --git a/tests/kernel/test_tickless/microkernel/src/test_tickless.c b/tests/kernel/test_tickless/microkernel/src/test_tickless.c
index 315b775d9..d07403d39 100644
--- a/tests/kernel/test_tickless/microkernel/src/test_tickless.c
+++ b/tests/kernel/test_tickless/microkernel/src/test_tickless.c
@@ -70,6 +70,19 @@ extern void _TimestampClose(void);
#define _TIMESTAMP_READ() (_TimestampRead())
#define _TIMESTAMP_CLOSE() (_TimestampClose())
+#elif defined(CONFIG_ARC)
+
+typedef uint32_t _timer_res_t;
+#define _TIMER_ZERO 0
+
+extern void timestamp_open(void);
+extern uint32_t timestamp_read(void);
+extern void timestamp_close(void);
+
+#define _TIMESTAMP_OPEN() (timestamp_open())
+#define _TIMESTAMP_READ() (timestamp_read())
+#define _TIMESTAMP_CLOSE() (timestamp_close())
+
#else
#error "Unknown target"
#endif
@@ -123,7 +136,7 @@ void ticklessTestTask(void)
#if defined(CONFIG_X86)
printk("Calibrated time stamp period = 0x%x%x\n",
(uint32_t)(cal_tsc >> 32), (uint32_t)(cal_tsc & 0xFFFFFFFFLL));
-#elif defined(CONFIG_ARM)
+#elif defined(CONFIG_ARM) || defined(CONFIG_SOC_QUARK_SE_C1000_SS)
printk("Calibrated time stamp period = 0x%x\n", cal_tsc);
#endif
@@ -162,7 +175,7 @@ void ticklessTestTask(void)
(uint32_t)(diff_tsc >> 32), (uint32_t)(diff_tsc & 0xFFFFFFFFULL));
printk("Cal time stamp: 0x%x%x\n",
(uint32_t)(cal_tsc >> 32), (uint32_t)(cal_tsc & 0xFFFFFFFFLL));
-#elif defined(CONFIG_ARM)
+#elif defined(CONFIG_ARM) || defined(CONFIG_SOC_QUARK_SE_C1000_SS)
printk("diff time stamp: 0x%x\n", diff_tsc);
printk("Cal time stamp: 0x%x\n", cal_tsc);
#endif
diff --git a/tests/kernel/test_tickless/microkernel/src/timestamps.c b/tests/kernel/test_tickless/microkernel/src/timestamps.c
index db5e486f3..0d944cba8 100644
--- a/tests/kernel/test_tickless/microkernel/src/timestamps.c
+++ b/tests/kernel/test_tickless/microkernel/src/timestamps.c
@@ -23,6 +23,7 @@ Platform-specific timestamp support for the tickless idle test.
#include <tc_util.h>
#include <stddef.h>
+#include <misc/__assert.h>
#if defined(CONFIG_SOC_TI_LM3S6965_QEMU)
/*
@@ -312,6 +313,36 @@ void _TimestampClose(void)
__PMC->pcdr0 = (1 << PID_RTT);
}
+#elif defined(CONFIG_SOC_QUARK_SE_C1000_SS)
+#include <device.h>
+#include <rtc.h>
+
+static struct device *rtc_device;
+
+void timestamp_open(void)
+{
+ struct rtc_config cfg = {
+ .init_val = 0xfff,
+ .alarm_enable = 0,
+ .alarm_val = 0,
+ .cb_fn = NULL
+ };
+ rtc_device = device_get_binding(CONFIG_RTC_0_NAME);
+ __ASSERT(rtc_device != NULL, "QMSI RTC device not found");
+ rtc_enable(rtc_device);
+ rtc_set_config(rtc_device, &cfg);
+}
+
+uint32_t timestamp_read(void)
+{
+ return rtc_read(rtc_device);
+}
+
+void timestamp_close(void)
+{
+ rtc_disable(rtc_device);
+}
+
#else
#error "Unknown platform"
#endif /* CONFIG_SOC_xxx */
diff --git a/tests/kernel/test_tickless/microkernel/testcase.ini b/tests/kernel/test_tickless/microkernel/testcase.ini
index aec614885..62cb6e189 100644
--- a/tests/kernel/test_tickless/microkernel/testcase.ini
+++ b/tests/kernel/test_tickless/microkernel/testcase.ini
@@ -1,6 +1,7 @@
[test]
tags = core unified_capable
-arch_exclude = arc nios2
+arch_exclude = nios2
kernel = micro
filter = CONFIG_X86 or (CONFIG_ARM and
- (CONFIG_SOC_MK64F12 or CONFIG_SOC_ATMEL_SAM3))
+ (CONFIG_SOC_MK64F12 or CONFIG_SOC_ATMEL_SAM3)) or
+ (CONFIG_ARC and CONFIG_SOC_QUARK_SE_C1000_SS)