diff options
author | Potin Lai <potin.lai@quantatw.com> | 2022-02-15 19:57:55 +0300 |
---|---|---|
committer | Patrick Williams <patrick@stwcx.xyz> | 2022-02-15 23:19:33 +0300 |
commit | db5648e6d91ef3c76ca00a85a65532c3163d4752 (patch) | |
tree | e3b4d60c53172905c20918dffb5112d5901c8bdf | |
parent | cdbf0087101bc4273525db0347660f34889569b1 (diff) | |
download | openbmc-db5648e6d91ef3c76ca00a85a65532c3163d4752.tar.xz |
meta-bletchley: motor-ctrl: add support to trigger host DFU mode
Add command to perform the steps below to trigger DFU mode on host
1. turn off host ac
2. press power button and wait at least 10 seconds
3. turn on host ac, and keep hold power button for 3 seconds
4. release host power button
Example:
root@bletchley:~# power-ctrl sled3 dfu
Set host3 DFU mode
SLED3: turn ac-off
set_gpio: set power-host3 = 0 success
SLED3: pressing power button
Motor go forward to press Power button
Power button switch triggered
SLED3: turn ac-on
set_gpio: set power-host3 = 1 success
SLED3: releasing host power button
Motor reverse to initial position successful
Signed-off-by: Potin Lai <potin.lai@quantatw.com>
Change-Id: I055b862ad5a1302050d5df1505a3470858c6ec58
-rwxr-xr-x | meta-facebook/meta-bletchley/recipes-bletchley/motor-ctrl/files/power-ctrl | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/meta-facebook/meta-bletchley/recipes-bletchley/motor-ctrl/files/power-ctrl b/meta-facebook/meta-bletchley/recipes-bletchley/motor-ctrl/files/power-ctrl index 83d65df843..643d7ca36b 100755 --- a/meta-facebook/meta-bletchley/recipes-bletchley/motor-ctrl/files/power-ctrl +++ b/meta-facebook/meta-bletchley/recipes-bletchley/motor-ctrl/files/power-ctrl @@ -58,6 +58,46 @@ function trigger_power_button() { fi } +function release_power_button() { + local sled_num=$1 + GPIO_DETECT_PIN1="SLED${sled_num}_MS_DETECT1" + + if [ "$(get_gpio "$GPIO_DETECT_PIN1")" -eq 0 ]; then + echo "Motor at initial position already" + return 0 + fi + + motor-ctrl "sled${sled_num}" r >/dev/null + wait_for_switch "${GPIO_DETECT_PIN1}" + motor-ctrl "sled${sled_num}" s >/dev/null + if [ "$(get_gpio "$GPIO_DETECT_PIN1")" -eq 0 ];then + echo "Motor reverse to initial position successful" + return 0 + fi + + echo "Error: Initial position switch not trigger" + return 1 +} + +function press_power_button() { + local sled_num=$1 + + GPIO_DETECT_PIN0="SLED${sled_num}_MS_DETECT0" + + echo "Motor go forward to press Power button" + motor-ctrl "sled${sled_num}" f >/dev/null + wait_for_switch "${GPIO_DETECT_PIN0}" + motor-ctrl "sled${sled_num}" s >/dev/null + + if [ "$(get_gpio "$GPIO_DETECT_PIN0")" -eq 0 ];then + echo "Power button switch triggered" + return 0 + fi + + echo "Error: Power button switch not trigger" + return 1 +} + #Get i2c bus number for sledN function get_bus_num() { SLED_NUM=$1 @@ -172,6 +212,35 @@ elif [[ "$ACTION" == "ac-on" ]];then set_gpio "power-host${SLED_NUM}" 1 elif [[ "$ACTION" == "ac-off" ]];then set_gpio "power-host${SLED_NUM}" 0 +elif [[ "$ACTION" == "dfu" ]]; then + echo "Set host$SLED_NUM DFU mode" + + # turn ac off + echo "SLED$SLED_NUM: turn ac-off" + set_gpio "power-host${SLED_NUM}" 0 + sleep 1 + + # press power button, and hold for 10 seconds + echo "SLED$SLED_NUM: pressing power button" + if ! press_power_button "$SLED_NUM"; then + echo "SLED$SLED_NUM: press power button failed" + echo "SLED$SLED_NUM: releasing power button" + release_power_button "$SLED_NUM" + exit 1 + fi + sleep 10 + + # turn ac on + echo "SLED$SLED_NUM: turn ac-on" + set_gpio "power-host${SLED_NUM}" 1 + sleep 3 + + # release power button + echo "SLED$SLED_NUM: releasing host power button" + if ! release_power_button "$SLED_NUM"; then + echo "SLED$SLED_NUM: release power button failed" + exit 1 + fi else echo "Unknown action: [ ${ACTION} ]" show_usage |