summaryrefslogtreecommitdiff
path: root/meta-facebook
diff options
context:
space:
mode:
authorPotin Lai <potin.lai@quantatw.com>2022-02-15 19:57:55 +0300
committerPatrick Williams <patrick@stwcx.xyz>2022-02-15 23:19:33 +0300
commitdb5648e6d91ef3c76ca00a85a65532c3163d4752 (patch)
treee3b4d60c53172905c20918dffb5112d5901c8bdf /meta-facebook
parentcdbf0087101bc4273525db0347660f34889569b1 (diff)
downloadopenbmc-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
Diffstat (limited to 'meta-facebook')
-rwxr-xr-xmeta-facebook/meta-bletchley/recipes-bletchley/motor-ctrl/files/power-ctrl69
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