meta-ampere: enable Host check GPIO interface

Enable host-gpios option in phosphor-state-manager to support Host state
checking when BMC reboots. Also updateampere_host_check.sh to check Host
State via GPIO interface

Tested:
1. Define host0-ready into device tree.
2. Power On the Host. Reboot BMC, then check if CurrentHostState shows
Running.
3. Power OFF the Host. Reboot BMC, then check if CurrentHostState shows
Off.

Signed-off-by: Thang Q. Nguyen <thang@os.amperecomputing.com>
Signed-off-by: Thang Tran <thuutran@amperecomputing.com>
Change-Id: I0331dfa340eb5bba201475ab9cada42e0946c8f8
diff --git a/meta-ampere/meta-common/recipes-ac01/host/ampere-hostctrl.bb b/meta-ampere/meta-common/recipes-phosphor/host/ampere-hostctrl.bb
similarity index 79%
rename from meta-ampere/meta-common/recipes-ac01/host/ampere-hostctrl.bb
rename to meta-ampere/meta-common/recipes-phosphor/host/ampere-hostctrl.bb
index 03f0d58..b0498f8 100644
--- a/meta-ampere/meta-common/recipes-ac01/host/ampere-hostctrl.bb
+++ b/meta-ampere/meta-common/recipes-phosphor/host/ampere-hostctrl.bb
@@ -7,17 +7,19 @@
 inherit systemd
 inherit obmc-phosphor-systemd
 
+RDEPENDS:${PN} = "bash"
 S = "${WORKDIR}"
 
 SRC_URI = " \
-          file://ampere-host-force-reset@.service \
-          file://ampere-host-on-host-check@.service \
+           file://ampere-host-force-reset@.service \
+           file://ampere-host-on-host-check@.service \
+           file://ampere_host_check.sh \
           "
 
 SYSTEMD_PACKAGES = "${PN}"
 SYSTEMD_SERVICE:${PN} = " \
-        ampere-host-force-reset@.service \
-        "
+                         ampere-host-force-reset@.service \
+                        "
 
 # append force reboot
 HOST_WARM_REBOOT_FORCE_TGT = "ampere-host-force-reset@.service"
@@ -33,3 +35,8 @@
 HOST_ON_RESET_HOSTFMT = "../${HOST_ON_RESET_HOSTTMPL}:${HOST_ON_RESET_HOSTTGTFMT}.requires/${HOST_ON_RESET_HOSTINSTMPL}"
 SYSTEMD_LINK:${PN} += "${@compose_list_zip(d, 'HOST_ON_RESET_HOSTFMT', 'OBMC_HOST_INSTANCES')}"
 SYSTEMD_SERVICE:${PN} += "${HOST_ON_RESET_HOSTTMPL}"
+
+do_install() {
+    install -d ${D}/usr/sbin
+    install -m 0755 ${WORKDIR}/ampere_host_check.sh ${D}/${sbindir}/
+}
diff --git a/meta-ampere/meta-common/recipes-ac01/host/ampere-hostctrl/ampere-host-force-reset@.service b/meta-ampere/meta-common/recipes-phosphor/host/ampere-hostctrl/ampere-host-force-reset@.service
similarity index 100%
rename from meta-ampere/meta-common/recipes-ac01/host/ampere-hostctrl/ampere-host-force-reset@.service
rename to meta-ampere/meta-common/recipes-phosphor/host/ampere-hostctrl/ampere-host-force-reset@.service
diff --git a/meta-ampere/meta-common/recipes-ac01/host/ampere-hostctrl/ampere-host-on-host-check@.service b/meta-ampere/meta-common/recipes-phosphor/host/ampere-hostctrl/ampere-host-on-host-check@.service
similarity index 79%
rename from meta-ampere/meta-common/recipes-ac01/host/ampere-hostctrl/ampere-host-on-host-check@.service
rename to meta-ampere/meta-common/recipes-phosphor/host/ampere-hostctrl/ampere-host-on-host-check@.service
index 36e5a64..7698052 100644
--- a/meta-ampere/meta-common/recipes-ac01/host/ampere-hostctrl/ampere-host-on-host-check@.service
+++ b/meta-ampere/meta-common/recipes-phosphor/host/ampere-hostctrl/ampere-host-on-host-check@.service
@@ -1,7 +1,7 @@
 [Unit]
 Description=Check Host%i status before obmc-host-startmin
-Wants=obmc-host-started@%i.target
 After=obmc-host-started@%i.target
+After=obmc-power-start-pre@%i.target
 Conflicts=obmc-host-stop@%i.target
 Conflicts=phosphor-reset-host-check@%i.service
 OnFailure=obmc-host-quiesce@%i.target
@@ -10,4 +10,4 @@
 
 [Service]
 Type=oneshot
