openpower-pnor: build a PNOR squashfs as consumed by OpenBMC

Recently, OpenBMC has started supporting a firmware update mechanism
that requires a specially formatted tarball to be passed to it.

Since we want op-build to produce images that are easily consumable,
this patch makes the openpower-pnor build produce one of these images.

There is currently no documentation of this format, although the code
that produces it from a PNOR is open source.

Signed-off-by: Charles P. Hofer <charles.hofer@ibm.com>
[stewart@linux.vnet.ibm.com: flattened commit history, rewrote commit message]
Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
diff --git a/openpower/package/libflash/libflash.mk b/openpower/package/libflash/libflash.mk
index d47edf7..a409b46 100644
--- a/openpower/package/libflash/libflash.mk
+++ b/openpower/package/libflash/libflash.mk
@@ -5,8 +5,8 @@
 ################################################################################
 
 LIBFLASH_VERSION = v5.7-76-g830fc9a0ed0a
-
 LIBFLASH_SITE = $(call github,open-power,skiboot,$(LIBFLASH_VERSION))
+
 LIBFLASH_INSTALL_STAGING = YES
 LIBFLASH_INSTALL_TARGET = YES
 
@@ -29,6 +29,10 @@
 		       -C $(@D)/external/pflash)
 endef
 
+define HOST_LIBFLASH_BUILD_CMDS
+    $(HOST_MAKE_ENV) $(MAKE) -C $(@D)/external/pflash
+endef
+
 define LIBFLASH_INSTALL_STAGING_CMDS
 	PREFIX=$(STAGING_DIR)/usr $(LIBFLASH_MAKE_ENV) -C $(@D)/external/shared \
 	       install
@@ -42,4 +46,9 @@
 		       -C $(@D)/external/pflash install)
 endef
 
+define HOST_LIBFLASH_INSTALL_CMDS
+    $(INSTALL) $(@D)/external/pflash/pflash $(HOST_DIR)/usr/bin/pflash
+endef
+
 $(eval $(generic-package))
+$(eval $(host-generic-package))
diff --git a/openpower/package/openpower-pnor/Config.in b/openpower/package/openpower-pnor/Config.in
index 9360628..644d281 100644
--- a/openpower/package/openpower-pnor/Config.in
+++ b/openpower/package/openpower-pnor/Config.in
@@ -8,6 +8,7 @@
         select BR2_PACKAGE_OCC
         select BR2_PACKAGE_CAPP_UCODE
         select BR2_PACKAGE_IMA_CATALOG
+        select BR2_PACKAGE_HOST_OPENPOWER_VPNOR
 	select BR2_PACKAGE_MACHINE_XML
         help
             Utilites for building a targeting binary image
@@ -144,3 +145,7 @@
 config BR2_OPENPOWER_PNOR_XZ_ENABLED
         bool "Enable xz compression in PNOR payloads"
         default n
+
+config BR2_BUILD_PNOR_SQUASHFS
+        bool "Create a virtual PNOR image along with the standard image"
+        default y
diff --git a/openpower/package/openpower-pnor/openpower-pnor.mk b/openpower/package/openpower-pnor/openpower-pnor.mk
index dd08018..b6c5cdf 100644
--- a/openpower/package/openpower-pnor/openpower-pnor.mk
+++ b/openpower/package/openpower-pnor/openpower-pnor.mk
@@ -48,6 +48,9 @@
     OPENPOWER_RELEASE=p8
 endif
 
+ifeq ($(BR2_BUILD_PNOR_SQUASHFS),y)
+    OPENPOWER_PNOR_DEPENDENCIES += host-openpower-vpnor
+endif
 
 OPENPOWER_PNOR_INSTALL_IMAGES = YES
 OPENPOWER_PNOR_INSTALL_TARGET = NO
@@ -123,6 +126,13 @@
             dd if=$(STAGING_DIR)/pnor/$(BR2_OPENPOWER_PNOR_FILENAME) of=$(STAGING_DIR)/pnor/$(BR2_OPENPOWER_PNOR_UPDATE_FILENAME) bs=32M count=1; \
             $(INSTALL) $(STAGING_DIR)/pnor/$(BR2_OPENPOWER_PNOR_UPDATE_FILENAME) $(BINARIES_DIR); \
         fi
+
+        # If this is a VPNOR system, run the generate-squashfs command and
+        # create a tarball
+        if [ "$(BR2_BUILD_PNOR_SQUASHFS)" == "y" ]; then \
+            PATH=$(PATH):$(HOST_DIR)/usr/bin $(HOST_DIR)/usr/bin/generate-squashfs -f $(STAGING_DIR)/pnor/$(BR2_OPENPOWER_PNOR_FILENAME).squashfs.tar $(STAGING_DIR)/pnor/$(BR2_OPENPOWER_PNOR_FILENAME); \
+            $(INSTALL) $(STAGING_DIR)/pnor/$(BR2_OPENPOWER_PNOR_FILENAME).squashfs.tar $(BINARIES_DIR); \
+        fi
 endef
 
 $(eval $(generic-package))
diff --git a/openpower/package/openpower-vpnor/openpower-vpnor.mk b/openpower/package/openpower-vpnor/openpower-vpnor.mk
new file mode 100644
index 0000000..e7ee67a
--- /dev/null
+++ b/openpower/package/openpower-vpnor/openpower-vpnor.mk
@@ -0,0 +1,15 @@
+################################################################################
+#
+# openpower_vpnor
+#
+################################################################################
+
+HOST_OPENPOWER_VPNOR_VERSION ?= 5c90711a8aaa6b1d760388a5116e36831ce5e7ab
+HOST_OPENPOWER_VPNOR_SITE ?= $(call github,openbmc,openpower-pnor-code-mgmt,$(HOST_OPENPOWER_VPNOR_VERSION))
+HOST_OPENPOWER_VPNOR_DEPENDENCIES = host-squashfs host-libflash
+
+define HOST_OPENPOWER_VPNOR_INSTALL_CMDS
+    $(INSTALL) -D $(@D)/generate-squashfs $(HOST_DIR)/usr/bin/generate-squashfs
+endef
+
+$(eval $(host-generic-package))