Convert obmc-ubi-fs to a distro feature

As with MRW the use of the UBI image scheme is distro policy.
Convert the existing machine feature to a distro feature.

Enable the new distro feature on the systems that use
it(Witherspoon).

Add a distro override and fix-up MF checks to use this override
instead for improved readability.

Tested: Built a Witherspoon image and validated image
Change-Id: I8ab03115bbfc2ecc77cff5c9eb8628903ae88051
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
diff --git a/meta-openbmc-machines/meta-openpower/common/recipes-core/systemd/systemd_%.bbappend b/meta-openbmc-machines/meta-openpower/common/recipes-core/systemd/systemd_%.bbappend
index 134bab5..7519404 100644
--- a/meta-openbmc-machines/meta-openpower/common/recipes-core/systemd/systemd_%.bbappend
+++ b/meta-openbmc-machines/meta-openpower/common/recipes-core/systemd/systemd_%.bbappend
@@ -1,13 +1,23 @@
 SRC_URI += "${@mf_enabled(d, 'openpower-ubi-fs', 'file://software.conf')}"
 
-do_install_append() {
-
+install_tmpfile() {
         # /tmp/images is the software image upload directory.
         # It should not be deleted since it is watched by the Image Manager for
-        # new images. Don't install software.conf if obmc-ubi-fs is set since
-        # the bbappend in the meta-phosphor layer already installs if
-        # obmc-ubi-fs is set.
-        if ${@bb.utils.contains('MACHINE_FEATURES', 'openpower-ubi-fs', 'true', 'false', d)} && ! ${@bb.utils.contains('MACHINE_FEATURES', 'obmc-ubi-fs', 'true', 'false', d)}; then
+        # new images.
+
+        if ${@bb.utils.contains('MACHINE_FEATURES', 'openpower-ubi-fs', 'true', 'false', d)}; then
                 install -m 0644 ${WORKDIR}/software.conf ${D}${exec_prefix}/lib/tmpfiles.d/
         fi
 }
+
+install_tmpfile_df-obmc-ubi-fs() {
+        # Don't install software.conf if obmc-ubi-fs is set since
+        # the bbappend in the meta-phosphor layer already installs
+        # if obmc-ubi-fs is set.
+
+        :
+}
+
+do_install_append() {
+        install_tmpfile
+}
diff --git a/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/conf/distro/openbmc-witherspoon.conf b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/conf/distro/openbmc-witherspoon.conf
index 27bf881..c00930a 100644
--- a/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/conf/distro/openbmc-witherspoon.conf
+++ b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/conf/distro/openbmc-witherspoon.conf
@@ -1,2 +1,3 @@
 require conf/distro/include/phosphor-base.inc
+require conf/distro/include/phosphor-ubi.inc
 require conf/distro/include/openpower-mrw.inc
diff --git a/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/conf/machine/witherspoon.conf b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/conf/machine/witherspoon.conf
index 5d2f25f..13831a7 100644
--- a/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/conf/machine/witherspoon.conf
+++ b/meta-openbmc-machines/meta-openpower/meta-ibm/meta-witherspoon/conf/machine/witherspoon.conf
@@ -3,7 +3,7 @@
 
 UBOOT_MACHINE = "ast_g5_ncsi_config"
 
-OBMC_MACHINE_FEATURES += "obmc-ubi-fs openpower-ubi-fs"
+OBMC_MACHINE_FEATURES += "openpower-ubi-fs"
 
 OBMC_POWER_SUPPLY_INSTANCES = "0 1"
 
diff --git a/meta-phosphor/classes/image_types_phosphor.bbclass b/meta-phosphor/classes/image_types_phosphor.bbclass
index 35843ea..78ff846 100644
--- a/meta-phosphor/classes/image_types_phosphor.bbclass
+++ b/meta-phosphor/classes/image_types_phosphor.bbclass
@@ -19,9 +19,9 @@
 # The reference BMC software update implementation.
 
 # Image composition
-FLASH_KERNEL_IMAGE ?= "${@bb.utils.contains('MACHINE_FEATURES', \
-        'obmc-ubi-fs', 'fitImage-${MACHINE}.bin', \
-        'fitImage-${INITRAMFS_IMAGE}-${MACHINE}.bin', d)}"
+FLASH_KERNEL_IMAGE ?= "fitImage-${INITRAMFS_IMAGE}-${MACHINE}.bin"
+FLASH_KERNEL_IMAGE_df-obmc-ubi-fs ?= "fitImage-${MACHINE}.bin"
+
 IMAGE_BASETYPE ?= "squashfs-xz"
 OVERLAY_BASETYPE ?= "jffs2"
 FLASH_UBI_BASETYPE ?= "${IMAGE_BASETYPE}"
diff --git a/meta-phosphor/classes/obmc-phosphor-image.bbclass b/meta-phosphor/classes/obmc-phosphor-image.bbclass
index 5391257..95a9152 100644
--- a/meta-phosphor/classes/obmc-phosphor-image.bbclass
+++ b/meta-phosphor/classes/obmc-phosphor-image.bbclass
@@ -76,9 +76,10 @@
         obmc-debug-collector \
         obmc-network-mgmt \
         obmc-settings-mgmt \
-        ${@mf_enabled(d, 'obmc-ubi-fs', 'read-only-rootfs')} \
         "
 
+IMAGE_FEATURES_append_df-obmc-ubi-fs = " read-only-rootfs"
+
 CORE_IMAGE_EXTRA_INSTALL_append = " bash \
         packagegroup-obmc-apps-extras \
         packagegroup-obmc-apps-extrasdev \
diff --git a/meta-phosphor/common/recipes-bsp/u-boot/u-boot-aspeed.inc b/meta-phosphor/common/recipes-bsp/u-boot/u-boot-aspeed.inc
index 983c33f..e1eb738 100644
--- a/meta-phosphor/common/recipes-bsp/u-boot/u-boot-aspeed.inc
+++ b/meta-phosphor/common/recipes-bsp/u-boot/u-boot-aspeed.inc
@@ -2,17 +2,17 @@
 
 SRC_URI_append_aspeed = " file://0001-configs-ast-Add-redundnant-env.patch"
 
-SRC_URI_append_aspeed = " ${@bb.utils.contains('MACHINE_FEATURES', 'obmc-ubi-fs', \
-    'file://0002-config-ast-common-hack-bootopts.patch \
-     file://0003-config-ast-common-Add-bootopts-to-support-ubi-and-mt.patch \
-     file://0004-config-ast-common-Add-conditional-factory-reset-comm.patch', '', d)}"
+SRC_URI_append_aspeed_df-obmc-ubi-fs = " \
+    file://0002-config-ast-common-hack-bootopts.patch \
+    file://0003-config-ast-common-Add-bootopts-to-support-ubi-and-mt.patch \
+    file://0004-config-ast-common-Add-conditional-factory-reset-comm.patch \
+    "
 
 
-python do_configure_aspeed () {
-    if "obmc-ubi-fs" in d.getVar("MACHINE_FEATURES", True):
-        version_id=do_get_versionID(d)
-        d.setVar('VERSION_ID', version_id)
-        bb.build.exec_func("patch_uboot", d)
+python do_configure_aspeed_df-obmc-ubi-fs () {
+    version_id=do_get_versionID(d)
+    d.setVar('VERSION_ID', version_id)
+    bb.build.exec_func("patch_uboot", d)
 }
 
 patch_uboot () {
diff --git a/meta-phosphor/common/recipes-core/base-files/base-files_%.bbappend b/meta-phosphor/common/recipes-core/base-files/base-files_%.bbappend
index e632d56..172c9a5 100644
--- a/meta-phosphor/common/recipes-core/base-files/base-files_%.bbappend
+++ b/meta-phosphor/common/recipes-core/base-files/base-files_%.bbappend
@@ -1,8 +1,8 @@
 inherit obmc-phosphor-utils
 
-FILESEXTRAPATHS_prepend := "${@mf_enabled(d, 'obmc-ubi-fs', '${THISDIR}/${PN}:')}"
+FILESEXTRAPATHS_prepend_df-obmc-ubi-fs := "${THISDIR}/${PN}:"
 
-RDEPENDS_${PN}_append += "${@mf_enabled(d, 'obmc-ubi-fs', 'preinit-mounts')}"
+RDEPENDS_${PN}_append_df-obmc-ubi-fs = " preinit-mounts"
 
 do_install_append() {
     install -d ${D}/srv
diff --git a/meta-phosphor/common/recipes-core/systemd/systemd_%.bbappend b/meta-phosphor/common/recipes-core/systemd/systemd_%.bbappend
index 3b8a8d9..e7eeb5a 100644
--- a/meta-phosphor/common/recipes-core/systemd/systemd_%.bbappend
+++ b/meta-phosphor/common/recipes-core/systemd/systemd_%.bbappend
@@ -22,7 +22,7 @@
 FILES_${PN} += "${datadir}/dbus-1/system.d/org.freedesktop.journal1.conf"
 
 SRC_URI += "file://0007-journal-Add-Synchronize-dbus-method.patch"
-SRC_URI += "${@mf_enabled(d, 'obmc-ubi-fs', 'file://software.conf')}"
+SRC_URI_append_df-obmc-ubi-fs = " file://software.conf"
 SRC_URI += "file://0008-man-update-machine-id-5-with-a-note-about-privacy-46.patch"
 SRC_URI += "file://0009-sd-id128-add-new-sd_id128_get_machine_app_specific-A.patch"
 SRC_URI += "file://0010-core-add-khash-API-to-src-basic-as-wrapper-around-ke.patch"
@@ -40,11 +40,11 @@
         #TODO Remove after this issue is resolved
         #https://github.com/openbmc/openbmc/issues/152
         ln -s /dev/null ${D}/etc/systemd/system/systemd-hwdb-update.service
+}
 
+do_install_append_df-obmc-ubi-fs() {
         # /tmp/images is the software image upload directory.
         # It should not be deleted since it is watched by the Image Manager
         # for new images.
-        if ${@bb.utils.contains('MACHINE_FEATURES', 'obmc-ubi-fs', 'true', 'false', d)}; then
-                install -m 0644 ${WORKDIR}/software.conf ${D}${exec_prefix}/lib/tmpfiles.d/
-        fi
+        install -m 0644 ${WORKDIR}/software.conf ${D}${exec_prefix}/lib/tmpfiles.d/
 }
diff --git a/meta-phosphor/common/recipes-kernel/linux/linux-obmc.inc b/meta-phosphor/common/recipes-kernel/linux/linux-obmc.inc
index 72c2334..9797811 100644
--- a/meta-phosphor/common/recipes-kernel/linux/linux-obmc.inc
+++ b/meta-phosphor/common/recipes-kernel/linux/linux-obmc.inc
@@ -14,7 +14,7 @@
 SRC_URI += "file://phosphor-gpio-keys.cfg"
 SRC_URI += "file://phosphor-vlan.scc"
 SRC_URI += "file://phosphor-vlan.cfg"
-SRC_URI += "${@mf_enabled(d, 'obmc-ubi-fs', 'file://0001-ARM-dts-Aspeed-Witherspoon-Update-BMC-partitioning.patch')}"
+SRC_URI_append_df-obmc-ubi-fs = " file://0001-ARM-dts-Aspeed-Witherspoon-Update-BMC-partitioning.patch"
 
 
 LINUX_VERSION_EXTENSION ?= "-${SRCREV}"
diff --git a/meta-phosphor/common/recipes-phosphor/dump/phosphor-debug-collector.bb b/meta-phosphor/common/recipes-phosphor/dump/phosphor-debug-collector.bb
index 24b233f..fcbe8ae 100644
--- a/meta-phosphor/common/recipes-phosphor/dump/phosphor-debug-collector.bb
+++ b/meta-phosphor/common/recipes-phosphor/dump/phosphor-debug-collector.bb
@@ -161,8 +161,8 @@
                 os.symlink(srclink, destlink)
 }
 
-#Enable ubifs-workaround by MACHINE_FEATURE obmc-ubi-fs.
-PACKAGECONFIG_append = "${@mf_enabled(d, 'obmc-ubi-fs', 'ubifs-workaround')}"
+#Enable ubifs-workaround by DISTRO_FEATURE obmc-ubi-fs.
+PACKAGECONFIG_append_df-obmc-ubi-fs = " ubifs-workaround"
 PACKAGECONFIG[ubifs-workaround] = " \
        --enable-ubifs-workaround, \
        --disable-ubifs-workaround \
diff --git a/meta-phosphor/common/recipes-phosphor/packagegroups/packagegroup-obmc-apps.bb b/meta-phosphor/common/recipes-phosphor/packagegroups/packagegroup-obmc-apps.bb
index fef72dc..ee6e13c 100644
--- a/meta-phosphor/common/recipes-phosphor/packagegroups/packagegroup-obmc-apps.bb
+++ b/meta-phosphor/common/recipes-phosphor/packagegroups/packagegroup-obmc-apps.bb
@@ -89,17 +89,20 @@
         ${VIRTUAL-RUNTIME_obmc-sensors-hwmon} \
         "
 
+# These packages are not required with UBI enabled
+${PN}-software-extras = " \
+        obmc-flash-bmc \
+        obmc-mgr-download \
+        "
+
+${PN}-software-extras_df-obmc-ubi-fs = ""
+
 SUMMARY_${PN}-software = "Software applications"
 RDEPENDS_${PN}-software = " \
         ${VIRTUAL-RUNTIME_obmc-bmc-download-mgr} \
         ${VIRTUAL-RUNTIME_obmc-bmc-updater} \
         ${VIRTUAL-RUNTIME_obmc-bmc-version} \
-        "
-# Determine if the non-UBI flash packages are required
-RDEPENDS_${PN}-software += " \
-        ${@mf_enabled(d, 'obmc-ubi-fs', \
-            '', \
-            'obmc-flash-bmc obmc-mgr-download')} \
+        ${${PN}-software-extras} \
         "
 
 SUMMARY_${PN}-debug-collector = "BMC debug collector"
diff --git a/meta-phosphor/conf/distro/include/phosphor-ubi.inc b/meta-phosphor/conf/distro/include/phosphor-ubi.inc
new file mode 100644
index 0000000..6160446
--- /dev/null
+++ b/meta-phosphor/conf/distro/include/phosphor-ubi.inc
@@ -0,0 +1,2 @@
+DISTRO_FEATURES += "obmc-ubi-fs"
+DISTROOVERRIDES .= ":df-obmc-ubi-fs"
diff --git a/meta-phosphor/conf/machine/include/obmc-bsp-common.inc b/meta-phosphor/conf/machine/include/obmc-bsp-common.inc
index 165eca4..2cbdd89 100644
--- a/meta-phosphor/conf/machine/include/obmc-bsp-common.inc
+++ b/meta-phosphor/conf/machine/include/obmc-bsp-common.inc
@@ -11,7 +11,7 @@
 MACHINEOVERRIDES =. "openbmc:"
 
 IMAGE_FSTYPES += "cpio.${INITRAMFS_CTYPE}.u-boot"
-IMAGE_FSTYPES += "${@bb.utils.contains('MACHINE_FEATURES', \
+IMAGE_FSTYPES += "${@bb.utils.contains('DISTRO_FEATURES', \
         'obmc-ubi-fs', \
         'mtd-ubi mtd-ubi-tar', \
         'mtd-static mtd-static-tar mtd-static-alltar', d)}"
@@ -19,8 +19,8 @@
 
 INITRAMFS_CTYPE ?= "lzma"
 INITRAMFS_FSTYPES += "cpio.${INITRAMFS_CTYPE}"
-INITRAMFS_IMAGE = "${@bb.utils.contains('MACHINE_FEATURES', \
-        'obmc-ubi-fs', '', 'obmc-phosphor-initramfs', d)}"
+INITRAMFS_IMAGE ?= "obmc-phosphor-initramfs"
+INITRAMFS_IMAGE_df-obmc-ubi-fs ?= ""
 
 MACHINE_FEATURES_BACKFILL_CONSIDERED = "qemu-usermode"