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