xref: /OK3568_Linux_fs/kernel/tools/time/udelay_test.sh (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#!/bin/bash
2*4882a593Smuzhiyun# SPDX-License-Identifier: GPL-2.0-only
3*4882a593Smuzhiyun
4*4882a593Smuzhiyun# udelay() test script
5*4882a593Smuzhiyun#
6*4882a593Smuzhiyun# Test is executed by writing and reading to /sys/kernel/debug/udelay_test
7*4882a593Smuzhiyun# and exercises a variety of delays to ensure that udelay() is delaying
8*4882a593Smuzhiyun# at least as long as requested (as compared to ktime).
9*4882a593Smuzhiyun#
10*4882a593Smuzhiyun# Copyright (C) 2014 Google, Inc.
11*4882a593Smuzhiyun#
12*4882a593Smuzhiyun
13*4882a593SmuzhiyunMODULE_NAME=udelay_test
14*4882a593SmuzhiyunUDELAY_PATH=/sys/kernel/debug/udelay_test
15*4882a593Smuzhiyun
16*4882a593Smuzhiyunsetup()
17*4882a593Smuzhiyun{
18*4882a593Smuzhiyun	/sbin/modprobe -q $MODULE_NAME
19*4882a593Smuzhiyun	tmp_file=`mktemp`
20*4882a593Smuzhiyun}
21*4882a593Smuzhiyun
22*4882a593Smuzhiyuntest_one()
23*4882a593Smuzhiyun{
24*4882a593Smuzhiyun	delay=$1
25*4882a593Smuzhiyun	echo $delay > $UDELAY_PATH
26*4882a593Smuzhiyun	tee -a $tmp_file < $UDELAY_PATH
27*4882a593Smuzhiyun}
28*4882a593Smuzhiyun
29*4882a593Smuzhiyuncleanup()
30*4882a593Smuzhiyun{
31*4882a593Smuzhiyun	if [ -f $tmp_file ]; then
32*4882a593Smuzhiyun		rm $tmp_file
33*4882a593Smuzhiyun	fi
34*4882a593Smuzhiyun	/sbin/modprobe -q -r $MODULE_NAME
35*4882a593Smuzhiyun}
36*4882a593Smuzhiyun
37*4882a593Smuzhiyuntrap cleanup EXIT
38*4882a593Smuzhiyunsetup
39*4882a593Smuzhiyun
40*4882a593Smuzhiyun# Delay for a variety of times.
41*4882a593Smuzhiyun# 1..200, 200..500 (by 10), 500..2000 (by 100)
42*4882a593Smuzhiyunfor (( delay = 1; delay < 200; delay += 1 )); do
43*4882a593Smuzhiyun	test_one $delay
44*4882a593Smuzhiyundone
45*4882a593Smuzhiyunfor (( delay = 200; delay < 500; delay += 10 )); do
46*4882a593Smuzhiyun	test_one $delay
47*4882a593Smuzhiyundone
48*4882a593Smuzhiyunfor (( delay = 500; delay <= 2000; delay += 100 )); do
49*4882a593Smuzhiyun	test_one $delay
50*4882a593Smuzhiyundone
51*4882a593Smuzhiyun
52*4882a593Smuzhiyun# Search for failures
53*4882a593Smuzhiyuncount=`grep -c FAIL $tmp_file`
54*4882a593Smuzhiyunif [ $? -eq "0" ]; then
55*4882a593Smuzhiyun	echo "ERROR: $count delays failed to delay long enough"
56*4882a593Smuzhiyun	retcode=1
57*4882a593Smuzhiyunfi
58*4882a593Smuzhiyun
59*4882a593Smuzhiyunexit $retcode
60