xref: /illumos-gate/usr/src/test/i2c-tests/tests/i2cadm/i2cadm.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 functionality of i2cadm against the automatically set up tree. This
19*0cbe4818SRobert Mustacchi# generally covers bad arguments, good and bad filters, and ofmt. Positive
20*0cbe4818SRobert Mustacchi# tests for performing io and scanning are in separate programs.
21*0cbe4818SRobert Mustacchi#
22*0cbe4818SRobert Mustacchi
23*0cbe4818SRobert Mustacchi. $(dirname $0)/common.ksh
24*0cbe4818SRobert Mustacchi
25*0cbe4818SRobert Mustacchi#
26*0cbe4818SRobert Mustacchi# Bad arguments to the program
27*0cbe4818SRobert Mustacchi#
28*0cbe4818SRobert Mustacchii2cadm_fail
29*0cbe4818SRobert Mustacchii2cadm_fail controller
30*0cbe4818SRobert Mustacchii2cadm_fail controller foobar
31*0cbe4818SRobert Mustacchii2cadm_fail controller help
32*0cbe4818SRobert Mustacchii2cadm_fail controller 123
33*0cbe4818SRobert Mustacchii2cadm_fail controller list -wat
34*0cbe4818SRobert Mustacchii2cadm_fail controller list -o
35*0cbe4818SRobert Mustacchii2cadm_fail controller list -o foobar
36*0cbe4818SRobert Mustacchii2cadm_fail controller list -p
37*0cbe4818SRobert Mustacchii2cadm_fail controller prop get
38*0cbe4818SRobert Mustacchii2cadm_fail controller prop get -p i2csim0
39*0cbe4818SRobert Mustacchii2cadm_fail controller prop get -H -p i2csim0
40*0cbe4818SRobert Mustacchii2cadm_fail controller prop get -H -p i2csim0
41*0cbe4818SRobert Mustacchii2cadm_fail controller prop get -o foo i2csim0
42*0cbe4818SRobert Mustacchii2cadm_fail controller prop get -o foo
43*0cbe4818SRobert Mustacchii2cadm_fail controller prop set
44*0cbe4818SRobert Mustacchii2cadm_fail controller prop set speed
45*0cbe4818SRobert Mustacchii2cadm_fail controller prop set i2csim0
46*0cbe4818SRobert Mustacchii2cadm_fail controller prop set i2csim0 speed
47*0cbe4818SRobert Mustacchii2cadm_fail controller prop set i2csim0 speed=
48*0cbe4818SRobert Mustacchii2cadm_fail controller prop set i2csim0 i2c-max-read=0x
49*0cbe4818SRobert Mustacchii2cadm_fail controller prop set i2csim0 i2c-max-read=nope
50*0cbe4818SRobert Mustacchii2cadm_fail controller prop set i2csim0 i2c-max-read=0x2nope
51*0cbe4818SRobert Mustacchii2cadm_fail controller prop set i2csim0 i2c-max-read=42answer
52*0cbe4818SRobert Mustacchii2cadm_fail device
53*0cbe4818SRobert Mustacchii2cadm_fail device help
54*0cbe4818SRobert Mustacchii2cadm_fail device sephiroth
55*0cbe4818SRobert Mustacchii2cadm_fail device list cloud
56*0cbe4818SRobert Mustacchii2cadm_fail device list -o
57*0cbe4818SRobert Mustacchii2cadm_fail device list -o aerith
58*0cbe4818SRobert Mustacchii2cadm_fail device list -o aerith i2csim0
59*0cbe4818SRobert Mustacchii2cadm_fail device list -p
60*0cbe4818SRobert Mustacchii2cadm_fail device addrs cloud
61*0cbe4818SRobert Mustacchii2cadm_fail device addrs -o
62*0cbe4818SRobert Mustacchii2cadm_fail device addrs -o aerith
63*0cbe4818SRobert Mustacchii2cadm_fail device addrs -o aerith i2csim0
64*0cbe4818SRobert Mustacchii2cadm_fail device addrs -p
65*0cbe4818SRobert Mustacchii2cadm_fail device add
66*0cbe4818SRobert Mustacchii2cadm_fail device add i2csim0/0
67*0cbe4818SRobert Mustacchii2cadm_fail device add i2csim0/0 foobar
68*0cbe4818SRobert Mustacchii2cadm_fail device add i2csim0/0 foobar 0x11 trailing
69*0cbe4818SRobert Mustacchii2cadm_fail device add i2csim0/0 foo@bar 0x11
70*0cbe4818SRobert Mustacchii2cadm_fail device add i2csim0/0 1oobar 0x11
71*0cbe4818SRobert Mustacchii2cadm_fail device add i2csim0/0 foo^bar% 0x11
72*0cbe4818SRobert Mustacchii2cadm_fail device add i2csim0/0 'foo bar' 0x11
73*0cbe4818SRobert Mustacchii2cadm_fail device add i2csim0 foobar 0x11
74*0cbe4818SRobert Mustacchii2cadm_fail device add i2csim0/0/0x20 foobar 0x11
75*0cbe4818SRobert Mustacchii2cadm_fail device remove
76*0cbe4818SRobert Mustacchii2cadm_fail device remove i2csim0
77*0cbe4818SRobert Mustacchii2cadm_fail device remove i2csim0/0
78*0cbe4818SRobert Mustacchii2cadm_fail device remove i2csim0/23
79*0cbe4818SRobert Mustacchii2cadm_fail device remove i2csim0/0/0x11
80*0cbe4818SRobert Mustacchii2cadm_fail device remove i2csim0/0/0x70/0/0x11
81*0cbe4818SRobert Mustacchii2cadm_fail device remove i2csim0/0x10
82*0cbe4818SRobert Mustacchii2cadm_fail device remove i2csim0/23/0x10
83*0cbe4818SRobert Mustacchii2cadm_fail device remove i2csim0/0/0x10 extra
84*0cbe4818SRobert Mustacchii2cadm_fail mux
85*0cbe4818SRobert Mustacchii2cadm_fail mux cid
86*0cbe4818SRobert Mustacchii2cadm_fail mux list -o
87*0cbe4818SRobert Mustacchii2cadm_fail mux list -o tifa
88*0cbe4818SRobert Mustacchii2cadm_fail mux list -o tifa i2csim0
89*0cbe4818SRobert Mustacchii2cadm_fail mux list -p
90*0cbe4818SRobert Mustacchii2cadm_fail port
91*0cbe4818SRobert Mustacchii2cadm_fail port vincent
92*0cbe4818SRobert Mustacchii2cadm_fail port list -o
93*0cbe4818SRobert Mustacchii2cadm_fail port list -o red13
94*0cbe4818SRobert Mustacchii2cadm_fail port list -o red13 i2csim0
95*0cbe4818SRobert Mustacchii2cadm_fail port list -p
96*0cbe4818SRobert Mustacchii2cadm_fail port map
97*0cbe4818SRobert Mustacchii2cadm_fail port map -p i2csim0/0
98*0cbe4818SRobert Mustacchii2cadm_fail port map -o foo i2csim0/0
99*0cbe4818SRobert Mustacchii2cadm_fail port map -p -o foo
100*0cbe4818SRobert Mustacchii2cadm_fail port map -p -o type
101*0cbe4818SRobert Mustacchii2cadm_fail port map -wtf i2csim0/0
102*0cbe4818SRobert Mustacchii2cadm_fail port map i2csim0
103*0cbe4818SRobert Mustacchii2cadm_fail port map i2csim0/23
104*0cbe4818SRobert Mustacchii2cadm_fail port map i2csim0/0/0x10
105*0cbe4818SRobert Mustacchii2cadm_fail port map i2csim0/0/0x70
106*0cbe4818SRobert Mustacchii2cadm_fail port map i2csim0/0/0x70/0/0x71
107*0cbe4818SRobert Mustacchii2cadm_fail io
108*0cbe4818SRobert Mustacchii2cadm_fail io i2csim0/0
109*0cbe4818SRobert Mustacchii2cadm_fail io -m i2c
110*0cbe4818SRobert Mustacchii2cadm_fail io -m i2c -a 0x20
111*0cbe4818SRobert Mustacchii2cadm_fail io -m i2c -d i2csim0/0/0x10 -r hello
112*0cbe4818SRobert Mustacchii2cadm_fail io -m i2c -d i2csim0/0/0x10 -r 0x7777
113*0cbe4818SRobert Mustacchii2cadm_fail io -m i2c -d i2csim0/0 -a 0x10 -r hello
114*0cbe4818SRobert Mustacchii2cadm_fail io -m i2c -d i2csim0/0 -a 0x10 -r 0x7777
115*0cbe4818SRobert Mustacchii2cadm_fail io -m i2c -c 0x23 -a 0x10 -r 0x4 -w 2 0x00 0x00
116*0cbe4818SRobert Mustacchii2cadm_fail io -m read-u8 -d i2csim0/0/x20
117*0cbe4818SRobert Mustacchii2cadm_fail io -m recv-u8 -c 0x23 -d i2csim0/0/0x20
118*0cbe4818SRobert Mustacchii2cadm_fail io -d i2csim0/0 -r 2 -w 1 0x00
119*0cbe4818SRobert Mustacchii2cadm_fail io -d i2csim0/0/x20 -r 2 -w 1 0x00
120*0cbe4818SRobert Mustacchii2cadm_fail io -d i2csim0/0/0x20
121*0cbe4818SRobert Mustacchii2cadm_fail io -d i2csim0/0/0x20 -w 1
122*0cbe4818SRobert Mustacchii2cadm_fail scan
123*0cbe4818SRobert Mustacchii2cadm_fail scan -p
124*0cbe4818SRobert Mustacchii2cadm_fail scan -p -o addr,result
125*0cbe4818SRobert Mustacchii2cadm_fail scan -p i2csim0/0
126*0cbe4818SRobert Mustacchii2cadm_fail scan -c i2csim0/0
127*0cbe4818SRobert Mustacchii2cadm_fail scan -d foobar i2csim0/0
128*0cbe4818SRobert Mustacchii2cadm_fail scan -d 0x7777 i2csim0/0
129*0cbe4818SRobert Mustacchii2cadm_fail scan -d 0x10 -d 0x7777 i2csim0/0
130*0cbe4818SRobert Mustacchii2cadm_fail scan i2csim0/0/0x10
131*0cbe4818SRobert Mustacchii2cadm_fail scan i2csim0/0/0x70
132*0cbe4818SRobert Mustacchii2cadm_fail scan i2csim0/0/0x70/0/0x71
133*0cbe4818SRobert Mustacchii2cadm_fail scan i2csim0/0/0x70/0/0x71/2/0x72
134*0cbe4818SRobert Mustacchi
135*0cbe4818SRobert Mustacchi#
136*0cbe4818SRobert Mustacchi# Bad filters
137*0cbe4818SRobert Mustacchi#
138*0cbe4818SRobert Mustacchii2cadm_fail controller list 2345
139*0cbe4818SRobert Mustacchii2cadm_fail controller list bl@rgh
140*0cbe4818SRobert Mustacchii2cadm_fail controller list i2csim7777
141*0cbe4818SRobert Mustacchii2cadm_fail controller prop get i2csim0 2345
142*0cbe4818SRobert Mustacchii2cadm_fail controller prop get i2csim0 speed foobar
143*0cbe4818SRobert Mustacchii2cadm_fail controller prop get i2csimXXyy
144*0cbe4818SRobert Mustacchii2cadm_fail controller prop get foo^bar
145*0cbe4818SRobert Mustacchii2cadm_fail device list triforce
146*0cbe4818SRobert Mustacchii2cadm_fail device list i2csim0 triforce
147*0cbe4818SRobert Mustacchii2cadm_fail device list i2csim0/XXX
148*0cbe4818SRobert Mustacchii2cadm_fail device list i2csim0/0/itsatrap
149*0cbe4818SRobert Mustacchii2cadm_fail device list i2csim0/0/0x11
150*0cbe4818SRobert Mustacchii2cadm_fail device list magecite%materia
151*0cbe4818SRobert Mustacchii2cadm_fail device addrs triforce
152*0cbe4818SRobert Mustacchii2cadm_fail device addrs power courage i2csim0/0
153*0cbe4818SRobert Mustacchii2cadm_fail device addrs i2csim0/XXX
154*0cbe4818SRobert Mustacchii2cadm_fail device addrs i2csim0/0/itsatrap
155*0cbe4818SRobert Mustacchii2cadm_fail device addrs magecite%materia
156*0cbe4818SRobert Mustacchii2cadm_fail mux list triforce
157*0cbe4818SRobert Mustacchii2cadm_fail mux list i2csim0 triforce
158*0cbe4818SRobert Mustacchii2cadm_fail mux list i2csim0/XXX
159*0cbe4818SRobert Mustacchii2cadm_fail mux list i2csim0/0/itsatrap
160*0cbe4818SRobert Mustacchii2cadm_fail mux list magecite%materia
161*0cbe4818SRobert Mustacchii2cadm_fail port list triforce
162*0cbe4818SRobert Mustacchii2cadm_fail port list power courage i2csim0/0
163*0cbe4818SRobert Mustacchii2cadm_fail port list i2csim0/XXX
164*0cbe4818SRobert Mustacchii2cadm_fail port list i2csim0/0/itsatrap
165*0cbe4818SRobert Mustacchii2cadm_fail port list magecite%materia
166*0cbe4818SRobert Mustacchi
167*0cbe4818SRobert Mustacchi#
168*0cbe4818SRobert Mustacchi# Read-only properties
169*0cbe4818SRobert Mustacchi#
170*0cbe4818SRobert Mustacchii2cadm_fail controller prop set i2csim0 ports=23
171*0cbe4818SRobert Mustacchii2cadm_fail controller prop set i2csim0 smbus-ops=send-byte
172*0cbe4818SRobert Mustacchii2cadm_fail controller prop set i2csim0 i2c-max-read=169
173*0cbe4818SRobert Mustacchi
174*0cbe4818SRobert Mustacchi#
175*0cbe4818SRobert Mustacchi# Things that should pass. A subset of these we use our simulation based devices
176*0cbe4818SRobert Mustacchi# and verify that the output is as we expect.
177*0cbe4818SRobert Mustacchi#
178*0cbe4818SRobert Mustacchii2cadm_pass controller list
179*0cbe4818SRobert Mustacchii2cadm_pass controller list i2csim0
180*0cbe4818SRobert Mustacchii2cadm_pass controller list smbussim1
181*0cbe4818SRobert Mustacchii2cadm_pass controller list i2csim0 smbussim1
182*0cbe4818SRobert Mustacchii2cadm_check_output "i2csim0:i2c" controller list -Hpo name,type i2csim0
183*0cbe4818SRobert Mustacchii2cadm_check_output "smbussim1" controller list -Hpo name smbussim1
184*0cbe4818SRobert Mustacchii2cadm_check_output "2:i2csim" controller list -Hpo nports,driver smbussim1
185*0cbe4818SRobert Mustacchii2cadm_check_output "i2csim0" controller list -Hpo instance i2csim0
186*0cbe4818SRobert Mustacchii2cadm_check_output "standard:/pseudo/i2csim@0/i2cnex@i2csim0" controller list \
187*0cbe4818SRobert Mustacchi    -Hpo speed,provider i2csim0
188*0cbe4818SRobert Mustacchii2cadm_pass controller prop get i2csim0
189*0cbe4818SRobert Mustacchii2cadm_pass controller prop get smbussim1
190*0cbe4818SRobert Mustacchii2cadm_pass controller prop get i2csim0 speed smbus-ops type
191*0cbe4818SRobert Mustacchii2cadm_check_output "speed:standard" controller prop get -Hpo property,value \
192*0cbe4818SRobert Mustacchi    i2csim0 speed
193*0cbe4818SRobert Mustacchii2cadm_check_output "smbus:r-" controller prop get -Hpo value,perm smbussim1 \
194*0cbe4818SRobert Mustacchi    type
195*0cbe4818SRobert Mustacchii2cadm_check_output "bit32:i2csim0" controller prop get -Hpo type,controller \
196*0cbe4818SRobert Mustacchi    i2csim0 smbus-ops
197*0cbe4818SRobert Mustacchii2cadm_pass device list
198*0cbe4818SRobert Mustacchii2cadm_pass device list i2csim0
199*0cbe4818SRobert Mustacchii2cadm_pass device list i2csim0/0
200*0cbe4818SRobert Mustacchii2cadm_pass device list ts5111
201*0cbe4818SRobert Mustacchii2cadm_pass device list pca954x
202*0cbe4818SRobert Mustacchii2cadm_pass device list at24c4 i2csim0
203*0cbe4818SRobert Mustacchii2cadm_pass device list i2csim0/0/0x10
204*0cbe4818SRobert Mustacchii2cadm_pass device list i2csim0/0/0x70/3
205*0cbe4818SRobert Mustacchii2cadm_check_output "at24c32" device list -Hpo name i2csim0/0/0x10
206*0cbe4818SRobert Mustacchii2cadm_check_output "at24c08" device list -Hpo name i2csim0/0/0x20
207*0cbe4818SRobert Mustacchii2cadm_check_output "0x72" device list -Hpo addr i2csim0/0/0x70/0/0x71/0
208*0cbe4818SRobert Mustacchii2cadm_check_output "0x72" device list -Hpo addr i2csim0/0/0x70/0/0x71/4
209*0cbe4818SRobert Mustacchii2cadm_check_output "i2csim0/0/0x70/0/0x71/7/0x72" device list -Hpo path \
210*0cbe4818SRobert Mustacchi    i2csim0/0/0x70/0/0x71/7
211*0cbe4818SRobert Mustacchi#
212*0cbe4818SRobert Mustacchi# Claimed addresses come and go so we elide them based on whether the driver is
213*0cbe4818SRobert Mustacchi# attached or detached so we leave them out of the test suite.
214*0cbe4818SRobert Mustacchi#
215*0cbe4818SRobert Mustacchii2cadm_pass device addrs
216*0cbe4818SRobert Mustacchii2cadm_pass device addrs i2csim0
217*0cbe4818SRobert Mustacchii2cadm_pass device addrs pca9548
218*0cbe4818SRobert Mustacchii2cadm_pass device addrs at24c
219*0cbe4818SRobert Mustacchii2cadm_pass device addrs i2csim0/0/0x70/1/0x71 ts5111
220*0cbe4818SRobert Mustacchii2cadm_check_output "7-bit:0x10" device addrs -Hpo type,addr i2csim0/0/0x10
221*0cbe4818SRobert Mustacchii2cadm_check_output "platform" device addrs -Hpo source i2csim0/0/0x70/2/0x72
222*0cbe4818SRobert Mustacchii2cadm_pass mux list
223*0cbe4818SRobert Mustacchii2cadm_pass mux list pca9548
224*0cbe4818SRobert Mustacchii2cadm_pass mux list pca954x
225*0cbe4818SRobert Mustacchii2cadm_pass mux list -Ho name,nports,device
226*0cbe4818SRobert Mustacchii2cadm_pass mux list -po name,nports,device pca954x
227*0cbe4818SRobert Mustacchii2cadm_pass port list
228*0cbe4818SRobert Mustacchii2cadm_pass port list i2csim0
229*0cbe4818SRobert Mustacchii2cadm_pass port list smbussim1
230*0cbe4818SRobert Mustacchii2cadm_pass port list smbussim1/1
231*0cbe4818SRobert Mustacchii2cadm_pass port list smbussim1/1 i2csim0/0
232*0cbe4818SRobert Mustacchii2cadm_pass port list controller
233*0cbe4818SRobert Mustacchii2cadm_pass port list multiplexor
234*0cbe4818SRobert Mustacchii2cadm_pass port list i2csim0/0 i2csim0/0/0x70/4
235*0cbe4818SRobert Mustacchii2cadm_pass port list i2csim0/0/0x70/0/0x71/7
236*0cbe4818SRobert Mustacchii2cadm_check_output "1:1" port list -Hpo ndevs,tdevs i2csim0/0/0x70/0/0x71/7
237*0cbe4818SRobert Mustacchii2cadm_check_output "4:4" port list -Hpo name,portno i2csim0/0/0x70/4
238*0cbe4818SRobert Mustacchii2cadm_check_output "controller" port list -Hpo type smbussim1/1
239*0cbe4818SRobert Mustacchii2cadm_pass port map i2csim0/0
240*0cbe4818SRobert Mustacchii2cadm_pass port map i2csim0/0/0x70/3
241*0cbe4818SRobert Mustacchii2cadm_pass port map i2csim0/0/0x70/0/0x71/7
242*0cbe4818SRobert Mustacchii2cadm_pass port map smbussim1/1
243*0cbe4818SRobert Mustacchii2cadm_pass port map -Ho addr,major,driver i2csim0/0
244*0cbe4818SRobert Mustacchii2cadm_pass port map -po count,type i2csim0/0
245*0cbe4818SRobert Mustacchi
246*0cbe4818SRobert Mustacchiif (( i2c_exit == 0 )); then
247*0cbe4818SRobert Mustacchi	printf "All tests passed successfully!\n"
248*0cbe4818SRobert Mustacchifi
249*0cbe4818SRobert Mustacchi
250*0cbe4818SRobert Mustacchiexit $i2c_exit
251