sonic-buildimage/platform/broadcom/sonic-platform-modules-cel/debian/platform-modules-haliburton.init
Ikki Zhu b23078b52b
[E1031] fix pca9548 initializes failed occasionally (#15712)
Why I did it
[E1031] fix pca9548 initializes failed occasionally in stress test.
When failure happened, ismt i2c bus hang up and need power cycle to
recover it.

How I did it
Add 0.5s delay between setuping and configuring pca9548 i2c mux.

How to verify it
Reboot stress test at least 100 times without failure.
2023-07-30 09:42:14 -07:00

118 lines
3.3 KiB
Bash

#!/bin/bash
### BEGIN INIT INFO
# Provides: setup-board
# Required-Start: $portmap
# Required-Stop:
# Should-Start:
# Should-Stop:
# Default-Start: S
# Default-Stop: 0 6
# Short-Description: Setup Haliburton board.
### END INIT INFO
setup_swap () {
SWAPFILE=/host/myswapfile
if [ ! -f $SWAPFILE ]; then
availspace=`df -h --output=avail /host | sed '1d;s/\s//g;s/[^0-9].*//g'`
diff=$(( availspace - 2*$1 ))
if [ $diff -gt 0 ]; then
fallocate -l ${1}G $SWAPFILE
chmod 600 $SWAPFILE
echo "swap file created successfully"
else
echo "not enough disk space to turn on swap."
return
fi
fi
mkswap $SWAPFILE
swapon $SWAPFILE
echo "swap on successfully"
}
case "$1" in
start)
echo -n "Setting up board... "
modprobe smc
modprobe hlx_gpio_ich
modprobe dps200
modprobe cp210x
found=0
for devnum in 0 1; do
devname=`cat /sys/bus/i2c/devices/i2c-${devnum}/name`
# iSMT adapter can be at either dffd0000 or dfff0000
if [[ $devname == 'SMBus iSMT adapter at '* ]]; then
found=1
break
fi
done
[ $found -eq 0 ] && echo "cannot find iSMT" && exit 1
i2cset -y ${devnum} 0x73 0x10 0x00 0x01 i
sleep 0.5
# Attach PCA9548 0x73 Channel Extender for CPU Board
echo pca9548 0x73 > /sys/bus/i2c/devices/i2c-${devnum}/new_device
sleep 1
# Attach PCA9541 Ox71 Master Selector
chmod 755 /sys/bus/i2c/devices/i2c-${devnum}/new_device
echo pca9548 0x71 > /sys/bus/i2c/devices/i2c-8/new_device
sleep 1
# Attach PCA9548 0x72 Channel Extender for Main Board
echo pca9548 0x72 > /sys/bus/i2c/devices/i2c-8/new_device
sleep 1
# Attach syseeprom
echo 24lc64t 0x50 > /sys/bus/i2c/devices/i2c-2/new_device
echo max6699 0x1a > /sys/bus/i2c/devices/i2c-3/new_device
echo max6699 0x1a > /sys/bus/i2c/devices/i2c-11/new_device
# Attach PSUs
echo dps200 0x5a > /sys/bus/i2c/devices/i2c-12/new_device
echo 24c02 0x52 > /sys/bus/i2c/devices/i2c-12/new_device
echo dps200 0x5b > /sys/bus/i2c/devices/i2c-13/new_device
echo 24c02 0x53 > /sys/bus/i2c/devices/i2c-13/new_device
# Attach fans
echo emc2305 0x4d > /sys/bus/i2c/devices/i2c-23/new_device
# Attach 4 SFP+ Uplink
echo optoe2 0x50 > /sys/bus/i2c/devices/i2c-14/new_device
echo optoe2 0x50 > /sys/bus/i2c/devices/i2c-15/new_device
echo optoe2 0x50 > /sys/bus/i2c/devices/i2c-16/new_device
echo optoe2 0x50 > /sys/bus/i2c/devices/i2c-17/new_device
# Enable SFP module presence interrupt
echo "both" > /sys/devices/platform/e1031.smc/SFP/modabs_trig
echo 0 > /sys/devices/platform/e1031.smc/SFP/modabs_mask
/bin/sh /usr/local/bin/platform_api_mgnt.sh init
setup_swap 2
echo "done."
;;
stop)
echo "done."
;;
force-reload|restart)
echo "Not supported"
;;
*)
echo "Usage: /etc/init.d/platform-modules-haliburton.init {start|stop}"
exit 1
;;
esac
exit 0