-ExecStart=/usr/sbin/ampere_host_check.sh 1 0
+ExecStart=/usr/sbin/ampere_host_check.sh
diff --git a/meta-ampere/meta-common/recipes-phosphor/host/ampere-hostctrl/ampere_host_check.sh b/meta-ampere/meta-common/recipes-phosphor/host/ampere-hostctrl/ampere_host_check.sh
new file mode 100644
index 0000000..532b139
--- /dev/null
+++ b/meta-ampere/meta-common/recipes-phosphor/host/ampere-hostctrl/ampere_host_check.sh
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+# Check current Host status. Do nothing when the Host is currently ON
+st=$(busctl get-property xyz.openbmc_project.State.Host \
+	/xyz/openbmc_project/state/host0 xyz.openbmc_project.State.Host \
+	CurrentHostState | cut -d"." -f6)
+if [ "$st" == "Running\"" ]; then
+	exit 0
+fi
+
+# Time out checking for Host ON is 60s
+cnt=60
+while [ "$cnt" -gt 0 ];
+do
+	cnt=$((cnt - 1))
+	st=$(busctl call xyz.openbmc_project.State.HostCondition.Gpio \
+		/xyz/openbmc_project/Gpios/host0 org.freedesktop.DBus.Properties \
+		Get ss xyz.openbmc_project.Condition.HostFirmware \
+		CurrentFirmwareCondition | cut -d"." -f6)
+	if [ "$st" == "Running\"" ]; then
+		mkdir -p /run/openbmc
+		echo "Creating /run/openbmc/host@0-on"
+		touch /run/openbmc/host@0-on
+		exit 0
+	fi
+	sleep 1
+done
+
+exit 1
diff --git a/meta-ampere/meta-common/recipes-phosphor/state/phosphor-state-manager_%.bbappend b/meta-ampere/meta-common/recipes-phosphor/state/phosphor-state-manager_%.bbappend
index 03df6a3..6ef9ac5 100644
--- a/meta-ampere/meta-common/recipes-phosphor/state/phosphor-state-manager_%.bbappend
+++ b/meta-ampere/meta-common/recipes-phosphor/state/phosphor-state-manager_%.bbappend
@@ -4,3 +4,22 @@
 DEPS_TGT = "phosphor-discover-system-state@.service"
 SYSTEMD_OVERRIDE:${PN}-discover:append = "${DEPS_CFG}:${DEPS_TGT}.d/${DEPS_CFG}"
 
+DEPENDS += "gpioplus libgpiod"
+
+EXTRA_OEMESON:append = " -Dhost-gpios=enabled"
+
+FILES:${PN} += "${systemd_system_unitdir}/*"
+FILES:${PN}-host += "${bindir}/phosphor-host-condition-gpio"
+SYSTEMD_SERVICE:${PN}-host += "phosphor-host-condition-gpio@.service"
+
+pkg_postinst:${PN}-obmc-targets:prepend() {
+    mkdir -p $D$systemd_system_unitdir/multi-user.target.requires
+    LINK="$D$systemd_system_unitdir/multi-user.target.requires/phosphor-host-condition-gpio@0.service"
+    TARGET="../phosphor-host-condition-gpio@.service"
+    ln -s $TARGET $LINK
+}
+
+pkg_prerm:${PN}-obmc-targets:prepend() {
+    LINK="$D$systemd_system_unitdir/multi-user.target.requires/phosphor-host-condition-gpio@0.service"
+    rm $LINK
+}
diff --git a/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils.bb b/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils.bb
index 546315b..21bdb4b 100644
--- a/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils.bb
+++ b/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils.bb
@@ -8,7 +8,6 @@
           file://gpio-defs.sh \
           file://gpio-lib.sh \
           file://ampere_power_util.sh \
-          file://ampere_host_check.sh \
           file://ampere_add_redfishevent.sh \
           "
 
@@ -19,6 +18,5 @@
     install -m 0755 ${WORKDIR}/gpio-lib.sh ${D}/${sbindir}/
     install -m 0755 ${WORKDIR}/gpio-defs.sh ${D}/${sbindir}/
     install -m 0755 ${WORKDIR}/ampere_power_util.sh ${D}/${sbindir}/
-    install -m 0755 ${WORKDIR}/ampere_host_check.sh ${D}/${sbindir}/
     install -m 0755 ${WORKDIR}/ampere_add_redfishevent.sh ${D}/${sbindir}/
 }
diff --git a/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils/ampere_host_check.sh b/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils/ampere_host_check.sh
deleted file mode 100644
index 024336d..0000000
--- a/meta-ampere/meta-jade/recipes-ampere/platform/mtjade-utils/ampere_host_check.sh
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/bin/bash
-
-# shellcheck source=/dev/null
-source /usr/sbin/gpio-defs.sh
-source /usr/sbin/gpio-lib.sh
-
-createFile=$1
-
-# Check current Host status. Do nothing when the Host is currently ON
-st=$(busctl get-property xyz.openbmc_project.State.Host \
-	/xyz/openbmc_project/state/host0 xyz.openbmc_project.State.Host \
-	CurrentHostState | cut -d"." -f6)
-if [ "$st" == "Running\"" ]; then
-	exit 0
-fi
-
-# Time out to check S0_FW_BOOT_OK is 60 seconds
-cnt=60
-val=0
-while [ "$cnt" -gt 0 ];
-do
-	val=$(gpio_get_val "$S0_CPU_FW_BOOT_OK")
-	cnt=$((cnt - 1))
-	echo "$cnt S0_CPU_FW_BOOT_OK = $val"
-	if [ "$val" == 1 ]; then
-		# Sleep 5 second before the host is ready
-		sleep 5
-		if [ "$createFile" == 1 ]; then
-			mkdir -p /run/openbmc
-			echo "Creating /run/openbmc/host@0-on"
-			touch /run/openbmc/host@0-on
-		fi
-		exit 0
-	fi
-	sleep 1
-done
-
-exit 1