#!/bin/bash # Helper script to support enable/disable Scandump Mode # Author : Hieu Huynh (hieu.huynh@amperecomputing.com) # # To enable Scandump mode: # ampere_scandump_mode.sh enable # # To disable Scandump mode: # ampere_scandump_mode.sh disable # # To get Scandump mode status: # ampere_scandump_mode.sh getstatus enable_scandump_mode() { echo "Enable Scandump mode" # Disable Mpro hang detection systemctl stop ampere-sysfw-hang-handler.service # Disable PLDM service systemctl stop pldmd.service # Enable scandump mode in CPLD # Get Port0 value p0_val=$(i2cget -f -y 15 0x22 0x02) p0_val=$(("$p0_val" | (1 << 4))) # Set Port0[4] value to "1" to mask all CPU’s GPIOs, set Port0[4]. i2cset -f -y 15 0x22 0x02 $p0_val p0_IOexp_val=$(i2cget -f -y 15 0x22 0x06) p0_IOexp_val=$(("$p0_IOexp_val" & ~(1 << 4))) # Config CPLD's IOepx Port0[4] from input to output, clear IOepx Port0[4]. i2cset -f -y 15 0x22 0x06 $p0_IOexp_val } diable_scandump_mode() { echo "Disable Scandump mode" # Disable scandump mode in CPLD # Get Port0 value p0_val=$(i2cget -f -y 15 0x22 0x02) p0_val=$(("$p0_val" & ~(1 << 4))) # Set Port0[4] value to "0" to unmask all CPU’s GPIOs, clear Port0[4]. i2cset -f -y 15 0x22 0x02 $p0_val p0_IOexp_val=$(i2cget -f -y 15 0x22 0x06) p0_IOexp_val=$(("$p0_IOexp_val" | (1 << 4))) # Config CPLD's IOepx Port0[4] from output to input, set IOepx Port0[4]. i2cset -f -y 15 0x22 0x06 $p0_IOexp_val # Enable Mpro hang detection systemctl start ampere-sysfw-hang-handler.service # Enable PLDM service systemctl start pldmd.service } getstatus() { # Get CPLD's IOepx Port0[4], if this bit is "0" scandump mode is enabled. p0_IOexp_val=$(i2cget -f -y 15 0x22 0x06) p0_IOexp_val=$(("$p0_IOexp_val" & (1 << 4))) if [[ "$p0_IOexp_val" == "0" ]]; then echo "Scandump mode is enabled" exit 1 else echo "Scandump mode is disabled" exit 0 fi } # Usage of this utility usage() { echo "Usage:" echo " - To enable Scandump mode" echo " $(basename "$0") enable" echo " - To disable Scandump mode" echo " $(basename "$0") disable" echo " - To get Scandump mode status" echo " $(basename "$0") getstatus" exit 0 } if [[ $1 == "enable" ]]; then enable_scandump_mode elif [[ $1 == "disable" ]]; then diable_scandump_mode elif [[ $1 == "getstatus" ]]; then getstatus else echo "Invalid mode" usage fi exit 0