| #! /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 |