diff options
Diffstat (limited to 'meta-facebook')
12 files changed, 240 insertions, 145 deletions
diff --git a/meta-facebook/meta-greatlakes/recipes-phosphor/gpio/greatlakes-gpio-monitor-register.bb b/meta-facebook/meta-greatlakes/recipes-phosphor/gpio/greatlakes-gpio-monitor-register.bb new file mode 100644 index 0000000000..6a98f272d7 --- /dev/null +++ b/meta-facebook/meta-greatlakes/recipes-phosphor/gpio/greatlakes-gpio-monitor-register.bb @@ -0,0 +1,16 @@ +SUMMARY = "greatlakes gpio monitor register" +DESCRIPTION = "greatlakes gpio monitor register" +SECTION = "base" +PR = "r1" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" +S = "${WORKDIR}" + +inherit obmc-phosphor-systemd + +SRC_URI = "file://set-current-host-state@.service \ + " + +DEPENDS += "systemd" + +SYSTEMD_SERVICE:${PN} += "set-current-host-state@.service" diff --git a/meta-facebook/meta-greatlakes/recipes-phosphor/gpio/greatlakes-gpio-monitor-register/set-current-host-state@.service b/meta-facebook/meta-greatlakes/recipes-phosphor/gpio/greatlakes-gpio-monitor-register/set-current-host-state@.service new file mode 100644 index 0000000000..27973b9f27 --- /dev/null +++ b/meta-facebook/meta-greatlakes/recipes-phosphor/gpio/greatlakes-gpio-monitor-register/set-current-host-state@.service @@ -0,0 +1,8 @@ +[Unit] +Description=Set currrent host state property slot%i + +[Service] +Type=oneshot +ExecStart=/usr/bin/busctl set-property xyz.openbmc_project.State.Host%i /xyz/openbmc_project/state/host%i xyz.openbmc_project.State.Host CurrentHostState s "xyz.openbmc_project.State.Host.HostState.Off" +SyslogIdentifier=set-current-host-state-slot%i + diff --git a/meta-facebook/meta-greatlakes/recipes-phosphor/images/fb-greatlakes--phosphor-image.inc b/meta-facebook/meta-greatlakes/recipes-phosphor/images/fb-greatlakes--phosphor-image.inc deleted file mode 100644 index eebd451d7a..0000000000 --- a/meta-facebook/meta-greatlakes/recipes-phosphor/images/fb-greatlakes--phosphor-image.inc +++ /dev/null @@ -1,3 +0,0 @@ -OBMC_IMAGE_EXTRA_INSTALL:append = " \ - greatlakes-sysinit \ -" diff --git a/meta-facebook/meta-greatlakes/recipes-phosphor/images/fb-greatlakes-phosphor-image.inc b/meta-facebook/meta-greatlakes/recipes-phosphor/images/fb-greatlakes-phosphor-image.inc new file mode 100644 index 0000000000..afff8ecf7c --- /dev/null +++ b/meta-facebook/meta-greatlakes/recipes-phosphor/images/fb-greatlakes-phosphor-image.inc @@ -0,0 +1,13 @@ +OBMC_IMAGE_EXTRA_INSTALL:append = " \ + greatlakes-sysinit \ + greatlakes-gpio-monitor-register \ +" + +# Currently, the led related services couldn't complete +# causing that multi-user.target never complete. +# If multi-user.target doesn't complete, +# the obmc-host-startmin@.target couldn't start. +# In that case, BMC couldn't set current host state to "Running". +IMAGE_FEATURES:remove = " \ + obmc-leds \ +" diff --git a/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/chassis-powercycle b/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/chassis-powercycle index b765e1e405..ab9c457043 100644 --- a/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/chassis-powercycle +++ b/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/chassis-powercycle @@ -4,36 +4,47 @@ # shellcheck source=meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/power-cmd source /usr/libexec/phosphor-state-manager/power-cmd -POWER_OK_SLOT=$(( $1+9 )) -slot=$(( $1-1 )) -OFFSET=$(( 0x9 + slot )) +SLOT=$(( $1-1 )) +OFFSET=$(( 0x9 + SLOT )) -chassis-power-gpio-status() +chassis-power-cycle() { - POWER_OK_SLOT=$(( $1+9 )) - if [ "$1" -le 4 ] + CHASSIS_ID=$1 + + if [ "$CHASSIS_ID" -le 4 ] then - status=$(gpioget 0 $POWER_OK_SLOT) - if [ "$status" == 1 ] + chassis_status=$(chassis-power-status $SLOT) + if [ "$chassis_status" == "$STATE_ON" ] then - i2cset -y $BUS_NUM $CPLD_PWR_CTRL_ADDR $OFFSET $POW_OFF_SLOT + i2cset -y "$CPLD_BUS_NUM" "$CPLD_PWR_CTRL_ADDR" "$OFFSET" "$POW_OFF_SLOT" sleep 10 - fi - i2cset -y $BUS_NUM $CPLD_PWR_CTRL_ADDR $OFFSET $POW_ON_SLOT - exit 0; + fi + i2cset -y "$CPLD_BUS_NUM" "$CPLD_PWR_CTRL_ADDR" "$OFFSET" "$POW_ON_SLOT" + sleep 2 + + # Check chassis stattus after doing 12V cycle + chassis_status=$(chassis-power-status $SLOT) + if [ "$chassis_status" == "$STATE_ON" ] + then + busctl set-property "$CHASSIS_BUS_NAME""$CHASSIS_ID" "$CHASSIS_OBJ_PATH""$CHASSIS_ID" "$CHASSIS_INTF_NAME" "$CHASSIS_PROPERTY_NAME" s "$CHASSIS_ON" + exit 0; + else + busctl set-property "$CHASSIS_BUS_NAME""$CHASSIS_ID" "$CHASSIS_OBJ_PATH""$CHASSIS_ID" "$CHASSIS_INTF_NAME" "$CHASSIS_PROPERTY_NAME" s "$CHASSIS_OFF" + exit 0; + fi fi - echo "invalid slot id" + + echo "Invalid slot id" exit 1; } -chassisid=$1 -if [ "$chassisid" == 0 ] +if [ "$1" == 0 ] then echo "Enter SLED-cycle" - result=$(i2cset -y $BUS_NUM $CPLD_PWR_CTRL_ADDR 0x2b 0x1) + result=$(i2cset -y "$CPLD_BUS_NUM" "$CPLD_PWR_CTRL_ADDR" 0x2b 0x1) echo "$result" else echo "Enter slot$1 cycle" - chassis-power-gpio-status "$chassisid" + chassis-power-cycle "$1" fi diff --git a/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/chassis-poweroff b/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/chassis-poweroff index f7d6448746..9417352553 100644 --- a/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/chassis-poweroff +++ b/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/chassis-poweroff @@ -4,40 +4,40 @@ # shellcheck source=meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/power-cmd source /usr/libexec/phosphor-state-manager/power-cmd -POWER_OK_SLOT=$(( $1+9 )) -slot=$(( $1-1 )) -OFFSET=$(( 0x9 + slot )) +CHASSIS_ID=$1 +SLOT=$(( $1-1 )) +OFFSET=$(( 0x9 + SLOT )) # Server 12v power off chassis-power-off() { - result=$(i2cset -y $BUS_NUM $CPLD_PWR_CTRL_ADDR $OFFSET $POW_OFF_SLOT) + result=$(i2cset -y "$CPLD_BUS_NUM" "$CPLD_PWR_CTRL_ADDR" "$OFFSET $POW_OFF_SLOT") echo "$result" - sleep 1 - chassis_status=$(gpioget 0 $POWER_OK_SLOT) - if [ "$chassis_status" == 0 ] + sleep 1 + + # Check chassis status after doing 12V off + chassis_status=$(chassis-power-status $SLOT) + if [ "$chassis_status" == "$STATE_OFF" ] then + busctl set-property "$CHASSIS_BUS_NAME""$CHASSIS_ID" "$CHASSIS_OBJ_PATH""$CHASSIS_ID" "$CHASSIS_INTF_NAME" "$CHASSIS_PROPERTY_NAME" s "$CHASSIS_OFF" echo "Chassis is power off" else - echo "Chassis is already off" - exit 1; + busctl set-property "$CHASSIS_BUS_NAME""$CHASSIS_ID" "$CHASSIS_OBJ_PATH""$CHASSIS_ID" "$CHASSIS_INTF_NAME" "$CHASSIS_PROPERTY_NAME" s "$CHASSIS_ON" + echo "Chassis is power on" + exit 0; fi } -chassis-power-gpio-status() -{ - if [ "$slot" -le 4 ] - then - status=$(gpioget 0 $POWER_OK_SLOT) - if [ "$status" == 1 ] - then - chassis-power-off - exit 0; - else - echo "Chassis is already off" - exit 1; - fi - fi + +chassis_status=$(chassis-power-status $SLOT) +if [ "$chassis_status" == "$STATE_UNKNOWN" ] +then echo "Invalid slot id" exit 1; -} -chassis-power-gpio-status +elif [ "$chassis_status" == "$STATE_ON" ] +then + chassis-power-off + exit 0; +else + echo "Chassis is already off" + exit 0; +fi diff --git a/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/chassis-poweron b/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/chassis-poweron index 9fe8315862..08b1e30c6b 100644 --- a/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/chassis-poweron +++ b/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/chassis-poweron @@ -4,40 +4,40 @@ # shellcheck source=meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/power-cmd source /usr/libexec/phosphor-state-manager/power-cmd -POWER_OK_SLOT=$(( $1+9 )) -slot=$(( $1-1 )) -OFFSET=$(( 0x9 + slot )) +CHASSIS_ID=$1 +SLOT=$(( $1-1 )) +OFFSET=$(( 0x9 + SLOT )) # Server 12v power on chassis-power-on() { - result=$(i2cset -y $BUS_NUM $CPLD_PWR_CTRL_ADDR $OFFSET $POW_ON_SLOT) + result=$(i2cset -y "$CPLD_BUS_NUM" "$CPLD_PWR_CTRL_ADDR" "$OFFSET" "$POW_ON_SLOT") echo "$result" sleep 1 - chassis_status=$(gpioget 0 $POWER_OK_SLOT) - if [ "$chassis_status" == 1 ] + + # Check chassis stattus after doing 12V on + chassis_status=$(chassis-power-status $SLOT) + if [ "$chassis_status" == "$STATE_ON" ] then + busctl set-property "$CHASSIS_BUS_NAME""$CHASSIS_ID" "$CHASSIS_OBJ_PATH""$CHASSIS_ID" "$CHASSIS_INTF_NAME" "$CHASSIS_PROPERTY_NAME" s "$CHASSIS_ON" echo "Chassis is power on" else - echo "Chassis is already on" - exit 1; + busctl set-property "$CHASSIS_BUS_NAME""$CHASSIS_ID" "$CHASSIS_OBJ_PATH""$CHASSIS_ID" "$CHASSIS_INTF_NAME" "$CHASSIS_PROPERTY_NAME" s "$CHASSIS_OFF" + echo "Chassis is power off" + exit 0; fi } -chassis-power-gpio-status() -{ - if [ "$slot" -le 4 ] - then - status=$(gpioget 0 $POWER_OK_SLOT) - if [ "$status" == 0 ] - then - chassis-power-on - exit 0; - else - echo "Chassis is already on" - exit 1; - fi - fi + +chassis_status=$(chassis-power-status $SLOT) +if [ "$chassis_status" == "$STATE_UNKNOWN" ] +then echo "Invalid slot id" exit 1; -} -chassis-power-gpio-status +elif [ "$chassis_status" == "$STATE_OFF" ] +then + chassis-power-on + exit 0; +else + echo "Chassis is already on" + exit 0; +fi diff --git a/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/host-powercycle b/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/host-powercycle index 81cb429801..22a093fc1e 100644 --- a/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/host-powercycle +++ b/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/host-powercycle @@ -4,6 +4,7 @@ # shellcheck source=meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/host-poweron source /usr/libexec/phosphor-state-manager/power-cmd +HOST_ID=$1 SLOT_ID=$(( $1-1 << 2 )) # Host Reboot @@ -12,9 +13,9 @@ host-reboot() power_delay=$1 for pwr_cmd in "${power_seq[@]}" do - result="$(busctl call $SERVICE $OBJECT_PATH $INTERFACE sendRequest yyyyay $SLOT_ID $NETFN $LUN $CMD $DATA_LEN 0x01 0x42 0x01 0x00 "$pwr_cmd")" + result="$(busctl call "$SERVICE" "$OBJECT_PATH" "$INTERFACE" sendRequest yyyyay "$SLOT_ID" "$NETFN" "$LUN" "$CMD" "$DATA_LEN" 0x01 0x42 0x01 0x00 "$pwr_cmd")" echo "$result" - if [ "$pwr_cmd" == $POWER_BTN_LOW ] + if [ "$pwr_cmd" == "$POWER_BTN_LOW" ] then sleep "$power_delay" fi @@ -22,22 +23,25 @@ host-reboot() } # Check Host Response and Status -check-response() -{ - response="$(busctl call $SERVICE $OBJECT_PATH $INTERFACE sendRequest yyyyay $SLOT_ID 0x38 $LUN 0x3 0x03 0x15 0xa0 0x00)" +host_status=$(host-power-status $SLOT_ID) +if [ "$host_status" == "$STATE_ON" ] +then + host-reboot 6 + sleep 15 + host-reboot 2 + + host_status=$(host-power-status $SLOT_ID) + if [ "$host_status" == "$STATE_ON" ] + then + busctl set-property "$HOST_BUS_NAME""$HOST_ID" "$HOST_OBJ_PATH""$HOST_ID" "$HOST_INTF_NAME" "$HOST_PROPERTY_NAME" s "$HOST_ON" + exit 0; + else + busctl set-property "$HOST_BUS_NAME""$HOST_ID" "$HOST_OBJ_PATH""$HOST_ID" "$HOST_INTF_NAME" "$HOST_PROPERTY_NAME" s "$HOST_OFF" + exit 0; + fi +else + echo "Host is Off" + exit 1; +fi + - result=$(echo "$response" | cut -d" " -f $PWRGD_SYS_PWROK_INDEX) - res="$(( "$result" & 0x80 ))" - pgood="$(( "$res" >> 7 ))" - if [ "$pgood" == $STATE_ON ] - then - host-reboot 6 - sleep 15 - host-reboot 2 - exit 0; - else - echo "Host is Off" - exit 1; - fi -} -check-response diff --git a/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/host-poweroff b/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/host-poweroff index 70e8474ced..624d6d50c0 100644 --- a/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/host-poweroff +++ b/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/host-poweroff @@ -4,6 +4,7 @@ # shellcheck source=meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/power-cmd source /usr/libexec/phosphor-state-manager/power-cmd +HOST_ID=$1 SLOT_ID=$(( $1-1 << 2 )) # Host Power Off @@ -11,30 +12,34 @@ host-power-off() { for pwr_cmd in "${power_seq[@]}" do - result="$(busctl call $SERVICE $OBJECT_PATH $INTERFACE sendRequest yyyyay $SLOT_ID $NETFN $LUN $CMD $DATA_LEN 0x01 0x42 0x01 0x00 "$pwr_cmd")" + result="$(busctl call "$SERVICE" "$OBJECT_PATH" "$INTERFACE" sendRequest yyyyay "$SLOT_ID" "$NETFN" "$LUN" "$CMD" "$DATA_LEN" 0x01 0x42 0x01 0x00 "$pwr_cmd")" echo "$result" - if [ "$pwr_cmd" == $POWER_BTN_LOW ] + if [ "$pwr_cmd" == "$POWER_BTN_LOW" ] then sleep 6 fi done - echo "Host power off" - exit 0; + + # Check host stattus after doing host power off + host_status=$(host-power-status $SLOT_ID) + if [ "$host_status" == "$STATE_OFF" ] + then + busctl set-property "$HOST_BUS_NAME""$HOST_ID" "$HOST_OBJ_PATH""$HOST_ID" "$HOST_INTF_NAME" "$HOST_PROPERTY_NAME" s "$HOST_OFF" + echo "Host power off" + exit 0; + else + busctl set-property "$HOST_BUS_NAME""$HOST_ID" "$HOST_OBJ_PATH""$HOST_ID" "$HOST_INTF_NAME" "$HOST_PROPERTY_NAME" s "$HOST_ON" + echo "Host power on" + exit 0; + fi } # Check Host Response and Status -host-power-status() -{ - response="$(busctl call $SERVICE $OBJECT_PATH $INTERFACE sendRequest yyyyay $SLOT_ID 0x38 $LUN 0x3 0x03 0x15 0xa0 0x00)" - - result=$(echo "$response" | cut -d" " -f $PWRGD_SYS_PWROK_INDEX) - res="$(( "$result" & 0x80 ))" - pgood="$(( "$res" >> 7 ))" - if [ "$pgood" == $STATE_ON ] - then - host-power-off - fi - echo "Power is already off" - exit 1; -} -host-power-status +host_status=$(host-power-status $SLOT_ID) +if [ "$host_status" == "$STATE_ON" ] +then + host-power-off +else + echo "Power is already off" + exit 1; +fi diff --git a/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/host-poweron b/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/host-poweron index 008ff4590b..bd72979502 100644 --- a/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/host-poweron +++ b/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/host-poweron @@ -4,36 +4,41 @@ # shellcheck source=meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/power-cmd source /usr/libexec/phosphor-state-manager/power-cmd +HOST_ID=$1 SLOT_ID=$(( $1-1 << 2 )) # Host Power On host-power-on() { for pwr_cmd in "${power_seq[@]}" do - result="$(busctl call $SERVICE $OBJECT_PATH $INTERFACE sendRequest yyyyay $SLOT_ID $NETFN $LUN $CMD $DATA_LEN 0x01 0x42 0x01 0x00 "$pwr_cmd")" + result="$(busctl call "$SERVICE" "$OBJECT_PATH" "$INTERFACE" sendRequest yyyyay "$SLOT_ID" "$NETFN" "$LUN" "$CMD" "$DATA_LEN" 0x01 0x42 0x01 0x00 "$pwr_cmd")" echo "$result" - if [ "$pwr_cmd" == $POWER_BTN_LOW ] + if [ "$pwr_cmd" == "$POWER_BTN_LOW" ] then sleep 2 fi done - echo "Host power on" - exit 0; + + # Check host status after doing host power on + host_status=$(host-power-status $SLOT_ID) + if [ "$host_status" == "$STATE_ON" ] + then + busctl set-property "$HOST_BUS_NAME""$HOST_ID" "$HOST_OBJ_PATH""$HOST_ID" "$HOST_INTF_NAME" "$HOST_PROPERTY_NAME" s "$HOST_ON" + echo "Host power on" + exit 0; + else + busctl set-property "$HOST_BUS_NAME""$HOST_ID" "$HOST_OBJ_PATH""$HOST_ID" "$HOST_INTF_NAME" "$HOST_PROPERTY_NAME" s "$HOST_OFF" + echo "Host power off" + exit 0; + fi } # Check Host Response and Status -host-power-status() -{ - response="$(busctl call $SERVICE $OBJECT_PATH $INTERFACE sendRequest yyyyay $SLOT_ID 0x38 $LUN 0x03 0x03 0x15 0xa0 0x00)" - - result=$(echo "$response" | cut -d" " -f $PWRGD_SYS_PWROK_INDEX) - res="$(( "$result" & 0x80 ))" - pgood="$(( "$res" >> 7 ))" - if [ "$pgood" == $STATE_OFF ] - then - host-power-on - fi +host_status=$(host-power-status $SLOT_ID) +if [ "$host_status" == "$STATE_OFF" ] +then + host-power-on +else echo "Power is already on" exit 1; -} -host-power-status +fi diff --git a/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/host-powerreset b/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/host-powerreset index e4bf1ffc91..88c27fb2a2 100644 --- a/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/host-powerreset +++ b/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/host-powerreset @@ -4,6 +4,7 @@ # shellcheck source=meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/power-cmd source /usr/libexec/phosphor-state-manager/power-cmd +HOST_ID=$1 SLOT_ID=$(( $1-1 << 2 )) # Host Reboot @@ -11,33 +12,35 @@ host-reboot() { for reset_cmd in "${reset_seq[@]}" do - result="$(busctl call $SERVICE $OBJECT_PATH $INTERFACE sendRequest yyyyay $SLOT_ID $NETFN $LUN $CMD $DATA_LEN 0x01 0x42 0x01 0 "$reset_cmd")" + result="$(busctl call "$SERVICE" "$OBJECT_PATH" "$INTERFACE" sendRequest yyyyay "$SLOT_ID" "$NETFN" "$LUN" "$CMD" "$DATA_LEN" 0x01 0x42 0x01 0 "$reset_cmd")" echo "$result" - if [ "$reset_cmd" == $POWER_BTN_LOW ] + if [ "$reset_cmd" == "$POWER_BTN_LOW" ] then sleep "$1" fi done - echo "Host Power Reset" - exit 0 -} - -# Check Host Response and Status -check-response() -{ - response="$(busctl call $SERVICE $OBJECT_PATH $INTERFACE sendRequest yyyyay $SLOT_ID 0x38 $LUN 0x3 0x03 0x15 0xa0 0x00)" - result=$(echo "$response" | cut -d" " -f $PWRGD_SYS_PWROK_INDEX) - res="$(( "$result" & 0x80 ))" - pgood="$(( "$res" >> 7 ))" - if [ "$pgood" == $STATE_ON ] + # Check host stattus after doing host power reset + host_status=$(host-power-status $SLOT_ID) + if [ "$host_status" == "$STATE_ON" ] then - host-reboot 1 + busctl set-property "$HOST_BUS_NAME""$HOST_ID" "$HOST_OBJ_PATH""$HOST_ID" "$HOST_INTF_NAME" "$HOST_PROPERTY_NAME" s "$HOST_ON" + echo "Host power Reset" exit 0; else - echo "Host is Off" - exit 1; + busctl set-property "$HOST_BUS_NAME""$HOST_ID" "$HOST_OBJ_PATH""$HOST_ID" "$HOST_INTF_NAME" "$HOST_PROPERTY_NAME" s "$HOST_OFF" + echo "Host power off" + exit 0; fi } -check-response +# Check Host Response and Status +host_status=$(host-power-status $SLOT_ID) +if [ "$host_status" == "$STATE_ON" ] +then + host-reboot 1 + exit 0; +else + echo "Host is Off" + exit 1; +fi diff --git a/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/power-cmd b/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/power-cmd index 892cde58df..ed75851532 100644 --- a/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/power-cmd +++ b/meta-facebook/recipes-phosphor/state/phosphor-state-manager/greatlakes/power-cmd @@ -15,10 +15,11 @@ export LUN=0x00 export CMD=0x52 export STATE_OFF=0 export STATE_ON=1 -export BUS_NUM=12 +export STATE_UNKNOWN=-1 +export CPLD_BUS_NUM=12 +export CPLD_PWR_CTRL_ADDR=0xf export POW_ON_SLOT=0x01 export POW_OFF_SLOT=0x00 -export CPLD_PWR_CTRL_ADDR=0xf export PWRGD_SYS_PWROK_INDEX=12 export IANA="0x15 0xA0 0x0" export IANA_LEN=3 @@ -30,4 +31,36 @@ export HOST_BUS_NAME="xyz.openbmc_project.State.Host" export HOST_OBJ_PATH="/xyz/openbmc_project/state/host" export HOST_INTF_NAME="xyz.openbmc_project.State.Host" export HOST_PROPERTY_NAME="CurrentHostState" +export CHASSIS_ON="xyz.openbmc_project.State.Chassis.PowerState.On" +export CHASSIS_OFF="xyz.openbmc_project.State.Chassis.PowerState.Off" +export HOST_ON="xyz.openbmc_project.State.Host.HostState.Running" +export HOST_OFF="xyz.openbmc_project.State.Host.HostState.Off" + +host-power-status() +{ + SLOT_ID=$1 + + response="$(busctl call "$SERVICE" "$OBJECT_PATH" "$INTERFACE" sendRequest yyyyay "$SLOT_ID" 0x38 "$LUN" 0x03 0x03 0x15 0xa0 0x00)" + result=$(echo "$response" | cut -d" " -f "$PWRGD_SYS_PWROK_INDEX") + res="$(( "$result" & 0x80 ))" + status="$(( "$res" >> 7 ))" + + echo "$status" + return 0 +} + +chassis-power-status() +{ + slot=$1 + status=-1 + + if [ "$slot" -le 4 ] + then + response="$(i2cget -y "$CPLD_BUS_NUM" "$CPLD_PWR_CTRL_ADDR" 0x25)" + res="$(( "$response" >> slot ))" + status="$(( "$res" & 0x01 ))" + fi + echo "$status" + return 0 +} |