zephyr/tests/kernel/timer/timer_behavior/Kconfig
Ederson de Souza 22ba9456de tests/kernel/timer/timer_behavior: Add support for external tool
This patch adds a way to simplify using an external tool to measure
timer behaviour on Zephyr. It modifies the timer behaviour
jitter_drift.c tests to toggle a GPIO pin (defined via a new DTS
compatible, "test-kernel-timer-behavior-external") that can be connected
to an external tool, such as a logic analyzer, to measure timer
behaviour.

This GPIO pin toggle is behind a new CONFIG_TIMER_EXTERNAL_TEST Kconfig.

A new pytest test is added so that it can collect the statistics from
the external tool and assert some measurements. To collect statistics
from the external tool, one needs to provide a Python module which
provides a `run(seconds, config)` method, that will perform the test and
return the statistics. Check the README file for more information about
this interface.

Finally, this on twister, this new test is behind a new fixture,
"gpio-timerout".

Signed-off-by: Ederson de Souza <ederson.desouza@intel.com>
Signed-off-by: Tom Burdick <thomas.burdick@intel.com>
2023-09-27 20:25:09 -04:00

73 lines
2.3 KiB
Plaintext

# SPDX-License-Identifier: Apache-2.0
# Copyright (c) 2022 Intel Corporation
mainmenu "Timer Behavior Test"
config SYS_CLOCK_TICKS_PER_SEC
default 8192 if NRF_RTC_TIMER && TICKLESS_KERNEL
source "Kconfig.zephyr"
config TIMER_TEST_SAMPLES
int "The number of timer samples to gather for statistics"
default 1000 if (SRAM_SIZE < 24)
default 2000 if (SRAM_SIZE < 32)
default 3000 if (SRAM_SIZE < 48)
default 5000 if (SRAM_SIZE < 64)
default 7000 if (SRAM_SIZE < 96)
default 10000
config TIMER_TEST_PERIOD
int "The number of microseconds to for the timer period"
default 1000
config TIMER_TEST_MAX_STDDEV
int "Maximum standard deviation in microseconds allowed"
default 10
config TIMER_TEST_MAX_DRIFT
int "Maximum drift in microseconds allowed (should be about 1 period allowance)"
default 1000
config TIMER_TEST_PERIOD_MAX_DRIFT_PERCENT
int "Maximum drift percentage for the timer period"
# Use 13% on nRF platforms using the RTC timer because one tick there is
# ~122 us (see SYS_CLOCK_TICKS_PER_SEC configuration above) and one tick
# difference in the test period is nothing unusual (it can happen for
# example if a new tick elapses right after the kernel gets the number
# of elapsed ticks when scheduling a new timeout but before the timer
# driver sets up that timeout).
default 13 if NRF_RTC_TIMER && TICKLESS_KERNEL
default 10
help
A value of 10 means 10%.
config TIMER_EXTERNAL_TEST
bool "Perform test using an external tool"
help
Toggles a GPIO pin, on every period, that can be used by an external
tool (such as a logic analyzer) to gather timing data. A pytest harness
is used to get the data collected by the tool and evaluate it.
if TIMER_EXTERNAL_TEST
config TIMER_EXTERNAL_TEST_MAX_DRIFT_PPM
int "Maximum drift in PPM for tests using external tool"
default 4500
help
Parts Per Million of allowed drift when using an external tool
connected to a GPIO pin is used to measure time behaviour.
config TIMER_EXTERNAL_TEST_PERIOD_MAX_DRIFT_PPM
int "Maximum timer period drift in PPM for tests using external tool"
default 100000
help
Parts Per Million of allowed period drift when using an external tool
connected to a GPIO pin is used to measure time behaviour.
config TIMER_EXTERNAL_TEST_SYNC_DELAY
int "Delay, in seconds, between tests, so that external tool can be ready"
default 3
endif # TIMER_EXTERNAL_TEST