diff --git a/.gitignore b/.gitignore
index 1377554..7fce548 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
 *.swp
+customrc
diff --git a/buildroot b/buildroot
index dd9d28b..3120591 160000
--- a/buildroot
+++ b/buildroot
@@ -1 +1 @@
-Subproject commit dd9d28b337210589b77a7a4a7115c53254f704f9
+Subproject commit 31205912fed95fa0edf1adc5d89dc78d7a068a29
diff --git a/op-build-env b/op-build-env
index 79299c8..9f2bfd2 100755
--- a/op-build-env
+++ b/op-build-env
@@ -1,6 +1,10 @@
 #!/bin/bash
 __PWD=`pwd`
 
+if [ -e ./customrc ]; then
+    source ./customrc
+fi
+
 export BR2_EXTERNAL=${__PWD}/openpower
 export BR2_DL_DIR=${__PWD}/dl
 
diff --git a/openpower/Config.in b/openpower/Config.in
index 19007fe..19a2859 100644
--- a/openpower/Config.in
+++ b/openpower/Config.in
@@ -8,4 +8,8 @@
 endif
 endmenu
 
+menu "Custom Packages"
+source "$BR2_EXTERNAL/custom/Config.in"
+endmenu
+
 endmenu
diff --git a/openpower/configs/firestone_defconfig b/openpower/configs/firestone_defconfig
index c9de842..0e4b766 100644
--- a/openpower/configs/firestone_defconfig
+++ b/openpower/configs/firestone_defconfig
@@ -17,13 +17,14 @@
 
 BR2_OPENPOWER_TARGETING_BIN_FILENAME="FIRESTONE_HB.targeting.bin"
 BR2_OPENPOWER_TARGETING_ECC_FILENAME="FIRESTONE_HB.targeting.bin.ecc"
+BR2_CAPP_UCODE_BIN_FILENAME="cappucode.bin"
 
 BR2_OPENPOWER_PNOR_XML_LAYOUT_FILENAME="defaultPnorLayoutWithGoldenSide.xml"
 BR2_OPENPOWER_PNOR_FILENAME="firestone.pnor"
 
 # skiboot requirements
 BR2_TARGET_SKIBOOT=y
-BR2_TARGET_SKIBOOT_EMBED_PAYLOAD=y
+BR2_TARGET_SKIBOOT_EMBED_PAYLOAD=n
 
 # petitboot requirements
 BR2_ENABLE_LOCALE_PURGE=y
@@ -35,9 +36,9 @@
 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="dc97a6e626eaf22c9bd4baec3954fa5501ce1c63"
-BR2_LINUX_KERNEL_USE_DEFCONFIG=y
-BR2_LINUX_KERNEL_DEFCONFIG="skiroot"
+BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="1444a4e78a9ce324b0b6ac243ccfbfc8fce25d7e"
+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
diff --git a/openpower/configs/habanero_defconfig b/openpower/configs/habanero_defconfig
index 4ad8ee0..2d400c0 100644
--- a/openpower/configs/habanero_defconfig
+++ b/openpower/configs/habanero_defconfig
@@ -17,13 +17,14 @@
 
 BR2_OPENPOWER_TARGETING_BIN_FILENAME="HABANERO_HB.targeting.bin"
 BR2_OPENPOWER_TARGETING_ECC_FILENAME="HABANERO_HB.targeting.bin.ecc"
+BR2_CAPP_UCODE_BIN_FILENAME="cappucode.bin"
 
 BR2_OPENPOWER_PNOR_XML_LAYOUT_FILENAME="defaultPnorLayoutWithGoldenSide.xml"
 BR2_OPENPOWER_PNOR_FILENAME="habanero.pnor"
 
 # skiboot requirements
 BR2_TARGET_SKIBOOT=y
-BR2_TARGET_SKIBOOT_EMBED_PAYLOAD=y
+BR2_TARGET_SKIBOOT_EMBED_PAYLOAD=n
 
 # petitboot requirements
 BR2_ENABLE_LOCALE_PURGE=y
@@ -35,9 +36,9 @@
 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="dc97a6e626eaf22c9bd4baec3954fa5501ce1c63"
-BR2_LINUX_KERNEL_USE_DEFCONFIG=y
-BR2_LINUX_KERNEL_DEFCONFIG="skiroot"
+BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="1444a4e78a9ce324b0b6ac243ccfbfc8fce25d7e"
+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
diff --git a/openpower/configs/linux/skiroot_defconfig b/openpower/configs/linux/skiroot_defconfig
new file mode 100644
index 0000000..e54be62
--- /dev/null
+++ b/openpower/configs/linux/skiroot_defconfig
@@ -0,0 +1,222 @@
+CONFIG_PPC64=y
+CONFIG_ALTIVEC=y
+CONFIG_VSX=y
+CONFIG_SMP=y
+CONFIG_NR_CPUS=2048
+# CONFIG_SWAP is not set
+CONFIG_SYSVIPC=y
+CONFIG_POSIX_MQUEUE=y
+CONFIG_AUDIT=y
+CONFIG_AUDITSYSCALL=y
+CONFIG_IRQ_DOMAIN_DEBUG=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_TASKSTATS=y
+CONFIG_TASK_DELAY_ACCT=y
+CONFIG_TASK_XACCT=y
+CONFIG_TASK_IO_ACCOUNTING=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=20
+# CONFIG_NAMESPACES is not set
+CONFIG_RELAY=y
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_KALLSYMS_ALL=y
+CONFIG_PERF_EVENTS=y
+# CONFIG_COMPAT_BRK is not set
+CONFIG_JUMP_LABEL=y
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_PPC_PMAC is not set
+CONFIG_HZ_100=y
+CONFIG_KEXEC=y
+CONFIG_IRQ_ALL_CPUS=y
+# CONFIG_COMPACTION is not set
+# CONFIG_MIGRATION is not set
+# CONFIG_BOUNCE is not set
+# CONFIG_CROSS_MEMORY_ATTACH is not set
+CONFIG_PPC_64K_PAGES=y
+CONFIG_SCHED_SMT=y
+# CONFIG_SUSPEND is not set
+# CONFIG_SECCOMP is not set
+CONFIG_PACKET=y
+CONFIG_UNIX=y
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+CONFIG_NET=y
+CONFIG_NET_IPIP=y
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_IPV6 is not set
+# CONFIG_WIRELESS is not set
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
+# CONFIG_FW_LOADER_USER_HELPER is not set
+CONFIG_PROC_DEVICETREE=y
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_SIZE=65536
+CONFIG_ATA_OVER_ETH=y
+CONFIG_VIRTIO_BLK=y
+CONFIG_EEPROM_AT24=y
+CONFIG_BLK_DEV_SD=y
+CONFIG_CHR_DEV_ST=y
+CONFIG_BLK_DEV_SR=y
+CONFIG_BLK_DEV_SR_VENDOR=y
+CONFIG_CHR_DEV_SG=y
+CONFIG_SCSI_MULTI_LUN=y
+CONFIG_SCSI_CONSTANTS=y
+CONFIG_SCSI_SCAN_ASYNC=y
+CONFIG_SCSI_CXGB3_ISCSI=y
+CONFIG_SCSI_CXGB4_ISCSI=y
+CONFIG_SCSI_BNX2_ISCSI=y
+CONFIG_BE2ISCSI=y
+CONFIG_SCSI_MPT2SAS=y
+CONFIG_SCSI_IBMVSCSI=y
+CONFIG_SCSI_SYM53C8XX_2=y
+CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=0
+CONFIG_SCSI_IPR=y
+# CONFIG_SCSI_IPR_TRACE is not set
+# CONFIG_SCSI_IPR_DUMP is not set
+CONFIG_SCSI_QLA_FC=y
+CONFIG_SCSI_QLA_ISCSI=y
+CONFIG_SCSI_LPFC=y
+CONFIG_SCSI_VIRTIO=y
+CONFIG_SCSI_DH=y
+CONFIG_SCSI_DH_ALUA=y
+CONFIG_ATA=y
+CONFIG_SATA_AHCI=y
+# CONFIG_ATA_SFF is not set
+CONFIG_MD=y
+CONFIG_BLK_DEV_MD=y
+CONFIG_MD_LINEAR=y
+CONFIG_MD_RAID0=y
+CONFIG_MD_RAID1=y
+CONFIG_MD_RAID10=y
+CONFIG_MD_RAID456=y
+CONFIG_MD_MULTIPATH=y
+CONFIG_MD_FAULTY=y
+CONFIG_BLK_DEV_DM=y
+CONFIG_DM_CRYPT=y
+CONFIG_DM_SNAPSHOT=y
+CONFIG_DM_MIRROR=y
+CONFIG_DM_ZERO=y
+CONFIG_DM_MULTIPATH=y
+CONFIG_NETCONSOLE=y
+CONFIG_TUN=y
+CONFIG_VIRTIO_NET=y
+CONFIG_VORTEX=y
+CONFIG_ACENIC=y
+CONFIG_ACENIC_OMIT_TIGON_I=y
+CONFIG_PCNET32=y
+CONFIG_TIGON3=y
+CONFIG_BNX2X=y
+CONFIG_CHELSIO_T1=y
+CONFIG_BE2NET=y
+CONFIG_S2IO=y
+CONFIG_IBMVETH=y
+CONFIG_E100=y
+CONFIG_E1000=y
+CONFIG_E1000E=y
+CONFIG_IXGB=y
+CONFIG_IXGBE=y
+CONFIG_MLX4_EN=y
+CONFIG_MYRI10GE=y
+CONFIG_QLGE=y
+CONFIG_NETXEN_NIC=y
+CONFIG_SFC=y
+# CONFIG_WLAN is not set
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_EVDEV=y
+CONFIG_INPUT_MISC=y
+# CONFIG_SERIO_SERPORT is not set
+CONFIG_VT_HW_CONSOLE_BINDING=y
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_HVC_CONSOLE=y
+CONFIG_IPMI_HANDLER=y
+CONFIG_IPMI_DEVICE_INTERFACE=y
+CONFIG_IPMI_POWERNV=y
+CONFIG_HW_RANDOM=y
+CONFIG_GEN_RTC=y
+CONFIG_RAW_DRIVER=y
+CONFIG_MAX_RAW_DEVS=1024
+# CONFIG_I2C_COMPAT is not set
+CONFIG_I2C_CHARDEV=y
+# CONFIG_I2C_HELPER_AUTO is not set
+CONFIG_DRM=y
+CONFIG_DRM_RADEON=y
+CONFIG_DRM_AST=y
+CONFIG_FIRMWARE_EDID=y
+CONFIG_FB_MODE_HELPERS=y
+CONFIG_FB_OF=y
+CONFIG_FB_MATROX=y
+CONFIG_FB_MATROX_MILLENIUM=y
+CONFIG_FB_MATROX_MYSTIQUE=y
+CONFIG_FB_MATROX_G=y
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+# CONFIG_LCD_CLASS_DEVICE is not set
+# CONFIG_BACKLIGHT_GENERIC is not set
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_LOGO=y
+CONFIG_USB_HIDDEV=y
+CONFIG_USB=y
+CONFIG_USB_MON=y
+CONFIG_USB_XHCI_HCD=y
+CONFIG_USB_EHCI_HCD=y
+# CONFIG_USB_EHCI_HCD_PPC_OF is not set
+CONFIG_USB_OHCI_HCD=y
+CONFIG_USB_STORAGE=y
+CONFIG_VIRT_DRIVERS=y
+CONFIG_VIRTIO_PCI=y
+# CONFIG_IOMMU_SUPPORT is not set
+CONFIG_EXT2_FS=y
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+CONFIG_EXT2_FS_SECURITY=y
+CONFIG_EXT2_FS_XIP=y
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_POSIX_ACL=y
+CONFIG_EXT3_FS_SECURITY=y
+CONFIG_EXT4_FS=y
+CONFIG_EXT4_FS_POSIX_ACL=y
+CONFIG_EXT4_FS_SECURITY=y
+CONFIG_XFS_FS=y
+CONFIG_XFS_POSIX_ACL=y
+CONFIG_BTRFS_FS=y
+CONFIG_BTRFS_FS_POSIX_ACL=y
+CONFIG_AUTOFS4_FS=y
+CONFIG_ISO9660_FS=y
+CONFIG_UDF_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_TMPFS=y
+CONFIG_TMPFS_POSIX_ACL=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3_ACL=y
+CONFIG_NFS_V4=y
+CONFIG_CIFS=y
+# CONFIG_CIFS_DEBUG is not set
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_ASCII=y
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_UTF8=y
+# CONFIG_XZ_DEC_POWERPC is not set
+CONFIG_PRINTK_TIME=y
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_DEBUG_FS=y
+CONFIG_DEBUG_KERNEL=y
+CONFIG_LOCKUP_DETECTOR=y
+CONFIG_SCHEDSTATS=y
+# CONFIG_FTRACE is not set
+CONFIG_DEBUG_STACKOVERFLOW=y
+CONFIG_XMON=y
+CONFIG_XMON_DEFAULT=y
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
+# CONFIG_CRYPTO_HW is not set
diff --git a/openpower/configs/openpower_mambo_defconfig b/openpower/configs/openpower_mambo_defconfig
index e4edd85..6c61fa5 100644
--- a/openpower/configs/openpower_mambo_defconfig
+++ b/openpower/configs/openpower_mambo_defconfig
@@ -29,8 +29,8 @@
 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="dc97a6e626eaf22c9bd4baec3954fa5501ce1c63"
-BR2_LINUX_KERNEL_USE_DEFCONFIG=y
-BR2_LINUX_KERNEL_DEFCONFIG="skiroot"
+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
diff --git a/openpower/configs/palmetto_defconfig b/openpower/configs/palmetto_defconfig
index 9bde27f..5a4bf38 100644
--- a/openpower/configs/palmetto_defconfig
+++ b/openpower/configs/palmetto_defconfig
@@ -17,13 +17,14 @@
 
 BR2_OPENPOWER_TARGETING_BIN_FILENAME="PALMETTO_HB.targeting.bin"
 BR2_OPENPOWER_TARGETING_ECC_FILENAME="PALMETTO_HB.targeting.bin.ecc"
