The original code tried to initialize PCA9541 without having the driver loaded. As result the initialization didn't take effect. Recently PCA9541 driver was added to the kernel and since then the initialization takes effect and has negatively impacted the platform stability. Commenting the initialization code out to restore the original behavior while analyzing further. Signed-off-by: Ying Xie <ying.xie@microsoft.com>
171 lines
5.4 KiB
Bash
171 lines
5.4 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
|
|
modprobe dx010_wdt
|
|
modprobe leds-dx010
|
|
modprobe lm75
|
|
|
|
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
|
|
|
|
# Attach PCA9541 Ox70 Master Selector
|
|
chmod 755 /sys/bus/i2c/devices/i2c-${devnum}/new_device
|
|
# FIXME: commenting out the following line.
|
|
# there had been no pca9541 driver loaded on Celestica platform,
|
|
# the recent addition of this driver casued following line
|
|
# becoming effictive, but negatively impacted the platform
|
|
# stability. Commenting it out restores the original behavior
|
|
# on Celestica platform.
|
|
# This change should be further analyzed and updated.
|
|
# echo pca9541 0x70 > /sys/bus/i2c/devices/i2c-${devnum}/new_device
|
|
sleep 1
|
|
|
|
# Attach PCA9548 0x71 Channel Extender for Main Board
|
|
echo pca9548 0x71 > /sys/bus/i2c/devices/i2c-${devnum}/new_device
|
|
sleep 1
|
|
|
|
# Attach PCA9548 0x73 Channel Extender for CPU Board
|
|
echo pca9548 0x73 > /sys/bus/i2c/devices/i2c-${devnum}/new_device
|
|
sleep 1
|
|
|
|
# Attach PCA9548 0x77 Channel Extender for Fan's EEPROMs
|
|
echo pca9548 0x77 > /sys/bus/i2c/devices/i2c-${devnum}/new_device
|
|
sleep 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
|
|
|
|
# Attach PSUs
|
|
echo dps460 0x5a > /sys/bus/i2c/devices/i2c-10/new_device
|
|
echo dps460 0x5b > /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 2
|
|
|
|
# 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 1 LED: Red
|
|
export_gpio 30 "out" # Fan 1 LED: Yellow
|
|
export_gpio 31 "out" # Fan 2 LED: Red
|
|
export_gpio 32 "out" # Fan 2 LED: Yellow
|
|
export_gpio 33 "out" # Fan 3 LED: Red
|
|
export_gpio 34 "out" # Fan 3 LED: Yellow
|
|
export_gpio 35 "out" # Fan 4 LED: Red
|
|
export_gpio 36 "out" # Fan 4 LED: Yellow
|
|
export_gpio 37 "out" # Fan 5 LED: Red
|
|
export_gpio 38 "out" # Fan 5 LED: Yellow
|
|
|
|
# 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
|
|
|
|
/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
|