xref: /illumos-gate/usr/src/test/i2c-tests/tests/i2cadm/i2cadm-scan.ksh (revision 0cbe48189888d02563dba9c90132ac391ba233b6)
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