+BR2_CAPP_UCODE_BIN_FILENAME="cappucode.bin"
 
 BR2_OPENPOWER_PNOR_XML_LAYOUT_FILENAME="defaultPnorLayoutSingleSide.xml"
 BR2_OPENPOWER_PNOR_FILENAME="palmetto.pnor"
 
 # skiboot requirements
 BR2_TARGET_SKIBOOT=y
-BR2_TARGET_SKIBOOT_EMBED_PAYLOAD=y
+BR2_TARGET_SKIBOOT_EMBED_PAYLOAD=n
 
 # petitboot requirements
 BR2_ENABLE_LOCALE_PURGE=y
@@ -35,8 +36,9 @@
 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="dc97a6e626eaf22c9bd4baec3954fa5501ce1c63"
-BR2_LINUX_KERNEL_DEFCONFIG="skiroot"
+BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="1444a4e78a9ce324b0b6ac243ccfbfc8fce25d7e"
+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
diff --git a/openpower/custom/Config.in b/openpower/custom/Config.in
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/openpower/custom/Config.in
diff --git a/openpower/custom/README b/openpower/custom/README
new file mode 100644
index 0000000..088575f
--- /dev/null
+++ b/openpower/custom/README
@@ -0,0 +1,16 @@
+This directory is for placing custom packages that can be kept separate from
+an upstream op-build.  The purpose of this is to make pulling in upstream
+op-build updates much easier, since your customizations will not touch any 
+files also modified by op-build changes.
+
+openpower/custom/configs        # For machine configs (*_defconfig files)
+                /package        # For additional packages.
+                /patches        # For patching existing packages.
+
+It is recommended that the layout of the custom/configs and custom/package
+directories follow the layout of the openpower/ peers.
+
+The openpower/custom/patches directory should have subdirectories for each
+package desired to be patched and patch files contained inside.  For example
+to add a patch to skiboot you would create:
+    openpower/custom/patches/skiboot/skiboot-0001-example.patch
diff --git a/openpower/custom/configs/.dont_delete_this b/openpower/custom/configs/.dont_delete_this
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/openpower/custom/configs/.dont_delete_this
diff --git a/openpower/custom/package/.dont_delete_this b/openpower/custom/package/.dont_delete_this
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/openpower/custom/package/.dont_delete_this
diff --git a/openpower/custom/patches/.dont_delete_this b/openpower/custom/patches/.dont_delete_this
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/openpower/custom/patches/.dont_delete_this
diff --git a/openpower/external.mk b/openpower/external.mk
index 40f7eae..8d7b578 100644
--- a/openpower/external.mk
+++ b/openpower/external.mk
@@ -1 +1,6 @@
+include $(sort $(wildcard $(BR2_EXTERNAL)/package/*.mk))
 include $(sort $(wildcard $(BR2_EXTERNAL)/package/*/*.mk))
