rainier_defconfig: Add multi-target support

Through OpenBMC and PLDM file.io, Power10 will support multiple MRW
definitions as part of one driver.

In order to achieve this in a staged approach, this commit introduces a
new 'openpower-pnor-p10' package that still creates the expected
pnor-related artifacts and intermediate files, while also creating the
individual files for each of the PNOR partitions (PAYLOAD, BOOTKERNEL)
inside the images/mmc directory. Each of those files will be suffixed
with ".P10" for target-agnostic files, or "uppercase-xml-name" (i.e.,
RAINIER_2U_XML) for target-specific files.

This patch also creates packages rainier-2u-xml and rainier-4u-xml(based
on machine-xml) that are both built and included in rainier_defconfig,
with rainier_2u_xml also serving as the 'legacy' pnor for smooth
transitions purposes.

Several other packages makefiles had to be reworked, but that should
allow both legacy openpower-pnor as well as the new mmc variant to build.

Signed-off-by: Klaus Heinrich Kiwi <klaus@linux.vnet.ibm.com>
diff --git a/openpower/package/Config.in b/openpower/package/Config.in
index f344875..b449eca 100755
--- a/openpower/package/Config.in
+++ b/openpower/package/Config.in
@@ -6,7 +6,10 @@
 source "$BR2_EXTERNAL_OP_BUILD_PATH/package/openpower-mrw/Config.in"
 source "$BR2_EXTERNAL_OP_BUILD_PATH/package/common-p8-xml/Config.in"
 source "$BR2_EXTERNAL_OP_BUILD_PATH/package/machine-xml/Config.in"
+source "$BR2_EXTERNAL_OP_BUILD_PATH/package/rainier-2u-xml/Config.in"
+source "$BR2_EXTERNAL_OP_BUILD_PATH/package/rainier-4u-xml/Config.in"
 source "$BR2_EXTERNAL_OP_BUILD_PATH/package/openpower-pnor/Config.in"
+source "$BR2_EXTERNAL_OP_BUILD_PATH/package/openpower-pnor-p10/Config.in"
 source "$BR2_EXTERNAL_OP_BUILD_PATH/package/petitboot/Config.in"
 source "$BR2_EXTERNAL_OP_BUILD_PATH/package/p8-pore-binutils/Config.in"
 source "$BR2_EXTERNAL_OP_BUILD_PATH/package/hcode/Config.in"
diff --git a/openpower/package/hcode-p10/hcode-p10.mk b/openpower/package/hcode-p10/hcode-p10.mk
index b7a9101..016202a 100644
--- a/openpower/package/hcode-p10/hcode-p10.mk
+++ b/openpower/package/hcode-p10/hcode-p10.mk
@@ -28,13 +28,19 @@
 ###################################
 # P10 Compilation
 
+ifeq ($(BR2_PACKAGE_OPENPOWER_PNOR_P10),y)
+BINARY_IONV_FILENAME=$(BR2_HOSTBOOT_P10_BINARY_IONV_FILENAME)
+else
+BINARY_IONV_FILENAME=$(BR2_HOSTBOOT_BINARY_IONV_FILENAME)
+endif
+
 HCODE_P10_ENV_VARS= CONFIG_FILE=$(BR2_EXTERNAL_OP_BUILD_PATH)/configs/hcode/$(BR2_HCODE_CONFIG_FILE) \
 	LD_LIBRARY_PATH=$(HOST_DIR)/usr/lib \
 	CROSS_COMPILER_PATH=$(PPE42_GCC_BIN) PPE_TOOL_PATH=$(CROSS_COMPILER_PATH) \
 	PPE_PREFIX=$(CROSS_COMPILER_PATH)/bin/powerpc-eabi- \
         SELF_REST_PREFIX=$(CROSS_COMPILER_PATH)/bin/powerpc-eabi- \
 	RINGFILEPATH=$(STAGING_DIR)/hostboot_binaries __EKB_PREFIX=$(CXXPATH) \
-	CONFIG_IONV_FILE_LOCATION=$(STAGING_DIR)/hostboot_binaries/$(BR2_HOSTBOOT_BINARY_IONV_FILENAME) \
+	CONFIG_IONV_FILE_LOCATION=$(STAGING_DIR)/hostboot_binaries/$(BINARY_IONV_FILENAME) \
 	CONFIG_INCLUDE_IONV=$(BR2_HCODE_INCLUDE_IONV) OPENPOWER_BUILD=1
 
 define HCODE_P10_INSTALL_IMAGES_CMDS
diff --git a/openpower/package/hostboot-binaries/hostboot_binaries.mk b/openpower/package/hostboot-binaries/hostboot_binaries.mk
index 1f813e0..2fa2d7f 100644
--- a/openpower/package/hostboot-binaries/hostboot_binaries.mk
+++ b/openpower/package/hostboot-binaries/hostboot_binaries.mk
@@ -62,6 +62,14 @@
 # P10:
 ifeq ($(BR2_OPENPOWER_POWER10),y)
 
+ifeq ($(BR2_PACKAGE_OPENPOWER_PNOR_P10),y)
+BINARY_IONV_FILENAME=$(BR2_HOSTBOOT_P10_BINARY_IONV_FILENAME)
+BINARY_SBEC_FILENAME=$(BR2_HOSTBOOT_P10_BINARY_SBEC_FILENAME)
+else
+BINARY_IONV_FILENAME=$(BR2_HOSTBOOT_BINARY_IONV_FILENAME)
+BINARY_SBEC_FILENAME=$(BR2_HOSTBOOT_BINARY_SBEC_FILENAME)
+endif
+
 P10_RING_DYNAMIC_FILE=p10.hw.dynamic.bin
 P10_RING_OVERLAYS_FILE=p10.hw.overlays.bin
 P10_RING_QME_FILE=p10.hw.qme.rings.bin
@@ -75,8 +83,8 @@
 
 define HOSTBOOT_BINARIES_INSTALL_IMAGES_CMDS
      $(INSTALL) -D $(@D)/gpu_gpe1.bin  $(STAGING_DIR)/hostboot_binaries/gpu_gpe1.bin
-     $(INSTALL) -D $(@D)/$(BR2_HOSTBOOT_BINARY_IONV_FILENAME)  $(STAGING_DIR)/hostboot_binaries/
-     $(INSTALL) -D $(@D)/$(BR2_HOSTBOOT_BINARY_SBEC_FILENAME) $(STAGING_DIR)/hostboot_binaries/
+     $(INSTALL) -D $(@D)/$(BINARY_IONV_FILENAME)  $(STAGING_DIR)/hostboot_binaries/
+     $(INSTALL) -D $(@D)/$(BINARY_SBEC_FILENAME) $(STAGING_DIR)/hostboot_binaries/
      $(INSTALL) -D $(@D)/$(P10_RING_DYNAMIC_FILE)  $(STAGING_DIR)/hostboot_binaries/
      $(INSTALL) -D $(@D)/$(P10_RING_OVERLAYS_FILE)  $(STAGING_DIR)/hostboot_binaries/
      $(INSTALL) -D $(@D)/$(P10_RING_QME_FILE)  $(STAGING_DIR)/hostboot_binaries/
diff --git a/openpower/package/ima-catalog/ima-catalog.mk b/openpower/package/ima-catalog/ima-catalog.mk
index f357960..c93b09d 100644
--- a/openpower/package/ima-catalog/ima-catalog.mk
+++ b/openpower/package/ima-catalog/ima-catalog.mk
@@ -8,6 +8,12 @@
 IMA_CATALOG_LICENSE = Apache-2.0
 IMA_CATALOG_DEPENDENCIES = host-dtc host-xz
 
+ifeq ($(BR2_PACKAGE_OPENPOWER_PNOR_P10),y)
+IMA_CATALOG_FILENAME=$(BR2_IMA_CATALOG_P10_FILENAME)
+else
+IMA_CATALOG_FILENAME=$(BR2_IMA_CATALOG_FILENAME)
+endif
+
 IMA_CATALOG_INSTALL_IMAGES = YES
 IMA_CATALOG_INSTALL_TARGET = NO
 
@@ -16,7 +22,7 @@
 endef
 
 define IMA_CATALOG_INSTALL_IMAGES_CMDS
-       $(INSTALL) $(@D)/$(BR2_IMA_CATALOG_FILENAME) $(BINARIES_DIR)
+       $(INSTALL) $(@D)/$(IMA_CATALOG_FILENAME) $(BINARIES_DIR)
 endef
 
 $(eval $(generic-package))
diff --git a/openpower/package/ocmb-explorer-fw/ocmb_explorer_fw.mk b/openpower/package/ocmb-explorer-fw/ocmb_explorer_fw.mk
index 178a3e5..c456b0d 100644
--- a/openpower/package/ocmb-explorer-fw/ocmb_explorer_fw.mk
+++ b/openpower/package/ocmb-explorer-fw/ocmb_explorer_fw.mk
@@ -15,9 +15,15 @@
 OCMB_EXPLORER_FW_INSTALL_IMAGES = YES
 OCMB_EXPLORER_FW_INSTALL_TARGET = NO
 
+ifeq ($(BR2_PACKAGE_OPENPOWER_PNOR_P10),y)
+OCMBFW_FILENAME = $(call qstrip,$(BR2_OCMBFW_FILENAME))
+else
+OCMBFW_FILENAME = $(call qstrip,$(BR2_OCMBFW_P10_FILENAME))
+endif
+
 # Commands to extract and install the Open Capi Memory Buffer Firmware (OCMBFW)
 define OCMB_EXPLORER_FW_INSTALL_IMAGES_CMDS
-      $(INSTALL) -D $(@D)/$(call qstrip,$(BR2_OCMBFW_FILENAME)) $(BINARIES_DIR)/
+      $(INSTALL) -D $(@D)/$(OCMBFW_FILENAME) $(BINARIES_DIR)/
 endef
 
 define OCMB_EXPLORER_FW_EXTRACT_CMDS
