summaryrefslogtreecommitdiff
path: root/meta-ampere/meta-mitchell/recipes-ampere
diff options
context:
space:
mode:
authorThang Q. Nguyen <thang@os.amperecomputing.com>2023-06-09 04:55:58 +0300
committerThang Q. Nguyen <thang@os.amperecomputing.com>2023-06-09 12:30:16 +0300
commitfe4a607fe73cdeb166d2b021dbcea0ebf98b8917 (patch)
tree36f24c5bb3ac85c387487a9e480b9c2ce96ec811 /meta-ampere/meta-mitchell/recipes-ampere
parent563fe79d7dc570d37a4229fdbbcd04ed0f577956 (diff)
downloadopenbmc-fe4a607fe73cdeb166d2b021dbcea0ebf98b8917.tar.xz
meta-ampere: mtmitchell: add some helper utils
Add some help scripts to help users easier to debug systems from BMC console. Tested: 1. New helper scripts are available from BMC console. 2. Manually check script execution Signed-off-by: Thang Q. Nguyen <thang@os.amperecomputing.com> Change-Id: Ibe93547d1299768ae8d67440f161c86c29dbb61e
Diffstat (limited to 'meta-ampere/meta-mitchell/recipes-ampere')
-rw-r--r--meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-utils.bbappend4
-rw-r--r--meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-utils/ampere_fanctrl.sh168
-rwxr-xr-xmeta-ampere/meta-mitchell/recipes-ampere/platform/ampere-utils/ampere_firmware_upgrade.sh10
-rwxr-xr-xmeta-ampere/meta-mitchell/recipes-ampere/platform/ampere-utils/ampere_firmware_version.sh20
-rwxr-xr-xmeta-ampere/meta-mitchell/recipes-ampere/platform/ampere-utils/ampere_scandump_mode.sh94
5 files changed, 281 insertions, 15 deletions
diff --git a/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-utils.bbappend b/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-utils.bbappend
index 341ca13894..778ca985ba 100644
--- a/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-utils.bbappend
+++ b/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-utils.bbappend
@@ -8,6 +8,8 @@ SRC_URI:append = " \
file://ampere_flash_bios.sh \
file://ampere_power_on_driver_binder.sh \
file://ampere_firmware_version.sh \
+ file://ampere_fanctrl.sh \
+ file://ampere_scandump_mode.sh \
"
do_install:append() {
@@ -17,4 +19,6 @@ do_install:append() {
install -m 0755 ${WORKDIR}/ampere_flash_bios.sh ${D}/${sbindir}/
install -m 0755 ${WORKDIR}/ampere_power_on_driver_binder.sh ${D}/${sbindir}/
install -m 0755 ${WORKDIR}/ampere_firmware_version.sh ${D}/${sbindir}/
+ install -m 0755 ${WORKDIR}/ampere_fanctrl.sh ${D}/${sbindir}/
+ install -m 0755 ${WORKDIR}/ampere_scandump_mode.sh ${D}/${sbindir}/
}
diff --git a/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-utils/ampere_fanctrl.sh b/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-utils/ampere_fanctrl.sh
new file mode 100644
index 0000000000..9dcc6d822e
--- /dev/null
+++ b/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-utils/ampere_fanctrl.sh
@@ -0,0 +1,168 @@
+#!/bin/bash
+
+fanSensorService="xyz.openbmc_project.FanSensor"
+
+sensorPath="/xyz/openbmc_project/sensors/fan_tach/"
+pwmTargetPath="/xyz/openbmc_project/control/fanpwm/"
+
+sensorValueInterfaceName="xyz.openbmc_project.Sensor.Value"
+sensorValuePropertyName="Value"
+
+pwmTargetInterfaceName="xyz.openbmc_project.Control.FanPwm"
+pwmTargetPropertyName="Target"
+
+function stop_phosphor_fan_services() {
+ systemctl stop phosphor-fan-control@0.service
+ systemctl stop phosphor-fan-monitor@0.service
+ systemctl stop phosphor-fan-presence-tach@0.service
+}
+
+function start_phosphor_fan_services() {
+ systemctl start phosphor-fan-control@0.service
+ systemctl start phosphor-fan-monitor@0.service
+ systemctl start phosphor-fan-presence-tach@0.service
+}
+
+function read_speed() {
+ fan_val=$(busctl get-property "$fanSensorService" "${sensorPath}$1" "$sensorValueInterfaceName" "$sensorValuePropertyName")
+ busctl_error=$?
+ if (( busctl_error != 0 )); then
+ echo "Error: get-property $sensorValuePropertyName failed! "
+ exit 1
+ fi
+
+ pwm_target=$(busctl get-property "$fanSensorService" "${pwmTargetPath}$2" "$pwmTargetInterfaceName" "$pwmTargetPropertyName")
+ busctl_error=$?
+ if (( busctl_error != 0 )); then
+ echo "Error: get-property $pwmTargetPropertyName failed! "
+ exit 1
+ fi
+
+ fan_val=$(echo "$fan_val" | cut -d " " -f 2)
+ pwm_target=$(echo "$pwm_target" | cut -d " " -f 2)
+
+ # Convert fan PWM to Duty cycle, adding 127 for rounding.
+ pwm_duty_cyle=$(((("$pwm_target" * 100) + 127) / 255))
+
+ echo "$1, PWM: $pwm_target, Duty cycle: $pwm_duty_cyle%, Speed(RPM): $fan_val"
+}
+
+function set_pwm() {
+
+ # Convert Fan Duty cycle to PWM, adding 50 for rounding.
+ fan_pwm=$(((($2 * 255) + 50) / 100))
+
+ busctl set-property "$fanSensorService" "${pwmTargetPath}$1" "$pwmTargetInterfaceName" "$pwmTargetPropertyName" t "$fan_pwm"
+ busctl_error=$?
+ if (( busctl_error != 0 )); then
+ echo "Error: set-property $pwmTargetPropertyName failed! "
+ exit 255
+ fi
+}
+
+function getstatus() {
+ fan_ctl_stt=$(systemctl is-active phosphor-fan-control@0.service | grep inactive)
+ fan_monitor_stt=$(systemctl is-active phosphor-fan-monitor@0.service | grep inactive)
+ if [[ -z "$fan_ctl_stt" && -z "$fan_monitor_stt" ]]; then
+ echo "Thermal Control operational status: Enabled"
+ exit 0
+ else
+ echo "Thermal Control operational status: Disabled"
+ exit 1
+ fi
+}
+
+function setstatus() {
+ if [ "$1" == 0 ]; then
+ # Enable fan services
+ start_phosphor_fan_services
+ else
+ # Disable fan services
+ stop_phosphor_fan_services
+ fi
+}
+
+function setspeed() {
+ # Get fan_pwm value of the fan
+ case "$1" in
+ 0) fan_pwm=PWM7
+ ;;
+ 1) fan_pwm=PWM5
+ ;;
+ 2) fan_pwm=PWM4
+ ;;
+ 3) fan_pwm=PWM3
+ ;;
+ 4) fan_pwm=PWM1
+ ;;
+ 5) fan_pwm=PWM0
+ ;;
+ *) echo "fan $1 doesn't exit"
+ exit 1
+ ;;
+ esac
+
+ set_pwm "$fan_pwm" "$2"
+ exit 0
+}
+
+function getspeed() {
+
+ # Mapping fan number to fan_input and fan_pwm index
+ case "$1" in
+ 0) fan_input_f=FAN0_F
+ fan_input_r=FAN0_R
+ fan_pwm=PWM7
+ ;;
+ 1) fan_input_f=FAN1_F
+ fan_input_r=FAN1_R
+ fan_pwm=PWM5
+ ;;
+ 2) fan_input_f=FAN2_F
+ fan_input_r=FAN2_R
+ fan_pwm=PWM4
+ ;;
+ 3) fan_input_f=FAN3_F
+ fan_input_r=FAN3_R
+ fan_pwm=PWM3
+ ;;
+ 4) fan_input_f=FAN4_F
+ fan_input_r=FAN4_R
+ fan_pwm=PWM1
+ ;;
+ 5) fan_input_f=FAN5_F
+ fan_input_r=FAN5_F
+ fan_pwm=PWM0
+ ;;
+ *) echo "fan $1 doesn't exit"
+ exit 1
+ ;;
+ esac
+
+ # Get fan speed, each fan number has two values is front and rear
+ read_speed "$fan_input_f" "$fan_pwm"
+ read_speed "$fan_input_r" "$fan_pwm"
+
+ exit 0
+}
+
+# Usage of this utility
+function usage() {
+ echo "Usage:"
+ echo " ampere_fanctrl.sh [getstatus] [setstatus <0|1>] [setspeed <fan> <duty>] [getspeed <fan>]"
+ echo " fan: 0-5"
+ echo " duty: 1-100"
+}
+
+if [ "$1" == "getstatus" ]; then
+ getstatus
+elif [ "$1" == "setstatus" ]; then
+ setstatus "$2"
+elif [ "$1" == "setspeed" ]; then
+ stop_phosphor_fan_services
+ setspeed "$2" "$3"
+elif [ "$1" == "getspeed" ]; then
+ getspeed "$2"
+else
+ usage
+fi
diff --git a/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-utils/ampere_firmware_upgrade.sh b/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-utils/ampere_firmware_upgrade.sh
index dce6e6ccaa..9c187b158f 100755
--- a/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-utils/ampere_firmware_upgrade.sh
+++ b/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-utils/ampere_firmware_upgrade.sh
@@ -134,19 +134,19 @@ do_bp_cpld_flash() {
BP_TARGET=$2
if [[ $BP_TARGET == 1 ]]; then
echo "Flashing Front Backplane 1 CPLD"
- ampere_cpldupdate_i2c -b 101 -s 0x40 -t 2 -p "$BP_CPLD_IMAGE"
+ ampere_cpldupdate_i2c -b 101 -s 0x40 -t 3 -p "$BP_CPLD_IMAGE"
elif [[ $BP_TARGET == 2 ]]; then
echo "Flashing Front Backplane 2 CPLD"
- ampere_cpldupdate_i2c -b 102 -s 0x40 -t 2 -p "$BP_CPLD_IMAGE"
+ ampere_cpldupdate_i2c -b 102 -s 0x40 -t 3 -p "$BP_CPLD_IMAGE"
elif [[ $BP_TARGET == 3 ]]; then
echo "Flashing Front Backplane 3 CPLD"
- ampere_cpldupdate_i2c -b 100 -s 0x40 -t 2 -p "$BP_CPLD_IMAGE"
+ ampere_cpldupdate_i2c -b 100 -s 0x40 -t 3 -p "$BP_CPLD_IMAGE"
elif [[ $BP_TARGET == 4 ]]; then
echo "Flashing Rear Backplane 1 CPLD"
- ampere_cpldupdate_i2c -b 103 -s 0x40 -t 2 -p "$BP_CPLD_IMAGE"
+ ampere_cpldupdate_i2c -b 103 -s 0x40 -t 3 -p "$BP_CPLD_IMAGE"
elif [[ $BP_TARGET == 5 ]]; then
echo "Flashing Rear Backplane 2 CPLD"
- ampere_cpldupdate_i2c -b 104 -s 0x40 -t 2 -p "$BP_CPLD_IMAGE"
+ ampere_cpldupdate_i2c -b 104 -s 0x40 -t 3 -p "$BP_CPLD_IMAGE"
fi
echo "Done"
diff --git a/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-utils/ampere_firmware_version.sh b/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-utils/ampere_firmware_version.sh
index 081e3030f6..adb9869242 100755
--- a/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-utils/ampere_firmware_version.sh
+++ b/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-utils/ampere_firmware_version.sh
@@ -40,24 +40,24 @@ do_bp_cpld_firmware_report() {
BP_ID=$1
if [[ $BP_ID == 1 ]]; then
echo "Front Backplane 1 CPLD"
- ampere_cpldupdate_i2c -b 101 -s 0x40 -t 2 -v
- ampere_cpldupdate_i2c -b 101 -s 0x40 -t 2 -i
+ ampere_cpldupdate_i2c -b 101 -s 0x40 -t 3 -v
+ ampere_cpldupdate_i2c -b 101 -s 0x40 -t 3 -i
elif [[ $BP_ID == 2 ]]; then
echo "Front Backplane 2 CPLD"
- ampere_cpldupdate_i2c -b 102 -s 0x40 -t 2 -v
- ampere_cpldupdate_i2c -b 102 -s 0x40 -t 2 -i
+ ampere_cpldupdate_i2c -b 102 -s 0x40 -t 3 -v
+ ampere_cpldupdate_i2c -b 102 -s 0x40 -t 3 -i
elif [[ $BP_ID == 3 ]]; then
echo "Front Backplane 3 CPLD"
- ampere_cpldupdate_i2c -b 100 -s 0x40 -t 2 -v
- ampere_cpldupdate_i2c -b 100 -s 0x40 -t 2 -i
+ ampere_cpldupdate_i2c -b 100 -s 0x40 -t 3 -v
+ ampere_cpldupdate_i2c -b 100 -s 0x40 -t 3 -i
elif [[ $BP_ID == 4 ]]; then
echo "Rear Backplane 1 CPLD"
- ampere_cpldupdate_i2c -b 103 -s 0x40 -t 2 -v
- ampere_cpldupdate_i2c -b 103 -s 0x40 -t 2 -i
+ ampere_cpldupdate_i2c -b 103 -s 0x40 -t 3 -v
+ ampere_cpldupdate_i2c -b 103 -s 0x40 -t 3 -i
elif [[ $BP_ID == 5 ]]; then
echo "Rear Backplane 2 CPLD"
- ampere_cpldupdate_i2c -b 104 -s 0x40 -t 2 -v
- ampere_cpldupdate_i2c -b 104 -s 0x40 -t 2 -i
+ ampere_cpldupdate_i2c -b 104 -s 0x40 -t 3 -v
+ ampere_cpldupdate_i2c -b 104 -s 0x40 -t 3 -i
fi
}
diff --git a/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-utils/ampere_scandump_mode.sh b/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-utils/ampere_scandump_mode.sh
new file mode 100755
index 0000000000..f08c9686bd
--- /dev/null
+++ b/meta-ampere/meta-mitchell/recipes-ampere/platform/ampere-utils/ampere_scandump_mode.sh
@@ -0,0 +1,94 @@
+#!/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