+
+# Utilize user-defined custom directory.
+include $(sort $(wildcard $(BR2_EXTERNAL)/custom/*.mk))
+BR2_GLOBAL_PATCH_DIR += "$(BR2_EXTERNAL)/custom/patches"
diff --git a/openpower/package/Config.in b/openpower/package/Config.in
index e844bc1..83823fb 100644
--- a/openpower/package/Config.in
+++ b/openpower/package/Config.in
@@ -7,3 +7,5 @@
 source "$BR2_EXTERNAL/package/openpower-pnor/Config.in"
 source "$BR2_EXTERNAL/package/p8-pore-binutils/Config.in"
 source "$BR2_EXTERNAL/package/occ/Config.in"
+source "$BR2_EXTERNAL/package/capp-ucode/Config.in"
+source "$BR2_EXTERNAL/package/skiboot/Config.in"
diff --git a/openpower/package/VERSION.readme b/openpower/package/VERSION.readme
new file mode 100644
index 0000000..59fec86
--- /dev/null
+++ b/openpower/package/VERSION.readme
@@ -0,0 +1,119 @@
+#### Version String Readme ####
+
+    ## Customrc ##
+
+    Create a file at the top level of op-build called 'customrc'
+    to specify custom $(OPBUILD_VENDOR), $(OPBUILD_PLATFORM), and $(OPBUILD_VERSION).
+
+    Example:
+    #!/bin/sh
+    #export OPBUILD_VENDOR=IBM
+    #export OPBUILD_PLATFORM=plat-ibm
+    #export OPBUILD_VERSION=v-1.0.1
+
+    ## Op-build Commands ##
+
+    # Display package version
+    op-build $(package)-version
+
+    # Force a rebuild of a package version
+    op-build $(package)-build-version
+
+    ##  Version String (ASCII) ##
+
+    General:
+    $(op-build)\n
+    \t$(subpackage0)\n
+    \t$(subpackage1)\n
+    \0
+
+    ## Version String Details ##
+
+    $(op-build):
+    - Clean
+        + $(vendor)-$(platform)-$(op-version)
+    - Dirty.
+        + $(vendor)-$(platform)-$(gitcommit+dirty)
+    $(sub-package):
+    - Directly upstream, no patches, op-build clean.
+        + $(package)-$(version)
+    - Directly upstream, no patches, op-build dirty.
+        + $(package)-$(version)-$(op-dirty)
+    - Directly upstream, op-build patches, op-build clean
+        + $(package)-$(version)-$(patch-level)
+    - Directly upstream, op-build patches, op-build dirty.
+        + $(package)-$(version)-$(op-dirty)-$(patch-level)
+    - SITE=local
+        + $(package)-site_local-$(user)-$(gitcommit+dirty)
+
+    ## Variable Details ##
+
+    - $(vendor) = $(OPBUILD_VENDOR) or 'open-power'.
+    - $(platform) = $(OPBUILD_PLATFORM) or defconfig
+        + Order $(OPBUILD_PLATFORM), defconfig
+    - $(op-version) = git tag or first 7 characters of commit or $(OPBUILD_VERSION) or 'unknown'.
+        + Order $(OPBUILD_VERSION), tag, commit, unknown
+    - **$(gitcommit+dirty) = abcd123 or abcd123-dirty or 'unknown'
+    - $(version) = git tag or first 7 characters of commit
+    - $(user) = `whoami`
+    - **$(op-dirty) = opdirty or 'unknown'
+    - $(patch-level) = $(first 7 characters of 'sha512sum *.patch | sha512sum')
+        + the output of this gives us a quick way to check all the patches with one string
+
+    ** Indicates possible unknown case when source downloaded versus git clone due to git commands required
+
+    ## Sub Packages ##
+
+    Current sub packages included in openpower-pnor.mk $(OPENPOWER_VERSIONED_SUBPACKAGES)
+
+    - hostboot
+    - occ
+    - skiboot
+    - $(platform)-xml
+    - hostboot-binaries
+    - capp-ucode
+
+    ## PNOR section ##
+
+    - There is one version PNOR section per side
+    - Each is one page w/o ECC so 4K
+    - The data in the section will just be ASCII
+
+    ## Op-build Command Examples ##
+
+    cmd> op-build openpower-pnor-version
+    === OPENPOWER_PNOR_VERSION ===
+    IBM-plat-ibm-v-1.2.3-dirty
+        hostboot-3593853-99cca2b
+        occ-cc8376d
+        skiboot-9a3f68b-7c66ab4
+        hostboot-binaries-e3c9356
+        habanero-xml-4c1e936
+        capp-ucode-d4b2683
+
+    cmd> op-build hostboot-version
+    === HOSTBOOT_VERSION ===
+        hostboot-3593853-opdirty-99cca2b
+
+    If a version does not already exist, the commands to make one will be run.
+    Additionally you can force with op-build $(package)-build-version
+
+    cmd> op-build hostboot-version (or op-build hostboot-build-version)
+    === HOSTBOOT_VERSION ===
+            Searching for patches...
+    op-build/openpower/package/hostboot/hostboot-0001-Increase-uart-delay.patch
+    op-build/openpower/package/hostboot/hostboot-0002-Disable-centaur-memory-throttle.patch
+    op-build/openpower/package/hostboot/hostboot-0003-GCC-4.9-Make-compiler-use-ELFv1-ABI-and-use-O2.patch
+    op-build/openpower/package/hostboot/hostboot-0004-Revert-SW294127-INITPROC-FSP-Hostboot-fast-exit-powe.patch
+    op-build/openpower/package/hostboot/hostboot-0005-Disable-SPD-writes-workaround-for-DRAM-repairs-error.patch
+    op-build/openpower/package/hostboot/hostboot-0006-Runtime-fixes-for-IPMI.patch
+    op-build/openpower/package/hostboot/hostboot-0007-Update-DIMM_TEMP-Sensor-Enum.patch
+    op-build/openpower/package/hostboot/hostboot-0008-mss-thermal-init-SW297647.patch
+    op-build/openpower/package/hostboot/hostboot-0009-Sel-instead-of-eSel.patch
+    op-build/openpower/package/hostboot/hostboot-0010-Reset-occ-when-fails-to-activate.patch
+    op-build/openpower/package/hostboot/hostboot-0011-eRepair-MBVPD-size-check-for-CDIMM-and-ISDIMM.patch
+            End of patches...
+            Creating version string (various output may display)...
+    heads/pnor_version-dirty
+            End creating version string...
+            version: hostboot-3593853-99cca2b
diff --git a/openpower/package/capp-ucode/Config.in b/openpower/package/capp-ucode/Config.in
new file mode 100644
index 0000000..1bdbc23
--- /dev/null
+++ b/openpower/package/capp-ucode/Config.in
@@ -0,0 +1,10 @@
+config BR2_PACKAGE_CAPP_UCODE
+        bool "capp_capp"
+        default y if (BR2_OPENPOWER_PLATFORM && BR2_powerpc_power8)
+        help
+            Microcode for CAPP hardware
+
+config BR2_CAPP_UCODE_BIN_FILENAME
+        string "Name of CAPP UCODE image file"
+        help
+            String used to define name of the CAPP UCODE binary image file
diff --git a/openpower/package/capp-ucode/capp-ucode.mk b/openpower/package/capp-ucode/capp-ucode.mk
new file mode 100644
index 0000000..88a9020
--- /dev/null
+++ b/openpower/package/capp-ucode/capp-ucode.mk
@@ -0,0 +1,20 @@
+################################################################################
+#
+# capp-ucode.mk
+#
+################################################################################
+CAPP_UCODE_VERSION ?= d4b26834dd674b83971d00a8c0952fa5830c8f6a
+CAPP_UCODE_SITE ?= $(call github,open-power,capp-ucode,$(CAPP_UCODE_VERSION))
+PETITBOOT_LICENSE = Apache-2.0
+
+CAPP_UCODE_INSTALL_IMAGES = YES
+
+define CAPP_UCODE_BUILD_CMDS
+	cd $(@D) && ./build.sh
+endef
+
+define CAPP_UCODE_INSTALL_IMAGES_CMDS
+       $(INSTALL) $(@D)/cappucode.bin $(BINARIES_DIR)
+endef
+
+$(eval $(generic-package))
diff --git a/openpower/package/hostboot-binaries/hostboot_binaries.mk b/openpower/package/hostboot-binaries/hostboot_binaries.mk
index 31006ca..03523c3 100644
--- a/openpower/package/hostboot-binaries/hostboot_binaries.mk
+++ b/openpower/package/hostboot-binaries/hostboot_binaries.mk
@@ -4,7 +4,7 @@
 #
 ################################################################################
 
-HOSTBOOT_BINARIES_VERSION ?= e3c9356a11663f7497dbf80ee712587a7271e493
+HOSTBOOT_BINARIES_VERSION ?= d41753f2b5e2510d6bc6ce58adf8e55207b8d317
 HOSTBOOT_BINARIES_SITE ?= $(call github,open-power,hostboot-binaries,$(HOSTBOOT_BINARIES_VERSION))
 HOSTBOOT_BINARIES_LICENSE = Apache-2.0
 
diff --git a/openpower/package/hostboot/hostboot-0006-Runtime-fixes-for-IPMI.patch b/openpower/package/hostboot/hostboot-0006-Runtime-fixes-for-IPMI.patch
deleted file mode 100644
index 011dae7..0000000
--- a/openpower/package/hostboot/hostboot-0006-Runtime-fixes-for-IPMI.patch
+++ /dev/null
@@ -1,70 +0,0 @@
-From 94cd1249c46be945efa92f09c41e27bfaacc9405 Mon Sep 17 00:00:00 2001
-From: Dan Crowell <dcrowell@us.ibm.com>
-Date: Sun, 1 Mar 2015 12:32:24 -0600
-Subject: [PATCH 1/4] Runtime fixes for IPMI
-
--initialize trace buffer in IPMI runtime code
--fix buffer mixup
--fix netfn format for opal call
-
-Change-Id: I612431f81d40f1698b585353da9c245adf1447e1
-(cherry picked from commit f4998cabf6ff541de0624532a5fa46bdf96419d1)
----
- src/usr/ipmi/runtime/rt_ipmirp.C |   12 ++++++++----
- 1 files changed, 8 insertions(+), 4 deletions(-)
-
-diff --git a/src/usr/ipmi/runtime/rt_ipmirp.C b/src/usr/ipmi/runtime/rt_ipmirp.C
-index f99723a..846e068 100644
---- a/src/usr/ipmi/runtime/rt_ipmirp.C
-+++ b/src/usr/ipmi/runtime/rt_ipmirp.C
-@@ -49,6 +49,8 @@
- #include <runtime/interface.h>
- 
- trace_desc_t * g_trac_ipmi;
-+TRAC_INIT(&g_trac_ipmi, IPMI_COMP_NAME, 6*KILOBYTE, TRACE::BUFFER_SLOW);
-+
- #define IPMI_TRAC(printf_string,args...) \
-     TRACFCOMP(g_trac_ipmi,"rt: "printf_string,##args)
- 
-@@ -89,8 +91,9 @@ namespace IPMI
-         // if the buffer is too large this is a programming error.
-         assert(io_len <= max_buffer());
- 
-+        uint8_t netfn = i_cmd.first >> 2; //remove embedded LUN
-         IPMI_TRAC("calling sync %x:%x  len=%d",
--            i_cmd.first, i_cmd.second, io_len);
-+            netfn, i_cmd.second, io_len);
- 
-         if(g_hostInterfaces && g_hostInterfaces->ipmi_msg)
-         {
-@@ -98,7 +101,7 @@ namespace IPMI
-             uint8_t *l_data = new uint8_t[l_len];
- 
-             rc = g_hostInterfaces->ipmi_msg(
--                        i_cmd.first, i_cmd.second,
-+                        netfn, i_cmd.second,
-                         io_data, io_len,
-                         l_data, &l_len);
- 
-@@ -124,7 +127,7 @@ namespace IPMI
-                             IPMI::MOD_IPMIRT,
-                             IPMI::RC_INVALID_SENDRECV,
-                             TWO_UINT32_TO_UINT64(rc,
--                                TWO_UINT16_TO_UINT32(i_cmd.first, i_cmd.second)),
-+                                TWO_UINT16_TO_UINT32(netfn, i_cmd.second)),
-                             io_len,
-                             true);
-                 err->collectTrace(IPMI_COMP_NAME);
-@@ -135,7 +138,8 @@ namespace IPMI
-             else
-             {
-                 // clean up the memory for the caller
--                o_completion_code = static_cast<IPMI::completion_code>(io_data[0]);
-+                o_completion_code =
-+                  static_cast<IPMI::completion_code>(l_data[0]);
- 
-                 // now need to create the buffer to return
-                 io_len = l_len - 1; // get rid of the completion_code
--- 
-1.7.4.1
-
diff --git a/openpower/package/hostboot/hostboot-0006-sbe-pnor.patch b/openpower/package/hostboot/hostboot-0006-sbe-pnor.patch
new file mode 100644
index 0000000..cbf25e1
--- /dev/null
+++ b/openpower/package/hostboot/hostboot-0006-sbe-pnor.patch
@@ -0,0 +1,28 @@
+From 961d01024912ce7b0547095d38921bdd61ae8cd8 Mon Sep 17 00:00:00 2001
+From: Brian Horton <brianh@linux.ibm.com>
+Date: Wed, 11 Mar 2015 10:14:31 -0500
+Subject: [PATCH] fix SBE/PNOR merge issues
+
+Change-Id: I74752dbfa50fc78be66a9f185a7c6bc4d31732cd
+---
+ src/usr/sbe/sbe_update.C |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/usr/sbe/sbe_update.C b/src/usr/sbe/sbe_update.C
+index a559229..5ac4909 100644
+--- a/src/usr/sbe/sbe_update.C
++++ b/src/usr/sbe/sbe_update.C
+@@ -1791,8 +1791,8 @@ namespace SBE
+                                         reinterpret_cast<void*>(SBE_IMG_VADDR),
+                                         ((io_sbeState.seeprom_side_to_update ==
+                                          EEPROM::SBE_PRIMARY ) ?
+-                                            PNOR::SBE_SEEPROM0 :
+-                                            PNOR::SBE_SEEPROM1  ),
++                                            SBE_SEEPROM0 :
++                                            SBE_SEEPROM1  ),
+                                         PNOR::WORKING,
+                                         imageWasUpdated );
+ 
+-- 
+1.7.4.1
+
diff --git a/openpower/package/hostboot/hostboot-0007-Update-DIMM_TEMP-Sensor-Enum.patch b/openpower/package/hostboot/hostboot-0007-Update-DIMM_TEMP-Sensor-Enum.patch
deleted file mode 100644
index 63ceb6e..0000000
--- a/openpower/package/hostboot/hostboot-0007-Update-DIMM_TEMP-Sensor-Enum.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From e929e3bdbabad39c4c21ed220b0be7078afe0ef7 Mon Sep 17 00:00:00 2001
-From: Bill Hoffa <wghoffa@us.ibm.com>
-Date: Sun, 1 Mar 2015 18:38:45 -0600
-Subject: [PATCH 3/4] Update DIMM_TEMP Sensor Enum
-
-Change-Id: Ia850e56b85f13b4b421525541f547bde03cb4cbc
-RTC:124867
-(cherry picked from commit e9ad83fc6a2f0cc32826291c20d731337ba76f42)
----
- .../common/xmltohb/attribute_types_hb.xml          |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/src/usr/targeting/common/xmltohb/attribute_types_hb.xml b/src/usr/targeting/common/xmltohb/attribute_types_hb.xml
-index 74fb492..3c00c33 100644
---- a/src/usr/targeting/common/xmltohb/attribute_types_hb.xml
-+++ b/src/usr/targeting/common/xmltohb/attribute_types_hb.xml
-@@ -917,7 +917,7 @@
-     </enumerator>
-     <enumerator>
-         <name>DIMM_TEMP</name>
--        <value>0x01C0</value>
-+        <value>0x0120</value>
-     </enumerator>
-     <enumerator>
-         <name>CORE_TEMP</name>
--- 
-1.7.4.1
-
diff --git a/openpower/package/hostboot/hostboot-0008-mss-thermal-init-SW297647.patch b/openpower/package/hostboot/hostboot-0007-mss-thermal-init-SW297647_and_undo.patch
similarity index 67%
rename from openpower/package/hostboot/hostboot-0008-mss-thermal-init-SW297647.patch
rename to openpower/package/hostboot/hostboot-0007-mss-thermal-init-SW297647_and_undo.patch
index 5ed49f8..f6eafe5 100644
--- a/openpower/package/hostboot/hostboot-0008-mss-thermal-init-SW297647.patch
+++ b/openpower/package/hostboot/hostboot-0007-mss-thermal-init-SW297647_and_undo.patch
@@ -1,35 +1,38 @@
-From 1b7b2c8af560b71aa1dcddb4e8075047a1321d1e Mon Sep 17 00:00:00 2001
-From: Matt Ploetz <maploetz@us.ibm.com>
-Date: Wed, 4 Mar 2015 13:25:30 -0600
+From 430bf7d7b8194bf7789db053999464390e143fdc Mon Sep 17 00:00:00 2001
+From: Brian Horton <brianh@linux.ibm.com>
+Date: Wed, 11 Mar 2015 16:13:11 -0500
 Subject: [PATCH] mss thermal patch from Mike Pradik
 
-Change-Id: I0980f7b996a854f92c0ffad39eb32758539df91e
+AND undeo 1.18 attribute change
+
+Change-Id: I0c3e9d126077fb18bb771909631e0491da4b5f99
 ---
- .../mss_thermal_init/mss_thermal_init.C            | 23 ++++++++++++++++++----
- 1 file changed, 19 insertions(+), 4 deletions(-)
+ .../mss_thermal_init/mss_thermal_init.C            |   26 ++++++++++++++++----
+ 1 files changed, 21 insertions(+), 5 deletions(-)
 
 diff --git a/src/usr/hwpf/hwp/dram_initialization/mss_thermal_init/mss_thermal_init.C b/src/usr/hwpf/hwp/dram_initialization/mss_thermal_init/mss_thermal_init.C
-index aa217c6..2e6600f 100644
+index e09f47f..dc21852 100644
 --- a/src/usr/hwpf/hwp/dram_initialization/mss_thermal_init/mss_thermal_init.C
 +++ b/src/usr/hwpf/hwp/dram_initialization/mss_thermal_init/mss_thermal_init.C
 @@ -22,7 +22,7 @@
  /* permissions and limitations under the License.                         */
  /*                                                                        */
  /* IBM_PROLOG_END_TAG                                                     */
--// $Id: mss_thermal_init.C,v 1.18 2015/01/23 17:54:09 dcrowell Exp $
-+// $Id: mss_thermal_init.C,v 1.18b CHANGED IN OPENPOWER PATCH maploetz Exp $
+-// $Id: mss_thermal_init.C,v 1.19 2015/02/12 23:23:56 pardeik Exp $
++// $Id: mss_thermal_init.C,v 1.18c CHANGED IN OPENPOWER PATCH brianh   Exp $
  // $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/centaur/working/procedures/ipl/fapi/mss_thermal_init.C,v $
  //------------------------------------------------------------------------------
  // *! (C) Copyright International Business Machines Corp. 2011
-@@ -49,6 +49,7 @@
+@@ -49,6 +49,8 @@
  //------------------------------------------------------------------------------
  // Version:|  Author: |  Date:  | Comment:
  //---------|----------|---------|-----------------------------------------------
++//   1.18v | brianhk  |11-MAR-15| undo 1.18 change
 +//   1.18u | pardeik  |03-MAR-15| user version to be like v1.20
+ //   1.18  | pardeik  |12-FEB-15| change ATTR_MRW_MEM_SENSOR_CACHE_ADDR_MAP to
+ //                              | a centaur target (was system)
  //   1.17  | pardeik  |19-NOV-14| Use MRW attribute for SC address map for ISDIMMs
- //   1.16  | pardeik  |06-FEB-14| removed string in trace statement
- //   1.15  | pardeik  |24-FEB-14| added support for ATTR_MRW_CDIMM_SPARE_I2C_TEMP_SENSOR_ENABLE
-@@ -158,6 +159,7 @@ fapi::ReturnCode mss_thermal_init(const fapi::Target & i_target)
+@@ -160,6 +162,7 @@ fapi::ReturnCode mss_thermal_init(const fapi::Target & i_target)
        const uint8_t I2C_BUS_ENCODE_PRIMARY = 0;
        const uint8_t I2C_BUS_ENCODE_SECONDARY = 8;
        const uint8_t MAX_NUM_DIMM_SENSORS = 8;
@@ -37,7 +40,7 @@
  
        // Variable declaration
        uint8_t l_dimm_ranks_array[l_NUM_MBAS][l_NUM_PORTS][l_NUM_DIMMS];	// Number of ranks for each configured DIMM in each MBA
-@@ -247,6 +249,19 @@ fapi::ReturnCode mss_thermal_init(const fapi::Target & i_target)
+@@ -249,6 +252,19 @@ fapi::ReturnCode mss_thermal_init(const fapi::Target & i_target)
            l_custom_dimm[i] = fapi::ENUM_ATTR_EFF_CUSTOM_DIMM_NO;
        }
  
@@ -57,7 +60,16 @@
        for (uint8_t mba_index = 0; mba_index < l_target_mba_array.size(); mba_index++){
           l_rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, &l_target_mba_array[mba_index], l_mba_pos);
  	 if (l_rc) return l_rc;
-@@ -397,9 +412,9 @@ fapi::ReturnCode mss_thermal_init(const fapi::Target & i_target)
+@@ -279,7 +295,7 @@ fapi::ReturnCode mss_thermal_init(const fapi::Target & i_target)
+       else
+       {
+ 	  // sensor cache address map for non custom dimm temperature sensors (which i2c bus and i2c address they are)
+-	  l_rc = FAPI_ATTR_GET(ATTR_MRW_MEM_SENSOR_CACHE_ADDR_MAP, &i_target, l_dimm_sensor_cache_addr_map);
++	  l_rc = FAPI_ATTR_GET(ATTR_MRW_MEM_SENSOR_CACHE_ADDR_MAP, NULL, l_dimm_sensor_cache_addr_map);
+ 	  if (l_rc) return l_rc;
+       }
+ 
+@@ -399,9 +415,9 @@ fapi::ReturnCode mss_thermal_init(const fapi::Target & i_target)
  
  	  l_cdimm_number_dimm_temp_sensors = 0;
  	  // cycle through both primary and secondary i2c busses, determine i2c address and enable bits
@@ -69,7 +81,7 @@
  	      {
  		  if (k == 0)
  		  {
-@@ -490,7 +505,7 @@ fapi::ReturnCode mss_thermal_init(const fapi::Target & i_target)
+@@ -492,7 +508,7 @@ fapi::ReturnCode mss_thermal_init(const fapi::Target & i_target)
           // Iterate through the num_ranks array to determine what DIMMs are plugged
  	 // Enable sensor monitoring for each plugged DIMM
           uint32_t l_iterator = 0;
@@ -79,5 +91,5 @@
  	       l_ecmd_rc |= l_data_scac_enable.setBit(l_iterator);
  	    }
 -- 
-1.8.2.2
+1.7.4.1
 
diff --git a/openpower/package/hostboot/hostboot-0009-Sel-instead-of-eSel.patch b/openpower/package/hostboot/hostboot-0009-Sel-instead-of-eSel.patch
deleted file mode 100644
index 6b4c82d..0000000
--- a/openpower/package/hostboot/hostboot-0009-Sel-instead-of-eSel.patch
+++ /dev/null
@@ -1,201 +0,0 @@
-From 03029acd024ac886296f8ed0cbc711d9b81b26da Mon Sep 17 00:00:00 2001
-From: Brian Horton <brianh@linux.ibm.com>
-Date: Mon, 2 Mar 2015 12:12:28 -0600
-Subject: [PATCH] change error log to SEL processing
-
-for hostboot runtime, do not send eSEL (AMI bug)
-for hostboot ipl, send down SEL following eSEL
-
-Change-Id: I86ee9766e27548c3f7f72fbdbfd76c8a8be7da73
-RTC: 124971
----
- src/include/usr/ipmi/ipmisel.H    | 18 ++++++++++--
- src/usr/errl/errlmanager_common.C |  4 ++-
- src/usr/ipmi/ipmisel.C            | 61 ++++++++++++++++++++++++++++++++-------
- 3 files changed, 70 insertions(+), 13 deletions(-)
-
-diff --git a/src/include/usr/ipmi/ipmisel.H b/src/include/usr/ipmi/ipmisel.H
-index de2dd32..91e3651 100644
---- a/src/include/usr/ipmi/ipmisel.H
-+++ b/src/include/usr/ipmi/ipmisel.H
-@@ -65,11 +65,13 @@ namespace IPMISEL
-      * @param[in] size of eSEL data
-      * @param[in] eid of errorlog for this eSEL (for ack)
-      * @param[in] event_dir_type for this eSEL
-+     * @param[in] event_offset for this eSEL
-      * @param[in] sensorType that caused the error/eSEL
-      * @param[in] sensorNumber that caused the error/eSEL
-      */
-     void sendESEL(uint8_t* i_eselData, uint32_t i_dataSize,
--                  uint32_t i_eid, uint8_t i_eventDirType,
-+                  uint32_t i_eid,
-+                  uint8_t i_eventDirType, uint8_t i_eventOffset,
-                   uint8_t i_sensorType, uint8_t i_sensorNumber);
- 
-     // per IPMI Spec, section 32.1 SEL Event Records
-@@ -85,6 +87,7 @@ namespace IPMISEL
-         format_ipmi_version_2_0 = 0x04,
-     };
- 
-+    // event_type, per section 42.1 of the IPMI spec
-     enum sel_event_dir_type
-     {
-         event_unspecified       = 0x00,
-@@ -93,11 +96,22 @@ namespace IPMISEL
-         event_predictive        = 0x04,
-         event_limit             = 0x05,
-         event_permformance      = 0x06,
-+        event_transition        = 0x07,
-+        event_OEM               = 0x70,
-     };
- 
-     enum sel_event_data
-     {
--        event_data1_ami         = 0xAA,
-+        event_data1_ami                         = 0xAA,
-+        event_data1_trans_to_ok                 = 0x00,
-+        event_data1_trans_to_noncrit_from_ok    = 0x01,
-+        event_data1_trans_to_crit_from_less     = 0x02,
-+        event_data1_trans_to_non_recv_from_less = 0x03,
-+        event_data1_trans_to_non_crit_from_more = 0x04,
-+        event_data1_trans_to_crit_from_non_r    = 0x05,
-+        event_data1_trans_to_non_recoverable    = 0x06,
-+        event_data1_trans_monitor               = 0x07,
-+        event_data1_trans_informational         = 0x08,
-     };
- 
-     enum sel_generator_id
-diff --git a/src/usr/errl/errlmanager_common.C b/src/usr/errl/errlmanager_common.C
-index a64ed3b..6c68818 100644
---- a/src/usr/errl/errlmanager_common.C
-+++ b/src/usr/errl/errlmanager_common.C
-@@ -135,7 +135,9 @@ void ErrlManager::sendErrLogToBmc(errlHndl_t &io_err)
-                 "sendErrLogToBmc: sensor %.2x/%.2x, size %d",
-                 l_sensorType, l_sensorNumber, l_pelSize);
-         IPMISEL::sendESEL(l_pelData, l_pelSize,
--                            io_err->eid(), IPMISEL::event_unspecified,
-+                            io_err->eid(),
-+                            IPMISEL::event_transition,
-+                            IPMISEL::event_data1_trans_to_non_recoverable,
-                             l_sensorType, l_sensorNumber);
- 
-         // free the buffer
-diff --git a/src/usr/ipmi/ipmisel.C b/src/usr/ipmi/ipmisel.C
-index c05c60f..49dcee6 100644
---- a/src/usr/ipmi/ipmisel.C
-+++ b/src/usr/ipmi/ipmisel.C
-@@ -82,7 +82,8 @@ enum esel_retry
- namespace IPMISEL
- {
- void sendESEL(uint8_t* i_eselData, uint32_t i_dataSize,
--              uint32_t i_eid, uint8_t i_eventDirType,
-+              uint32_t i_eid,
-+              uint8_t i_eventDirType, uint8_t i_eventOffset,
-               uint8_t i_sensorType, uint8_t i_sensorNumber)
- {
-     IPMI_TRAC(ENTER_MRK "sendESEL()");
-@@ -100,13 +101,13 @@ void sendESEL(uint8_t* i_eselData, uint32_t i_dataSize,
- 
-     // create the sel record of information
-     selRecord l_sel;
--    l_sel.record_type = record_type_ami_esel;
-+    l_sel.record_type = record_type_system_event;
-     l_sel.generator_id = generator_id_ami;
-     l_sel.evm_format_version = format_ipmi_version_2_0;
-     l_sel.sensor_type = i_sensorType;
-     l_sel.sensor_number = i_sensorNumber;
-     l_sel.event_dir_type = i_eventDirType;
--    l_sel.event_data1 = event_data1_ami;
-+    l_sel.event_data1 = i_eventOffset;
- 
-     eselInitData *eselData =
-         new eselInitData(&l_sel, i_eselData, i_dataSize);
-@@ -216,13 +217,16 @@ void send_esel(eselInitData * i_data,
- {
-     IPMI_TRAC(ENTER_MRK "send_esel");
-     uint8_t* data = NULL;
--    const size_t l_eSELlen = i_data->dataSize;
- 
-     size_t len = 0;
--    uint8_t reserveID[2] = {0,0};
-     uint8_t esel_recordID[2] = {0,0};
-+    uint8_t sel_recordID[2] = {0,0};
- 
-+#ifndef __HOSTBOOT_RUNTIME
-+// TODO RTC: 124972 take this out when runtime supports the eSEL
-     do{
-+        const size_t l_eSELlen = i_data->dataSize;
-+        uint8_t reserveID[2] = {0,0};
-         // we need to send down the extended sel data (eSEL), which is
-         // longer than the protocol buffer, so we need to do a reservation and
-         // call the AMI partial_add_esel command multiple times
-@@ -258,6 +262,9 @@ void send_esel(eselInitData * i_data,
-         // copy in the SEL event record data
-         memcpy(&data[PARTIAL_ADD_ESEL_REQ], i_data->eSel,
-                 sizeof(selRecord));
-+        // update to make this what AMI eSEL wants
-+        data[PARTIAL_ADD_ESEL_REQ + offsetof(selRecord,record_type)] = record_type_ami_esel;
-+        data[PARTIAL_ADD_ESEL_REQ + offsetof(selRecord,event_data1)] = event_data1_ami;
- 
-         o_cc = IPMI::CC_UNKBAD;
-         TRACFBIN( g_trac_ipmi, INFO_MRK"1st partial_add_esel:", data, len);
-@@ -338,17 +345,51 @@ void send_esel(eselInitData * i_data,
-             // BMC returns the recordID, it's always the same (unless
-             // there's a major BMC bug...)
-             storeReserveRecord(esel_recordID,data);
-+        } // while eSELindex
-+    }while(0);
-+#endif
-+
-+    // if eSEL wasn't created due to an error, we don't want to continue
-+    if(o_err == NULL)
-+    {
-+        // if the eSEL wasn't created due to a bad completion code, we will
-+        // still try to send down a SEL that we create, which will contain
-+        // the eSEL recordID (if it was successful)
-+        delete [] data;
-+        len = sizeof(IPMISEL::selRecord);
-+        data = new uint8_t[len];
-+
-+        // copy in the SEL event record data
-+        memcpy(data, i_data->eSel, sizeof(IPMISEL::selRecord));
-+        // copy the eSEL recordID (if it was created) into the extra data area
-+        data[offsetof(selRecord,event_data2)] = esel_recordID[1];
-+        data[offsetof(selRecord,event_data3)] = esel_recordID[0];
-+
-+        // use local cc so that we don't corrupt the esel from above
-+        IPMI::completion_code l_cc = IPMI::CC_UNKBAD;
-+        TRACFBIN( g_trac_ipmi, INFO_MRK"add_sel:", data, len);
-+        o_err = IPMI::sendrecv(IPMI::add_sel(),l_cc,len,data);
-+        if(o_err)
-+        {
-+            IPMI_TRAC(ERR_MRK "error from add_sel");
-         }
--        if(o_err || (o_cc != IPMI::CC_OK))
-+        else if (l_cc != IPMI::CC_OK)
-         {
--            break;
-+            IPMI_TRAC(ERR_MRK "failed add_sel, l_cc %02x", l_cc);
-         }
--    }while(0);
-+        else
-+        {
-+            // if CC_OK, then len = 2 and data contains the recordID of the new SEL
-+            storeReserveRecord(sel_recordID,data);
-+        }
-+    }
- 
-     delete[] data;
- 
--    IPMI_TRAC(EXIT_MRK "send_esel (o_err %.8X, o_cc x%.2x, recID=x%x%x)",
--        o_err ? o_err->plid() : NULL, o_cc, esel_recordID[1], esel_recordID[0]);
-+    IPMI_TRAC(EXIT_MRK
-+        "send_esel o_err=%.8X, o_cc=x%.2x, sel recID=x%x%x, esel recID=x%x%x",
-+        o_err ? o_err->plid() : NULL, o_cc, sel_recordID[1], sel_recordID[0],
-+        esel_recordID[1], esel_recordID[0]);
- 
-     return;
- } // send_esel
--- 
-1.8.2.2
-
diff --git a/openpower/package/hostboot/hostboot-0010-Reset-occ-when-fails-to-activate.patch b/openpower/package/hostboot/hostboot-0010-Reset-occ-when-fails-to-activate.patch
deleted file mode 100644
index 4b666b0..0000000
--- a/openpower/package/hostboot/hostboot-0010-Reset-occ-when-fails-to-activate.patch
+++ /dev/null
@@ -1,301 +0,0 @@
-From 98fc2914b15e89c2324c1636af62225c653e45f9 Mon Sep 17 00:00:00 2001
-From: Doug Gilbert <dgilbert@us.ibm.com>
-Date: Tue, 3 Mar 2015 16:00:29 -0600
-Subject: [PATCH] HTMGT add attempt to reset OCC when OCC Activate fails
-
-Change-Id: I964d2b68216c3ddabae73ce3b851bbc468ec96a7
-RTC: 123180
----
- src/include/usr/htmgt/htmgt_reasoncodes.H |   1 +
- src/usr/htmgt/htmgt.C                     | 123 ++++++++++++++++++------------
- src/usr/htmgt/htmgt_activate.C            |   9 +++
- src/usr/htmgt/htmgt_occ.C                 |  32 +++++++-
- src/usr/htmgt/htmgt_occ.H                 |   1 +
- 5 files changed, 116 insertions(+), 50 deletions(-)
-
-diff --git a/src/include/usr/htmgt/htmgt_reasoncodes.H b/src/include/usr/htmgt/htmgt_reasoncodes.H
-index ade192d..6fe269d 100644
---- a/src/include/usr/htmgt/htmgt_reasoncodes.H
-+++ b/src/include/usr/htmgt/htmgt_reasoncodes.H
-@@ -48,6 +48,7 @@ namespace HTMGT
-         HTMGT_MOD_CHECK_OCC_RSP         = 0x92,
-         HTMGT_MOD_PARSE_OCC_RSP         = 0x94,
-         HTMGT_MOD_HANLDE_OCC_EXCEPTION  = 0xE0,
-+        HTMGT_MOD_ENABLE_OCC_ACTUATION  = 0xE1,
-     };
- 
-     enum htmgtReasonCode
-diff --git a/src/usr/htmgt/htmgt.C b/src/usr/htmgt/htmgt.C
-index aff2500..a2f556f 100644
---- a/src/usr/htmgt/htmgt.C
-+++ b/src/usr/htmgt/htmgt.C
-@@ -184,42 +184,30 @@ namespace HTMGT
- 
-         if (NULL != l_err)
-         {
--            TMGT_ERR("OCCs not all active.  System will stay in safe mode");
-+            TMGT_ERR("OCCs not all active.  Attempting OCC Reset");
-             TMGT_CONSOLE("OCCs are not active (rc=0x%04X). "
--                         "System will remain in safe mode",
-+                         "Attempting OCC Reset",
-                          l_err->reasonCode());
--            TMGT_INF("Calling HBOCC::stopAllOCCs");
--            errlHndl_t err2 = HBOCC::stopAllOCCs();
-+            TMGT_INF("Calling resetOccs");
-+            errlHndl_t err2 = OccManager::resetOccs(NULL);
-             if(err2)
-             {
--                TMGT_ERR("stopAllOCCs() failed with 0x%04X",
-+                TMGT_ERR("OccManager:;resetOccs failed with 0x%04X",
-                          err2->reasonCode());
--                ERRORLOG::errlCommit(err2, HTMGT_COMP_ID);
--            }
--
--            // Update error log to unrecoverable and set SRC
--            // to indicate the system will remain in safe mode
--            /*@
--             * @errortype
--             * @reasoncode      HTMGT_RC_OCC_CRIT_FAILURE
--             * @moduleid        HTMGT_MOD_LOAD_START_STATUS
--             * @userdata1[0:7]  load/start completed
--             * @devdesc         OCCs did not all reach active state,
--             *                  system will be in Safe Mode
--             */
--            bldErrLog(l_err, HTMGT_MOD_LOAD_START_STATUS,
--                      HTMGT_RC_OCC_CRIT_FAILURE,
--                      i_startCompleted, 0, 0, 1,
--                      ERRORLOG::ERRL_SEV_UNRECOVERABLE);
- 
--            // Add level 2 support callout
--            l_err->addProcedureCallout(HWAS::EPUB_PRC_LVL_SUPP,
--                                       HWAS::SRCI_PRIORITY_MED);
--            // Add HB firmware callout
--            l_err->addProcedureCallout(HWAS::EPUB_PRC_HB_CODE,
--                                       HWAS::SRCI_PRIORITY_MED);
-+                // Set original error log  as unrecoverable and commit
-+                l_err->setSev(ERRORLOG::ERRL_SEV_UNRECOVERABLE);
-+                ERRORLOG::errlCommit(l_err, HTMGT_COMP_ID);
- 
--            ERRORLOG::errlCommit(l_err, HTMGT_COMP_ID);
-+                // Commit occReset error
-+                ERRORLOG::errlCommit(err2, HTMGT_COMP_ID);
-+            }
-+            else
-+            {
-+                // retry worked - commit original error as informational
-+                l_err->setSev(ERRORLOG::ERRL_SEV_INFORMATIONAL);
-+                ERRORLOG::errlCommit(l_err, HTMGT_COMP_ID);
-+            }
-         }
- 
-     } // end processOccStartStatus()
-@@ -229,6 +217,19 @@ namespace HTMGT
-     // Notify HTMGT that an OCC has an error to report
-     void processOccError(TARGETING::Target * i_procTarget)
-     {
-+        TARGETING::Target* sys = NULL;
-+        TARGETING::targetService().getTopLevelTarget(sys);
-+        uint8_t safeMode = 0;
-+
-+        // If the system is in safemode then can't talk to OCCs -
-+        // ignore call to processOccError
-+        if(sys &&
-+           sys->tryGetAttr<TARGETING::ATTR_HTMGT_SAFEMODE>(safeMode) &&
-+           safeMode)
-+        {
-+            return;
-+        }
-+
-         bool polledOneOcc = false;
-         OccManager::buildOccs();
- 
-@@ -347,29 +348,57 @@ namespace HTMGT
-     // Set the OCC state
-     errlHndl_t enableOccActuation(bool i_occActivation)
-     {
--        occStateId targetState = OCC_STATE_ACTIVE;
--        if (false == i_occActivation)
--        {
--            targetState = OCC_STATE_OBSERVATION;
--        }
-+        errlHndl_t l_err = NULL;
-+        TARGETING::Target* sys = NULL;
-+
-+        TARGETING::targetService().getTopLevelTarget(sys);
-+        uint8_t safeMode = 0;
- 
--        // Set state for all OCCs
--        errlHndl_t l_err = OccManager::setOccState(targetState);
--        if (NULL == l_err)
-+        // If the system is in safemode then can't talk to OCCs -
-+        // ignore call to enableOccActuation
-+        if(sys &&
-+           sys->tryGetAttr<TARGETING::ATTR_HTMGT_SAFEMODE>(safeMode) &&
-+           safeMode)
-         {
--            TMGT_INF("enableOccActuation: OCC states updated to 0x%02X",
--                     targetState);
-+            /*@
-+             * @errortype
-+             * @reasoncode      HTMGT_RC_OCC_CRIT_FAILURE
-+             * @moduleid        HTMGT_MOD_ENABLE_OCC_ACTUATION
-+             * @userdata1[0:7]  OCC activate [1==true][0==false]
-+             * @devdesc         Invalid operation when OCCs are in safemode
-+             */
-+            bldErrLog(l_err,
-+                      HTMGT_MOD_ENABLE_OCC_ACTUATION,
-+                      HTMGT_RC_OCC_CRIT_FAILURE,
-+                      i_occActivation, 0, 0, 1,
-+                      ERRORLOG::ERRL_SEV_UNRECOVERABLE);
-         }
--
--        if (OccManager::occNeedsReset())
-+        else
-         {
--            TMGT_ERR("enableOccActuation(): OCCs need to be reset");
--            // Don't pass failed target as OCC should have already
--            // been marked as failed during the poll.
--            errlHndl_t err2 = OccManager::resetOccs(NULL);
--            if(err2)
-+            occStateId targetState = OCC_STATE_ACTIVE;
-+            if (false == i_occActivation)
-             {
--                ERRORLOG::errlCommit(err2, HTMGT_COMP_ID);
-+                targetState = OCC_STATE_OBSERVATION;
-+            }
-+
-+            // Set state for all OCCs
-+            l_err = OccManager::setOccState(targetState);
-+            if (NULL == l_err)
-+            {
-+                TMGT_INF("enableOccActuation: OCC states updated to 0x%02X",
-+                         targetState);
-+            }
-+
-+            if (OccManager::occNeedsReset())
-+            {
-+                TMGT_ERR("enableOccActuation(): OCCs need to be reset");
-+                // Don't pass failed target as OCC should have already
-+                // been marked as failed during the poll.
-+                errlHndl_t err2 = OccManager::resetOccs(NULL);
-+                if(err2)
-+                {
-+                    ERRORLOG::errlCommit(err2, HTMGT_COMP_ID);
-+                }
-             }
-         }
- 
-diff --git a/src/usr/htmgt/htmgt_activate.C b/src/usr/htmgt/htmgt_activate.C
-index 7f54d6d..4cb46f0 100644
---- a/src/usr/htmgt/htmgt_activate.C
-+++ b/src/usr/htmgt/htmgt_activate.C
-@@ -39,6 +39,7 @@
- 
- #include <ipmi/ipmisensor.H>
- #include <sys/time.h>
-+#include <console/consoleif.H>
- 
- using namespace TARGETING;
- 
-@@ -163,6 +164,14 @@ namespace HTMGT
-             l_err = occ->ipmiSensor(i_activate);
-             if( l_err )
-             {
-+                TMGT_ERR("setOccActiveSensors failed. (OCC%d state:%d)",
-+                         occ->getInstance(),
-+                         i_activate);
-+
-+                TMGT_CONSOLE("setOccActiveSensors failed. (OCC%d state:%d)",
-+                         occ->getInstance(),
-+                         i_activate);
-+
-                 ERRORLOG::errlCommit(l_err, HTMGT_COMP_ID);
-             }
-         }
-diff --git a/src/usr/htmgt/htmgt_occ.C b/src/usr/htmgt/htmgt_occ.C
-index 8a539f4..bd95987 100644
---- a/src/usr/htmgt/htmgt_occ.C
-+++ b/src/usr/htmgt/htmgt_occ.C
-@@ -248,7 +248,8 @@ namespace HTMGT
-     OccManager::OccManager()
-         :iv_occMaster(NULL),
-         iv_state(OCC_STATE_UNKNOWN),
--        iv_targetState(OCC_STATE_ACTIVE)
-+        iv_targetState(OCC_STATE_ACTIVE),
-+        iv_resetCount(0)
-     {
-     }
- 
-@@ -590,6 +591,19 @@ namespace HTMGT
-             ERRORLOG::errlCommit(err, HTMGT_COMP_ID);
-         }
- 
-+        if(NULL == i_failedOccTarget)
-+        {
-+            ++iv_resetCount; // increment system reset count
-+
-+            TMGT_INF("resetOCCs: Incrementing system OCC reset count to %d",
-+                     iv_resetCount);
-+
-+            if(iv_resetCount > OCC_RESET_COUNT_THRESHOLD)
-+            {
-+                atThreshold = true;
-+            }
-+        }
-+
-         for(occList_t::const_iterator occ = iv_occArray.begin();
-             occ != iv_occArray.end();
-             ++occ)
-@@ -663,7 +677,7 @@ namespace HTMGT
-              */
-             bldErrLog(err,
-                       HTMTG_MOD_OCC_RESET,
--                      HTMGT_RC_OCC_RESET_THREHOLD,
-+                      HTMGT_RC_OCC_CRIT_FAILURE,
-                       0, 0, 0, 0,
-                       ERRORLOG::ERRL_SEV_UNRECOVERABLE);
-         }
-@@ -673,6 +687,13 @@ namespace HTMGT
-         {
-             err->setSev(ERRORLOG::ERRL_SEV_UNRECOVERABLE);
- 
-+            // Add level 2 support callout
-+            err->addProcedureCallout(HWAS::EPUB_PRC_LVL_SUPP,
-+                                     HWAS::SRCI_PRIORITY_MED);
-+            // Add HB firmware callout
-+            err->addProcedureCallout(HWAS::EPUB_PRC_HB_CODE,
-+                                     HWAS::SRCI_PRIORITY_MED);
-+
-             TARGETING::Target* sys = NULL;
-             TARGETING::targetService().getTopLevelTarget(sys);
-             uint8_t safeMode = 1;
-@@ -683,8 +704,13 @@ namespace HTMGT
-                sys->setAttr<TARGETING::ATTR_HTMGT_SAFEMODE>(safeMode);
-             }
- 
--            TMGT_ERR("_resetOccs: Safe Mode RC: 0x%04X (OCC%d)",
-+            TMGT_ERR("_resetOccs: Safe Mode (RC: 0x%04X OCC%d)",
-                      cv_safeReturnCode, cv_safeOccInstance);
-+
-+            TMGT_CONSOLE("OCCs are not active. The system will remain in "
-+                         "safe mode (RC: 0x%04x  for OCC%d)",
-+                         cv_safeReturnCode,
-+                         cv_safeOccInstance);
-         }
- 
-         return err;
-diff --git a/src/usr/htmgt/htmgt_occ.H b/src/usr/htmgt/htmgt_occ.H
-index dec19b8..5ac545a 100644
---- a/src/usr/htmgt/htmgt_occ.H
-+++ b/src/usr/htmgt/htmgt_occ.H
-@@ -507,6 +507,7 @@ namespace HTMGT
-             occList_t               iv_occArray;
-             occStateId              iv_state;
-             occStateId              iv_targetState;
-+            uint8_t                 iv_resetCount;
- 
-             /**
-              * @brief SRC that caused system to enter safe mode
--- 
-1.8.2.2
-
diff --git a/openpower/package/hostboot/hostboot-0011-eRepair-MBVPD-size-check-for-CDIMM-and-ISDIMM.patch b/openpower/package/hostboot/hostboot-0011-eRepair-MBVPD-size-check-for-CDIMM-and-ISDIMM.patch
deleted file mode 100644
index 55c94f0..0000000
--- a/openpower/package/hostboot/hostboot-0011-eRepair-MBVPD-size-check-for-CDIMM-and-ISDIMM.patch
+++ /dev/null
@@ -1,504 +0,0 @@
-From 403b5b351e0ee82fa0b7147ea924b455384cf39d Mon Sep 17 00:00:00 2001
-From: Bilicon Patil <bilpatil@in.ibm.com>
-Date: Fri, 5 Dec 2014 07:25:24 -0600
-Subject: [PATCH 2/6] eRepair MBVPD size check for CDIMM and ISDIMM
-
-The eRepair VPD size for DMI Bus is bigger in systems with ISDIMMs because
-the VPD accounts for all the Centaurs. The current check in the code is
-for each Centaur which is applicable for systems with CDIMMs.
-
-The fix also includes a change to do restore of eRepair records noted
-in the VPD when the system had a non-fips830 driver.
-
-Change-Id: Ibaaf98c5be3e26474ee0eede6081f506f4bb7ec3
-RTC: 119532
-Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/14727
-Tested-by: Jenkins Server
-Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
-Reviewed-by: Prem Shanker Jha <premjha2@in.ibm.com>
-Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
-(cherry picked from commit db9b6fed621390d10459834300924e0fafd6fa04)
----
- .../hwp/bus_training/erepairGetFailedLanesHwp.C    |  194 +++++++++++++++-----
- .../hwp/bus_training/erepairSetFailedLanesHwp.C    |   73 +++++++-
- 2 files changed, 215 insertions(+), 52 deletions(-)
-
-diff --git a/src/usr/hwpf/hwp/bus_training/erepairGetFailedLanesHwp.C b/src/usr/hwpf/hwp/bus_training/erepairGetFailedLanesHwp.C
-index a4db160..33ec195 100644
---- a/src/usr/hwpf/hwp/bus_training/erepairGetFailedLanesHwp.C
-+++ b/src/usr/hwpf/hwp/bus_training/erepairGetFailedLanesHwp.C
-@@ -5,7 +5,7 @@
- /*                                                                        */
- /* OpenPOWER HostBoot Project                                             */
- /*                                                                        */
--/* Contributors Listed Below - COPYRIGHT 2013,2014                        */
-+/* Contributors Listed Below - COPYRIGHT 2013,2015                        */
- /* [+] International Business Machines Corp.                              */
- /*                                                                        */
- /*                                                                        */
-@@ -38,6 +38,8 @@
- 
- #include <erepairGetFailedLanesHwp.H>
- 
-+using namespace EREPAIR;
-+
- extern "C"
- {
- 
-@@ -62,10 +64,10 @@ extern "C"
-  *
-  * @return ReturnCode
-  */
--fapi::ReturnCode retrieveRepairData(const fapi::Target      &i_tgtHandle,
--                                    EREPAIR::erepairVpdType i_vpdType,
--                                    std::vector<uint8_t>    &o_txFailLanes,
--                                    std::vector<uint8_t>    &o_rxFailLanes);
-+fapi::ReturnCode retrieveRepairData(const fapi::Target    &i_tgtHandle,
-+                                    erepairVpdType        i_vpdType,
-+                                    std::vector<uint8_t>  &o_txFailLanes,
-+                                    std::vector<uint8_t>  &o_rxFailLanes);
- 
- /**
-  * @brief Function called by the FW Team HWP that parses the data read from
-@@ -92,15 +94,25 @@ fapi::ReturnCode determineRepairLanes(const fapi::Target   &i_tgtHandle,
-                                       std::vector<uint8_t> &o_rxFailLanes);
- 
- 
-+/**
-+ * @brief Function to check if the system has Custom DIMM type (CDIMM).
-+ *        Attribute ATTR_EFF_CUSTOM_DIMM is read to determine the type.
-+ * @param[in] i_tgtHandle   Reference to X-Bus or A-Bus or MCS target
-+ * @param[o]  o_customDimm  Return value - ENUM_ATTR_EFF_CUSTOM_DIMM_NO
-+ *                                      or ENUM_ATTR_EFF_CUSTOM_DIMM_YES
-+ * @return ReturnCode
-+ */
-+fapi::ReturnCode getDimmType(const fapi::Target &i_tgtHandle,
-+                             uint8_t &o_customDimm);
-+
- /******************************************************************************
-  * Accessor HWP
-  *****************************************************************************/
- 
--fapi::ReturnCode erepairGetFailedLanesHwp(
--                                         const fapi::Target      &i_tgtHandle,
--                                         EREPAIR::erepairVpdType i_vpdType,
--                                         std::vector<uint8_t>    &o_txFailLanes,
--                                         std::vector<uint8_t>    &o_rxFailLanes)
-+fapi::ReturnCode erepairGetFailedLanesHwp(const fapi::Target  &i_tgtHandle,
-+                                          erepairVpdType       i_vpdType,
-+                                          std::vector<uint8_t> &o_txFailLanes,
-+                                          std::vector<uint8_t> &o_rxFailLanes)
- {
-     fapi::ReturnCode l_rc;
-     fapi::Target     l_processorTgt;
-@@ -147,15 +159,16 @@ fapi::ReturnCode erepairGetFailedLanesHwp(
-     return l_rc;
- }
- 
--fapi::ReturnCode retrieveRepairData(const fapi::Target      &i_tgtHandle,
--                                    EREPAIR::erepairVpdType i_vpdType,
--                                    std::vector<uint8_t>    &o_txFailLanes,
--                                    std::vector<uint8_t>    &o_rxFailLanes)
-+fapi::ReturnCode retrieveRepairData(const fapi::Target   &i_tgtHandle,
-+                                    erepairVpdType       i_vpdType,
-+                                    std::vector<uint8_t> &o_txFailLanes,
-+                                    std::vector<uint8_t> &o_rxFailLanes)
- {
-     fapi::ReturnCode l_rc;
-     uint8_t          *l_retBuf = NULL;
-     uint32_t         l_bufSize = 0;
-     fapi::Target     l_procTarget;
-+    uint8_t          l_customDimm;
- 
-     FAPI_DBG(">> retrieveRepairData");
- 
-@@ -165,7 +178,7 @@ fapi::ReturnCode retrieveRepairData(const fapi::Target      &i_tgtHandle,
-         {
-             fapi::MBvpdRecord l_vpdRecord = fapi::MBVPD_RECORD_VEIR;
- 
--            if(i_vpdType == EREPAIR::EREPAIR_VPD_MNFG)
-+            if(i_vpdType == EREPAIR_VPD_MNFG)
-             {
-                 l_vpdRecord = fapi::MBVPD_RECORD_MER0;
-             }
-@@ -184,12 +197,34 @@ fapi::ReturnCode retrieveRepairData(const fapi::Target      &i_tgtHandle,
-                 break;
-             }
- 
--            if((l_bufSize == 0) ||
--               ((i_vpdType == EREPAIR::EREPAIR_VPD_FIELD) &&
--                (l_bufSize > EREPAIR::EREPAIR_MEM_FIELD_VPD_SIZE_PER_CENTAUR))||
--               ((i_vpdType == EREPAIR::EREPAIR_VPD_MNFG) &&
--                (l_bufSize > EREPAIR::EREPAIR_MEM_MNFG_VPD_SIZE_PER_CENTAUR)))
-+            // Check whether we have Memory on a CDIMM
-+            l_rc = getDimmType(i_tgtHandle, l_customDimm);
-+
-+            if(l_rc)
-+            {
-+                FAPI_ERR("Error (0x%x) during DIMM type check",
-+                        static_cast<uint32_t> (l_rc));
-+                break;
-+            }
-+
-+            if(l_customDimm == fapi::ENUM_ATTR_SPD_CUSTOM_YES)
-             {
-+                if((l_bufSize == 0) ||
-+                   ((i_vpdType == EREPAIR_VPD_FIELD) &&
-+                    (l_bufSize > EREPAIR_MEM_FIELD_VPD_SIZE_PER_CENTAUR)) ||
-+                   ((i_vpdType == EREPAIR_VPD_MNFG) &&
-+                    (l_bufSize > EREPAIR_MEM_MNFG_VPD_SIZE_PER_CENTAUR)))
-+                {
-+                    FAPI_SET_HWP_ERROR(l_rc,
-+                                       RC_ACCESSOR_HWP_INVALID_MEM_VPD_SIZE);
-+                    break;
-+                }
-+            }
-+            else if(l_bufSize == 0)
-+            {
-+                // TODO RTC: 119531. Add upper bound checking for l_bufSize
-+                // This size check will depend on whether the Lane eRepair data
-+                // is stored on the Planar VPD or on the Riser card VPD.
-                 FAPI_SET_HWP_ERROR(l_rc, RC_ACCESSOR_HWP_INVALID_MEM_VPD_SIZE);
-                 break;
-             }
-@@ -230,7 +265,7 @@ fapi::ReturnCode retrieveRepairData(const fapi::Target      &i_tgtHandle,
- 
-             fapi::MvpdRecord l_vpdRecord = fapi::MVPD_RECORD_VWML;
- 
--            if(i_vpdType == EREPAIR::EREPAIR_VPD_MNFG)
-+            if(i_vpdType == EREPAIR_VPD_MNFG)
-             {
-                 l_vpdRecord = fapi::MVPD_RECORD_MER0;
-             }
-@@ -250,10 +285,10 @@ fapi::ReturnCode retrieveRepairData(const fapi::Target      &i_tgtHandle,
-             }
- 
-             if((l_bufSize == 0) ||
--               ((i_vpdType == EREPAIR::EREPAIR_VPD_FIELD) &&
--                (l_bufSize > EREPAIR::EREPAIR_P8_MODULE_VPD_FIELD_SIZE)) ||
--               ((i_vpdType == EREPAIR::EREPAIR_VPD_MNFG) &&
--                (l_bufSize > EREPAIR::EREPAIR_P8_MODULE_VPD_MNFG_SIZE)))
-+               ((i_vpdType == EREPAIR_VPD_FIELD) &&
-+                (l_bufSize > EREPAIR_P8_MODULE_VPD_FIELD_SIZE)) ||
-+               ((i_vpdType == EREPAIR_VPD_MNFG) &&
-+                (l_bufSize > EREPAIR_P8_MODULE_VPD_MNFG_SIZE)))
-             {
-                 FAPI_SET_HWP_ERROR(l_rc,
-                                    RC_ACCESSOR_HWP_INVALID_FABRIC_VPD_SIZE);
-@@ -323,6 +358,7 @@ fapi::ReturnCode determineRepairLanes(const fapi::Target   &i_tgtHandle,
-     fapi::Target     l_mcsTarget;
-     fapi::Target     l_tgtHandle;
-     fapi::ReturnCode l_rc;
-+    uint8_t          l_customDimm;
-     fapi::ATTR_CHIP_UNIT_POS_Type l_busNum;
- 
-     FAPI_DBG(">> determineRepairLanes");
-@@ -394,21 +430,18 @@ fapi::ReturnCode determineRepairLanes(const fapi::Target   &i_tgtHandle,
-                 l_fabricBus->interface = (l_temp & 0x0F);
- #endif
- 
--                // Check if we have the correct Processor ID
--                if(l_chipPosition != l_fabricBus->device.processor_id)
--                {
--                    continue;
--                }
-+                // We do not need the check of processor ID because
-+                // a MVPD read is specific to a Processor
- 
-                 // Check if we have the matching the Fabric Bus types
-                 if((l_tgtType == fapi::TARGET_TYPE_ABUS_ENDPOINT) &&
--                   (l_fabricBus->type != EREPAIR::PROCESSOR_EDI))
-+                   (l_fabricBus->type != PROCESSOR_EDI))
-                 {
-                     continue;
-                 }
- 
-                 if((l_tgtType == fapi::TARGET_TYPE_XBUS_ENDPOINT) &&
--                   (l_fabricBus->type != EREPAIR::PROCESSOR_EI4))
-+                   (l_fabricBus->type != PROCESSOR_EI4))
-                 {
-                     continue;
-                 }
-@@ -428,17 +461,17 @@ fapi::ReturnCode determineRepairLanes(const fapi::Target   &i_tgtHandle,
-                 }
- 
-                 // Check if we have valid fail lane numbers
--                if(l_fabricBus->failBit == EREPAIR::INVALID_FAIL_LANE_NUMBER)
-+                if(l_fabricBus->failBit == INVALID_FAIL_LANE_NUMBER)
-                 {
-                     continue;
-                 }
- 
-                 // Copy the fail lane numbers in the vectors
--                if(l_fabricBus->interface == EREPAIR::PBUS_DRIVER)
-+                if(l_fabricBus->interface == PBUS_DRIVER)
-                 {
-                     o_txFailLanes.push_back(l_fabricBus->failBit);
-                 }
--                else if(l_fabricBus->interface == EREPAIR::PBUS_RECEIVER)
-+                else if(l_fabricBus->interface == PBUS_RECEIVER)
-                 {
-                     o_rxFailLanes.push_back(l_fabricBus->failBit);
-                 }
-@@ -468,6 +501,19 @@ fapi::ReturnCode determineRepairLanes(const fapi::Target   &i_tgtHandle,
-                 l_tgtHandle = l_mcsTarget;
-             }
- 
-+            if(l_tgtType == fapi::TARGET_TYPE_MEMBUF_CHIP)
-+            {
-+                // Check whether we have Memory on a CDIMM
-+                l_rc = getDimmType(i_tgtHandle, l_customDimm);
-+
-+                if(l_rc)
-+                {
-+                    FAPI_ERR("Error (0x%x) during DIMM type check",
-+                            static_cast<uint32_t> (l_rc));
-+                    break;
-+                }
-+            }
-+
-             // Read Power bus eRepair data and get the failed lane numbers
-             for(l_loop = 0;
-                 l_loop < l_numRepairs;
-@@ -491,14 +537,20 @@ fapi::ReturnCode determineRepairLanes(const fapi::Target   &i_tgtHandle,
-                 l_memBus->interface = (l_temp & 0x0F);
- #endif
- 
--                // Check if we have the correct Processor/Centaur ID
--                if(l_chipPosition != l_memBus->device.proc_centaur_id)
-+                // Check if we have the correct Centaur ID
-+                // NOTE: We do not prefer to make the check of Centaur ID if the
-+                // system is known to have CDIMMs. This check is applicable
-+                // only for systems with ISDIMM because in the ISDIMM systems
-+                // the Lane eRepair data for multiple Centaurs is maintained in
-+                // a common VPD.
-+                if((l_customDimm != fapi::ENUM_ATTR_SPD_CUSTOM_YES) &&
-+                   (l_chipPosition != l_memBus->device.proc_centaur_id))
-                 {
-                     continue;
-                 }
- 
-                 // Check if we have the matching the Memory Bus types
--                if(l_memBus->type != EREPAIR::MEMORY_EDI)
-+                if(l_memBus->type != MEMORY_EDI)
-                 {
-                     continue;
-                 }
-@@ -518,7 +570,7 @@ fapi::ReturnCode determineRepairLanes(const fapi::Target   &i_tgtHandle,
-                 }
- 
-                 // Check if we have valid fail lane numbers
--                if(l_memBus->failBit == EREPAIR::INVALID_FAIL_LANE_NUMBER)
-+                if(l_memBus->failBit == INVALID_FAIL_LANE_NUMBER)
-                 {
-                     continue;
-                 }
-@@ -526,22 +578,22 @@ fapi::ReturnCode determineRepairLanes(const fapi::Target   &i_tgtHandle,
-                 // Copy the fail lane numbers in the vectors
-                 if(l_tgtType == fapi::TARGET_TYPE_MCS_CHIPLET)
-                 {
--                   if(l_memBus->interface == EREPAIR::DMI_MCS_DRIVE)
-+                   if(l_memBus->interface == DMI_MCS_DRIVE)
-                    {
-                        o_txFailLanes.push_back(l_memBus->failBit);
-                    }
--                   else if(l_memBus->interface == EREPAIR::DMI_MCS_RECEIVE)
-+                   else if(l_memBus->interface == DMI_MCS_RECEIVE)
-                    {
-                        o_rxFailLanes.push_back(l_memBus->failBit);
-                    }
-                 }
-                 else if(l_tgtType == fapi::TARGET_TYPE_MEMBUF_CHIP)
-                 {
--                   if(l_memBus->interface == EREPAIR::DMI_MEMBUF_DRIVE)
-+                   if(l_memBus->interface == DMI_MEMBUF_DRIVE)
-                    {
-                        o_txFailLanes.push_back(l_memBus->failBit);
-                    }
--                   else if(l_memBus->interface == EREPAIR::DMI_MEMBUF_RECEIVE)
-+                   else if(l_memBus->interface == DMI_MEMBUF_RECEIVE)
-                    {
-                        o_rxFailLanes.push_back(l_memBus->failBit);
-                    }
-@@ -551,10 +603,64 @@ fapi::ReturnCode determineRepairLanes(const fapi::Target   &i_tgtHandle,
- 
-     }while(0);
- 
--    FAPI_INF("<< No.of Fail Lanes: tx: %d, rx: %d",
-+    FAPI_INF("<< No.of Fail Lanes: tx: %zd, rx: %zd",
-               o_txFailLanes.size(), o_rxFailLanes.size());
- 
-     return(l_rc);
- }
- 
-+fapi::ReturnCode getDimmType(const fapi::Target &i_tgtHandle,
-+                             uint8_t &o_customDimm)
-+{
-+    fapi::ReturnCode          l_rc;
-+    std::vector<fapi::Target> l_mbaChiplets;
-+    fapi::Target              l_mbaTarget;
-+
-+    do
-+    {
-+        // Get the connected MBA chiplet and determine whether we have CDIMM
-+        l_rc = fapiGetChildChiplets(i_tgtHandle,
-+                                    fapi::TARGET_TYPE_MBA_CHIPLET,
-+                                    l_mbaChiplets,
-+                                    fapi::TARGET_STATE_FUNCTIONAL);
-+        if(l_rc || (0 == l_mbaChiplets.size()))
-+        {
-+            FAPI_ERR("Error (0x%x) during get child MBA targets",
-+                    static_cast<uint32_t> (l_rc));
-+            break;
-+        }
-+
-+        l_mbaTarget = l_mbaChiplets[0];
-+        std::vector<fapi::Target> l_target_dimm_array;
-+
-+        l_rc =  fapiGetAssociatedDimms(l_mbaTarget, l_target_dimm_array);
-+
-+        if(l_rc)
-+        {
-+            FAPI_ERR("Error (0x%x), from fapiGetAssociatedDimms",
-+                    static_cast<uint32_t>(l_rc));
-+            break;
-+        }
-+
-+        if(0 != l_target_dimm_array.size())
-+        {
-+            l_rc = FAPI_ATTR_GET(ATTR_SPD_CUSTOM,
-+                    &l_target_dimm_array[0],
-+                    o_customDimm);
-+            if(l_rc)
-+            {
-+                FAPI_ERR("Error (0x%x), from FAPI_ATTR_GET",
-+                        static_cast<uint32_t>(l_rc));
-+                break;
-+            }
-+        }
-+        else
-+        {
-+            o_customDimm = fapi::ENUM_ATTR_SPD_CUSTOM_NO;
-+        }
-+    }while(0);
-+
-+    return l_rc;
-+}
-+
- }// endof extern "C"
-diff --git a/src/usr/hwpf/hwp/bus_training/erepairSetFailedLanesHwp.C b/src/usr/hwpf/hwp/bus_training/erepairSetFailedLanesHwp.C
-index a59d9e5..b0724f9 100755
---- a/src/usr/hwpf/hwp/bus_training/erepairSetFailedLanesHwp.C
-+++ b/src/usr/hwpf/hwp/bus_training/erepairSetFailedLanesHwp.C
-@@ -5,7 +5,7 @@
- /*                                                                        */
- /* OpenPOWER HostBoot Project                                             */
- /*                                                                        */
--/* Contributors Listed Below - COPYRIGHT 2013,2014                        */
-+/* Contributors Listed Below - COPYRIGHT 2013,2015                        */
- /* [+] International Business Machines Corp.                              */
- /*                                                                        */
- /*                                                                        */
-@@ -173,6 +173,9 @@ ReturnCode writeRepairDataToVPD(const Target               &i_tgtHandle,
-     uint8_t    *l_retBuf = NULL;
-     uint32_t   l_bufSize = 0;
-     Target     l_procTarget;
-+    uint8_t    l_customDimm;
-+    std::vector<fapi::Target> l_mbaChiplets;
-+    fapi::Target              l_mbaTarget;
- 
-     FAPI_DBG(">> writeRepairDataToVPD");
- 
-@@ -202,12 +205,66 @@ ReturnCode writeRepairDataToVPD(const Target               &i_tgtHandle,
-                 break;
-             }
- 
--            if((l_bufSize == 0) ||
--               ((i_vpdType == EREPAIR_VPD_FIELD) &&
--                (l_bufSize > EREPAIR_MEM_FIELD_VPD_SIZE_PER_CENTAUR)) ||
--               ((i_vpdType == EREPAIR_VPD_MNFG) &&
--                (l_bufSize > EREPAIR_MEM_MNFG_VPD_SIZE_PER_CENTAUR)))
-+            // Get the connected MBA chiplet and determine whether we have CDIMM
-+            l_rc = fapiGetChildChiplets(i_tgtHandle,
-+                                        fapi::TARGET_TYPE_MBA_CHIPLET,
-+                                        l_mbaChiplets,
-+                                        fapi::TARGET_STATE_FUNCTIONAL);
-+
-+            if(l_rc || (0 == l_mbaChiplets.size()))
-+            {
-+                FAPI_ERR("Error (0x%x) during get child MBA targets",
-+                         static_cast<uint32_t> (l_rc));
-+                break;
-+            }
-+
-+            l_mbaTarget = l_mbaChiplets[0];
-+            std::vector<fapi::Target> l_target_dimm_array;
-+
-+            l_rc =  fapiGetAssociatedDimms(l_mbaTarget, l_target_dimm_array);
-+
-+            if(l_rc)
-+            {
-+                FAPI_ERR("Error (0x%x), from fapiGetAssociatedDimms",
-+                          static_cast<uint32_t>(l_rc));
-+                break;
-+            }
-+
-+            if(0 != l_target_dimm_array.size())
-+            {
-+                l_rc = FAPI_ATTR_GET(ATTR_SPD_CUSTOM,
-+                                     &l_target_dimm_array[0],
-+                                     l_customDimm);
-+                if(l_rc)
-+                {
-+                    FAPI_ERR("Error (0x%x), from FAPI_ATTR_GET",
-+                             static_cast<uint32_t>(l_rc));
-+                    break;
-+                }
-+            }
-+            else
-+            {
-+                l_customDimm = fapi::ENUM_ATTR_SPD_CUSTOM_NO;
-+            }
-+
-+            if(l_customDimm == fapi::ENUM_ATTR_SPD_CUSTOM_YES)
-+            {
-+                if((l_bufSize == 0) ||
-+                       ((i_vpdType == EREPAIR_VPD_FIELD) &&
-+                        (l_bufSize > EREPAIR_MEM_FIELD_VPD_SIZE_PER_CENTAUR)) ||
-+                       ((i_vpdType == EREPAIR_VPD_MNFG) &&
-+                        (l_bufSize > EREPAIR_MEM_MNFG_VPD_SIZE_PER_CENTAUR)))
-+                {
-+                    FAPI_SET_HWP_ERROR(l_rc,
-+                                       RC_ACCESSOR_HWP_INVALID_MEM_VPD_SIZE);
-+                    break;
-+                }
-+            }
-+            else if(l_bufSize == 0)
-             {
-+                // TODO RTC: 119531. Add upper bound checking for l_bufSize
-+                // This size check will depend on whether the Lane eRepair data
-+                // is stored on the Planar VPD or on the Riser card VPD.
-                 FAPI_SET_HWP_ERROR(l_rc, RC_ACCESSOR_HWP_INVALID_MEM_VPD_SIZE);
-                 break;
-             }
-@@ -221,7 +278,7 @@ ReturnCode writeRepairDataToVPD(const Target               &i_tgtHandle,
-                 break;
-             }
- 
--            // Retrieve the eRepair data from the Centaur FRU VPD
-+            // Retrieve the Field eRepair data from the Centaur FRU VPD
-             l_rc = fapiGetMBvpdField(l_vpdRecord,
-                                      MBVPD_KEYWORD_PDI,
-                                      i_tgtHandle,
-@@ -315,7 +372,7 @@ ReturnCode writeRepairDataToVPD(const Target               &i_tgtHandle,
-                 break;
-             }
- 
--            // Retrieve the eRepair data from the MVPD
-+            // Retrieve the Field eRepair data from the MVPD
-             l_rc = fapiGetMvpdField(l_vpdRecord,
-                                     MVPD_KEYWORD_PDI,
-                                     l_procTarget,
--- 
-1.7.4.1
-
diff --git a/openpower/package/hostboot/hostboot.mk b/openpower/package/hostboot/hostboot.mk
index d3b76fa..478f3ed 100644
--- a/openpower/package/hostboot/hostboot.mk
+++ b/openpower/package/hostboot/hostboot.mk
@@ -4,7 +4,7 @@
 #
 ################################################################################
 
-HOSTBOOT_VERSION ?= 3593853a4323d9ec7de1ad6502e22b3e66af03ae
+HOSTBOOT_VERSION ?= bda236e6e0c7d3aa5165160abbd5ead92ac0a68e
 HOSTBOOT_SITE ?= $(call github,open-power,hostboot,$(HOSTBOOT_VERSION))
 
 HOSTBOOT_LICENSE = Apache-2.0
@@ -15,7 +15,8 @@
 
 HOSTBOOT_ENV_VARS=$(TARGET_MAKE_ENV) \
     CONFIG_FILE=$(BR2_EXTERNAL)/configs/hostboot/$(BR2_HOSTBOOT_CONFIG_FILE) \
-    OPENPOWER_BUILD=1 CROSS_PREFIX=$(TARGET_CROSS) HOST_PREFIX="" HOST_BINUTILS_DIR=$(HOST_BINUTILS_DIR)
+    OPENPOWER_BUILD=1 CROSS_PREFIX=$(TARGET_CROSS) HOST_PREFIX="" HOST_BINUTILS_DIR=$(HOST_BINUTILS_DIR) \
+    HOSTBOOT_VERSION=`cat $(HOSTBOOT_VERSION_FILE)`
 
 define HOSTBOOT_BUILD_CMDS
         $(HOSTBOOT_ENV_VARS) bash -c 'cd $(@D) && source ./env.bash && $(MAKE)'
diff --git a/openpower/package/openpower-pnor/openpower-pnor.mk b/openpower/package/openpower-pnor/openpower-pnor.mk
index 15e4417..d19e95d 100644
--- a/openpower/package/openpower-pnor/openpower-pnor.mk
+++ b/openpower/package/openpower-pnor/openpower-pnor.mk
@@ -8,11 +8,21 @@
 # make doesn't care for quotes in the dependencies.
 XML_PACKAGE=$(subst $\",,$(BR2_OPENPOWER_XML_PACKAGE))
 
-OPENPOWER_PNOR_VERSION ?= 94389f62eabecf00ef129b4184bf4ba2bc9cd193
+OPENPOWER_PNOR_VERSION ?= 3748ff041448a3909d5ffc5e62befcfcb597c0c1
 OPENPOWER_PNOR_SITE ?= $(call github,open-power,pnor,$(OPENPOWER_PNOR_VERSION))
 
 OPENPOWER_PNOR_LICENSE = Apache-2.0
-OPENPOWER_PNOR_DEPENDENCIES = hostboot hostboot-binaries $(XML_PACKAGE) skiboot host-openpower-ffs occ
+OPENPOWER_PNOR_DEPENDENCIES = hostboot hostboot-binaries $(XML_PACKAGE) skiboot host-openpower-ffs occ capp-ucode
+
+ifeq ($(BR2_TARGET_SKIBOOT_EMBED_PAYLOAD),n)
+
+ifeq ($(BR2_TARGET_ROOTFS_INITRAMFS),y)
+OPENPOWER_PNOR_DEPENDENCIES += linux26-rebuild-with-initramfs
+else
+OPENPOWER_PNOR_DEPENDENCIES += linux
+endif
+
+endif
 
 OPENPOWER_PNOR_INSTALL_IMAGES = YES
 OPENPOWER_PNOR_INSTALL_TARGET = NO
@@ -20,6 +30,11 @@
 HOSTBOOT_IMAGE_DIR=$(STAGING_DIR)/hostboot_build_images/
 HOSTBOOT_BINARY_DIR = $(STAGING_DIR)/hostboot_binaries/
 OPENPOWER_PNOR_SCRATCH_DIR = $(STAGING_DIR)/openpower_pnor_scratch/
+OPENPOWER_VERSION_DIR = $(STAGING_DIR)/openpower_version
+
+# Subpackages we want to include in the version info (do not include openpower-pnor)
+OPENPOWER_VERSIONED_SUBPACKAGES = hostboot occ skiboot hostboot-binaries $(XML_PACKAGE) capp-ucode
+OPENPOWER_PNOR = openpower-pnor
 
 define OPENPOWER_PNOR_INSTALL_IMAGES_CMDS
         mkdir -p $(OPENPOWER_PNOR_SCRATCH_DIR)
@@ -33,7 +48,9 @@
             -targeting_binary_source $(BR2_OPENPOWER_TARGETING_BIN_FILENAME) \
             -sbe_binary_filename $(BR2_HOSTBOOT_BINARY_SBE_FILENAME) \
             -sbec_binary_filename $(BR2_HOSTBOOT_BINARY_SBEC_FILENAME) \
-            -occ_binary_filename $(OCC_STAGING_DIR)/$(BR2_OCC_BIN_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)
 
         mkdir -p $(STAGING_DIR)/pnor/
         $(TARGET_MAKE_ENV) $(@D)/create_pnor_image.pl \
@@ -43,12 +60,16 @@
             -scratch_dir $(OPENPOWER_PNOR_SCRATCH_DIR) \
             -outdir $(STAGING_DIR)/pnor/ \
             -payload $(BINARIES_DIR)/$(BR2_SKIBOOT_LID_NAME) \
+            -bootkernel $(BINARIES_DIR)/$(LINUX_IMAGE_NAME) \
             -sbe_binary_filename $(BR2_HOSTBOOT_BINARY_SBE_FILENAME) \
             -sbec_binary_filename $(BR2_HOSTBOOT_BINARY_SBEC_FILENAME) \
             -occ_binary_filename $(OCC_STAGING_DIR)/$(BR2_OCC_BIN_FILENAME) \
-            -targeting_binary_filename $(BR2_OPENPOWER_TARGETING_ECC_FILENAME)
+            -targeting_binary_filename $(BR2_OPENPOWER_TARGETING_ECC_FILENAME) \
+            -openpower_version_filename $(OPENPOWER_PNOR_VERSION_FILE)
 
         $(INSTALL) $(STAGING_DIR)/pnor/$(BR2_OPENPOWER_PNOR_FILENAME) $(BINARIES_DIR)
 endef
 
 $(eval $(generic-package))
+# Generate openPOWER pnor version string by combining subpackage version string files
+$(eval $(call OPENPOWER_VERSION,$(OPENPOWER_PNOR)))
diff --git a/openpower/package/pkg-versions.mk b/openpower/package/pkg-versions.mk
new file mode 100644
index 0000000..3ac8c9f
--- /dev/null
+++ b/openpower/package/pkg-versions.mk
@@ -0,0 +1,195 @@
+################################################################################
+#
+# pkg-versions
+#
+# Read VERSION.readme in the current directory to learn about the version
+# string structure
+#
+################################################################################
+
+define OPENPOWER_SUBPACKAGE_VERSION
+
+$(2)_VERSION_FILE = $$(OPENPOWER_VERSION_DIR)/$(1).version.txt
+ALL_SUBPACKAGE_VERSIONS += $$($(2)_VERSION_FILE)
+
+### Create subpackage patch file
+define $(2)_OPENPOWER_PATCH_FILE
+
+mkdir -p "$$(OPENPOWER_VERSION_DIR)";
+
+# Remove patch file to start off fresh
+if [ -f $$(OPENPOWER_VERSION_DIR)/$(1).patch.txt ]; then \
+		rm -rf $$(OPENPOWER_VERSION_DIR)/$(1).patch.txt; \
+fi
+
+# Check all global patch directories
+$$(foreach path, $$(BR2_GLOBAL_PATCH_DIR),if ls $$(path)/$(1)/*.patch 2>/dev/null; then \
+		sha512sum $$(path)/$(1)/*.patch | sha512sum | \
+		xargs echo >> $$(OPENPOWER_VERSION_DIR)/$(1).tmp_patch.txt; fi;)
+
+# Check the package patch dir, $$(PKGDIR) doesn't exist when running the version rules
+if [ -n "$$(PKGDIR)" ]; then \
+	if ls $$(PKGDIR)*.patch 2>/dev/null; then sha512sum $$(PKGDIR)*.patch | sha512sum | \
+		xargs echo >> $$(OPENPOWER_VERSION_DIR)/$(1).tmp_patch.txt; \
+	fi; \
+else \
+	if ls $$(BR2_EXTERNAL)/package/$(1)/*.patch 2>/dev/null; then sha512sum \
+		$$(BR2_EXTERNAL)/package/$(1)/*.patch | sha512sum | \
+		xargs echo >> $$(OPENPOWER_VERSION_DIR)/$(1).tmp_patch.txt; \
+	fi; \
+fi
+
+# Combine all the patches found in the package and global package directories
+if [ -f $$(OPENPOWER_VERSION_DIR)/$(1).tmp_patch.txt ]; then \
+		cat $$(OPENPOWER_VERSION_DIR)/$(1).tmp_patch.txt | sha512sum | cut -c 1-7 | \
+		xargs echo -n > $$(OPENPOWER_VERSION_DIR)/$(1).patch.txt; \
+fi
+
+# Remove the tmp_patch file
+if [ -f $$(OPENPOWER_VERSION_DIR)/$(1).tmp_patch.txt ]; then \
+	rm -rf $$(OPENPOWER_VERSION_DIR)/$(1).tmp_patch.txt; \
+fi
+
+endef ###
+
+### Create subpackage version file
+define $(2)_OPENPOWER_VERSION_FILE
+
+mkdir -p "$$(OPENPOWER_VERSION_DIR)"
+
+# Add package name
+echo -n "	$(1)-" > $$($(2)_VERSION_FILE)
+
+# If site local
+# Add site local and user, local commit, if local is dirty
+# Else not local
+# Add package version, op-build is dirty, op-build patches
+if [ "$$($(2)_SITE_METHOD)" == "local" ]; then \
+echo -n "site_local-" >> $$($(2)_VERSION_FILE); \
+whoami | xargs echo -n >> $$($(2)_VERSION_FILE); \
+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 \
+	>> $$($(2)_VERSION_FILE); \
+\
+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); \
+\
+cd "$$(BR2_EXTERNAL)"; git describe --all --dirty | \
+	if grep -e "-dirty"; then \
+	echo -n "-opdirty" >> $$($(2)_VERSION_FILE); \
+	fi; \
+\
+if [ -f $$(OPENPOWER_VERSION_DIR)/$(1).patch.txt ]; then \
+	echo -n "-" >> $$($(2)_VERSION_FILE); \
+	cat $$(OPENPOWER_VERSION_DIR)/$(1).patch.txt >> $$($(2)_VERSION_FILE); fi \
+fi
+
+# Add new line to version.txt
+echo "" >> $$($(2)_VERSION_FILE);
+
+endef ###
+
+# Add appropriate templates to hooks
+$(2)_POST_PATCH_HOOKS += $(2)_OPENPOWER_PATCH_FILE
+$(2)_PRE_BUILD_HOOKS += $(2)_OPENPOWER_VERSION_FILE
+
+# Top-level rule to print or generate a subpackage version
+$(1)-version: $$(if $$(wildcard $$($(2)_VERSION_FILE)),$(1)-print-version,$(1)-build-version)
+
+# Rule to print out subpackage version
+$(1)-print-version:
+		@echo "=== $(2)_VERSION ==="
+		@cat $$($(2)_VERSION_FILE) | xargs echo
+
+# Rule to generate subpackage version
+$(1)-build-version:
+		@echo "=== $(2)_VERSION ==="
+		@echo "	Searching for patches..."
+		@$$($(2)_OPENPOWER_PATCH_FILE)
+		@echo "	End of patches...";
+		@echo "	Creating version string (various output may display)..."
+		@$$($(2)_OPENPOWER_VERSION_FILE)
+		@echo "	End creating version string..."
+		@echo -n "	version: "; cat $$($(2)_VERSION_FILE) | xargs echo
+
+endef
+
+define OPENPOWER_VERSION
+
+UPPER_CASE_PKG = $(call UPPERCASE,$(1))
+$$(UPPER_CASE_PKG)_VERSION_FILE = $$(OPENPOWER_VERSION_DIR)/$(1).version.txt
+
+
+$$(eval $$(foreach pkg,$$(OPENPOWER_VERSIONED_SUBPACKAGES), \
+		$$(call OPENPOWER_SUBPACKAGE_VERSION,$$(pkg),$$(call UPPERCASE,$$(pkg)))))
+
+### Combine subpackage files into one version file
+define $$(UPPER_CASE_PKG)_OPENPOWER_VERSION_FILE
+
+mkdir -p "$$(OPENPOWER_VERSION_DIR)"
+
+# Add vendor or default open-power
+if [ "$$(OPBUILD_VENDOR)" != '' ]; then \
+echo -n "$$(OPBUILD_VENDOR)-" > $$($$(UPPER_CASE_PKG)_VERSION_FILE); \
+else \
+echo -n "open-power-" > $$($$(UPPER_CASE_PKG)_VERSION_FILE); \
+fi
+
+# Add platform or default from defconfig
+if [ "$$(OPBUILD_PLATFORM)" != '' ]; then \
+echo -n "$$(OPBUILD_PLATFORM)-" >> $$($$(UPPER_CASE_PKG)_VERSION_FILE); \
+else \
+echo -n "$$(BR2_OPENPOWER_CONFIG_NAME)-" >> $$($$(UPPER_CASE_PKG)_VERSION_FILE); \
+fi
+
+# Add op-build version
+# Order: OPBUILD_VERSION, tag, commit, unknown
+if [ "$$(OPBUILD_VERSION)" != '' ]; then \
+	echo -n "$$(OPBUILD_VERSION)" >> $$($$(UPPER_CASE_PKG)_VERSION_FILE); \
+else \
+cd "$$(BR2_EXTERNAL)"; (git describe --tags || git log -n1 --pretty=format:'%h' || echo "unknown") \
+	| sed 's/\(.*\)-g\([0-9a-f]\{7\}\).*/\2/' | xargs echo -n \
+	>> $$($$(UPPER_CASE_PKG)_VERSION_FILE); \
+fi
+
+# Check if op-build is dirty
+cd "$$(BR2_EXTERNAL)"; git describe --all --dirty | grep -e "-dirty" | sed 's/.*\(-dirty\)/\1/' | \
+	xargs echo -n >> $$($$(UPPER_CASE_PKG)_VERSION_FILE);
+
+# Add new line to $$($$(UPPER_CASE_PKG)_VERSION_FILE)
+echo "" >> $$($$(UPPER_CASE_PKG)_VERSION_FILE);
+
+# Combing subpackage version files into $$($$(UPPER_CASE_PKG)_VERSION_FILE)
+$$(foreach verFile,$$(ALL_SUBPACKAGE_VERSIONS),
+	if [ -f $$(verFile) ]; then cat $$(verFile) \
+	>> $$($$(UPPER_CASE_PKG)_VERSION_FILE); fi )
+
+endef ###
+
+$$(UPPER_CASE_PKG)_PRE_BUILD_HOOKS += $$(UPPER_CASE_PKG)_OPENPOWER_VERSION_FILE
+
+# Top-level rule to print or generate openpower-pnor version
+$(1)-version: $$(if $$(wildcard $$($$(UPPER_CASE_PKG)_VERSION_FILE)),$(1)-print-version,$(1)-build-version)
+
+# Rule to print out pnor version
+$(1)-print-version:
+		@echo "=== $$(UPPER_CASE_PKG)_VERSION ==="
+		@cat $$($$(UPPER_CASE_PKG)_VERSION_FILE)
+		@echo ""; echo "**See openpower/package/VERSION.readme for detailed info on package strings"; echo ""
+
+
+# Rule to generate pnor version
+$(1)-build-version: $$(foreach pkg,$$(OPENPOWER_VERSIONED_SUBPACKAGES), $$(pkg)-version)
+		@$$($$(UPPER_CASE_PKG)_OPENPOWER_VERSION_FILE)
+		@echo "=== $$(UPPER_CASE_PKG)_VERSION ==="
+		@cat $$($$(UPPER_CASE_PKG)_VERSION_FILE)
+		@echo ""; echo "**See openpower/package/VERSION.readme for detailed info on package strings"; echo ""
+
+endef
diff --git a/openpower/package/skiboot/Config.in b/openpower/package/skiboot/Config.in
new file mode 100644
index 0000000..e1f571d
--- /dev/null
+++ b/openpower/package/skiboot/Config.in
@@ -0,0 +1,15 @@
+
+config BR2_TARGET_SKIBOOT
+	bool "skiboot"
+	depends on BR2_powerpc64 || BR2_powerpc64le
+        default y if (BR2_OPENPOWER_PLATFORM && BR2_powerpc_power8)
+	help
+	  Build skiboot POWER8 firmware
+
+if BR2_TARGET_SKIBOOT
+
+config BR2_TARGET_SKIBOOT_EMBED_PAYLOAD
+	bool "Embed kernel payload in skiboot image"
+	depends on BR2_LINUX_KERNEL_ZIMAGE_EPAPR
+
+endif
diff --git a/openpower/package/skiboot/skiboot-0001-specify-mbig-endian-in-link-flags.patch b/openpower/package/skiboot/skiboot-0001-specify-mbig-endian-in-link-flags.patch
new file mode 100644
index 0000000..f5f174c
--- /dev/null
+++ b/openpower/package/skiboot/skiboot-0001-specify-mbig-endian-in-link-flags.patch
@@ -0,0 +1,26 @@
+From ec49ccee122c1be9b0d90c0f810a8964575bd57f Mon Sep 17 00:00:00 2001
+From: Jeremy Kerr <jk@ozlabs.org>
+Date: Wed, 11 Feb 2015 15:47:17 +0800
+Subject: [PATCH] Makefile: specify -mbig-endian in link flags
+
+Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
+---
+ Makefile.main | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/Makefile.main b/Makefile.main
+index b5376fc..0fca221 100644
+--- a/Makefile.main
++++ b/Makefile.main
+@@ -64,7 +64,7 @@ CFLAGS += $(CWARNS) $(OPTS) $(DBG)
+ 
+ LDFLAGS := -m64 -static -nostdlib -Wl,--gc-sections -pie
+ LDFLAGS += -Wl,-Ttext-segment,$(LD_TEXT) -Wl,-N -Wl,--build-id=none
+-LDFLAGS += -Wl,--no-multi-toc
++LDFLAGS += -Wl,--no-multi-toc -mbig-endian -Wl,--oformat,elf64-powerpc
+ LDRFLAGS=-melf64ppc
+ # Debug stuff
+ #LDFLAGS += -Wl,-v -Wl,-Map,foomap 
+-- 
+1.9.1
+
diff --git a/openpower/package/skiboot/skiboot.mk b/openpower/package/skiboot/skiboot.mk
new file mode 100644
index 0000000..97c6cb6
--- /dev/null
+++ b/openpower/package/skiboot/skiboot.mk
@@ -0,0 +1,37 @@
+################################################################################
+#
+# skiboot
+#
+################################################################################
+
+SKIBOOT_VERSION = 9a3f68b499e686ff3b543633f59192890f6c740b
+SKIBOOT_SITE = $(call github,open-power,skiboot,$(SKIBOOT_VERSION))
+SKIBOOT_INSTALL_IMAGES = YES
+SKIBOOT_INSTALL_TARGET = NO
+
+SKIBOOT_MAKE_OPTS += CC="$(TARGET_CC)" LD="$(TARGET_LD)" \
+		     AS="$(TARGET_AS)" AR="$(TARGET_AR)" NM="$(TARGET_NM)" \
+		     OBJCOPY="$(TARGET_OBJCOPY)" OBJDUMP="$(TARGET_OBJDUMP)" \
+		     SIZE="$(TARGET_CROSS)size"
+
+ifeq ($(BR2_TARGET_SKIBOOT_EMBED_PAYLOAD),y)
+SKIBOOT_MAKE_OPTS += KERNEL="$(BINARIES_DIR)/$(LINUX_IMAGE_NAME)"
+
+ifeq ($(BR2_TARGET_ROOTFS_INITRAMFS),y)
+SKIBOOT_DEPENDENCIES += linux26-rebuild-with-initramfs
+else
+SKIBOOT_DEPENDENCIES += linux
+endif
+
+endif
+
+define SKIBOOT_BUILD_CMDS
+	$(TARGET_CONFIGURE_OPTS) SKIBOOT_VERSION=$(SKIBOOT_VERSION) \
+		$(MAKE) $(SKIBOOT_MAKE_OPTS) -C $(@D) all
+endef
+
+define SKIBOOT_INSTALL_IMAGES_CMDS
+	$(INSTALL) -D -m 755 $(@D)/skiboot.lid $(BINARIES_DIR)
+endef
+
+$(eval $(generic-package))
diff --git a/openpower/scripts/op-target-dependencies b/openpower/scripts/op-target-dependencies
new file mode 100755
index 0000000..cd24a56
--- /dev/null
+++ b/openpower/scripts/op-target-dependencies
@@ -0,0 +1,87 @@
+#!/usr/bin/env perl
+
+use strict;
+my %seen = ();
+
+# Generate dependency list for all 'priority' targets.  These are targets a
+# user is likely to build.
+my @priority_targets = ( "openpower-pnor" );
+foreach my $target (@priority_targets)
+{
+    next if $seen{$target};
+
+    print "$target\n";
+    $seen{$target} = 1;
+    package_deps($target, 0);
+}
+
+# Generate dependency list for all other targets.
+packages();
+
+# @sub packages
+# @brief Determine all the packages that can be built.
+#
+# Skip host-* (uninteresting) and target-* (buildroot special) packages.
+sub packages
+{
+    open TARGETS, "make --directory=`pwd`/buildroot O=`pwd`/output ".
+                  "show-targets | sed 's/^make:.*//' |";
+
+    while (my $line = <TARGETS>)
+    {
+        chomp $line;
+        next if ($line eq "");
+
+        my @targets = split / /,$line;
+        foreach (@targets)
+        {
+            next if ($seen{$_});
+            next if ($_ =~ m/^host-/);
+            next if ($_ =~ m/^target-/);
+
+            print $_."\n";
+            $seen{$_} = 1;
+            package_deps($_, 0);
+        }
+    }
+
+    close TARGETS
+
+}
+
+# @sub package_deps
+# @brief Collect children dependencies for a package.
+sub package_deps
+{
+    my $package = shift;
+    my $level = shift;
+
+    $package =~ s/-install-images//;    # Strip off -install-images subpass.
+    $package =~ s/-rebuild.*//;         # Strip off -rebuild* subpass.
+    $package =~ s/linux[0-9]*/linux/;   # Strip off linux version.
+
+    open DEPENDS, "make --directory=`pwd`/buildroot O=`pwd`/output ".
+                  "$package-show-depends | sed 's/^make:.*//' |";
+
+    while (my $line = <DEPENDS>)
+    {
+        chomp $line;
+        next if ($line eq "");
+
+        my @depends = split / /,$line;
+        foreach my $depend (@depends)
+        {
+            foreach (0..$level)
+            {
+                print "  ";
+            }
+            print $depend."\n";
+
+            next if ($seen{$depend});
+            $seen{$depend} = 1;
+            package_deps($depend, $level+1);
+        }
+    }
+
+    close DEPENDS;
+}
