| #!/bin/bash |
| # help information |
| |
| source /usr/sbin/kudo-lib.sh |
| |
| function usage_rst() { |
| echo " kudo rst [parameter]" |
| echo " hotswap --> reset the whole kudo node" |
| echo " system --> reset the host" |
| echo " btn --> trigger a power button event" |
| echo " shutdown --> send out shutdown signal to CPU" |
| echo " display --> " |
| } |
| |
| function usage_led() { |
| echo " kudo led 'att'/'boot' [parameter]" |
| echo " on --> change to CPU console" |
| echo " off --> change to CPU 0 SCP console" |
| echo " status --> change to CPU 1 SCP console" |
| } |
| |
| function usage_uart() { |
| echo " kudo uart [parameter]" |
| echo " host --> show CPU console" |
| echo " scp --> show SCP0 console" |
| echo " swhost --> change to CPU console to ttyS1" |
| echo " swscp1 --> change to CPU 0 SCP console to ttyS3" |
| echo " swscp2 --> change to CPU 1 SCP console" |
| echo " swhosthr --> change CPU console to header" |
| echo " swscphr --> change SCP console to header" |
| echo " display --> " |
| } |
| |
| function usage() { |
| echo " kudo BMC console system utilities" |
| echo " kudo [optional] [parameter]" |
| echo " rst --> reset traget device" |
| echo " fw --> get version" |
| echo " uart --> control the uart mux" |
| echo " led --> control the leds" |
| } |
| |
| function reset() { |
| case $1 in |
| hotswap) |
| # Virtual reset #94 |
| set_gpio_ctrl 94 out 1 |
| ;; |
| system) |
| # S0 system reset #65 |
| set_gpio_ctrl 65 out 0 |
| sleep 1 |
| set_gpio_ctrl 65 out 1 |
| ;; |
| btn) |
| # power button #203 |
| set_gpio_ctrl 203 out 1 |
| sleep 1 |
| set_gpio_ctrl 203 out 0 |
| ;; |
| shutdown) |
| # BMC_CPU_SHD_REQ #70 |
| set_gpio_ctrl 70 out 0 |
| sleep 3 |
| set_gpio_ctrl 70 out 1 |
| ;; |
| forceOff) |
| # power button #203 |
| set_gpio_ctrl 203 out 1 |
| sleep 6 |
| set_gpio_ctrl 203 out 0 |
| ;; |
| display) |
| echo "Virtual reset #94" $(get_gpio_ctrl 94) |
| echo "S0 System reset #65" $(get_gpio_ctrl 65) |
| echo "Power Button #203" $(get_gpio_ctrl 203) |
| echo "BMC_CPU SHD Req #70" $(get_gpio_ctrl 70) |
| ;; |
| *) |
| usage_rst |
| ;; |
| esac |
| } |
| |
| function fw_rev() { |
| BMC_CPLD_VER_FILE="/run/cpld0.version" |
| MB_CPLD_VER_FILE="/run/cpld1.version" |
| |
| cmd=$(cat $BMC_CPLD_VER_FILE) |
| echo " BMC_CPLD: " $cmd |
| cmd=$(cat $MB_CPLD_VER_FILE) |
| echo " MB_CPLD: " $cmd |
| |
| cmd=$(cat /etc/os-release | grep VERSION -w | cut -d '=' -f 2) |
| echo " BMC : " ${cmd} |
| |
| #BMC PWR Sequencer |
| i2cset -y -f -a 14 0x59 0xfe 0x0000 w |
| cmd=$(i2cget -y -f -a 14 0x59 0xfe i 2 | awk '{print substr($0,3)}') |
| echo " BMC PowerSequencer : ${cmd}" |
| #only display with smbios exists |
| if [[ -e /var/lib/smbios/smbios2 ]]; then |
| cmd=$(busctl introspect xyz.openbmc_project.Smbios.MDR_V2 \ |
| /xyz/openbmc_project/inventory/system/chassis/motherboard/bios | grep Version | awk '{print $4}') |
| echo " Bios: $cmd" |
| fi |
| |
| cmd=$(i2cget -f -y 2 0x4f 0x1 w); |
| echo " SCP Firmware: ${cmd}" |
| |
| adm1266_ver | grep REVISION |
| |
| } |
| |
| function uartmux() { |
| case $1 in |
| host) |
| if [ `tty` == "/dev/ttyS0" ]; then |
| echo "Couldn't redirect to the host console within BMC local console" |
| else |
| echo "Entering Console use 'shift ~~..' to quit" |
| obmc-console-client -c /etc/obmc-console/server.ttyS1.conf |
| fi |
| ;; |
| scp) |
| if [ `tty` == "/dev/ttyS0" ]; then |
| echo "Couldn't redirect to the scp console within BMC local console" |
| else |
| echo "Entering Console use 'shift ~~..' to quit" |
| obmc-console-client -c /etc/obmc-console/server.ttyS3.conf |
| fi |
| ;; |
| swhost) |
| set_gpio_ctrl 167 out 1 |
| ;; |
| swscp1) |
| set_gpio_ctrl 161 out 1 |
| set_gpio_ctrl 177 out 1 |
| set_gpio_ctrl 198 out 0 |
| ;; |
| swscp2) |
| set_gpio_ctrl 161 out 1 |
| set_gpio_ctrl 177 out 1 |
| set_gpio_ctrl 198 out 1 |
| ;; |
| swhosthr) |
| set_gpio_ctrl 167 out 0 |
| ;; |
| swscphr) |
| set_gpio_ctrl 161 out 0 |
| set_gpio_ctrl 177 out 0 |
| ;; |
| display) |
| if [ $(get_gpio_ctrl 167) -eq 1 ]; then |
| echo " CPU host to BMC console" |
| else |
| echo " CPU host to header" |
| fi |
| if [ $(get_gpio_ctrl 161) -eq 1 ] && [ $(get_gpio_ctrl 177) -eq 1 ]; then |
| if [ $(get_gpio_ctrl 198) -eq 1 ]; then |
| echo " SCP2 host to BMC console" |
| else |
| echo " SCP1 host to BMC console" |
| fi |
| elif [ $(get_gpio_ctrl 161) -eq 0 ] && [ $(get_gpio_ctrl 177) -eq 0 ]; then |
| if [ $(get_gpio_ctrl 198) -eq 1 ]; then |
| echo " SCP2 host to Header" |
| else |
| echo " SCP1 host to Header" |
| fi |
| else |
| echo "It's unknown status" |
| echo "167" $(get_gpio_ctrl 167) |
| echo "161" $(get_gpio_ctrl 161) |
| echo "177" $(get_gpio_ctrl 177) |
| echo "198" $(get_gpio_ctrl 198) |
| fi |
| ;; |
| *) |
| usage_uart |
| ;; |
| esac |
| } |
| |
| function ledtoggle() { |
| |
| CurrentLED=$( i2cget -y -f -a 34 0x76 0x05 i 1 | cut -d ' ' -f 2) |
| case $1 in |
| boot) |
| cmd=$((($CurrentLED & 0x40) != 0)) |
| case $2 in |
| on) |
| #turn on LED |
| if [[ $cmd -eq 0 ]]; then |
| setValue=$(( 0x40 + $CurrentLED )) |
| i2cset -y -f -a 34 0x76 0x10 $setValue |
| fi |
| ;; |
| off) |
| #turn off led |
| if [[ $cmd -eq 1 ]]; then |
| setValue=$(( 0x80 & $CurrentLED )) |
| i2cset -y -f -a 34 0x76 0x10 $setValue |
| fi |
| ;; |
| toggle) |
| #turn on LED |
| setValue=$(( 0x40 ^ $CurrentLED )) |
| i2cset -y -f -a 34 0x76 0x10 $setValue |
| ;; |
| status) |
| #displayLED status |
| if [[ $cmd -eq 1 ]]; then |
| echo "on" |
| else |
| echo "off" |
| fi |
| ;; |
| *) |
| usage_led |
| ;; |
| esac |
| ;; |
| att) |
| cmd=$((($CurrentLED & 0x80) != 0)) |
| case $2 in |
| on) |
| #turn on LED |
| if [[ $cmd -eq 0 ]]; then |
| setValue=$(( 0x80 + $CurrentLED )) |
| i2cset -y -f -a 34 0x76 0x10 $setValue |
| fi |
| ;; |
| off) |
| #turn off led |
| if [[ $cmd -eq 1 ]]; then |
| setValue=$(( 0x40 & $CurrentLED )) |
| i2cset -y -f -a 34 0x76 0x10 $setValue |
| fi |
| ;; |
| toggle) |
| #turn on LED |
| setValue=$(( 0x80 ^ $CurrentLED )) |
| i2cset -y -f -a 34 0x76 0x10 $setValue |
| ;; |
| status) |
| #displayLED status |
| if [[ $cmd -eq 1 ]]; then |
| echo "on" |
| else |
| echo "off" |
| fi |
| ;; |
| *) |
| usage_led |
| ;; |
| esac |
| ;; |
| *) |
| usage_led |
| ;; |
| esac |
| } |
| |
| function usblist() { |
| for i in {0..8} |
| do |
| cmd="devmem 0xf083"$i"154" |
| printf "udc%d : 0xF803%d154-" "$i" "$i" |
| $cmd |
| done |
| } |
| |
| case $1 in |
| rst) |
| reset $2 |
| ;; |
| fw) |
| fw_rev |
| ;; |
| uart) |
| uartmux $2 |
| ;; |
| usb) |
| usblist |
| ;; |
| led) |
| ledtoggle $2 $3 |
| ;; |
| *) |
| usage |
| ;; |
| esac |