meta-phosphor: Add Mailbox Daemon

Change-Id: I981ec3223ba5af71e50f11d699a3f6b5448f96c8
Signed-off-by: Cyril Bur <cyril.bur@au1.ibm.com>
Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
Signed-off-by: Joel Stanley <joel@jms.id.au>
Signed-off-by: Patrick Williams <patrick@stwcx.xyz>
diff --git a/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/images/obmc-phosphor-image.bbappend b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/images/obmc-phosphor-image.bbappend
index fa330be..b7eeb89 100644
--- a/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/images/obmc-phosphor-image.bbappend
+++ b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/images/obmc-phosphor-image.bbappend
@@ -1 +1 @@
-OBMC_IMAGE_EXTRA_INSTALL_append = " fan-default-speed"
+OBMC_IMAGE_EXTRA_INSTALL_append = " fan-default-speed mboxd"
diff --git a/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/mboxd/mboxd.bbappend b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/mboxd/mboxd.bbappend
new file mode 100644
index 0000000..8b6248a
--- /dev/null
+++ b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/recipes-phosphor/mboxd/mboxd.bbappend
@@ -0,0 +1 @@
+MBOXD_FLASH_SIZE = "64M"
diff --git a/meta-openbmc-machines/meta-openpower/meta-ingrasys/meta-zaius/recipes-phosphor/image/obmc-phosphor-image.bbappend b/meta-openbmc-machines/meta-openpower/meta-ingrasys/meta-zaius/recipes-phosphor/image/obmc-phosphor-image.bbappend
new file mode 100644
index 0000000..aa57bbf
--- /dev/null
+++ b/meta-openbmc-machines/meta-openpower/meta-ingrasys/meta-zaius/recipes-phosphor/image/obmc-phosphor-image.bbappend
@@ -0,0 +1 @@
+OBMC_IMAGE_EXTRA_INSTALL_append = " mboxd"
diff --git a/meta-openbmc-machines/meta-openpower/meta-ingrasys/meta-zaius/recipes-phosphor/mboxd/mboxd.bbappend b/meta-openbmc-machines/meta-openpower/meta-ingrasys/meta-zaius/recipes-phosphor/mboxd/mboxd.bbappend
new file mode 100644
index 0000000..8b6248a
--- /dev/null
+++ b/meta-openbmc-machines/meta-openpower/meta-ingrasys/meta-zaius/recipes-phosphor/mboxd/mboxd.bbappend
@@ -0,0 +1 @@
+MBOXD_FLASH_SIZE = "64M"
diff --git a/meta-phosphor/common/recipes-phosphor/mboxd/files/99-aspeed-mbox.rules b/meta-phosphor/common/recipes-phosphor/mboxd/files/99-aspeed-mbox.rules
new file mode 100644
index 0000000..144fb0f
--- /dev/null
+++ b/meta-phosphor/common/recipes-phosphor/mboxd/files/99-aspeed-mbox.rules
@@ -0,0 +1 @@
+SUBSYSTEM=="mailbox", TAG+="systemd"
diff --git a/meta-phosphor/common/recipes-phosphor/mboxd/files/aspeed-lpc-ctrl-h.patch b/meta-phosphor/common/recipes-phosphor/mboxd/files/aspeed-lpc-ctrl-h.patch
new file mode 100644
index 0000000..122594e
--- /dev/null
+++ b/meta-phosphor/common/recipes-phosphor/mboxd/files/aspeed-lpc-ctrl-h.patch
@@ -0,0 +1,39 @@
+--- /dev/null	2017-01-17 09:45:47.987442339 +1030
++++ include/linux/aspeed-lpc-ctrl.h	2017-01-17 11:12:17.711635876 +1030
+@@ -0,0 +1,36 @@
++/*
++ * Copyright 2017 IBM Corp.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version
++ * 2 of the License, or (at your option) any later version.
++ */
++
++#ifndef _LINUX_ASPEED_LPC_CTRL_H
++#define _LINUX_ASPEED_LPC_CTRL_H
++
++#include <linux/ioctl.h>
++
++/* Window types */
++#define ASPEED_LPC_CTRL_WINDOW_FLASH	1
++#define ASPEED_LPC_CTRL_WINDOW_MEMORY	2
++
++struct aspeed_lpc_ctrl_mapping {
++	__u8    window_type;
++	__u8    window_id;
++	__u16   flags;
++	__u32   addr;
++	__u32   offset;
++	__u32   size;
++};
++
++#define __ASPEED_LPC_CTRL_IOCTL_MAGIC	0xb2
++
++#define ASPEED_LPC_CTRL_IOCTL_GET_SIZE	_IOWR(__ASPEED_LPC_CTRL_IOCTL_MAGIC, \
++		0x00, struct aspeed_lpc_ctrl_mapping)
++
++#define ASPEED_LPC_CTRL_IOCTL_MAP	_IOW(__ASPEED_LPC_CTRL_IOCTL_MAGIC, \
++		0x01, struct aspeed_lpc_ctrl_mapping)
++
++#endif /* _LINUX_ASPEED_LPC_CTRL_H */
diff --git a/meta-phosphor/common/recipes-phosphor/mboxd/mboxd.bb b/meta-phosphor/common/recipes-phosphor/mboxd/mboxd.bb
new file mode 100644
index 0000000..803c1b4
--- /dev/null
+++ b/meta-phosphor/common/recipes-phosphor/mboxd/mboxd.bb
@@ -0,0 +1,31 @@
+SUMMARY = "Phosphor OpenBMC MBOX Daemon"
+DESCRIPTION = "Phosphor OpenBMC MBOX Daemon"
+PR = "r1"
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e"
+
+inherit autotools pkgconfig
+inherit obmc-phosphor-systemd
+
+DEPENDS += "autoconf-archive-native"
+
+S = "${WORKDIR}/git"
+
+SRC_URI += "git://github.com/openbmc/mboxbridge.git;protocol=https"
+
+SRC_URI += "file://99-aspeed-mbox.rules"
+SRC_URI += "file://aspeed-lpc-ctrl-h.patch"
+
+SRCREV="8cb799c2d6c2675959e80f2a7b88610aa4f4817a"
+
+MBOXD_FLASH_SIZE ??= "32M"
+SYSTEMD_SUBSTITUTIONS += "FLASH_SIZE:${MBOXD_FLASH_SIZE}:${PN}.service"
+
+# Hacks because ${STAGING_KERNEL_DIR} points to the kernel source tree, not the
+# installed, pre-processed headers. Requires the aspeed-lpc-ctrl-h patch above.
+CFLAGS_append = "-I include"
+
+do_install_append() {
+    install -d ${D}/lib/udev/rules.d
+    install -m 0644 ${WORKDIR}/99-aspeed-mbox.rules ${D}/lib/udev/rules.d
+}
diff --git a/meta-phosphor/common/recipes-phosphor/mboxd/mboxd/mboxd.service b/meta-phosphor/common/recipes-phosphor/mboxd/mboxd/mboxd.service
new file mode 100644
index 0000000..103adaa
--- /dev/null
+++ b/meta-phosphor/common/recipes-phosphor/mboxd/mboxd/mboxd.service
@@ -0,0 +1,11 @@
+[Unit]
+Description=Phosphor MBOX Daemon
+
+[Service]
+Restart=always
+ExecStart={sbindir}/mboxd --flash {FLASH_SIZE}
+Wants=dev-aspeed-mbox.device
+After=dev-aspeed-mbox.device
+
+[Install]
+WantedBy={SYSTEMD_DEFAULT_TARGET}