meta-facebook: add emmc-init package

Add a service and script for detecting the state of the eMMC
device and formatting it if needed.

Signed-off-by: Potin Lai <potin.lai@quantatw.com>
Change-Id: I4618d1691dedcff582772a0749c5797ad052f238
Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
diff --git a/meta-facebook/recipes-fb/emmc-init/emmc-init_0.1.bb b/meta-facebook/recipes-fb/emmc-init/emmc-init_0.1.bb
new file mode 100644
index 0000000..0a691e6
--- /dev/null
+++ b/meta-facebook/recipes-fb/emmc-init/emmc-init_0.1.bb
@@ -0,0 +1,21 @@
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
+
+inherit obmc-phosphor-systemd
+
+RDEPENDS:${PN}:append = " \
+    bash \
+    btrfs-tools \
+    "
+
+SRC_URI += " \
+    file://emmc-init \
+    file://emmc-init.service \
+    "
+
+do_install:append() {
+    install -d ${D}${libexecdir}/emmc-init
+    install -m 0755 ${WORKDIR}/emmc-init ${D}${libexecdir}/emmc-init
+}
+
+SYSTEMD_SERVICE:${PN} += "emmc-init.service"
diff --git a/meta-facebook/recipes-fb/emmc-init/files/emmc-init b/meta-facebook/recipes-fb/emmc-init/files/emmc-init
new file mode 100644
index 0000000..0ee9007
--- /dev/null
+++ b/meta-facebook/recipes-fb/emmc-init/files/emmc-init
@@ -0,0 +1,48 @@
+#!/bin/bash -e
+
+DEVICE_NODE="/dev/mmcblk0"
+DEFAULT_FS_TYPE="btrfs"
+
+#
+# check device node exist
+#
+if [[ ! -b "${DEVICE_NODE}" ]]; then
+    echo "${DEVICE_NODE} is not available"
+    exit 0
+fi
+
+#
+# check if device mounted correctly
+#
+if ! (mount || true) | grep "${DEVICE_NODE}"> /dev/null; then
+    echo "${DEVICE_NODE} is not mounted"
+else
+    echo "${DEVICE_NODE} is mounted"
+    exit 0
+fi
+
+#
+# check filesystem
+#
+FS_TYPE_CHECK="$(blkid "${DEVICE_NODE}" | sed 's/.*TYPE="\([^"]*\).*/\1/' || true)"
+
+if [[ "${FS_TYPE_CHECK}" = "" ]]; then
+    FS_TYPE="unknown"
+else
+    FS_TYPE="${FS_TYPE_CHECK}"
+fi
+
+case "${FS_TYPE}" in
+    "${DEFAULT_FS_TYPE}")
+        echo "Filesystem (${FS_TYPE}) found on ${DEVICE_NODE}"
+        ;;
+
+    *)
+        echo "No or unexpected filesystem (${FS_TYPE}) found on ${DEVICE_NODE}"
+        if ! output=$(mkfs."${DEFAULT_FS_TYPE}" --force "${DEVICE_NODE}" 2>&1); then
+            echo "failed to create ${DEFAULT_FS_TYPE} on ${DEVICE_NODE}:"
+            echo "${output}"
+            exit 1
+        fi
+        ;;
+esac
diff --git a/meta-facebook/recipes-fb/emmc-init/files/emmc-init.service b/meta-facebook/recipes-fb/emmc-init/files/emmc-init.service
new file mode 100644
index 0000000..1a5ddcf
--- /dev/null
+++ b/meta-facebook/recipes-fb/emmc-init/files/emmc-init.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=eMMC initialize check
+Before=mnt-data.mount
+
+[Service]
+ExecStart=/usr/libexec/emmc-init/emmc-init
+Type=oneshot
+RemainAfterExit=yes
+
+[Install]
+WantedBy=multi-user.target
diff --git a/meta-facebook/recipes-phosphor/images/fb-phosphor-image.inc b/meta-facebook/recipes-phosphor/images/fb-phosphor-image.inc
index 0643f18..e066e54c 100644
--- a/meta-facebook/recipes-phosphor/images/fb-phosphor-image.inc
+++ b/meta-facebook/recipes-phosphor/images/fb-phosphor-image.inc
@@ -6,4 +6,6 @@
         '', d)} \
     "
 
+OBMC_IMAGE_EXTRA_INSTALL:append:mf-fb-secondary-emmc = " emmc-init"
+
 include recipes-phosphor/images/fb-${MACHINE}-phosphor-image.inc