1*0cbe4818SRobert Mustacchi#! /usr/bin/ksh 2*0cbe4818SRobert Mustacchi# 3*0cbe4818SRobert Mustacchi# This file and its contents are supplied under the terms of the 4*0cbe4818SRobert Mustacchi# Common Development and Distribution License ("CDDL"), version 1.0. 5*0cbe4818SRobert Mustacchi# You may only use this file in accordance with the terms of version 6*0cbe4818SRobert Mustacchi# 1.0 of the CDDL. 7*0cbe4818SRobert Mustacchi# 8*0cbe4818SRobert Mustacchi# A full copy of the text of the CDDL should have accompanied this 9*0cbe4818SRobert Mustacchi# source. A copy of the CDDL is also available via the Internet at 10*0cbe4818SRobert Mustacchi# http://www.illumos.org/license/CDDL. 11*0cbe4818SRobert Mustacchi# 12*0cbe4818SRobert Mustacchi 13*0cbe4818SRobert Mustacchi# 14*0cbe4818SRobert Mustacchi# Copyright 2025 Oxide Computer Company 15*0cbe4818SRobert Mustacchi# 16*0cbe4818SRobert Mustacchi 17*0cbe4818SRobert Mustacchi# 18*0cbe4818SRobert Mustacchi# Test i2cadm scan behavior. This is generally designed for human output. First 19*0cbe4818SRobert Mustacchi# verify that we can run a few scans on i2csim0 error free. After that send 20*0cbe4818SRobert Mustacchi# parseable # output to files and check that specific entries have what we 21*0cbe4818SRobert Mustacchi# expect. This is definitely written in the max power way. 22*0cbe4818SRobert Mustacchi# 23*0cbe4818SRobert Mustacchi 24*0cbe4818SRobert Mustacchi. $(dirname $0)/common.ksh 25*0cbe4818SRobert Mustacchi 26*0cbe4818SRobert Mustacchitypeset -A scan_results 27*0cbe4818SRobert Mustacchi 28*0cbe4818SRobert Mustacchifunction read_scan 29*0cbe4818SRobert Mustacchi{ 30*0cbe4818SRobert Mustacchi typeset path="$1" 31*0cbe4818SRobert Mustacchi typeset scan_ifs="$IFS" 32*0cbe4818SRobert Mustacchi 33*0cbe4818SRobert Mustacchi set -A scan_results 34*0cbe4818SRobert Mustacchi IFS=":" 35*0cbe4818SRobert Mustacchi while read -A value; do 36*0cbe4818SRobert Mustacchi scan_results[${value[0]}]=${value[1]} 37*0cbe4818SRobert Mustacchi done <<< $($I2CADM scan -Hpo addr,result $path) 38*0cbe4818SRobert Mustacchi IFS="$scan_ifs" 39*0cbe4818SRobert Mustacchi} 40*0cbe4818SRobert Mustacchi 41*0cbe4818SRobert Mustacchifunction check_one 42*0cbe4818SRobert Mustacchi{ 43*0cbe4818SRobert Mustacchi typeset desc="$1" 44*0cbe4818SRobert Mustacchi typeset addr="$2" 45*0cbe4818SRobert Mustacchi typeset exp="$3" 46*0cbe4818SRobert Mustacchi 47*0cbe4818SRobert Mustacchi if [[ ${scan_results[$addr]} != "$exp" ]]; then 48*0cbe4818SRobert Mustacchi warn "$desc: found $addr as ${scan_results[$addr]}, wanted $exp" 49*0cbe4818SRobert Mustacchi else 50*0cbe4818SRobert Mustacchi printf "TEST PASSED: %s 0x%x is %s\n" "$desc" "$addr" "$exp" 51*0cbe4818SRobert Mustacchi fi 52*0cbe4818SRobert Mustacchi} 53*0cbe4818SRobert Mustacchi 54*0cbe4818SRobert Mustacchii2cadm_pass scan i2csim0/0 55*0cbe4818SRobert Mustacchii2cadm_pass scan i2csim0/0/0x70/0 56*0cbe4818SRobert Mustacchii2cadm_pass scan i2csim0/0/0x70/7 57*0cbe4818SRobert Mustacchii2cadm_pass scan i2csim0/0/0x70/0/0x71/1 58*0cbe4818SRobert Mustacchii2cadm_pass scan i2csim0/0/0x70/0/0x71/6 59*0cbe4818SRobert Mustacchi 60*0cbe4818SRobert Mustacchi# 61*0cbe4818SRobert Mustacchi# Basic scan. Verify reserved addresses. Spot check missing and present. We 62*0cbe4818SRobert Mustacchi# explicitly hit the missing ones that'll be activated when we enable the mux. 63*0cbe4818SRobert Mustacchi# 64*0cbe4818SRobert Mustacchiread_scan i2csim0/0 65*0cbe4818SRobert Mustacchicheck_one "i2csim0/0" 0x00 reserved 66*0cbe4818SRobert Mustacchicheck_one "i2csim0/0" 0x01 reserved 67*0cbe4818SRobert Mustacchicheck_one "i2csim0/0" 0x02 reserved 68*0cbe4818SRobert Mustacchicheck_one "i2csim0/0" 0x03 reserved 69*0cbe4818SRobert Mustacchicheck_one "i2csim0/0" 0x04 reserved 70*0cbe4818SRobert Mustacchicheck_one "i2csim0/0" 0x05 reserved 71*0cbe4818SRobert Mustacchicheck_one "i2csim0/0" 0x06 reserved 72*0cbe4818SRobert Mustacchicheck_one "i2csim0/0" 0x07 reserved 73*0cbe4818SRobert Mustacchicheck_one "i2csim0/0" 0x78 reserved 74*0cbe4818SRobert Mustacchicheck_one "i2csim0/0" 0x79 reserved 75*0cbe4818SRobert Mustacchicheck_one "i2csim0/0" 0x7a reserved 76*0cbe4818SRobert Mustacchicheck_one "i2csim0/0" 0x7b reserved 77*0cbe4818SRobert Mustacchicheck_one "i2csim0/0" 0x7c reserved 78*0cbe4818SRobert Mustacchicheck_one "i2csim0/0" 0x7d reserved 79*0cbe4818SRobert Mustacchicheck_one "i2csim0/0" 0x7e reserved 80*0cbe4818SRobert Mustacchicheck_one "i2csim0/0" 0x7f reserved 81*0cbe4818SRobert Mustacchicheck_one "i2csim0/0" 0x10 found 82*0cbe4818SRobert Mustacchicheck_one "i2csim0/0" 0x20 found 83*0cbe4818SRobert Mustacchicheck_one "i2csim0/0" 0x21 found 84*0cbe4818SRobert Mustacchicheck_one "i2csim0/0" 0x22 found 85*0cbe4818SRobert Mustacchicheck_one "i2csim0/0" 0x23 found 86*0cbe4818SRobert Mustacchicheck_one "i2csim0/0" 0x70 found 87*0cbe4818SRobert Mustacchicheck_one "i2csim0/0" 0x71 missing 88*0cbe4818SRobert Mustacchicheck_one "i2csim0/0" 0x72 missing 89*0cbe4818SRobert Mustacchicheck_one "i2csim0/0" 0x42 missing 90*0cbe4818SRobert Mustacchicheck_one "i2csim0/0" 0x58 missing 91*0cbe4818SRobert Mustacchicheck_one "i2csim0/0" 0x6f missing 92*0cbe4818SRobert Mustacchi 93*0cbe4818SRobert Mustacchiread_scan i2csim0/0/0x70/0 94*0cbe4818SRobert Mustacchicheck_one "i2csim0/0/0x70/0" 0x42 missing 95*0cbe4818SRobert Mustacchicheck_one "i2csim0/0/0x70/0" 0x70 found 96*0cbe4818SRobert Mustacchicheck_one "i2csim0/0/0x70/0" 0x71 found 97*0cbe4818SRobert Mustacchicheck_one "i2csim0/0/0x70/0" 0x72 missing 98*0cbe4818SRobert Mustacchi 99*0cbe4818SRobert Mustacchiread_scan i2csim0/0/0x70/1 100*0cbe4818SRobert Mustacchicheck_one "i2csim0/0/0x70/1" 0x42 missing 101*0cbe4818SRobert Mustacchicheck_one "i2csim0/0/0x70/1" 0x70 found 102*0cbe4818SRobert Mustacchicheck_one "i2csim0/0/0x70/1" 0x71 found 103*0cbe4818SRobert Mustacchicheck_one "i2csim0/0/0x70/1" 0x72 missing 104*0cbe4818SRobert Mustacchi 105*0cbe4818SRobert Mustacchiread_scan i2csim0/0/0x70/2 106*0cbe4818SRobert Mustacchicheck_one "i2csim0/0/0x70/2" 0x42 missing 107*0cbe4818SRobert Mustacchicheck_one "i2csim0/0/0x70/2" 0x70 found 108*0cbe4818SRobert Mustacchicheck_one "i2csim0/0/0x70/2" 0x71 found 109*0cbe4818SRobert Mustacchicheck_one "i2csim0/0/0x70/2" 0x72 found 110*0cbe4818SRobert Mustacchi 111*0cbe4818SRobert Mustacchiread_scan i2csim0/0/0x70/3 112*0cbe4818SRobert Mustacchicheck_one "i2csim0/0/0x70/2" 0x42 missing 113*0cbe4818SRobert Mustacchicheck_one "i2csim0/0/0x70/2" 0x70 found 114*0cbe4818SRobert Mustacchicheck_one "i2csim0/0/0x70/2" 0x71 found 115*0cbe4818SRobert Mustacchicheck_one "i2csim0/0/0x70/2" 0x72 found 116*0cbe4818SRobert Mustacchi 117*0cbe4818SRobert Mustacchiread_scan i2csim0/0/0x70/7 118*0cbe4818SRobert Mustacchicheck_one "i2csim0/0/0x70/7" 0x10 found 119*0cbe4818SRobert Mustacchicheck_one "i2csim0/0/0x70/7" 0x20 found 120*0cbe4818SRobert Mustacchicheck_one "i2csim0/0/0x70/7" 0x70 found 121*0cbe4818SRobert Mustacchicheck_one "i2csim0/0/0x70/7" 0x71 missing 122*0cbe4818SRobert Mustacchicheck_one "i2csim0/0/0x70/7" 0x72 missing 123*0cbe4818SRobert Mustacchi 124*0cbe4818SRobert Mustacchifor port in {0..7}; do 125*0cbe4818SRobert Mustacchi read_scan i2csim0/0/0x70/0/0x71/$port 126*0cbe4818SRobert Mustacchi check_one "i2csim0/0/0x70/0/0x71/$port" 0x42 missing 127*0cbe4818SRobert Mustacchi check_one "i2csim0/0/0x70/0/0x71/$port" 0x70 found 128*0cbe4818SRobert Mustacchi check_one "i2csim0/0/0x70/0/0x71/$port" 0x71 found 129*0cbe4818SRobert Mustacchi check_one "i2csim0/0/0x70/0/0x71/$port" 0x72 found 130*0cbe4818SRobert Mustacchi check_one "i2csim0/0/0x70/0/0x71/$port" 0x73 missing 131*0cbe4818SRobert Mustacchidone 132*0cbe4818SRobert Mustacchi 133*0cbe4818SRobert Mustacchiif (( i2c_exit == 0 )); then 134*0cbe4818SRobert Mustacchi printf "All tests passed successfully!\n" 135*0cbe4818SRobert Mustacchifi 136*0cbe4818SRobert Mustacchi 137*0cbe4818SRobert Mustacchiexit $i2c_exit 138