95 lines
2.3 KiB
Bash
Executable File
95 lines
2.3 KiB
Bash
Executable File
#!/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
|