diff options
author | Dmitriy Korovkin <dmitriy.korovkin@windriver.com> | 2016-10-14 12:12:46 -0400 |
---|---|---|
committer | Anas Nashif <nashif@linux.intel.com> | 2016-10-22 01:27:02 +0000 |
commit | 3ef74d4fea8cc265dfbbccdb17601401ae60c131 (patch) | |
tree | ca6ad628ada99e5a1f845899be8791579d1b6b41 /tests | |
parent | 792140a5023d56d74ef7a5843d9db6a02256af66 (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')
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) |