| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- #!/bin/bash
- # SPDX-License-Identifier: GPL-2.0
- ALL_TESTS="
- settime
- adjtime
- adjfreq
- "
- DEV=$1
- # Kselftest framework requirement - SKIP code is 4.
- ksft_skip=4
- ##############################################################################
- # Sanity checks
- if [[ "$(id -u)" -ne 0 ]]; then
- echo "SKIP: need root privileges"
- exit $ksft_skip
- fi
- if [[ "$DEV" == "" ]]; then
- echo "SKIP: PTP device not provided"
- exit $ksft_skip
- fi
- require_command()
- {
- local cmd=$1; shift
- if [[ ! -x "$(command -v "$cmd")" ]]; then
- echo "SKIP: $cmd not installed"
- exit $ksft_skip
- fi
- }
- phc_sanity()
- {
- phc_ctl $DEV get &> /dev/null
- if [ $? != 0 ]; then
- echo "SKIP: unknown clock $DEV: No such device"
- exit $ksft_skip
- fi
- }
- require_command phc_ctl
- phc_sanity
- ##############################################################################
- # Helpers
- # Exit status to return at the end. Set in case one of the tests fails.
- EXIT_STATUS=0
- PASS_COUNT=0
- # Per-test return value. Clear at the beginning of each test.
- RET=0
- check_err()
- {
- local err=$1
- if [[ $RET -eq 0 && $err -ne 0 ]]; then
- RET=$err
- fi
- }
- log_test()
- {
- local test_name=$1
- if [[ $RET -eq $ksft_skip ]]; then
- printf "TEST: %-60s [SKIP]\n" "$test_name"
- return 0
- fi
- if [[ $RET -ne 0 ]]; then
- EXIT_STATUS=1
- printf "TEST: %-60s [FAIL]\n" "$test_name"
- return 1
- fi
- ((PASS_COUNT++))
- printf "TEST: %-60s [ OK ]\n" "$test_name"
- return 0
- }
- tests_run()
- {
- local current_test
- for current_test in ${TESTS:-$ALL_TESTS}; do
- $current_test
- done
- }
- ##############################################################################
- # Tests
- settime_do()
- {
- local res out
- out=$(LC_ALL=C phc_ctl $DEV set 0 wait 120.5 get 2>&1)
- if [[ $? -ne 0 ]]; then
- if echo "$out" | grep -qi "Operation not supported"; then
- return $ksft_skip
- fi
- return 1
- fi
- res=$(echo "$out" | awk '/clock time is/{print $5}' | awk -F. '{print $1}')
- (( res == 120 ))
- }
- adjtime_do()
- {
- local res out
- out=$(LC_ALL=C phc_ctl $DEV set 0 adj 10 get 2>&1)
- if [[ $? -ne 0 ]]; then
- if echo "$out" | grep -qi "Operation not supported"; then
- return $ksft_skip
- fi
- return 1
- fi
- res=$(echo "$out" | awk '/clock time is/{print $5}' | awk -F. '{print $1}')
- (( res == 10 ))
- }
- adjfreq_do()
- {
- local res out
- # Set the clock to be 1% faster
- out=$(LC_ALL=C phc_ctl $DEV freq 10000000 set 0 wait 100.5 get 2>&1)
- if [[ $? -ne 0 ]]; then
- if echo "$out" | grep -qi "Operation not supported"; then
- return $ksft_skip
- fi
- return 1
- fi
- res=$(echo "$out" | awk '/clock time is/{print $5}' | awk -F. '{print $1}')
- (( res == 101 ))
- }
- ##############################################################################
- cleanup()
- {
- phc_ctl $DEV freq 0.0 &> /dev/null
- phc_ctl $DEV set &> /dev/null
- }
- settime()
- {
- RET=0
- settime_do
- check_err $?
- log_test "settime"
- cleanup
- }
- adjtime()
- {
- RET=0
- adjtime_do
- check_err $?
- log_test "adjtime"
- cleanup
- }
- adjfreq()
- {
- RET=0
- adjfreq_do
- check_err $?
- log_test "adjfreq"
- cleanup
- }
- trap cleanup EXIT
- tests_run
- if [[ $EXIT_STATUS -eq 0 && $PASS_COUNT -eq 0 ]]; then
- exit $ksft_skip
- fi
- exit $EXIT_STATUS
|