meta-fii/meta-kudo: Add new meta layer for Fii Kudo project

First drop for the meta-kudo layer, initial machine configuration
to supports Nuvoton npcm730 chip and the Ampere ARM system

Tested-by:
1. Load image on the Nuvoton RunBMC CRB
2. Use ipmitool to test the command under BMC console
  a. ipmitool mc info
  b. ipmitool sdr
  c. ipmitool lan print
  d. ipmitool channel info 1
  e. ipmitool user list 1
  f. ipmitool chassis status
  g. ipmitool raw 0x06 0x01
  h. ipmitool power status

Signed-off-by: Lancelot Kao <lancelot.kao@fii-usa.com>
Change-Id: Ic34b77affe0c08e84762ef795f9f06011bd269ce
diff --git a/meta-fii/README.md b/meta-fii/README.md
index e0f5344..ec520aa 100644
--- a/meta-fii/README.md
+++ b/meta-fii/README.md
@@ -4,3 +4,4 @@
 Fii USA crop
 
 ├── meta-fii
+ └── meta-kudo
diff --git a/meta-fii/meta-kudo/conf/bblayers.conf.sample b/meta-fii/meta-kudo/conf/bblayers.conf.sample
new file mode 100644
index 0000000..9fe4207
--- /dev/null
+++ b/meta-fii/meta-kudo/conf/bblayers.conf.sample
@@ -0,0 +1,27 @@
+# LAYER_CONF_VERSION is increased each time build/conf/bblayers.conf
+# changes incompatibly
+LCONF_VERSION = "8"
+
+BBPATH = "${TOPDIR}"
+BBFILES ?= ""
+
+BBLAYERS ?= " \
+  ##OEROOT##/meta \
+  ##OEROOT##/meta-openembedded/meta-oe \
+  ##OEROOT##/meta-openembedded/meta-networking \
+  ##OEROOT##/meta-openembedded/meta-python \
+  ##OEROOT##/meta-phosphor \
+  ##OEROOT##/meta-nuvoton \
+  ##OEROOT##/meta-google \
+  ##OEROOT##/meta-fii/meta-kudo \
+  "
+BBLAYERS_NON_REMOVABLE ?= " \
+  ##OEROOT##/meta \
+  ##OEROOT##/meta-openembedded/meta-oe \
+  ##OEROOT##/meta-openembedded/meta-networking \
+  ##OEROOT##/meta-openembedded/meta-python \
+  ##OEROOT##/meta-phosphor \
+  ##OEROOT##/meta-nuvoton \
+  ##OEROOT##/meta-google \
+  ##OEROOT##/meta-fii/meta-kudo \
+  "
diff --git a/meta-fii/meta-kudo/conf/conf-notes.txt b/meta-fii/meta-kudo/conf/conf-notes.txt
new file mode 100644
index 0000000..9b3c01a
--- /dev/null
+++ b/meta-fii/meta-kudo/conf/conf-notes.txt
@@ -0,0 +1,2 @@
+Common targets are:
+     obmc-phosphor-image
diff --git a/meta-fii/meta-kudo/conf/distro/openbmc-kudo.conf b/meta-fii/meta-kudo/conf/distro/openbmc-kudo.conf
new file mode 100644
index 0000000..0470913
--- /dev/null
+++ b/meta-fii/meta-kudo/conf/distro/openbmc-kudo.conf
@@ -0,0 +1,4 @@
+require conf/distro/openbmc-phosphor.conf
+
+DISTRO = "openbmc-kudo"
+
diff --git a/meta-fii/meta-kudo/conf/layer.conf b/meta-fii/meta-kudo/conf/layer.conf
new file mode 100644
index 0000000..e5a3c34
--- /dev/null
+++ b/meta-fii/meta-kudo/conf/layer.conf
@@ -0,0 +1,10 @@
+# We have a conf and classes directory, add to BBPATH
+BBPATH .= ":${LAYERDIR}"
+
+# We have recipes-* directories, add to BBFILES
+BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
+            ${LAYERDIR}/recipes-*/*/*.bbappend"
+
+BBFILE_COLLECTIONS += "kudo-layer"
+BBFILE_PATTERN_kudo-layer = "^${LAYERDIR}/"
+LAYERSERIES_COMPAT_kudo-layer = "warrior zeus dunfell"
diff --git a/meta-fii/meta-kudo/conf/local.conf.sample b/meta-fii/meta-kudo/conf/local.conf.sample
new file mode 100644
index 0000000..8f66595
--- /dev/null
+++ b/meta-fii/meta-kudo/conf/local.conf.sample
@@ -0,0 +1,18 @@
+MACHINE ??= "kudo"
+DISTRO ?= "openbmc-kudo"
+PACKAGE_CLASSES ?= "package_rpm"
+SANITY_TESTED_DISTROS_append ?= " *"
+EXTRA_IMAGE_FEATURES = "debug-tweaks"
+USER_CLASSES ?= "buildstats image-mklibs image-prelink"
+PATCHRESOLVE = "noop"
+BB_DISKMON_DIRS = "\
+    STOPTASKS,${TMPDIR},1G,100K \
+    STOPTASKS,${DL_DIR},1G,100K \
+    STOPTASKS,${SSTATE_DIR},1G,100K \
+    STOPTASKS,/tmp,100M,100K \
+    ABORT,${TMPDIR},100M,1K \
+    ABORT,${DL_DIR},100M,1K \
+    ABORT,${SSTATE_DIR},100M,1K \
+    ABORT,/tmp,10M,1K"
+CONF_VERSION = "1"
+
diff --git a/meta-fii/meta-kudo/conf/machine/kudo.conf b/meta-fii/meta-kudo/conf/machine/kudo.conf
new file mode 100644
index 0000000..31036a4
--- /dev/null
+++ b/meta-fii/meta-kudo/conf/machine/kudo.conf
@@ -0,0 +1,21 @@
+KMACHINE = "nuvoton"
+KERNEL_DEVICETREE = "${KMACHINE}-npcm730-kudo.dtb"
+
+require conf/machine/include/npcm7xx.inc
+require conf/machine/include/obmc-bsp-common.inc
+
+FLASH_SIZE = "65536"
+FLASH_UBOOT_OFFSET = "0"
+FLASH_KERNEL_OFFSET = "2048"
+FLASH_ROFS_OFFSET = "8192"
+FLASH_RWFS_OFFSET = "62464"
+
+UBOOT_MACHINE = "PolegSVB_config"
+UBOOT_DEVICETREE = "nuvoton-npcm730-kudo"
+IGPS_MACHINE = "EB"
+
+IMAGE_FSTYPES += " cpio.${INITRAMFS_CTYPE}.u-boot"
+
+VIRTUAL-RUNTIME_obmc-fan-control = "phosphor-pid-control"
+PREFERRED_PROVIDER_virtual/obmc-fan-control = "phosphor-pid-control"
+PREFERRED_PROVIDER_virtual/obmc-system-mgmt = "packagegroup-kudo-apps"
diff --git a/meta-fii/meta-kudo/recipes-bsp/u-boot/u-boot-common-kudo.inc b/meta-fii/meta-kudo/recipes-bsp/u-boot/u-boot-common-kudo.inc
new file mode 100644
index 0000000..9154bc1
--- /dev/null
+++ b/meta-fii/meta-kudo/recipes-bsp/u-boot/u-boot-common-kudo.inc
@@ -0,0 +1,3 @@
+UBRANCH = "npcm7xx-v2019.01"
+SRC_URI = "git://github.com/Nuvoton-Israel/u-boot.git;branch=${UBRANCH}"
+SRCREV = "5caf59416ba1d6316dd78895e69789246a77e00a"
diff --git a/meta-fii/meta-kudo/recipes-bsp/u-boot/u-boot-fw-utils-nuvoton/fw_env.config b/meta-fii/meta-kudo/recipes-bsp/u-boot/u-boot-fw-utils-nuvoton/fw_env.config
new file mode 100644
index 0000000..0c38427
--- /dev/null
+++ b/meta-fii/meta-kudo/recipes-bsp/u-boot/u-boot-fw-utils-nuvoton/fw_env.config
@@ -0,0 +1,24 @@
+# Configuration file for fw_(printenv/setenv) utility.
+# Up to two entries are valid, in this case the redundant
+# environment sector is assumed present.
+# Notice, that the "Number of sectors" is not required on NOR and SPI-dataflash.
+# Futhermore, if the Flash sector size is ommitted, this value is assumed to
+# be the same as the Environment size, which is valid for NOR and SPI-dataflash
+
+# NOR example
+# MTD device name	Device offset	Env. size	Flash sector size	Number of sectors
+/dev/mtd2		0x0000		0x40000		0x4000
+
+# MTD SPI-dataflash example
+# MTD device name	Device offset	Env. size	Flash sector size	Number of sectors
+#/dev/mtd5		0x4200		0x4200
+#/dev/mtd6		0x4200		0x4200
+
+# NAND example
+#/dev/mtd0		0x4000		0x4000		0x20000			2
+
+# Block device example
+#/dev/mmcblk0		0xc0000		0x20000
+
+# VFAT example
+#/boot/uboot.env	0x0000          0x4000
diff --git a/meta-fii/meta-kudo/recipes-bsp/u-boot/u-boot-fw-utils-nuvoton_%.bbappend b/meta-fii/meta-kudo/recipes-bsp/u-boot/u-boot-fw-utils-nuvoton_%.bbappend
new file mode 100644
index 0000000..5c56e17
--- /dev/null
+++ b/meta-fii/meta-kudo/recipes-bsp/u-boot/u-boot-fw-utils-nuvoton_%.bbappend
@@ -0,0 +1,7 @@
+FILESEXTRAPATHS_prepend_kudo := "${THISDIR}/${PN}:"
+
+SRC_URI_append_kudo = " file://fw_env.config"
+
+do_install_append_kudo () {
+  install -m 644 ${WORKDIR}/fw_env.config ${D}${sysconfdir}/fw_env.config
+}
diff --git a/meta-fii/meta-kudo/recipes-bsp/u-boot/u-boot-nuvoton/fixed_phy.cfg b/meta-fii/meta-kudo/recipes-bsp/u-boot/u-boot-nuvoton/fixed_phy.cfg
new file mode 100644
index 0000000..125522f
--- /dev/null
+++ b/meta-fii/meta-kudo/recipes-bsp/u-boot/u-boot-nuvoton/fixed_phy.cfg
@@ -0,0 +1,2 @@
+CONFIG_PHY_FIXED=y
+
diff --git a/meta-fii/meta-kudo/recipes-bsp/u-boot/u-boot-nuvoton/kudo.cfg b/meta-fii/meta-kudo/recipes-bsp/u-boot/u-boot-nuvoton/kudo.cfg
new file mode 100644
index 0000000..417ffa9
--- /dev/null
+++ b/meta-fii/meta-kudo/recipes-bsp/u-boot/u-boot-nuvoton/kudo.cfg
@@ -0,0 +1,2 @@
+CONFIG_CMD_MII=y
+CONFIG_NET_RANDOM_ETHADDR=y
diff --git a/meta-fii/meta-kudo/recipes-bsp/u-boot/u-boot-nuvoton_%.bbappend b/meta-fii/meta-kudo/recipes-bsp/u-boot/u-boot-nuvoton_%.bbappend
new file mode 100644
index 0000000..73ad51e
--- /dev/null
+++ b/meta-fii/meta-kudo/recipes-bsp/u-boot/u-boot-nuvoton_%.bbappend
@@ -0,0 +1,10 @@
+FILESEXTRAPATHS_prepend_kudo := "${THISDIR}/u-boot-nuvoton:"
+
+require u-boot-common-kudo.inc
+
+UBOOT_MAKE_TARGET_append_kudo = " DEVICE_TREE=${UBOOT_DEVICETREE}"
+
+SRC_URI_append_kudo = " \
+			file://fixed_phy.cfg \
+			file://kudo.cfg \
+			"
diff --git a/meta-fii/meta-kudo/recipes-kernel/linux/linux-nuvoton/kudo.cfg b/meta-fii/meta-kudo/recipes-kernel/linux/linux-nuvoton/kudo.cfg
new file mode 100644
index 0000000..0811dd9
--- /dev/null
+++ b/meta-fii/meta-kudo/recipes-kernel/linux/linux-nuvoton/kudo.cfg
@@ -0,0 +1,108 @@
+CONFIG_HWMON=y
+CONFIG_SENSORS_TMP100=y
+CONFIG_SENSORS_LM75=y
+CONFIG_SENSORS_FAN=y
+CONFIG_SENSORS_ADC128D818=y
+CONFIG_SENSORS_ADM1275=y
+CONFIG_SENSORS_TMP102=y
+CONFIG_SENSORS_TMP421=y
+
+CONFIG_PMBUS=y
+CONFIG_SENSORS_PMBUS=y
+CONFIG_SENSORS_INA2XX=y
+
+CONFIG_IIO=y
+CONFIG_IIO_MUX=y
+CONFIG_NPCM_ADC=y
+CONFIG_SENSORS_IIO_HWMON=y
+
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+CONFIG_LEDS_GPIO=y
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
+
+CONFIG_OVERLAY_FS=y
+CONFIG_SQUASHFS=y
+CONFIG_SQUASHFS_XZ=y
+CONFIG_JFFS2_FS=y
+CONFIG_EXT4_FS=y
+
+CONFIG_SPI=y
+CONFIG_SPI_NPCM_FIU=y
+CONFIG_MTD_M25P80=y
+CONFIG_SPI_NPCM_PSPI=y
+
+CONFIG_NET_NCSI=y
+
+CONFIG_EEPROM_AT24=y
+CONFIG_I2C_MUX=y
+CONFIG_I2C_MUX_PCA954x=y
+CONFIG_I2C_SLAVE_EEPROM=y
+CONFIG_GPIO_PCA953X=y
+CONFIG_GPIO_PCA953X_IRQ=y
+CONFIG_GPIO_PCF857X=y
+CONFIG_MUX_MMIO=y
+CONFIG_USB_U_ETHER=y
+CONFIG_USB_F_ECM=y
+CONFIG_USB_F_EEM=y
+CONFIG_USB_F_SUBSET=y
+CONFIG_USB_F_RNDIS=y
+CONFIG_USB_F_MASS_STORAGE=y
+CONFIG_USB_CONFIGFS=y
+CONFIG_USB_CONFIGFS_ECM=y
+CONFIG_USB_CONFIGFS_ECM_SUBSET=y
+CONFIG_USB_CONFIGFS_RNDIS=y
+CONFIG_USB_CONFIGFS_EEM=y
+CONFIG_USB_CONFIGFS_MASS_STORAGE=y
+CONFIG_USB_CONFIGFS_F_HID=y
+
+CONFIG_MEDIA_SUPPORT=y
+CONFIG_VIDEO_NUVOTON=y
+CONFIG_NPCM750_VCD=y
+CONFIG_NPCM750_ECE=y
+CONFIG_FORCE_MAX_ZONEORDER=12
+
+CONFIG_USB_GADGET_NPCM_USB2=y
+
+CONFIG_NPCM7XX_PCI_MBOX=y
+
+CONFIG_RESET_NPCM=y
+
+CONFIG_I2C_SLAVE=y
+CONFIG_I2C_SLAVE_MQUEUE=y
+CONFIG_IPMB_DEVICE_INTERFACE=y
+CONFIG_NUVOTON_JTAG=y
+CONFIG_NPCM7XX_JTAG_MASTER=y
+
+#
+# Core Netfilter Configuration
+#
+CONFIG_NET_INGRESS=y
+CONFIG_NETFILTER=y
+CONFIG_NETFILTER_ADVANCED=y
+CONFIG_NETFILTER_INGRESS=y
+CONFIG_NETFILTER_NETLINK=y
+CONFIG_NF_CONNTRACK=y
+CONFIG_NF_CONNTRACK_PROCFS=y
+CONFIG_NF_CT_PROTO_DCCP=y
+CONFIG_NF_CT_PROTO_SCTP=y
+CONFIG_NF_CT_PROTO_UDPLITE=y
+CONFIG_NF_CT_NETLINK=y
+CONFIG_NETFILTER_XTABLES=y
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_NF_DEFRAG_IPV4=y
+CONFIG_NF_REJECT_IPV4=y
+CONFIG_IP_NF_IPTABLES=y
+CONFIG_IP_NF_FILTER=y
+CONFIG_IP_NF_TARGET_REJECT=y
+CONFIG_NF_DEFRAG_IPV6=y
+
+
+CONFIG_TCG_TPM=y
+CONFIG_TCG_TIS_I2C_INFINEON=y
diff --git a/meta-fii/meta-kudo/recipes-kernel/linux/linux-nuvoton_%.bbappend b/meta-fii/meta-kudo/recipes-kernel/linux/linux-nuvoton_%.bbappend
new file mode 100644
index 0000000..5276bef
--- /dev/null
+++ b/meta-fii/meta-kudo/recipes-kernel/linux/linux-nuvoton_%.bbappend
@@ -0,0 +1,3 @@
+FILESEXTRAPATHS_prepend_kudo := "${THISDIR}/linux-nuvoton:"
+
+SRC_URI_append_kudo = " file://kudo.cfg"
diff --git a/meta-fii/meta-kudo/recipes-kudo/packagegroups/packagegroup-kudo-apps.bb b/meta-fii/meta-kudo/recipes-kudo/packagegroups/packagegroup-kudo-apps.bb
new file mode 100644
index 0000000..be87945
--- /dev/null
+++ b/meta-fii/meta-kudo/recipes-kudo/packagegroups/packagegroup-kudo-apps.bb
@@ -0,0 +1,30 @@
+SUMMARY = "OpenBMC for KUDO system - Applications"
+PR = "r1"
+
+inherit packagegroup
+
+PROVIDES = "${PACKAGES}"
+PACKAGES = " \
+     ${PN}-kudo-system \
+     ${PN}-kudo-common-utils \
+     "
+
+PROVIDES += "virtual/obmc-system-mgmt"
+
+RPROVIDES_${PN}-kudo-system += "virtual-obmc-system-mgmt"
+
+SUMMARY_${PN}-kudo-system = "KUDO System"
+RDEPENDS_${PN}-kudo-system = " \
+    google-ipmi-sys \
+    google-ipmi-i2c \
+    "
+
+SUMMARY_${PN}-kudo-common-utils = "KUDO common utils"
+RDEPENDS_${PN}-kudo-common-utils = " \
+    ipmitool \
+    phosphor-webui \
+    phosphor-host-postd \
+    loadsvf \
+    obmc-console \
+    phosphor-sel-logger \
+    "
diff --git a/meta-fii/meta-kudo/recipes-phosphor/image/obmc-phosphor-image.bbappend b/meta-fii/meta-kudo/recipes-phosphor/image/obmc-phosphor-image.bbappend
new file mode 100644
index 0000000..0efccea
--- /dev/null
+++ b/meta-fii/meta-kudo/recipes-phosphor/image/obmc-phosphor-image.bbappend
@@ -0,0 +1,7 @@
+OBMC_IMAGE_EXTRA_INSTALL_append_kudo = " ipmitool"
+OBMC_IMAGE_EXTRA_INSTALL_append_kudo = " ethtool"
+OBMC_IMAGE_EXTRA_INSTALL_append_kudo = " google-ipmi-sys"
+OBMC_IMAGE_EXTRA_INSTALL_append_kudo = " google-ipmi-i2c"
+OBMC_IMAGE_EXTRA_INSTALL_append_kudo = " phosphor-ipmi-blobs"
+OBMC_IMAGE_EXTRA_INSTALL_append_kudo = " phosphor-ipmi-ethstats"
+OBMC_IMAGE_EXTRA_INSTALL_append_kudo = " phosphor-ipmi-flash"