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