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