summaryrefslogtreecommitdiff
path: root/cts
diff options
context:
space:
mode:
authorJack Rosenthal <jrosenth@chromium.org>2021-11-04 12:11:58 -0600
committerCommit Bot <commit-bot@chromium.org>2021-11-05 04:22:34 +0000
commit252457d4b21f46889eebad61d4c0a65331919cec (patch)
tree01856c4d31d710b20e85a74c8d7b5836e35c3b98 /cts
parent08f5a1e6fc2c9467230444ac9b582dcf4d9f0068 (diff)
downloadchrome-ec-stabilize-14682.B-ish.tar.gz
In the interest of making long-term branch maintenance incur as little technical debt on us as possible, we should not maintain any files on the branch we are not actually using. This has the added effect of making it extremely clear when merging CLs from the main branch when changes have the possibility to affect us. The follow-on CL adds a convenience script to actually pull updates from the main branch and generate a CL for the update. BUG=b:204206272 BRANCH=ish TEST=make BOARD=arcada_ish && make BOARD=drallion_ish Signed-off-by: Jack Rosenthal <jrosenth@chromium.org> Change-Id: I17e4694c38219b5a0823e0a3e55a28d1348f4b18 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3262038 Reviewed-by: Jett Rink <jettrink@chromium.org> Reviewed-by: Tom Hughes <tomhughes@chromium.org>
Diffstat (limited to 'cts')
-rw-r--r--cts/README6
-rw-r--r--cts/build.mk28
-rw-r--r--cts/common/__init__.py0
-rw-r--r--cts/common/board.py388
-rw-r--r--cts/common/cts.rc35
-rw-r--r--cts/common/cts_common.c31
-rw-r--r--cts/common/cts_common.h55
-rw-r--r--cts/common/cts_testlist.h30
-rw-r--r--cts/common/dut_common.c28
-rw-r--r--cts/common/th_common.c35
-rwxr-xr-xcts/cts.py443
-rw-r--r--cts/cts.tasklist12
-rw-r--r--cts/gpio/cts.testlist23
-rw-r--r--cts/gpio/dut.c80
-rw-r--r--cts/gpio/th.c74
-rw-r--r--cts/hook/cts.testlist24
-rw-r--r--cts/hook/dut.c165
l---------cts/hook/th.c1
-rw-r--r--cts/i2c/cts.testlist21
-rw-r--r--cts/i2c/cts_i2c.h20
-rw-r--r--cts/i2c/dut.c94
-rw-r--r--cts/i2c/th.c151
-rw-r--r--cts/interrupt/cts.testlist44
-rw-r--r--cts/interrupt/dut.c184
-rw-r--r--cts/interrupt/th.c78
-rw-r--r--cts/meta/cts.testlist52
-rw-r--r--cts/meta/dut.c64
-rw-r--r--cts/meta/th.c59
-rw-r--r--cts/mutex/cts.tasklist14
-rw-r--r--cts/mutex/cts.testlist9
-rw-r--r--cts/mutex/dut.c116
-rw-r--r--cts/mutex/th.c116
-rw-r--r--cts/task/cts.tasklist14
-rw-r--r--cts/task/cts.testlist27
-rw-r--r--cts/task/dut.c144
l---------cts/task/th.c1
-rw-r--r--cts/timer/cts.testlist19
-rw-r--r--cts/timer/dut.c30
-rw-r--r--cts/timer/th.c62
39 files changed, 0 insertions, 2777 deletions
diff --git a/cts/README b/cts/README
deleted file mode 100644
index 3a22e9846f..0000000000
--- a/cts/README
+++ /dev/null
@@ -1,6 +0,0 @@
-The first time you use this with a particular th,
-connect only th and run ./cts/cts.py --th from
-the ec directory.
-
-Then connect both boards and you can run
-./cts/cts to flash both boards. \ No newline at end of file
diff --git a/cts/build.mk b/cts/build.mk
deleted file mode 100644
index 817b69b25c..0000000000
--- a/cts/build.mk
+++ /dev/null
@@ -1,28 +0,0 @@
-# -*- makefile -*-
-# 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.
-
-CFLAGS_CTS=-DCTS_MODULE=$(EMPTY) -DCTS_TASKFILE=cts.tasklist
-
-ifeq "$(CTS_MODULE)" "gpio"
-CFLAGS_CTS+=-DCTS_MODULE_GPIO=$(EMPTY)
-endif
-
-ifeq "$(CTS_MODULE)" "i2c"
-CFLAGS_CTS+=-DCTS_MODULE_I2C=$(EMPTY)
-CONFIG_I2C=y
-ifneq ($(BOARD),stm32l476g-eval)
-CONFIG_I2C_CONTROLLER=y
-endif
-endif
-
-cts-y+=common/cts_common.o
-
-ifeq ($(BOARD),stm32l476g-eval)
- cts-y+=$(CTS_MODULE)/th.o
- cts-y+=common/th_common.o
-else
- cts-y+=$(CTS_MODULE)/dut.o
- cts-y+=common/dut_common.o
-endif
diff --git a/cts/common/__init__.py b/cts/common/__init__.py
deleted file mode 100644
index e69de29bb2..0000000000
--- a/cts/common/__init__.py
+++ /dev/null
diff --git a/cts/common/board.py b/cts/common/board.py
deleted file mode 100644
index d2c8e02b04..0000000000
--- a/cts/common/board.py
+++ /dev/null
@@ -1,388 +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.
-#
-# Ignore indention messages, since legacy scripts use 2 spaces instead of 4.
-# pylint: disable=bad-indentation,docstring-section-indent
-# pylint: disable=docstring-trailing-quotes
-
-# Note: This is a py2/3 compatible file.
-
-from __future__ import print_function
-
-from abc import ABCMeta
-from abc import abstractmethod
-import os
-import shutil
-import subprocess as sp
-import serial
-
-import six
-
-
-OCD_SCRIPT_DIR = '/usr/share/openocd/scripts'
-OPENOCD_CONFIGS = {
- 'stm32l476g-eval': 'board/stm32l4discovery.cfg',
- 'nucleo-f072rb': 'board/st_nucleo_f0.cfg',
- 'nucleo-f411re': 'board/st_nucleo_f4.cfg',
-}
-FLASH_OFFSETS = {
- 'stm32l476g-eval': '0x08000000',
- 'nucleo-f072rb': '0x08000000',
- 'nucleo-f411re': '0x08000000',
-}
-REBOOT_MARKER = 'UART initialized after reboot'
-
-
-def get_subprocess_args():
- if six.PY3:
- return {'encoding': 'utf-8'}
- return {}
-
-
-class Board(six.with_metaclass(ABCMeta, object)):
- """Class representing a single board connected to a host machine.
-
- Attributes:
- board: String containing actual type of board, i.e. nucleo-f072rb
- config: Directory of board config file relative to openocd's
- scripts directory
- hla_serial: String containing board's hla_serial number (if board
- is an stm32 board)
- tty_port: String that is the path to the tty port which board's
- UART outputs to
- tty: String of file descriptor for tty_port
- """
-
- def __init__(self, board, module, hla_serial=None):
- """Initializes a board object with given attributes.
-
- Args:
- board: String containing board name
- module: String of the test module you are building,
- i.e. gpio, timer, etc.
- hla_serial: Serial number if board's adaptor is an HLA
-
- Raises:
- RuntimeError: Board is not supported
- """
- if board not in OPENOCD_CONFIGS:
- msg = 'OpenOcd configuration not found for ' + board
- raise RuntimeError(msg)
- if board not in FLASH_OFFSETS:
- msg = 'Flash offset not found for ' + board
- raise RuntimeError(msg)
- self.board = board
- self.flash_offset = FLASH_OFFSETS[self.board]
- self.openocd_config = OPENOCD_CONFIGS[self.board]
- self.module = module
- self.hla_serial = hla_serial
- self.tty_port = None
- self.tty = None
-
- def reset_log_dir(self):
- """Reset log directory."""
- if os.path.isdir(self.log_dir):
- shutil.rmtree(self.log_dir)
- os.makedirs(self.log_dir)
-
- @staticmethod
- def get_stlink_serials():
- """Gets serial numbers of all st-link v2.1 board attached to host.
-
- Returns:
- List of serials
- """
- usb_args = ['sudo', 'lsusb', '-v', '-d', '0x0483:0x374b']
- st_link_info = sp.check_output(usb_args, **get_subprocess_args())
- st_serials = []
- for line in st_link_info.split('\n'):
- if 'iSerial' not in line:
- continue
- words = line.split()
- if len(words) <= 2:
- continue
- st_serials.append(words[2].strip())
- return st_serials
-
- @abstractmethod
- def get_serial(self):
- """Subclass should implement this."""
- pass
-
- def send_openocd_commands(self, commands):
- """Send a command to the board via openocd.
-
- Args:
- commands: A list of commands to send
-
- Returns:
- True if execution is successful or False otherwise.
- """
- args = ['sudo', 'openocd', '-s', OCD_SCRIPT_DIR,
- '-f', self.openocd_config, '-c', 'hla_serial ' + self.hla_serial]
-
- for cmd in commands:
- args += ['-c', cmd]
- args += ['-c', 'shutdown']
-
- rv = 1
- with open(self.openocd_log, 'a') as output:
- rv = sp.call(args, stdout=output, stderr=sp.STDOUT)
-
- if rv != 0:
- self.dump_openocd_log()
-
- return rv == 0
-
- def dump_openocd_log(self):
- with open(self.openocd_log) as log:
- print(log.read())
-
- def build(self, ec_dir):
- """Builds test suite module for board.
-
- Args:
- ec_dir: String of the ec directory path
-
- Returns:
- True if build is successful or False otherwise.
- """
- cmds = ['make',
- '--directory=' + ec_dir,
- 'BOARD=' + self.board,
- 'CTS_MODULE=' + self.module,
- '-j']
-
- rv = 1
- with open(self.build_log, 'a') as output:
- rv = sp.call(cmds, stdout=output, stderr=sp.STDOUT)
-
- if rv != 0:
- self.dump_build_log()
-
- return rv == 0
-
- def dump_build_log(self):
- with open(self.build_log) as log:
- print(log.read())
-
- def flash(self, image_path):
- """Flashes board with most recent build ec.bin."""
- cmd = ['reset_config connect_assert_srst',
- 'init',
- 'reset init',
- 'flash write_image erase %s %s' % (image_path, self.flash_offset)]
- return self.send_openocd_commands(cmd)
-
- def to_string(self):
- s = ('Type: Board\n'
- 'board: ' + self.board + '\n'
- 'hla_serial: ' + self.hla_serial + '\n'
- 'openocd_config: ' + self.openocd_config + '\n'
- 'tty_port: ' + self.tty_port + '\n'
- 'tty: ' + str(self.tty) + '\n')
- return s
-
- def reset_halt(self):
- """Reset then halt board."""
- return self.send_openocd_commands(['init', 'reset halt'])
-
- def resume(self):
- """Resume halting board."""
- return self.send_openocd_commands(['init', 'resume'])
-
- def setup_tty(self):
- """Call this before calling read_tty for the first time.
-
- This is not in the initialization because caller only should call
- this function after serial numbers are setup
- """
- self.get_serial()
- self.reset_halt()
- self.identify_tty_port()
-
- tty = None
- try:
- tty = serial.Serial(self.tty_port, 115200, timeout=1)
- except serial.SerialException:
- raise ValueError('Failed to open ' + self.tty_port + ' of ' + self.board +
- '. Please make sure the port is available and you have' +
- ' permission to read it. Create dialout group and run:' +
- ' sudo usermod -a -G dialout <username>.')
- self.tty = tty
-
- def read_tty(self, max_boot_count=1):
- """Read info from a serial port described by a file descriptor.
-
- Args:
- max_boot_count: Stop reading if boot count exceeds this number
-
- Returns:
- result: characters read from tty
- boot: boot counts
- """
- buf = []
- line = []
- boot = 0
- while True:
- c = self.tty.read().decode('utf-8')
- if not c:
- break
- line.append(c)
- if c == '\n':
- l = ''.join(line)
- buf.append(l)
- if REBOOT_MARKER in l:
- boot += 1
- line = []
- if boot > max_boot_count:
- break
-
- l = ''.join(line)
- buf.append(l)
- result = ''.join(buf)
-
- return result, boot
-
- def identify_tty_port(self):
- """Saves this board's serial port."""
- dev_dir = '/dev'
- id_prefix = 'ID_SERIAL_SHORT='
- com_devices = [f for f in os.listdir(dev_dir) if f.startswith('ttyACM')]
-
- for device in com_devices:
- self.tty_port = os.path.join(dev_dir, device)
- properties = sp.check_output(
- ['udevadm', 'info', '-a', '-n', self.tty_port, '--query=property'],
- **get_subprocess_args())
- for line in [l.strip() for l in properties.split('\n')]:
- if line.startswith(id_prefix):
- if self.hla_serial == line[len(id_prefix):]:
- return
-
- # If we get here without returning, something is wrong
- raise RuntimeError('The device dev path could not be found')
-
- def close_tty(self):
- """Close tty."""
- self.tty.close()
-
-
-class TestHarness(Board):
- """Subclass of Board representing a Test Harness.
-
- Attributes:
- serial_path: Path to file containing serial number
- """
-
- def __init__(self, board, module, log_dir, serial_path):
- """Initializes a board object with given attributes.
-
- Args:
- board: board name
- module: module name
- log_dir: Directory where log file is stored
- serial_path: Path to file containing serial number
- """
- Board.__init__(self, board, module)
- self.log_dir = log_dir
- self.openocd_log = os.path.join(log_dir, 'openocd_th.log')
- self.build_log = os.path.join(log_dir, 'build_th.log')
- self.serial_path = serial_path
- self.reset_log_dir()
-
- def get_serial(self):
- """Loads serial number from saved location."""
- if self.hla_serial:
- return # serial was already loaded
- try:
- with open(self.serial_path, mode='r') as f:
- s = f.read()
- self.hla_serial = s.strip()
- return
- except IOError:
- msg = ('Your TH board has not been identified.\n'
- 'Connect only TH and run the script --setup, then try again.')
- raise RuntimeError(msg)
-
- def save_serial(self):
- """Saves the TH serial number to a file."""
- serials = Board.get_stlink_serials()
- if len(serials) > 1:
- msg = ('There are more than one test board connected to the host.'
- '\nConnect only the test harness and remove other boards.')
- raise RuntimeError(msg)
- if len(serials) < 1:
- msg = ('No test boards were found.\n'
- 'Check boards are connected.')
- raise RuntimeError(msg)
-
- s = serials[0]
- serial_dir = os.path.dirname(self.serial_path)
- if not os.path.exists(serial_dir):
- os.makedirs(serial_dir)
- with open(self.serial_path, mode='w') as f:
- f.write(s)
- self.hla_serial = s
-
- print('Your TH serial', s, 'has been saved as', self.serial_path)
- return
-
-
-class DeviceUnderTest(Board):
- """Subclass of Board representing a DUT board.
-
- Attributes:
- th: Reference to test harness board to which this DUT is attached
- """
-
- def __init__(self, board, th, module, log_dir, hla_ser=None):
- """Initializes a DUT object.
-
- Args:
- board: String containing board name
- th: Reference to test harness board to which this DUT is attached
- module: module name
- log_dir: Directory where log file is stored
- hla_ser: Serial number if board uses an HLA adaptor
- """
- Board.__init__(self, board, module, hla_serial=hla_ser)
- self.th = th
- self.log_dir = log_dir
- self.openocd_log = os.path.join(log_dir, 'openocd_dut.log')
- self.build_log = os.path.join(log_dir, 'build_dut.log')
- self.reset_log_dir()
-
- def get_serial(self):
- """Get serial number.
-
- Precondition: The DUT and TH must both be connected, and th.hla_serial
- must hold the correct value (the th's serial #)
-
- Raises:
- RuntimeError: DUT isn't found or multiple DUTs are found.
- """
- if self.hla_serial is not None:
- # serial was already set ('' is a valid serial)
- return
-
- serials = Board.get_stlink_serials()
- dut = [s for s in serials if self.th.hla_serial != s]
-
- # If len(dut) is 0 then your dut doesn't use an st-link device, so we
- # don't have to worry about its serial number
- if not dut:
- msg = ('Failed to find serial for DUT.\n'
- 'Is ' + self.board + ' connected?')
- raise RuntimeError(msg)
- if len(dut) > 1:
- msg = ('Found multiple DUTs.\n'
- 'You can connect only one DUT at a time. This may be caused by\n'
- 'an incorrect TH serial. Check if ' + self.th.serial_path + '\n'
- 'contains a correct serial.')
- raise RuntimeError(msg)
-
- # Found your other st-link device serial!
- self.hla_serial = dut[0]
- return
diff --git a/cts/common/cts.rc b/cts/common/cts.rc
deleted file mode 100644
index 264b982655..0000000000
--- a/cts/common/cts.rc
+++ /dev/null
@@ -1,35 +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.
- */
-
-/*
- * This file is included by cts_common.h as an enumeration of error codes,
- * as well as being processed by cts.py to get error code names. The format
- * must be either of the followings:
- *
- * CTS_RC_<NAME>,
- * CTS_RC_<NAME> = X,
- *
- * where <NAME> will be printed on the result screen.
- */
-
-/*
- * Host only return codes. Should not be needed by th.c or dut.c.
- */
-/* Test didn't run */
-CTS_RC_DID_NOT_START = -1,
-/* Test didn't end */
-CTS_RC_DID_NOT_END = -2,
-/* Results were reported twice or more */
-CTS_RC_DUPLICATE_RUN = -3,
-/* Error in parsing return code. Probably it was null or not an integer. */
-CTS_RC_INVALID_RC = -4,
-
-/*
- * Regular return codes. Used by DUT and TH.
- */
-CTS_RC_SUCCESS = 0,
-CTS_RC_FAILURE,
-CTS_RC_BAD_SYNC,
-CTS_RC_TIMEOUT,
diff --git a/cts/common/cts_common.c b/cts/common/cts_common.c
deleted file mode 100644
index 8975636655..0000000000
--- a/cts/common/cts_common.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Copyright 2017 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 "console.h"
-#include "cts_common.h"
-
-__attribute__((weak)) void clean_state(void)
-{
- /* Each test overrides as needed */
-}
-
-void cts_main_loop(const struct cts_test* tests, const char *name)
-{
- enum cts_rc rc;
- int i;
-
- cflush();
- for (i = 0; i < cts_test_count; i++) {
- CPRINTF("\n%s start\n", tests[i].name);
- cflush();
- clean_state();
- sync();
- rc = tests[i].run();
- CPRINTF("\n%s end %d\n", tests[i].name, rc);
- cflush();
- }
-
- CPRINTS("%s test suite finished", name);
-}
diff --git a/cts/common/cts_common.h b/cts/common/cts_common.h
deleted file mode 100644
index 13a435e655..0000000000
--- a/cts/common/cts_common.h
+++ /dev/null
@@ -1,55 +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.
- */
-
-#ifndef __CTS_COMMON_H
-#define __CTS_COMMON_H
-
-#include "console.h"
-
-/* Console output macros */
-#define CPUTS(outstr) cputs(CC_SYSTEM, outstr)
-#define CPRINTF(format, args...) cprintf(CC_SYSTEM, format, ## args)
-#define CPRINTS(format, args...) cprints(CC_SYSTEM, format, ## args)
-#define CPRINTL(format, args...) CPRINTS("%s:%d: "format, \
- __func__, __LINE__, ## args)
-
-#define READ_WAIT_TIME_MS 100
-#define CTS_INTERRUPT_TRIGGER_DELAY_US (250 * MSEC)
-
-enum cts_rc {
- #include "cts.rc"
-};
-
-struct cts_test {
- enum cts_rc (*run)(void);
- char *name;
-};
-
-extern const int cts_test_count;
-
-/**
- * Main loop where each test in a suite is executed
- *
- * A test suite can implement its custom loop as needed.
- *
- * Args:
- * @test: List of tests to run
- * @name: Name of the test to be printed on EC console
- */
-void cts_main_loop(const struct cts_test* tests, const char *name);
-
-/**
- * Callback function called at the beginning of the main loop
- */
-void clean_state(void);
-
-/**
- * Synchronize DUT and TH
- *
- * @return CTS_RC_SUCCESS if sync is successful
- */
-enum cts_rc sync(void);
-
-#endif
diff --git a/cts/common/cts_testlist.h b/cts/common/cts_testlist.h
deleted file mode 100644
index 1586c1348e..0000000000
--- a/cts/common/cts_testlist.h
+++ /dev/null
@@ -1,30 +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 "util.h"
-
-/*
- * CTS_TEST macro takes the following arguments:
- *
- * @test: Function running the test
- * @th_rc: Expected CTS_RC_* from TH
- * @th_string: Expected string printed by TH
- * @dut_rc: Expected CTR_RC_* from DUT
- * @dut_string: Expected string printed by DUT
- *
- * CTS_TEST macro is processed in multiple places. One is here for creating
- * an array of test functions. Only @test is used.
- *
- * Another is in cts.py for evaluating the test results against expectations.
- */
-
-#undef CTS_TEST
-#define CTS_TEST(test, th_rc, th_string, dut_rc, dut_string) \
- {test, STRINGIFY(test)},
-struct cts_test tests[] = {
-#include "cts.testlist"
-};
-
-const int cts_test_count = ARRAY_SIZE(tests);
diff --git a/cts/common/dut_common.c b/cts/common/dut_common.c
deleted file mode 100644
index 6e62a280e2..0000000000
--- a/cts/common/dut_common.c
+++ /dev/null
@@ -1,28 +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 "cts_common.h"
-#include "gpio.h"
-#include "watchdog.h"
-
-enum cts_rc sync(void)
-{
- int input_level;
-
- gpio_set_level(GPIO_HANDSHAKE_OUTPUT, 0);
- do {
- watchdog_reload();
- input_level = gpio_get_level(GPIO_HANDSHAKE_INPUT);
- } while (!input_level);
- gpio_set_level(GPIO_HANDSHAKE_OUTPUT, 1);
- do {
- watchdog_reload();
- input_level = gpio_get_level(GPIO_HANDSHAKE_INPUT);
- } while (input_level);
- gpio_set_level(GPIO_HANDSHAKE_OUTPUT, 0);
-
- return CTS_RC_SUCCESS;
-}
-
diff --git a/cts/common/th_common.c b/cts/common/th_common.c
deleted file mode 100644
index 1d692b7843..0000000000
--- a/cts/common/th_common.c
+++ /dev/null
@@ -1,35 +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 "gpio.h"
-#include "timer.h"
-#include "watchdog.h"
-#include "cts_common.h"
-
-/* Return SUCCESS if and only if we reach end of function
- * Returning success here means sync was successful
- */
-enum cts_rc sync(void)
-{
- int input_level;
-
- gpio_set_level(GPIO_HANDSHAKE_OUTPUT, 0);
- do {
- watchdog_reload();
- input_level = gpio_get_level(GPIO_HANDSHAKE_INPUT);
- } while (input_level);
- gpio_set_level(GPIO_HANDSHAKE_OUTPUT, 1);
- do {
- watchdog_reload();
- input_level = gpio_get_level(GPIO_HANDSHAKE_INPUT);
- } while (!input_level);
- gpio_set_level(GPIO_HANDSHAKE_OUTPUT, 0);
- do {
- watchdog_reload();
- input_level = gpio_get_level(GPIO_HANDSHAKE_INPUT);
- } while (input_level);
-
- return CTS_RC_SUCCESS;
-}
diff --git a/cts/cts.py b/cts/cts.py
deleted file mode 100755
index c3e0335cab..0000000000
--- a/cts/cts.py
+++ /dev/null
@@ -1,443 +0,0 @@
-#!/usr/bin/env python
-#
-# 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.
-#
-# Ignore indention messages, since legacy scripts use 2 spaces instead of 4.
-# pylint: disable=bad-indentation,docstring-section-indent
-# pylint: disable=docstring-trailing-quotes
-
-# A script which builds, flashes, and runs EC CTS
-#
-# Software prerequisites:
-# - openocd version 0.10 or above
-# - lsusb
-# - udevadm
-#
-# To try it out, hook two boards (DEFAULT_TH and DEFAULT_DUT) with USB cables
-# to the host and execute the script:
-# $ ./cts.py
-# It'll run mock tests. The result will be stored in CTS_TEST_RESULT_DIR.
-
-# Note: This is a py2/3 compatible file.
-
-from __future__ import print_function
-
-import argparse
-import os
-import shutil
-import time
-import common.board as board
-
-
-CTS_RC_PREFIX = 'CTS_RC_'
-DEFAULT_TH = 'stm32l476g-eval'
-DEFAULT_DUT = 'nucleo-f072rb'
-MAX_SUITE_TIME_SEC = 5
-CTS_TEST_RESULT_DIR = '/tmp/ects'
-
-# Host only return codes. Make sure they match values in cts.rc
-CTS_RC_DID_NOT_START = -1 # test did not run.
-CTS_RC_DID_NOT_END = -2 # test did not run.
-CTS_RC_DUPLICATE_RUN = -3 # test was run multiple times.
-CTS_RC_INVALID_RETURN_CODE = -4 # failed to parse return code
-
-
-class Cts(object):
- """Class that represents a eCTS run.
-
- Attributes:
- dut: DeviceUnderTest object representing DUT
- th: TestHarness object representing a test harness
- module: Name of module to build/run tests for
- testlist: List of strings of test names contained in given module
- return_codes: Dict of strings of return codes, with a code's integer
- value being the index for the corresponding string representation
- """
-
- def __init__(self, ec_dir, th, dut, module):
- """Initializes cts class object with given arguments.
-
- Args:
- ec_dir: Path to ec directory
- th: Name of the test harness board
- dut: Name of the device under test board
- module: Name of module to build/run tests for (e.g. gpio, interrupt)
- """
- self.results_dir = os.path.join(CTS_TEST_RESULT_DIR, dut, module)
- if os.path.isdir(self.results_dir):
- shutil.rmtree(self.results_dir)
- else:
- os.makedirs(self.results_dir)
- self.ec_dir = ec_dir
- self.module = module
- serial_path = os.path.join(CTS_TEST_RESULT_DIR, 'th_serial')
- self.th = board.TestHarness(th, module, self.results_dir, serial_path)
- self.dut = board.DeviceUnderTest(dut, self.th, module, self.results_dir)
- cts_dir = os.path.join(self.ec_dir, 'cts')
- testlist_path = os.path.join(cts_dir, self.module, 'cts.testlist')
- return_codes_path = os.path.join(cts_dir, 'common', 'cts.rc')
- self.get_return_codes(return_codes_path)
- self.testlist = self.get_macro_args(testlist_path, 'CTS_TEST')
-
- def build(self):
- """Build images for DUT and TH."""
- print('Building DUT image...')
- if not self.dut.build(self.ec_dir):
- raise RuntimeError('Building module %s for DUT failed' % (self.module))
- print('Building TH image...')
- if not self.th.build(self.ec_dir):
- raise RuntimeError('Building module %s for TH failed' % (self.module))
-
- def flash_boards(self):
- """Flashes TH and DUT with their most recently built ec.bin."""
- cts_module = 'cts_' + self.module
- image_path = os.path.join('build', self.th.board, cts_module, 'ec.bin')
- self.identify_boards()
- print('Flashing TH with', image_path)
- if not self.th.flash(image_path):
- raise RuntimeError('Flashing TH failed')
- image_path = os.path.join('build', self.dut.board, cts_module, 'ec.bin')
- print('Flashing DUT with', image_path)
- if not self.dut.flash(image_path):
- raise RuntimeError('Flashing DUT failed')
-
- def setup(self):
- """Setup boards."""
- self.th.save_serial()
-
- def identify_boards(self):
- """Updates serials of TH and DUT in that order (order matters)."""
- self.th.get_serial()
- self.dut.get_serial()
-
- def get_macro_args(self, filepath, macro):
- """Get list of args of a macro in a file when macro.
-
- Args:
- filepath: String containing absolute path to the file
- macro: String containing text of macro to get args of
-
- Returns:
- List of dictionaries where each entry is:
- 'name': Test name,
- 'th_string': Expected string from TH,
- 'dut_string': Expected string from DUT,
- """
- tests = []
- with open(filepath, 'r') as f:
- lines = f.readlines()
- joined = ''.join(lines).replace('\\\n', '').splitlines()
- for l in joined:
- if not l.strip().startswith(macro):
- continue
- d = {}
- l = l.strip()[len(macro):]
- l = l.strip('()').split(',')
- d['name'] = l[0].strip()
- d['th_rc'] = self.get_return_code_value(l[1].strip().strip('"'))
- d['th_string'] = l[2].strip().strip('"')
- d['dut_rc'] = self.get_return_code_value(l[3].strip().strip('"'))
- d['dut_string'] = l[4].strip().strip('"')
- tests.append(d)
- return tests
-
- def get_return_codes(self, filepath):
- """Read return code names from the return code definition file."""
- self.return_codes = {}
- val = 0
- with open(filepath, 'r') as f:
- for line in f:
- line = line.strip()
- if not line.startswith(CTS_RC_PREFIX):
- continue
- line = line.split(',')[0]
- if '=' in line:
- tokens = line.split('=')
- line = tokens[0].strip()
- val = int(tokens[1].strip())
- self.return_codes[line] = val
- val += 1
-
- def parse_output(self, output):
- """Parse console output from DUT or TH.
-
- Args:
- output: String containing consoule output
-
- Returns:
- List of dictionaries where each key and value are:
- name = 'ects_test_x',
- started = True/False,
- ended = True/False,
- rc = CTS_RC_*,
- output = All text between 'ects_test_x start' and 'ects_test_x end'
- """
- results = []
- i = 0
- for test in self.testlist:
- results.append({})
- results[i]['name'] = test['name']
- results[i]['started'] = False
- results[i]['rc'] = CTS_RC_DID_NOT_START
- results[i]['string'] = False
- results[i]['output'] = []
- i += 1
-
- i = 0
- for ln in [ln.strip() for ln in output.split('\n')]:
- if i + 1 > len(results):
- break
- tokens = ln.split()
- if len(tokens) >= 2:
- if tokens[0].strip() == results[i]['name']:
- if tokens[1].strip() == 'start':
- # start line found
- if results[i]['started']: # Already started
- results[i]['rc'] = CTS_RC_DUPLICATE_RUN
- else:
- results[i]['rc'] = CTS_RC_DID_NOT_END
- results[i]['started'] = True
- continue
- elif results[i]['started'] and tokens[1].strip() == 'end':
- # end line found
- results[i]['rc'] = CTS_RC_INVALID_RETURN_CODE
- if len(tokens) == 3:
- try:
- results[i]['rc'] = int(tokens[2].strip())
- except ValueError:
- pass
- # Since index is incremented when 'end' is encountered, we don't
- # need to check duplicate 'end'.
- i += 1
- continue
- if results[i]['started']:
- results[i]['output'].append(ln)
-
- return results
-
- def get_return_code_name(self, code, strip_prefix=False):
- name = ''
- for k, v in self.return_codes.items():
- if v == code:
- if strip_prefix:
- name = k[len(CTS_RC_PREFIX):]
- else:
- name = k
- return name
-
- def get_return_code_value(self, name):
- if name:
- return self.return_codes[name]
- return 0
-
- def evaluate_run(self, dut_output, th_output):
- """Parse outputs to derive test results.
-
- Args:
- dut_output: String output of DUT
- th_output: String output of TH
-
- Returns:
- th_results: list of test results for TH
- dut_results: list of test results for DUT
- """
- th_results = self.parse_output(th_output)
- dut_results = self.parse_output(dut_output)
-
- # Search for expected string in each output
- for i, v in enumerate(self.testlist):
- if v['th_string'] in th_results[i]['output'] or not v['th_string']:
- th_results[i]['string'] = True
- if v['dut_string'] in dut_results[i]['output'] or not v['dut_string']:
- dut_results[i]['string'] = True
-
- return th_results, dut_results
-
- def print_result(self, th_results, dut_results):
- """Print results to the screen.
-
- Args:
- th_results: list of test results for TH
- dut_results: list of test results for DUT
- """
- len_test_name = max(len(s['name']) for s in self.testlist)
- len_code_name = max(len(self.get_return_code_name(v, True))
- for v in self.return_codes.values())
-
- head = '{:^' + str(len_test_name) + '} '
- head += '{:^' + str(len_code_name) + '} '
- head += '{:^' + str(len_code_name) + '}'
- head += '{:^' + str(len(' TH_STR')) + '}'
- head += '{:^' + str(len(' DUT_STR')) + '}'
- head += '{:^' + str(len(' RESULT')) + '}\n'
- fmt = '{:' + str(len_test_name) + '} '
- fmt += '{:>' + str(len_code_name) + '} '
- fmt += '{:>' + str(len_code_name) + '}'
- fmt += '{:>' + str(len(' TH_STR')) + '}'
- fmt += '{:>' + str(len(' DUT_STR')) + '}'
- fmt += '{:>' + str(len(' RESULT')) + '}\n'
-
- self.formatted_results = head.format(
- 'TEST NAME', 'TH_RC', 'DUT_RC',
- ' TH_STR', ' DUT_STR', ' RESULT')
- for i, d in enumerate(dut_results):
- th_cn = self.get_return_code_name(th_results[i]['rc'], True)
- dut_cn = self.get_return_code_name(dut_results[i]['rc'], True)
- th_res = self.evaluate_result(th_results[i],
- self.testlist[i]['th_rc'],
- self.testlist[i]['th_string'])
- dut_res = self.evaluate_result(dut_results[i],
- self.testlist[i]['dut_rc'],
- self.testlist[i]['dut_string'])
- self.formatted_results += fmt.format(
- d['name'], th_cn, dut_cn,
- 'YES' if th_results[i]['string'] else 'NO',
- 'YES' if dut_results[i]['string'] else 'NO',
- 'PASS' if th_res and dut_res else 'FAIL')
-
- def evaluate_result(self, result, expected_rc, expected_string):
- if result['rc'] != expected_rc:
- return False
- if expected_string and expected_string not in result['output']:
- return False
- return True
-
- def run(self):
- """Resets boards, records test results in results dir."""
- print('Reading serials...')
- self.identify_boards()
- print('Opening DUT tty...')
- self.dut.setup_tty()
- print('Opening TH tty...')
- self.th.setup_tty()
-
- # Boards might be still writing to tty. Wait a few seconds before flashing.
- time.sleep(3)
-
- # clear buffers
- print('Clearing DUT tty...')
- self.dut.read_tty()
- print('Clearing TH tty...')
- self.th.read_tty()
-
- # Resets the boards and allows them to run tests
- # Due to current (7/27/16) version of sync function,
- # both boards must be rest and halted, with the th
- # resuming first, in order for the test suite to run in sync
- print('Halting TH...')
- if not self.th.reset_halt():
- raise RuntimeError('Failed to halt TH')
- print('Halting DUT...')
- if not self.dut.reset_halt():
- raise RuntimeError('Failed to halt DUT')
- print('Resuming TH...')
- if not self.th.resume():
- raise RuntimeError('Failed to resume TH')
- print('Resuming DUT...')
- if not self.dut.resume():
- raise RuntimeError('Failed to resume DUT')
-
- time.sleep(MAX_SUITE_TIME_SEC)
-
- print('Reading DUT tty...')
- dut_output, _ = self.dut.read_tty()
- self.dut.close_tty()
- print('Reading TH tty...')
- th_output, _ = self.th.read_tty()
- self.th.close_tty()
-
- print('Halting TH...')
- if not self.th.reset_halt():
- raise RuntimeError('Failed to halt TH')
- print('Halting DUT...')
- if not self.dut.reset_halt():
- raise RuntimeError('Failed to halt DUT')
-
- if not dut_output or not th_output:
- raise ValueError('Output missing from boards. If you have a process '
- 'reading ttyACMx, please kill that process and try '
- 'again.')
-
- print('Pursing results...')
- th_results, dut_results = self.evaluate_run(dut_output, th_output)
-
- # Print out results
- self.print_result(th_results, dut_results)
-
- # Write results
- dest = os.path.join(self.results_dir, 'results.log')
- with open(dest, 'w') as fl:
- fl.write(self.formatted_results)
-
- # Write UART outputs
- dest = os.path.join(self.results_dir, 'uart_th.log')
- with open(dest, 'w') as fl:
- fl.write(th_output)
- dest = os.path.join(self.results_dir, 'uart_dut.log')
- with open(dest, 'w') as fl:
- fl.write(dut_output)
-
- print(self.formatted_results)
-
- # TODO(chromium:735652): Should set exit code for the shell
-
-
-def main():
- ec_dir = os.path.realpath(os.path.join(
- os.path.dirname(os.path.abspath(__file__)), '..'))
- os.chdir(ec_dir)
-
- dut = DEFAULT_DUT
- module = 'meta'
-
- parser = argparse.ArgumentParser(description='Used to build/flash boards')
- parser.add_argument('-d',
- '--dut',
- help='Specify DUT you want to build/flash')
- parser.add_argument('-m',
- '--module',
- help='Specify module you want to build/flash')
- parser.add_argument('-s',
- '--setup',
- action='store_true',
- help='Connect only the TH to save its serial')
- parser.add_argument('-b',
- '--build',
- action='store_true',
- help='Build test suite (no flashing)')
- parser.add_argument('-f',
- '--flash',
- action='store_true',
- help='Flash boards with most recent images')
- parser.add_argument('-r',
- '--run',
- action='store_true',
- help='Run tests without flashing')
-
- args = parser.parse_args()
-
- if args.module:
- module = args.module
-
- if args.dut:
- dut = args.dut
-
- cts = Cts(ec_dir, DEFAULT_TH, dut=dut, module=module)
-
- if args.setup:
- cts.setup()
- elif args.build:
- cts.build()
- elif args.flash:
- cts.flash_boards()
- elif args.run:
- cts.run()
- else:
- cts.build()
- cts.flash_boards()
- cts.run()
-
-if __name__ == '__main__':
- main()
diff --git a/cts/cts.tasklist b/cts/cts.tasklist
deleted file mode 100644
index 152b0d02b2..0000000000
--- a/cts/cts.tasklist
+++ /dev/null
@@ -1,12 +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.
- */
-
-/**
- * See CONFIG_TASK_LIST in config.h for details.
- */
-
-/* Default task list for suites which don't define its own */
-#define CONFIG_CTS_TASK_LIST \
- TASK_ALWAYS(CTS, cts_task, NULL, TASK_STACK_SIZE)
diff --git a/cts/gpio/cts.testlist b/cts/gpio/cts.testlist
deleted file mode 100644
index 113d2b405f..0000000000
--- a/cts/gpio/cts.testlist
+++ /dev/null
@@ -1,23 +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 whether sync completes successfully */
-CTS_TEST(sync_test,,,,)
-
-/* Check if the dut can set a line low */
-CTS_TEST(set_low_test,,,,)
-
-/* Check if the dut can set a line high */
-CTS_TEST(set_high_test,,,,)
-
-/* Check if the dut can read a line that is low */
-CTS_TEST(read_high_test,,,,)
-
-/* Check if the dut can read a line that is high */
-CTS_TEST(read_low_test,,,,)
-
-/* Check if the dut reads its true pin level (success)
- or its register level when configured as a low open drain output pin */
-CTS_TEST(od_read_high_test,,,,)
diff --git a/cts/gpio/dut.c b/cts/gpio/dut.c
deleted file mode 100644
index 828996db8e..0000000000
--- a/cts/gpio/dut.c
+++ /dev/null
@@ -1,80 +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 "watchdog.h"
-#include "uart.h"
-#include "task.h"
-#include "timer.h"
-#include "watchdog.h"
-#include "cts_common.h"
-
-enum cts_rc sync_test(void)
-{
- return CTS_RC_SUCCESS;
-}
-
-enum cts_rc set_high_test(void)
-{
- gpio_set_flags(GPIO_OUTPUT_TEST, GPIO_ODR_LOW);
- gpio_set_level(GPIO_OUTPUT_TEST, 1);
- msleep(READ_WAIT_TIME_MS*2);
- return CTS_RC_SUCCESS;
-}
-
-enum cts_rc set_low_test(void)
-{
- gpio_set_flags(GPIO_OUTPUT_TEST, GPIO_ODR_LOW);
- gpio_set_level(GPIO_OUTPUT_TEST, 0);
- msleep(READ_WAIT_TIME_MS*2);
- return CTS_RC_SUCCESS;
-}
-
-enum cts_rc read_high_test(void)
-{
- int level;
-
- gpio_set_flags(GPIO_INPUT_TEST, GPIO_INPUT | GPIO_PULL_UP);
- msleep(READ_WAIT_TIME_MS);
- level = gpio_get_level(GPIO_INPUT_TEST);
- if (level)
- return CTS_RC_SUCCESS;
- else
- return CTS_RC_FAILURE;
-}
-
-enum cts_rc read_low_test(void)
-{
- int level;
-
- gpio_set_flags(GPIO_INPUT_TEST, GPIO_INPUT | GPIO_PULL_UP);
- msleep(READ_WAIT_TIME_MS);
- level = gpio_get_level(GPIO_INPUT_TEST);
- if (!level)
- return CTS_RC_SUCCESS;
- else
- return CTS_RC_FAILURE;
-}
-
-enum cts_rc od_read_high_test(void)
-{
- int level;
-
- gpio_set_flags(GPIO_OUTPUT_TEST, GPIO_ODR_HIGH | GPIO_PULL_UP);
- msleep(READ_WAIT_TIME_MS);
- level = gpio_get_level(GPIO_OUTPUT_TEST);
- if (!level)
- return CTS_RC_SUCCESS;
- else
- return CTS_RC_FAILURE;
-}
-
-#include "cts_testlist.h"
-
-void cts_task(void)
-{
- cts_main_loop(tests, "GPIO");
- task_wait_event(-1);
-}
diff --git a/cts/gpio/th.c b/cts/gpio/th.c
deleted file mode 100644
index 6c628b0ad5..0000000000
--- a/cts/gpio/th.c
+++ /dev/null
@@ -1,74 +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 "watchdog.h"
-#include "uart.h"
-#include "task.h"
-#include "timer.h"
-#include "watchdog.h"
-#include "cts_common.h"
-
-enum cts_rc sync_test(void)
-{
- return CTS_RC_SUCCESS;
-}
-
-enum cts_rc set_high_test(void)
-{
- int level;
-
- gpio_set_flags(GPIO_INPUT_TEST, GPIO_INPUT | GPIO_PULL_UP);
- msleep(READ_WAIT_TIME_MS);
- level = gpio_get_level(GPIO_INPUT_TEST);
- if (level)
- return CTS_RC_SUCCESS;
- else
- return CTS_RC_FAILURE;
-}
-
-enum cts_rc set_low_test(void)
-{
- int level;
-
- gpio_set_flags(GPIO_INPUT_TEST, GPIO_INPUT | GPIO_PULL_UP);
- msleep(READ_WAIT_TIME_MS);
- level = gpio_get_level(GPIO_INPUT_TEST);
- if (!level)
- return CTS_RC_SUCCESS;
- else
- return CTS_RC_FAILURE;
-}
-
-enum cts_rc read_high_test(void)
-{
- gpio_set_flags(GPIO_OUTPUT_TEST, GPIO_ODR_LOW);
- gpio_set_level(GPIO_OUTPUT_TEST, 1);
- msleep(READ_WAIT_TIME_MS*2);
- return CTS_RC_SUCCESS;
-}
-
-enum cts_rc read_low_test(void)
-{
- gpio_set_flags(GPIO_OUTPUT_TEST, GPIO_ODR_LOW);
- gpio_set_level(GPIO_OUTPUT_TEST, 0);
- msleep(READ_WAIT_TIME_MS*2);
- return CTS_RC_SUCCESS;
-}
-
-enum cts_rc od_read_high_test(void)
-{
- gpio_set_flags(GPIO_INPUT_TEST, GPIO_OUTPUT | GPIO_ODR_LOW);
- msleep(READ_WAIT_TIME_MS*2);
- return CTS_RC_SUCCESS;
-}
-
-#include "cts_testlist.h"
-
-void cts_task(void)
-{
- cts_main_loop(tests, "GPIO");
- task_wait_event(-1);
-}
diff --git a/cts/hook/cts.testlist b/cts/hook/cts.testlist
deleted file mode 100644
index 97b25575d4..0000000000
--- a/cts/hook/cts.testlist
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Copyright 2017 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 HOOK_INIT
- */
-CTS_TEST(test_init_hook,,,,)
-
-/*
- * Test HOOK_TICK and HOOK_SECOND
- */
-CTS_TEST(test_ticks,,,,)
-
-/*
- * Test hook priority
- */
-CTS_TEST(test_priority,,,,)
-
-/*
- * Test deferred calls
- */
-CTS_TEST(test_deferred,,,,) \ No newline at end of file
diff --git a/cts/hook/dut.c b/cts/hook/dut.c
deleted file mode 100644
index f3a52ddaf4..0000000000
--- a/cts/hook/dut.c
+++ /dev/null
@@ -1,165 +0,0 @@
-/* Copyright 2013 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 hooks.
- */
-
-#include "common.h"
-#include "console.h"
-#include "cts_common.h"
-#include "hooks.h"
-#include "task.h"
-#include "timer.h"
-#include "util.h"
-#include "watchdog.h"
-
-static int init_hook_count;
-static int tick_hook_count;
-static int tick2_hook_count;
-static int tick_count_seen_by_tick2;
-static timestamp_t tick_time[2];
-static int second_hook_count;
-static timestamp_t second_time[2];
-static int deferred_call_count;
-
-static void init_hook(void)
-{
- init_hook_count++;
-}
-DECLARE_HOOK(HOOK_INIT, init_hook, HOOK_PRIO_DEFAULT);
-
-static void tick_hook(void)
-{
- tick_hook_count++;
- tick_time[0] = tick_time[1];
- tick_time[1] = get_time();
-}
-DECLARE_HOOK(HOOK_TICK, tick_hook, HOOK_PRIO_DEFAULT);
-
-static void tick2_hook(void)
-{
- tick2_hook_count++;
- tick_count_seen_by_tick2 = tick_hook_count;
-}
-/* tick2_hook() prio means it should be called after tick_hook() */
-DECLARE_HOOK(HOOK_TICK, tick2_hook, HOOK_PRIO_DEFAULT + 1);
-
-static void second_hook(void)
-{
- second_hook_count++;
- second_time[0] = second_time[1];
- second_time[1] = get_time();
-}
-DECLARE_HOOK(HOOK_SECOND, second_hook, HOOK_PRIO_DEFAULT);
-
-static void deferred_func(void)
-{
- deferred_call_count++;
-}
-DECLARE_DEFERRED(deferred_func);
-
-static void invalid_deferred_func(void)
-{
- deferred_call_count++;
-}
-
-static const struct deferred_data invalid_deferred_func_data = {
- invalid_deferred_func
-};
-
-static enum cts_rc test_init_hook(void)
-{
- if (init_hook_count != 1)
- return CTS_RC_FAILURE;
- return CTS_RC_SUCCESS;
-}
-
-static enum cts_rc test_ticks(void)
-{
- int64_t interval;
- int error_pct;
-
- /*
- * HOOK_SECOND must have been fired at least once when HOOK
- * task starts. We only need to wait for just more than a second
- * to allow it fires for the second time.
- */
- msleep(1300);
-
- interval = tick_time[1].val - tick_time[0].val;
- error_pct = (interval - HOOK_TICK_INTERVAL) * 100 /
- HOOK_TICK_INTERVAL;
- if (error_pct < -10 || 10 < error_pct) {
- CPRINTS("tick error=%d%% interval=%lld", error_pct, interval);
- return CTS_RC_FAILURE;
- }
-
- interval = second_time[1].val - second_time[0].val;
- error_pct = (interval - SECOND) * 100 / SECOND;
- if (error_pct < -10 || 10 < error_pct) {
- CPRINTS("second error=%d%% interval=%lld", error_pct, interval);
- return CTS_RC_FAILURE;
- }
-
- return CTS_RC_SUCCESS;
-}
-
-static enum cts_rc test_priority(void)
-{
- usleep(HOOK_TICK_INTERVAL);
- if (tick_hook_count != tick2_hook_count)
- return CTS_RC_FAILURE;
- if (tick_hook_count != tick_count_seen_by_tick2)
- return CTS_RC_FAILURE;
- return CTS_RC_SUCCESS;
-}
-
-static enum cts_rc test_deferred(void)
-{
- deferred_call_count = 0;
- hook_call_deferred(&deferred_func_data, 50 * MSEC);
- if (deferred_call_count != 0) {
- CPRINTL("deferred_call_count=%d", deferred_call_count);
- return CTS_RC_FAILURE;
- }
- msleep(100);
- if (deferred_call_count != 1) {
- CPRINTL("deferred_call_count=%d", deferred_call_count);
- return CTS_RC_FAILURE;
- }
-
- /* Test cancellation */
- deferred_call_count = 0;
- hook_call_deferred(&deferred_func_data, 50 * MSEC);
- msleep(25);
- hook_call_deferred(&deferred_func_data, -1);
- msleep(75);
- if (deferred_call_count != 0) {
- CPRINTL("deferred_call_count=%d", deferred_call_count);
- return CTS_RC_FAILURE;
- }
-
- /* Invalid deferred function */
- deferred_call_count = 0;
- if (hook_call_deferred(&invalid_deferred_func_data, 50 * MSEC)
- == EC_SUCCESS) {
- CPRINTL("non_deferred_func_data");
- return CTS_RC_FAILURE;
- }
- msleep(100);
- if (deferred_call_count != 0) {
- CPRINTL("deferred_call_count=%d", deferred_call_count);
- return CTS_RC_FAILURE;
- }
-
- return CTS_RC_SUCCESS;
-}
-
-#include "cts_testlist.h"
-
-void cts_task(void)
-{
- cts_main_loop(tests, "Hook");
- task_wait_event(-1);
-}
diff --git a/cts/hook/th.c b/cts/hook/th.c
deleted file mode 120000
index 41eab28462..0000000000
--- a/cts/hook/th.c
+++ /dev/null
@@ -1 +0,0 @@
-dut.c \ No newline at end of file
diff --git a/cts/i2c/cts.testlist b/cts/i2c/cts.testlist
deleted file mode 100644
index 7b6461e84d..0000000000
--- a/cts/i2c/cts.testlist
+++ /dev/null
@@ -1,21 +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 i2c write for 8, 16, and 32 bits. DUT runs as a master and TH
- * runs as a slave.
- */
-CTS_TEST(write8_test,,,,)
-CTS_TEST(write16_test,,,,)
-CTS_TEST(write32_test,,,,)
-
-/*
- * Test i2c read for 8, 16, and 32 bits. DUT runs as a master and TH
- * runs as a slave. You need external pull-ups (10 kohms) on SDL and SDA
- * to make read16_test and read32_test pass.
- */
-CTS_TEST(read8_test,,,,)
-CTS_TEST(read16_test,,,,)
-CTS_TEST(read32_test,,,,) \ No newline at end of file
diff --git a/cts/i2c/cts_i2c.h b/cts/i2c/cts_i2c.h
deleted file mode 100644
index 2914d92a99..0000000000
--- a/cts/i2c/cts_i2c.h
+++ /dev/null
@@ -1,20 +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.
- */
-
-enum cts_i2c_packets {
- WRITE8_OFF,
- WRITE16_OFF,
- WRITE32_OFF,
- READ8_OFF,
- READ16_OFF,
- READ32_OFF,
-};
-
-#define WRITE8_DATA 0x42
-#define WRITE16_DATA 0x1234
-#define WRITE32_DATA 0xDEADBEEF
-#define READ8_DATA 0x23
-#define READ16_DATA 0xACED
-#define READ32_DATA 0x01ABCDEF
diff --git a/cts/i2c/dut.c b/cts/i2c/dut.c
deleted file mode 100644
index c7a3f9fccf..0000000000
--- a/cts/i2c/dut.c
+++ /dev/null
@@ -1,94 +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 "cts_i2c.h"
-#include "i2c.h"
-#include "registers.h"
-#include "task.h"
-#include "timer.h"
-#include "uart.h"
-#include "watchdog.h"
-
-#define TH_ADDR_FLAGS 0x1e
-
-enum cts_rc write8_test(void)
-{
- if (i2c_write8(i2c_ports[0].port, TH_ADDR_FLAGS,
- WRITE8_OFF, WRITE8_DATA))
- return CTS_RC_FAILURE;
- return CTS_RC_SUCCESS;
-}
-
-enum cts_rc write16_test(void)
-{
- if (i2c_write16(i2c_ports[0].port, TH_ADDR_FLAGS,
- WRITE16_OFF, WRITE16_DATA))
- return CTS_RC_FAILURE;
- return CTS_RC_SUCCESS;
-}
-
-enum cts_rc write32_test(void)
-{
- if (i2c_write32(i2c_ports[0].port, TH_ADDR_FLAGS,
- WRITE32_OFF, WRITE32_DATA))
- return CTS_RC_FAILURE;
- return CTS_RC_SUCCESS;
-}
-
-enum cts_rc read8_test(void)
-{
- int data;
-
- if (i2c_read8(i2c_ports[0].port, TH_ADDR_FLAGS,
- READ8_OFF, &data))
- return CTS_RC_FAILURE;
- if (data != READ8_DATA) {
- CPRINTL("Expecting 0x%x but read 0x%x", READ8_DATA, data);
- return CTS_RC_FAILURE;
- }
-
- return CTS_RC_SUCCESS;
-}
-
-enum cts_rc read16_test(void)
-{
- int data;
-
- if (i2c_read16(i2c_ports[0].port, TH_ADDR_FLAGS,
- READ16_OFF, &data))
- return CTS_RC_FAILURE;
- if (data != READ16_DATA) {
- CPRINTL("Expecting 0x%x but read 0x%x", READ16_DATA, data);
- return CTS_RC_FAILURE;
- }
-
- return CTS_RC_SUCCESS;
-}
-
-enum cts_rc read32_test(void)
-{
- int data;
-
- if (i2c_read32(i2c_ports[0].port, TH_ADDR_FLAGS,
- READ32_OFF, &data))
- return CTS_RC_FAILURE;
- if (data != READ32_DATA) {
- CPRINTL("Read 0x%x expecting 0x%x", data, READ32_DATA);
- return CTS_RC_FAILURE;
- }
-
- return CTS_RC_SUCCESS;
-}
-
-
-#include "cts_testlist.h"
-
-void cts_task(void)
-{
- cts_main_loop(tests, "I2C");
- task_wait_event(-1);
-}
diff --git a/cts/i2c/th.c b/cts/i2c/th.c
deleted file mode 100644
index 78035cb1b2..0000000000
--- a/cts/i2c/th.c
+++ /dev/null
@@ -1,151 +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 "cts_i2c.h"
-#include "i2c.h"
-#include "registers.h"
-#include "task.h"
-#include "timer.h"
-#include "uart.h"
-#include "watchdog.h"
-
-static uint8_t inbox[I2C_MAX_HOST_PACKET_SIZE + 2];
-static char data_received;
-
-void i2c_data_received(int port, uint8_t *buf, int len)
-{
- memcpy(inbox, buf, len);
- data_received = 1;
-}
-
-/* CTS I2C protocol implementation */
-int i2c_set_response(int port, uint8_t *buf, int len)
-{
- switch (buf[0]) {
- case READ8_OFF:
- buf[0] = READ8_DATA;
- return 1;
- case READ16_OFF:
- buf[0] = READ16_DATA & 0xFF;
- buf[1] = (READ16_DATA >> 8) & 0xFF;
- return 2;
- case READ32_OFF:
- buf[0] = READ32_DATA & 0xFF;
- buf[1] = (READ32_DATA >> 8) & 0xFF;
- buf[2] = (READ32_DATA >> 16) & 0xFF;
- buf[3] = (READ32_DATA >> 24) & 0xFF;
- return 4;
- default:
- return 0;
- }
-}
-
-static int wait_for_in_flag(uint32_t timeout_ms)
-{
- uint64_t start_time, end_time;
-
- start_time = get_time().val;
- end_time = start_time + timeout_ms * 1000;
-
- while (get_time().val < end_time) {
- if (data_received)
- return 0;
- msleep(5);
- watchdog_reload();
- }
- return 1;
-}
-
-void clean_state(void)
-{
- memset(inbox, 0, sizeof(inbox));
- data_received = 0;
-}
-
-enum cts_rc write8_test(void)
-{
- int in;
-
- if (wait_for_in_flag(100))
- return CTS_RC_TIMEOUT;
- if (inbox[0] != WRITE8_OFF)
- return CTS_RC_FAILURE;
- in = inbox[1];
- if (in != WRITE8_DATA)
- return CTS_RC_FAILURE;
-
- return CTS_RC_SUCCESS;
-}
-
-enum cts_rc write16_test(void)
-{
- int in;
-
- if (wait_for_in_flag(100))
- return CTS_RC_TIMEOUT;
- if (inbox[0] != WRITE16_OFF)
- return CTS_RC_FAILURE;
- in = inbox[2] << 8 | inbox[1] << 0;
- if (in != WRITE16_DATA)
- return CTS_RC_FAILURE;
-
- return CTS_RC_SUCCESS;
-}
-
-enum cts_rc write32_test(void)
-{
- int in;
-
- if (wait_for_in_flag(100))
- return CTS_RC_TIMEOUT;
- if (inbox[0] != WRITE32_OFF)
- return CTS_RC_FAILURE;
- in = inbox[4] << 24 | inbox[3] << 16 | inbox[2] << 8 | inbox[1];
- if (in != WRITE32_DATA)
- return CTS_RC_FAILURE;
-
- return CTS_RC_SUCCESS;
-}
-
-enum cts_rc read8_test(void)
-{
- if (wait_for_in_flag(100))
- return CTS_RC_TIMEOUT;
- if (inbox[0] != READ8_OFF)
- return CTS_RC_FAILURE;
-
- return CTS_RC_SUCCESS;
-}
-
-enum cts_rc read16_test(void)
-{
- if (wait_for_in_flag(100))
- return CTS_RC_TIMEOUT;
- if (inbox[0] != READ16_OFF)
- return CTS_RC_FAILURE;
-
- return CTS_RC_SUCCESS;
-}
-
-enum cts_rc read32_test(void)
-{
- if (wait_for_in_flag(100))
- return CTS_RC_TIMEOUT;
- if (inbox[0] != READ32_OFF)
- return CTS_RC_FAILURE;
-
- return CTS_RC_SUCCESS;
-}
-
-#include "cts_testlist.h"
-
-void cts_task(void)
-{
- cts_main_loop(tests, "I2C");
- task_wait_event(-1);
-}
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);
-}
diff --git a/cts/meta/cts.testlist b/cts/meta/cts.testlist
deleted file mode 100644
index 28ac7e325f..0000000000
--- a/cts/meta/cts.testlist
+++ /dev/null
@@ -1,52 +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 SUCCESS from both TH and DUT
- */
-CTS_TEST(success_test,,,,)
-
-/*
- * Test FAILURE from DUT
- */
-CTS_TEST(fail_dut_test,,, CTS_RC_FAILURE,)
-
-/*
- * Test FAILURE from TH
- */
-CTS_TEST(fail_th_test, CTS_RC_FAILURE,,,)
-
-/*
- * Test failure from both TH and DUT.
- */
-CTS_TEST(fail_both_test, CTS_RC_FAILURE,, CTS_RC_FAILURE,)
-
-/*
- * Test bad sync for TH
- */
-CTS_TEST(bad_sync_test, CTS_RC_BAD_SYNC,,,)
-
-/*
- * Test should fail with bad sync.
- */
-CTS_TEST(bad_sync_both_test, CTS_RC_BAD_SYNC,, CTS_RC_BAD_SYNC,)
-
-/*
- * Test hang on DUT
- */
-CTS_TEST(hang_test, CTS_RC_SUCCESS,, CTS_RC_DID_NOT_END,)
-
-/*
- * Test CTS_RC_DID_NOT_START
- *
- * Since the previous test hung on DUT, this test won't run on DUT.
- * TH will wait forever in sync(), thus won't end.
- */
- CTS_TEST(did_not_start_test, CTS_RC_DID_NOT_END,, CTS_RC_DID_NOT_START,)
-
-/*
- * TODO: Add test for expected string
- * TODO: Make sync() return CTS_RC_BAD_SYNC when it times out.
- */ \ No newline at end of file
diff --git a/cts/meta/dut.c b/cts/meta/dut.c
deleted file mode 100644
index c321676aec..0000000000
--- a/cts/meta/dut.c
+++ /dev/null
@@ -1,64 +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 "task.h"
-#include "timer.h"
-#include "uart.h"
-#include "watchdog.h"
-
-enum cts_rc success_test(void)
-{
- return CTS_RC_SUCCESS;
-}
-
-enum cts_rc fail_dut_test(void)
-{
- return CTS_RC_FAILURE;
-}
-
-enum cts_rc fail_th_test(void)
-{
- return CTS_RC_SUCCESS;
-}
-
-enum cts_rc fail_both_test(void)
-{
- return CTS_RC_FAILURE;
-}
-
-enum cts_rc bad_sync_test(void)
-{
- return CTS_RC_SUCCESS;
-}
-
-enum cts_rc bad_sync_both_test(void)
-{
- return CTS_RC_BAD_SYNC;
-}
-
-enum cts_rc hang_test(void)
-{
- while (1) {
- watchdog_reload();
- sleep(1);
- }
-
- return CTS_RC_SUCCESS;
-}
-
-enum cts_rc did_not_start_test(void)
-{
- return CTS_RC_SUCCESS;
-}
-
-#include "cts_testlist.h"
-
-void cts_task(void)
-{
- cts_main_loop(tests, "Meta");
- task_wait_event(-1);
-}
diff --git a/cts/meta/th.c b/cts/meta/th.c
deleted file mode 100644
index 57b2f492bd..0000000000
--- a/cts/meta/th.c
+++ /dev/null
@@ -1,59 +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 "task.h"
-#include "timer.h"
-#include "uart.h"
-#include "watchdog.h"
-
-enum cts_rc success_test(void)
-{
- return CTS_RC_SUCCESS;
-}
-
-enum cts_rc fail_dut_test(void)
-{
- return CTS_RC_SUCCESS;
-}
-
-enum cts_rc fail_th_test(void)
-{
- return CTS_RC_FAILURE;
-}
-
-enum cts_rc fail_both_test(void)
-{
- return CTS_RC_FAILURE;
-}
-
-enum cts_rc bad_sync_test(void)
-{
- return CTS_RC_BAD_SYNC;
-}
-
-enum cts_rc bad_sync_both_test(void)
-{
- return CTS_RC_BAD_SYNC;
-}
-
-enum cts_rc hang_test(void)
-{
- return CTS_RC_SUCCESS;
-}
-
-enum cts_rc did_not_start_test(void)
-{
- return CTS_RC_SUCCESS;
-}
-
-#include "cts_testlist.h"
-
-void cts_task(void)
-{
- cts_main_loop(tests, "Meta");
- task_wait_event(-1);
-}
diff --git a/cts/mutex/cts.tasklist b/cts/mutex/cts.tasklist
deleted file mode 100644
index 3387e1de09..0000000000
--- a/cts/mutex/cts.tasklist
+++ /dev/null
@@ -1,14 +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.
- */
-
-/**
- * See CONFIG_TASK_LIST in config.h for details.
- */
-#define CONFIG_CTS_TASK_LIST \
- TASK_ALWAYS(MTX3C, mutex_random_task, NULL, 384) \
- TASK_ALWAYS(MTX3B, mutex_random_task, NULL, 384) \
- TASK_ALWAYS(MTX3A, mutex_random_task, NULL, 384) \
- TASK_ALWAYS(MTX2, mutex_second_task, NULL, 384) \
- TASK_ALWAYS(CTS, cts_task, NULL, TASK_STACK_SIZE)
diff --git a/cts/mutex/cts.testlist b/cts/mutex/cts.testlist
deleted file mode 100644
index 5b1cdb1dae..0000000000
--- a/cts/mutex/cts.testlist
+++ /dev/null
@@ -1,9 +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 mutex lock and unlock
- */
-CTS_TEST(lock_unlock_test,,,,) \ No newline at end of file
diff --git a/cts/mutex/dut.c b/cts/mutex/dut.c
deleted file mode 100644
index 9cbbd8badb..0000000000
--- a/cts/mutex/dut.c
+++ /dev/null
@@ -1,116 +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.
- * Copyright 2011 Google Inc.
- *
- * Tasks for mutexes basic tests.
- */
-
-#include "console.h"
-#include "common.h"
-#include "cts_common.h"
-#include "task.h"
-#include "test_util.h"
-#include "timer.h"
-#include "util.h"
-
-static struct mutex mtx;
-
-/* period between 50us and 3.2ms */
-#define PERIOD_US(num) (((num % 64) + 1) * 50)
-/* one of the 3 MTX3x tasks */
-#define RANDOM_TASK(num) (TASK_ID_MTX3C + (num % 3))
-
-int mutex_random_task(void *unused)
-{
- char letter = 'A'+(TASK_ID_MTX3A - task_get_current());
- /* wait to be activated */
-
- while (1) {
- task_wait_event(0);
- ccprintf("%c+\n", letter);
- mutex_lock(&mtx);
- ccprintf("%c=\n", letter);
- task_wait_event(0);
- ccprintf("%c-\n", letter);
- mutex_unlock(&mtx);
- }
-
- task_wait_event(0);
-
- return EC_SUCCESS;
-}
-
-int mutex_second_task(void *unused)
-{
- task_id_t id = task_get_current();
-
- ccprintf("\n[Mutex second task %d]\n", id);
-
- task_wait_event(0);
- ccprintf("MTX2: locking...");
- mutex_lock(&mtx);
- ccprintf("done\n");
- task_wake(TASK_ID_CTS);
- ccprintf("MTX2: unlocking...\n");
- mutex_unlock(&mtx);
-
- task_wait_event(0);
-
- return EC_SUCCESS;
-}
-
-static enum cts_rc lock_unlock_test(void)
-{
- task_id_t id = task_get_current();
- uint32_t rdelay = (uint32_t)0x0bad1dea;
- uint32_t rtask = (uint32_t)0x1a4e1dea;
- int i;
-
- ccprintf("\n[Mutex main task %d]\n", id);
-
- /* --- Lock/Unlock without contention --- */
- ccprintf("No contention :");
- mutex_lock(&mtx);
- mutex_unlock(&mtx);
- mutex_lock(&mtx);
- mutex_unlock(&mtx);
- mutex_lock(&mtx);
- mutex_unlock(&mtx);
- ccprintf("done.\n");
-
- /* --- Serialization to test simple contention --- */
- ccprintf("Simple contention :\n");
- /* lock the mutex from the other task */
- task_set_event(TASK_ID_MTX2, TASK_EVENT_WAKE);
- task_wait_event(0);
- /* block on the mutex */
- ccprintf("MTX1: blocking...\n");
- mutex_lock(&mtx);
- ccprintf("MTX1: get lock\n");
- mutex_unlock(&mtx);
-
- /* --- mass lock-unlocking from several tasks --- */
- ccprintf("Massive locking/unlocking :\n");
- for (i = 0; i < 500; i++) {
- /* Wake up a random task */
- task_wake(RANDOM_TASK(rtask));
- /* next pseudo random delay */
- rtask = prng(rtask);
- /* Wait for a "random" period */
- task_wait_event(PERIOD_US(rdelay));
- /* next pseudo random delay */
- rdelay = prng(rdelay);
- }
-
- return EC_SUCCESS;
-}
-
-#include "cts_testlist.h"
-
-void cts_task(void)
-{
- wait_for_task_started();
- cts_main_loop(tests, "Mutex");
- task_wait_event(-1);
-}
diff --git a/cts/mutex/th.c b/cts/mutex/th.c
deleted file mode 100644
index 9cbbd8badb..0000000000
--- a/cts/mutex/th.c
+++ /dev/null
@@ -1,116 +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.
- * Copyright 2011 Google Inc.
- *
- * Tasks for mutexes basic tests.
- */
-
-#include "console.h"
-#include "common.h"
-#include "cts_common.h"
-#include "task.h"
-#include "test_util.h"
-#include "timer.h"
-#include "util.h"
-
-static struct mutex mtx;
-
-/* period between 50us and 3.2ms */
-#define PERIOD_US(num) (((num % 64) + 1) * 50)
-/* one of the 3 MTX3x tasks */
-#define RANDOM_TASK(num) (TASK_ID_MTX3C + (num % 3))
-
-int mutex_random_task(void *unused)
-{
- char letter = 'A'+(TASK_ID_MTX3A - task_get_current());
- /* wait to be activated */
-
- while (1) {
- task_wait_event(0);
- ccprintf("%c+\n", letter);
- mutex_lock(&mtx);
- ccprintf("%c=\n", letter);
- task_wait_event(0);
- ccprintf("%c-\n", letter);
- mutex_unlock(&mtx);
- }
-
- task_wait_event(0);
-
- return EC_SUCCESS;
-}
-
-int mutex_second_task(void *unused)
-{
- task_id_t id = task_get_current();
-
- ccprintf("\n[Mutex second task %d]\n", id);
-
- task_wait_event(0);
- ccprintf("MTX2: locking...");
- mutex_lock(&mtx);
- ccprintf("done\n");
- task_wake(TASK_ID_CTS);
- ccprintf("MTX2: unlocking...\n");
- mutex_unlock(&mtx);
-
- task_wait_event(0);
-
- return EC_SUCCESS;
-}
-
-static enum cts_rc lock_unlock_test(void)
-{
- task_id_t id = task_get_current();
- uint32_t rdelay = (uint32_t)0x0bad1dea;
- uint32_t rtask = (uint32_t)0x1a4e1dea;
- int i;
-
- ccprintf("\n[Mutex main task %d]\n", id);
-
- /* --- Lock/Unlock without contention --- */
- ccprintf("No contention :");
- mutex_lock(&mtx);
- mutex_unlock(&mtx);
- mutex_lock(&mtx);
- mutex_unlock(&mtx);
- mutex_lock(&mtx);
- mutex_unlock(&mtx);
- ccprintf("done.\n");
-
- /* --- Serialization to test simple contention --- */
- ccprintf("Simple contention :\n");
- /* lock the mutex from the other task */
- task_set_event(TASK_ID_MTX2, TASK_EVENT_WAKE);
- task_wait_event(0);
- /* block on the mutex */
- ccprintf("MTX1: blocking...\n");
- mutex_lock(&mtx);
- ccprintf("MTX1: get lock\n");
- mutex_unlock(&mtx);
-
- /* --- mass lock-unlocking from several tasks --- */
- ccprintf("Massive locking/unlocking :\n");
- for (i = 0; i < 500; i++) {
- /* Wake up a random task */
- task_wake(RANDOM_TASK(rtask));
- /* next pseudo random delay */
- rtask = prng(rtask);
- /* Wait for a "random" period */
- task_wait_event(PERIOD_US(rdelay));
- /* next pseudo random delay */
- rdelay = prng(rdelay);
- }
-
- return EC_SUCCESS;
-}
-
-#include "cts_testlist.h"
-
-void cts_task(void)
-{
- wait_for_task_started();
- cts_main_loop(tests, "Mutex");
- task_wait_event(-1);
-}
diff --git a/cts/task/cts.tasklist b/cts/task/cts.tasklist
deleted file mode 100644
index 6477d74c2c..0000000000
--- a/cts/task/cts.tasklist
+++ /dev/null
@@ -1,14 +0,0 @@
-/* Copyright 2013 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.
- */
-
-/**
- * See CONFIG_TASK_LIST in config.h for details.
- */
-#define CONFIG_CTS_TASK_LIST \
- TASK_ALWAYS(A, task_abc, NULL, TASK_STACK_SIZE) \
- TASK_ALWAYS(B, task_abc, NULL, TASK_STACK_SIZE) \
- TASK_ALWAYS(C, task_abc, NULL, TASK_STACK_SIZE) \
- TASK_ALWAYS(TICK, task_tick, NULL, 256) \
- TASK_ALWAYS(CTS, cts_task, NULL, TASK_STACK_SIZE)
diff --git a/cts/task/cts.testlist b/cts/task/cts.testlist
deleted file mode 100644
index c4b7bc3231..0000000000
--- a/cts/task/cts.testlist
+++ /dev/null
@@ -1,27 +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 task switching. Task A wakes up B and goes to sleep. Task B wakes
- * up C then goes to sleep. Task C wakes up A then goes to sleep. This is
- * repeated TEST_COUNT times. It's expected all tasks to run exactly
- * TEST_COUNT times. Tick task runs to inject some irregularity.
- */
-CTS_TEST(test_task_switch,,,,)
-
-/*
- * Test task priority. CTS task wakes up A and C then goes to sleep. Since C
- * has a higher priority, C should run first. This should result in C running
- * one more time than A (or B).
- */
-CTS_TEST(test_task_priority,,,,)
-
-/*
- * Test stack overflow. CTS task overflows the stack and it should be detected
- * when task switch happens. Reboot is expected.
- */
-CTS_TEST(test_stack_overflow,\
- CTS_RC_DID_NOT_END, "Stack overflow in CTS task!",\
- CTS_RC_DID_NOT_END, "Stack overflow in CTS task!")
diff --git a/cts/task/dut.c b/cts/task/dut.c
deleted file mode 100644
index 71fe4050ec..0000000000
--- a/cts/task/dut.c
+++ /dev/null
@@ -1,144 +0,0 @@
-/* Copyright 2013 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.
- *
- * Tasks for scheduling test.
- */
-
-#include "common.h"
-#include "cts_common.h"
-#include "task.h"
-#include "timer.h"
-
-static int repeat_count;
-static int wake_count[3];
-
-void clean_state(void)
-{
- wake_count[0] = wake_count[1] = wake_count[2] = 0;
-}
-
-void task_abc(void *data)
-{
- int task_id = task_get_current();
- int id = task_id - TASK_ID_A;
- task_id_t next = task_id + 1;
-
- if (next > TASK_ID_C)
- next = TASK_ID_A;
-
- task_wait_event(-1);
-
- CPRINTS("%c Starting", 'A' + id);
- cflush();
-
- while (1) {
- wake_count[id]++;
- if (id == 2 && wake_count[id] == repeat_count) {
- task_set_event(TASK_ID_CTS, TASK_EVENT_WAKE);
- task_wait_event(0);
- } else {
- task_set_event(next, TASK_EVENT_WAKE);
- task_wait_event(0);
- }
- }
-}
-
-void task_tick(void *data)
-{
- task_wait_event(-1);
- ccprintf("\n[starting Task T]\n");
-
- /* Wake up every tick */
- while (1)
- /* Wait for timer interrupt message */
- usleep(3000);
-}
-
-enum cts_rc test_task_switch(void)
-{
- uint32_t event;
-
- repeat_count = 3000;
-
- task_wake(TASK_ID_A);
- event = task_wait_event(5 * SECOND);
-
- if (event != TASK_EVENT_WAKE) {
- CPRINTS("Woken up by unexpected event: 0x%08x", event);
- return CTS_RC_FAILURE;
- }
-
- if (wake_count[0] != repeat_count || wake_count[1] != repeat_count) {
- CPRINTS("Unexpected counter values: %d %d %d",
- wake_count[0], wake_count[1], wake_count[2]);
- return CTS_RC_FAILURE;
- }
-
- /* TODO: Verify no tasks are ready, no events are pending. */
- if (*task_get_event_bitmap(TASK_ID_A)
- || *task_get_event_bitmap(TASK_ID_B)
- || *task_get_event_bitmap(TASK_ID_C)) {
- CPRINTS("Events are pending");
- return CTS_RC_FAILURE;
- }
-
- return CTS_RC_SUCCESS;
-}
-
-enum cts_rc test_task_priority(void)
-{
- uint32_t event;
-
- repeat_count = 2;
-
- task_wake(TASK_ID_A);
- task_wake(TASK_ID_C);
-
- event = task_wait_event(5 * SECOND);
-
- if (event != TASK_EVENT_WAKE) {
- CPRINTS("Woken up by unexpected event: 0x%08x", event);
- return CTS_RC_FAILURE;
- }
-
- if (wake_count[0] != repeat_count - 1
- || wake_count[1] != repeat_count - 1) {
- CPRINTS("Unexpected counter values: %d %d %d",
- wake_count[0], wake_count[1], wake_count[2]);
- return CTS_RC_FAILURE;
- }
-
- /* TODO: Verify no tasks are ready, no events are pending. */
- if (*task_get_event_bitmap(TASK_ID_A)
- || *task_get_event_bitmap(TASK_ID_B)
- || *task_get_event_bitmap(TASK_ID_C)) {
- CPRINTS("Events are pending");
- return CTS_RC_FAILURE;
- }
-
- return CTS_RC_SUCCESS;
-}
-
-static void recurse(int x)
-{
- CPRINTS("+%d", x);
- msleep(1);
- recurse(x + 1);
- CPRINTS("-%d", x);
-}
-
-enum cts_rc test_stack_overflow(void)
-{
- recurse(0);
- return CTS_RC_FAILURE;
-}
-
-#include "cts_testlist.h"
-
-void cts_task(void)
-{
- task_wake(TASK_ID_TICK);
- cts_main_loop(tests, "Task");
- task_wait_event(-1);
-}
diff --git a/cts/task/th.c b/cts/task/th.c
deleted file mode 120000
index 41eab28462..0000000000
--- a/cts/task/th.c
+++ /dev/null
@@ -1 +0,0 @@
-dut.c \ No newline at end of file
diff --git a/cts/timer/cts.testlist b/cts/timer/cts.testlist
deleted file mode 100644
index 9b5da0d6c9..0000000000
--- a/cts/timer/cts.testlist
+++ /dev/null
@@ -1,19 +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 timer accuracy
- *
- * After sync, DUT and TH start counting down one second. After one second,
- * DUT raises GPIO level, which triggers an interrupt on TH. TH determines
- * whether the test passes or not based on how much more or less time elapsed
- * than one second.
- *
- * Requirements:
- * - Sync connection
- * - GPIO_OUTPUT connection for sending notification from DUT
- * - Calibrated TH timer
- */
-CTS_TEST(timer_calibration_test,,,,)
diff --git a/cts/timer/dut.c b/cts/timer/dut.c
deleted file mode 100644
index 96d7c5a3cf..0000000000
--- a/cts/timer/dut.c
+++ /dev/null
@@ -1,30 +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"
-
-static enum cts_rc timer_calibration_test(void)
-{
- gpio_set_flags(GPIO_OUTPUT_TEST, GPIO_ODR_HIGH);
-
- sync();
- sleep(1);
- gpio_set_level(GPIO_OUTPUT_TEST, 0);
-
- return CTS_RC_SUCCESS;
-}
-
-#include "cts_testlist.h"
-
-void cts_task(void)
-{
- cts_main_loop(tests, "Timer");
- task_wait_event(-1);
-}
diff --git a/cts/timer/th.c b/cts/timer/th.c
deleted file mode 100644
index e82cac71ab..0000000000
--- a/cts/timer/th.c
+++ /dev/null
@@ -1,62 +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 "registers.h"
-#include "task.h"
-#include "timer.h"
-#include "watchdog.h"
-
-/*
- * Interrupt handler
- *
- * DUT is supposed to trigger an interrupt when it's done counting down,
- * causing this function to be invoked.
- */
-void cts_irq(enum gpio_signal signal)
-{
- /* Wake up the CTS task */
- task_wake(TASK_ID_CTS);
-}
-
-static enum cts_rc timer_calibration_test(void)
-{
- /* Error margin: +/-2 msec (0.2% for one second) */
- const int32_t margin = 2 * MSEC;
- int32_t elapsed, delta;
- timestamp_t t0, t1;
-
- gpio_enable_interrupt(GPIO_CTS_NOTIFY);
- interrupt_enable();
-
- sync();
- t0 = get_time();
- /* Wait for interrupt */
- task_wait_event(-1);
- t1 = get_time();
-
- elapsed = (int32_t)(t1.val - t0.val);
- delta = elapsed - SECOND;
- if (delta < -margin) {
- CPRINTS("DUT clock runs too fast: %+d usec", delta);
- return CTS_RC_FAILURE;
- }
- if (margin < delta) {
- CPRINTS("DUT clock runs too slow: %+d usec", delta);
- return CTS_RC_FAILURE;
- }
-
- return CTS_RC_SUCCESS;
-}
-
-#include "cts_testlist.h"
-
-void cts_task(void)
-{
- cts_main_loop(tests, "Timer");
- task_wait_event(-1);
-}