#!/bin/bash declare -a PORT_NUM_MAP=(10 3 2 1 7 6 5) declare -a PORT_NAME_MAP=(BMC SLED1 SLED2 SLED3 SLED4 SLED5 SLED6) SWITCH_MDIO_BUS="1e650000.mdio-1" INNER_PORT_DEV_ID="4" OUTER_PORT_DEV_ID="3" RETIMER_MDIO_BUS="1e650018.mdio-1" get_switch_port_link_st() { local port_phy_id=$1 if PORT_ST_VAL="$(mdio "$SWITCH_MDIO_BUS" phy "$port_phy_id" 0x00)"; then PORT_ST_VAL="${PORT_ST_VAL:2}" if [ "$((16#$PORT_ST_VAL & 16#0800))" -eq "0" ]; then PORT_ST="down" else PORT_ST="up" fi else PORT_ST="mdio failed" fi echo "${PORT_ST}" } get_retimer_port_link_st() { local port_dev_id=$1 if PORT_ST_VAL="$(mdio "$RETIMER_MDIO_BUS" mmd 0:"$port_dev_id" 0x9002)"; then PORT_ST_VAL="${PORT_ST_VAL:2}" if [ "$((16#$PORT_ST_VAL & 16#0004))" -eq "0" ]; then PORT_ST="down" else PORT_ST="up" fi else PORT_ST="mdio failed" fi echo "${PORT_ST}" } get_port_link_st() { printf "========================================\n" printf "Link Status\n" printf "========================================\n" printf "Switch:\n" for port_phy in {0..6} do 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]}")" done printf "\n" printf "Retimer:\n" printf " Inner Port (XFI): %s\n" "$(get_retimer_port_link_st "${INNER_PORT_DEV_ID}")" printf " Outer Port (SFI): %s\n" "$(get_retimer_port_link_st "${OUTER_PORT_DEV_ID}")" printf "========================================\n\n" } get_switch_port_reg_dump() { for port_phy in {0..6} do printf "========================================\n" printf "Port %d (%s)\n" "${PORT_NUM_MAP[port_phy]}" "${PORT_NAME_MAP[port_phy]}" printf "****************************************\n" for reg_offset in {0..31} do printf "[%02X]: %04X\n" "$reg_offset" "$(mdio "$SWITCH_MDIO_BUS" phy "${PORT_NUM_MAP[port_phy]}" "$reg_offset")" done printf "========================================\n\n" done } print_help() { echo "Usage:" echo " $0 " echo "" echo "COMMAND:" echo " --link-st" echo " show link status" echo "" echo " --port-reg-dump" echo " port registers dump" echo "" } ACTION_CMD="$1" if [[ ${ACTION_CMD} =~ -h|--help ]]; then print_help elif [ "${ACTION_CMD}" = "--link-st" ]; then get_port_link_st elif [ "${ACTION_CMD}" = "--port-reg-dump" ]; then get_switch_port_reg_dump else echo "Unknow command: $ACTION_CMD" print_help fi