diff --git a/README b/README
index 9f61021..2e84fbb 100644
--- a/README
+++ b/README
@@ -10,8 +10,9 @@
 
 1. Install Ubuntu 14.04 or Debian 7.5 64-bit.
 2. Install the packages necessary for the build:
-> sudo apt-get install cscope ctags libz-dev libexpat-dev libc6-dev-i386 \
-  build-essential g++ git bison flex gcc-multilib g++-multilib unzip \
+> sudo apt-get install cscope ctags libz-dev libexpat-dev \
+  python language-pack-en \
+  build-essential g++ git bison flex unzip \
   libxml-simple-perl libxml-sax-perl libxml2-dev libxml2-utils xsltproc
 3. Continue with the clone, environment setup, and build as noted above.
 
diff --git a/buildroot b/buildroot
index 9ac423f..80a2f83 160000
--- a/buildroot
+++ b/buildroot
@@ -1 +1 @@
-Subproject commit 9ac423f6f0d99b33e7bb7ad703cf83e80716da8a
+Subproject commit 80a2f83e60f3fd21a38e2bc9aac149f2c3a9ffdd
diff --git a/openpower/configs/firestone_defconfig b/openpower/configs/firestone_defconfig
index d72cb81..cd32a2c 100644
--- a/openpower/configs/firestone_defconfig
+++ b/openpower/configs/firestone_defconfig
@@ -8,6 +8,7 @@
 
 BR2_HOSTBOOT_BINARY_SBE_FILENAME="venice_sbe.img.ecc"
 BR2_HOSTBOOT_BINARY_SBEC_FILENAME="centaur_sbec_pad.img.ecc"
+BR2_HOSTBOOT_BINARY_WINK_FILENAME="p8.ref_image.hdr.bin.ecc"
 
 BR2_OCC_BIN_FILENAME="occ.bin"
 
@@ -37,7 +38,7 @@
 BR2_LINUX_KERNEL=y
 BR2_LINUX_KERNEL_CUSTOM_GIT=y
 BR2_LINUX_KERNEL_CUSTOM_REPO_URL="git://github.com/open-power/linux.git"
-BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="1444a4e78a9ce324b0b6ac243ccfbfc8fce25d7e"
+BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="d0ff068a9962ba96d4e6ddfba2a4e9fd8bc9a763"
 BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
 BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL)/configs/linux/skiroot_defconfig"
 BR2_LINUX_KERNEL_ZIMAGE_EPAPR=y
diff --git a/openpower/configs/garrison_defconfig b/openpower/configs/garrison_defconfig
new file mode 100644
index 0000000..c5bde78
--- /dev/null
+++ b/openpower/configs/garrison_defconfig
@@ -0,0 +1,59 @@
+BR2_powerpc64=y
+BR2_powerpc_power8=y
+BR2_OPENPOWER_PLATFORM=y
+
+BR2_OPENPOWER_CONFIG_NAME="garrison"
+BR2_OPENPOWER_XML_PACKAGE="garrison-xml"
+BR2_HOSTBOOT_CONFIG_FILE="garrison.config"
+
+BR2_HOSTBOOT_BINARY_SBE_FILENAME="venice_sbe.img.ecc"
+BR2_HOSTBOOT_BINARY_SBEC_FILENAME="centaur_sbec_pad.img.ecc"
+BR2_HOSTBOOT_BINARY_WINK_FILENAME="n1.ref_image.hdr.bin.ecc"
+
+BR2_OCC_BIN_FILENAME="occ.bin"
+
+BR2_GARRISON_SYSTEM_XML_FILENAME="GARRISON_hb.system.xml"
+BR2_GARRISON_MRW_XML_FILENAME="GARRISON_hb.mrw.xml"
+BR2_GARRISON_BIOS_XML_FILENAME="GARRISON_bios.xml"
+
+BR2_OPENPOWER_TARGETING_BIN_FILENAME="GARRISON_HB.targeting.bin"
+BR2_OPENPOWER_TARGETING_ECC_FILENAME="GARRISON_HB.targeting.bin.ecc"
+BR2_CAPP_UCODE_BIN_FILENAME="cappucode.bin"
+
+BR2_OPENPOWER_PNOR_XML_LAYOUT_FILENAME="defaultPnorLayoutWithGoldenSide.xml"
+BR2_OPENPOWER_PNOR_FILENAME="garrison.pnor"
+BR2_OPENPOWER_PNOR_UPDATE_FILENAME="garrison_update.pnor"
+
+# skiboot requirements
+BR2_TARGET_SKIBOOT=y
+BR2_TARGET_SKIBOOT_EMBED_PAYLOAD=n
+
+# petitboot requirements
+BR2_ENABLE_LOCALE_PURGE=y
+BR2_ENABLE_LOCALE_WHITELIST="C en_US"
+BR2_GENERATE_LOCALE="en_US.UTF-8"
+BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y
+BR2_TARGET_GENERIC_GETTY_PORT="hvc0"
+BR2_ROOTFS_OVERLAY="overlay"
+BR2_LINUX_KERNEL=y
+BR2_LINUX_KERNEL_CUSTOM_GIT=y
+BR2_LINUX_KERNEL_CUSTOM_REPO_URL="git://github.com/open-power/linux.git"
+BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="d0ff068a9962ba96d4e6ddfba2a4e9fd8bc9a763"
+BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
+BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL)/configs/linux/skiroot_defconfig"
+BR2_LINUX_KERNEL_ZIMAGE_EPAPR=y
+BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y
+BR2_PACKAGE_LINUX_FIRMWARE=y
+BR2_PACKAGE_LINUX_FIRMWARE_BNX2X=y
+BR2_PACKAGE_LINUX_FIRMWARE_CXGB4=y
+BR2_PACKAGE_I2C_TOOLS=y
+BR2_PACKAGE_NCURSES_WCHAR=y
+BR2_PACKAGE_DROPBEAR=y
+# BR2_PACKAGE_DROPBEAR_SERVER is not set
+BR2_PACKAGE_ETHTOOL=y
+BR2_PACKAGE_NETCAT=y
+BR2_PACKAGE_RSYNC=y
+BR2_PACKAGE_PETITBOOT=y
+BR2_PACKAGE_IPMITOOL=y
+BR2_TARGET_ROOTFS_CPIO_XZ=y
+BR2_TARGET_ROOTFS_INITRAMFS=y
diff --git a/openpower/configs/habanero_defconfig b/openpower/configs/habanero_defconfig
index 64b827a..edcad58 100644
--- a/openpower/configs/habanero_defconfig
+++ b/openpower/configs/habanero_defconfig
@@ -8,6 +8,7 @@
 
 BR2_HOSTBOOT_BINARY_SBE_FILENAME="venice_sbe.img.ecc"
 BR2_HOSTBOOT_BINARY_SBEC_FILENAME="centaur_sbec_pad.img.ecc"
+BR2_HOSTBOOT_BINARY_WINK_FILENAME="p8.ref_image.hdr.bin.ecc"
 
 BR2_OCC_BIN_FILENAME="occ.bin"
 
@@ -37,7 +38,7 @@
 BR2_LINUX_KERNEL=y
 BR2_LINUX_KERNEL_CUSTOM_GIT=y
 BR2_LINUX_KERNEL_CUSTOM_REPO_URL="git://github.com/open-power/linux.git"
-BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="1444a4e78a9ce324b0b6ac243ccfbfc8fce25d7e"
+BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="d0ff068a9962ba96d4e6ddfba2a4e9fd8bc9a763"
 BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
 BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL)/configs/linux/skiroot_defconfig"
 BR2_LINUX_KERNEL_ZIMAGE_EPAPR=y
diff --git a/openpower/configs/hostboot/firestone.config b/openpower/configs/hostboot/firestone.config
index 4b96cd9..b7bc93c 100755
--- a/openpower/configs/hostboot/firestone.config
+++ b/openpower/configs/hostboot/firestone.config
@@ -18,6 +18,10 @@
 set CVPD_WRITE_TO_HW
 set CVPD_READ_FROM_PNOR
 set CVPD_WRITE_TO_PNOR
+set PVPD_READ_FROM_HW
+set PVPD_WRITE_TO_HW
+set PVPD_READ_FROM_PNOR
+set PVPD_WRITE_TO_PNOR
 set SKIP_RESTRICT_EX_UNITS
 unset CDIMM_FORMAT_FOR_CVPD
 
@@ -32,16 +36,29 @@
 
 # turn on console output
 set CONSOLE
-set CONSOLE_AST2400
+set BMC_AST2400
 
 # Enable Kingston dimm voltage workaround
 set KINGSTON_1_35_VOLT
 
 set NO_DMI_EREPAIR
-set DISABLE_HOSTBOOT_RUNTIME
-unset HTMGT
-unset START_OCC_DURING_BOOT
+unset DISABLE_HOSTBOOT_RUNTIME
+
+# Compile in hostboot runtime PRD
+set HBRT_PRD
+set HTMGT
+set START_OCC_DURING_BOOT
+
+#PNOR flags
+set PNOR_TWO_SIDE_SUPPORT
+
+set BMC_BT_LPC_IPMI
 
 # Enable Checktop Analysis
 set ENABLE_CHECKSTOP_ANALYSIS
 
+# Hostboot will detect hardware changes
+set HOST_HCDB_SUPPORT
+
+# set for trace debug to console
+unset CONSOLE_OUTPUT_TRACE
diff --git a/openpower/configs/hostboot/garrison.config b/openpower/configs/hostboot/garrison.config
new file mode 100755
index 0000000..c78bc7a
--- /dev/null
+++ b/openpower/configs/hostboot/garrison.config
@@ -0,0 +1,61 @@
+# The Serial Flash Controller is the AST2400 BMC.
+set   SFC_IS_AST2400
+set   BMC_DOES_SFC_INIT
+unset SFC_IS_IBM_DPSS
+set   ALLOW_MICRON_PNOR
+set   ALLOW_MACRONIX_PNOR
+
+# VPD options.
+set MVPD_READ_FROM_HW
+set MVPD_WRITE_TO_HW
+set MVPD_READ_FROM_PNOR
+set MVPD_WRITE_FROM_PNOR
+set DJVPD_READ_FROM_HW
+set DJVPD_WRITE_TO_HW
+set DJVPD_READ_FROM_PNOR
+set DJVPD_WRITE_TO_PNOR
+set CVPD_READ_FROM_HW
+set CVPD_WRITE_TO_HW
+set CVPD_READ_FROM_PNOR
+set CVPD_WRITE_TO_PNOR
+set PVPD_READ_FROM_HW
+set PVPD_WRITE_TO_HW
+set PVPD_READ_FROM_PNOR
+set PVPD_WRITE_TO_PNOR
+set SKIP_RESTRICT_EX_UNITS
+unset CDIMM_FORMAT_FOR_CVPD
+
+# gpio config
+set GPIODD
+set PALMETTO_VDDR
+
+# disable sbe updates
+set NO_SBE_UPDATES
+
+unset PCIE_HOTPLUG_CONTROLLER
+
+# turn on console output
+set CONSOLE
+set BMC_AST2400
+
+# Enable Kingston dimm voltage workaround
+set KINGSTON_1_35_VOLT
+
+set NO_DMI_EREPAIR
+set DISABLE_HOSTBOOT_RUNTIME
+unset HTMGT
+unset START_OCC_DURING_BOOT
+
+#PNOR flags
+set PNOR_TWO_SIDE_SUPPORT
+
+set BMC_BT_LPC_IPMI
+
+# Enable Checktop Analysis
+set ENABLE_CHECKSTOP_ANALYSIS
+
+# Hostboot will detect hardware changes
+set HOST_HCDB_SUPPORT
+
+# set for trace debug to console
+unset CONSOLE_OUTPUT_TRACE
diff --git a/openpower/configs/hostboot/habanero.config b/openpower/configs/hostboot/habanero.config
index 90e5735..b5d28b4a9 100755
--- a/openpower/configs/hostboot/habanero.config
+++ b/openpower/configs/hostboot/habanero.config
@@ -18,6 +18,10 @@
 set CVPD_WRITE_TO_HW
 set CVPD_READ_FROM_PNOR
 set CVPD_WRITE_TO_PNOR
+set PVPD_READ_FROM_HW
+set PVPD_WRITE_TO_HW
+set PVPD_READ_FROM_PNOR
+set PVPD_WRITE_TO_PNOR
 set SKIP_RESTRICT_EX_UNITS
 unset CDIMM_FORMAT_FOR_CVPD
 
@@ -34,7 +38,7 @@
 
 # turn on console output
 set CONSOLE
-set CONSOLE_AST2400
+set BMC_AST2400
 
 # Enable Kingston dimm voltage workaround
 set KINGSTON_1_35_VOLT
@@ -58,5 +62,8 @@
 # Enable Checktop Analysis
 set ENABLE_CHECKSTOP_ANALYSIS
 
+# Hostboot will detect hardware changes
+set HOST_HCDB_SUPPORT
+
 # set for trace debug to console
 unset CONSOLE_OUTPUT_TRACE
diff --git a/openpower/configs/hostboot/palmetto.config b/openpower/configs/hostboot/palmetto.config
index 12ebc2c..4288585 100755
--- a/openpower/configs/hostboot/palmetto.config
+++ b/openpower/configs/hostboot/palmetto.config
@@ -18,6 +18,10 @@
 set CVPD_WRITE_TO_HW
 set CVPD_READ_FROM_PNOR
 set CVPD_WRITE_TO_PNOR
+set PVPD_READ_FROM_HW
+set PVPD_WRITE_TO_HW
+set PVPD_READ_FROM_PNOR
+set PVPD_WRITE_TO_PNOR
 set SKIP_RESTRICT_EX_UNITS
 unset CDIMM_FORMAT_FOR_CVPD
 
@@ -34,7 +38,7 @@
 
 # turn on console output
 set CONSOLE
-set CONSOLE_AST2400
+set BMC_AST2400
 
 set PNOR_IS_32MB
 
@@ -54,5 +58,8 @@
 # Enable Checktop Analysis
 set ENABLE_CHECKSTOP_ANALYSIS
 
+# Hostboot will detect hardware changes
+set HOST_HCDB_SUPPORT
+
 # set for trace debug to console
 unset CONSOLE_OUTPUT_TRACE
diff --git a/openpower/configs/palmetto_defconfig b/openpower/configs/palmetto_defconfig
index 5a4bf38..b589463 100644
--- a/openpower/configs/palmetto_defconfig
+++ b/openpower/configs/palmetto_defconfig
@@ -8,6 +8,7 @@
 
 BR2_HOSTBOOT_BINARY_SBE_FILENAME="venice_sbe.img.ecc"
 BR2_HOSTBOOT_BINARY_SBEC_FILENAME="centaur_sbec_pad.img.ecc"
+BR2_HOSTBOOT_BINARY_WINK_FILENAME="p8.ref_image.hdr.bin.ecc"
 
 BR2_OCC_BIN_FILENAME="occ.bin"
 
@@ -36,7 +37,7 @@
 BR2_LINUX_KERNEL=y
 BR2_LINUX_KERNEL_CUSTOM_GIT=y
 BR2_LINUX_KERNEL_CUSTOM_REPO_URL="git://github.com/open-power/linux.git"
-BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="1444a4e78a9ce324b0b6ac243ccfbfc8fce25d7e"
+BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="d0ff068a9962ba96d4e6ddfba2a4e9fd8bc9a763"
 BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
 BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL)/configs/linux/skiroot_defconfig"
 BR2_LINUX_KERNEL_ZIMAGE_EPAPR=y
diff --git a/openpower/package/Config.in b/openpower/package/Config.in
index 83823fb..92ab00f 100644
--- a/openpower/package/Config.in
+++ b/openpower/package/Config.in
@@ -4,6 +4,7 @@
 source "$BR2_EXTERNAL/package/palmetto-xml/Config.in"
 source "$BR2_EXTERNAL/package/habanero-xml/Config.in"
 source "$BR2_EXTERNAL/package/firestone-xml/Config.in"
+source "$BR2_EXTERNAL/package/garrison-xml/Config.in"
 source "$BR2_EXTERNAL/package/openpower-pnor/Config.in"
 source "$BR2_EXTERNAL/package/p8-pore-binutils/Config.in"
 source "$BR2_EXTERNAL/package/occ/Config.in"
diff --git a/openpower/package/firestone-xml/firestone.mk b/openpower/package/firestone-xml/firestone.mk
index 600c285..76b5755 100644
--- a/openpower/package/firestone-xml/firestone.mk
+++ b/openpower/package/firestone-xml/firestone.mk
@@ -4,7 +4,7 @@
 #
 ################################################################################
 
-FIRESTONE_XML_VERSION ?= 3383b31643c225f7bcecc8ce08dcbb6803f3e058
+FIRESTONE_XML_VERSION ?= 5123184b9f26bc1068afb9b57e796aecaf61b249
 FIRESTONE_XML_SITE ?= $(call github,open-power,firestone-xml,$(FIRESTONE_XML_VERSION))
 
 FIRESTONE_XML_LICENSE = Apache-2.0
@@ -32,7 +32,6 @@
         bash -c 'mkdir -p $(MRW_SCRATCH) && cp -r $(@D)/* $(MRW_SCRATCH)'
 
         # generate the system mrw xml
-        # Not processing until actaul xml is here
         perl -I $(MRW_HB_TOOLS) \
         $(MRW_HB_TOOLS)/processMrw.pl -x $(MRW_SCRATCH)/firestone.xml
         
diff --git a/openpower/package/garrison-xml/Config.in b/openpower/package/garrison-xml/Config.in
new file mode 100755
index 0000000..a1626d0
--- /dev/null
+++ b/openpower/package/garrison-xml/Config.in
@@ -0,0 +1,23 @@
+config BR2_PACKAGE_GARRISON_XML
+        bool "garrison_xml"
+        default y if (BR2_OPENPOWER_CONFIG_NAME = "garrison")
+        help
+            Utilites for building xml and the targeting binary image
+
+config BR2_GARRISON_SYSTEM_XML_FILENAME
+        string "Garrison targeting system xml filename"
+        default ""
+        help
+            Defines the name of the system XML filename to be used when creating targeting binary image
+
+config BR2_GARRISON_MRW_XML_FILENAME
+        string "Garrison targeting mrw xml filename"
+        default ""
+        help
+            Defines the name of the mrw XML filename to be used when creating targeting binary image
+
+config BR2_GARRISON_BIOS_XML_FILENAME
+        string "Garrison BIOS metadata XML filename"
+        default ""
+        help
+            Defines the name of the BIOS XML filename to parse when generating BIOS metadata
diff --git a/openpower/package/garrison-xml/garrison.mk b/openpower/package/garrison-xml/garrison.mk
new file mode 100644
index 0000000..e81e50c
--- /dev/null
+++ b/openpower/package/garrison-xml/garrison.mk
@@ -0,0 +1,75 @@
+################################################################################
+#
+# garrison_xml
+#
+################################################################################
+
+GARRISON_XML_VERSION ?= 4f4b2373ff8ef35338c20ab3660a0e4d980aeddd
+GARRISON_XML_SITE ?= $(call github,open-power,garrison-xml,$(GARRISON_XML_VERSION))
+
+GARRISON_XML_LICENSE = Apache-2.0
+GARRISON_XML_DEPENDENCIES = hostboot-install-images openpower-mrw-install-images common-p8-xml-install-images
+
+GARRISON_XML_INSTALL_IMAGES = YES
+GARRISON_XML_INSTALL_TARGET = YES
+
+MRW_SCRATCH=$(STAGING_DIR)/openpower_mrw_scratch
+MRW_HB_TOOLS=$(STAGING_DIR)/hostboot_build_images
+
+# Defines for BIOS metadata creation
+BIOS_SCHEMA_FILE = $(MRW_HB_TOOLS)/bios.xsd
+GARRISON_BIOS_XML_CONFIG_FILE = $(MRW_SCRATCH)/$(BR2_GARRISON_BIOS_XML_FILENAME)
+BIOS_XML_METADATA_FILE = \
+    $(MRW_HB_TOOLS)/$(BR2_OPENPOWER_CONFIG_NAME)_bios_metadata.xml
+PETITBOOT_XSLT_FILE = $(MRW_HB_TOOLS)/bios_metadata_petitboot.xslt
+PETITBOOT_BIOS_XML_METADATA_FILE = \
+    $(MRW_HB_TOOLS)/$(BR2_OPENPOWER_CONFIG_NAME)_bios_metadata_petitboot.xml
+PETITBOOT_BIOS_XML_METADATA_INITRAMFS_FILE = \
+    $(TARGET_DIR)/usr/share/bios_metadata.xml
+
+define GARRISON_XML_BUILD_CMDS
+        # copy the garrison xml where the common lives
+        bash -c 'mkdir -p $(MRW_SCRATCH) && cp -r $(@D)/* $(MRW_SCRATCH)'
+
+        # generate the system mrw xml
+        perl -I $(MRW_HB_TOOLS) \
+        $(MRW_HB_TOOLS)/processMrw.pl -x $(MRW_SCRATCH)/garrison.xml
+        
+        # merge in any system specific attributes, hostboot attributes
+        $(MRW_HB_TOOLS)/mergexml.sh $(MRW_SCRATCH)/$(BR2_GARRISON_SYSTEM_XML_FILENAME) \
+            $(MRW_HB_TOOLS)/attribute_types.xml \
+            $(MRW_HB_TOOLS)/attribute_types_hb.xml \
+            $(MRW_HB_TOOLS)/target_types_merged.xml \
+            $(MRW_HB_TOOLS)/target_types_hb.xml \
+            $(MRW_SCRATCH)/$(BR2_GARRISON_MRW_XML_FILENAME) > $(MRW_HB_TOOLS)/temporary_hb.hb.xml;
+
+        # creating the targeting binary
+        $(MRW_HB_TOOLS)/xmltohb.pl  \
+            --hb-xml-file=$(MRW_HB_TOOLS)/temporary_hb.hb.xml \
+            --fapi-attributes-xml-file=$(MRW_HB_TOOLS)/fapiattrs.xml \
+            --src-output-dir=none \
+            --img-output-dir=$(MRW_HB_TOOLS)/ \
+            --vmm-consts-file=$(MRW_HB_TOOLS)/vmmconst.h --noshort-enums \
+            --bios-xml-file=$(GARRISON_BIOS_XML_CONFIG_FILE) \
+            --bios-schema-file=$(BIOS_SCHEMA_FILE) \
+            --bios-output-file=$(BIOS_XML_METADATA_FILE)
+
+        # Transform BIOS XML into Petitboot specific BIOS XML via the schema
+        xsltproc -o \
+            $(PETITBOOT_BIOS_XML_METADATA_FILE) \
+            $(PETITBOOT_XSLT_FILE) \
+            $(BIOS_XML_METADATA_FILE)
+endef
+
+define GARRISON_XML_INSTALL_IMAGES_CMDS
+        mv $(MRW_HB_TOOLS)/targeting.bin $(MRW_HB_TOOLS)/$(BR2_OPENPOWER_TARGETING_BIN_FILENAME)
+endef
+
+define GARRISON_XML_INSTALL_TARGET_CMDS
+        # Install Petitboot specific BIOS XML into initramfs's usr/share/ dir
+        $(INSTALL) -D -m 0644 \
+            $(PETITBOOT_BIOS_XML_METADATA_FILE) \
+            $(PETITBOOT_BIOS_XML_METADATA_INITRAMFS_FILE)
+endef
+
+$(eval $(generic-package))
diff --git a/openpower/package/habanero-xml/habanero-xml.mk b/openpower/package/habanero-xml/habanero-xml.mk
index 557a7da..501bceb 100644
--- a/openpower/package/habanero-xml/habanero-xml.mk
+++ b/openpower/package/habanero-xml/habanero-xml.mk
@@ -4,7 +4,7 @@
 #
 ################################################################################
 
-HABANERO_XML_VERSION ?= b7f0e388bba972fcdcf749f9bb8e31bc9e1022c0
+HABANERO_XML_VERSION ?= 03d911f12311ba884ec9e08a6c114daabfce545a
 HABANERO_XML_SITE ?= $(call github,open-power,habanero-xml,$(HABANERO_XML_VERSION))
 
 HABANERO_XML_LICENSE = Apache-2.0
diff --git a/openpower/package/hostboot-binaries/hostboot_binaries.mk b/openpower/package/hostboot-binaries/hostboot_binaries.mk
index 03523c3..d9a23df 100644
--- a/openpower/package/hostboot-binaries/hostboot_binaries.mk
+++ b/openpower/package/hostboot-binaries/hostboot_binaries.mk
@@ -4,7 +4,7 @@
 #
 ################################################################################
 
-HOSTBOOT_BINARIES_VERSION ?= d41753f2b5e2510d6bc6ce58adf8e55207b8d317
+HOSTBOOT_BINARIES_VERSION ?= 22470e51b6342f9c307e28b3ea7cdb194ff954d4
 HOSTBOOT_BINARIES_SITE ?= $(call github,open-power,hostboot-binaries,$(HOSTBOOT_BINARIES_VERSION))
 HOSTBOOT_BINARIES_LICENSE = Apache-2.0
 
@@ -13,7 +13,7 @@
 
 define HOSTBOOT_BINARIES_INSTALL_IMAGES_CMDS
      $(INSTALL) -D $(@D)/cvpd.bin  $(STAGING_DIR)/hostboot_binaries/cvpd.bin
-     $(INSTALL) -D $(@D)/p8.ref_image.hdr.bin.ecc  $(STAGING_DIR)/hostboot_binaries/p8.ref_image.hdr.bin.ecc
+     $(INSTALL) -D $(@D)/$(BR2_HOSTBOOT_BINARY_WINK_FILENAME) $(STAGING_DIR)/hostboot_binaries/
      $(INSTALL) -D $(@D)/$(BR2_HOSTBOOT_BINARY_SBEC_FILENAME) $(STAGING_DIR)/hostboot_binaries/
      $(INSTALL) -D $(@D)/$(BR2_HOSTBOOT_BINARY_SBE_FILENAME)  $(STAGING_DIR)/hostboot_binaries/
 endef
