sonic-buildimage/platform/broadcom/sonic-platform-modules-cel/debian/platform-modules-dx010.init
Eric Zhu deac4eed64
sonic-platform-modules-cel dx010: speed up dx010 platform init script (#10237)
Why I did it
To fix issue #10152 for dx010.
202012 Warm upgrade causes lacp-teardown on Dx010 TOR. platform code initialize slow causing lacp timeout.

How I did it
Remove the python2 sonic platform wheel which is deprecated.
Optimize the dx010 sonic platform script to speed up the init process.

How to verify it
Check the warm reboot log, warm reboot is 8-9s faster than before.

Signed-off-by: Eric Zhu <erzhu@celestica.com>
2022-03-21 09:28:25 -07:00

180 lines
5.5 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 DX010 board.
### END INIT INFO
function export_gpio {
label=$3
gpio_dir=$2
gpio_num=$1
gpio_base=`( cat /sys/class/gpio/gpiochip*/base | head -1 ) 2>/dev/null`
gpio_label=`( cat /sys/class/gpio/gpiochip*/label | head -1 ) 2>/dev/null`
if [[ "X$gpio_base" == "X" ]] ||
( [[ "X$label" != "X" ]] && [[ "$label" != "$gpio_label" ]] ); then
echo "Platform driver error: No gpiochip found!"
exit 1;
fi
ionum=$((gpio_base+gpio_num))
echo $ionum > /sys/class/gpio/export
if [ $? -ne 0 ]; then
echo "Platform driver error: Cannot export gpio$ionum!"
exit 1;
fi
if [[ "X$gpio_dir" != "X" ]]; then
echo $gpio_dir > /sys/class/gpio/gpio${ionum}/direction
if [ $? -ne 0 ]; then
echo "Platform driver error: Cannot set direction of gpio$ionum!"
exit 1;
fi
fi
}
case "$1" in
start)
echo -n "Setting up board... "
modprobe i2c-dev
modprobe i2c-mux-pca954x force-deselect-on-exit=1
modprobe dx010_wdt
modprobe leds-dx010
modprobe lm75
modprobe slx_gpio_ich
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} 0x70 0x10 0x00 0x01 i
sleep 0.1
# Attach PCA9548 0x71 Channel Extender for Main Board
echo pca9548 0x71 > /sys/bus/i2c/devices/i2c-${devnum}/new_device
sleep 0.1
# Attach PCA9548 0x73 Channel Extender for CPU Board
echo pca9548 0x73 > /sys/bus/i2c/devices/i2c-${devnum}/new_device
sleep 0.1
# Attach PCA9548 0x77 Channel Extender for Fan's EEPROMs
echo pca9548 0x77 > /sys/bus/i2c/devices/i2c-${devnum}/new_device
sleep 0.1
# Attach syseeprom
echo 24lc64t 0x50 > /sys/bus/i2c/devices/i2c-12/new_device
# Attach temperature sensors
echo lm75b 0x48 > /sys/bus/i2c/devices/i2c-5/new_device
echo lm75b 0x49 > /sys/bus/i2c/devices/i2c-6/new_device
echo lm75b 0x4a > /sys/bus/i2c/devices/i2c-7/new_device
echo lm75b 0x48 > /sys/bus/i2c/devices/i2c-14/new_device
echo lm75b 0x4e > /sys/bus/i2c/devices/i2c-15/new_device
# Attach fans
echo emc2305 0x2e > /sys/bus/i2c/devices/i2c-13/new_device
echo emc2305 0x4d > /sys/bus/i2c/devices/i2c-13/new_device
echo 24c02 0x50 > /sys/bus/i2c/devices/i2c-18/new_device
echo 24c02 0x50 > /sys/bus/i2c/devices/i2c-19/new_device
echo 24c02 0x50 > /sys/bus/i2c/devices/i2c-20/new_device
echo 24c02 0x50 > /sys/bus/i2c/devices/i2c-21/new_device
echo 24c02 0x50 > /sys/bus/i2c/devices/i2c-22/new_device
# Attach PSUs
echo dps460 0x5a > /sys/bus/i2c/devices/i2c-10/new_device
echo dps460 0x5b > /sys/bus/i2c/devices/i2c-11/new_device
echo 24c02 0x52 > /sys/bus/i2c/devices/i2c-10/new_device
echo 24c02 0x53 > /sys/bus/i2c/devices/i2c-11/new_device
# Attach PCA9506 GPIO expander for 40 pins
echo pca9505 0x20 > /sys/bus/i2c/devices/i2c-17/new_device
modprobe dx010_cpld
sleep 1
# Export platform gpio sysfs
export_gpio 10 "in" # Fan 1 present
export_gpio 11 "in" # Fan 2 present
export_gpio 12 "in" # Fan 3 present
export_gpio 13 "in" # Fan 4 present
export_gpio 14 "in" # Fan 5 present
export_gpio 15 "in" # Fan 1 direction
export_gpio 16 "in" # Fan 2 direction
export_gpio 17 "in" # Fan 3 direction
export_gpio 18 "in" # Fan 4 direction
export_gpio 19 "in" # Fan 5 direction
export_gpio 22 "in" # PSU L PWOK
export_gpio 25 "in" # PSU R PWOK
export_gpio 27 "in" # PSU L ABS
export_gpio 28 "in" # PSU R ABS
export_gpio 29 "out" # Fan 2 LED: Red
export_gpio 30 "out" # Fan 2 LED: Green
export_gpio 31 "out" # Fan 1 LED: Red
export_gpio 32 "out" # Fan 1 LED: Green
export_gpio 33 "out" # Fan 5 LED: Red
export_gpio 34 "out" # Fan 5 LED: Green
export_gpio 35 "out" # Fan 3 LED: Red
export_gpio 36 "out" # Fan 3 LED: Green
export_gpio 37 "out" # Fan 4 LED: Red
export_gpio 38 "out" # Fan 4 LED: Green
# Turn off/down lpmod by defult (0 - Normal, 1 - Low Pow)
echo 0x00000000 > /sys/devices/platform/dx010_cpld/qsfp_lpmode
# Attach 32 instances of EEPROM driver QSFP ports
for ((n=26;n<=58;n++));
do
echo optoe1 0x50 > /sys/bus/i2c/devices/i2c-$n/new_device
sleep 0.1
done
bus_en=8
cfg_r=`i2cget -y -f 8 0x60 0xD1`
((cfg_w=$cfg_r+$bus_en))
i2cset -y -f 8 0x60 0xD1 $cfg_w
sleep 0.1
cfg_r=`i2cget -y -f 9 0x20 0xD1`
((cfg_w=$cfg_r+$bus_en))
i2cset -y -f 9 0x20 0xD1 $cfg_w
sleep 0.1
/bin/sh /usr/local/bin/platform_api_mgnt.sh init
echo "done."
;;
stop)
echo "done."
;;
force-reload|restart)
echo "Not supported"
;;
*)
echo "Usage: /etc/init.d/platform-modules-dx010.init {start|stop}"
exit 1
;;
esac
exit 0