blob: c1eece07d888459de698504c9236a63b72ffc363 [file] [log] [blame]
#! /bin/bash
cd /opt/bcm68620
# These files are mounted using tmpfs, so they will be deleted upon reboot
LOCK_DIR_INIT=/tmp/bcm68620_svk_init
FILE_INIT_DONE="$LOCK_DIR_INIT/done"
LOCK_DIR_KERNEL_LOG_OWNED=/tmp/bcm68620_kernel_log_owned
USER_APPL_ARGS=""
KT2_PORT=""
SWKT2_PORT=""
KERNEL_LOG="y"
COOP_DBA="n"
while (($#)); do
case "$1" in
--kt2)
shift
KT2_PORT="$1"
;;
--swkt2)
shift
SWKT2_PORT="$1"
;;
--proxy) # for backward compatibility (could just use '-proxy')
shift
USER_APPL_ARGS="$USER_APPL_ARGS -proxy $1"
;;
-nl)
KERNEL_LOG="n"
USER_APPL_ARGS="$USER_APPL_ARGS $1"
;;
-coop_dba)
COOP_DBA="y"
;;
*)
USER_APPL_ARGS="$USER_APPL_ARGS $1"
;;
esac
shift
done
# Check if the initialization steps (installing kernel modules, etc) have already been done.
# If not, start the initialization process.
if mkdir "$LOCK_DIR_INIT" 2>/dev/null; then
trap "rmdir \"$LOCK_DIR_INIT\"" EXIT
echo "Initializing BCM68620 SVK..."
insmod ll_pcie.ko
sleep 1
insmod os_linux.ko
sleep 1
source ./i2c_addrs.sh
insmod i2c_devs.ko
sleep 1
function probe_dev
{
2>/dev/null echo maple_i2c 0x$1 > /sys/bus/i2c/devices/i2c-0/new_device
}
# Suppress error warnings in case device cannot be probed because it is inexistent.
dmesg -n 1
probe_dev $I2C_SW0_I2C_ADDR
probe_dev $I2C_SW1_I2C_ADDR
probe_dev $I2C_SW2_I2C_ADDR
probe_dev $I2C_SW3_I2C_ADDR
probe_dev $I2C_SW4_I2C_ADDR
probe_dev $SFP_I2C_ADDR1
probe_dev $SFP_I2C_ADDR2
probe_dev $FPGA_I2C_ADDR
probe_dev $PON_DPLL_I2C_ADDR
probe_dev $PM_DPLL_I2C_ADDR
probe_dev $CXP_T_I2C_ADDR
probe_dev $CXP_R_I2C_ADDR
probe_dev $PCIE_SW_I2C_ADDR
dmesg -n 8
rm -f /dev/maple_i2c
mknod /dev/maple_i2c c `cat /sys/module/i2c_devs/parameters/maple_i2c_chrdev_major` 0
if [ "$KT2_PORT" != "" ]; then
echo k 1 > /proc/maple_i2c/i2c
insmod linux-kernel-bde.ko
sleep 1
cat /proc/linux-kernel-bde
sleep 1
insmod linux-uk-proxy.ko
sleep 1
mknod /dev/linux-uk-proxy c 125 0
sleep 1
insmod linux-bcm-diag-full.ko
sleep 1
echo "KT2 will wait on port $KT2_PORT"
./bcm.user.proxy -d $KT2_PORT &
fi
if [ "$SWKT2_PORT" != "" ]; then
echo "SW KT2 init"
insmod linux-kernel-bde.ko
sleep 1
cat /proc/linux-kernel-bde
sleep 1
insmod linux-uk-proxy.ko
sleep 1
mknod /dev/linux-uk-proxy c 125 0
sleep 1
insmod linux-bcm-diag-full.ko
sleep 1
echo "KT2 will wait on port $SWKT2_PORT"
./bcm.user.proxy -d $SWKT2_PORT &
fi
insmod bcm_dev_ctrl_linux.ko
sleep 1
if [ "$COOP_DBA" != "n" ]; then
insmod coop_dba_linux.ko
sleep 1
fi
rm -f /dev/bcm_log
mknod /dev/bcm_log c `cat /sys/module/bcm_dev_ctrl_linux/parameters/dev_log_chrdev_major` 0
mknod /dev/maple_dev_ctrl c `cat /sys/module/bcm_dev_ctrl_linux/parameters/maple_dev_ctrl_chrdev_major` 0
touch "$FILE_INIT_DONE"
trap - EXIT
else
if [ -f "$FILE_INIT_DONE" ]; then
echo "Skipped BCM68620 SVK initialization since it has already been done"
else
echo "Waiting for SVK initialization to complete..."
while [ ! -f "$FILE_INIT_DONE" ]; do
sleep 1
done
fi
fi
# Only one application can have the kernel logger enabled at once.
# If someone else already owns the kernel logger, run without it.
if [ "$KERNEL_LOG" == "y" ]; then
if mkdir "$LOCK_DIR_KERNEL_LOG_OWNED" 2>/dev/null; then
trap "rmdir \"$LOCK_DIR_KERNEL_LOG_OWNED\"" EXIT
else
USER_APPL_ARGS="$USER_APPL_ARGS -nl"
echo "Running without kernel logger since someone else owns it"
fi
fi
#echo "In Band: Launching BCM68620 user space device control application "
#./bcm_dev_ctrl_user > /dev/null 2>&1 &
echo "Launching BCM68620 user application with options \"$USER_APPL_ARGS\""
./bcm_user_appl $USER_APPL_ARGS