xref: /aosp_15_r20/external/linux-kselftest/tools/testing/selftests/ptp/phc.sh (revision 053f45be4e351dfd5e965df293cd45b779f579ee)
1*053f45beSAndroid Build Coastguard Worker#!/bin/bash
2*053f45beSAndroid Build Coastguard Worker# SPDX-License-Identifier: GPL-2.0
3*053f45beSAndroid Build Coastguard Worker
4*053f45beSAndroid Build Coastguard WorkerALL_TESTS="
5*053f45beSAndroid Build Coastguard Worker	settime
6*053f45beSAndroid Build Coastguard Worker	adjtime
7*053f45beSAndroid Build Coastguard Worker	adjfreq
8*053f45beSAndroid Build Coastguard Worker"
9*053f45beSAndroid Build Coastguard WorkerDEV=$1
10*053f45beSAndroid Build Coastguard Worker
11*053f45beSAndroid Build Coastguard Worker##############################################################################
12*053f45beSAndroid Build Coastguard Worker# Sanity checks
13*053f45beSAndroid Build Coastguard Worker
14*053f45beSAndroid Build Coastguard Workerif [[ "$(id -u)" -ne 0 ]]; then
15*053f45beSAndroid Build Coastguard Worker	echo "SKIP: need root privileges"
16*053f45beSAndroid Build Coastguard Worker	exit 0
17*053f45beSAndroid Build Coastguard Workerfi
18*053f45beSAndroid Build Coastguard Worker
19*053f45beSAndroid Build Coastguard Workerif [[ "$DEV" == "" ]]; then
20*053f45beSAndroid Build Coastguard Worker	echo "SKIP: PTP device not provided"
21*053f45beSAndroid Build Coastguard Worker	exit 0
22*053f45beSAndroid Build Coastguard Workerfi
23*053f45beSAndroid Build Coastguard Worker
24*053f45beSAndroid Build Coastguard Workerrequire_command()
25*053f45beSAndroid Build Coastguard Worker{
26*053f45beSAndroid Build Coastguard Worker	local cmd=$1; shift
27*053f45beSAndroid Build Coastguard Worker
28*053f45beSAndroid Build Coastguard Worker	if [[ ! -x "$(command -v "$cmd")" ]]; then
29*053f45beSAndroid Build Coastguard Worker		echo "SKIP: $cmd not installed"
30*053f45beSAndroid Build Coastguard Worker		exit 1
31*053f45beSAndroid Build Coastguard Worker	fi
32*053f45beSAndroid Build Coastguard Worker}
33*053f45beSAndroid Build Coastguard Worker
34*053f45beSAndroid Build Coastguard Workerphc_sanity()
35*053f45beSAndroid Build Coastguard Worker{
36*053f45beSAndroid Build Coastguard Worker	phc_ctl $DEV get &> /dev/null
37*053f45beSAndroid Build Coastguard Worker
38*053f45beSAndroid Build Coastguard Worker	if [ $? != 0 ]; then
39*053f45beSAndroid Build Coastguard Worker		echo "SKIP: unknown clock $DEV: No such device"
40*053f45beSAndroid Build Coastguard Worker		exit 1
41*053f45beSAndroid Build Coastguard Worker	fi
42*053f45beSAndroid Build Coastguard Worker}
43*053f45beSAndroid Build Coastguard Worker
44*053f45beSAndroid Build Coastguard Workerrequire_command phc_ctl
45*053f45beSAndroid Build Coastguard Workerphc_sanity
46*053f45beSAndroid Build Coastguard Worker
47*053f45beSAndroid Build Coastguard Worker##############################################################################
48*053f45beSAndroid Build Coastguard Worker# Helpers
49*053f45beSAndroid Build Coastguard Worker
50*053f45beSAndroid Build Coastguard Worker# Exit status to return at the end. Set in case one of the tests fails.
51*053f45beSAndroid Build Coastguard WorkerEXIT_STATUS=0
52*053f45beSAndroid Build Coastguard Worker# Per-test return value. Clear at the beginning of each test.
53*053f45beSAndroid Build Coastguard WorkerRET=0
54*053f45beSAndroid Build Coastguard Worker
55*053f45beSAndroid Build Coastguard Workercheck_err()
56*053f45beSAndroid Build Coastguard Worker{
57*053f45beSAndroid Build Coastguard Worker	local err=$1
58*053f45beSAndroid Build Coastguard Worker
59*053f45beSAndroid Build Coastguard Worker	if [[ $RET -eq 0 && $err -ne 0 ]]; then
60*053f45beSAndroid Build Coastguard Worker		RET=$err
61*053f45beSAndroid Build Coastguard Worker	fi
62*053f45beSAndroid Build Coastguard Worker}
63*053f45beSAndroid Build Coastguard Worker
64*053f45beSAndroid Build Coastguard Workerlog_test()
65*053f45beSAndroid Build Coastguard Worker{
66*053f45beSAndroid Build Coastguard Worker	local test_name=$1
67*053f45beSAndroid Build Coastguard Worker
68*053f45beSAndroid Build Coastguard Worker	if [[ $RET -ne 0 ]]; then
69*053f45beSAndroid Build Coastguard Worker		EXIT_STATUS=1
70*053f45beSAndroid Build Coastguard Worker		printf "TEST: %-60s  [FAIL]\n" "$test_name"
71*053f45beSAndroid Build Coastguard Worker		return 1
72*053f45beSAndroid Build Coastguard Worker	fi
73*053f45beSAndroid Build Coastguard Worker
74*053f45beSAndroid Build Coastguard Worker	printf "TEST: %-60s  [ OK ]\n" "$test_name"
75*053f45beSAndroid Build Coastguard Worker	return 0
76*053f45beSAndroid Build Coastguard Worker}
77*053f45beSAndroid Build Coastguard Worker
78*053f45beSAndroid Build Coastguard Workertests_run()
79*053f45beSAndroid Build Coastguard Worker{
80*053f45beSAndroid Build Coastguard Worker	local current_test
81*053f45beSAndroid Build Coastguard Worker
82*053f45beSAndroid Build Coastguard Worker	for current_test in ${TESTS:-$ALL_TESTS}; do
83*053f45beSAndroid Build Coastguard Worker		$current_test
84*053f45beSAndroid Build Coastguard Worker	done
85*053f45beSAndroid Build Coastguard Worker}
86*053f45beSAndroid Build Coastguard Worker
87*053f45beSAndroid Build Coastguard Worker##############################################################################
88*053f45beSAndroid Build Coastguard Worker# Tests
89*053f45beSAndroid Build Coastguard Worker
90*053f45beSAndroid Build Coastguard Workersettime_do()
91*053f45beSAndroid Build Coastguard Worker{
92*053f45beSAndroid Build Coastguard Worker	local res
93*053f45beSAndroid Build Coastguard Worker
94*053f45beSAndroid Build Coastguard Worker	res=$(phc_ctl $DEV set 0 wait 120.5 get 2> /dev/null \
95*053f45beSAndroid Build Coastguard Worker		| awk '/clock time is/{print $5}' \
96*053f45beSAndroid Build Coastguard Worker		| awk -F. '{print $1}')
97*053f45beSAndroid Build Coastguard Worker
98*053f45beSAndroid Build Coastguard Worker	(( res == 120 ))
99*053f45beSAndroid Build Coastguard Worker}
100*053f45beSAndroid Build Coastguard Worker
101*053f45beSAndroid Build Coastguard Workeradjtime_do()
102*053f45beSAndroid Build Coastguard Worker{
103*053f45beSAndroid Build Coastguard Worker	local res
104*053f45beSAndroid Build Coastguard Worker
105*053f45beSAndroid Build Coastguard Worker	res=$(phc_ctl $DEV set 0 adj 10 get 2> /dev/null \
106*053f45beSAndroid Build Coastguard Worker		| awk '/clock time is/{print $5}' \
107*053f45beSAndroid Build Coastguard Worker		| awk -F. '{print $1}')
108*053f45beSAndroid Build Coastguard Worker
109*053f45beSAndroid Build Coastguard Worker	(( res == 10 ))
110*053f45beSAndroid Build Coastguard Worker}
111*053f45beSAndroid Build Coastguard Worker
112*053f45beSAndroid Build Coastguard Workeradjfreq_do()
113*053f45beSAndroid Build Coastguard Worker{
114*053f45beSAndroid Build Coastguard Worker	local res
115*053f45beSAndroid Build Coastguard Worker
116*053f45beSAndroid Build Coastguard Worker	# Set the clock to be 1% faster
117*053f45beSAndroid Build Coastguard Worker	res=$(phc_ctl $DEV freq 10000000 set 0 wait 100.5 get 2> /dev/null \
118*053f45beSAndroid Build Coastguard Worker		| awk '/clock time is/{print $5}' \
119*053f45beSAndroid Build Coastguard Worker		| awk -F. '{print $1}')
120*053f45beSAndroid Build Coastguard Worker
121*053f45beSAndroid Build Coastguard Worker	(( res == 101 ))
122*053f45beSAndroid Build Coastguard Worker}
123*053f45beSAndroid Build Coastguard Worker
124*053f45beSAndroid Build Coastguard Worker##############################################################################
125*053f45beSAndroid Build Coastguard Worker
126*053f45beSAndroid Build Coastguard Workercleanup()
127*053f45beSAndroid Build Coastguard Worker{
128*053f45beSAndroid Build Coastguard Worker	phc_ctl $DEV freq 0.0 &> /dev/null
129*053f45beSAndroid Build Coastguard Worker	phc_ctl $DEV set &> /dev/null
130*053f45beSAndroid Build Coastguard Worker}
131*053f45beSAndroid Build Coastguard Worker
132*053f45beSAndroid Build Coastguard Workersettime()
133*053f45beSAndroid Build Coastguard Worker{
134*053f45beSAndroid Build Coastguard Worker	RET=0
135*053f45beSAndroid Build Coastguard Worker
136*053f45beSAndroid Build Coastguard Worker	settime_do
137*053f45beSAndroid Build Coastguard Worker	check_err $?
138*053f45beSAndroid Build Coastguard Worker	log_test "settime"
139*053f45beSAndroid Build Coastguard Worker	cleanup
140*053f45beSAndroid Build Coastguard Worker}
141*053f45beSAndroid Build Coastguard Worker
142*053f45beSAndroid Build Coastguard Workeradjtime()
143*053f45beSAndroid Build Coastguard Worker{
144*053f45beSAndroid Build Coastguard Worker	RET=0
145*053f45beSAndroid Build Coastguard Worker
146*053f45beSAndroid Build Coastguard Worker	adjtime_do
147*053f45beSAndroid Build Coastguard Worker	check_err $?
148*053f45beSAndroid Build Coastguard Worker	log_test "adjtime"
149*053f45beSAndroid Build Coastguard Worker	cleanup
150*053f45beSAndroid Build Coastguard Worker}
151*053f45beSAndroid Build Coastguard Worker
152*053f45beSAndroid Build Coastguard Workeradjfreq()
153*053f45beSAndroid Build Coastguard Worker{
154*053f45beSAndroid Build Coastguard Worker	RET=0
155*053f45beSAndroid Build Coastguard Worker
156*053f45beSAndroid Build Coastguard Worker	adjfreq_do
157*053f45beSAndroid Build Coastguard Worker	check_err $?
158*053f45beSAndroid Build Coastguard Worker	log_test "adjfreq"
159*053f45beSAndroid Build Coastguard Worker	cleanup
160*053f45beSAndroid Build Coastguard Worker}
161*053f45beSAndroid Build Coastguard Worker
162*053f45beSAndroid Build Coastguard Workertrap cleanup EXIT
163*053f45beSAndroid Build Coastguard Worker
164*053f45beSAndroid Build Coastguard Workertests_run
165*053f45beSAndroid Build Coastguard Worker
166*053f45beSAndroid Build Coastguard Workerexit $EXIT_STATUS
167