diff --git a/openpower/package/openpower-pnor-p10/Config.in b/openpower/package/openpower-pnor-p10/Config.in
new file mode 100644
index 0000000..09ad1e9
--- /dev/null
+++ b/openpower/package/openpower-pnor-p10/Config.in
@@ -0,0 +1,120 @@
+config BR2_PACKAGE_OPENPOWER_PNOR_P10
+        bool "openpower_pnor_p10"
+        depends on (!BR2_OPENPOWER_PNOR)
+        select BR2_TARGET_ROOTFS_INITRAMFS
+        select BR2_PACKAGE_HOSTBOOT_P10
+        select BR2_PACKAGE_HOSTBOOT_BINARIES
+        select BR2_PACKAGE_SKIBOOT
+        select BR2_PACKAGE_OPENPOWER_FFS
+        select BR2_PACKAGE_OCC_P10
+        select BR2_PACKAGE_CAPP_UCODE
+        select BR2_PACKAGE_IMA_CATALOG
+        select BR2_PACKAGE_HOST_OPENPOWER_VPNOR
+        select BR2_PACKAGE_RAINIER_2U_XML
+        select BR2_PACKAGE_RAINIER_4U_XML
+        select BR2_PACKAGE_HCODE_P10
+        help
+            Utilites for building a targeting Power10 binary image
+
+menu "OpenPOWER PNOR P10 assembly options"
+
+choice
+    prompt "Secure Boot key transition type"
+    default BR2_OPENPOWER_P10_SECUREBOOT_NO_KEY_TRANSITION
+
+config BR2_OPENPOWER_P10_SECUREBOOT_NO_KEY_TRANSITION
+    bool "None"
+    help
+      Builds a driver that does not transition Secure Boot keys
+
+config BR2_OPENPOWER_P10_SECUREBOOT_KEY_TRANSITION_TO_DEV
+    bool "Transition existing keys to development keys"
+    help
+      Builds a driver that transitions Secure Boot keys to development keys and
+      powers off the system.  Only usable when system security has been
+      disabled.
+
+config BR2_OPENPOWER_P10_SECUREBOOT_KEY_TRANSITION_TO_PROD
+    bool "Transition development keys to production keys"
+    help
+      Builds a driver that transitions Secure Boot development keys to
+      vendor supplied production keys and powers off the system.
+
+endchoice
+
+config BR2_OPENPOWER_P10_SECUREBOOT_SIGN_MODE
+        string "Secureboot signing mode"
+        default "development"
+        help
+            Available options [development | production]
+            Indicates the signing mode when generating the PNOR image.  Only
+            applicable when hostboot is compiled with SECUREBOOT compile flag.
+            Default mode is development.
+
+config BR2_OPENPOWER_P10_PNOR_XML_LAYOUT_FILENAME
+        string "Name of Openpower pnor xml layout file"
+        help
+            String used to define hw specific make config file
+
+config BR2_OPENPOWER_PNOR_P10_LEGACY_PNOR_TARGET
+        string "Legacy name of P10 PNOR Configuration"
+        help
+            String used to define Legacy configuration name, used for
+            building legacy PNOR-related binaries and intermediate files
+
+config BR2_OPENPOWER_P10_XMLS
+        string "List of machine XMLs to include"
+        default "rainier-2u-xml rainier-4u-xml"
+        help
+            List of machine-xmls to include in the OpenPower PNOR
+
+config BR2_SKIBOOT_P10_LID_NAME
+        string "Name of skiboot lid name to be used"
+        default "skiboot.lid"
+        help
+            String used to define skiboot lid filename
+
+config BR2_HOSTBOOT_P10_BINARY_SBE_FILENAME
+        string "Name of sbe hostboot binary"
+        help
+            String used to define name of sbe hostboot binary file
+
+config BR2_HOSTBOOT_P10_BINARY_SBEC_FILENAME
+        string "Name of sbec hostboot binary"
+        help
+            String used to define name of sbec hostboot binary file
+
+config BR2_HOSTBOOT_P10_BINARY_IONV_FILENAME
+        string "Name of IONV binary"
+        default "ionv.bin"
+        help
+            String used to define name of ionv binary file
+
+config BR2_HOSTBOOT_P10_BINARY_WINK_FILENAME
+        string "Name of winkle hostboot binary"
+        help
+            String used to define name of winkle hostboot binary file
+
+config BR2_IMA_CATALOG_P10_FILENAME
+        string "Name of IMA catalog binary"
+        help
+            String used to define name of IMA catalog binary file
+
+config BR2_IMA_CATALOG_P10_ECC_FILENAME
+        string "Name of IMA catalog binary"
+        help
+            String used to define name of IMA catalog binary file, ecc protected
+
+config BR2_OCMBFW_P10_FILENAME
+        string "Name of the OCMBFW Update original file"
+        default "signed_app_fw.mem"
+        help
+            String used to define name of OCBMFW Update original file (before any processing occurs)
+
+config BR2_OCMBFW_P10_PROCESSED_FILENAME
+        string "Name of OCMBFW Update binary processed file"
+        default "ocmbfw.bin.ecc"
+        help
+            String used to define the name of the OCMBFW update binary file after processing, ecc protected
+
+endmenu
diff --git a/openpower/package/openpower-pnor-p10/openpower-pnor-p10.mk b/openpower/package/openpower-pnor-p10/openpower-pnor-p10.mk
new file mode 100644
index 0000000..bae465d
--- /dev/null
+++ b/openpower/package/openpower-pnor-p10/openpower-pnor-p10.mk
@@ -0,0 +1,372 @@
+################################################################################
+#
+# openpower_pnor_p10
+#
+################################################################################
+
+OPENPOWER_PNOR_P10_VERSION ?= aa76df051c5196b311039337e757e0fbe1ae78a9
+
+# TODO: WORKAROUND: Need to reenable next line and comment out the two lines
+# after that, when code is propagated to a public repo
+#OPENPOWER_PNOR_P10_SITE ?= $(call github,open-power,pnor,$(OPENPOWER_PNOR_P10_VERSION))
+OPENPOWER_PNOR_P10_SITE = git@github.ibm.com:open-power/pnor.git
+OPENPOWER_PNOR_P10_SITE_METHOD=git
+
+OPENPOWER_PNOR_P10_LICENSE = Apache-2.0
+OPENPOWER_PNOR_P10_LICENSE_FILES = LICENSE
+OPENPOWER_PNOR_P10_DEPENDENCIES = hostboot-binaries skiboot host-openpower-ffs capp-ucode host-openpower-pnor-util linux-rebuild-with-initramfs host-xz host-sb-signing-utils hostboot-p10 occ-p10 sbe-p10 hcode-p10 ocmb-explorer-fw $(call qstrip,$(BR2_OPENPOWER_P10_XMLS))
+
+ifeq ($(BR2_PACKAGE_IMA_CATALOG),y)
+OPENPOWER_PNOR_P10_DEPENDENCIES += ima-catalog
+endif
+
+ifeq ($(BR2_OPENPOWER_P10_SECUREBOOT_KEY_TRANSITION_TO_DEV),y)
+OPENPOWER_PNOR_P10_KEY_TRANSITION_ARG = -key_transition imprint
+else ifeq ($(BR2_OPENPOWER_P10_SECUREBOOT_KEY_TRANSITION_TO_PROD),y)
+OPENPOWER_PNOR_P10_KEY_TRANSITION_ARG = -key_transition production
+endif
+
+ifneq ($(BR2_OPENPOWER_P10_SECUREBOOT_SIGN_MODE),"")
+OPENPOWER_PNOR_P10_SIGN_MODE_ARG = -sign_mode $(BR2_OPENPOWER_P10_SECUREBOOT_SIGN_MODE)
+endif
+
+OPENPOWER_PNOR_P10_INSTALL_IMAGES = YES
+OPENPOWER_PNOR_P10_INSTALL_TARGET = NO
+
+# Subpackages we want to include in the version info (do not include openpower-pnor-p10)
+# This is used inside pkg-versions.mk
+OPENPOWER_PNOR_P10_VERSIONED_SUBPACKAGES = skiboot linux petitboot hostboot-binaries capp-ucode pdata hostboot-p10 occ-p10 sbe-p10 hcode-p10 ocmb-explorer-fw $(call qstrip,$(BR2_OPENPOWER_P10_XMLS))
+
+OPENPOWER_PNOR_P10_OCMB_URL = $(call qstrip,$(OCMB_EXPLORER_FW_SITE)/$(OCMB_EXPLORER_FW_SOURCE))
+
+#######
+# OPENPOWER_PNOR_P10_UPDATE_IMAGE - process/sign PNOR partitions
+# Arguments:
+#     $1 - The target-specific mrw package name (i.e., rainier-2u-xml)
+#######
+define OPENPOWER_PNOR_P10_UPDATE_IMAGE
+        echo "***Signing images for target:$(call qstrip,$(1))"
+
+        $(eval XML_VAR = $$(call UPPERCASE,$$(call qstrip,$(1))))
+        echo "***XML_VAR: $(XML_VAR)"
+
+        $(eval TARGETING_BINARY_SOURCE = $$(BR2_$(XML_VAR)_TARGETING_BIN_FILENAME))
+        echo "***TARGETING_BINARY_SOURCE: $(TARGETING_BINARY_SOURCE)"
+
+        $(eval TARGETING_BINARY_FILENAME = $$(BR2_$(XML_VAR)_TARGETING_ECC_FILENAME))
+        echo "***TARGETING_BINARY_FILENAME: $(TARGETING_BINARY_FILENAME)"
+
+        $(eval XML_FILENAME = $$(call qstrip,$$(BR2_$(XML_VAR)_FILENAME)))
+        echo "***XML_FILENAME: $(XML_FILENAME)"
+
+        $(eval WOF_BINARY_FILENAME = $$(patsubst %.xml,%.wofdata,$(XML_FILENAME)))
+        echo "***WOF_BINARY_FILENAME: $(WOF_BINARY_FILENAME)"
+
+        $(eval MEMD_BINARY_FILENAME = $$(patsubst %.xml,%.memd_output.dat,$(XML_FILENAME)))
+        echo "***MEMD_BINARY_FILENAME: $(MEMD_BINARY_FILENAME)"
+
+        $(eval DEVTREE_BINARY_FILENAME = $$(patsubst %.xml,%.dtb,$(XML_FILENAME)))
+        echo "***DEVTREE_BINARY_FILENAME: $(DEVTREE_BINARY_FILENAME)"
+
+        $(eval PNOR_SCRATCH_DIR = $(STAGING_DIR)/openpower_pnor_scratch.$(XML_VAR))
+        echo "***PNOR scratch directory: $(PNOR_SCRATCH_DIR)"
+        mkdir -p $(PNOR_SCRATCH_DIR)
+
+
+        $(TARGET_MAKE_ENV) $(@D)/update_image.pl \
+            -release p10 \
+            -op_target_dir $(STAGING_DIR)/hostboot_build_images \
+            -hb_image_dir $(STAGING_DIR)/hostboot_build_images \
+            -scratch_dir $(PNOR_SCRATCH_DIR) \
+            -hb_binary_dir $(STAGING_DIR)/hostboot_binaries \
+            -hcode_dir $(STAGING_DIR)/hcode \
+            -targeting_binary_filename $(TARGETING_BINARY_FILENAME) \
+            -targeting_binary_source $(TARGETING_BINARY_SOURCE) \
+            -targeting_RO_binary_filename $(TARGETING_BINARY_FILENAME).protected \
+            -targeting_RO_binary_source $(TARGETING_BINARY_SOURCE).protected \
+            -targeting_RW_binary_filename $(TARGETING_BINARY_FILENAME).unprotected \
+            -targeting_RW_binary_source $(TARGETING_BINARY_SOURCE).unprotected \
+            -sbe_binary_filename $(BR2_HOSTBOOT_P10_BINARY_SBE_FILENAME) \
+            -sbe_binary_dir $(STAGING_DIR)/sbe_binaries \
+            -sbec_binary_filename $(BR2_HOSTBOOT_P10_BINARY_SBEC_FILENAME) \
+            -wink_binary_filename $(BR2_HOSTBOOT_P10_BINARY_WINK_FILENAME) \
+            -occ_binary_filename $(OCC_STAGING_DIR)/$(BR2_OCC_P10_BIN_FILENAME) \
+            -capp_binary_filename $(BINARIES_DIR)/$(BR2_CAPP_UCODE_BIN_FILENAME) \
+            -ima_catalog_binary_filename $(BINARIES_DIR)/$(BR2_IMA_CATALOG_P10_FILENAME) \
+            -openpower_version_filename $(OPENPOWER_PNOR_P10_VERSION_FILE) \
+            -wof_binary_filename $(STAGING_DIR)/openpower_mrw_scratch/$(WOF_BINARY_FILENAME) \
+            -memd_binary_filename $(STAGING_DIR)/openpower_mrw_scratch/$(MEMD_BINARY_FILENAME) \
+            -payload $(BINARIES_DIR)/$(BR2_SKIBOOT_P10_LID_NAME) \
+            -payload_filename skiboot.lid.xz \
+            -binary_dir $(BINARIES_DIR) \
+            -bootkernel_filename $(LINUX_IMAGE_NAME) \
+            -ocmbfw_version $(OCMB_EXPLORER_FW_VERSION) \
+            -ocmbfw_url $(OPENPOWER_PNOR_P10_OCMB_URL) \
+            -ocmbfw_original_filename $(BINARIES_DIR)/$(BR2_OCMBFW_P10_FILENAME) \
+            -ocmbfw_binary_filename $(PNOR_SCRATCH_DIR)/$(BR2_OCMBFW_P10_PROCESSED_FILENAME) \
+            -pnor_layout $(@D)/p10Layouts/$(BR2_OPENPOWER_P10_PNOR_XML_LAYOUT_FILENAME) \
+            -sbe_img_dir $(BUILD_DIR)/sbe-p10-$(call qstrip,$(BR2_SBE_P10_VERSION))/images \
+            -devtree_binary_filename $(STAGING_DIR)/usr/share/pdata/$(DEVTREE_BINARY_FILENAME) \
+            -xz_compression \
+            $(OPENPOWER_PNOR_P10_KEY_TRANSITION_ARG) \
+            $(OPENPOWER_PNOR_P10_SIGN_MODE_ARG)
+
+        if [ -n "$(BR2_OPENPOWER_PNOR_P10_LEGACY_PNOR_TARGET)" ] ; then \
+            echo "***Generating legacy pnor targets..." ;\
+            mkdir -p $(STAGING_DIR)/pnor.$(XML_VAR) ; \
+            $(TARGET_MAKE_ENV) $(@D)/create_pnor_image.pl \
+                -release p10 \
+                -xml_layout_file $(@D)/p10Layouts/$(BR2_OPENPOWER_P10_PNOR_XML_LAYOUT_FILENAME) \
+                -pnor_filename $(STAGING_DIR)/pnor.$(XML_VAR)/$(XML_VAR).pnor \
+                -hb_image_dir $(STAGING_DIR)/hostboot_build_images \
+                -scratch_dir $(PNOR_SCRATCH_DIR) \
+                -outdir $(STAGING_DIR)/pnor.$(XML_VAR)/ \
+                -payload $(PNOR_SCRATCH_DIR)/$(BR2_SKIBOOT_LID_XZ_NAME) \
+                -bootkernel $(PNOR_SCRATCH_DIR)/$(LINUX_IMAGE_NAME) \
+                -sbe_binary_filename $(BR2_HOSTBOOT_P10_BINARY_SBE_FILENAME) \
+                -sbec_binary_filename $(BR2_HOSTBOOT_P10_BINARY_SBEC_FILENAME) \
+                -wink_binary_filename $(BR2_HOSTBOOT_P10_BINARY_WINK_FILENAME) \
+                -occ_binary_filename $(OCC_STAGING_DIR)/$(BR2_OCC_P10_BIN_FILENAME) \
+                -targeting_binary_filename $(TARGETING_BINARY_FILENAME) \
+                -targeting_RO_binary_filename $(TARGETING_BINARY_FILENAME).protected \
+                -targeting_RW_binary_filename $(TARGETING_BINARY_FILENAME).unprotected \
+                -wofdata_binary_filename $(PNOR_SCRATCH_DIR)/wofdata.bin.ecc \
+                -memddata_binary_filename $(PNOR_SCRATCH_DIR)/memd_extra_data.bin.ecc \
+                -ocmbfw_binary_filename $(PNOR_SCRATCH_DIR)/$(BR2_OCMBFW_P10_PROCESSED_FILENAME) \
+                -openpower_version_filename $(PNOR_SCRATCH_DIR)/openpower_pnor_version.bin  \
+                -devtree_binary_filename $(PNOR_SCRATCH_DIR)/DEVTREE.bin ;\
+            $(INSTALL) $(STAGING_DIR)/pnor.$(XML_VAR)/$(XML_VAR).pnor $(BINARIES_DIR) ;\
+            PATH=$(HOST_DIR)/usr/bin:$(PATH) $(HOST_DIR)/usr/bin/generate-tar -i squashfs \
+                -m $(XML_VAR) \
+                -f $(STAGING_DIR)/pnor.$(XML_VAR)/$(XML_VAR).pnor.squashfs.tar \
+                $(STAGING_DIR)/pnor.$(XML_VAR)/$(XML_VAR).pnor -s ;\
+            $(INSTALL) $(STAGING_DIR)/pnor.$(XML_VAR)/$(XML_VAR).pnor.squashfs.tar $(BINARIES_DIR) ;\
+            cd $(STAGING_DIR)/pnor.$(XML_VAR) ;\
+            PATH=$(HOST_DIR)/usr/sbin:$(PATH) $(HOST_DIR)/usr/bin/generate-ubi \
+                $(XML_VAR).pnor.squashfs.tar ;\
+            $(INSTALL) $(STAGING_DIR)/pnor.$(XML_VAR)/$(XML_VAR).pnor.ubi.mtd $(BINARIES_DIR) ;\
+            $(TARGET_MAKE_ENV) $(@D)/makelidpkg \
+                $(BINARIES_DIR)/$(XML_VAR).ebmc_lids.tar.gz \
+                $(PNOR_SCRATCH_DIR); \
+            if [ -e $(STAGING_DIR)/openpower_pnor_scratch ] ; then \
+                echo "*** Reusing existing $(STAGING_DIR)/openpower_pnor_scratch => $$(readlink -f $(STAGING_DIR)/openpower_pnor_scratch)";\
+            else \
+                ln -rs $(PNOR_SCRATCH_DIR) $(STAGING_DIR)/openpower_pnor_scratch ;\
+                ln -rs $(BINARIES_DIR)/$(XML_VAR).ebmc_lids.tar.gz \
+                    $(BINARIES_DIR)/ebmc_lids.tar.gz ;\
+                ln -rs $(BINARIES_DIR)/$(XML_VAR).pnor \
+                    $(BINARIES_DIR)/$(BR2_OPENPOWER_PNOR_P10_LEGACY_PNOR_TARGET).pnor ;\
+                ln -rs $(BINARIES_DIR)/$(XML_VAR).pnor.squashfs.tar \
+                    $(BINARIES_DIR)/$(BR2_OPENPOWER_PNOR_P10_LEGACY_PNOR_TARGET).pnor.squashfs.tar ;\
+                ln -rs $(BINARIES_DIR)/$(XML_VAR).pnor.ubi.mtd \
+                    $(BINARIES_DIR)/$(BR2_OPENPOWER_PNOR_P10_LEGACY_PNOR_TARGET).pnor.ubi.mtd ;\
+            fi ;\
+        fi
+        # Copy images to mmc dir 
+        # HBBL
+        test -f "$(BINARIES_DIR)/mmc/HBBL.P10" ||\
+             $(INSTALL) -m 0644 -D $(PNOR_SCRATCH_DIR)/hbbl.bin.ecc \
+                $(BINARIES_DIR)/mmc/HBBL.P10
+
+        # HBB
+        test -f "$(BINARIES_DIR)/mmc/HBB.P10" ||\
+            $(INSTALL) -m 0644 -D $(PNOR_SCRATCH_DIR)/hostboot.header.bin.ecc \
+                $(BINARIES_DIR)/mmc/HBB.P10
+
+        # HBI
+        test -f "$(BINARIES_DIR)/mmc/HBI.P10" ||\
+            $(INSTALL) -m 0644 -D $(PNOR_SCRATCH_DIR)/hostboot_extended.header.bin.ecc \
+                $(BINARIES_DIR)/mmc/HBI.P10
+
+        # HBD
+        $(INSTALL) -m 0644 -D $(PNOR_SCRATCH_DIR)/$(TARGETING_BINARY_FILENAME) \
+            $(BINARIES_DIR)/mmc/HBD.$(XML_VAR)
+
+        # SBE
+        test -f "$(BINARIES_DIR)/mmc/SBE.P10" ||\
+            $(INSTALL) -m 0644 -D $(PNOR_SCRATCH_DIR)/$(BR2_HOSTBOOT_P10_BINARY_SBE_FILENAME) \
+                $(BINARIES_DIR)/mmc/SBE.P10
+
+        # PAYLOAD
+        test -f "$(BINARIES_DIR)/mmc/PAYLOAD.P10" ||\
+            $(INSTALL) -m 0644 -D $(PNOR_SCRATCH_DIR)/skiboot.lid.xz \
+                $(BINARIES_DIR)/mmc/PAYLOAD.P10
+
+        # HCODE
+        test -f "$(BINARIES_DIR)/mmc/HCODE.P10" ||\
+            $(INSTALL) -m 0644 -D $(PNOR_SCRATCH_DIR)/$(BR2_HOSTBOOT_P10_BINARY_WINK_FILENAME) \
+                $(BINARIES_DIR)/mmc/HCODE.P10
+
+        # HBRT
+        test -f "$(BINARIES_DIR)/mmc/HBRT.P10" ||\
+            $(INSTALL) -m 0644 -D $(PNOR_SCRATCH_DIR)/hostboot_runtime.header.bin.ecc \
+                $(BINARIES_DIR)/mmc/HBRT.P10
+
+        # OCC
+        test -f "$(BINARIES_DIR)/mmc/OCC.P10" ||\
+            $(INSTALL) -m 0644 -D $(OCC_STAGING_DIR)/$(BR2_OCC_P10_BIN_FILENAME).ecc \
+                $(BINARIES_DIR)/mmc/OCC.P10
+
+        # BOOTKERNEL
+        test -f "$(BINARIES_DIR)/mmc/BOOTKERNEL.P10" ||\
+            $(INSTALL) -m 0644 -D $(PNOR_SCRATCH_DIR)/$(LINUX_IMAGE_NAME) \
+                $(BINARIES_DIR)/mmc/BOOTKERNEL.P10
+
+        # CAPP
+        test -f "$(BINARIES_DIR)/mmc/CAPP.P10" ||\
+            $(INSTALL) -m 0644 -D $(PNOR_SCRATCH_DIR)/cappucode.bin.ecc \
+                $(BINARIES_DIR)/mmc/CAPP.P10
+
+        # VERSION
+        test -f "$(BINARIES_DIR)/mmc/VERSION.P10" ||\
+            $(INSTALL) -m 0644 -D $(PNOR_SCRATCH_DIR)/openpower_pnor_version.bin \
+                $(BINARIES_DIR)/mmc/VERSION.P10
+
+        # IMA_CATALOG
+        test -f "$(BINARIES_DIR)/mmc/IMA_CATALOG.P10" ||\
+            $(INSTALL) -m 0644 -D $(PNOR_SCRATCH_DIR)/ima_catalog.bin.ecc \
+                $(BINARIES_DIR)/mmc/IMA_CATALOG.P10
+
+        # SBKT (special content)
+        test -f "$(BINARIES_DIR)/mmc/SBKT.P10" ||\
+            $(INSTALL) -m 0644 -D $(PNOR_SCRATCH_DIR)/SBKT.bin \
+                $(BINARIES_DIR)/mmc/SBKT.P10
+
+        # HBEL (blank)
+        test -f "$(BINARIES_DIR)/mmc/HBEL.P10" ||\
+            $(INSTALL) -m 0644 -D $(PNOR_SCRATCH_DIR)/hbel.bin.ecc \
+                $(BINARIES_DIR)/mmc/HBEL.P10
+
+        # GUARD (blank)
+        test -f "$(BINARIES_DIR)/mmc/GUARD.P10" ||\
+            $(INSTALL) -m 0644 -D $(PNOR_SCRATCH_DIR)/guard.bin.ecc \
+                $(BINARIES_DIR)/mmc/GUARD.P10
+
+        # HB_VOLATILE (blank)
+        test -f "$(BINARIES_DIR)/mmc/HB_VOLATILE.P10" ||\
+            $(INSTALL) -m 0644 -D $(PNOR_SCRATCH_DIR)/hb_volatile.bin \
+                $(BINARIES_DIR)/mmc/HB_VOLATILE.P10
+
+        # NVRAM (blank)
+        test -f "$(BINARIES_DIR)/mmc/NVRAM.P10" ||\
+            $(INSTALL) -m 0644 -D $(PNOR_SCRATCH_DIR)/nvram.bin \
+                $(BINARIES_DIR)/mmc/NVRAM.P10
+
+        # ATTR_TMP (blank)
+        test -f "$(BINARIES_DIR)/mmc/ATTR_TMP.P10" ||\
+            $(INSTALL) -m 0644 -D $(PNOR_SCRATCH_DIR)/attr_tmp.bin.ecc \
+                $(BINARIES_DIR)/mmc/ATTR_TMP.P10
+
+        # ATTR_PERM (blank)
+        test -f "$(BINARIES_DIR)/mmc/ATTR_PERM.P10" ||\
+            $(INSTALL) -m 0644 -D $(PNOR_SCRATCH_DIR)/attr_perm.bin.ecc \
+                $(BINARIES_DIR)/mmc/ATTR_PERM.P10
+
+        # FIRDATA (blank, optional)
+        if [ -f "$(PNOR_SCRATCH_DIR)/firdata.bin.ecc" ] ; then \
+            test -f "$(BINARIES_DIR)/mmc/FIRDATA.P10" || \
+                $(INSTALL) -m 0644 -D $(PNOR_SCRATCH_DIR)/firdata.bin.ecc \
+                    $(BINARIES_DIR)/mmc/FIRDATA.P10 ; \
+        fi
+
+        # SECBOOT (blank)
+        test -f "$(BINARIES_DIR)/mmc/SECBOOT.P10" ||\
+            $(INSTALL) -m 0644 -D $(PNOR_SCRATCH_DIR)/secboot.bin.ecc \
+                $(BINARIES_DIR)/mmc/SECBOOT.P10
+
+        # RINGOVD (blank)
+        test -f "$(BINARIES_DIR)/mmc/RINGOVD.P10" ||\
+            $(INSTALL) -m 0644 -D $(PNOR_SCRATCH_DIR)/ringOvd.bin \
+                $(BINARIES_DIR)/mmc/RINGOVD.P10
+
+        # CVPD (blank, optional)
+        if [ -f "$(PNOR_SCRATCH_DIR)/cvpd.bin.ecc" ] ; then \
+            test -f "$(BINARIES_DIR)/mmc/CVPD.P10" ||\
+                $(INSTALL) -m 0644 -D $(PNOR_SCRATCH_DIR)/cvpd.bin.ecc \
+                    $(BINARIES_DIR)/mmc/CVPD.P10 ; \
+        fi
+
+        # DJVPD (blank, optional)
+        if [ -f "$(PNOR_SCRATCH_DIR)/djvpd_fill.bin.ecc" ] ; then \
+            test -f "$(BINARIES_DIR)/mmc/DJVPD.P10" ||\
+                $(INSTALL) -m 0644 -D $(PNOR_SCRATCH_DIR)/djvpd_fill.bin.ecc \
+                    $(BINARIES_DIR)/mmc/DJVPD.P10 ; \
+        fi
+
+        # MVPD (blank, optional)
+        if [ -f "$(PNOR_SCRATCH_DIR)/mvpd_fill.bin.ecc" ] ; then \
+            test -f "$(BINARIES_DIR)/mmc/MVPD.P10" ||\
+                $(INSTALL) -m 0644 -D $(PNOR_SCRATCH_DIR)/mvpd_fill.bin.ecc \
+                    $(BINARIES_DIR)/mmc/MVPD.P10 ; \
+        fi
+
+        # EECACHE (blank, optional)
+        if [ -f "$(PNOR_SCRATCH_DIR)/eecache_fill.bin.ecc" ] ; then \
+            test -f "$(BINARIES_DIR)/mmc/EECACHE.P10" ||\
+                $(INSTALL) -m 0644 -D $(PNOR_SCRATCH_DIR)/eecache_fill.bin.ecc \
+                    $(BINARIES_DIR)/mmc/EECACHE.P10 ; \
+        fi
+
+        # WOFDATA
+        $(INSTALL) -m 0644 -D $(PNOR_SCRATCH_DIR)/wofdata.bin.ecc \
+            $(BINARIES_DIR)/mmc/WOFDATA.$(XML_VAR)
+
+        # MEMD (optional)
+        if [ -f "$(PNOR_SCRATCH_DIR)/memd_extra_data.bin.ecc" ] ; then \
+            test -f "$(BINARIES_DIR)/mmc/MEMD.P10" ||\
+                $(INSTALL) -m 0644 -D $(PNOR_SCRATCH_DIR)/memd_extra_data.bin.ecc \
+                    $(BINARIES_DIR)/mmc/MEMD.P10 ; \
+        fi
+
+        # HDAT
+        $(INSTALL) -m 0644 -D $(PNOR_SCRATCH_DIR)/hdat.bin.ecc \
+            $(BINARIES_DIR)/mmc/HDAT.$(XML_VAR)
+
+        # OCMBFW (optional)
+        if [ -f "$(PNOR_SCRATCH_DIR)/$(BR2_OCMBFW_P10_PROCESSED_FILENAME)" ] ; then \
+            test -f "$(BINARIES_DIR)/mmc/OCMBFW.P10" ||\
+                $(INSTALL) -m 0644 -D $(PNOR_SCRATCH_DIR)/$(BR2_OCMBFW_P10_PROCESSED_FILENAME) \
+                    $(BINARIES_DIR)/mmc/OCMBFW.P10 ; \
+        fi
+
+        # DEVTREE
+        $(INSTALL) -m 0644 -D $(PNOR_SCRATCH_DIR)/DEVTREE.bin \
+            $(BINARIES_DIR)/mmc/DEVTREE.$(XML_VAR)
+
+endef
+
+define OPENPOWER_PNOR_P10_INSTALL_IMAGES_CMDS
+
+        if [ -n "$(BR2_OPENPOWER_PNOR_P10_LEGACY_PNOR_TARGET)" ] ; then  \
+            rm -f $(BINARIES_DIR)/*.pnor \
+                $(BINARIES_DIR)/*.pnor.squashfs.tar \
+                $(BINARIES_DIR)/*.ubi.mtd ;\
+            rm -rf $(BINARIES_DIR)/ebmc_lids.tar.gz \
+                $(BINARIES_DIR)/*.ebmc_lids.tar.gz ;\
+            rm -rf $(STAGING_DIR)/openpower_pnor_scratch \
+                $(STAGING_DIR)/openpower_pnor_scratch.* ;\
+        fi
+
+        $(foreach xmlpkg,$(BR2_OPENPOWER_P10_XMLS),\
+            $(call OPENPOWER_PNOR_P10_UPDATE_IMAGE,\
+                $(xmlpkg)))
+
+        # Create Debug Tarball (target-agnostic)
+        mkdir -p $(STAGING_DIR)/pnor/host_fw_debug_tarball_files/
+        cp -r $(STAGING_DIR)/hostboot_build_images/* \
+            $(BUILD_DIR)/skiboot-$(SKIBOOT_VERSION)/skiboot.elf \
+            $(BUILD_DIR)/skiboot-$(SKIBOOT_VERSION)/skiboot.map \
+            $(BUILD_DIR)/linux-$(LINUX_VERSION)/.config \
+            $(BUILD_DIR)/linux-$(LINUX_VERSION)/vmlinux \
+            $(BUILD_DIR)/linux-$(LINUX_VERSION)/System.map \
+            $(STAGING_DIR)/fsp-trace/fsp-trace \
+            $(BINARIES_DIR)/zImage.epapr \
+            $(STAGING_DIR)/pnor/host_fw_debug_tarball_files/
+        tar -zcvf $(BINARIES_DIR)/host_fw_debug.tar -C $(STAGING_DIR)/pnor/host_fw_debug_tarball_files/  .
+
+endef
+
+$(eval $(generic-package))
+# Generate openPOWER pnor version string by combining subpackage version string files
+$(eval $(OPENPOWER_VERSION))
+
diff --git a/openpower/package/openpower-pnor/Config.in b/openpower/package/openpower-pnor/Config.in
index 64231ce..a25bf52 100644
--- a/openpower/package/openpower-pnor/Config.in
+++ b/openpower/package/openpower-pnor/Config.in
@@ -1,6 +1,7 @@
 config BR2_PACKAGE_OPENPOWER_PNOR
         bool "openpower_pnor"
         default y if (BR2_OPENPOWER_PLATFORM)
+        depends on (!BR2_PACKAGE_OPENPOWER_PNOR_P10)
         select BR2_PACKAGE_HOSTBOOT_P10 if (! (BR2_OPENPOWER_POWER8 || BR2_OPENPOWER_POWER9) )
         select BR2_PACKAGE_HOSTBOOT if BR2_OPENPOWER_POWER9
         select BR2_PACKAGE_HOSTBOOT_P8 if BR2_OPENPOWER_POWER8
diff --git a/openpower/package/openpower-pnor/openpower-pnor.mk b/openpower/package/openpower-pnor/openpower-pnor.mk
index fa1ac55..9e61417 100644
--- a/openpower/package/openpower-pnor/openpower-pnor.mk
+++ b/openpower/package/openpower-pnor/openpower-pnor.mk
@@ -231,4 +231,4 @@
 
 $(eval $(generic-package))
 # Generate openPOWER pnor version string by combining subpackage version string files
-$(eval $(call OPENPOWER_VERSION,$(OPENPOWER_PNOR)))
+$(eval $(OPENPOWER_VERSION))
diff --git a/openpower/package/pdata/Config.in b/openpower/package/pdata/Config.in
index df8ba38..622f0aa 100644
--- a/openpower/package/pdata/Config.in
+++ b/openpower/package/pdata/Config.in
@@ -3,8 +3,9 @@
 config BR2_PACKAGE_PDATA
         bool "pdata"
         default y if (BR2_OPENPOWER_POWER10)
+        select BR2_PACKAGE_HOST_DTC
         depends on BR2_PACKAGE_EKB
-        depends on BR2_PACKAGE_MACHINE_XML
+        depends on (BR2_PACKAGE_MACHINE_XML || BR2_PACKAGE_RAINIER_2U_XML || BR2_PACKAGE_RAINIER_4U_XML)
         help
           To initialize and boot a server, various software components
           ( BMC apps and Hostboot) will interact. PDATA provides device tree
@@ -15,6 +16,20 @@
 if BR2_PACKAGE_PDATA
 
 choice
+    prompt "PDATA location"
+
+config BR2_PDATA_GITHUB_PROJECT
+    bool "PDATA located at default Github project"
+
+config BR2_PDATA_CUSTOM_GIT
+    bool "PDATA located at Custom Git repository"
+
+endchoice
+
+config BR2_PDATA_CUSTOM_GIT_VALUE
+    string "URL of PDATA Custom Git repository"
+
+choice
     prompt "PDATA version"
     default BR2_PDATA_LATEST_VERSION
 
diff --git a/openpower/package/pdata/pdata.mk b/openpower/package/pdata/pdata.mk
index 4ebe703..b1500ba 100644
--- a/openpower/package/pdata/pdata.mk
+++ b/openpower/package/pdata/pdata.mk
@@ -5,11 +5,15 @@
 ################################################################################
 
 PDATA_VERSION = $(call qstrip,$(BR2_PDATA_VERSION))
-# TODO: WORKAROUND: Need to reenable next line and comment out the two lines
+ifeq ($(BR2_PDATA_GITHUB_PROJECT),y)
 # after that, when code is propagated to a public repo
 #PDATA_SITE = $(call github,phal,pdata,$(PDATA_VERSION))
 PDATA_SITE = git@github.ibm.com:phal/pdata.git
 PDATA_SITE_METHOD = git
+else ifeq ($(BR2_PDATA_CUSTOM_GIT),y)
+PDATA_SITE = $(BR2_PDATA_CUSTOM_GIT_VALUE)
+PDATA_SITE_METHOD = git
+endif
 
 PDATA_LICENSE = Apache-2.0
 PDATA_LICENSE_FILES = $(@D)/LICENSE
@@ -17,7 +21,7 @@
 PDATA_INSTALL_TARGET = NO
 PDATA_AUTORECONF = YES
 PDATA_AUTORECONF_OPTS += -I $(HOST_DIR)/share/autoconf-archive
-PDATA_DEPENDENCIES = ekb host-dtc machine-xml host-autoconf-archive
+PDATA_DEPENDENCIES = ekb host-dtc host-autoconf-archive
 
 EKB_STAGING_DIR = $(STAGING_DIR)/ekb
 MACHINE_XML_STAGING_DIR = $(STAGING_DIR)/openpower_mrw_scratch
@@ -27,13 +31,18 @@
 TARGET_PROC = p10
 endif
 
-QSTRIP_MACHINE_XML = $(call qstrip,$(BR2_OPENPOWER_MACHINE_XML_FILENAME))
+ifeq ($(BR2_PACKAGE_OPENPOWER_PNOR_P10),y)
+PDATA_DEPENDENCIES += $(call qstrip,$(BR2_OPENPOWER_P10_XMLS))
+QSTRIP_MACHINE_XMLS = $(call qstrip,$(foreach xml,$(BR2_OPENPOWER_P10_XMLS),$(MACHINE_XML_STAGING_DIR)/$(BR2_$(call UPPERCASE,$(call qstrip,$(xml)))_FILENAME)))
+else
+PDATA_DEPENDENCIES += machine-xml
+QSTRIP_MACHINE_XMLS = $(call qstrip,$(MACHINE_XML_STAGING_DIR)/$(BR2_OPENPOWER_MACHINE_XML_FILENAME))
+endif
 
-PDATA_CONF_OPTS = --enable-gen_dynamicdt \
-                  CHIP=$(TARGET_PROC) \
+PDATA_CONF_OPTS = --enable-gen_dynamicdt CHIP=$(TARGET_PROC)
 
-PDATA_MAKE_OPTS =  EKB=$(EKB_STAGING_DIR) \
-                   SYSTEMS_MRW_XML=$(MACHINE_XML_STAGING_DIR)/$(QSTRIP_MACHINE_XML) \
+PDATA_MAKE_OPTS = EKB=$(EKB_STAGING_DIR) \
+                  SYSTEMS_MRW_XML="$(QSTRIP_MACHINE_XMLS)"
 
 define PDATA_CREATE_M4_DIR
 		mkdir -p $(@D)/m4
diff --git a/openpower/package/pkg-versions.mk b/openpower/package/pkg-versions.mk
index be50245..3d967bf 100644
--- a/openpower/package/pkg-versions.mk
+++ b/openpower/package/pkg-versions.mk
@@ -58,7 +58,7 @@
 	rm -rf $$(OPENPOWER_VERSION_DIR)/$(1).tmp_patch.txt; \
 fi
 
-endef ###
+endef # $(2)_OPENPOWER_PATCH_FILE
 
 ### Create subpackage version file
 define $(2)_OPENPOWER_VERSION_FILE
@@ -103,11 +103,15 @@
 # Add new line to version.txt
 echo "" >> $$($(2)_VERSION_FILE);
 
-endef ###
+endef # $(2)_OPENPOWER_VERSION_FILE
 
-# Add appropriate templates to hooks
+# Add appropriate templates to hooks if they're not there already
+ifeq (,$$(findstring $(2)_OPENPOWER_PATCH_FILE,$$($(2)_POST_PATCH_HOOKS)))
 $(2)_POST_PATCH_HOOKS += $(2)_OPENPOWER_PATCH_FILE
+endif
+ifeq (,$$(findstring $(2)_OPENPOWER_VERSION_FILE,$$($(2)_PRE_CONFIGURE_HOOKS)))
 $(2)_PRE_CONFIGURE_HOOKS += $(2)_OPENPOWER_VERSION_FILE
+endif
 
 # Top-level rule to print or generate a subpackage version
 $(1)-version: $$(if $$(wildcard $$($(2)_VERSION_FILE)),$(1)-print-version,$(1)-build-version)
@@ -128,99 +132,114 @@
 		@echo "	End creating version string..."
 		@echo -n "	version: "; cat $$($(2)_VERSION_FILE) | xargs echo
 
-endef
+endef # OPENPOWER_SUBPACKAGE_VERSION
 
-define OPENPOWER_VERSION
 
-UPPER_CASE_PKG = $(call UPPERCASE,$(1))
-$$(UPPER_CASE_PKG)_VERSION_FILE = $$(OPENPOWER_VERSION_DIR)/$(1).version.txt
+####
+# $(1) is the lowercase package version
+# $(2) is the uppercase pacakge version
+####
+define INNER_OPENPOWER_VERSION
+
+$(2)_VERSION_FILE = $$(OPENPOWER_VERSION_DIR)/$(1).version.txt
+ifeq ($$(BR2_PACKAGE_OPENPOWER_PNOR_P10),y)
+UPPER_CASE_SIGN_MODE = $(call UPPERCASE,$$(BR2_OPENPOWER_P10_SECUREBOOT_SIGN_MODE))
+CONFIG_NAME = $$(BR2_OPENPOWER_P10_CONFIG_NAME)
+VERSIONED_SUBPACKAGES = $$(OPENPOWER_PNOR_P10_VERSIONED_SUBPACKAGES)
+else
 UPPER_CASE_SIGN_MODE = $(call UPPERCASE,$$(BR2_OPENPOWER_SECUREBOOT_SIGN_MODE))
+CONFIG_NAME = $$(BR2_OPENPOWER_CONFIG_NAME)
+VERSIONED_SUBPACKAGES = $$(OPENPOWER_VERSIONED_SUBPACKAGES)
+endif
 
-$$(eval $$(foreach pkg,$$(OPENPOWER_VERSIONED_SUBPACKAGES), \
+$$(eval $$(foreach pkg,$$(VERSIONED_SUBPACKAGES), \
 		$$(call OPENPOWER_SUBPACKAGE_VERSION,$$(pkg),$$(call UPPERCASE,$$(pkg)))))
 
 ### Combine subpackage files into one version file
-define $$(UPPER_CASE_PKG)_OPENPOWER_VERSION_FILE
+define $(2)_OPENPOWER_VERSION_FILE
 
 mkdir -p "$$(OPENPOWER_VERSION_DIR)"
 
 # Add vendor or default open-power
 if [ -n "$$(OPBUILD_VENDOR)" ]; then \
-echo -n "$$(OPBUILD_VENDOR)-" > $$($$(UPPER_CASE_PKG)_VERSION_FILE); \
+echo -n "$$(OPBUILD_VENDOR)-" > $$($(2)_VERSION_FILE); \
 else \
-echo -n "open-power-" > $$($$(UPPER_CASE_PKG)_VERSION_FILE); \
+echo -n "open-power-" > $$($(2)_VERSION_FILE); \
 fi
 
 # Add platform or default from defconfig
 if [ -n "$$(OPBUILD_PLATFORM)" ]; then \
-echo -n "$$(OPBUILD_PLATFORM)-" >> $$($$(UPPER_CASE_PKG)_VERSION_FILE); \
+echo -n "$$(OPBUILD_PLATFORM)-" >> $$($(2)_VERSION_FILE); \
 else \
-echo -n "$$(BR2_OPENPOWER_CONFIG_NAME)-" >> $$($$(UPPER_CASE_PKG)_VERSION_FILE); \
+echo -n "$$(CONFIG_NAME)-" >> $$($(2)_VERSION_FILE); \
 fi
 
 # Add op-build version
 # Order: OPBUILD_VERSION, tag, commit, unknown
 if [ -n "$$(OPBUILD_VERSION)" ]; then \
-	echo -n "$$(OPBUILD_VERSION)" >> $$($$(UPPER_CASE_PKG)_VERSION_FILE); \
+	echo -n "$$(OPBUILD_VERSION)" >> $$($(2)_VERSION_FILE); \
 else \
 cd "$$(BR2_EXTERNAL_OP_BUILD_PATH)"; (git describe --always --dirty || echo "unknown") \
 	| xargs echo -n \
-	>> $$($$(UPPER_CASE_PKG)_VERSION_FILE); \
+	>> $$($(2)_VERSION_FILE); \
 fi
 
 # Flag whether op-build is production signed
 if [ "$$(UPPER_CASE_SIGN_MODE)" == 'PRODUCTION' ]; then \
-	echo -n "-prod" >> $$($$(UPPER_CASE_PKG)_VERSION_FILE); \
+	echo -n "-prod" >> $$($(2)_VERSION_FILE); \
 fi
 
-# Add new line to $$($$(UPPER_CASE_PKG)_VERSION_FILE)
-echo "" >> $$($$(UPPER_CASE_PKG)_VERSION_FILE);
+# Add new line to $$($(2)_VERSION_FILE)
+echo "" >> $$($(2)_VERSION_FILE);
 
 # Add a specific line for op-build if it has been overwritten
 if [ -n "$$(OPBUILD_VENDOR)" ]; then \
-echo -n "	op-build-" >> $$($$(UPPER_CASE_PKG)_VERSION_FILE); \
+echo -n "	op-build-" >> $$($(2)_VERSION_FILE); \
 (cd "$$(BR2_EXTERNAL_OP_BUILD_PATH)"; (git describe --always --dirty  || echo "unknown")) \
 	| xargs echo \
-	>> $$($$(UPPER_CASE_PKG)_VERSION_FILE); \
+	>> $$($(2)_VERSION_FILE); \
 fi
 
 # Include the currently checked-out buildroot version
-echo -n "	buildroot-" >> $$($$(UPPER_CASE_PKG)_VERSION_FILE);
+echo -n "	buildroot-" >> $$($(2)_VERSION_FILE);
 (git describe --always --dirty || echo "unknown") \
 	| xargs echo \
-	>> $$($$(UPPER_CASE_PKG)_VERSION_FILE); \
+	>> $$($(2)_VERSION_FILE); \
 
 
-# Combing subpackage version files into $$($$(UPPER_CASE_PKG)_VERSION_FILE)
+# Combing subpackage version files into $$($(2)_VERSION_FILE)
 $$(foreach verFile,$$(ALL_SUBPACKAGE_VERSIONS),
 	if [ -f $$(verFile) ]; then cat $$(verFile) \
-	>> $$($$(UPPER_CASE_PKG)_VERSION_FILE); fi )
+	>>$$($(2)_VERSION_FILE); fi )
 
-endef ###
+endef #  $(2)_OPENPOWER_VERSION_FILE
 
-$$(UPPER_CASE_PKG)_PRE_BUILD_HOOKS += $$(UPPER_CASE_PKG)_OPENPOWER_VERSION_FILE
+$(2)_PRE_BUILD_HOOKS += $(2)_OPENPOWER_VERSION_FILE
 
 # Top-level rule to print or generate openpower-pnor version
-$(1)-version: $$(if $$(wildcard $$($$(UPPER_CASE_PKG)_VERSION_FILE)),$(1)-print-version,$(1)-build-version)
+$(1)-version: $$(if $$(wildcard $$($(2)_VERSION_FILE)),$(1)-print-version,$(1)-build-version)
 
 # Rule to print out pnor version
 $(1)-print-version:
-		@echo "=== $$(UPPER_CASE_PKG)_VERSION ==="
-		@cat $$($$(UPPER_CASE_PKG)_VERSION_FILE)
+		@echo "=== $(2)_VERSION ==="
+		@cat $$($(2)_VERSION_FILE)
 		@echo ""; echo "**See openpower/package/VERSION.readme for detailed info on package strings"; echo ""
 
 # Rule to generate pnor version
-$(1)-build-version: $$(foreach pkg,$$(OPENPOWER_VERSIONED_SUBPACKAGES), $$(pkg)-version)
-		@$$($$(UPPER_CASE_PKG)_OPENPOWER_VERSION_FILE)
-		@echo "=== $$(UPPER_CASE_PKG)_VERSION ==="
-		@cat $$($$(UPPER_CASE_PKG)_VERSION_FILE)
+$(1)-build-version: $$(foreach pkg,$$(VERSIONED_SUBPACKAGES), $$(pkg)-version)
+		@$$($(2)_OPENPOWER_VERSION_FILE)
+		@echo "=== $(2)_VERSION ==="
+		@cat $$($(2)_VERSION_FILE)
 		@echo ""; echo "**See openpower/package/VERSION.readme for detailed info on package strings"; echo ""
 
 # Rule to force re-generation of all versioned subpackages
-$(1)-build-version-all: $$(foreach pkg,$$(OPENPOWER_VERSIONED_SUBPACKAGES), $$(pkg)-build-version)
-		@$$($$(UPPER_CASE_PKG)_OPENPOWER_VERSION_FILE)
-		@echo "=== $$(UPPER_CASE_PKG)_VERSION ==="
-		@cat $$($$(UPPER_CASE_PKG)_VERSION_FILE)
+$(1)-build-version-all: $$(foreach pkg,$$(VERSIONED_SUBPACKAGES), $$(pkg)-build-version)
+		@$$($(2)_OPENPOWER_VERSION_FILE)
+		@echo "=== $(2)_VERSION ==="
+		@cat $$($(2)_VERSION_FILE)
 		@echo ""; echo "**See openpower/package/VERSION.readme for detailed info on package strings"; echo ""
 
-endef
+endef # INNER_OPENPOWER_VERSION
+
+OPENPOWER_VERSION = $(call INNER_OPENPOWER_VERSION,$(pkgname),$(call UPPERCASE,$(pkgname)))
+
diff --git a/openpower/package/rainier-2u-xml/Config.in b/openpower/package/rainier-2u-xml/Config.in
new file mode 100644
index 0000000..6b94a48
--- /dev/null
+++ b/openpower/package/rainier-2u-xml/Config.in
@@ -0,0 +1,86 @@
+menu "Rainier 2U XML (MRW)"
+
+config BR2_PACKAGE_RAINIER_2U_XML
+        bool "rainier_2u_xml"
+
+if BR2_PACKAGE_RAINIER_2U_XML
+
+choice
+	prompt "Rainier 2U XML location"
+
+config BR2_RAINIER_2U_XML_GITHUB_PROJECT
+       bool "OpenPOWER Github project name"
+
+config BR2_RAINIER_2U_XML_CUSTOM_GIT
+       bool "Custom URL of Rainier 2U xml repository"
+
+endchoice
+
+config BR2_RAINIER_2U_XML_FILTER_UNWANTED_ATTRIBUTES
+       bool "Filter Unwanted Attributes"
+       default y
+
+config BR2_RAINIER_2U_XML_OPPOWERVM_ATTRIBUTES
+       bool "OPPOWERVM Attributes/Target"
+       default y
+
+config BR2_RAINIER_2U_XML_TARGET_TYPES_OPENPOWER_XML
+       bool "Include target_types_openpower.xml"
+       default y
+
+config BR2_RAINIER_2U_XML_CUSTOM_GIT_VALUE
+	string "URL of Rainier 2U xml repository"
+	depends on BR2_RAINIER_2U_XML_CUSTOM_GIT
+
+config BR2_RAINIER_2U_XML_GITHUB_PROJECT_VALUE
+       string "The Github project name (e.g. rainier-2u-xml)"
+       default "rainier-2u-xml"
+       depends on BR2_RAINIER_2U_XML_GITHUB_PROJECT
+
+config BR2_RAINIER_2U_XML_VERSION
+       string "Version of Rainier 2U XML"
+
+config BR2_RAINIER_2U_XML_FILENAME
+       string "Rainier 2U XML filename (e.g. Rainier-2U-MRW.xml)"
+       default "Rainier-2U-MRW.xml"
+       help
+           The name of the MRW XML file. Note that this file MUST
+           come with the '.xml' prefix (all lowercase)
+
+config BR2_RAINIER_2U_XML_SYSTEM_FILENAME
+        string "Targeting Rainier 2U system xml filename"
+        default ""
+        help
+            Defines the name of the system XML filename
+            to be used when creating targeting binary image
+
+config BR2_RAINIER_2U_XML_TARGETING_FILENAME
+        string "Targeting Rainier 2U mrw xml filename"
+        default ""
+        help
+            Defines the name of the mrw XML filename
+            to be used when creating targeting binary image
+
+config BR2_RAINIER_2U_XML_BIOS_FILENAME
+        string "BIOS Rainier 2U metadata XML filename"
+        default "Rainier-2U-MRW_bios.xml"
+        help
+            Defines the name of the BIOS XML filename
+            to parse when generating BIOS metadata
+
+config BR2_RAINIER_2U_XML_TARGETING_BIN_FILENAME
+        string "Name of the openpower binary targeting file"
+        default "Rainier-2U-MRW.targeting.bin"
+        help
+            String used to define name of openpower targeting binary file
+
+config BR2_RAINIER_2U_XML_TARGETING_ECC_FILENAME
+        string "Name of the openpower binary targeting ecc file"
+        default "Rainier-2U-MRW.targeting.bin.ecc"
+        help
+            String used to define name of openpower
+            targeting binary file, ecc protected
+
+endif
+
+endmenu
diff --git a/openpower/package/rainier-2u-xml/rainier-2u-xml.mk b/openpower/package/rainier-2u-xml/rainier-2u-xml.mk
new file mode 100644
index 0000000..88bcaa6
--- /dev/null
+++ b/openpower/package/rainier-2u-xml/rainier-2u-xml.mk
@@ -0,0 +1,166 @@
+################################################################################
+# rainier-2u-xml
+#
+################################################################################
+
+RAINIER_2U_XML_VERSION ?= $(call qstrip,$(BR2_RAINIER_2U_XML_VERSION))
+ifeq ($(BR2_RAINIER_2U_XML_GITHUB_PROJECT),y)
+RAINIER_2U_XML_SITE = $(call github,open-power,$(BR2_RAINIER_2U_XML_GITHUB_PROJECT_VALUE),$(RAINIER_2U_XML_VERSION))
+else ifeq ($(BR2_RAINIER_2U_XML_CUSTOM_GIT),y)
+RAINIER_2U_XML_SITE_METHOD = git
+RAINIER_2U_XML_SITE = $(BR2_RAINIER_2U_XML_CUSTOM_GIT_VALUE)
+endif
+
+RAINIER_2U_XML_LICENSE = Apache-2.0
+RAINIER_2U_XML_LICENSE_FILES = LICENSE
+RAINIER_2U_XML_DEPENDENCIES += hostboot-p10
+
+RAINIER_2U_XML_INSTALL_IMAGES = YES
+RAINIER_2U_XML_INSTALL_TARGET = YES
+
+RAINIER_2U_XML_MRW_SCRATCH=$(STAGING_DIR)/openpower_mrw_scratch
+RAINIER_2U_XML_MRW_HB_TOOLS=$(STAGING_DIR)/hostboot_build_images
+
+# Defines for BIOS metadata creation
+RAINIER_2U_XML_BIOS_SCHEMA_FILE = $(RAINIER_2U_XML_MRW_HB_TOOLS)/bios.xsd
+RAINIER_2U_XML_BIOS_CONFIG_FILE = \
+    $(call qstrip,$(RAINIER_2U_XML_MRW_SCRATCH)/$(BR2_RAINIER_2U_XML_BIOS_FILENAME))
+RAINIER_2U_XML_BIOS_METADATA_FILE = \
+    $(call qstrip,$(RAINIER_2U_XML_MRW_HB_TOOLS)/$(BR2_OPENPOWER_P10_CONFIG_NAME)_bios_metadata.xml)
+RAINIER_2U_XML_PETITBOOT_XSLT_FILE = $(RAINIER_2U_XML_MRW_HB_TOOLS)/bios_metadata_petitboot.xslt
+RAINIER_2U_XML_PETITBOOT_BIOS_METADATA_FILE = \
+    $(call qstrip, \
+        $(RAINIER_2U_XML_MRW_HB_TOOLS)/$(BR2_OPENPOWER_P10_CONFIG_NAME)_bios_metadata_petitboot.xml)
+# XXX TODO: Figure out what to do with the bios_metadata.xml. Right now, the last xml
+#           package file processed 'wins' and all previously processed xml packages are
+#           overriden.
+RAINIER_2U_XML_PETITBOOT_BIOS_INITRAMFS_FILE = \
+    $(TARGET_DIR)/usr/share/bios_metadata.xml
+
+ifeq ($(BR2_RAINIER_2U_XML_OPPOWERVM_ATTRIBUTES),y)
+RAINIER_2U_XML_OPPOWERVM_ATTR_XML = $(RAINIER_2U_XML_MRW_HB_TOOLS)/attribute_types_oppowervm.xml
+RAINIER_2U_XML_OPPOWERVM_TARGET_XML = $(RAINIER_2U_XML_MRW_HB_TOOLS)/target_types_oppowervm.xml
+endif
+ifeq ($(BR2_RAINIER_2U_XML_TARGET_TYPES_OPENPOWER_XML),y)
+RAINIER_2U_XML_TARGET_TYPES_OPENPOWER_XML = $(RAINIER_2U_XML_MRW_HB_TOOLS)/target_types_openpower.xml
+endif
+
+define RAINIER_2U_XML_FILTER_UNWANTED_ATTRIBUTES
+       chmod +x $(RAINIER_2U_XML_MRW_HB_TOOLS)/filter_out_unwanted_attributes.pl
+
+       $(RAINIER_2U_XML_MRW_HB_TOOLS)/filter_out_unwanted_attributes.pl \
+            --tgt-xml $(RAINIER_2U_XML_MRW_HB_TOOLS)/target_types_merged.xml \
+            --tgt-xml $(RAINIER_2U_XML_MRW_HB_TOOLS)/target_types_hb.xml \
+            --tgt-xml $(RAINIER_2U_XML_MRW_HB_TOOLS)/target_types_oppowervm.xml \
+            --tgt-xml $(RAINIER_2U_XML_MRW_HB_TOOLS)/target_types_openpower.xml \
+            --mrw-xml $(RAINIER_2U_XML_MRW_SCRATCH)/$(call qstrip, \
+                $(BR2_RAINIER_2U_XML_TARGETING_FILENAME))
+
+       cp  $(call qstrip, $(RAINIER_2U_XML_MRW_SCRATCH)/$(BR2_RAINIER_2U_XML_TARGETING_FILENAME)).updated \
+           $(call qstrip,$(RAINIER_2U_XML_MRW_SCRATCH)/$(BR2_RAINIER_2U_XML_TARGETING_FILENAME))
+endef
+
+define RAINIER_2U_XML_BUILD_CMDS
+        # copy the machine xml where the common lives
+        $(INSTALL) -m 0644 -D $(@D)/$(call qstrip,$(BR2_RAINIER_2U_XML_FILENAME)) \
+            $(RAINIER_2U_XML_MRW_SCRATCH)/$(call qstrip,$(BR2_RAINIER_2U_XML_FILENAME))
+        $(INSTALL) -m 0644 -D $(@D)/$(call qstrip,$(BR2_RAINIER_2U_XML_BIOS_FILENAME)) \
+            $(RAINIER_2U_XML_MRW_SCRATCH)/$(call qstrip,$(BR2_RAINIER_2U_XML_BIOS_FILENAME))
+
+        # generate the system mrw xml
+        perl -I $(RAINIER_2U_XML_MRW_HB_TOOLS) \
+        $(RAINIER_2U_XML_MRW_HB_TOOLS)/processMrw.pl -x \
+            $(call qstrip,$(RAINIER_2U_XML_MRW_SCRATCH)/$(BR2_RAINIER_2U_XML_FILENAME))
+
+	$(if $(BR2_RAINIER_2U_XML_FILTER_UNWANTED_ATTRIBUTES), $(call RAINIER_2U_XML_FILTER_UNWANTED_ATTRIBUTES))
+
+        # merge in any system specific attributes, hostboot attributes
+        $(RAINIER_2U_XML_MRW_HB_TOOLS)/mergexml.sh \
+            $(call qstrip,$(RAINIER_2U_XML_MRW_SCRATCH)/$(BR2_RAINIER_2U_XML_SYSTEM_FILENAME)) \
+            $(RAINIER_2U_XML_MRW_HB_TOOLS)/attribute_types.xml \
+            $(RAINIER_2U_XML_MRW_HB_TOOLS)/attribute_types_hb.xml \
+            $(RAINIER_2U_XML_OPPOWERVM_ATTR_XML) \
+            $(RAINIER_2U_XML_MRW_HB_TOOLS)/attribute_types_openpower.xml \
+            $(RAINIER_2U_XML_MRW_HB_TOOLS)/target_types_merged.xml \
+            $(RAINIER_2U_XML_MRW_HB_TOOLS)/target_types_hb.xml \
+            $(RAINIER_2U_XML_OPPOWERVM_TARGET_XML) \
+            $(RAINIER_2U_XML_TARGET_TYPES_OPENPOWER_XML) \
+            $(call qstrip, \
+                $(RAINIER_2U_XML_MRW_SCRATCH)/$(BR2_RAINIER_2U_XML_TARGETING_FILENAME)) \
+            > $(RAINIER_2U_XML_MRW_HB_TOOLS)/$(call qstrip, \
+                $(BR2_RAINIER_2U_XML_TARGETING_FILENAME))_temporary_hb.hb.xml;
+
+        # creating the targeting binary
+        # XXX TODO: xmltohb.pl creates a 'targeting.bin' in the output directory, we want
+        #           that file to be unique if we don't want to risk collisions on eventual
+        #           parallel builds
+        $(RAINIER_2U_XML_MRW_HB_TOOLS)/xmltohb.pl  \
+            --hb-xml-file=$(RAINIER_2U_XML_MRW_HB_TOOLS)/$(call qstrip, \
+                $(BR2_RAINIER_2U_XML_TARGETING_FILENAME))_temporary_hb.hb.xml \
+            --fapi-attributes-xml-file=$(RAINIER_2U_XML_MRW_HB_TOOLS)/fapiattrs.xml \
+            --src-output-dir=$(RAINIER_2U_XML_MRW_HB_TOOLS)/ \
+            --img-output-dir=$(RAINIER_2U_XML_MRW_HB_TOOLS)/ \
+            --vmm-consts-file=$(RAINIER_2U_XML_MRW_HB_TOOLS)/vmmconst.h --noshort-enums \
+            --bios-xml-file=$(RAINIER_2U_XML_BIOS_CONFIG_FILE) \
+            --bios-schema-file=$(RAINIER_2U_XML_BIOS_SCHEMA_FILE) \
+            --bios-output-file=$(RAINIER_2U_XML_BIOS_METADATA_FILE)
+
+        # Transform BIOS XML into Petitboot specific BIOS XML via the schema
+        xsltproc -o \
+            $(RAINIER_2U_XML_PETITBOOT_BIOS_METADATA_FILE) \
+            $(RAINIER_2U_XML_PETITBOOT_XSLT_FILE) \
+            $(RAINIER_2U_XML_BIOS_METADATA_FILE)
+
+        # Create the wofdata
+        if [ -e $(RAINIER_2U_XML_MRW_HB_TOOLS)/wof-tables-img ]; then \
+            chmod +x $(RAINIER_2U_XML_MRW_HB_TOOLS)/wof-tables-img; \
+        fi
+
+        if [ -d $(RAINIER_2U_XML_MRW_SCRATCH)/$(call qstrip, \
+            $(BR2_RAINIER_2U_XML_FILENAME:.xml=.wofdata)) ]; then \
+            $(RAINIER_2U_XML_MRW_HB_TOOLS)/wof-tables-img \
+                --create $(RAINIER_2U_XML_MRW_SCRATCH)/$(call qstrip, \
+                    $(RAINIER_2U_XML_FILENAME:.xml=.wof_output)) \
+                $(RAINIER_2U_XML_MRW_SCRATCH)/$(call qstrip, \
+                    $(BR2_RAINIER_2U_XML_FILENAME:.xml=wofdata)); \
+        fi
+
+        # Create the MEMD binary
+        if [ -e $(RAINIER_2U_XML_MRW_HB_TOOLS)/memd_creation.pl ]; then \
+            chmod +x $(RAINIER_2U_XML_MRW_HB_TOOLS)/memd_creation.pl; \
+        fi
+
+        if [ -d $(RAINIER_2U_XML_MRW_SCRATCH)/$(call qstrip, \
+            $(BR2_RAINIER_2U_XML_FILENAME:.xml=.memd_binaries)) ]; then \
+            $(RAINIER_2U_XML_MRW_HB_TOOLS)/memd_creation.pl \
+                -memd_dir $(RAINIER_2U_XML_MRW_SCRATCH)/$(call qstrip, \
+                    $(BR2_RAINIER_2U_XML_FILENAME:.xml=.memd_binaries)) \
+                -memd_output $(RAINIER_2U_XML_MRW_SCRATCH)/$(call qstrip, \
+                    $(BR2_RAINIER_2U_XML_FILENAME:.xml=.memd_output.dat)); \
+        fi
+
+endef
+
+define RAINIER_2U_XML_INSTALL_IMAGES_CMDS
+        mv $(RAINIER_2U_XML_MRW_HB_TOOLS)/targeting.bin $(call qstrip, \
+            $(RAINIER_2U_XML_MRW_HB_TOOLS)/$(BR2_RAINIER_2U_XML_TARGETING_BIN_FILENAME))
+        if [ -e $(RAINIER_2U_XML_MRW_HB_TOOLS)/targeting.bin.protected ]; then \
+            mv -v $(RAINIER_2U_XML_MRW_HB_TOOLS)/targeting.bin.protected \
+                $(call qstrip, \
+                    $(RAINIER_2U_XML_MRW_HB_TOOLS)/$(BR2_RAINIER_2U_XML_TARGETING_BIN_FILENAME)).protected; \
+        fi
+        if [ -e $(RAINIER_2U_XML_MRW_HB_TOOLS)/targeting.bin.unprotected ]; then \
+            mv -v $(RAINIER_2U_XML_MRW_HB_TOOLS)/targeting.bin.unprotected \
+                $(call qstrip, \
+                    $(RAINIER_2U_XML_MRW_HB_TOOLS)/$(BR2_RAINIER_2U_XML_TARGETING_BIN_FILENAME)).unprotected; \
+        fi
+endef
+
+define RAINIER_2U_XML_INSTALL_TARGET_CMDS
+        # Install Petitboot specific BIOS XML into initramfs's usr/share/ dir
+        $(INSTALL) -D -m 0644 \
+            $(RAINIER_2U_XML_PETITBOOT_BIOS_METADATA_FILE) \
+            $(RAINIER_2U_XML_PETITBOOT_BIOS_INITRAMFS_FILE)
+endef
+
+$(eval $(generic-package))
diff --git a/openpower/package/rainier-4u-xml/Config.in b/openpower/package/rainier-4u-xml/Config.in
new file mode 100644
index 0000000..0270703
--- /dev/null
+++ b/openpower/package/rainier-4u-xml/Config.in
@@ -0,0 +1,86 @@
+menu "Rainier 4U XML (MRW)"
+
+config BR2_PACKAGE_RAINIER_4U_XML
+        bool "rainier_4u_xml"
+
+if BR2_PACKAGE_RAINIER_4U_XML
+
+choice
+	prompt "Rainier 4U XML location"
+
+config BR2_RAINIER_4U_XML_GITHUB_PROJECT
+       bool "OpenPOWER Github project name"
+
+config BR2_RAINIER_4U_XML_CUSTOM_GIT
+       bool "Custom URL of Rainier 4U xml repository"
+
+endchoice
+
+config BR2_RAINIER_4U_XML_FILTER_UNWANTED_ATTRIBUTES
+       bool "Filter Unwanted Attributes"
+       default y
+
+config BR2_RAINIER_4U_XML_OPPOWERVM_ATTRIBUTES
+       bool "OPPOWERVM Attributes/Target"
+       default y
+
+config BR2_RAINIER_4U_XML_TARGET_TYPES_OPENPOWER_XML
+       bool "Include target_types_openpower.xml"
+       default y
+
+config BR2_RAINIER_4U_XML_CUSTOM_GIT_VALUE
+	string "URL of Rainier 4U xml repository"
+	depends on BR2_RAINIER_4U_XML_CUSTOM_GIT
+
+config BR2_RAINIER_4U_XML_GITHUB_PROJECT_VALUE
+       string "The Github project name (e.g. rainier-4u-xml)"
+       default "rainier-4u-xml"
+       depends on BR2_RAINIER_4U_XML_GITHUB_PROJECT
+
+config BR2_RAINIER_4U_XML_VERSION
+       string "Version of Rainier 4U XML"
+
+config BR2_RAINIER_4U_XML_FILENAME
+       string "Rainier 4U XML filename (e.g. Rainier-4U-MRW.xml)"
+       default "Rainier-4U-MRW.xml"
+       help
+           The name of the MRW XML file. Note that this file MUST
+           come with the '.xml' prefix (all lowercase)
+
+config BR2_RAINIER_4U_XML_SYSTEM_FILENAME
+        string "Targeting Rainier 4U system xml filename"
+        default ""
+        help
+            Defines the name of the system XML filename
+            to be used when creating targeting binary image
+
+config BR2_RAINIER_4U_XML_TARGETING_FILENAME
+        string "Targeting Rainier 4U mrw xml filename"
+        default ""
+        help
+            Defines the name of the mrw XML filename
+            to be used when creating targeting binary image
+
+config BR2_RAINIER_4U_XML_BIOS_FILENAME
+        string "BIOS Rainier 4U metadata XML filename"
+        default "Rainier-4U-MRW_bios.xml"
+        help
+            Defines the name of the BIOS XML filename
+            to parse when generating BIOS metadata
+
+config BR2_RAINIER_4U_XML_TARGETING_BIN_FILENAME
+        string "Name of the openpower binary targeting file"
+        default "Rainier-4U-MRW.targeting.bin"
+        help
+            String used to define name of openpower targeting binary file
+
+config BR2_RAINIER_4U_XML_TARGETING_ECC_FILENAME
+        string "Name of the openpower binary targeting ecc file"
+        default "Rainier-4U-MRW.targeting.bin.ecc"
+        help
+            String used to define name of openpower
+            targeting binary file, ecc protected
+
+endif
+
+endmenu
diff --git a/openpower/package/rainier-4u-xml/rainier-4u-xml.mk b/openpower/package/rainier-4u-xml/rainier-4u-xml.mk
new file mode 100644
index 0000000..9d1f6f7
--- /dev/null
+++ b/openpower/package/rainier-4u-xml/rainier-4u-xml.mk
@@ -0,0 +1,166 @@
+################################################################################
+# rainier-4u-xml
+#
+################################################################################
+
+RAINIER_4U_XML_VERSION ?= $(call qstrip,$(BR2_RAINIER_4U_XML_VERSION))
+ifeq ($(BR2_RAINIER_4U_XML_GITHUB_PROJECT),y)
+RAINIER_4U_XML_SITE = $(call github,open-power,$(BR2_RAINIER_4U_XML_GITHUB_PROJECT_VALUE),$(RAINIER_4U_XML_VERSION))
+else ifeq ($(BR2_RAINIER_4U_XML_CUSTOM_GIT),y)
+RAINIER_4U_XML_SITE_METHOD = git
+RAINIER_4U_XML_SITE = $(BR2_RAINIER_4U_XML_CUSTOM_GIT_VALUE)
+endif
+
+RAINIER_4U_XML_LICENSE = Apache-2.0
+RAINIER_4U_XML_LICENSE_FILES = LICENSE
+RAINIER_4U_XML_DEPENDENCIES += hostboot-p10
+
+RAINIER_4U_XML_INSTALL_IMAGES = YES
+RAINIER_4U_XML_INSTALL_TARGET = YES
+
+RAINIER_4U_XML_MRW_SCRATCH=$(STAGING_DIR)/openpower_mrw_scratch
+RAINIER_4U_XML_MRW_HB_TOOLS=$(STAGING_DIR)/hostboot_build_images
+
+# Defines for BIOS metadata creation
+RAINIER_4U_XML_BIOS_SCHEMA_FILE = $(RAINIER_4U_XML_MRW_HB_TOOLS)/bios.xsd
+RAINIER_4U_XML_BIOS_CONFIG_FILE = \
+    $(call qstrip,$(RAINIER_4U_XML_MRW_SCRATCH)/$(BR2_RAINIER_4U_XML_BIOS_FILENAME))
+RAINIER_4U_XML_BIOS_METADATA_FILE = \
+    $(call qstrip,$(RAINIER_4U_XML_MRW_HB_TOOLS)/$(BR2_OPENPOWER_P10_CONFIG_NAME)_bios_metadata.xml)
+RAINIER_4U_XML_PETITBOOT_XSLT_FILE = $(RAINIER_4U_XML_MRW_HB_TOOLS)/bios_metadata_petitboot.xslt
+RAINIER_4U_XML_PETITBOOT_BIOS_METADATA_FILE = \
+    $(call qstrip, \
+        $(RAINIER_4U_XML_MRW_HB_TOOLS)/$(BR2_OPENPOWER_P10_CONFIG_NAME)_bios_metadata_petitboot.xml)
+# XXX TODO: Figure out what to do with the bios_metadata.xml. Right now, the last xml
+#           package file processed 'wins' and all previously processed xml packages are
+#           overriden.
+RAINIER_4U_XML_PETITBOOT_BIOS_INITRAMFS_FILE = \
+    $(TARGET_DIR)/usr/share/bios_metadata.xml
+
+ifeq ($(BR2_RAINIER_4U_XML_OPPOWERVM_ATTRIBUTES),y)
+RAINIER_4U_XML_OPPOWERVM_ATTR_XML = $(RAINIER_4U_XML_MRW_HB_TOOLS)/attribute_types_oppowervm.xml
+RAINIER_4U_XML_OPPOWERVM_TARGET_XML = $(RAINIER_4U_XML_MRW_HB_TOOLS)/target_types_oppowervm.xml
+endif
+ifeq ($(BR2_RAINIER_4U_XML_TARGET_TYPES_OPENPOWER_XML),y)
+RAINIER_4U_XML_TARGET_TYPES_OPENPOWER_XML = $(RAINIER_4U_XML_MRW_HB_TOOLS)/target_types_openpower.xml
+endif
+
+define RAINIER_4U_XML_FILTER_UNWANTED_ATTRIBUTES
+       chmod +x $(RAINIER_4U_XML_MRW_HB_TOOLS)/filter_out_unwanted_attributes.pl
+
+       $(RAINIER_4U_XML_MRW_HB_TOOLS)/filter_out_unwanted_attributes.pl \
+            --tgt-xml $(RAINIER_4U_XML_MRW_HB_TOOLS)/target_types_merged.xml \
+            --tgt-xml $(RAINIER_4U_XML_MRW_HB_TOOLS)/target_types_hb.xml \
+            --tgt-xml $(RAINIER_4U_XML_MRW_HB_TOOLS)/target_types_oppowervm.xml \
+            --tgt-xml $(RAINIER_4U_XML_MRW_HB_TOOLS)/target_types_openpower.xml \
+            --mrw-xml $(RAINIER_4U_XML_MRW_SCRATCH)/$(call qstrip, \
+                $(BR2_RAINIER_4U_XML_TARGETING_FILENAME))
+
+       cp  $(call qstrip, $(RAINIER_4U_XML_MRW_SCRATCH)/$(BR2_RAINIER_4U_XML_TARGETING_FILENAME)).updated \
+           $(call qstrip,$(RAINIER_4U_XML_MRW_SCRATCH)/$(BR2_RAINIER_4U_XML_TARGETING_FILENAME))
+endef
+
+define RAINIER_4U_XML_BUILD_CMDS
+        # copy the machine xml where the common lives
+        $(INSTALL) -m 0644 -D $(@D)/$(call qstrip,$(BR2_RAINIER_4U_XML_FILENAME)) \
+            $(RAINIER_4U_XML_MRW_SCRATCH)/$(call qstrip,$(BR2_RAINIER_4U_XML_FILENAME))
+        $(INSTALL) -m 0644 -D $(@D)/$(call qstrip,$(BR2_RAINIER_4U_XML_BIOS_FILENAME)) \
+            $(RAINIER_4U_XML_MRW_SCRATCH)/$(call qstrip,$(BR2_RAINIER_4U_XML_BIOS_FILENAME))
+
+        # generate the system mrw xml
+        perl -I $(RAINIER_4U_XML_MRW_HB_TOOLS) \
+        $(RAINIER_4U_XML_MRW_HB_TOOLS)/processMrw.pl -x \
+            $(call qstrip,$(RAINIER_4U_XML_MRW_SCRATCH)/$(BR2_RAINIER_4U_XML_FILENAME))
+
+	$(if $(BR2_RAINIER_4U_XML_FILTER_UNWANTED_ATTRIBUTES), $(call RAINIER_4U_XML_FILTER_UNWANTED_ATTRIBUTES))
+
+        # merge in any system specific attributes, hostboot attributes
+        $(RAINIER_4U_XML_MRW_HB_TOOLS)/mergexml.sh \
+            $(call qstrip,$(RAINIER_4U_XML_MRW_SCRATCH)/$(BR2_RAINIER_4U_XML_SYSTEM_FILENAME)) \
+            $(RAINIER_4U_XML_MRW_HB_TOOLS)/attribute_types.xml \
+            $(RAINIER_4U_XML_MRW_HB_TOOLS)/attribute_types_hb.xml \
+            $(RAINIER_4U_XML_OPPOWERVM_ATTR_XML) \
+            $(RAINIER_4U_XML_MRW_HB_TOOLS)/attribute_types_openpower.xml \
+            $(RAINIER_4U_XML_MRW_HB_TOOLS)/target_types_merged.xml \
+            $(RAINIER_4U_XML_MRW_HB_TOOLS)/target_types_hb.xml \
+            $(RAINIER_4U_XML_OPPOWERVM_TARGET_XML) \
+            $(RAINIER_4U_XML_TARGET_TYPES_OPENPOWER_XML) \
+            $(call qstrip, \
+                $(RAINIER_4U_XML_MRW_SCRATCH)/$(BR2_RAINIER_4U_XML_TARGETING_FILENAME)) \
+            > $(RAINIER_4U_XML_MRW_HB_TOOLS)/$(call qstrip, \
+                $(BR2_RAINIER_4U_XML_TARGETING_FILENAME))_temporary_hb.hb.xml;
+
+        # creating the targeting binary
+        # XXX TODO: xmltohb.pl creates a 'targeting.bin' in the output directory, we want
+        #           that file to be unique if we don't want to risk collisions on eventual
+        #           parallel builds
+        $(RAINIER_4U_XML_MRW_HB_TOOLS)/xmltohb.pl  \
+            --hb-xml-file=$(RAINIER_4U_XML_MRW_HB_TOOLS)/$(call qstrip, \
+                $(BR2_RAINIER_4U_XML_TARGETING_FILENAME))_temporary_hb.hb.xml \
+            --fapi-attributes-xml-file=$(RAINIER_4U_XML_MRW_HB_TOOLS)/fapiattrs.xml \
+            --src-output-dir=$(RAINIER_4U_XML_MRW_HB_TOOLS)/ \
+            --img-output-dir=$(RAINIER_4U_XML_MRW_HB_TOOLS)/ \
+            --vmm-consts-file=$(RAINIER_4U_XML_MRW_HB_TOOLS)/vmmconst.h --noshort-enums \
+            --bios-xml-file=$(RAINIER_4U_XML_BIOS_CONFIG_FILE) \
+            --bios-schema-file=$(RAINIER_4U_XML_BIOS_SCHEMA_FILE) \
+            --bios-output-file=$(RAINIER_4U_XML_BIOS_METADATA_FILE)
+
+        # Transform BIOS XML into Petitboot specific BIOS XML via the schema
+        xsltproc -o \
+            $(RAINIER_4U_XML_PETITBOOT_BIOS_METADATA_FILE) \
+            $(RAINIER_4U_XML_PETITBOOT_XSLT_FILE) \
+            $(RAINIER_4U_XML_BIOS_METADATA_FILE)
+
+        # Create the wofdata
+        if [ -e $(RAINIER_4U_XML_MRW_HB_TOOLS)/wof-tables-img ]; then \
+            chmod +x $(RAINIER_4U_XML_MRW_HB_TOOLS)/wof-tables-img; \
+        fi
+
+        if [ -d $(RAINIER_4U_XML_MRW_SCRATCH)/$(call qstrip, \
+            $(BR2_RAINIER_4U_XML_FILENAME:.xml=.wofdata)) ]; then \
+            $(RAINIER_4U_XML_MRW_HB_TOOLS)/wof-tables-img \
+                --create $(RAINIER_4U_XML_MRW_SCRATCH)/$(call qstrip, \
+                    $(RAINIER_4U_XML_FILENAME:.xml=.wof_output)) \
+                $(RAINIER_4U_XML_MRW_SCRATCH)/$(call qstrip, \
+                    $(BR2_RAINIER_4U_XML_FILENAME:.xml=wofdata)); \
+        fi
+
+        # Create the MEMD binary
+        if [ -e $(RAINIER_4U_XML_MRW_HB_TOOLS)/memd_creation.pl ]; then \
+            chmod +x $(RAINIER_4U_XML_MRW_HB_TOOLS)/memd_creation.pl; \
+        fi
+
+        if [ -d $(RAINIER_4U_XML_MRW_SCRATCH)/$(call qstrip, \
+            $(BR2_RAINIER_4U_XML_FILENAME:.xml=.memd_binaries)) ]; then \
+            $(RAINIER_4U_XML_MRW_HB_TOOLS)/memd_creation.pl \
+                -memd_dir $(RAINIER_4U_XML_MRW_SCRATCH)/$(call qstrip, \
+                    $(BR2_RAINIER_4U_XML_FILENAME:.xml=.memd_binaries)) \
+                -memd_output $(RAINIER_4U_XML_MRW_SCRATCH)/$(call qstrip, \
+                    $(BR2_RAINIER_4U_XML_FILENAME:.xml=.memd_output.dat)); \
+        fi
+
+endef
+
+define RAINIER_4U_XML_INSTALL_IMAGES_CMDS
+        mv $(RAINIER_4U_XML_MRW_HB_TOOLS)/targeting.bin $(call qstrip, \
+            $(RAINIER_4U_XML_MRW_HB_TOOLS)/$(BR2_RAINIER_4U_XML_TARGETING_BIN_FILENAME))
+        if [ -e $(RAINIER_4U_XML_MRW_HB_TOOLS)/targeting.bin.protected ]; then \
+            mv -v $(RAINIER_4U_XML_MRW_HB_TOOLS)/targeting.bin.protected \
+                $(call qstrip, \
+                    $(RAINIER_4U_XML_MRW_HB_TOOLS)/$(BR2_RAINIER_4U_XML_TARGETING_BIN_FILENAME)).protected; \
+        fi
+        if [ -e $(RAINIER_4U_XML_MRW_HB_TOOLS)/targeting.bin.unprotected ]; then \
+            mv -v $(RAINIER_4U_XML_MRW_HB_TOOLS)/targeting.bin.unprotected \
+                $(call qstrip, \
+                    $(RAINIER_4U_XML_MRW_HB_TOOLS)/$(BR2_RAINIER_4U_XML_TARGETING_BIN_FILENAME)).unprotected; \
+        fi
+endef
+
+define RAINIER_4U_XML_INSTALL_TARGET_CMDS
+        # Install Petitboot specific BIOS XML into initramfs's usr/share/ dir
+        $(INSTALL) -D -m 0644 \
+            $(RAINIER_4U_XML_PETITBOOT_BIOS_METADATA_FILE) \
+            $(RAINIER_4U_XML_PETITBOOT_BIOS_INITRAMFS_FILE)
+endef
+
+$(eval $(generic-package))
diff --git a/openpower/package/sb-signing-framework/Config.in b/openpower/package/sb-signing-framework/Config.in
index 7ac3848..406a322 100644
--- a/openpower/package/sb-signing-framework/Config.in
+++ b/openpower/package/sb-signing-framework/Config.in
@@ -1,5 +1,5 @@
 config BR2_PACKAGE_HOST_SB_SIGNING_FRAMEWORK
         bool "OpenPOWER secureboot signing server interface"
-        default y if BR2_OPENPOWER_PLATFORM && ((BR2_OPENPOWER_SECUREBOOT_SIGN_MODE = "production") || (BR2_OPENPOWER_SECUREBOOT_KEY_TRANSITION_TO_PROD) )
+        default y if BR2_OPENPOWER_PLATFORM && ((BR2_OPENPOWER_SECUREBOOT_SIGN_MODE = "production") || (BR2_OPENPOWER_SECUREBOOT_KEY_TRANSITION_TO_PROD) || (BR2_OPENPOWER_P10_SECUREBOOT_SIGN_MODE = "production") || (BR2_OPENPOWER_P10_SECUREBOOT_KEY_TRANSITION_TO_PROD) )
         help
             Client interface to signing server for signing OpenPOWER firmware images
diff --git a/openpower/package/sb-signing-utils/sb-signing-utils.mk b/openpower/package/sb-signing-utils/sb-signing-utils.mk
index cba03e3..70b1ae4 100644
--- a/openpower/package/sb-signing-utils/sb-signing-utils.mk
+++ b/openpower/package/sb-signing-utils/sb-signing-utils.mk
@@ -16,6 +16,10 @@
 HOST_SB_SIGNING_UTILS_DEPENDENCIES += host-sb-signing-framework
 else ifeq ($(BR2_OPENPOWER_SECUREBOOT_KEY_TRANSITION_TO_PROD),y)
 HOST_SB_SIGNING_UTILS_DEPENDENCIES += host-sb-signing-framework
+else ifeq ($(BR2_OPENPOWER_P10_SECUREBOOT_SIGN_MODE),production)
+HOST_SB_SIGNING_UTILS_DEPENDENCIES += host-sb-signing-framework
+else ifeq ($(BR2_OPENPOWER_P10_SECUREBOOT_KEY_TRANSITION_TO_PROD),y)
+HOST_SB_SIGNING_UTILS_DEPENDENCIES += host-sb-signing-framework
 endif
 
 HOST_SB_SIGNING_UTILS_AUTORECONF = YES
diff --git a/openpower/package/sbe-p10/sbe-p10.mk b/openpower/package/sbe-p10/sbe-p10.mk
index 9ebe164..de85d15 100644
--- a/openpower/package/sbe-p10/sbe-p10.mk
+++ b/openpower/package/sbe-p10/sbe-p10.mk
@@ -19,6 +19,12 @@
 SBE_P10_INSTALL_IMAGES = YES
 SBE_P10_INSTALL_TARGET = NO
 
+ifeq ($(BR2_PACKAGE_OPENPOWER_PNOR_P10),y)
+BINARY_SBE_FILENAME=$(BR2_HOSTBOOT_P10_BINARY_SBE_FILENAME)
+else
+BINARY_SBE_FILENAME=$(BR2_HOSTBOOT_BINARY_SBE_FILENAME)
+endif
+
 define SBE_P10_BUILD_CMDS
 	SBE_COMMIT_ID=$(SBE_P10_VERSION) $(MAKE) -C $(@D) \
 		LD_LIBRARY_PATH=$(HOST_DIR)/usr/lib \
@@ -28,7 +34,7 @@
 
 define SBE_P10_INSTALL_IMAGES_CMDS
 	$(INSTALL) -D $(@D)/images/ipl_image_tool $(HOST_DIR)/usr/bin/
-	python $(@D)/src/build/sbeOpDistribute.py  --sbe_binary_dir=$(STAGING_DIR)/sbe_binaries --img_dir=$(@D)/images --sbe_binary_filename $(BR2_HOSTBOOT_BINARY_SBE_FILENAME)
+	python $(@D)/src/build/sbeOpDistribute.py  --sbe_binary_dir=$(STAGING_DIR)/sbe_binaries --img_dir=$(@D)/images --sbe_binary_filename $(BINARY_SBE_FILENAME)
 	cp $(@D)/src/build/sbeOpDistribute.py $(STAGING_DIR)/sbe_binaries/
 	cp $(@D)/src/build/sbeOpToolsRegister.py $(STAGING_DIR)/sbe_binaries/
 endef