diff --git a/openpower/package/hostboot/hostboot-0001-Increase-uart-delay.patch b/openpower/package/hostboot/hostboot-0001-Increase-uart-delay.patch
index 74cb584..5c916d2 100644
--- a/openpower/package/hostboot/hostboot-0001-Increase-uart-delay.patch
+++ b/openpower/package/hostboot/hostboot-0001-Increase-uart-delay.patch
@@ -18,7 +18,7 @@
              {
                  const uint64_t DELAY_NS = 100;
 -                const uint64_t DELAY_LOOPS = 10000;
-+                const uint64_t DELAY_LOOPS = 1000000;
++                const uint64_t DELAY_LOOPS = 100000000;
  
                  uint8_t data = 0;
                  uint64_t loops = 0;
diff --git a/openpower/package/hostboot/hostboot-0004_mss_thermal_undo.patch b/openpower/package/hostboot/hostboot-0003-mss_thermal_undo.patch
similarity index 100%
rename from openpower/package/hostboot/hostboot-0004_mss_thermal_undo.patch
rename to openpower/package/hostboot/hostboot-0003-mss_thermal_undo.patch
diff --git a/openpower/package/hostboot/hostboot-0005-Add-PNOR-Version-Information-to-IPMI-Fru-Inventory.patch b/openpower/package/hostboot/hostboot-0005-Add-PNOR-Version-Information-to-IPMI-Fru-Inventory.patch
deleted file mode 100644
index 6f1b80c..0000000
--- a/openpower/package/hostboot/hostboot-0005-Add-PNOR-Version-Information-to-IPMI-Fru-Inventory.patch
+++ /dev/null
@@ -1,350 +0,0 @@
-From 1674da76fadc52f8c6aff6d8435536dd33b7417f Mon Sep 17 00:00:00 2001
-From: Bill Hoffa <wghoffa@us.ibm.com>
-Date: Mon, 30 Mar 2015 15:11:28 -0500
-Subject: [PATCH] Add PNOR Version Information to IPMI Fru Inventory
-
-Change-Id: Ib49fe67e9c6631b2b7ea0005e692c9aea6d84057
-RTC:123353
----
- src/usr/ipmi/ipmifruinv.C                          | 207 +++++++++++++++++++++
- src/usr/ipmi/ipmifruinvprvt.H                      |  47 +++++
- .../targeting/common/xmltohb/attribute_types.xml   |   8 +
- src/usr/targeting/common/xmltohb/target_types.xml  |   1 +
- 4 files changed, 263 insertions(+)
-
-diff --git a/src/usr/ipmi/ipmifruinv.C b/src/usr/ipmi/ipmifruinv.C
-index 4f0d7d7..aaf62d1 100644
---- a/src/usr/ipmi/ipmifruinv.C
-+++ b/src/usr/ipmi/ipmifruinv.C
-@@ -37,6 +37,7 @@
- #include "ipmifruinvprvt.H"
- #include <stdio.h>
- #include <assert.h>
-+#include <pnor/pnorif.H>
- 
- extern trace_desc_t * g_trac_ipmi;
- 
-@@ -84,6 +85,10 @@ IpmiFruInv *IpmiFruInv::Factory(TARGETING::TargetHandleList i_targets,
-             // @todo-RTC:117702
-             l_fru = new backplaneIpmiFruInv(l_target, i_targets, i_updateData);
-             break;
-+        case TARGETING::TYPE_SYS:
-+            // Use sys target for setting System Firmware Info
-+            l_fru = new systemFwIpmiFruInv(l_target);
-+            break;
-         default:
-             assert(false,
-                 "IpmiFruInv::Factory: No support for target type given: [%08x]",
-@@ -927,6 +932,199 @@ errlHndl_t backplaneIpmiFruInv::addVpdData(std::vector<uint8_t> &io_data,
-     return l_errl;
- }
- 
-+//##############################################################################
-+systemFwIpmiFruInv::systemFwIpmiFruInv( TARGETING::TargetHandle_t i_target )
-+    :IpmiFruInv(i_target)
-+{
-+
-+};
-+
-+errlHndl_t systemFwIpmiFruInv::buildInternalUseArea(std::vector<uint8_t>
-+                                                                       &io_data)
-+{
-+    //This section not needed for proc type
-+    return IpmiFruInv::buildEmptyArea(io_data);
-+}
-+
-+errlHndl_t systemFwIpmiFruInv::buildChassisInfoArea(std::vector<uint8_t>
-+                                                                       &io_data)
-+{
-+    //This section not needed for system firmware type
-+    return IpmiFruInv::buildEmptyArea(io_data);
-+}
-+
-+errlHndl_t systemFwIpmiFruInv::buildBoardInfoArea(std::vector<uint8_t> &io_data)
-+{
-+    //This section not needed for system firmware type
-+    return IpmiFruInv::buildEmptyArea(io_data);
-+}
-+
-+errlHndl_t systemFwIpmiFruInv::buildProductInfoArea(std::vector<uint8_t>
-+                                                                       &io_data)
-+{
-+    errlHndl_t l_errl = NULL;
-+
-+    do {
-+        //Set formatting data that goes at the beginning of the record
-+        preFormatProcessing(io_data, true);
-+
-+        uint8_t l_data[] = {IPMIFRUINV::TYPELENGTH_BYTE_NULL,
-+                            IPMIFRUINV::TYPELENGTH_BYTE_ASCII + 18, 'O','p','e',
-+                            'n','P','O','W','E','R',' ','F','i','r','m','w','a',
-+                            'r','e', IPMIFRUINV::TYPELENGTH_BYTE_NULL};
-+
-+        io_data.insert( io_data.end(),
-+                    &l_data[0],
-+                    &l_data[0] + (uint8_t(sizeof(l_data) / sizeof(uint8_t))));
-+
-+        //Get PNOR Version Here
-+        PNOR::SectionInfo_t l_pnorInfo;
-+        l_errl = getSectionInfo( PNOR::VERSION , l_pnorInfo);
-+        if (l_errl) { break; }
-+
-+        uint8_t* l_versionData = reinterpret_cast<uint8_t*>( l_pnorInfo.vaddr );
-+        //Total Bytes in PNOR Version String
-+        uint8_t l_numBytes = 0;
-+        uint8_t l_curOffset = 0;
-+
-+        //Total Number of fields needed to print PNOR Version String
-+        uint8_t l_numFields = 0;
-+        bool l_clearStandardFields = true;
-+
-+        //First determine number of bytes in PNOR Version string
-+        //  with the caveat there is a max record size allowed, so
-+        //  the string will be cut off if too long
-+        //Also, remove newline chars
-+        while ((l_numBytes < IPMIFRUINV::MAX_RECORD_SIZE -
-+                              (uint8_t(sizeof(l_data) / sizeof(uint8_t))) -
-+                              IPMIFRUINV::COMMON_HEADER_FORMAT_SIZE - 8)
-+                               && (((char)(l_versionData[l_numBytes])) != '\0'))
-+        {
-+
-+            if (((char)(l_versionData[l_numBytes])) == '\n')
-+            {
-+
-+                if (l_numBytes > l_curOffset)
-+                {
-+                    //Add on size of this field to the data buffer
-+                    io_data.push_back(
-+                         IPMIFRUINV::TYPELENGTH_BYTE_ASCII
-+                           + (l_numBytes-l_curOffset));
-+
-+                    io_data.insert(io_data.end(),
-+                       &l_versionData[0]+(l_curOffset),
-+                       &l_versionData[0]+(l_numBytes));
-+                }
-+
-+                //Null data for standard fields needs to be indicated once after
-+                // the first segment of data is displayed to match the
-+                // ipmi fru spec
-+                if (l_clearStandardFields)
-+                {
-+                    //Add Empty Asset Tag
-+                    io_data.push_back(uint8_t(0));
-+                    //FRU File ID - Empty
-+                    io_data.push_back(IPMIFRUINV::TYPELENGTH_BYTE_NULL);
-+                    io_data.push_back(uint8_t(0)); // Empty FRU File ID bytes
-+                    l_clearStandardFields = false;
-+                }
-+
-+                //Increment past the newline char
-+                l_curOffset = l_numBytes + 1;
-+            }
-+            l_numBytes++;
-+        }
-+
-+        if (l_curOffset == 0)
-+        {
-+            //Calculate the number of fields required to display this data
-+            //  given only MAX_ASCII_FIELD_SIZE bytes can be in any one given
-+            //  IPMI fru inventory field
-+            l_numFields = l_numBytes / IPMIFRUINV::MAX_ASCII_FIELD_SIZE;
-+            if (l_numBytes % IPMIFRUINV::MAX_ASCII_FIELD_SIZE)
-+            {
-+                l_numFields += 1;
-+            }
-+
-+            //Count by number of fields, adding the data to the buffer as
-+            // we go.
-+            for (uint8_t i=0; i < l_numFields; i++)
-+            {
-+                //Determine the data size for this particular field
-+                uint8_t l_dataSize=IPMIFRUINV::MAX_ASCII_FIELD_SIZE;
-+                if (i == l_numFields - 1)
-+                {
-+                    l_dataSize = l_numBytes -
-+                           (i * IPMIFRUINV::MAX_ASCII_FIELD_SIZE);
-+                }
-+
-+                //Add on size of this field to the data buffer
-+                io_data.push_back(IPMIFRUINV::TYPELENGTH_BYTE_ASCII
-+                                         + l_dataSize);
-+
-+                //Insert this segment of version string data
-+                io_data.insert(io_data.end(),
-+                       &l_versionData[0]+(i * IPMIFRUINV::MAX_ASCII_FIELD_SIZE),
-+                       &l_versionData[0]+(i * IPMIFRUINV::MAX_ASCII_FIELD_SIZE)
-+                                        +l_dataSize);
-+
-+                //Null data for standard fields needs to be indicated once after
-+                // the first segment of data is displayed to match the
-+                // ipmi fru spec
-+                if (l_clearStandardFields)
-+                {
-+                    //Add Empty Asset Tag
-+                    io_data.push_back(uint8_t(0));
-+                    //FRU File ID - Empty
-+                    io_data.push_back(IPMIFRUINV::TYPELENGTH_BYTE_NULL);
-+                    //io_data.push_back(uint8_t(0)); // Empty FRU File ID bytes
-+                    l_clearStandardFields = false;
-+                }
-+
-+            }
-+        }
-+        else
-+        {
-+            if (l_numBytes > l_curOffset)
-+            {
-+                io_data.push_back( IPMIFRUINV::TYPELENGTH_BYTE_ASCII
-+                        + (l_numBytes-l_curOffset));
-+
-+                io_data.insert(io_data.end(),
-+                       &l_versionData[0]+(l_curOffset),
-+                       &l_versionData[0]+(l_numBytes));
-+            }
-+
-+        }
-+
-+        if (l_clearStandardFields)
-+        {
-+            //Add Asset Tag
-+            io_data.push_back(uint8_t(0)); //No Asset Tag needed - O bytes
-+            //FRU File ID - Empty
-+            io_data.push_back(IPMIFRUINV::TYPELENGTH_BYTE_NULL);
-+            //io_data.push_back(uint8_t(0)); // Empty FRU File ID bytes
-+        }
-+
-+        io_data.push_back(IPMIFRUINV::END_OF_CUSTOM_FIELDS);
-+
-+        //Finalize section formatting
-+        postFormatProcessing(io_data);
-+
-+    } while(0);
-+
-+    return l_errl;
-+}
-+
-+errlHndl_t systemFwIpmiFruInv::buildMultiRecordInfoArea(std::vector<uint8_t>
-+                                                                       &io_data)
-+{
-+    //This section not needed for system firmware type
-+    return IpmiFruInv::buildEmptyArea(io_data);
-+}
-+
-+
-+
- void IpmiFruInv::addEcidData(const TARGETING::TargetHandle_t& i_target,
-                              const TARGETING::ATTR_ECID_type& i_ecidInfo,
-                              std::vector<uint8_t> &io_data)
-@@ -997,6 +1195,15 @@ void IPMIFRUINV::setData(bool i_updateData)
-             IPMIFRUINV::gatherClearData(pSys, frusToClear);
-         }
- 
-+        //Get System FW FRU_ID if available
-+        uint32_t l_systemFwFruId;
-+        bool hasSystemFwFruId =
-+                  pSys->tryGetAttr<TARGETING::ATTR_BMC_FRU_ID>(l_systemFwFruId);
-+        if (hasSystemFwFruId)
-+        {
-+            l_potentialFrus.push_back(std::make_pair(pSys, l_systemFwFruId));
-+        }
-+
-         // Find list of all target types that may need a fru inv. record set
-         IPMIFRUINV::gatherSetData(pSys, frusToClear,
-                                      l_potentialFrus, i_updateData);
-diff --git a/src/usr/ipmi/ipmifruinvprvt.H b/src/usr/ipmi/ipmifruinvprvt.H
-index 2573a84..468a47f 100644
---- a/src/usr/ipmi/ipmifruinvprvt.H
-+++ b/src/usr/ipmi/ipmifruinvprvt.H
-@@ -42,6 +42,8 @@ namespace IPMIFRUINV
-         COMMON_HEADER_FORMAT_SIZE     = 8, //size in bytes
-         DEFAULT_CHASSIS_TYPE          = 0x05,
-         DEFAULT_FRU_OFFSET            = 0,
-+        MAX_ASCII_FIELD_SIZE          = 0x3F, //size in bytes
-+        MAX_RECORD_SIZE               = 0xFF, //size in bytes
-     };
- };
- 
-@@ -460,4 +462,49 @@ class backplaneIpmiFruInv : public IpmiFruInv
- 
- };
- 
-+//Child class for building up System Firwmare Fru Inventory Record Data
-+class systemFwIpmiFruInv : public IpmiFruInv
-+{
-+
-+  public:
-+    /**
-+    * @brief Constructor
-+    *
-+    * @param[in] TargetHandle_t, Handle to target for which
-+    *             to get relevant IPMI FRU Data from
-+    */
-+    systemFwIpmiFruInv( TARGETING::TargetHandle_t i_target);
-+
-+    /**
-+     * @brief Builds the Internal Use Area Data Section
-+     * @param[in/out] data, The container to put internal use area data in
-+     */
-+    errlHndl_t buildInternalUseArea(std::vector<uint8_t> &io_data);
-+
-+    /**
-+     * @brief Builds the Chassis Info Area Data Section
-+     * @param[in/out] data, The container to put chassis info area data in
-+     */
-+    errlHndl_t buildChassisInfoArea(std::vector<uint8_t> &io_data);
-+
-+    /**
-+     * @brief Builds the Board Info Area Data Section
-+     * @param[in/out] data, The container to put board info area data in
-+     */
-+    errlHndl_t buildBoardInfoArea(std::vector<uint8_t> &io_data);
-+
-+    /**
-+     * @brief Builds the Product Info Area Data Section
-+     * @param[in/out] data, The container to put product info area data in
-+     */
-+    errlHndl_t buildProductInfoArea(std::vector<uint8_t> &io_data);
-+
-+    /**
-+     * @brief Builds the MultiRecord Info Area Data Section
-+     * @param[in/out] data, The container to put multirecord info area data in
-+     */
-+    errlHndl_t buildMultiRecordInfoArea(std::vector<uint8_t> &io_data);
-+
-+};
-+
- #endif
-diff --git a/src/usr/targeting/common/xmltohb/attribute_types.xml b/src/usr/targeting/common/xmltohb/attribute_types.xml
-index ec256de..17729cd 100644
---- a/src/usr/targeting/common/xmltohb/attribute_types.xml
-+++ b/src/usr/targeting/common/xmltohb/attribute_types.xml
-@@ -11659,6 +11659,14 @@ firmware notes: Platforms should initialize this attribute to AUTO (0)</descript
- </attribute>
- 
- <attribute>
-+    <id>BMC_FRU_ID</id>
-+    <description>BMC FRU ID attribute for node class</description>
-+    <simpleType><uint32_t><default>0</default></uint32_t></simpleType>
-+    <persistency>non-volatile</persistency>
-+    <readable/>
-+</attribute>
-+
-+<attribute>
-     <id>PLCK_IPL_ATTR_OVERRIDES_EXIST</id>
-     <description>
-       Set to 1 by HWSV to indicate that attribute overrides exist in a PLCK IPL
-diff --git a/src/usr/targeting/common/xmltohb/target_types.xml b/src/usr/targeting/common/xmltohb/target_types.xml
-index 15d7921..82ec014 100644
---- a/src/usr/targeting/common/xmltohb/target_types.xml
-+++ b/src/usr/targeting/common/xmltohb/target_types.xml
-@@ -300,6 +300,7 @@
-     <attribute><id>MNFG_TH_CEN_L4_CACHE_CES</id></attribute>
-     <attribute><id>OPT_MEMMAP_GROUP_POLICY</id></attribute>
-     <attribute><id>FRU_ID</id></attribute>
-+    <attribute><id>BMC_FRU_ID</id></attribute>
- </targetType>
- 
- <targetType>
--- 
-1.8.2.2
-
diff --git a/openpower/package/hostboot/hostboot-0006-Move-slave-sbe-start-before-proc-cen-ref-clk-enable.patch b/openpower/package/hostboot/hostboot-0006-Move-slave-sbe-start-before-proc-cen-ref-clk-enable.patch
deleted file mode 100644
index 06e4730..0000000
--- a/openpower/package/hostboot/hostboot-0006-Move-slave-sbe-start-before-proc-cen-ref-clk-enable.patch
+++ /dev/null
@@ -1,60 +0,0 @@
-From d6882c71233b9c4b2fb801c4f3e588b47c2c73bc Mon Sep 17 00:00:00 2001
-From: Dan Crowell <dcrowell@us.ibm.com>
-Date: Wed, 1 Apr 2015 11:07:42 -0500
-Subject: [PATCH] Move slave sbe start before proc_cen_ref_clk_enable
-
-The proc_cen_ref_clk_enable step contains scoms to the processor
-that do not work if the proc hasn't run through its sbe code yet.
-
-Change-Id: I7665992a01bd66a37cd5e79aa2bb2142a304a8f4
----
- src/include/usr/isteps/istep06list.H | 16 ++++++++--------
- 1 file changed, 8 insertions(+), 8 deletions(-)
-
-diff --git a/src/include/usr/isteps/istep06list.H b/src/include/usr/isteps/istep06list.H
-index 6adb784..6a26b2a 100644
---- a/src/include/usr/isteps/istep06list.H
-+++ b/src/include/usr/isteps/istep06list.H
-@@ -68,12 +68,12 @@ namespace   INITSERVICE
-  *      :   Clear deconfigured states
-  *  06.8    proc_revert_sbe_mcs_setup
-  *      :   Clean up MCS extent regs
-- *  06.9    proc_cen_ref_clk_enable
-- *      :   Setup centaur ref clocks
-- *  06.10    host_slave_sbe_config
-+ *  06.10   host_slave_sbe_config
-  *  06.11   host_sbe_start
-  *  06.12   proc_check_slave_sbe_seeprom_complete
-  *        : Check Slave SBE Complete
-+ *  06.9    proc_cen_ref_clk_enable
-+ *      :   Setup centaur ref clocks
-  *  06.13   proc_xmit_sbe
-  *        : vSBE Init of Slave Chips
-  *
-@@ -127,11 +127,6 @@ const   TaskInfo    g_istep06[]  =   {
-                 { START_FN, EXT_IMAGE, NORMAL_IPL_OP, false }
-         },
-         {
--                ISTEPNAME(06,09,"proc_cen_ref_clk_enable"),
--                SLAVE_SBE::call_proc_cen_ref_clk_enable,
--                { START_FN, EXT_IMAGE, NORMAL_IPL_OP, false }
--        },
--        {
-                 ISTEPNAME(06,10,"host_slave_sbe_config"),
-                 SLAVE_SBE::call_host_slave_sbe_config,
-                 { START_FN, EXT_IMAGE, NORMAL_IPL_OP, false }
-@@ -147,6 +142,11 @@ const   TaskInfo    g_istep06[]  =   {
-                 { START_FN, EXT_IMAGE, NORMAL_IPL_OP | MPIPL_OP, false }
-         },
-         {
-+                ISTEPNAME(06,09,"proc_cen_ref_clk_enable"),
-+                SLAVE_SBE::call_proc_cen_ref_clk_enable,
-+                { START_FN, EXT_IMAGE, NORMAL_IPL_OP, false }
-+        },
-+        {
-                 ISTEPNAME(06,13,"proc_xmit_sbe"),
-                 SLAVE_SBE::call_proc_xmit_sbe,
-                 { START_FN, EXT_IMAGE, NORMAL_IPL_OP, false }
--- 
-1.8.2.2
-
diff --git a/openpower/package/hostboot/hostboot-0007-Fix-Bug-in-mss_setup_bars.patch b/openpower/package/hostboot/hostboot-0007-Fix-Bug-in-mss_setup_bars.patch
deleted file mode 100644
index 8a14eda..0000000
--- a/openpower/package/hostboot/hostboot-0007-Fix-Bug-in-mss_setup_bars.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From 5b26d8a2da4c8bba72781e45ec89572843f55f35 Mon Sep 17 00:00:00 2001
-From: Mike Baiocchi <baiocchi@us.ibm.com>
-Date: Tue, 21 Apr 2015 13:23:36 -0500
-Subject: [PATCH] Fix Bug in mss_setup_bars
-
-There was an update made to mss_setup_bars.C to fix memory corruption, but
-this commit corrects an issue that was missed by this initial update.
-
-Change-Id: I32889a5d07b33f5496e5ea12ec50a0f26d0e1561
-CQ: SW296125
----
- src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/mss_setup_bars.C | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/mss_setup_bars.C b/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/mss_setup_bars.C
-index 274dfdc..6c58193 100644
---- a/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/mss_setup_bars.C
-+++ b/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/mss_setup_bars.C
-@@ -615,7 +615,7 @@ fapi::ReturnCode mss_setup_bars(const fapi::Target& i_pu_target,   std::vector<f
-                     if(mcs_sz !=  sizeInfo.MCS_size[group_data[i][j]])
-                     {
-                           FAPI_INF(" Group %zd will not be configured as MCS %d is not valid grouped size is %d , present MCS size is %d \n",i,group_data[i][j],mcs_sz, sizeInfo.MCS_size[group_data[i][j]]);
--                          for(uint8_t k = 0; k<32;k++) { group_data[i][k]=0; }
-+                          for(uint8_t k = 0; k<16;k++) { group_data[i][k]=0; }
-                      }
-                }
-            }
--- 
-1.8.2.2
-
diff --git a/openpower/package/hostboot/hostboot-0007-Fix-handling-of-ECC-protected-partitions-at-runtime.patch b/openpower/package/hostboot/hostboot-0007-Fix-handling-of-ECC-protected-partitions-at-runtime.patch
new file mode 100644
index 0000000..c9385d2
--- /dev/null
+++ b/openpower/package/hostboot/hostboot-0007-Fix-handling-of-ECC-protected-partitions-at-runtime.patch
@@ -0,0 +1,34 @@
+From 69e22b2f8c8425b4f2ec8f7adcf164afed7f2ff8 Mon Sep 17 00:00:00 2001
+From: Dan Crowell <dcrowell@us.ibm.com>
+Date: Mon, 27 Apr 2015 13:48:57 -0500
+Subject: [PATCH] Fix handling of ECC protected partitions at runtime
+
+Modify the code to only check ECC on the logical size of the data
+that is read, rather than on the full physical size.
+
+Change-Id: Ia45989e64ef70e63542274ef59df2cc755f8082e
+---
+ src/usr/pnor/runtime/rt_pnor.C | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/src/usr/pnor/runtime/rt_pnor.C b/src/usr/pnor/runtime/rt_pnor.C
+index d434f26..6e52999 100644
+--- a/src/usr/pnor/runtime/rt_pnor.C
++++ b/src/usr/pnor/runtime/rt_pnor.C
+@@ -405,10 +405,12 @@ errlHndl_t RtPnor::readFromDevice (uint64_t i_procId,
+         {
+             TRACFCOMP(g_trac_pnor, "RtPnor::readFromDevice: removing ECC...");
+             // remove the ECC and fix the original data if it is broken
++            size_t l_eccSize = (l_rc/9)*8;
++            l_eccSize = std::min( l_eccSize, i_size );
+             PNOR::ECC::eccStatus ecc_stat =
+                  PNOR::ECC::removeECC(reinterpret_cast<uint8_t*>(l_dataToRead),
+                                       reinterpret_cast<uint8_t*>(o_data),
+-                                      l_rc); //actual size of read data
++                                      l_eccSize); //logical size of read data
+ 
+             // create an error if we couldn't correct things
+             if( ecc_stat == PNOR::ECC::UNCORRECTABLE )
+-- 
+1.8.2.2
+
diff --git a/openpower/package/hostboot/hostboot-0008-Fix-PCIe-swap-issue.patch b/openpower/package/hostboot/hostboot-0008-Fix-PCIe-swap-issue.patch
new file mode 100644
index 0000000..3777b11
--- /dev/null
+++ b/openpower/package/hostboot/hostboot-0008-Fix-PCIe-swap-issue.patch
@@ -0,0 +1,63 @@
+From a4f739abb72b8ac5748138183b274cca5eef50ff Mon Sep 17 00:00:00 2001
+From: Matt Ploetz <maploetz@us.ibm.com>
+Date: Tue, 12 May 2015 15:32:20 -0500
+Subject: [PATCH] PCIe lane swap fix in processMRW.pl
+
+Change-Id: Iee7127fef7f4a911a77e0c24c896d840b1b45ff4
+---
+ src/usr/targeting/common/processMrw.pl | 25 +++++++++++--------------
+ 1 file changed, 11 insertions(+), 14 deletions(-)
+
+diff --git a/src/usr/targeting/common/processMrw.pl b/src/usr/targeting/common/processMrw.pl
+index 5d44e74..bbdb936 100644
+--- a/src/usr/targeting/common/processMrw.pl
++++ b/src/usr/targeting/common/processMrw.pl
+@@ -805,8 +805,8 @@ sub processPcie
+     $iop_swap{0}{1}{'11'}=$t[7];
+ 
+     $iop_swap{1}{0}{'00'}=$t[8];
+-    $iop_swap{1}{0}{'01'}=$t[9];
+-    $iop_swap{1}{0}{'10'}=$t[10];
++    $iop_swap{1}{0}{'10'}=$t[9];
++    $iop_swap{1}{0}{'01'}=$t[10];
+     $iop_swap{1}{0}{'11'}=$t[11];
+     $iop_swap{1}{1}{'00'}=$t[12];
+     $iop_swap{1}{1}{'10'}=$t[13];
+@@ -906,25 +906,22 @@ sub processPcie
+           die "PCIE config for $iop,$iop_lane_swap[$iop],$lane_rev not found\n";
+         }
+     }
+-    my $lane_swap_attr0 = sprintf("%s,%s",$iop_lane_swap[0],
+-                          $iop_lane_swap[1]);
+-    my $lane_swap_attr1 = sprintf("%s,0,%s,0",$iop_lane_swap[0],
+-                          $iop_lane_swap[1]);
++
++    my $lane_rev_attr0 = sprintf("%s,%s",
++                         oct($iop_swap_lu[0]),oct($iop_swap_lu[1]));
++    my $lane_rev_attr1 = sprintf("%s,0,%s,0",
++                         oct($iop_swap_lu[0]),oct($iop_swap_lu[1]));
+ 
+     $targetObj->setAttribute($parentTarget, "PROC_PCIE_IOP_SWAP",
+-        $lane_swap_attr0);
++        $lane_rev_attr0);
+     $targetObj->setAttribute($parentTarget, "PROC_PCIE_IOP_SWAP_NON_BIFURCATED",
+-        $lane_swap_attr1);
++        $lane_rev_attr1);
+     $targetObj->setAttribute($parentTarget, "PROC_PCIE_IOP_SWAP_BIFURCATED",
+         "0,0,0,0");
+-
+-    my $lane_rev_attr = sprintf("%s,0,%s,0",
+-                         oct($iop_swap_lu[0]),oct($iop_swap_lu[1]));
+-
+     $targetObj->setAttribute($parentTarget, "PROC_PCIE_IOP_REVERSAL",
+-        $lane_rev_attr);
++        "0,0,0,0");
+     $targetObj->setAttribute($parentTarget,
+-        "PROC_PCIE_IOP_REVERSAL_NON_BIFURCATED",$lane_rev_attr);
++        "PROC_PCIE_IOP_REVERSAL_NON_BIFURCATED","0,0,0,0");
+     $targetObj->setAttribute($parentTarget, "PROC_PCIE_IOP_REVERSAL_BIFURCATED",
+         "0,0,0,0");
+ 
+-- 
+1.8.2.2
+
diff --git a/openpower/package/hostboot/hostboot-0008-Limit-attribute-NPU_MMIO_BAR_BASE_ADDR-to-Naples-bas.patch b/openpower/package/hostboot/hostboot-0008-Limit-attribute-NPU_MMIO_BAR_BASE_ADDR-to-Naples-bas.patch
deleted file mode 100644
index 8f8a15e..0000000
--- a/openpower/package/hostboot/hostboot-0008-Limit-attribute-NPU_MMIO_BAR_BASE_ADDR-to-Naples-bas.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From 0134ed35efb10842f8a1d59d456e39338e63eaea Mon Sep 17 00:00:00 2001
-From: Mike Baiocchi <baiocchi@us.ibm.com>
-Date: Tue, 21 Apr 2015 16:41:38 -0500
-Subject: [PATCH] Limit attribute NPU_MMIO_BAR_BASE_ADDR to Naples-based
- systems
-
-This commit limits the use of the NPU_MMIO_BAR_BASE_ADDR to the
-systems for which it is defined.
-
-Change-Id: I7eab012a84611365e8e6cb6c44b49c4a4ffac8e4
----
- src/usr/targeting/common/processMrw.pl | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/src/usr/targeting/common/processMrw.pl b/src/usr/targeting/common/processMrw.pl
-index 3515841..5d44e74 100644
---- a/src/usr/targeting/common/processMrw.pl
-+++ b/src/usr/targeting/common/processMrw.pl
-@@ -580,10 +580,15 @@ sub setupBars
-     my $proc   = $targetObj->getAttribute($target, "FABRIC_CHIP_ID");
-     $targetObj->{TOPOLOGY}->{$node}->{$proc}++;
- 
--    my @bars=("NPU_MMIO_BAR_BASE_ADDR","FSP_BASE_ADDR","PSI_BRIDGE_BASE_ADDR",
-+    my @bars=("FSP_BASE_ADDR","PSI_BRIDGE_BASE_ADDR",
-               "INTP_BASE_ADDR","PHB_BASE_ADDRS","PCI_BASE_ADDRS_32",
-               "PCI_BASE_ADDRS_64","RNG_BASE_ADDR","IBSCOM_PROC_BASE_ADDR");
- 
-+    # Attribute only valid in naples-based systems
-+    if (!$targetObj->isBadAttribute($target,"NPU_MMIO_BAR_BASE_ADDR") ) {
-+          push(@bars,"NPU_MMIO_BAR_BASE_ADDR");
-+    }
-+
-     foreach my $bar (@bars)
-     {
-         my ($num,$base,$node_offset,$proc_offset,$offset) = split(/,/,
--- 
-1.8.2.2
-
diff --git a/openpower/package/hostboot/hostboot-0009-ATTN-IPOLL-interrupt-workaround.patch b/openpower/package/hostboot/hostboot-0009-ATTN-IPOLL-interrupt-workaround.patch
new file mode 100644
index 0000000..eb8d12a
--- /dev/null
+++ b/openpower/package/hostboot/hostboot-0009-ATTN-IPOLL-interrupt-workaround.patch
@@ -0,0 +1,141 @@
+From d2bdfed735f6c5e69b606f0251aba131fec4275d Mon Sep 17 00:00:00 2001
+From: Brian Stegmiller <bjs@us.ibm.com>
+Date: Thu, 14 May 2015 13:47:36 -0500
+Subject: [PATCH] ATTN: IPOLL interrupt workaround
+
+Circumvents issue where interrupts happen before OPAL is ready
+to handle them
+
+Change-Id: I3d378cd03dac51aaa5b2f77e8940eb63f170016b
+Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/17795
+Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
+Tested-by: Jenkins Server
+---
+ src/usr/diag/attn/common/attnsvc_common.C | 83 +++++++++++++++++++++++++++++--
+ 1 file changed, 79 insertions(+), 4 deletions(-)
+
+diff --git a/src/usr/diag/attn/common/attnsvc_common.C b/src/usr/diag/attn/common/attnsvc_common.C
+index c56b8a8..5067438 100644
+--- a/src/usr/diag/attn/common/attnsvc_common.C
++++ b/src/usr/diag/attn/common/attnsvc_common.C
+@@ -43,6 +43,13 @@ using namespace ERRORLOG;
+ 
+ namespace ATTN
+ {
++const uint64_t MCIFIRACT0     = 0x02011846;
++const uint64_t MCIFIRACT1     = 0x02011847;
++
++const uint64_t MCIFIRMASK     = 0x02011843;
++const uint64_t MCIFIRMASK_AND = 0x02011844;
++const uint64_t MCIFIRMASK_OR  = 0x02011845;
++
+ 
+ void getPbGp2Mask(uint64_t i_pos, void * i_data)
+ {
+@@ -104,11 +111,11 @@ errlHndl_t ServiceCommon::configureInterrupts(
+         ConfigureMode i_mode)
+ {
+     errlHndl_t err = NULL;
+-
+-    TargetHandleList procs;
++    TargetHandleList  procs;
+     getTargetService().getAllChips(procs, TYPE_PROC);
+     TargetHandleList::iterator it = procs.begin();
+ 
++
+     while(it != procs.end())
+     {
+         uint64_t mask = 0;
+@@ -172,12 +179,10 @@ errlHndl_t ServiceCommon::configureInterrupts(
+ 
+         #ifndef __HOSTBOOT_RUNTIME
+         // enable attentions in ipoll mask
+-
+         mask = HostMask::nonHost();
+         mask |= HostMask::host();
+ 
+         // this doesn't have an and/or reg for some reason...
+-
+         err = modifyScom(*it,
+                          IPOLL::address,
+                          i_mode == UP ? ~mask : mask,
+@@ -187,6 +192,76 @@ errlHndl_t ServiceCommon::configureInterrupts(
+         {
+             break;
+         }
++
++        #else  // HOSTBOOT_RUNTIME
++
++        if (i_mode == UP)
++        {
++            HwasState         l_functional;
++            uint64_t          l_mciAct0 = 0;
++            uint64_t          l_mciAct1 = 0;
++            uint64_t          l_mciBitMask = 0;
++            TargetHandleList  l_mcsList;
++            // Get list of MCS units associated with this proc
++            getTargetService().getMcsList( *it, l_mcsList );
++
++            // We need to set/clear mask bits in the MCIFIRs that
++            // are associated with host attentions.  This should
++            // cause interrupts to re-occur if they had happened
++            // prior to starting the opal-prd application.
++            TargetHandleList::iterator  l_mcsIt = l_mcsList.begin();
++
++            while(l_mcsIt != l_mcsList.end())
++            {
++                // Make sure functional prior to using
++                if (!((*l_mcsIt)->tryGetAttr<ATTR_HWAS_STATE>(l_functional)))
++                {
++                    // Can't tell if functional so skip this MCS
++                    break;
++                }
++
++                if ( !(l_functional.functional) )
++                {
++                    // Not functional MCS so skip it
++                    break;
++                }
++
++                // Read ACTION registers to see if HOST ATTN
++                err = getScom(*l_mcsIt, MCIFIRACT0, l_mciAct0);
++
++                if (NULL == err)
++                {
++                    err = getScom(*l_mcsIt, MCIFIRACT1, l_mciAct1);
++                }
++
++                if (NULL == err)
++                {
++                    // Create bit mask we will use to write to MCIFIR
++                    // (ACT0=1, ACT1=0) indicate bits we want
++                    l_mciBitMask = l_mciAct0 & ~l_mciAct1;
++                    // Set mask bits
++                    err = putScom(*l_mcsIt, MCIFIRMASK_OR, l_mciBitMask);
++                }
++
++                if (NULL == err)
++                {
++                    // Clear mask bits
++                    err = putScom(*l_mcsIt, MCIFIRMASK_AND, ~l_mciBitMask);
++                }
++
++                // Commit any failure we had and move to next MCS unit
++                if (NULL != err)
++                {
++                    errlCommit(err, ATTN_COMP_ID);
++                }
++
++                l_mcsIt++;
++
++            } // end while on MCS units
++
++            l_mcsList.clear();
++        } // end if UP MODE -- enabling
++
+         #endif //__HOSTBOOT_RUNTIME
+ 
+         ++it;
+-- 
+1.8.2.2
+
diff --git a/openpower/package/hostboot/hostboot-0009-targeting-support-for-backplane-VPD.patch b/openpower/package/hostboot/hostboot-0009-targeting-support-for-backplane-VPD.patch
deleted file mode 100644
index 5779f22..0000000
--- a/openpower/package/hostboot/hostboot-0009-targeting-support-for-backplane-VPD.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From bc07c585c41d4c6119d8608af27ab7ad1acdaab8 Mon Sep 17 00:00:00 2001
-From: Mike Baiocchi <baiocchi@us.ibm.com>
-Date: Wed, 22 Apr 2015 10:31:08 -0500
-Subject: [PATCH] Add targeting support for backplane VPD
-
-Only the targeting support required by "Updated VPD_REC_NUM numbering"
-
-Change-Id: Ifa095f719b35de2cfae9344496dee63aea190334
-RTC: 118373
----
- src/usr/targeting/common/xmltohb/target_types.xml | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/src/usr/targeting/common/xmltohb/target_types.xml b/src/usr/targeting/common/xmltohb/target_types.xml
-index 82ec014..759b73e 100644
---- a/src/usr/targeting/common/xmltohb/target_types.xml
-+++ b/src/usr/targeting/common/xmltohb/target_types.xml
-@@ -913,6 +913,8 @@
-     <attribute><id>FRU_ID</id></attribute>
-     <attribute><id>TPM_PRIMARY_INFO</id></attribute>
-     <attribute><id>TPM_BACKUP_INFO</id></attribute>
-+    <attribute><id>EEPROM_VPD_PRIMARY_INFO</id></attribute>
-+    <attribute><id>VPD_REC_NUM</id></attribute>
- </targetType>
- 
- <targetType>
--- 
-1.8.2.2
-
diff --git a/openpower/package/hostboot/hostboot-0010-PRD-getBusEndpoints-parameter-issue.patch b/openpower/package/hostboot/hostboot-0010-PRD-getBusEndpoints-parameter-issue.patch
deleted file mode 100644
index 07a64bb..0000000
--- a/openpower/package/hostboot/hostboot-0010-PRD-getBusEndpoints-parameter-issue.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From 82374feb7e8ee67f254b7d8ec657a9239b622975 Mon Sep 17 00:00:00 2001
-From: Zane Shelley <zshelle@us.ibm.com>
-Date: Thu, 23 Apr 2015 11:18:12 -0500
-Subject: [PATCH 1/2] PRD: getBusEndpoints() parameter issue
-
-Change-Id: I947eeb506337f9c2fb8f845bbe04a20fb8b62bde
-CQ: SW304932
----
- .../prdf/common/plat/pegasus/prdfCalloutUtil.C     |    2 +-
- .../prdf/common/plat/pegasus/prdfCalloutUtil.H     |    4 ++--
- 2 files changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCalloutUtil.C b/src/usr/diag/prdf/common/plat/pegasus/prdfCalloutUtil.C
-index f09ec6c..67941d6 100644
---- a/src/usr/diag/prdf/common/plat/pegasus/prdfCalloutUtil.C
-+++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCalloutUtil.C
-@@ -229,7 +229,7 @@ TargetHandleList getConnectedDimms( TargetHandle_t i_mba,
- //------------------------------------------------------------------------------
- 
- int32_t getBusEndpoints( ExtensibleChip * i_chip,
--                         TargetHandle_t o_rxTrgt, TargetHandle_t o_txTrgt,
-+                         TargetHandle_t & o_rxTrgt, TargetHandle_t & o_txTrgt,
-                          TYPE i_busType, uint32_t i_busPos )
- {
-     #define PRDF_FUNC "[CalloutUtil::getBusEndpoints] "
-diff --git a/src/usr/diag/prdf/common/plat/pegasus/prdfCalloutUtil.H b/src/usr/diag/prdf/common/plat/pegasus/prdfCalloutUtil.H
-index fa3e843..502467b 100644
---- a/src/usr/diag/prdf/common/plat/pegasus/prdfCalloutUtil.H
-+++ b/src/usr/diag/prdf/common/plat/pegasus/prdfCalloutUtil.H
-@@ -136,8 +136,8 @@ TARGETING::TargetHandleList getConnectedDimms( TARGETING::TargetHandle_t i_mba,
-  *
-  */
- int32_t getBusEndpoints( ExtensibleChip * i_chip,
--                         TARGETING::TargetHandle_t o_rxTrgt,
--                         TARGETING::TargetHandle_t o_txTrgt,
-+                         TARGETING::TargetHandle_t & o_rxTrgt,
-+                         TARGETING::TargetHandle_t & o_txTrgt,
-                          TARGETING::TYPE i_busType = TARGETING::TYPE_NA,
-                          uint32_t i_busPos = 0 );
- 
--- 
-1.7.9.5
-
diff --git a/openpower/package/hostboot/hostboot-0010-Remove-gard-actions-for-memory-plugging-errors.patch b/openpower/package/hostboot/hostboot-0010-Remove-gard-actions-for-memory-plugging-errors.patch
new file mode 100644
index 0000000..ef2a896
--- /dev/null
+++ b/openpower/package/hostboot/hostboot-0010-Remove-gard-actions-for-memory-plugging-errors.patch
@@ -0,0 +1,764 @@
+From c53b40e0dcc250d75a159389e099dd40b64e5468 Mon Sep 17 00:00:00 2001
+From: Dan Crowell <dcrowell@us.ibm.com>
+Date: Wed, 27 May 2015 16:39:23 -0500
+Subject: [PATCH] Remove gard actions for memory plugging errors
+
+Modified errors related to unsupported or invalid dimm
+configurations to no longer gard any hardware.
+
+Change-Id: I67459425e973ad1c6f4cf95ccd164b73bdd46a80
+---
+ .../mss_eff_config/memory_mss_eff_config.xml       | 208 +++++----------------
+ .../memory_mss_eff_config_termination.xml          |  69 +------
+ 2 files changed, 50 insertions(+), 227 deletions(-)
+
+diff --git a/src/usr/hwpf/hwp/mc_config/mss_eff_config/memory_mss_eff_config.xml b/src/usr/hwpf/hwp/mc_config/mss_eff_config/memory_mss_eff_config.xml
+index ed1de55..c6a2d37 100644
+--- a/src/usr/hwpf/hwp/mc_config/mss_eff_config/memory_mss_eff_config.xml
++++ b/src/usr/hwpf/hwp/mc_config/mss_eff_config/memory_mss_eff_config.xml
+@@ -5,7 +5,7 @@
+ <!--                                                                        -->
+ <!-- OpenPOWER HostBoot Project                                             -->
+ <!--                                                                        -->
+-<!-- Contributors Listed Below - COPYRIGHT 2013,2014                        -->
++<!-- Contributors Listed Below - COPYRIGHT 2013,2015                        -->
+ <!-- [+] International Business Machines Corp.                              -->
+ <!--                                                                        -->
+ <!--                                                                        -->
+@@ -22,7 +22,7 @@
+ <!-- permissions and limitations under the License.                         -->
+ <!--                                                                        -->
+ <!-- IBM_PROLOG_END_TAG                                                     -->
+-<!-- $Id: memory_mss_eff_config.xml,v 1.3 2014/10/20 22:12:59 asaetow Exp $ -->
++<!-- $Id: memory_mss_eff_config.xml,v 1.4 2015-05-27 19:56:31 asaetow Exp $ -->
+ <!-- For file ../../ipl/fapi/mss_eff_config.C -->
+ <!-- // *! OWNER NAME  : Anuwat Saetow     Email: asaetow@us.ibm.com -->
+ <!-- // *! BACKUP NAME : Mark Bellows      Email: bellows@us.ibm.com -->
+@@ -47,9 +47,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -71,9 +68,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -98,9 +92,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -125,9 +116,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -169,10 +157,10 @@
+     <description>Plug rule violation, one position is empty but other are present
+         </description>
+     <FFDC>TARGET_MBA</FFDC>
+-    <ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_0_0</ffdc>
+-    <ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_0_1</ffdc>
+-    <ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_1_0</ffdc>
+-    <ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_1_1</ffdc>
++	<ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_0_0</ffdc>
++	<ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_0_1</ffdc>
++	<ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_1_0</ffdc>
++	<ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_1_1</ffdc>
+     <callout>
+         <procedure>MEMORY_PLUGGING_ERROR</procedure>
+         <priority>HIGH</priority>
+@@ -186,10 +174,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-        <priority>HIGH</priority>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -198,10 +182,10 @@
+     <description>Plug rule violation, sides do not match
+         </description>
+     <FFDC>TARGET_MBA</FFDC>
+-    <ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_0_0</ffdc>
+-    <ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_0_1</ffdc>
+-    <ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_1_0</ffdc>
+-    <ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_1_1</ffdc>
++	<ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_0_0</ffdc>
++	<ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_0_1</ffdc>
++	<ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_1_0</ffdc>
++	<ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_1_1</ffdc>
+ 
+     <callout>
+         <procedure>MEMORY_PLUGGING_ERROR</procedure>
+@@ -216,10 +200,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-        <priority>HIGH</priority>
+-    </gard>
+ </hwpError>
+ 
+ 
+@@ -229,10 +209,10 @@
+     <description>Plug rule violation,  top and bottom do not match
+         </description>
+     <FFDC>TARGET_MBA</FFDC>
+-    <ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_0_0</ffdc>
+-    <ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_0_1</ffdc>
+-    <ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_1_0</ffdc>
+-    <ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_1_1</ffdc>
++	<ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_0_0</ffdc>
++	<ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_0_1</ffdc>
++	<ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_1_0</ffdc>
++	<ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_1_1</ffdc>
+ 
+     <callout>
+         <procedure>MEMORY_PLUGGING_ERROR</procedure>
+@@ -247,10 +227,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-        <priority>HIGH</priority>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -259,10 +235,10 @@
+     <description>Incompatable DRAM generation 
+         </description>
+     <FFDC>TARGET_MBA</FFDC>
+-    <ffdc>DRAM_DEVICE_TYPE_0_0</ffdc>
+-    <ffdc>DRAM_DEVICE_TYPE_0_1</ffdc>
+-    <ffdc>DRAM_DEVICE_TYPE_1_0</ffdc>
+-    <ffdc>DRAM_DEVICE_TYPE_1_1</ffdc>
++	<ffdc>DRAM_DEVICE_TYPE_0_0</ffdc>
++	<ffdc>DRAM_DEVICE_TYPE_0_1</ffdc>
++	<ffdc>DRAM_DEVICE_TYPE_1_0</ffdc>
++	<ffdc>DRAM_DEVICE_TYPE_1_1</ffdc>
+ 
+     <callout>
+         <procedure>MEMORY_PLUGGING_ERROR</procedure>
+@@ -277,10 +253,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-        <priority>HIGH</priority>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -289,10 +261,10 @@
+     <description>Incompatable DIMM type
+         </description>
+     <FFDC>TARGET_MBA</FFDC>
+-    <ffdc>MODULE_TYPE_0_0</ffdc>
+-    <ffdc>MODULE_TYPE_0_1</ffdc>
+-    <ffdc>MODULE_TYPE_1_0</ffdc>
+-    <ffdc>MODULE_TYPE_1_1</ffdc>
++	<ffdc>MODULE_TYPE_0_0</ffdc>
++	<ffdc>MODULE_TYPE_0_1</ffdc>
++	<ffdc>MODULE_TYPE_1_0</ffdc>
++	<ffdc>MODULE_TYPE_1_1</ffdc>
+ 
+     <callout>
+         <procedure>MEMORY_PLUGGING_ERROR</procedure>
+@@ -307,10 +279,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-        <priority>HIGH</priority>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -319,10 +287,10 @@
+     <description>Incompatable DIMM ranks
+         </description>
+     <FFDC>TARGET_MBA</FFDC>
+-    <ffdc>NUM_RANKS_0_0</ffdc>
+-    <ffdc>NUM_RANKS_0_1</ffdc>
+-    <ffdc>NUM_RANKS_1_0</ffdc>
+-    <ffdc>NUM_RANKS_1_1</ffdc>
++	<ffdc>NUM_RANKS_0_0</ffdc>
++	<ffdc>NUM_RANKS_0_1</ffdc>
++	<ffdc>NUM_RANKS_1_0</ffdc>
++	<ffdc>NUM_RANKS_1_1</ffdc>
+ 
+     <callout>
+         <procedure>MEMORY_PLUGGING_ERROR</procedure>
+@@ -337,10 +305,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-        <priority>HIGH</priority>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -349,10 +313,10 @@
+     <description>Incompatable DIMM banks
+         </description>
+     <FFDC>TARGET_MBA</FFDC>
+-    <ffdc>SDRAM_BANKS_0_0</ffdc>
+-    <ffdc>SDRAM_BANKS_0_1</ffdc>
+-    <ffdc>SDRAM_BANKS_1_0</ffdc>
+-    <ffdc>SDRAM_BANKS_1_1</ffdc>
++	<ffdc>SDRAM_BANKS_0_0</ffdc>
++	<ffdc>SDRAM_BANKS_0_1</ffdc>
++	<ffdc>SDRAM_BANKS_1_0</ffdc>
++	<ffdc>SDRAM_BANKS_1_1</ffdc>
+ 
+     <callout>
+         <procedure>MEMORY_PLUGGING_ERROR</procedure>
+@@ -367,10 +331,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-        <priority>HIGH</priority>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -379,10 +339,10 @@
+     <description>Incompatable DIMM rows
+         </description>
+     <FFDC>TARGET_MBA</FFDC>
+-    <ffdc>SDRAM_ROWS_0_0</ffdc>
+-    <ffdc>SDRAM_ROWS_0_1</ffdc>
+-    <ffdc>SDRAM_ROWS_1_0</ffdc>
+-    <ffdc>SDRAM_ROWS_1_1</ffdc>
++	<ffdc>SDRAM_ROWS_0_0</ffdc>
++	<ffdc>SDRAM_ROWS_0_1</ffdc>
++	<ffdc>SDRAM_ROWS_1_0</ffdc>
++	<ffdc>SDRAM_ROWS_1_1</ffdc>
+ 
+     <callout>
+         <procedure>MEMORY_PLUGGING_ERROR</procedure>
+@@ -397,10 +357,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-        <priority>HIGH</priority>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -409,10 +365,10 @@
+     <description>Incompatable DIMM columns
+         </description>
+     <FFDC>TARGET_MBA</FFDC>
+-    <ffdc>SDRAM_COLS_0_0</ffdc>
+-    <ffdc>SDRAM_COLS_0_1</ffdc>
+-    <ffdc>SDRAM_COLS_1_0</ffdc>
+-    <ffdc>SDRAM_COLS_1_1</ffdc>
++	<ffdc>SDRAM_COLS_0_0</ffdc>
++	<ffdc>SDRAM_COLS_0_1</ffdc>
++	<ffdc>SDRAM_COLS_1_0</ffdc>
++	<ffdc>SDRAM_COLS_1_1</ffdc>
+ 
+     <callout>
+         <procedure>MEMORY_PLUGGING_ERROR</procedure>
+@@ -427,10 +383,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-        <priority>HIGH</priority>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -439,10 +391,10 @@
+     <description>Incompatable DRAM primary bus width
+         </description>
+     <FFDC>TARGET_MBA</FFDC>
+-    <ffdc>BUS_WIDTH_0_0</ffdc>
+-    <ffdc>BUS_WIDTH_0_1</ffdc>
+-    <ffdc>BUS_WIDTH_1_0</ffdc>
+-    <ffdc>BUS_WIDTH_1_1</ffdc>
++	<ffdc>BUS_WIDTH_0_0</ffdc>
++	<ffdc>BUS_WIDTH_0_1</ffdc>
++	<ffdc>BUS_WIDTH_1_0</ffdc>
++	<ffdc>BUS_WIDTH_1_1</ffdc>
+ 
+     <callout>
+         <procedure>MEMORY_PLUGGING_ERROR</procedure>
+@@ -457,10 +409,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-        <priority>HIGH</priority>
+-    </gard>
+ </hwpError>
+ 
+ 
+@@ -483,10 +431,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-        <priority>HIGH</priority>
+-    </gard>
+ </hwpError>
+ 
+ 
+@@ -496,10 +440,10 @@
+     <description>Incompatable DRAM width
+         </description>
+     <FFDC>TARGET_MBA</FFDC>
+-    <ffdc>DRAM_WIDTH_0_0</ffdc>
+-    <ffdc>DRAM_WIDTH_0_1</ffdc>
+-    <ffdc>DRAM_WIDTH_1_0</ffdc>
+-    <ffdc>DRAM_WIDTH_1_1</ffdc>
++	<ffdc>DRAM_WIDTH_0_0</ffdc>
++	<ffdc>DRAM_WIDTH_0_1</ffdc>
++	<ffdc>DRAM_WIDTH_1_0</ffdc>
++	<ffdc>DRAM_WIDTH_1_1</ffdc>
+ 
+     <callout>
+         <procedure>MEMORY_PLUGGING_ERROR</procedure>
+@@ -514,10 +458,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-        <priority>HIGH</priority>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -540,10 +480,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-        <priority>HIGH</priority>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -566,10 +502,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-        <priority>HIGH</priority>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -591,10 +523,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-        <priority>HIGH</priority>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -616,10 +544,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-        <priority>HIGH</priority>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -641,10 +565,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-        <priority>HIGH</priority>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -666,10 +586,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-        <priority>HIGH</priority>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -691,10 +607,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-        <priority>HIGH</priority>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -716,10 +628,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-        <priority>HIGH</priority>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -741,10 +649,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-        <priority>HIGH</priority>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -766,10 +670,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-        <priority>HIGH</priority>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -791,10 +691,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-        <priority>HIGH</priority>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -816,10 +712,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-        <priority>HIGH</priority>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -841,10 +733,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-        <priority>HIGH</priority>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -866,10 +754,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-        <priority>HIGH</priority>
+-    </gard>
+ </hwpError>
+ 
+ 
+diff --git a/src/usr/hwpf/hwp/mc_config/mss_eff_config/memory_mss_eff_config_termination.xml b/src/usr/hwpf/hwp/mc_config/mss_eff_config/memory_mss_eff_config_termination.xml
+index 9f3c89c..f04b0a6 100644
+--- a/src/usr/hwpf/hwp/mc_config/mss_eff_config/memory_mss_eff_config_termination.xml
++++ b/src/usr/hwpf/hwp/mc_config/mss_eff_config/memory_mss_eff_config_termination.xml
+@@ -5,7 +5,9 @@
+ <!--                                                                        -->
+ <!-- OpenPOWER HostBoot Project                                             -->
+ <!--                                                                        -->
+-<!-- COPYRIGHT International Business Machines Corp. 2013,2014              -->
++<!-- Contributors Listed Below - COPYRIGHT 2013,2015                        -->
++<!-- [+] International Business Machines Corp.                              -->
++<!--                                                                        -->
+ <!--                                                                        -->
+ <!-- Licensed under the Apache License, Version 2.0 (the "License");        -->
+ <!-- you may not use this file except in compliance with the License.       -->
+@@ -20,7 +22,7 @@
+ <!-- permissions and limitations under the License.                         -->
+ <!--                                                                        -->
+ <!-- IBM_PROLOG_END_TAG                                                     -->
+-<!-- $Id: memory_mss_eff_config_termination.xml,v 1.2 2014/04/07 23:02:10 lapietra Exp $ -->
++<!-- $Id: memory_mss_eff_config_termination.xml,v 1.3 2015-05-27 20:02:29 asaetow Exp $ -->
+ <!-- For file ../../ipl/fapi/mss_eff_config_termination.C -->
+ <!-- // *! OWNER NAME  : Dave Cadigan      Email: dcadiga@us.ibm.com -->
+ <!-- // *! BACKUP NAME : Anuwat Saetow     Email: asaetow@us.ibm.com -->
+@@ -195,9 +197,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -220,9 +219,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-    </gard>
+ </hwpError>
+ <!-- *********************************************************************** -->
+   <hwpError>
+@@ -245,9 +241,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -271,9 +264,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -297,9 +287,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -323,9 +310,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -349,9 +333,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -374,9 +355,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -400,9 +378,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -425,9 +400,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -450,9 +422,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -476,9 +445,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -497,9 +463,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -523,9 +486,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-    </gard>
+ </hwpError>
+ <!-- *********************************************************************** -->
+   <hwpError>
+@@ -650,9 +610,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -675,9 +632,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -699,9 +653,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-    </gard>
+ </hwpError>
+ 
+ 
+@@ -724,9 +675,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -750,9 +698,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -820,9 +765,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-    </gard>
+ </hwpError>
+ 
+ <!-- *********************************************************************** -->
+@@ -845,9 +787,6 @@
+         <target>TARGET_MBA</target>
+     </deconfigure>
+ 
+-    <gard>
+-        <target>TARGET_MBA</target>
+-    </gard>
+ </hwpError>
+ 
+ </hwpErrors>
+-- 
+2.3.0
+
diff --git a/openpower/package/hostboot/hostboot-0010-add-support-backplane-vpd.patch b/openpower/package/hostboot/hostboot-0010-add-support-backplane-vpd.patch
new file mode 100644
index 0000000..e51afbf
--- /dev/null
+++ b/openpower/package/hostboot/hostboot-0010-add-support-backplane-vpd.patch
@@ -0,0 +1,2271 @@
+From 9597cf58b44fd0c16da9d3592e8fd586a4dbf04d Mon Sep 17 00:00:00 2001
+From: Bill Schwartz <whs@us.ibm.com>
+Date: Fri, 27 Feb 2015 15:41:10 -0600
+Subject: [PATCH] Add support for backplane VPD
+
+Replace the temporary use of mem buf to access planar vpd with new
+planar vpd interfaces.
+
+Change-Id: I24cda4d713806330a9f61d588006d63966f92550
+RTC: 118373
+Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/16326
+Tested-by: Jenkins Server
+Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
+---
+ src/include/usr/devicefw/userif.H                  |  23 +
+ src/include/usr/vpd/cvpdenums.H                    |   1 -
+ src/include/usr/vpd/pvpdenums.H                    |  96 ++++
+ src/include/usr/vpd/vpd_if.H                       |   8 +
+ src/include/usr/vpd/vpdreasoncodes.H               |   4 +
+ src/usr/devtree/bld_devtree.C                      |  85 ++--
+ src/usr/hwas/hwasPlat.C                            |   6 +-
+ src/usr/hwas/hwasPlatCallout.C                     |   6 +-
+ src/usr/i2c/eepromdd.C                             |   5 +
+ src/usr/ipmi/ipmifruinv.C                          | 502 +++++++++++++--------
+ src/usr/ipmi/ipmifruinvprvt.H                      | 112 ++++-
+ src/usr/targeting/common/xmltohb/target_types.xml  |   2 +
+ .../targeting/common/xmltohb/target_types_hb.xml   |   5 +
+ src/usr/vpd/HBconfig                               |  27 ++
+ src/usr/vpd/cvpd.C                                 |  36 +-
+ src/usr/vpd/cvpd.H                                 |  22 +-
+ src/usr/vpd/ipvpd.C                                |  50 +-
+ src/usr/vpd/ipvpd.H                                |  22 +-
+ src/usr/vpd/pvpd.C                                 | 369 +++++++++++++++
+ src/usr/vpd/pvpd.H                                 | 149 ++++++
+ src/usr/vpd/vpd.C                                  |  17 +-
+ src/usr/vpd/vpd.H                                  |   1 +
+ src/usr/vpd/vpd.mk                                 |   5 +-
+ 23 files changed, 1307 insertions(+), 246 deletions(-)
+ create mode 100644 src/include/usr/vpd/pvpdenums.H
+ create mode 100644 src/usr/vpd/pvpd.C
+ create mode 100644 src/usr/vpd/pvpd.H
+
+diff --git a/src/include/usr/devicefw/userif.H b/src/include/usr/devicefw/userif.H
+index 6d041f2..eac5366 100644
+--- a/src/include/usr/devicefw/userif.H
++++ b/src/include/usr/devicefw/userif.H
+@@ -61,6 +61,7 @@ namespace DeviceFW
+         GPIO,
+         LPC,
+         IPMIBT,    // As opposed to other phy's
++        PVPD,
+ 
+         LAST_ACCESS_TYPE,
+     };
+@@ -166,6 +167,28 @@ namespace DeviceFW
+             static_cast<uint64_t>(( i_location ))
+ 
+     /**
++     * Construct the device addressing parameters for the PVPD device ops.
++     * @param[in] i_record - The enumeration of the PVPD record to access.
++     * @param[in] i_keyword - The enumeration of the PVPD keyword, located
++     *      within the i_record Record to access.
++     */
++    #define DEVICE_PVPD_ADDRESS( i_record, i_keyword )\
++        DEVICE_PVPD_FORCE_ADDRESS( i_record, i_keyword, VPD::AUTOSELECT )
++
++    /**
++     * Construct the device addressing parameters for the PVPD device ops.
++     * @param[in] i_record - The enumeration of the PVPD record to access.
++     * @param[in] i_keyword - The enumeration of the PVPD keyword, located
++     *      within the i_record Record to access.
++     * @param[in] i_location - The location of the data (PNOR/SEEPROM)
++            see vpd_if.H
++     */
++    #define DEVICE_PVPD_FORCE_ADDRESS( i_record, i_keyword, i_location )\
++        DeviceFW::PVPD, static_cast<uint64_t>(( i_record )),\
++            static_cast<uint64_t>(( i_keyword )),\
++            static_cast<uint64_t>(( i_location ))
++
++    /**
+      * Construct the device addressing parameters for the SCAN device ops.
+      * @param[in] i_ring - The ring address to scan
+      * @param[in] i_ringlen - The length of the ring to scan in bits
+diff --git a/src/include/usr/vpd/cvpdenums.H b/src/include/usr/vpd/cvpdenums.H
+index 4b5adb2..79b8109 100644
+--- a/src/include/usr/vpd/cvpdenums.H
++++ b/src/include/usr/vpd/cvpdenums.H
+@@ -45,7 +45,6 @@ namespace CVPD
+         OPFR        = 0x05,
+         VNDR        = 0x06,
+         SPDX        = 0x07,
+-        OSYS        = 0x08,
+         // Last Record
+         CVPD_LAST_RECORD,
+         CVPD_TEST_RECORD,   // Test purposes ONLY!
+diff --git a/src/include/usr/vpd/pvpdenums.H b/src/include/usr/vpd/pvpdenums.H
+new file mode 100644
+index 0000000..acf3bbd
+--- /dev/null
++++ b/src/include/usr/vpd/pvpdenums.H
+@@ -0,0 +1,96 @@
++/* IBM_PROLOG_BEGIN_TAG                                                   */
++/* This is an automatically generated prolog.                             */
++/*                                                                        */
++/* $Source: src/include/usr/vpd/pvpdenums.H $                             */
++/*                                                                        */
++/* OpenPOWER HostBoot Project                                             */
++/*                                                                        */
++/* Contributors Listed Below - COPYRIGHT 2013,2015                        */
++/* [+] International Business Machines Corp.                              */
++/*                                                                        */
++/*                                                                        */
++/* Licensed under the Apache License, Version 2.0 (the "License");        */
++/* you may not use this file except in compliance with the License.       */
++/* You may obtain a copy of the License at                                */
++/*                                                                        */
++/*     http://www.apache.org/licenses/LICENSE-2.0                         */
++/*                                                                        */
++/* Unless required by applicable law or agreed to in writing, software    */
++/* distributed under the License is distributed on an "AS IS" BASIS,      */
++/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or        */
++/* implied. See the License for the specific language governing           */
++/* permissions and limitations under the License.                         */
++/*                                                                        */
++/* IBM_PROLOG_END_TAG                                                     */
++#ifndef __PVPDENUMS_H
++#define __PVPDENUMS_H
++
++#include <vpd/ipvpdenums.H>
++
++namespace PVPD
++{
++
++    /**
++     * @brief Enumeration for the PVPD Records that contain
++     *       the keyword enumerations below.
++     *
++     */
++    enum pvpdRecord
++    {
++        PVPD_FIRST_RECORD   = 0x00,
++        VINI        = PVPD_FIRST_RECORD,
++        OSYS        = 0x01,
++        OPFR        = 0x02,
++        VNDR        = 0x03,
++        // Last Record
++        PVPD_LAST_RECORD,
++        PVPD_TEST_RECORD,   // Test purposes ONLY!
++
++        //Start common IPVPD enums
++        PVPD_INVALID_RECORD = IPVPD::INVALID_RECORD,
++    };
++
++    /**
++     * @brief Enumerations for PVPD keywords that can be
++     *       accessed in the PVPD.
++     */
++    enum pvpdKeyword
++    {
++        PVPD_FIRST_KEYWORD      = 0x00,
++        pdI         = PVPD_FIRST_KEYWORD,
++        B3         = 0x01,
++        B4         = 0x02,
++        B7         = 0x03,
++        CC         = 0x04,
++        CE         = 0x05,
++        CT         = 0x06,
++        DR         = 0x07,
++        ET         = 0x08,
++        FN         = 0x09,
++        HE         = 0x0a,
++        HW         = 0x0b,
++        IN         = 0x0c,
++        MM         = 0x0d,
++        PF         = 0x0e,
++        PN         = 0x0f,
++        RT         = 0x10,
++        SN         = 0x11,
++        SS         = 0x12,
++        VD         = 0x13,
++        VN         = 0x14,
++        VP         = 0x15,
++        VS         = 0x16,
++        VZ         = 0x17,
++
++        // Last Keyword
++        PVPD_LAST_KEYWORD,
++        PVPD_TEST_KEYWORD,  // Test purposes ONLY!
++
++        //Start common IPVPD enums
++        FULL_RECORD = IPVPD::FULL_RECORD,
++        PVPD_INVALID_KEYWORD    = IPVPD::INVALID_KEYWORD,
++    };
++
++};  // end PVPD
++
++#endif
+diff --git a/src/include/usr/vpd/vpd_if.H b/src/include/usr/vpd/vpd_if.H
+index 0b3298a..d3915ee 100644
+--- a/src/include/usr/vpd/vpd_if.H
++++ b/src/include/usr/vpd/vpd_if.H
+@@ -71,6 +71,14 @@ namespace VPD
+     bool cvpdPresent ( TARGETING::Target * i_target );
+ 
+     /**
++     * @brief This function checks to see if the given pvpd target
++     *      is present
++     * @param[in] i_target - Target device to search for pvpd
++     * @return bool - true if pvpd is present, false if it is not.
++     */
++    bool pvpdPresent ( TARGETING::Target * i_target );
++
++    /**
+      * @brief This function checks if the PNOR cache for this target is in
+      *      sync with the SEEPROM, if not it loads the PNOR cache from SEEPROM.
+      * @param[in] i_target - Target device
+diff --git a/src/include/usr/vpd/vpdreasoncodes.H b/src/include/usr/vpd/vpdreasoncodes.H
+index 88668b7..2cfe8a6 100644
+--- a/src/include/usr/vpd/vpdreasoncodes.H
++++ b/src/include/usr/vpd/vpdreasoncodes.H
+@@ -61,6 +61,9 @@ enum vpdModuleId
+     VPD_IPVPD_LOAD_PNOR                     = 0x33,
+     VPD_IPVPD_GET_RECORD_LIST_SEEPROM       = 0x34,
+ 
++    // PVPD
++    VPD_PVPD_PRESENCEDETECT                 = 0x50,
++
+     // DIMM SPD
+     VPD_SPD_GET_KEYWORD_VALUE               = 0x61,
+     VPD_SPD_GET_VALUE                       = 0x62,
+@@ -131,6 +134,7 @@ enum vpdReasonCode
+     VPD_UNEXPECTED_TARGET_TYPE          = VPD_COMP_ID | 0x33,
+     VPD_WRITE_DEST_UNRESOLVED           = VPD_COMP_ID | 0x34,
+     VPD_CACHE_SIZE_EXCEEDED             = VPD_COMP_ID | 0x35,
++    VPD_INVALID_LENGTH                  = VPD_COMP_ID | 0x36,
+ };
+ 
+ 
+diff --git a/src/usr/devtree/bld_devtree.C b/src/usr/devtree/bld_devtree.C
+index a8ece97..a311efe 100644
+--- a/src/usr/devtree/bld_devtree.C
++++ b/src/usr/devtree/bld_devtree.C
+@@ -45,7 +45,7 @@
+ #include <fsi/fsiif.H>
+ #include <config.h>
+ #include <devicefw/userif.H>
+-#include <vpd/cvpdenums.H>
++#include <vpd/pvpdenums.H>
+ #include <i2c/i2cif.H>
+ #include <i2c/eepromif.H>
+ #include <ipmi/ipmisensor.H>
+@@ -351,12 +351,9 @@ void add_i2c_info( const TARGETING::Target* i_targ,
+                 }
+                 else if( l_type == TARGETING::TYPE_MEMBUF )
+                 {
+-                    //@fixme-RTC:118373-Remove Hab/Palm workaround
+-                    //   once node vpd is supported
+-                    sprintf( l_label, "system-vpd" );
+-                    /*sprintf( l_label, "memb-vpd-%d",
++                    sprintf( l_label, "memb-vpd-%d",
+                              eep2->assocTarg
+-                             ->getAttr<TARGETING::ATTR_POSITION>() );*/
++                             ->getAttr<TARGETING::ATTR_POSITION>() );
+                 }
+                 else if( l_type == TARGETING::TYPE_DIMM )
+                 {
+@@ -1054,39 +1051,46 @@ errlHndl_t bld_fdt_system(devTree * i_dt, bool i_smallTree)
+            3) Default to 'unknown'
+          */
+         bool foundvpd = false;
+-        // TODO RTC 118373 -- update to account for firestone/memory riser
+-        TARGETING::TargetHandleList l_membTargetList;
+-        getAllChips(l_membTargetList, TYPE_MEMBUF);
+-
+-        //if can't find a centaur for the CVPD, default to unknown
+-        if (l_membTargetList.size())
++        TARGETING::TargetHandleList l_nodeTargetList;
++        PredicateCTM predNode(CLASS_ENC, TYPE_NODE);
++        PredicateHwas predFunctional;
++        predFunctional.functional(true);
++        PredicatePostfixExpr nodeCheckExpr;
++        nodeCheckExpr.push(&predNode).push(&predFunctional).And();
++
++        targetService().getAssociated(l_nodeTargetList, sys,
++                    TargetService::CHILD, TargetService::IMMEDIATE,
++                    &nodeCheckExpr);
++
++        //if can't find a node for the PVPD, default to unknown
++        if (l_nodeTargetList.size())
+         {
+-            TARGETING::Target * l_pMem = l_membTargetList[0];
++            TARGETING::Target * l_pNode = l_nodeTargetList[0];
+             size_t vpdSize = 0x0;
+ 
+             // Note: First read with NULL for o_buffer sets vpdSize to the
+             // correct length
+-            errhdl = deviceRead( l_pMem,
++            errhdl = deviceRead( l_pNode,
+                                  NULL,
+                                  vpdSize,
+-                                 DEVICE_CVPD_ADDRESS( CVPD::OSYS,
+-                                                      CVPD::MM ));
++                                 DEVICE_PVPD_ADDRESS( PVPD::OSYS,
++                                                      PVPD::MM ));
+ 
+             if(errhdl)
+             {
+                 TRACFCOMP(g_trac_devtree,ERR_MRK" Couldn't get OSYS:MM size for HUID=0x%.8X",
+-                          TARGETING::get_huid(l_pMem));
++                          TARGETING::get_huid(l_pNode));
+ 
+                 // Try the OPFR record
+-                errlHndl_t opfr_errhdl = deviceRead( l_pMem,
++                errlHndl_t opfr_errhdl = deviceRead( l_pNode,
+                                            NULL,
+                                            vpdSize,
+-                                           DEVICE_CVPD_ADDRESS( CVPD::OPFR,
+-                                                                CVPD::DR ));
++                                           DEVICE_PVPD_ADDRESS( PVPD::OPFR,
++                                                                PVPD::DR ));
+                 if(opfr_errhdl)
+                 {
+                     TRACFCOMP(g_trac_devtree,ERR_MRK" Couldn't get OPFR:DR size for HUID=0x%.8X",
+-                              TARGETING::get_huid(l_pMem));
++                              TARGETING::get_huid(l_pNode));
+                     delete opfr_errhdl; //delete OPFR log, VPD is just bad
+                 }
+                 else
+@@ -1095,16 +1099,16 @@ errlHndl_t bld_fdt_system(devTree * i_dt, bool i_smallTree)
+                     errhdl = NULL;
+                     char drBuf[vpdSize+1];
+                     memset(&drBuf, 0x0, (vpdSize+1)); //null terminated str
+-                    errhdl = deviceRead( l_pMem,
++                    errhdl = deviceRead( l_pNode,
+                                          reinterpret_cast<void*>( &drBuf ),
+                                          vpdSize,
+-                                         DEVICE_CVPD_ADDRESS( CVPD::OPFR,
+-                                                              CVPD::DR ));
++                                         DEVICE_PVPD_ADDRESS( PVPD::OPFR,
++                                                              PVPD::DR ));
+ 
+                     if(errhdl)
+                     {
+                         TRACFCOMP(g_trac_devtree,ERR_MRK" Couldn't read OPFR:DR for HUID=0x%.8X",
+-                                  TARGETING::get_huid(l_pMem));
++                                  TARGETING::get_huid(l_pNode));
+                     }
+                     else
+                     {
+@@ -1117,16 +1121,16 @@ errlHndl_t bld_fdt_system(devTree * i_dt, bool i_smallTree)
+             {
+                 char mmBuf[vpdSize+1];
+                 memset(&mmBuf, 0x0, (vpdSize+1)); //ensure null terminated str
+-                errhdl = deviceRead( l_pMem,
++                errhdl = deviceRead( l_pNode,
+                                      reinterpret_cast<void*>( &mmBuf ),
+                                      vpdSize,
+-                                     DEVICE_CVPD_ADDRESS( CVPD::OSYS,
+-                                                          CVPD::MM ));
++                                     DEVICE_PVPD_ADDRESS( PVPD::OSYS,
++                                                          PVPD::MM ));
+ 
+                 if(errhdl)
+                 {
+                     TRACFCOMP(g_trac_devtree,ERR_MRK" Couldn't read OSYS:MM for HUID=0x%.8X",
+-                              TARGETING::get_huid(l_pMem));
++                              TARGETING::get_huid(l_pNode));
+                 }
+                 else
+                 {
+@@ -1153,42 +1157,40 @@ errlHndl_t bld_fdt_system(devTree * i_dt, bool i_smallTree)
+            1) OSYS:SS
+            2) Default to 'unavailable'
+          */
+-        // TODO RTC 118373 -- update to account for firestone/memory riser
+         foundvpd = false;
+-        if( l_membTargetList.size() )
++        if( l_nodeTargetList.size() )
+         {
+-            // TODO RTC 118373 - Should be able to read from attribute
+-            TARGETING::Target * l_pMem = l_membTargetList[0];
++            TARGETING::Target * l_pNode = l_nodeTargetList[0];
+             size_t vpdSize = 0x0;
+ 
+             // Note: First read with NULL for o_buffer sets vpdSize to the
+             // correct length
+-            errhdl = deviceRead( l_pMem,
++            errhdl = deviceRead( l_pNode,
+                                  NULL,
+                                  vpdSize,
+-                                 DEVICE_CVPD_ADDRESS( CVPD::OSYS,
+-                                                      CVPD::SS ));
++                                 DEVICE_PVPD_ADDRESS( PVPD::OSYS,
++                                                      PVPD::SS ));
+ 
+             if(errhdl)
+             {
+                 TRACFCOMP(g_trac_devtree,ERR_MRK" Couldn't get OSYS:SS size for HUID=0x%.8X",
+-                          TARGETING::get_huid(l_pMem));
++                          TARGETING::get_huid(l_pNode));
+                 // Note - not supporting old vpd versions without OSYS here
+             }
+             else
+             {
+                 char ssBuf[vpdSize+1];
+                 memset(&ssBuf, 0x0, (vpdSize+1)); //ensure null terminated str
+-                errhdl = deviceRead( l_pMem,
++                errhdl = deviceRead( l_pNode,
+                                      reinterpret_cast<void*>( &ssBuf ),
+                                      vpdSize,
+-                                     DEVICE_CVPD_ADDRESS( CVPD::OSYS,
+-                                                          CVPD::SS ));
++                                     DEVICE_PVPD_ADDRESS( PVPD::OSYS,
++                                                          PVPD::SS ));
+ 
+                 if(errhdl)
+                 {
+                     TRACFCOMP(g_trac_devtree,ERR_MRK" Couldn't read OSYS:SS for HUID=0x%.8X",
+-                              TARGETING::get_huid(l_pMem));
++                              TARGETING::get_huid(l_pNode));
+                 }
+                 else
+                 {
+@@ -1205,7 +1207,6 @@ errlHndl_t bld_fdt_system(devTree * i_dt, bool i_smallTree)
+             delete errhdl;
+             errhdl = NULL;
+         }
+-
+         if( !foundvpd ) //serial number not found, default to unavailable
+         {
+             i_dt->addPropertyString(rootNode, "system-id", "unavailable");
+diff --git a/src/usr/hwas/hwasPlat.C b/src/usr/hwas/hwasPlat.C
+index 80c36f9..ef631b5 100644
+--- a/src/usr/hwas/hwasPlat.C
++++ b/src/usr/hwas/hwasPlat.C
+@@ -421,9 +421,13 @@ errlHndl_t platPresenceDetect(TargetHandleList &io_targets)
+             HWAS_DBG("pTarget %.8X - detected present",
+                 pTarget->getAttr<ATTR_HUID>());
+ 
+-            // on to the next target
++        // If there is planar VPD, then don't skip the presence detect.
++        // The presence detect will log any problems and load pnor.
++#if !defined(CONFIG_HAVE_PVPD)
++            // on to the next target if there is no Planar VPD
+             pTarget_it++;
+             continue;
++#endif
+         }
+ 
+         // call deviceRead() to see if they are present
+diff --git a/src/usr/hwas/hwasPlatCallout.C b/src/usr/hwas/hwasPlatCallout.C
+index 0f15082..03756a8 100644
+--- a/src/usr/hwas/hwasPlatCallout.C
++++ b/src/usr/hwas/hwasPlatCallout.C
+@@ -122,10 +122,12 @@ errlHndl_t platHandleHWCallout(
+         } // switch i_deconfigState
+ 
+         // check to see if this target is the master processor
+-        //  and if it's been deconfigured.
++        //  and if it's being deconfigured.
++        //  NOTE: will be non-functional early in IPL before discovery complete.
+         TARGETING::Target *l_masterProc;
+         TARGETING::targetService().masterProcChipTargetHandle(l_masterProc);
+-        if (i_pTarget == l_masterProc)
++        if ( (i_pTarget == l_masterProc) &&
++             (NO_DECONFIG != i_deconfigState) )
+         {
+             const TARGETING::HwasState hwasState =
+                     l_masterProc->getAttr<TARGETING::ATTR_HWAS_STATE>();
+diff --git a/src/usr/i2c/eepromdd.C b/src/usr/i2c/eepromdd.C
+index 372fcc7..b2e1c90 100755
+--- a/src/usr/i2c/eepromdd.C
++++ b/src/usr/i2c/eepromdd.C
+@@ -97,6 +97,11 @@ DEVICE_REGISTER_ROUTE( DeviceFW::WILDCARD,
+                        TARGETING::TYPE_MEMBUF,
+                        eepromPerformOp );
+ 
++// Register the perform Op with the routing code for Nodes.
++DEVICE_REGISTER_ROUTE( DeviceFW::WILDCARD,
++                       DeviceFW::EEPROM,
++                       TARGETING::TYPE_NODE,
++                       eepromPerformOp );
+ 
+ // ------------------------------------------------------------------
+ // eepromPerformOp
+diff --git a/src/usr/ipmi/ipmifruinv.C b/src/usr/ipmi/ipmifruinv.C
+index cc2f06a..49c5e7e 100644
+--- a/src/usr/ipmi/ipmifruinv.C
++++ b/src/usr/ipmi/ipmifruinv.C
+@@ -29,6 +29,7 @@
+ #include <devicefw/userif.H>
+ #include <vpd/spdenums.H>
+ #include <vpd/cvpdenums.H>
++#include <vpd/pvpdenums.H>
+ #include <targeting/common/commontargeting.H>
+ #include <targeting/common/utilFilter.H>
+ #include <errl/errlmanager.H>
+@@ -51,7 +52,17 @@ inline static bool comparePairs(
+               const std::pair<TARGETING::TargetHandle_t, uint8_t>& i_lhs,
+               const std::pair<TARGETING::TargetHandle_t, uint8_t>& i_rhs)
+ {
+-        return (i_lhs.second < i_rhs.second);
++    bool l_compare = i_lhs.second < i_rhs.second;
++
++    // in case of a tie, if the left is a Node, sort it first.
++    if (i_lhs.second == i_rhs.second)
++    {
++        if (TARGETING::TYPE_NODE==i_lhs.first->getAttr<TARGETING::ATTR_TYPE>())
++        {
++           l_compare = true;
++        }
++    }
++    return l_compare;
+ }
+ 
+ IpmiFruInv::IpmiFruInv(TARGETING::TargetHandle_t i_target)
+@@ -82,7 +93,14 @@ IpmiFruInv *IpmiFruInv::Factory(TARGETING::TargetHandleList i_targets,
+             l_fru = new procIpmiFruInv(l_target, i_updateData);
+             break;
+         case TARGETING::TYPE_MEMBUF:
+-            // @todo-RTC:117702
++            // A memory riser card will have a mem buff with a distinct FRU ID
++            l_fru = new membufIpmiFruInv(l_target, i_targets, i_updateData);
++            break;
++        case TARGETING::TYPE_NODE:
++            // When the planar eeprom is shared for planar vpd and memory vpd,
++            // the node and membufs will have the same FRU ID. The node has
++            // been sorted ahead of the membufs. The membufs are extra targets
++            // for their ECIDs.
+             l_fru = new backplaneIpmiFruInv(l_target, i_targets, i_updateData);
+             break;
+         case TARGETING::TYPE_SYS:
+@@ -425,11 +443,11 @@ errlHndl_t isdimmIpmiFruInv::buildProductInfoArea(std::vector<uint8_t> &io_data)
+         io_data.push_back(uint8_t(0)); // Empty FRU File ID bytes
+         io_data.push_back(IPMIFRUINV::END_OF_CUSTOM_FIELDS);
+ 
+-        //Finalize section formatting
+-        postFormatProcessing(io_data);
+-
+     } while (0);
+ 
++    //Finalize section formatting
++    postFormatProcessing(io_data);
++
+     if (l_errl)
+     {
+         TRACFCOMP(g_trac_ipmi,"isdimIpmiFruInv::buildProductInfoArea - Errors "
+@@ -580,11 +598,11 @@ errlHndl_t procIpmiFruInv::buildBoardInfoArea(std::vector<uint8_t> &io_data)
+         //Indicate end of custom fields
+         io_data.push_back(IPMIFRUINV::END_OF_CUSTOM_FIELDS);
+ 
+-        //Complete formatting for this data record
+-        postFormatProcessing(io_data);
+-
+     } while (0);
+ 
++    //Complete formatting for this data record
++    postFormatProcessing(io_data);
++
+     if (l_errl)
+     {
+         TRACFCOMP(g_trac_ipmi,"buildBoardInfoArea - Errors Collecting ISDimm "
+@@ -610,64 +628,18 @@ errlHndl_t procIpmiFruInv::buildMultiRecordInfoArea(
+ errlHndl_t procIpmiFruInv::addVpdData(std::vector<uint8_t> &io_data,
+                                      uint8_t i_record,
+                                      uint8_t i_keyword,
+-                                     bool i_ascii)
++                                     bool i_ascii,
++                                     bool i_typeLengthByte)
+ {
+-    size_t     l_vpdSize = 0;
+     errlHndl_t l_errl = NULL;
+ 
+-    do {
+-
+-        //First get size of data by passing NULL
+-        l_errl = deviceRead(iv_target,
+-                                      NULL,
+-                                      l_vpdSize,
+-                                      DEVICE_MVPD_ADDRESS(i_record, i_keyword));
+-
+-        if (l_errl)
+-        {
+-            TRACFCOMP(g_trac_ipmi,"procIpmiFruInv::addVpdData - Error while "
+-                      "reading MVPD keyword size");
+-            break;
+-        }
+-
+-        //Assert if vpd field is too large to fit in IPMI fru inventory format
+-        assert(l_vpdSize < IPMIFRUINV::TYPELENGTH_BYTE_ASCII);
+-
+-        if (l_vpdSize > 0)
+-        {
+-            //Determine how big data is and expand it to handle the soon to
+-            //be read VPD data
+-            uint8_t l_offset = io_data.size();
+-            io_data.resize(l_offset + 1 + l_vpdSize);
+-
+-            //Add on the data to the type/length byte indicating it is ascii
+-            // otherwise leave it as binary
+-            if (i_ascii)
+-            {
+-                io_data.at(l_offset) = l_vpdSize
+-                                       + IPMIFRUINV::TYPELENGTH_BYTE_ASCII;
+-            }
+-            else
+-            {
+-                io_data.at(l_offset) = l_vpdSize;
+-            }
+-
+-            //Read the VPD data directly into fru inventory data buffer
+-            l_errl = deviceRead(iv_target,&io_data[l_offset+1],l_vpdSize,
+-                                DEVICE_MVPD_ADDRESS(i_record, i_keyword));
+-        }
+-        else
+-        {
+-            TRACFCOMP(g_trac_ipmi,"procIpmiFruInv::addVpdData - "
+-                      " No size returned for MVPD keyword");
+-        }
+-    } while(0);
+-
+-    if (l_errl)
+-    {
+-        TRACFCOMP(g_trac_ipmi, "addVpdData - Error acquiring data from Vpd.");
+-    }
+-
++    l_errl = addCommonVpdData(iv_target,
++                              io_data,
++                              DeviceFW::MVPD,
++                              i_record,
++                              i_keyword,
++                              i_ascii,
++                              i_typeLengthByte);
+     return l_errl;
+ }
+ 
+@@ -699,8 +671,7 @@ errlHndl_t backplaneIpmiFruInv::buildChassisInfoArea(
+         preFormatProcessing(io_data, false);
+         //Set Chassis Enclosure Type - Not Ascii
+         // Also, do not include type/length byte
+-        //@fixme RTC Story 118373
+-        l_errl = addVpdData(io_data, CVPD::OSYS, CVPD::ET, false, false);
++        l_errl = addVpdData(io_data, PVPD::OSYS, PVPD::ET, false, false);
+ 
+         //Support Legacy VPD without OSYS record
+         if (l_errl)
+@@ -714,12 +685,10 @@ errlHndl_t backplaneIpmiFruInv::buildChassisInfoArea(
+             //Set default chassis type
+             io_data.push_back(IPMIFRUINV::DEFAULT_CHASSIS_TYPE);
+             //Set chassis part number - ascii formatted field
+-            //@fixme RTC Story 118373
+-            l_errl = addVpdData(io_data, CVPD::OPFR, CVPD::VP, true);
++            l_errl = addVpdData(io_data, PVPD::OPFR, PVPD::VP, true);
+             if (l_errl) { break; }
+             //Set chassis serial number - ascii formatted field
+-            //@fixme RTC Story 118373
+-            l_errl = addVpdData(io_data, CVPD::OPFR, CVPD::VS, true);
++            l_errl = addVpdData(io_data, PVPD::OPFR, PVPD::VS, true);
+             if (l_errl) { break; }
+         }
+         else
+@@ -728,13 +697,11 @@ errlHndl_t backplaneIpmiFruInv::buildChassisInfoArea(
+                       " Using NEW OSYS RECORD FOR Chassis VPD Data");
+ 
+             //Set chassis part number - ascii formatted field
+-            //@fixme RTC Story 118373
+-            l_errl = addVpdData(io_data, CVPD::OSYS, CVPD::MM, true);
++            l_errl = addVpdData(io_data, PVPD::OSYS, PVPD::MM, true);
+             if (l_errl) { break; }
+ 
+             //Set chassis serial number - ascii formatted field
+-            //@fixme RTC Story 118373
+-            l_errl = addVpdData(io_data, CVPD::OSYS, CVPD::SS, true);
++            l_errl = addVpdData(io_data, PVPD::OSYS, PVPD::SS, true);
+             if (l_errl) { break; }
+ 
+         }
+@@ -743,10 +710,11 @@ errlHndl_t backplaneIpmiFruInv::buildChassisInfoArea(
+         io_data.push_back(IPMIFRUINV::TYPELENGTH_BYTE_NULL);
+         io_data.push_back(IPMIFRUINV::END_OF_CUSTOM_FIELDS);
+ 
+-        //Complete record data formatting
+-        postFormatProcessing(io_data);
+     } while (0);
+ 
++    //Complete record data formatting
++    postFormatProcessing(io_data);
++
+     if (l_errl)
+     {
+         TRACFCOMP(g_trac_ipmi,"backplaneIpmiFruInv::buildChassisInfoArea - "
+@@ -771,67 +739,39 @@ errlHndl_t backplaneIpmiFruInv::buildBoardInfoArea(
+         io_data.push_back(0);
+ 
+         //Set Vendor Name - ascii formatted data
+-        //@fixme RTC Story 118373
+-        l_errl = addVpdData(io_data, CVPD::OPFR, CVPD::VN, true);
++        l_errl = addVpdData(io_data, PVPD::OPFR, PVPD::VN, true);
+         if (l_errl) { break; }
+ 
+         //Set Product Name - ascii formatted data
+-        //@fixme RTC Story 118373
+-        l_errl = addVpdData(io_data, CVPD::OPFR, CVPD::DR, true);
++        l_errl = addVpdData(io_data, PVPD::OPFR, PVPD::DR, true);
+         if (l_errl) { break; }
+ 
+         //Set Product Serial number - ascii formatted data
+-        //@fixme RTC Story 118373
+-        l_errl = addVpdData(io_data, CVPD::OPFR, CVPD::VS, true);
++        //TODO RTC:117702 use attribute when 122890 is available
++        l_errl = addVpdData(io_data, PVPD::OPFR, PVPD::VS, true);
+         if (l_errl) { break; }
+ 
+         //Set Product Part number - ascii formatted data
+-        //@fixme RTC Story 118373
+-        l_errl = addVpdData(io_data, CVPD::OPFR, CVPD::VP, true);
+-        if (l_errl) { break; }
++        //TODO RTC:117702 use attribute when 122890 is available
++        l_errl = addVpdData(io_data, PVPD::OPFR, PVPD::VP, true);
+ 
+         //Push Fru File ID Byte - NULL
+         io_data.push_back(IPMIFRUINV::TYPELENGTH_BYTE_NULL);
+ 
+-        bool l_setCustomData = false;
+-        // Check if we should add ECID
+-        for (TARGETING::TargetHandleList::const_iterator extraTargets_it =
+-                iv_extraTargets.begin();
+-                extraTargets_it != iv_extraTargets.end();
+-                ++extraTargets_it
+-            )
++        //Only set the ECID Data during an update scenario
++        if (iv_isUpdate == true)
+         {
+-            TARGETING::TargetHandle_t l_extraTarget = *extraTargets_it;
+-
+-            //Only set the ECID Data during an update scenario
+-            if (iv_isUpdate == true &&
+-                (l_extraTarget->getAttr<TARGETING::ATTR_TYPE>() ==
+-                                                        TARGETING::TYPE_MEMBUF))
+-            {
+-                TARGETING::ATTR_ECID_type ecidInfo;
+-                bool getEcid =
+-                      l_extraTarget->tryGetAttr<TARGETING::ATTR_ECID>(ecidInfo);
+-                if (getEcid)
+-                {
+-                    l_setCustomData = true;
+-                    addEcidData(l_extraTarget, ecidInfo, io_data);
+-                }
+-            }
++            customEcidData (iv_extraTargets, io_data);
+         }
+ 
+-        //If no Custom data was sent, an Empty Byte is needed
+-        if (!l_setCustomData)
+-        {
+-            io_data.push_back(IPMIFRUINV::TYPELENGTH_BYTE_NULL);
+-        }
+         //Indicate End of Custom Fields
+         io_data.push_back(IPMIFRUINV::END_OF_CUSTOM_FIELDS);
+ 
+-        //Complete record data formatting
+-        postFormatProcessing(io_data);
+-
+     } while (0);
+ 
++    //Complete record data formatting
++    postFormatProcessing(io_data);
++
+     if (l_errl)
+     {
+         TRACFCOMP(g_trac_ipmi,"backplaneIpmiFruInv::buildBoardInfoArea - "
+@@ -860,74 +800,17 @@ errlHndl_t backplaneIpmiFruInv::addVpdData(std::vector<uint8_t> &io_data,
+                                      uint8_t i_keyword,
+                                      bool i_ascii,
+                                      bool i_typeLengthByte)
++
+ {
+-    size_t     l_vpdSize = 0;
+     errlHndl_t l_errl = NULL;
+ 
+-    do {
+-        //First get size of data with NULL parameter
+-        l_errl = deviceRead(iv_target,
+-                                      NULL,
+-                                      l_vpdSize,
+-                                      //@fixme RTC Story 118373
+-                                      DEVICE_CVPD_ADDRESS(i_record, i_keyword));
+-
+-        if (l_errl)
+-        {
+-            TRACFCOMP(g_trac_ipmi,"backplaneIpmiFruInv::addVpdData - Error "
+-                      "while reading CVPD keyword size");
+-            break;
+-        }
+-
+-        //Assert if vpd field is too large to fit in IPMI fru inventory format
+-        assert(l_vpdSize < IPMIFRUINV::TYPELENGTH_BYTE_ASCII);
+-
+-        if (l_vpdSize > 0)
+-        {
+-            uint8_t l_offset = 0;
+-            //Add on the typelength byte if requested
+-            if (i_typeLengthByte)
+-            {
+-                //Determine how big data is and expand it to handle the soon to
+-                //be read VPD data
+-                l_offset = io_data.size();
+-                io_data.resize(l_offset + 1 + l_vpdSize);
+-                //Add on the data to the type/length byte indicating it is ascii
+-                // otherwise leave it as binary
+-                if (i_ascii)
+-                {
+-                    io_data.at(l_offset) = l_vpdSize
+-                                           + IPMIFRUINV::TYPELENGTH_BYTE_ASCII;
+-                }
+-                else
+-                {
+-                    io_data.at(l_offset) = l_vpdSize;
+-                }
+-                l_offset += 1;
+-            }
+-            else
+-            {
+-                //Determine how big data is and expand it to handle the soon to
+-                //be read VPD data
+-                l_offset = io_data.size();
+-                io_data.resize(l_offset + l_vpdSize);
+-            }
+-            //Read the VPD data directly into fru inventory data buffer
+-            l_errl = deviceRead(iv_target,&io_data[l_offset],l_vpdSize,
+-                                     DEVICE_CVPD_ADDRESS(i_record, i_keyword));
+-        }
+-        else
+-        {
+-            TRACFCOMP(g_trac_ipmi,"backplaneIpmiFruInv::addVpdData - "
+-                      " No size returned for CVPD keyword");
+-        }
+-    } while(0);
+-
+-    if (l_errl)
+-    {
+-        TRACFCOMP(g_trac_ipmi, "backplaneIpmiFruInv::addVpdData - Error "
+-                  "acquiring data from Vpd.");
+-    }
++    l_errl = addCommonVpdData(iv_target,
++                              io_data,
++                              DeviceFW::PVPD,
++                              i_record,
++                              i_keyword,
++                              i_ascii,
++                              i_typeLengthByte);
+ 
+     return l_errl;
+ }
+@@ -1106,11 +989,11 @@ errlHndl_t systemFwIpmiFruInv::buildProductInfoArea(std::vector<uint8_t>
+ 
+         io_data.push_back(IPMIFRUINV::END_OF_CUSTOM_FIELDS);
+ 
+-        //Finalize section formatting
+-        postFormatProcessing(io_data);
+-
+     } while(0);
+ 
++    //Finalize section formatting
++    postFormatProcessing(io_data);
++
+     return l_errl;
+ }
+ 
+@@ -1121,7 +1004,155 @@ errlHndl_t systemFwIpmiFruInv::buildMultiRecordInfoArea(std::vector<uint8_t>
+     return IpmiFruInv::buildEmptyArea(io_data);
+ }
+ 
++//##############################################################################
++membufIpmiFruInv::membufIpmiFruInv( TARGETING::TargetHandle_t i_target,
++                                     TARGETING::TargetHandleList i_extraTargets,
++                                     bool i_isUpdate)
++    :IpmiFruInv(i_target),
++    iv_isUpdate(i_isUpdate),
++    iv_extraTargets(i_extraTargets)
++{
++};
++
++errlHndl_t membufIpmiFruInv::buildInternalUseArea(
++                                                 std::vector<uint8_t> &io_data)
++{
++    //This section not needed for the mem buf type
++    return IpmiFruInv::buildEmptyArea(io_data);
++}
++
++errlHndl_t membufIpmiFruInv::buildChassisInfoArea(
++                                                  std::vector<uint8_t> &io_data)
++{
++    //This section not needed for the mem buf type
++    return IpmiFruInv::buildEmptyArea(io_data);
++}
++
++errlHndl_t membufIpmiFruInv::buildBoardInfoArea(
++                                              std::vector<uint8_t> &io_data)
++{
++    errlHndl_t l_errl = NULL;
++
++    do {
++        //Set formatting data that goes at the beginning of the record
++        preFormatProcessing(io_data, true);
++
++        //Set MFG Date/Time - Blank
++        io_data.push_back(0);
++        io_data.push_back(0);
++        io_data.push_back(0);
++
++        //Set Vendor Name - ascii formatted data
++        l_errl = addVpdData(io_data, CVPD::OPFR, CVPD::VN, true);
++        if (l_errl) { break; }
++
++        //Set Product Name - ascii formatted data
++        l_errl = addVpdData(io_data, CVPD::OPFR, CVPD::DR, true);
++        if (l_errl) { break; }
++
++        //Set Product Serial number - ascii formatted data
++        //TODO RTC:117702 use attribute when 122890 is available
++        l_errl = addVpdData(io_data, CVPD::OPFR, CVPD::VS, true);
++        if (l_errl) { break; }
++
++        //Set Product Part number - ascii formatted data
++        //TODO RTC:117702 use attribute when 122890 is available
++        l_errl = addVpdData(io_data, CVPD::OPFR, CVPD::VP, true);
++        if (l_errl) { break; }
++
++        //Push Fru File ID Byte - NULL
++        io_data.push_back(IPMIFRUINV::TYPELENGTH_BYTE_NULL);
++
++        //Only set the ECID Data during an update scenario
++        if (iv_isUpdate == true)
++        {
++            customEcidData (iv_extraTargets, io_data);
++        }
++
++        //Indicate End of Custom Fields
++        io_data.push_back(IPMIFRUINV::END_OF_CUSTOM_FIELDS);
++
++    } while (0);
++
++    //Complete record data formatting
++    postFormatProcessing(io_data);
++
++    if (l_errl)
++    {
++        TRACFCOMP(g_trac_ipmi,"membufIpmiFruInv::buildBoardInfoArea - "
++                  "Errors collecting board info data");
++    }
++
++    return l_errl;
++}
++
++errlHndl_t membufIpmiFruInv::buildProductInfoArea(
++                                                  std::vector<uint8_t> &io_data)
++{
++    //This section not needed for the mem buf type
++    return IpmiFruInv::buildEmptyArea(io_data);
++}
++
++errlHndl_t membufIpmiFruInv::buildMultiRecordInfoArea(
++                                                  std::vector<uint8_t> &io_data)
++{
++    //This section not needed for the mem buf type
++    return IpmiFruInv::buildEmptyArea(io_data);
++}
++
++errlHndl_t membufIpmiFruInv::addVpdData(std::vector<uint8_t> &io_data,
++                                     uint8_t i_record,
++                                     uint8_t i_keyword,
++                                     bool i_ascii,
++                                     bool i_typeLengthByte)
++{
++    errlHndl_t l_errl = NULL;
++
++    l_errl = addCommonVpdData(iv_target,
++                              io_data,
++                              DeviceFW::CVPD,
++                              i_record,
++                              i_keyword,
++                              i_ascii,
++                              i_typeLengthByte);
++    return l_errl;
++}
++//##############################################################################
++void IpmiFruInv::customEcidData(TARGETING::TargetHandleList i_extraTargets,
++                     std::vector<uint8_t> &io_data)
++{
++
++    bool l_setCustomData = false;
++    // Check if we should add ECID
++    for (TARGETING::TargetHandleList::const_iterator extraTargets_it =
++                i_extraTargets.begin();
++                extraTargets_it != i_extraTargets.end();
++                ++extraTargets_it
++            )
++    {
++        TARGETING::TargetHandle_t l_extraTarget = *extraTargets_it;
++
++        //Only set the ECID Data during an update scenario
++        if ( l_extraTarget->getAttr<TARGETING::ATTR_TYPE>() ==
++                                                        TARGETING::TYPE_MEMBUF)
++        {
++            TARGETING::ATTR_ECID_type ecidInfo;
++            bool getEcid =
++                      l_extraTarget->tryGetAttr<TARGETING::ATTR_ECID>(ecidInfo);
++            if (getEcid)
++            {
++                l_setCustomData = true;
++                addEcidData(l_extraTarget, ecidInfo, io_data);
++            }
++        }
++    }
+ 
++    //If no Custom data was sent, an Empty Byte is needed
++    if (!l_setCustomData)
++    {
++        io_data.push_back(IPMIFRUINV::TYPELENGTH_BYTE_NULL);
++    }
++}
+ 
+ void IpmiFruInv::addEcidData(const TARGETING::TargetHandle_t& i_target,
+                              const TARGETING::ATTR_ECID_type& i_ecidInfo,
+@@ -1149,6 +1180,94 @@ void IpmiFruInv::addEcidData(const TARGETING::TargetHandle_t& i_target,
+     return;
+ }
+ 
++errlHndl_t IpmiFruInv::addCommonVpdData(
++                                     const TARGETING::TargetHandle_t& i_target,
++                                     std::vector<uint8_t> &io_data,
++                                     DeviceFW::AccessType i_accessType,
++                                     uint8_t i_record,
++                                     uint8_t i_keyword,
++                                     bool i_ascii,
++                                     bool i_typeLengthByte)
++{
++    size_t     l_vpdSize = 0;
++    errlHndl_t l_errl = NULL;
++
++    do {
++        // First get size with NULL call:
++        // Bypass DEVICE_?VPD_ADDRESS inorder to maximize common code
++        l_errl = deviceRead(i_target,
++                            NULL,
++                            l_vpdSize,
++                            i_accessType,
++                            i_record,
++                            i_keyword,
++                            VPD::AUTOSELECT);
++
++        if (l_errl)
++        {
++            TRACFCOMP(g_trac_ipmi,"addCommonVpdData - Error "
++                      "while reading keyword size");
++            break;
++        }
++
++        //Assert if vpd field is too large to fit in IPMI fru inventory format
++        assert(l_vpdSize < IPMIFRUINV::TYPELENGTH_BYTE_ASCII);
++
++        if (l_vpdSize > 0)
++        {
++            uint8_t l_offset = 0;
++            //Add on the typelength byte if requested
++            if (i_typeLengthByte)
++            {
++                //Determine how big data is and expand it to handle the soon to
++                //be read VPD data
++                l_offset = io_data.size();
++                io_data.resize(l_offset + 1 + l_vpdSize);
++                //Add on the data to the type/length byte indicating it is ascii
++                // otherwise leave it as binary
++                if (i_ascii)
++                {
++                    io_data.at(l_offset) = l_vpdSize
++                                           + IPMIFRUINV::TYPELENGTH_BYTE_ASCII;
++                }
++                else
++                {
++                    io_data.at(l_offset) = l_vpdSize;
++                }
++                l_offset += 1;
++            }
++            else
++            {
++                //Determine how big data is and expand it to handle the soon to
++                //be read VPD data
++                l_offset = io_data.size();
++                io_data.resize(l_offset + l_vpdSize);
++            }
++            //Read the VPD data directly into fru inventory data buffer
++            l_errl = deviceRead(i_target,
++                            &io_data[l_offset],
++                            l_vpdSize,
++                            i_accessType,
++                            i_record,
++                            i_keyword,
++                            VPD::AUTOSELECT);
++        }
++        else
++        {
++            TRACFCOMP(g_trac_ipmi,"addCommonVpdData - "
++                      " No size returned for keyword");
++        }
++    } while(0);
++
++    if (l_errl)
++    {
++        TRACFCOMP(g_trac_ipmi, "addCommonVpdData - Error "
++                  "acquiring data from Vpd.");
++    }
++
++    return l_errl;
++}
++
+ void IPMIFRUINV::clearData(uint8_t i_fruId)
+ {
+     uint8_t l_clearData[] =
+@@ -1292,10 +1411,12 @@ void IPMIFRUINV::gatherClearData(const TARGETING::Target* i_pSys,
+                                     std::map<uint8_t,bool>& io_frusToClear)
+ {
+     TARGETING::PredicateCTM predChip(TARGETING::CLASS_CHIP);
++    TARGETING::PredicateCTM predNode(TARGETING::CLASS_ENC,
++                                     TARGETING::TYPE_NODE);
+     TARGETING::PredicateCTM predDimm(TARGETING::CLASS_LOGICAL_CARD,
+                                          TARGETING::TYPE_DIMM);
+     TARGETING::PredicatePostfixExpr checkAllExpr;
+-    checkAllExpr.push(&predChip).push(&predDimm).Or();
++    checkAllExpr.push(&predChip).push(&predNode).Or().push(&predDimm).Or();
+     TARGETING::TargetHandleList l_allPossibleFrus;
+     TARGETING::targetService().getAssociated( l_allPossibleFrus, i_pSys,
+     TARGETING::TargetService::CHILD, TARGETING::TargetService::ALL,
+@@ -1336,14 +1457,19 @@ void IPMIFRUINV::gatherSetData(const TARGETING::Target* i_pSys,
+     //                    may be needed
+     l_present.present(true);
+ 
++    checkExpr.push(&predChip);
++    TARGETING::PredicateCTM predNode(TARGETING::CLASS_ENC,
++                                     TARGETING::TYPE_NODE);
++    checkExpr.push(&predNode).Or();
++
+     //When updating data on a later pass ignore dimms
+     if (i_updateData)
+     {
+-        checkExpr.push(&predChip).push(&l_present).And();
++        checkExpr.push(&l_present).And();
+     }
+     else
+     {
+-        checkExpr.push(&predChip).push(&predDimm).Or().push(&l_present).And();
++        checkExpr.push(&predDimm).Or().push(&l_present).And();
+     }
+ 
+     TARGETING::TargetHandleList pCheckPres;
+@@ -1374,6 +1500,10 @@ void IPMIFRUINV::gatherSetData(const TARGETING::Target* i_pSys,
+     }
+ 
+     //Sort the vector by FRU_ID for later use.
++    //When the planar eeprom is shared for planar and memory buffer vpd, the
++    //node and membuffs will have the same FRU ID. For this case, sort the Node
++    //to be ahead of the mem buffs. The mem buffs will be extra targets for
++    //their ECIDs.
+     std::sort(io_potentialFrus.begin(),
+               io_potentialFrus.end(),
+               comparePairs);
+diff --git a/src/usr/ipmi/ipmifruinvprvt.H b/src/usr/ipmi/ipmifruinvprvt.H
+index 468a47f..57d6e13 100644
+--- a/src/usr/ipmi/ipmifruinvprvt.H
++++ b/src/usr/ipmi/ipmifruinvprvt.H
+@@ -186,6 +186,32 @@ class IpmiFruInv
+                      const TARGETING::ATTR_ECID_type& i_ecidInfo,
+                      std::vector<uint8_t> &io_data);
+ 
++    /**
++      * @brief Adds Ecid attribute data from extra targets as custom data
++      * @param[in] TargetHandleList, Handle to list of extra
++      *             targets associated with this FRU Record
++      * @param[in/out] data, The container to put ECID attribute data in
++      */
++    void customEcidData(TARGETING::TargetHandleList i_extraTargets,
++                     std::vector<uint8_t> &io_data);
++
++    /**
++     * @brief Retrieve vpd record keyword and add to IPMI Fru Inventory record
++     * @param[in/out] data, The container with record data
++     * @param[in] access, Indicates vpd module to access (MVPD,PVPD,CPVD)
++     * @param[in] record,  Indicates major offset in the VPD to get more data
++     * @param[in] keyword, Indicates minor offset in the VPD to get more data
++     * @param[in] ascii, Indicates if VPD field is in ascii format or not
++     */
++    errlHndl_t addCommonVpdData(
++                          const TARGETING::TargetHandle_t& i_target,
++                          std::vector<uint8_t> &io_data,
++                          DeviceFW::AccessType i_accessType,
++                          uint8_t i_record,
++                          uint8_t i_keyword,
++                          bool i_ascii,
++                          bool i_typeLengthByte);
++
+   private:
+ 
+     /**
+@@ -376,11 +402,13 @@ class procIpmiFruInv : public IpmiFruInv
+      * @param[in] record,  Indicates major offset in the VPD to get more data
+      * @param[in] keyword, Indicates minor offset in the VPD to get more data
+      * @param[in] ascii, Indicates if VPD field is in ascii format or not
++     * @param[in] typeLengthBtye, Indicates whether type length to be added.
+      */
+     errlHndl_t addVpdData(std::vector<uint8_t> &io_data,
+                           uint8_t i_record,
+                           uint8_t i_keyword,
+-                          bool i_ascii=false);
++                          bool i_ascii=false,
++                          bool i_typeLengthByte=true);
+ 
+ };
+ 
+@@ -453,13 +481,13 @@ class backplaneIpmiFruInv : public IpmiFruInv
+      * @param[in] record,  Indicates major offset in the VPD to get more data
+      * @param[in] keyword, Indicates minor offset in the VPD to get more data
+      * @param[in] ascii, Indicates if VPD field is in ascii format or not
++     * @param[in] typeLengthBtye, Indicates whether type length to be added.
+      */
+     errlHndl_t addVpdData(std::vector<uint8_t> &io_data,
+                           uint8_t i_record,
+                           uint8_t i_keyword,
+                           bool i_ascii=false,
+                           bool i_typeLengthByte=true);
+-
+ };
+ 
+ //Child class for building up System Firwmare Fru Inventory Record Data
+@@ -507,4 +535,84 @@ class systemFwIpmiFruInv : public IpmiFruInv
+ 
+ };
+ 
++//Child class for building up membuf Fru Inventory Record Data. For example,
++//for a memory riser card Fru.
++class membufIpmiFruInv : public IpmiFruInv
++{
++
++  public:
++
++     /**
++     * @brief Constructor
++     *
++     * @param[in] TargetHandle_t, Handle to target for which
++     *             to get relevant IPMI FRU Data from
++     * @param[in] TargetHandleList, Handle to list of extra
++     *             targets associated with this FRU Record
++     * @param[in] isUpdate, Indicator if the code is updating
++     *             existing data, or setting base data.
++     */
++    membufIpmiFruInv( TARGETING::TargetHandle_t i_target,
++                         TARGETING::TargetHandleList i_extraTargets,
++                         bool i_isUpdate );
++
++    /**
++     * @brief Builds the Internal Use Area Data Section
++     * @param[in/out] data, The container to put internal use area data in
++     */
++    errlHndl_t buildInternalUseArea(std::vector<uint8_t> &io_data);
++
++    /**
++     * @brief Builds the Chassis Info Area Data Section
++     * @param[in/out] data, The container to put chassis info area data in
++     */
++    errlHndl_t buildChassisInfoArea(std::vector<uint8_t> &io_data);
++
++    /**
++     * @brief Builds the Board Info Area Data Section
++     * @param[in/out] data, The container to put board info area data in
++     */
++    errlHndl_t buildBoardInfoArea(std::vector<uint8_t> &io_data);
++
++    /**
++     * @brief Builds the Product Info Area Data Section
++     * @param[in/out] data, The container to put product info area data in
++     */
++    errlHndl_t buildProductInfoArea(std::vector<uint8_t>& io_data);
++
++    /**
++     * @brief Builds the MultiRecord Info Area Data Section
++     * @param[in/out] data, The container to put multirecord info area data in
++     */
++    errlHndl_t buildMultiRecordInfoArea(std::vector<uint8_t>& io_data);
++
++  protected:
++    //Indicator if a data update is happening.
++    //True - means we are solely updating certain data
++    //False - means we are doing the initial 'base' data set
++    bool iv_isUpdate;
++
++    //The list of Extra Targets if multiple targets are
++    //associated with one FRU_ID
++    TARGETING::TargetHandleList iv_extraTargets;
++
++  private:
++
++    /**
++     * @brief Adds the specified VPD data to the data to build up a given
++     *        IPMI Fru Inventory record
++     * @param[in/out] data, The container with record data
++     * @param[in] record,  Indicates major offset in the VPD to get more data
++     * @param[in] keyword, Indicates minor offset in the VPD to get more data
++     * @param[in] ascii, Indicates if VPD field is in ascii format or not
++     * @param[in] typeLengthBtye, Indicates whether type length to be added.
++     */
++    errlHndl_t addVpdData(std::vector<uint8_t> &io_data,
++                          uint8_t i_record,
++                          uint8_t i_keyword,
++                          bool i_ascii=false,
++                          bool i_typeLengthByte=true);
++
++};
++
+ #endif
+diff --git a/src/usr/targeting/common/xmltohb/target_types.xml b/src/usr/targeting/common/xmltohb/target_types.xml
+index 82ec014..759b73e 100644
+--- a/src/usr/targeting/common/xmltohb/target_types.xml
++++ b/src/usr/targeting/common/xmltohb/target_types.xml
+@@ -913,6 +913,8 @@
+     <attribute><id>FRU_ID</id></attribute>
+     <attribute><id>TPM_PRIMARY_INFO</id></attribute>
+     <attribute><id>TPM_BACKUP_INFO</id></attribute>
++    <attribute><id>EEPROM_VPD_PRIMARY_INFO</id></attribute>
++    <attribute><id>VPD_REC_NUM</id></attribute>
+ </targetType>
+ 
+ <targetType>
+diff --git a/src/usr/targeting/common/xmltohb/target_types_hb.xml b/src/usr/targeting/common/xmltohb/target_types_hb.xml
+index b0429da..d023f50 100644
+--- a/src/usr/targeting/common/xmltohb/target_types_hb.xml
++++ b/src/usr/targeting/common/xmltohb/target_types_hb.xml
+@@ -180,6 +180,11 @@
+ </targetTypeExtension>
+ 
+ <targetTypeExtension>
++    <id>enc-node-power8</id>
++    <attribute><id>VPD_SWITCHES</id></attribute>
++</targetTypeExtension>
++
++<targetTypeExtension>
+     <id>lcard-dimm</id>
+     <attribute><id>VPD_SWITCHES</id></attribute>
+     <attribute><id>IPMI_SENSORS</id></attribute>
+diff --git a/src/usr/vpd/HBconfig b/src/usr/vpd/HBconfig
+index 1361834..1d6e6f1 100644
+--- a/src/usr/vpd/HBconfig
++++ b/src/usr/vpd/HBconfig
+@@ -33,6 +33,28 @@ config CVPD_WRITE
+     help
+         Ensure at least one of the CVPD WRITEs are enabled
+ 
++config PVPD_READ_FROM_PNOR
++    default n
++    help
++        Read Planar VPD data from PNOR cache
++
++config PVPD_READ_FROM_HW
++    default n
++    help
++        Read Planar VPD data from HW resources
++
++config PVPD_WRITE_TO_PNOR
++    default y if PVPD_READ_FROM_PNOR
++    depends on PVPD_READ_FROM_PNOR
++    help
++        Write Planar VPD data to PNOR cache
++
++config PVPD_WRITE_TO_HW
++    default y if PVPD_READ_FROM_HW
++    depends on PVPD_READ_FROM_HW
++    help
++        Write Planar VPD data to HW resources
++
+ config MVPD_READ_FROM_PNOR
+     default y
+     help
+@@ -105,6 +127,11 @@ config HAVE_MBVPD
+     help
+         Have MemBuff/Centaur VPD, PNOR or HW
+ 
++config HAVE_PVPD
++    default y if PVPD_READ_FROM_PNOR || PVPD_READ_FROM_HW
++    help
++        Have Planar VPD, PNOR or HW
++
+ config PALMETTO_PASS1
+     default n
+     help
+diff --git a/src/usr/vpd/cvpd.C b/src/usr/vpd/cvpd.C
+index 50815f1..fa37dc9 100644
+--- a/src/usr/vpd/cvpd.C
++++ b/src/usr/vpd/cvpd.C
+@@ -5,7 +5,7 @@
+ /*                                                                        */
+ /* OpenPOWER HostBoot Project                                             */
+ /*                                                                        */
+-/* Contributors Listed Below - COPYRIGHT 2013,2014                        */
++/* Contributors Listed Below - COPYRIGHT 2013,2015                        */
+ /* [+] Google Inc.                                                        */
+ /* [+] International Business Machines Corp.                              */
+ /*                                                                        */
+@@ -31,7 +31,10 @@
+ #include <trace/interface.H>
+ #include <errl/errlentry.H>
+ #include <errl/errlmanager.H>
++#include <targeting/common/commontargeting.H>
+ #include <targeting/common/targetservice.H>
++#include <targeting/common/util.H>
++#include <targeting/common/utilFilter.H>
+ #include <devicefw/driverif.H>
+ #include <vfs/vfs.H>
+ #include <vpd/vpdreasoncodes.H>
+@@ -40,6 +43,7 @@
+ #include <i2c/eepromif.H>
+ #include <config.h>
+ #include "cvpd.H"
++#include "pvpd.H"
+ #include "vpd.H"
+ 
+ // ----------------------------------------------
+@@ -233,15 +237,41 @@ IpVpdFacade(CVPD::SECTION_SIZE,
+     iv_configInfo.vpdReadHW = true;
+ #else
+     iv_configInfo.vpdReadHW = false;
+-#endif    
++#endif
+ #ifdef CONFIG_CVPD_WRITE_TO_PNOR
+     iv_configInfo.vpdWritePNOR = true;
+ #else
+     iv_configInfo.vpdWritePNOR = false;
+-#endif    
++#endif
+ #ifdef CONFIG_CVPD_WRITE_TO_HW
+     iv_configInfo.vpdWriteHW = true;
+ #else
+     iv_configInfo.vpdWriteHW = false;
+ #endif
+ }
++
++// Retrun lists of records that should be copied to pnor.
++void CvpdFacade::getRecordLists(
++                const  recordInfo* & o_primaryVpdRecords,
++                uint64_t           & o_primaryRecSize,
++                const  recordInfo* & o_altVpdRecords,
++                uint64_t           & o_altRecSize)
++{
++    // Always return this object's list
++    o_primaryVpdRecords = iv_vpdRecords;
++    o_primaryRecSize = iv_recSize;
++
++    // If the planar errprom  being shared with a mem buf,
++    // then return the pvpd list as the alternative record list.
++    // At thip point, if the membufs are be processed, then the node
++    // might not have been discovered yet. If pvpd is being cached, then
++    // include the pvpd list as the altnative.
++#ifdef CONFIG_PVPD_READ_FROM_PNOR
++    o_altVpdRecords = Singleton<PvpdFacade>::instance().iv_vpdRecords;
++    o_altRecSize = Singleton<PvpdFacade>::instance().iv_recSize;
++#else
++    o_altVpdRecords = NULL;
++    o_altRecSize = 0;
++#endif
++}
++
+diff --git a/src/usr/vpd/cvpd.H b/src/usr/vpd/cvpd.H
+index e7a2d9f..9c729c3 100644
+--- a/src/usr/vpd/cvpd.H
++++ b/src/usr/vpd/cvpd.H
+@@ -79,7 +79,6 @@ namespace CVPD
+         { OPFR, "OPFR" },
+         { VNDR, "VNDR" },
+         { SPDX, "SPDX" },
+-        { OSYS, "OSYS" },
+         // -------------------------------------------------------------------
+         // DO NOT USE!!  This is for test purposes ONLY!
+         { CVPD_TEST_RECORD, "TEST" },
+@@ -182,5 +181,26 @@ class CvpdFacade: public IpVpdFacade
+      */
+     CvpdFacade( );
+ 
++  private:
++
++    /**
++     * @brief This function returns a primary and an alternate list of records
++     *       that should be copied to pnor. The Alternate list is optional.
++     *
++     * @param[out] o_primaryVpdRecords - Pointer to array of VPD Records to use
++     *
++     * @param[out] o_primaryRecSize -    Size of o_primaryVpdRecords array
++     *
++     * @param[out] o_altVpdRecords -     Pointer to array of VPD Records to use
++     *
++     * @param[out] o_altRecSize -        Size of o_altVpdRecords array
++     *
++     */
++    void getRecordLists(
++                const  recordInfo* & o_primaryVpdRecords,
++                uint64_t           & o_primaryRecSize,
++                const  recordInfo* & o_altVpdRecords,
++                uint64_t           & o_altRecSize);
++
+ };
+ #endif  // __CVPD_H
+diff --git a/src/usr/vpd/ipvpd.C b/src/usr/vpd/ipvpd.C
+index 3da20b2..e148bc9 100644
+--- a/src/usr/vpd/ipvpd.C
++++ b/src/usr/vpd/ipvpd.C
+@@ -43,6 +43,7 @@
+ #include <vpd/ipvpdenums.H>
+ 
+ #include "vpd.H"
++#include "cvpd.H"
+ #include "ipvpd.H"
+ #include "errlud_vpd.H"
+ 
+@@ -1336,6 +1337,19 @@ IpVpdFacade::getRecordListSeeprom ( std::list<TocPtRecord> & o_recList,
+         return err;
+     }
+ 
++    // Get the list of records that should be copied to pnor.
++    // The list of records for this vpd sub class will be the primary list.
++    // If the eeprom is being shared, then their might be an alternate list
++    // to also include.
++    const  recordInfo* l_primaryVpdRecords = NULL;
++    uint64_t           l_primaryRecSize = 0;
++    const  recordInfo* l_altVpdRecords = NULL;
++    uint64_t           l_altRecSize = 0;
++    getRecordLists(l_primaryVpdRecords,
++                   l_primaryRecSize,
++                   l_altVpdRecords,
++                   l_altRecSize);
++
+     offset = le16toh( toc_rec->record_offset ) + 1;  // skip 'large resource'
+ 
+     // Read the PT keyword(s) from the VTOC
+@@ -1367,20 +1381,36 @@ IpVpdFacade::getRecordListSeeprom ( std::list<TocPtRecord> & o_recList,
+               vtoc_pt_offset < pt_len;
+               vtoc_pt_offset += sizeof(TocPtRecord) )
+         {
++            bool l_found = false;
+             toc_rec =
+                 reinterpret_cast<TocPtRecord*>(l_buffer + vtoc_pt_offset);
+ 
+             // Save record if on the list for this target
+-            for ( uint32_t rec = 0; rec < iv_recSize; rec++ )
++            for ( uint32_t rec = 0; rec < l_primaryRecSize; rec++ )
+             {
+                 if ( memcmp( toc_rec->record_name,
+-                            iv_vpdRecords[rec].recordName,
++                            l_primaryVpdRecords[rec].recordName,
+                             RECORD_BYTE_SIZE ) == 0 )
+                 {
+                     o_recList.push_back(*toc_rec);
++                    l_found = true;
+                     break;
+                 }
+             }
++            // if not found, check the alternate list
++            if (!l_found)
++            {
++                for ( uint32_t rec = 0; rec < l_altRecSize; rec++ )
++                {
++                    if ( memcmp( toc_rec->record_name,
++                            l_altVpdRecords[rec].recordName,
++                            RECORD_BYTE_SIZE ) == 0 )
++                    {
++                        o_recList.push_back(*toc_rec);
++                        break;
++                    }
++                }
++            }
+         }
+     }
+ 
+@@ -2182,3 +2212,19 @@ void IpVpdFacade::setConfigFlagsHW ( )
+         iv_configInfo.vpdWriteHW = true;
+     }
+ }
++
++// Return the lists of records that should be copied to pnor.
++// The default lists to use are this object's record list and size.
++// No Alternate.
++void IpVpdFacade::getRecordLists(
++                const  recordInfo* & o_primaryVpdRecords,
++                uint64_t           & o_primaryRecSize,
++                const  recordInfo* & o_altVpdRecords,
++                uint64_t           & o_altRecSize)
++{
++    o_primaryVpdRecords = iv_vpdRecords;
++    o_primaryRecSize = iv_recSize;
++    o_altVpdRecords = NULL;
++    o_altRecSize = 0;
++}
++
+diff --git a/src/usr/vpd/ipvpd.H b/src/usr/vpd/ipvpd.H
+index 5cc7bec..e4c4162 100644
+--- a/src/usr/vpd/ipvpd.H
++++ b/src/usr/vpd/ipvpd.H
+@@ -677,7 +677,24 @@ class IpVpdFacade
+     errlHndl_t checkBufferSize( size_t i_bufferSize,
+                                 size_t i_expectedSize,
+                                 TARGETING::Target * i_target );
+-
++    /**
++     * @brief This function returns a primary and an alternate list of records
++     *       that should be copied to pnor. The Alternate list is optional.
++     *
++     * @param[out] o_primaryVpdRecords - Pointer to array of VPD Records to use
++     *
++     * @param[out] o_primaryRecSize -    Size of o_primaryVpdRecords array
++     *
++     * @param[out] o_altVpdRecords -     Pointer to array of VPD Records to use
++     *
++     * @param[out] o_altRecSize -        Size of o_altVpdRecords array
++     *
++     */
++    virtual void getRecordLists(
++                const  recordInfo* & o_primaryVpdRecords,
++                uint64_t           & o_primaryRecSize,
++                const  recordInfo* & o_altVpdRecords,
++                uint64_t           & o_altRecSize);
+ 
+   protected: // Variables
+ 
+@@ -693,6 +710,8 @@ class IpVpdFacade
+      */
+     uint64_t iv_vpdMaxSections;
+ 
++
++  public: // Variables
+     /**
+      * @brief Pointer to array of VPD Record information
+      *
+@@ -705,6 +724,7 @@ class IpVpdFacade
+      */
+     uint64_t iv_recSize;
+ 
++  protected: // Variables
+     /**
+      * @brief Pointer to array of VPD Keyword information
+      *
+diff --git a/src/usr/vpd/pvpd.C b/src/usr/vpd/pvpd.C
+new file mode 100644
+index 0000000..ec62237
+--- /dev/null
++++ b/src/usr/vpd/pvpd.C
+@@ -0,0 +1,369 @@
++/* IBM_PROLOG_BEGIN_TAG                                                   */
++/* This is an automatically generated prolog.                             */
++/*                                                                        */
++/* $Source: src/usr/vpd/pvpd.C $                                          */
++/*                                                                        */
++/* OpenPOWER HostBoot Project                                             */
++/*                                                                        */
++/* Contributors Listed Below - COPYRIGHT 2013,2015                        */
++/* [+] International Business Machines Corp.                              */
++/*                                                                        */
++/*                                                                        */
++/* Licensed under the Apache License, Version 2.0 (the "License");        */
++/* you may not use this file except in compliance with the License.       */
++/* You may obtain a copy of the License at                                */
++/*                                                                        */
++/*     http://www.apache.org/licenses/LICENSE-2.0                         */
++/*                                                                        */
++/* Unless required by applicable law or agreed to in writing, software    */
++/* distributed under the License is distributed on an "AS IS" BASIS,      */
++/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or        */
++/* implied. See the License for the specific language governing           */
++/* permissions and limitations under the License.                         */
++/*                                                                        */
++/* IBM_PROLOG_END_TAG                                                     */
++// ----------------------------------------------
++// Includes
++// ----------------------------------------------
++#include <string.h>
++#include <endian.h>
++#include <trace/interface.H>
++#include <errl/errlentry.H>
++#include <errl/errlmanager.H>
++#include <targeting/common/targetservice.H>
++#include <targeting/common/util.H>
++#include <targeting/common/utilFilter.H>
++#include <devicefw/driverif.H>
++#include <vfs/vfs.H>
++#include <vpd/vpdreasoncodes.H>
++#include <vpd/pvpdenums.H>
++#include <vpd/vpd_if.H>
++#include <i2c/eepromif.H>
++#include <config.h>
++#include "pvpd.H"
++#include "cvpd.H"
++#include "vpd.H"
++
++// ----------------------------------------------
++// Trace definitions
++// ----------------------------------------------
++extern trace_desc_t* g_trac_vpd;
++
++
++// ------------------------
++// Macros for unit testing
++//#define TRACUCOMP(args...)  TRACFCOMP(args)
++#define TRACUCOMP(args...)
++//#define TRACSSCOMP(args...)  TRACFCOMP(args)
++#define TRACSSCOMP(args...)
++
++namespace PVPD
++{
++    // ----------------------------------------------
++    // Globals
++    // ----------------------------------------------
++    mutex_t g_mutex = MUTEX_INITIALIZER;
++
++
++    /**
++     * @brief This function will perform the steps required to do a read from
++     *      the Hostboot PVPD data.
++     *
++     * @param[in] i_opType - Operation Type - See DeviceFW::OperationType in
++     *       driververif.H
++     *
++     * @param[in] i_target - Processor Target device
++     *
++     * @param [in/out] io_buffer - Pointer to the data that was read from
++     *       the target device.  This parameter, when set to NULL, will return
++     *       the keyword size value in io_buflen.
++     *
++     * @param [in/out] io_buflen - Length of the buffer to be read or written
++     *       to/from the target.  This value should indicate the size of the
++     *       io_buffer parameter that has been allocated.  Being returned it
++     *       will indicate the number of valid bytes in the buffer being
++     *       returned. This parameter will contain the size of a keyword when
++     *       the io_buffer parameter is passed in NULL.
++     *
++     * @param [in] i_accessType - Access Type - See DeviceFW::AccessType in
++     *       usrif.H
++     *
++     * @param [in] i_args - This is an argument list for the device driver
++     *       framework.
++     *
++     * @return errlHndl_t - NULL if successful, otherwise a pointer to the
++     *       error log.
++     */
++    errlHndl_t pvpdRead ( DeviceFW::OperationType i_opType,
++                          TARGETING::Target * i_target,
++                          void * io_buffer,
++                          size_t & io_buflen,
++                          int64_t i_accessType,
++                          va_list i_args )
++    {
++        errlHndl_t err = NULL;
++        IpVpdFacade::input_args_t args;
++        args.record = ((pvpdRecord)va_arg( i_args, uint64_t ));
++        args.keyword = ((pvpdKeyword)va_arg( i_args, uint64_t ));
++        args.location = ((VPD::vpdCmdTarget)va_arg( i_args, uint64_t ));
++
++        TRACSSCOMP( g_trac_vpd,
++                    ENTER_MRK"pvpdRead()" );
++
++        err = Singleton<PvpdFacade>::instance().read(i_target,
++                                                     io_buffer,
++                                                     io_buflen,
++                                                     args);
++
++        return err;
++    }
++
++
++    /**
++     * @brief This function will perform the steps required to do a write to
++     *      the Hostboot PVPD data.
++     *
++     * @param[in] i_opType - Operation Type - See DeviceFW::OperationType in
++     *       driververif.H
++     *
++     * @param[in] i_target - Processor Target device
++     *
++     * @param [in/out] io_buffer - Pointer to the data that was read from
++     *       the target device.  It will also be used to contain data to
++     *       be written to the device.
++     *
++     * @param [in/out] io_buflen - Length of the buffer to be read or written
++     *       to/from the target.  This value should indicate the size of the
++     *       io_buffer parameter that has been allocated.  Being returned it
++     *       will indicate the number of valid bytes in the buffer being
++     *       returned.
++     *
++     * @param [in] i_accessType - Access Type - See DeviceFW::AccessType in
++     *       usrif.H
++     *
++     * @param [in] i_args - This is an argument list for the device driver
++     *       framework.
++     *
++     * @return errlHndl_t - NULL if successful, otherwise a pointer to the
++     *       error log.
++     */
++    errlHndl_t pvpdWrite ( DeviceFW::OperationType i_opType,
++                           TARGETING::Target * i_target,
++                           void * io_buffer,
++                           size_t & io_buflen,
++                           int64_t i_accessType,
++                           va_list i_args )
++    {
++        errlHndl_t err = NULL;
++        IpVpdFacade::input_args_t args;
++        args.record = ((pvpdRecord)va_arg( i_args, uint64_t ));
++        args.keyword = ((pvpdKeyword)va_arg( i_args, uint64_t ));
++        args.location = ((VPD::vpdCmdTarget)va_arg( i_args, uint64_t ));
++
++        TRACSSCOMP( g_trac_vpd,
++                    ENTER_MRK"pvpdWrite()" );
++
++
++        err = Singleton<PvpdFacade>::instance().write(i_target,
++                                                      io_buffer,
++                                                      io_buflen,
++                                                      args);
++
++        return err;
++    }
++
++    // Register with the routing code
++    DEVICE_REGISTER_ROUTE( DeviceFW::READ,
++                           DeviceFW::PVPD,
++                           TARGETING::TYPE_NODE,
++                           pvpdRead );
++    DEVICE_REGISTER_ROUTE( DeviceFW::WRITE,
++                           DeviceFW::PVPD,
++                           TARGETING::TYPE_NODE,
++                           pvpdWrite );
++
++}; // end namespace PVPD
++
++#if !defined(__HOSTBOOT_RUNTIME)
++// --------------------------------------------------------
++// Presence Detection
++//---------------------------------------------------------
++
++/**
++ * @brief Performs a presence detect operation on a Node card.
++ *
++ * There is no FSI presence detection, just Planar vpd detection.
++ * Presence is always returned as Success (unless the unlikely case of too
++ * small of a buffer passed). A problem with planar EEPROM is logged but
++ * not passed up so that the enclosure and everything inside is not
++ * deconfigured.
++ *
++ * @param[in]   i_opType        Operation type, see DeviceFW::OperationType
++ *                              in driverif.H
++ * @param[in]   i_target        Presence detect target
++ * @param[in/out] io_buffer     Read: Pointer to output data storage
++ *                              Write: Pointer to input data storage
++ * @param[in/out] io_buflen     Input: size of io_buffer (in bytes, always 1)
++ *                              Output: Success = 1, Failure = 0
++ * @param[in]   i_accessType    DeviceFW::AccessType enum (userif.H)
++ * @param[in]   i_args          This is an argument list for DD framework.
++ *                              In this function, there are no arguments.
++ * @return  errlHndl_t
++ */
++errlHndl_t nodePresenceDetect(DeviceFW::OperationType i_opType,
++                              TARGETING::Target* i_target,
++                              void* io_buffer,
++                              size_t& io_buflen,
++                              int64_t i_accessType,
++                              va_list i_args)
++{
++    errlHndl_t l_errl = NULL;
++    bool pvpd_present = true;
++
++    if (unlikely(io_buflen < sizeof(bool)))
++    {
++        TRACFCOMP(g_trac_vpd,
++                  ERR_MRK "nodePresenceDetect> Invalid data length: %d",
++                  io_buflen);
++        /*@
++         * @errortype
++         * @moduleid     VPD::VPD_PVPD_PRESENCEDETECT
++         * @reasoncode   VPD::VPD_INVALID_LENGTH
++         * @userdata1    Data Length
++         * @devdesc      presenceDetect> Invalid data length (!= 1 bytes)
++         */
++        l_errl =
++                new ERRORLOG::ErrlEntry(ERRORLOG::ERRL_SEV_UNRECOVERABLE,
++                                        VPD::VPD_PVPD_PRESENCEDETECT,
++                                        VPD::VPD_INVALID_LENGTH,
++                                        TO_UINT64(io_buflen),
++                                        true /*SW error*/);
++        io_buflen = 0;
++        return l_errl;
++    }
++
++#if defined(CONFIG_PVPD_READ_FROM_HW) && defined(CONFIG_PVPD_READ_FROM_PNOR)
++    pvpd_present = VPD::pvpdPresent( i_target );
++    if( pvpd_present )
++    {
++        // Check if the VPD data in the PNOR matches the SEEPROM
++        l_errl = VPD::ensureCacheIsInSync( i_target );
++        if( l_errl )
++        {
++            TRACFCOMP(g_trac_vpd,ERR_MRK "nodePresenceDetect>"
++                    " Error during ensureCacheIsInSync (PVPD)" );
++            errlCommit( l_errl, FSI_COMP_ID );
++        }
++    }
++    else
++    {
++        TRACFCOMP(g_trac_vpd,
++                  ERR_MRK "nodePresenceDetect> failed presence detect");
++
++        // Invalidate PVPD in the PNOR
++        l_errl = VPD::invalidatePnorCache(i_target);
++        if (l_errl)
++        {
++            TRACFCOMP( g_trac_vpd, "Error invalidating PVPD in PNOR" );
++            errlCommit( l_errl, VPD_COMP_ID );
++        }
++        pvpd_present = true;
++    }
++#endif
++
++    // Always return presence.
++    // A returned error deconfigures the node and stops the IPL.
++    memcpy(io_buffer, &pvpd_present, sizeof(pvpd_present));
++    io_buflen = sizeof(pvpd_present);
++
++    return NULL;
++}
++
++// Register as the presence detect for nodes.
++DEVICE_REGISTER_ROUTE(DeviceFW::READ,
++                      DeviceFW::PRESENT,
++                      TARGETING::TYPE_NODE,
++                      nodePresenceDetect);
++#endif
++
++bool VPD::pvpdPresent( TARGETING::Target * i_target )
++{
++    TRACSSCOMP( g_trac_vpd, ENTER_MRK"pvpdPresent()");
++#if(defined( CONFIG_PVPD_READ_FROM_HW ) && !defined( __HOSTBOOT_RUNTIME) )
++
++    return EEPROM::eepromPresence( i_target );
++
++#else
++    return Singleton<PvpdFacade>::instance().hasVpdPresent( i_target,
++                                                            PVPD::OPFR,
++                                                            PVPD::VP );
++#endif
++}
++
++
++//PVPD Class Functions
++/**
++ * @brief  Constructor
++ * Planar VPD is included in the Centaur PNOR section.
++ * Including with Centaur vpd minimizes the number of PNOR sections.
++ */
++PvpdFacade::PvpdFacade() :
++IpVpdFacade(CVPD::SECTION_SIZE, // note use of CVPD
++            CVPD::MAX_SECTIONS, // note use of CVPD
++            PVPD::pvpdRecords,
++            (sizeof(PVPD::pvpdRecords)/sizeof(PVPD::pvpdRecords[0])),
++            PVPD::pvpdKeywords,
++            (sizeof(PVPD::pvpdKeywords)/sizeof(PVPD::pvpdKeywords[0])),
++            PNOR::CENTAUR_VPD,  // note use of CVPD
++            PVPD::g_mutex,
++            VPD::VPD_WRITE_PLANAR)
++{
++    TRACUCOMP(g_trac_vpd, "PvpdFacade::PvpdFacade> " );
++
++#ifdef CONFIG_PVPD_READ_FROM_PNOR
++    iv_configInfo.vpdReadPNOR = true;
++#else
++    iv_configInfo.vpdReadPNOR = false;
++#endif
++#ifdef CONFIG_PVPD_READ_FROM_HW
++    iv_configInfo.vpdReadHW = true;
++#else
++    iv_configInfo.vpdReadHW = false;
++#endif
++#ifdef CONFIG_PVPD_WRITE_TO_PNOR
++    iv_configInfo.vpdWritePNOR = true;
++#else
++    iv_configInfo.vpdWritePNOR = false;
++#endif
++#ifdef CONFIG_PVPD_WRITE_TO_HW
++    iv_configInfo.vpdWriteHW = true;
++#else
++    iv_configInfo.vpdWriteHW = false;
++#endif
++}
++
++// Retrun lists of records that should be copied to pnor.
++void PvpdFacade::getRecordLists(
++                const  recordInfo* & o_primaryVpdRecords,
++                uint64_t           & o_primaryRecSize,
++                const  recordInfo* & o_altVpdRecords,
++                uint64_t           & o_altRecSize)
++{
++    // Always return this object's list
++    o_primaryVpdRecords = iv_vpdRecords;
++    o_primaryRecSize = iv_recSize;
++
++    // If the planar eeprom is being shared with a mem buf,
++    // then return the cvpd list as the alternative record list.
++    // At thip point, if the node is be processed, then the mem buffs
++    // might have not been discovered yet. If cvpd is being cached, then
++    // include the cvpd list as the altnative.
++#ifdef CONFIG_CVPD_READ_FROM_PNOR
++    o_altVpdRecords = Singleton<CvpdFacade>::instance().iv_vpdRecords;
++    o_altRecSize = Singleton<CvpdFacade>::instance().iv_recSize;
++#else
++    o_altVpdRecords = NULL;
++    o_altRecSize = 0;
++#endif
++}
++
+diff --git a/src/usr/vpd/pvpd.H b/src/usr/vpd/pvpd.H
+new file mode 100644
+index 0000000..092dd45
+--- /dev/null
++++ b/src/usr/vpd/pvpd.H
+@@ -0,0 +1,149 @@
++/* IBM_PROLOG_BEGIN_TAG                                                   */
++/* This is an automatically generated prolog.                             */
++/*                                                                        */
++/* $Source: src/usr/vpd/pvpd.H $                                          */
++/*                                                                        */
++/* OpenPOWER HostBoot Project                                             */
++/*                                                                        */
++/* Contributors Listed Below - COPYRIGHT 2013,2015                        */
++/* [+] International Business Machines Corp.                              */
++/*                                                                        */
++/*                                                                        */
++/* Licensed under the Apache License, Version 2.0 (the "License");        */
++/* you may not use this file except in compliance with the License.       */
++/* You may obtain a copy of the License at                                */
++/*                                                                        */
++/*     http://www.apache.org/licenses/LICENSE-2.0                         */
++/*                                                                        */
++/* Unless required by applicable law or agreed to in writing, software    */
++/* distributed under the License is distributed on an "AS IS" BASIS,      */
++/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or        */
++/* implied. See the License for the specific language governing           */
++/* permissions and limitations under the License.                         */
++/*                                                                        */
++/* IBM_PROLOG_END_TAG                                                     */
++#ifndef __PVPD_H
++#define __PVPD_H
++
++
++/**
++ * @file pvpd.H
++ *
++ * @brief Provides the interfaces for the PVPD device driver
++ *
++ */
++
++// ----------------------------------------------
++// Includes
++// ----------------------------------------------
++#include <errl/errlentry.H>
++#include <vpd/pvpdenums.H>
++
++#include "ipvpd.H"
++#include <config.h>
++
++namespace PVPD
++{
++
++    /**
++     * @brief Conversion of PVPD Records to corresponding character
++     *        representation.
++     */
++    const IpVpdFacade::recordInfo pvpdRecords[] =
++    {
++        // -------------------------------------------------------------------
++        // NOTE: This list must remain an ordered list!  There will be a
++        //      testcase that checks this.  When adding new entries to the
++        //      list, be sure that the keyword in each entry (value 0)
++        //      are in ascending order.
++        // -------------------------------------------------------------------
++        { VINI, "VINI" },
++        { OSYS, "OSYS" },
++        { OPFR, "OPFR" },
++        { VNDR, "VNDR" },
++        // -------------------------------------------------------------------
++        // DO NOT USE!!  This is for test purposes ONLY!
++        { PVPD_TEST_RECORD, "TEST" },
++        // -------------------------------------------------------------------
++    };
++
++    /**
++     * @brief Conversion of PVPD Keywords to corresponding character
++     *        representation.
++     */
++    const IpVpdFacade::keywordInfo pvpdKeywords[] =
++    {
++        // -------------------------------------------------------------------
++        // NOTE: This list must remain an ordered list!  There will be a
++        //      testcase that checks this.  When adding new entries to
++        //      the list, be sure that the keyword in each entry (value 0)
++        //      are in ascending order.
++        // -------------------------------------------------------------------
++        { pdI, "#I" },
++        { B3,  "B3" },
++        { B4,  "B4" },
++        { B7,  "B7" },
++        { CC,  "CC" },
++        { CE,  "CE" },
++        { CT,  "CT" },
++        { DR,  "DR" },
++        { ET,  "ET" },
++        { FN,  "FN" },
++        { HE,  "HE" },
++        { HW,  "HW" },
++        { IN,  "IN" },
++        { MM,  "MM" },
++        { PF,  "PF" },
++        { PN,  "PN" },
++        { RT,  "RT" },
++        { SN,  "SN" },
++        { SS,  "SS" },
++        { VD,  "VD" },
++        { VN,  "VN" },
++        { VP,  "VP" },
++        { VS,  "VS" },
++        { VZ,  "VZ" },
++
++        // -------------------------------------------------------------------
++        // DO NOT USE!!  This is for test purposes ONLY!
++        { PVPD_TEST_KEYWORD, "XX" },
++        // -------------------------------------------------------------------
++
++        //Common ipvpd
++        { FULL_RECORD, "FL"},
++    };
++
++}; // end PVPD namespace
++
++class PvpdFacade: public IpVpdFacade
++{
++  public:
++
++    /**
++     * @brief Constructor
++     */
++    PvpdFacade( );
++
++  private:
++
++    /**
++     * @brief This function returns a primary and an alternate list of records
++     *       that should be copied to pnor. The Alternate list is optional.
++     *
++     * @param[out] o_primaryVpdRecords - Pointer to array of VPD Records to use
++     *
++     * @param[out] o_primaryRecSize -    Size of o_primaryVpdRecords array
++     *
++     * @param[out] o_altVpdRecords -     Pointer to array of VPD Records to use
++     *
++     * @param[out] o_altRecSize -        Size of o_altVpdRecords array
++     *
++     */
++    void getRecordLists(
++                const  recordInfo* & o_primaryVpdRecords,
++                uint64_t           & o_primaryRecSize,
++                const  recordInfo* & o_altVpdRecords,
++                uint64_t           & o_altRecSize);
++
++};
++#endif  // __PVPD_H
+diff --git a/src/usr/vpd/vpd.C b/src/usr/vpd/vpd.C
+index 9b4e1f8..3656696 100755
+--- a/src/usr/vpd/vpd.C
++++ b/src/usr/vpd/vpd.C
+@@ -34,10 +34,9 @@
+ #include "vpd.H"
+ #include "mvpd.H"
+ #include "cvpd.H"
++#include "pvpd.H"
+ #include "spd.H"
+ 
+-
+-
+ // ----------------------------------------------
+ // Trace definitions
+ // ----------------------------------------------
+@@ -456,6 +455,13 @@ errlHndl_t ensureCacheIsInSync ( TARGETING::Target * i_target )
+         l_keywordPN = CVPD::VP;
+         l_keywordSN = CVPD::VS;
+     }
++    else if( l_type == TARGETING::TYPE_NODE )
++    {
++        l_ipvpd     = &(Singleton<PvpdFacade>::instance());
++        l_record    = PVPD::OPFR;
++        l_keywordPN = PVPD::VP;
++        l_keywordSN = PVPD::VS;
++    }
+     else if( l_type == TARGETING::TYPE_DIMM )
+     {
+         // SPD does not have a singleton instance
+@@ -487,7 +493,8 @@ errlHndl_t ensureCacheIsInSync ( TARGETING::Target * i_target )
+     do
+     {
+         // Make sure we are comparing the correct pn/sn for CVPD
+-        if( l_type == TARGETING::TYPE_MEMBUF )
++        if( ( l_type == TARGETING::TYPE_MEMBUF ) ||
++            ( l_type == TARGETING::TYPE_NODE   ) )
+         {
+             bool l_zeroPN;
+             l_err = l_ipvpd->cmpSeepromToZero( i_target,
+@@ -523,6 +530,7 @@ errlHndl_t ensureCacheIsInSync ( TARGETING::Target * i_target )
+         // Compare the Part Numbers in PNOR/SEEPROM
+         bool l_matchPN = false;
+         if( ( l_type == TARGETING::TYPE_PROC   ) ||
++            ( l_type == TARGETING::TYPE_NODE   ) ||
+             ( l_type == TARGETING::TYPE_MEMBUF ) )
+         {
+             l_err = l_ipvpd->cmpPnorToSeeprom( i_target,
+@@ -577,7 +585,8 @@ errlHndl_t ensureCacheIsInSync ( TARGETING::Target * i_target )
+             HWAS::markTargetChanged(i_target);
+ 
+             // Load the PNOR data from the SEEPROM
+-            if( ( l_type == TARGETING::TYPE_PROC   ) ||
++            if( ( l_type == TARGETING::TYPE_PROC ) ||
++                ( l_type == TARGETING::TYPE_NODE ) ||
+                 ( l_type == TARGETING::TYPE_MEMBUF ) )
+             {
+                 l_err = l_ipvpd->loadPnor( i_target );
+diff --git a/src/usr/vpd/vpd.H b/src/usr/vpd/vpd.H
+index 9c39a7f..e6cada7 100644
+--- a/src/usr/vpd/vpd.H
++++ b/src/usr/vpd/vpd.H
+@@ -50,6 +50,7 @@ enum VPD_MSG_TYPE
+     VPD_WRITE_DIMM    = 0x00C1, //< DIMM SPD
+     VPD_WRITE_PROC    = 0x00C2, //< Processor MVPD
+     VPD_WRITE_MEMBUF  = 0x00C3, //< Centaur FRU VPD
++    VPD_WRITE_PLANAR  = 0x00C4, //< Planar VPD
+ };
+ 
+ /**
+diff --git a/src/usr/vpd/vpd.mk b/src/usr/vpd/vpd.mk
+index 9f85755..65d22e3 100644
+--- a/src/usr/vpd/vpd.mk
++++ b/src/usr/vpd/vpd.mk
+@@ -5,7 +5,9 @@
+ #
+ # OpenPOWER HostBoot Project
+ #
+-# COPYRIGHT International Business Machines Corp. 2013,2014
++# Contributors Listed Below - COPYRIGHT 2013,2015
++# [+] International Business Machines Corp.
++#
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+@@ -24,5 +26,6 @@
+ OBJS += ipvpd.o
+ OBJS += mvpd.o
+ OBJS += cvpd.o
++OBJS += pvpd.o
+ OBJS += spd.o
+ OBJS += errlud_vpd.o
+-- 
+1.8.2.2
+
diff --git a/openpower/package/hostboot/hostboot-0011-Fix-for-Bad-DQ-Bitmap-spare-byte-triggering-false-DR.patch b/openpower/package/hostboot/hostboot-0011-Fix-for-Bad-DQ-Bitmap-spare-byte-triggering-false-DR.patch
deleted file mode 100644
index 02202c3..0000000
--- a/openpower/package/hostboot/hostboot-0011-Fix-for-Bad-DQ-Bitmap-spare-byte-triggering-false-DR.patch
+++ /dev/null
@@ -1,260 +0,0 @@
-From 3b397cfb77ca5315f6403874ad10534e5f42f8a6 Mon Sep 17 00:00:00 2001
-From: Corey Swenson <cswenson@us.ibm.com>
-Date: Tue, 14 Apr 2015 13:47:12 -0500
-Subject: [PATCH 1/2] Fix for Bad DQ Bitmap spare byte triggering false DRAM
- repairs
-
-Change-Id: I6b443fc7c05d1fda1f97d180e317ac8a93eb77ad
-RTC: 125477
----
- src/usr/hwpf/hwp/dimmBadDqBitmapAccessHwp.C | 122 ++++++++++++++++++++++------
- 1 file changed, 99 insertions(+), 23 deletions(-)
-
-diff --git a/src/usr/hwpf/hwp/dimmBadDqBitmapAccessHwp.C b/src/usr/hwpf/hwp/dimmBadDqBitmapAccessHwp.C
-index 4c61ab8..98f9bf9 100644
---- a/src/usr/hwpf/hwp/dimmBadDqBitmapAccessHwp.C
-+++ b/src/usr/hwpf/hwp/dimmBadDqBitmapAccessHwp.C
-@@ -5,7 +5,7 @@
- /*                                                                        */
- /* OpenPOWER HostBoot Project                                             */
- /*                                                                        */
--/* Contributors Listed Below - COPYRIGHT 2012,2014                        */
-+/* Contributors Listed Below - COPYRIGHT 2012,2015                        */
- /* [+] International Business Machines Corp.                              */
- /*                                                                        */
- /*                                                                        */
-@@ -22,7 +22,7 @@
- /* permissions and limitations under the License.                         */
- /*                                                                        */
- /* IBM_PROLOG_END_TAG                                                     */
--// $Id: dimmBadDqBitmapAccessHwp.C,v 1.15 2014/03/27 20:55:12 whs Exp $
-+// $Id: dimmBadDqBitmapAccessHwp.C,v 1.16 2015/04/22 20:09:16 cswenson Exp $
- /**
-  *  @file dimmBadDqBitmapAccessHwp.C
-  *
-@@ -53,6 +53,7 @@
-  *                          whs         02/24/2014  Capture bad DQs as FFDC
-  *                                                  in mnfg error logs
-  *                          whs         03/27/2014  fix current FFDC bit map
-+ *                          cswenson    04/22/2014  fix spare byte translate
-  */
- 
- #include <dimmBadDqBitmapAccessHwp.H>
-@@ -78,23 +79,19 @@ extern "C"
- {
- 
- /**
-- * @brief Called by dimmBadDqBitmapAccessHwp() to query ATTR_EFF_DIMM_SPARE
-- * and set bits for unconnected spare DRAM in caller's data.
-+ * @brief Returns bits for unconnected spare DRAM.
-  *
-  *
-  * @param[in] i_mba       Reference to MBA Target.
-  * @param[in] i_dimm      Reference to DIMM Target.
-- * @param[o]  o_data      Reference to Bad DQ Bitmap set by
-- *                        the caller.  Only the SPARE_DRAM_DQ_BYTE_NUMBER_INDEX
-- *                        byte is modified by this function.
-+ * @param[o]  o_spareByte Reference to the spare byte returned to caller.
-  *
-  * @return ReturnCode
-  */
--
--fapi::ReturnCode dimmUpdateDqBitmapSpareByte(
-+fapi::ReturnCode dimmGetDqBitmapSpareByte(
-     const fapi::Target & i_mba,
-     const fapi::Target & i_dimm,
--    uint8_t (&o_data)[DIMM_DQ_MAX_DIMM_RANKS][DIMM_DQ_RANK_BITMAP_SIZE])
-+    uint8_t (&o_spareByte)[DIMM_DQ_MAX_DIMM_RANKS])
- {
-     fapi::ReturnCode l_rc;
- 
-@@ -108,7 +105,7 @@ fapi::ReturnCode dimmUpdateDqBitmapSpareByte(
-         l_rc = FAPI_ATTR_GET(ATTR_VPD_DIMM_SPARE, &i_mba, l_mbaSpare);
-         if (l_rc)
-         {
--            FAPI_ERR("dimmUpdateDqBitmapSpareByte: "
-+            FAPI_ERR("dimmGetDqBitmapSpareByte: "
-                      "Error getting DRAM Spare data");
-             break;
-         }
-@@ -117,7 +114,7 @@ fapi::ReturnCode dimmUpdateDqBitmapSpareByte(
-         l_rc = FAPI_ATTR_GET(ATTR_MBA_PORT, &i_dimm, l_mbaPort);
-         if (l_rc)
-         {
--            FAPI_ERR("dimmUpdateDqBitmapSpareByte: "
-+            FAPI_ERR("dimmGetDqBitmapSpareByte: "
-                      "Error getting MBA port number");
-             break;
-         }
-@@ -126,7 +123,7 @@ fapi::ReturnCode dimmUpdateDqBitmapSpareByte(
-         l_rc = FAPI_ATTR_GET(ATTR_MBA_DIMM, &i_dimm, l_dimm);
-         if (l_rc)
-         {
--            FAPI_ERR("dimmUpdateDqBitmapSpareByte: "
-+            FAPI_ERR("dimmGetDqBitmapSpareByte: "
-                      "Error getting dimm number");
-             break;
-         }
-@@ -139,20 +136,21 @@ fapi::ReturnCode dimmUpdateDqBitmapSpareByte(
-                 case fapi::ENUM_ATTR_VPD_DIMM_SPARE_NO_SPARE:
-                     // Set DQ bits reflecting unconnected
-                     // spare DRAM in caller's data
--                    o_data[i][SPARE_DRAM_DQ_BYTE_NUMBER_INDEX] = 0xFF;
-+                    o_spareByte[i] = 0xFF;
-                     break;
- 
-                 case fapi::ENUM_ATTR_VPD_DIMM_SPARE_LOW_NIBBLE:
--                    o_data[i][SPARE_DRAM_DQ_BYTE_NUMBER_INDEX] |= 0x0F;
-+                    o_spareByte[i] = 0x0F;
-                     break;
- 
-                 case fapi::ENUM_ATTR_VPD_DIMM_SPARE_HIGH_NIBBLE:
--                    o_data[i][SPARE_DRAM_DQ_BYTE_NUMBER_INDEX] |= 0xF0;
-+                    o_spareByte[i] = 0xF0;
-                     break;
- 
-                 // As erroneous value will not be encountered.
-                 case fapi::ENUM_ATTR_VPD_DIMM_SPARE_FULL_BYTE:
-                 default:
-+                    o_spareByte[i] = 0x0;
-                     break;
-             }
-         }
-@@ -161,6 +159,45 @@ fapi::ReturnCode dimmUpdateDqBitmapSpareByte(
- }
- 
- /**
-+ * @brief Called by dimmBadDqBitmapAccessHwp() to query ATTR_EFF_DIMM_SPARE
-+ * and set bits for unconnected spare DRAM in caller's data.
-+ *
-+ *
-+ * @param[in] i_mba       Reference to MBA Target.
-+ * @param[in] i_dimm      Reference to DIMM Target.
-+ * @param[o]  o_data      Reference to Bad DQ Bitmap set by
-+ *                        the caller.  Only the SPARE_DRAM_DQ_BYTE_NUMBER_INDEX
-+ *                        byte is modified by this function.
-+ *
-+ * @return ReturnCode
-+ */
-+
-+fapi::ReturnCode dimmUpdateDqBitmapSpareByte(
-+    const fapi::Target & i_mba,
-+    const fapi::Target & i_dimm,
-+    uint8_t (&o_data)[DIMM_DQ_MAX_DIMM_RANKS][DIMM_DQ_RANK_BITMAP_SIZE])
-+{
-+    fapi::ReturnCode l_rc;
-+
-+    uint8_t spareByte[DIMM_DQ_MAX_DIMM_RANKS];
-+    memset(spareByte, 0, sizeof(spareByte));
-+
-+    l_rc = dimmGetDqBitmapSpareByte(i_mba,i_dimm,spareByte);
-+    if (l_rc)
-+    {
-+        FAPI_ERR("dimmUpdateDqBitmapSpareByte: "
-+                 "Error getting spare byte");
-+        return l_rc;
-+    }
-+
-+    for (uint32_t i=0; i<DIMM_DQ_MAX_DIMM_RANKS; i++)
-+    {
-+        o_data[i][SPARE_DRAM_DQ_BYTE_NUMBER_INDEX] |= spareByte[i];
-+    }
-+    return l_rc;
-+}
-+
-+/**
-  * @brief Called by dimmBadDqBitmapAccessHwp() to query
-  * ATTR_SPD_MODULE_MEMORY_BUS_WIDTH in order to determine
-  * ECC support for this DIMM.  This function will set
-@@ -472,8 +509,13 @@ fapi::ReturnCode dimmBadDqBitmapSet(
-     uint8_t (l_prev_data)[DIMM_DQ_MAX_DIMM_RANKS]
-                          [DIMM_DQ_RANK_BITMAP_SIZE];
-     bool badDQSet = false;
--    dimmBadDqBitmapGet(i_mba, i_dimm, l_prev_data, i_wiringData,
--                       i_allMnfgFlags);
-+    l_rc = dimmBadDqBitmapGet(i_mba, i_dimm, l_prev_data, i_wiringData,
-+                              i_allMnfgFlags);
-+    if (l_rc)
-+    {
-+        FAPI_ERR("dimmBadDqBitmapAccessHwp: Error getting DQ bitmap");
-+        return l_rc;
-+    }
- 
-     // Check if Bad DQ bit set
-     for (uint8_t i = 0; i < DIMM_DQ_MAX_DIMM_RANKS; i++)
-@@ -654,6 +696,18 @@ fapi::ReturnCode dimmBadDqBitmapSet(
-         l_pSpdData->iv_reserved3 = 0;
-         memset(l_pSpdData->iv_bitmaps, 0, sizeof(l_pSpdData->iv_bitmaps));
- 
-+        // Get the spare byte
-+        uint8_t spareByte[DIMM_DQ_MAX_DIMM_RANKS];
-+        memset(spareByte, 0, sizeof(spareByte));
-+
-+        l_rc = dimmGetDqBitmapSpareByte(i_mba,i_dimm,spareByte);
-+        if (l_rc)
-+        {
-+            FAPI_ERR("dimmBadDqBitmapAccessHwp: "
-+                    "Error getting spare byte");
-+            break;
-+        }
-+
-         // Translate bitmap from Centaur DQ to DIMM DQ point of view for
-         // each rank
-         for (uint8_t i = 0; i < DIMM_DQ_MAX_DIMM_RANKS; i++)
-@@ -661,6 +715,16 @@ fapi::ReturnCode dimmBadDqBitmapSet(
-             // Iterate through all the DQ bits in the rank
-             for (uint8_t j = 0; j < DIMM_DQ_NUM_DQS; j++)
-             {
-+                if ((j/8) == SPARE_DRAM_DQ_BYTE_NUMBER_INDEX)
-+                {
-+                    // The spareByte can be one of: 0x00 0x0F 0xF0 0xFF
-+                    // If a bit is set, then that spare is unconnected
-+                    // so continue to the next num_dqs, do not translate
-+                    if (spareByte[i] & (0x80 >> (j % 8)))
-+                    {
-+                        continue;
-+                    }
-+                }
-                 if ((i_data[i][j/8]) & (0x80 >> (j % 8)))
-                 {
-                     // Centaur DQ bit set in callers data.
-@@ -747,13 +811,25 @@ fapi::ReturnCode dimmBadDqBitmapAccessHwp(
- 
-         if (i_get)
-         {
--            dimmBadDqBitmapGet(i_mba, i_dimm, io_data, l_wiringData,
--                               l_allMnfgFlags);
-+            l_rc = dimmBadDqBitmapGet(i_mba, i_dimm, io_data, l_wiringData,
-+                                      l_allMnfgFlags);
-+            if (l_rc)
-+            {
-+                FAPI_ERR("dimmBadDqBitmapAccessHwp: "
-+                        "Error getting DQ bitmap");
-+                break;
-+            }
-         }
-         else
-         {
--            dimmBadDqBitmapSet(i_mba, i_dimm, io_data, l_wiringData,
--                               l_allMnfgFlags);
-+            l_rc = dimmBadDqBitmapSet(i_mba, i_dimm, io_data, l_wiringData,
-+                                      l_allMnfgFlags);
-+            if (l_rc)
-+            {
-+                FAPI_ERR("dimmBadDqBitmapAccessHwp: "
-+                        "Error setting DQ bitmap");
-+                break;
-+            }
-         }
- 
-     }while(0);
-@@ -763,4 +839,4 @@ fapi::ReturnCode dimmBadDqBitmapAccessHwp(
-     return l_rc;
- }
- 
--}
-+}
-\ No newline at end of file
--- 
-1.8.2.2
-
diff --git a/openpower/package/hostboot/hostboot-0011-Support-for-OCC-Centaur-numbering.patch b/openpower/package/hostboot/hostboot-0011-Support-for-OCC-Centaur-numbering.patch
new file mode 100644
index 0000000..bbbc2ff
--- /dev/null
+++ b/openpower/package/hostboot/hostboot-0011-Support-for-OCC-Centaur-numbering.patch
@@ -0,0 +1,41 @@
+From 9d5d91597d325d63465a4f62a98bb5d8ff0f90a4 Mon Sep 17 00:00:00 2001
+From: Doug Gilbert <dgilbert@us.ibm.com>
+Date: Wed, 3 Jun 2015 14:06:09 -0500
+Subject: [PATCH] Support for OCC Centaur numbering
+
+Change-Id: I11f6641548dbb0a0f4f586f592fa0d357a6c9a84
+RTC: 127111
+Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/18179
+Tested-by: Jenkins Server
+Reviewed-by: Christopher Cain <cjcain@us.ibm.com>
+Reviewed-by: Martha Broyles <mbroyles@us.ibm.com>
+Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
+---
+ src/usr/htmgt/htmgt_cfgdata.C | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/src/usr/htmgt/htmgt_cfgdata.C b/src/usr/htmgt/htmgt_cfgdata.C
+index dcf1f9d..f4bcfd8 100644
+--- a/src/usr/htmgt/htmgt_cfgdata.C
++++ b/src/usr/htmgt/htmgt_cfgdata.C
+@@ -307,6 +307,8 @@ void getMemConfigMessageData(const TargetHandle_t i_occ,
+ 
+             //Centaur #
+             centPos = (*centaur)->getAttr<ATTR_POSITION>();
++            // ATTR_POSITION is system wide. Must be 0-7 on each OCC
++            centPos = centPos % 8;
+             o_data[index++] = centPos;
+ 
+             //Dimm # (0xFF since a centaur)
+@@ -425,6 +427,8 @@ void getMemThrottleMessageData(const TargetHandle_t i_occ,
+     for (centaur=centaurs.begin(); centaur!=centaurs.end(); ++centaur)
+     {
+         centPos = (*centaur)->getAttr<ATTR_POSITION>();
++        // ATTR_POSITION is system wide. Must 0-7 on each OCC
++        centPos = centPos % 8;
+ 
+         mbas.clear();
+         getChildAffinityTargets(mbas, *centaur,
+-- 
+2.3.0
+
diff --git a/openpower/package/hostboot/hostboot-0012-Disable-Centaur-I2C-at-runtime.patch b/openpower/package/hostboot/hostboot-0012-Disable-Centaur-I2C-at-runtime.patch
deleted file mode 100644
index 3455e34..0000000
--- a/openpower/package/hostboot/hostboot-0012-Disable-Centaur-I2C-at-runtime.patch
+++ /dev/null
@@ -1,104 +0,0 @@
-From e33d32a5c249e5298a545889bba86129218c213d Mon Sep 17 00:00:00 2001
-From: Corey Swenson <cswenson@us.ibm.com>
-Date: Thu, 23 Apr 2015 14:55:20 -0500
-Subject: [PATCH 2/2] Disable Centaur I2C at runtime
-
-Change-Id: I0425f642ed84041e604ad8004f77f0c385227526
----
- src/usr/i2c/runtime/rt_i2c.C | 76 ++++++++++++++++++++++++--------------------
- 1 file changed, 42 insertions(+), 34 deletions(-)
-
-diff --git a/src/usr/i2c/runtime/rt_i2c.C b/src/usr/i2c/runtime/rt_i2c.C
-index 5d21bbf..bdadbbe 100755
---- a/src/usr/i2c/runtime/rt_i2c.C
-+++ b/src/usr/i2c/runtime/rt_i2c.C
-@@ -139,44 +139,52 @@ errlHndl_t i2cPerformOp( DeviceFW::OperationType i_opType,
-     proc_engine_port |= (uint64_t)(args.engine) << HBRT_I2C_MASTER_ENGINE_SHIFT;
-     proc_engine_port |= (uint64_t)(args.port) << HBRT_I2C_MASTER_PORT_SHIFT;
- 
--    if(i_opType == DeviceFW::READ)
-+    // Send I2C op to host interface
-+    // Centaur I2C not yet supported
-+    // @todo RTC:127533 -- Enable Centaur I2C at runtime
-+    if( i_target->getAttr<TARGETING::ATTR_TYPE>() != TARGETING::TYPE_MEMBUF )
-     {
--        if(g_hostInterfaces->i2c_read != NULL)
-+        if(i_opType == DeviceFW::READ)
-         {
--            rc = g_hostInterfaces->i2c_read
--                    (
--                        proc_engine_port,   // Master Chip/Engine/Port
--                        args.devAddr,       // Dev Addr
--                        args.offset_length, // Offset size
--                        offset,             // Offset
--                        io_buflen,          // Buffer length
--                        io_buffer           // Buffer
--                    );
-+            if(g_hostInterfaces->i2c_read != NULL)
-+            {
-+                rc = g_hostInterfaces->i2c_read
-+                        (
-+                            proc_engine_port,   // Master Chip/Engine/Port
-+                            args.devAddr,       // Dev Addr
-+                            args.offset_length, // Offset size
-+                            offset,             // Offset
-+                            io_buflen,          // Buffer length
-+                            io_buffer           // Buffer
-+                        );
-+            }
-+            else
-+            {
-+                TRACFCOMP(g_trac_i2c,
-+                    ERR_MRK"Hypervisor I2C read interface not linked");
-+                l_host_if_enabled = false;
-+            }
-         }
--        else
--        {
--            TRACFCOMP(g_trac_i2c,ERR_MRK"Hypervisor I2C read interface not linked");
--            l_host_if_enabled = false;
--        }
--    }
--    else if (i_opType == DeviceFW::WRITE)
--    {
--        if(g_hostInterfaces->i2c_write != NULL)
--        {
--            rc = g_hostInterfaces->i2c_write
--                    (
--                        proc_engine_port,   // Master Chip/Engine/Port
--                        args.devAddr,       // Dev Addr
--                        args.offset_length, // Offset size
--                        offset,             // Offset
--                        io_buflen,          // Buffer length
--                        io_buffer           // Buffer
--                    );
--        }
--        else
-+        else if (i_opType == DeviceFW::WRITE)
-         {
--            TRACFCOMP(g_trac_i2c,ERR_MRK"Hypervisor I2C write interface not linked");
--            l_host_if_enabled = false;
-+            if(g_hostInterfaces->i2c_write != NULL)
-+            {
-+                rc = g_hostInterfaces->i2c_write
-+                        (
-+                            proc_engine_port,   // Master Chip/Engine/Port
-+                            args.devAddr,       // Dev Addr
-+                            args.offset_length, // Offset size
-+                            offset,             // Offset
-+                            io_buflen,          // Buffer length
-+                            io_buffer           // Buffer
-+                        );
-+            }
-+            else
-+            {
-+                TRACFCOMP(g_trac_i2c,
-+                    ERR_MRK"Hypervisor I2C write interface not linked");
-+                l_host_if_enabled = false;
-+            }
-         }
-     }
- 
--- 
-1.8.2.2
-
diff --git a/openpower/package/hostboot/hostboot.mk b/openpower/package/hostboot/hostboot.mk
index 5f423da..3b7bc6f 100644
--- a/openpower/package/hostboot/hostboot.mk
+++ b/openpower/package/hostboot/hostboot.mk
@@ -4,7 +4,7 @@
 #
 ################################################################################
 
-HOSTBOOT_VERSION ?= 6bdbe42ee0a2808be1f2f38026e57290cdfa8fc6
+HOSTBOOT_VERSION ?= c646754e720b5cd21534425ca90bb414a4a3ff12
 HOSTBOOT_SITE ?= $(call github,open-power,hostboot,$(HOSTBOOT_VERSION))
 
 HOSTBOOT_LICENSE = Apache-2.0
diff --git a/openpower/package/openpower-ffs/openpower-ffs.mk b/openpower/package/openpower-ffs/openpower-ffs.mk
index 1e6b9bf..ff82950 100644
--- a/openpower/package/openpower-ffs/openpower-ffs.mk
+++ b/openpower/package/openpower-ffs/openpower-ffs.mk
@@ -1,4 +1,4 @@
-OPENPOWER_FFS_VERSION ?= bf4630076762d9c20c16c80c1c791f352b046dd1
+OPENPOWER_FFS_VERSION ?= 2e790b8409071ca15767d822dabfa8e60f12c6e2
 OPENPOWER_FFS_SITE ?= $(call github,open-power,ffs,$(OPENPOWER_FFS_VERSION))
 OPENPOWER_FFS_LICENSE = GPLv2+
 
diff --git a/openpower/package/openpower-pnor/Config.in b/openpower/package/openpower-pnor/Config.in
index 6a23e51..2234d4e 100644
--- a/openpower/package/openpower-pnor/Config.in
+++ b/openpower/package/openpower-pnor/Config.in
@@ -46,6 +46,11 @@
         help
             String used to define name of sbec hostboot binary file
 
+config BR2_HOSTBOOT_BINARY_WINK_FILENAME
+        string "Name of winkle hostboot binary"
+        help
+            String used to define name of winkle hostboot binary file
+
 config BR2_OPENPOWER_TARGETING_BIN_FILENAME
         string "Name of openpower binary targeting file"
         help
diff --git a/openpower/package/openpower-pnor/openpower-pnor.mk b/openpower/package/openpower-pnor/openpower-pnor.mk
index fb7e230..658a949 100644
--- a/openpower/package/openpower-pnor/openpower-pnor.mk
+++ b/openpower/package/openpower-pnor/openpower-pnor.mk
@@ -8,7 +8,7 @@
 # make doesn't care for quotes in the dependencies.
 XML_PACKAGE=$(subst $\",,$(BR2_OPENPOWER_XML_PACKAGE))
 
-OPENPOWER_PNOR_VERSION ?= 3748ff041448a3909d5ffc5e62befcfcb597c0c1
+OPENPOWER_PNOR_VERSION ?= ed1682e10526ebd85825427fbf397361bb0e34aa
 OPENPOWER_PNOR_SITE ?= $(call github,open-power,pnor,$(OPENPOWER_PNOR_VERSION))
 
 OPENPOWER_PNOR_LICENSE = Apache-2.0
@@ -48,6 +48,7 @@
             -targeting_binary_source $(BR2_OPENPOWER_TARGETING_BIN_FILENAME) \
             -sbe_binary_filename $(BR2_HOSTBOOT_BINARY_SBE_FILENAME) \
             -sbec_binary_filename $(BR2_HOSTBOOT_BINARY_SBEC_FILENAME) \
+            -wink_binary_filename $(BR2_HOSTBOOT_BINARY_WINK_FILENAME) \
             -occ_binary_filename $(OCC_STAGING_DIR)/$(BR2_OCC_BIN_FILENAME) \
             -capp_binary_filename $(BINARIES_DIR)/$(BR2_CAPP_UCODE_BIN_FILENAME) \
             -openpower_version_filename $(OPENPOWER_PNOR_VERSION_FILE)
@@ -63,6 +64,7 @@
             -bootkernel $(BINARIES_DIR)/$(LINUX_IMAGE_NAME) \
             -sbe_binary_filename $(BR2_HOSTBOOT_BINARY_SBE_FILENAME) \
             -sbec_binary_filename $(BR2_HOSTBOOT_BINARY_SBEC_FILENAME) \
+            -wink_binary_filename $(BR2_HOSTBOOT_BINARY_WINK_FILENAME) \
             -occ_binary_filename $(OCC_STAGING_DIR)/$(BR2_OCC_BIN_FILENAME) \
             -targeting_binary_filename $(BR2_OPENPOWER_TARGETING_ECC_FILENAME) \
             -openpower_version_filename $(OPENPOWER_PNOR_VERSION_FILE)
diff --git a/openpower/package/pkg-versions.mk b/openpower/package/pkg-versions.mk
index e3acbda..e2e3af0 100644
--- a/openpower/package/pkg-versions.mk
+++ b/openpower/package/pkg-versions.mk
@@ -70,16 +70,16 @@
 echo -n "-" >> $$($(2)_VERSION_FILE); \
 \
 cd "$$($(2)_SITE)"; (git describe --tags || git log -n1 --pretty=format:'%h' || echo "unknown") \
-	| sed 's/\(.*\)-g\([0-9a-f]\{7\}\).*/\2/' | xargs echo -n \
+	| sed 's/\(.*\)-g\([0-9a-f]\{7\}\).*/\2/;s/$(1)-//;' | xargs echo -n \
 	>> $$($(2)_VERSION_FILE); \
 \
-cd "$$($(2)_SITE)"; git describe --all --dirty | grep -e "-dirty" | sed 's/.*\(-dirty\)/\1/' | \
+cd "$$($(2)_SITE)"; git describe --all --dirty | grep -e "-dirty" | sed 's/.*\(-dirty\)/\1/;' | \
 	xargs echo -n >> $$($(2)_VERSION_FILE); \
 else \
 \
 [ `echo -n $$($(2)_VERSION) | wc -c` == "40" ] && (echo -n $$($(2)_VERSION) | \
-	sed "s/^\([0-9a-f]\{7\}\).*/\1/" >> $$($(2)_VERSION_FILE)) \
-	|| echo -n $$($(2)_VERSION) >> $$($(2)_VERSION_FILE); \
+	sed "s/^\([0-9a-f]\{7\}\).*/\1/;s/$(1)-//;" >> $$($(2)_VERSION_FILE)) \
+	|| echo -n $$($(2)_VERSION) | sed -e 's/$(1)-//' >> $$($(2)_VERSION_FILE); \
 \
 cd "$$(BR2_EXTERNAL)"; git describe --all --dirty | \
 	if grep -e "-dirty"; then \
diff --git a/openpower/package/skiboot/skiboot.mk b/openpower/package/skiboot/skiboot.mk
index 3b4ad1a..8e443ed 100644
--- a/openpower/package/skiboot/skiboot.mk
+++ b/openpower/package/skiboot/skiboot.mk
@@ -4,7 +4,7 @@
 #
 ################################################################################
 
-SKIBOOT_VERSION = skiboot-5.0-rc3
+SKIBOOT_VERSION = skiboot-5.0.3
 SKIBOOT_SITE = $(call github,open-power,skiboot,$(SKIBOOT_VERSION))
 SKIBOOT_INSTALL_IMAGES = YES
 SKIBOOT_INSTALL_TARGET = NO
