1#!/bin/bash 2 3declare -a PORT_NUM_MAP=(10 3 2 1 7 6 5) 4declare -a PORT_NAME_MAP=(BMC SLED1 SLED2 SLED3 SLED4 SLED5 SLED6) 5SWITCH_MDIO_BUS="1e650000.mdio-1" 6 7INNER_PORT_DEV_ID="4" 8OUTER_PORT_DEV_ID="3" 9RETIMER_MDIO_BUS="1e650018.mdio-1" 10 11get_switch_port_link_st() 12{ 13 local port_phy_id=$1 14 15 if PORT_ST_VAL="$(mdio "$SWITCH_MDIO_BUS" phy "$port_phy_id" 0x00)"; then 16 PORT_ST_VAL="${PORT_ST_VAL:2}" 17 if [ "$((16#$PORT_ST_VAL & 16#0800))" -eq "0" ]; then 18 PORT_ST="down" 19 else 20 PORT_ST="up" 21 fi 22 else 23 PORT_ST="mdio failed" 24 fi 25 echo "${PORT_ST}" 26} 27 28get_retimer_port_link_st() 29{ 30 local port_dev_id=$1 31 32 if PORT_ST_VAL="$(mdio "$RETIMER_MDIO_BUS" mmd 0:"$port_dev_id" 0x9002)"; then 33 PORT_ST_VAL="${PORT_ST_VAL:2}" 34 if [ "$((16#$PORT_ST_VAL & 16#0004))" -eq "0" ]; then 35 PORT_ST="down" 36 else 37 PORT_ST="up" 38 fi 39 else 40 PORT_ST="mdio failed" 41 fi 42 echo "${PORT_ST}" 43} 44 45get_port_link_st() 46{ 47 printf "========================================\n" 48 printf "Link Status\n" 49 printf "========================================\n" 50 printf "Switch:\n" 51 for port_phy in {0..6} 52 do 53 printf " Port %d (%s): %s\n" "${PORT_NUM_MAP[port_phy]}" "${PORT_NAME_MAP[port_phy]}" "$(get_switch_port_link_st "${PORT_NUM_MAP[port_phy]}")" 54 done 55 printf "\n" 56 printf "Retimer:\n" 57 printf " Inner Port (XFI): %s\n" "$(get_retimer_port_link_st "${INNER_PORT_DEV_ID}")" 58 printf " Outer Port (SFI): %s\n" "$(get_retimer_port_link_st "${OUTER_PORT_DEV_ID}")" 59 printf "========================================\n\n" 60} 61 62get_switch_port_reg_dump() 63{ 64 for port_phy in {0..6} 65 do 66 printf "========================================\n" 67 printf "Port %d (%s)\n" "${PORT_NUM_MAP[port_phy]}" "${PORT_NAME_MAP[port_phy]}" 68 printf "****************************************\n" 69 for reg_offset in {0..31} 70 do 71 printf "[%02X]: %04X\n" "$reg_offset" "$(mdio "$SWITCH_MDIO_BUS" phy "${PORT_NUM_MAP[port_phy]}" "$reg_offset")" 72 done 73 printf "========================================\n\n" 74 done 75} 76 77print_help() 78{ 79 echo "Usage:" 80 echo " $0 <COMMAND>" 81 echo "" 82 echo "COMMAND:" 83 echo " --link-st" 84 echo " show link status" 85 echo "" 86 echo " --port-reg-dump" 87 echo " port registers dump" 88 echo "" 89} 90 91ACTION_CMD="$1" 92 93if [[ ${ACTION_CMD} =~ -h|--help ]]; then 94 print_help 95elif [ "${ACTION_CMD}" = "--link-st" ]; then 96 get_port_link_st 97elif [ "${ACTION_CMD}" = "--port-reg-dump" ]; then 98 get_switch_port_reg_dump 99else 100 echo "Unknow command: $ACTION_CMD" 101 print_help 102fi 103