summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVic (Chun-Ju) Yang <victoryang@chromium.org>2014-01-08 11:09:59 +0800
committerchrome-internal-fetch <chrome-internal-fetch@google.com>2014-01-14 19:12:46 +0000
commit5421622ff224a0d1404721b1d465fe8f1127c3ac (patch)
tree08ff96f66bdcd447daa3a50100e86e74d7f2a893
parentf868e3cf0b9dc74d3ef82db3067ccc72b7865d4d (diff)
downloadchrome-ec-5421622ff224a0d1404721b1d465fe8f1127c3ac.tar.gz
Clapper: Fix and enable timer_dos test
This adds golden wake count for each task and check at the end of the test. The golden wake count is calculated with the seeds and the pseudo random number generator. BUG=None Original-BUG=chrome-os-partner:23800 TEST=Pass the test BRANCH=None Change-Id: I641dcb18ef2878412161f6d864d2405e00c8a7f6 Original-Change-Id: I1f216fda91a86e4accba0d347692de57838748db Signed-off-by: Vic (Chun-Ju) Yang <victoryang@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/181734 Reviewed-by: Randall Spangler <rspangler@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/182249 Commit-Queue: Dave Parker <dparker@chromium.org> Tested-by: Dave Parker <dparker@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/182428 Reviewed-by: Dave Parker <dparker@chromium.org>
-rw-r--r--test/build.mk2
-rw-r--r--test/timer_dos.c32
-rw-r--r--test/timer_dos.py41
3 files changed, 32 insertions, 43 deletions
diff --git a/test/build.mk b/test/build.mk
index daea926970..b0db597583 100644
--- a/test/build.mk
+++ b/test/build.mk
@@ -22,7 +22,7 @@ test-list-$(BOARD_SAMUS)=
test-list-host=mutex pingpong utils kb_scan kb_mkbp lid_sw power_button hooks
test-list-host+=thermal flash queue kb_8042 extpwr_gpio console_edit system
test-list-host+=sbs_charging adapter host_command thermal_falco
-test-list-host+=bklight_lid bklight_passthru interrupt
+test-list-host+=bklight_lid bklight_passthru interrupt timer_dos
adapter-y=adapter.o
bklight_lid-y=bklight_lid.o
diff --git a/test/timer_dos.c b/test/timer_dos.c
index f941adea51..0c0f48c0a2 100644
--- a/test/timer_dos.c
+++ b/test/timer_dos.c
@@ -17,11 +17,28 @@
#define TEST_TIME (3 * SECOND)
+#define ERROR_MARGIN 5
+
+static int calculate_golden(uint32_t seed)
+{
+ int golden = 0;
+ uint32_t elapsed = 0;
+ while (1) {
+ elapsed += PERIOD_US(seed);
+ ++golden;
+ if (elapsed >= TEST_TIME)
+ return golden;
+ seed = prng(seed);
+ }
+}
+
int task_timer(void *seed)
{
- uint32_t num = (uint32_t)seed;
+ uint32_t num = (uint32_t)(uintptr_t)seed;
+ int golden_cnt = calculate_golden(num);
task_id_t id = task_get_current();
timestamp_t start;
+ int cnt = 0;
while (1) {
task_wait_event(-1);
@@ -33,9 +50,19 @@ int task_timer(void *seed)
/* Wait for a "random" period */
task_wait_event(PERIOD_US(num));
ccprintf("%01d\n", id);
+ cnt++;
/* next pseudo random delay */
num = prng(num);
}
+ ccprintf("Task %d: Count=%d Golden=%d\n", id, cnt, golden_cnt);
+ cnt -= golden_cnt;
+ if (cnt < 0)
+ cnt = -cnt;
+ if (cnt > ERROR_MARGIN) {
+ ccprintf("Count differs from Golden by more than %d!\n",
+ ERROR_MARGIN);
+ test_fail();
+ }
}
return EC_SUCCESS;
@@ -43,8 +70,11 @@ int task_timer(void *seed)
void run_test(void)
{
+ wait_for_task_started();
task_wake(TASK_ID_TMRD);
task_wake(TASK_ID_TMRC);
task_wake(TASK_ID_TMRB);
task_wake(TASK_ID_TMRA);
+ usleep(TEST_TIME + SECOND);
+ test_pass();
}
diff --git a/test/timer_dos.py b/test/timer_dos.py
deleted file mode 100644
index 5b7e1f7d40..0000000000
--- a/test/timer_dos.py
+++ /dev/null
@@ -1,41 +0,0 @@
-# Copyright (c) 2011 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.
-#
-# Timers test
-#
-
-import time
-
-# Test during 5s
-DURATION=5
-
-# Linear congruential pseudo random number generator*/
-def prng(x):
- return (22695477 * x + 1) & 0xffffffff
-
-# period between 500us and 128ms
-def period_us(num):
- return (((num % 256) + 1) * 500)
-
-# build the same pseudo random sequence as the target
-def build_sequence():
- # TODO(crosbug.com/p/23800): implement
- return []
-
-def test(helper):
- helper.wait_output("[Timer task ")
- deadline = time.time() + DURATION
- seq = []
- while time.time() < deadline:
- tmr = helper.wait_output("(?P<t>[0-9])", use_re=True,
- timeout=1)["t"]
- seq.append(tmr)
-
- # Check the results
- model = build_sequence()
- # TODO(crosbug.com/p/23800): implement
-
- helper.trace("Got %d timer IRQ\n" % len(seq))
-
- return True # PASS !