diff options
author | Thang Q. Nguyen <thang@os.amperecomputing.com> | 2023-06-09 04:55:58 +0300 |
---|---|---|
committer | Thang Q. Nguyen <thang@os.amperecomputing.com> | 2023-06-09 12:30:16 +0300 |
commit | fe4a607fe73cdeb166d2b021dbcea0ebf98b8917 (patch) | |
tree | 36f24c5bb3ac85c387487a9e480b9c2ce96ec811 /meta-ampere/meta-mitchell/recipes-ampere | |
parent | 563fe79d7dc570d37a4229fdbbcd04ed0f577956 (diff) | |
download | openbmc-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')
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 |