Merge remote-tracking branch 'remotes/upstream/master'
diff --git a/buildroot b/buildroot
index c28573e..23118ce 160000
--- a/buildroot
+++ b/buildroot
@@ -1 +1 @@
-Subproject commit c28573e576611706ffe34819109d3beacb8ff6a8
+Subproject commit 23118cea706cc738c334b868606b19bfda016705
diff --git a/openpower/configs/barreleye_defconfig b/openpower/configs/barreleye_defconfig
index b25db86..d3e3943 100644
--- a/openpower/configs/barreleye_defconfig
+++ b/openpower/configs/barreleye_defconfig
@@ -16,7 +16,7 @@
 BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var ../openpower/scripts/firmware-whitelist"
 BR2_LINUX_KERNEL=y
 BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.10.7"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.11.2"
 BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_OP_BUILD_PATH)/linux"
 BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
 BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_OP_BUILD_PATH)/configs/linux/skiroot_defconfig"
@@ -40,12 +40,15 @@
 BR2_OPENPOWER_PLATFORM=y
 BR2_OPENPOWER_POWER8=y
 BR2_HOSTBOOT_CONFIG_FILE="barreleye.config"
-BR2_BARRELEYE_SYSTEM_XML_FILENAME="BARRELEYE_hb.system.xml"
-BR2_BARRELEYE_MRW_XML_FILENAME="BARRELEYE_hb.mrw.xml"
-BR2_BARRELEYE_BIOS_XML_FILENAME="BARRELEYE_bios.xml"
+BR2_OPENPOWER_MACHINE_XML_TARGET_TYPES_OPENPOWER_XML=y
+BR2_OPENPOWER_MACHINE_XML_GITHUB_PROJECT_VALUE="barreleye-xml"
+BR2_OPENPOWER_MACHINE_XML_VERSION="253622f22fe142ea67a0025e9bcc3044db038898"
+BR2_OPENPOWER_MACHINE_XML_FILENAME="barreleye.xml"
+BR2_OPENPOWER_SYSTEM_XML_FILENAME="BARRELEYE_hb.system.xml"
+BR2_OPENPOWER_MRW_XML_FILENAME="BARRELEYE_hb.mrw.xml"
+BR2_OPENPOWER_BIOS_XML_FILENAME="BARRELEYE_bios.xml"
 BR2_OPENPOWER_PNOR_XML_LAYOUT_FILENAME="defaultPnorLayoutWithGoldenSide.xml"
 BR2_OPENPOWER_CONFIG_NAME="barreleye"
-BR2_OPENPOWER_XML_PACKAGE="barreleye-xml"
 BR2_OPENPOWER_PNOR_FILENAME="barreleye.pnor"
 BR2_OPENPOWER_PNOR_UPDATE_FILENAME="barreleye_update.pnor"
 BR2_HOSTBOOT_BINARY_SBE_FILENAME="venice_sbe.img.ecc"
diff --git a/openpower/configs/firenze_defconfig b/openpower/configs/firenze_defconfig
index 1fd42f9..13d4990 100644
--- a/openpower/configs/firenze_defconfig
+++ b/openpower/configs/firenze_defconfig
@@ -15,7 +15,7 @@
 BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var ../openpower/scripts/firmware-whitelist"
 BR2_LINUX_KERNEL=y
 BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.10.7"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.11.2"
 BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_OP_BUILD_PATH)/linux"
 BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
 BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_OP_BUILD_PATH)/configs/linux/skiroot_defconfig"
@@ -41,6 +41,7 @@
 BR2_OPENPOWER_POWER8=y
 # BR2_PACKAGE_HOSTBOOT is not set
 # BR2_PACKAGE_HOSTBOOT_BINARIES is not set
+# BR2_PACKAGE_MACHINE_XML is not set
 # BR2_PACKAGE_OPENPOWER_PNOR is not set
 BR2_OPENPOWER_CONFIG_NAME="openpower-firenze"
 BR2_PACKAGE_PETITBOOT=y
diff --git a/openpower/configs/firestone_defconfig b/openpower/configs/firestone_defconfig
index 9715034..46f7956 100644
--- a/openpower/configs/firestone_defconfig
+++ b/openpower/configs/firestone_defconfig
@@ -16,7 +16,7 @@
 BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var ../openpower/scripts/firmware-whitelist"
 BR2_LINUX_KERNEL=y
 BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.10.7"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.11.2"
 BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_OP_BUILD_PATH)/linux"
 BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
 BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_OP_BUILD_PATH)/configs/linux/skiroot_defconfig"
@@ -40,12 +40,14 @@
 BR2_OPENPOWER_PLATFORM=y
 BR2_OPENPOWER_POWER8=y
 BR2_HOSTBOOT_CONFIG_FILE="firestone.config"
-BR2_FIRESTONE_SYSTEM_XML_FILENAME="FIRESTONE_hb.system.xml"
-BR2_FIRESTONE_MRW_XML_FILENAME="FIRESTONE_hb.mrw.xml"
-BR2_FIRESTONE_BIOS_XML_FILENAME="FIRESTONE_bios.xml"
+BR2_OPENPOWER_MACHINE_XML_GITHUB_PROJECT_VALUE="firestone-xml"
+BR2_OPENPOWER_MACHINE_XML_VERSION="2494a430656504d014780000adbc2c2e7cfc54ab"
+BR2_OPENPOWER_MACHINE_XML_FILENAME="firestone.xml"
+BR2_OPENPOWER_SYSTEM_XML_FILENAME="FIRESTONE_hb.system.xml"
+BR2_OPENPOWER_MRW_XML_FILENAME="FIRESTONE_hb.mrw.xml"
+BR2_OPENPOWER_BIOS_XML_FILENAME="FIRESTONE_bios.xml"
 BR2_OPENPOWER_PNOR_XML_LAYOUT_FILENAME="defaultPnorLayoutWithGoldenSide.xml"
 BR2_OPENPOWER_CONFIG_NAME="firestone"
-BR2_OPENPOWER_XML_PACKAGE="firestone-xml"
 BR2_OPENPOWER_PNOR_FILENAME="firestone.pnor"
 BR2_OPENPOWER_PNOR_UPDATE_FILENAME="firestone_update.pnor"
 BR2_HOSTBOOT_BINARY_SBE_FILENAME="venice_sbe.img.ecc"
diff --git a/openpower/configs/garrison_defconfig b/openpower/configs/garrison_defconfig
index a73cb8d..172a8f7 100644
--- a/openpower/configs/garrison_defconfig
+++ b/openpower/configs/garrison_defconfig
@@ -16,7 +16,7 @@
 BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var ../openpower/scripts/firmware-whitelist"
 BR2_LINUX_KERNEL=y
 BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.10.7"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.11.2"
 BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_OP_BUILD_PATH)/linux"
 BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
 BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_OP_BUILD_PATH)/configs/linux/skiroot_defconfig"
@@ -40,12 +40,14 @@
 BR2_OPENPOWER_PLATFORM=y
 BR2_OPENPOWER_POWER8=y
 BR2_HOSTBOOT_CONFIG_FILE="garrison.config"
-BR2_GARRISON_SYSTEM_XML_FILENAME="GARRISON_hb.system.xml"
-BR2_GARRISON_MRW_XML_FILENAME="GARRISON_hb.mrw.xml"
-BR2_GARRISON_BIOS_XML_FILENAME="GARRISON_bios.xml"
+BR2_OPENPOWER_MACHINE_XML_GITHUB_PROJECT_VALUE="garrison-xml"
+BR2_OPENPOWER_MACHINE_XML_VERSION="19a516499e1090c20c5a3303db256529ef22c1c9"
+BR2_OPENPOWER_MACHINE_XML_FILENAME="garrison.xml"
+BR2_OPENPOWER_SYSTEM_XML_FILENAME="GARRISON_hb.system.xml"
+BR2_OPENPOWER_MRW_XML_FILENAME="GARRISON_hb.mrw.xml"
+BR2_OPENPOWER_BIOS_XML_FILENAME="GARRISON_bios.xml"
 BR2_OPENPOWER_PNOR_XML_LAYOUT_FILENAME="defaultPnorLayoutWithGoldenSide.xml"
 BR2_OPENPOWER_CONFIG_NAME="garrison"
-BR2_OPENPOWER_XML_PACKAGE="garrison-xml"
 BR2_OPENPOWER_PNOR_FILENAME="garrison.pnor"
 BR2_OPENPOWER_PNOR_UPDATE_FILENAME="garrison_update.pnor"
 BR2_HOSTBOOT_BINARY_SBE_FILENAME="naples_sbe.img.ecc"
diff --git a/openpower/configs/habanero_defconfig b/openpower/configs/habanero_defconfig
index 2bed733..f4ebe50 100644
--- a/openpower/configs/habanero_defconfig
+++ b/openpower/configs/habanero_defconfig
@@ -1,5 +1,6 @@
 BR2_powerpc64le=y
 BR2_powerpc_power8=y
+BR2_GLOBAL_PATCH_DIR="$(BR2_EXTERNAL_OP_BUILD_PATH)/patches/habanero-patches"
 BR2_GLIBC_VERSION_2_24=y
 BR2_BINUTILS_VERSION_2_27_X=y
 BR2_BINUTILS_EXTRA_CONFIG_OPTIONS="--enable-targets=powerpc64-linux"
@@ -16,7 +17,7 @@
 BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var ../openpower/scripts/firmware-whitelist"
 BR2_LINUX_KERNEL=y
 BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.10.7"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.11.2"
 BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_OP_BUILD_PATH)/linux"
 BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
 BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_OP_BUILD_PATH)/configs/linux/skiroot_defconfig"
@@ -40,12 +41,15 @@
 BR2_OPENPOWER_PLATFORM=y
 BR2_OPENPOWER_POWER8=y
 BR2_HOSTBOOT_CONFIG_FILE="habanero.config"
-BR2_HABANERO_SYSTEM_XML_FILENAME="HABANERO_hb.system.xml"
-BR2_HABANERO_MRW_XML_FILENAME="HABANERO_hb.mrw.xml"
-BR2_HABANERO_BIOS_XML_FILENAME="HABANERO_bios.xml"
+BR2_OPENPOWER_MACHINE_XML_TARGET_TYPES_OPENPOWER_XML=y
+BR2_OPENPOWER_MACHINE_XML_GITHUB_PROJECT_VALUE="habanero-xml"
+BR2_OPENPOWER_MACHINE_XML_VERSION="6a78496c286e284719a8201148a5088030b897de"
+BR2_OPENPOWER_MACHINE_XML_FILENAME="habanero.xml"
+BR2_OPENPOWER_SYSTEM_XML_FILENAME="HABANERO_hb.system.xml"
+BR2_OPENPOWER_MRW_XML_FILENAME="HABANERO_hb.mrw.xml"
+BR2_OPENPOWER_BIOS_XML_FILENAME="HABANERO_bios.xml"
 BR2_OPENPOWER_PNOR_XML_LAYOUT_FILENAME="defaultPnorLayoutWithGoldenSide.xml"
 BR2_OPENPOWER_CONFIG_NAME="habanero"
-BR2_OPENPOWER_XML_PACKAGE="habanero-xml"
 BR2_OPENPOWER_PNOR_FILENAME="habanero.pnor"
 BR2_OPENPOWER_PNOR_UPDATE_FILENAME="habanero_update.pnor"
 BR2_HOSTBOOT_BINARY_SBE_FILENAME="venice_sbe.img.ecc"
diff --git a/openpower/configs/hostboot/witherspoon.config b/openpower/configs/hostboot/witherspoon.config
index 8777ea9..a3380fb 100755
--- a/openpower/configs/hostboot/witherspoon.config
+++ b/openpower/configs/hostboot/witherspoon.config
@@ -1,6 +1,8 @@
-# The Serial Flash Controller is the AST2400 BMC.
-set   SFC_IS_AST2500
+# The BMC MBOX Protocol is used to access PNOR
+unset SFC_IS_AST2500
 unset SFC_IS_AST2400
+set   PNORDD_IS_BMCMBOX
+unset PNORDD_IS_SFC
 unset BMC_DOES_SFC_INIT
 unset SFC_IS_IBM_DPSS
 set   ALLOW_MICRON_PNOR
@@ -15,12 +17,12 @@
 set DJVPD_WRITE_TO_HW
 set DJVPD_READ_FROM_PNOR
 set DJVPD_WRITE_TO_PNOR
-unset MEMVPD_READ_FROM_HW
-unset MEMVPD_WRITE_TO_HW
+set MEMVPD_READ_FROM_HW
+set MEMVPD_WRITE_TO_HW
 set MEMVPD_READ_FROM_PNOR
 set MEMVPD_WRITE_TO_PNOR
-unset PVPD_READ_FROM_HW
-unset PVPD_WRITE_TO_HW
+set PVPD_READ_FROM_HW
+set PVPD_WRITE_TO_HW
 set PVPD_READ_FROM_PNOR
 set PVPD_WRITE_TO_PNOR
 unset CDIMM_FORMAT_FOR_CVPD
@@ -41,12 +43,15 @@
 set CONSOLE
 set BMC_AST2500
 
-set DISABLE_HOSTBOOT_RUNTIME
+unset DISABLE_HOSTBOOT_RUNTIME
 
 # Compile in hostboot runtime PRD
 set HBRT_PRD
-unset HTMGT
-unset START_OCC_DURING_BOOT
+
+# Compile in hb rt HTMGT : Load/Start OCC
+set HTMGT
+set START_OCC_DURING_BOOT
+unset CONSOLE_OUTPUT_OCC_COMM
 
 #PNOR flags
 unset PNOR_TWO_SIDE_SUPPORT
diff --git a/openpower/configs/hostboot/zaius.config b/openpower/configs/hostboot/zaius.config
index 099e62c..cd0390e 100755
--- a/openpower/configs/hostboot/zaius.config
+++ b/openpower/configs/hostboot/zaius.config
@@ -1,6 +1,8 @@
-# The Serial Flash Controller is the AST2500 BMC.
-set   SFC_IS_AST2500
+# The BMC MBOX Protocol is used to access PNOR
+unset SFC_IS_AST2500
 unset SFC_IS_AST2400
+set   PNORDD_IS_BMCMBOX
+unset PNORDD_IS_SFC
 unset BMC_DOES_SFC_INIT
 unset SFC_IS_IBM_DPSS
 set   ALLOW_MICRON_PNOR
@@ -41,7 +43,7 @@
 set CONSOLE
 set BMC_AST2500
 
-set DISABLE_HOSTBOOT_RUNTIME
+unset DISABLE_HOSTBOOT_RUNTIME
 
 # Compile in hostboot runtime PRD
 set HBRT_PRD
diff --git a/openpower/configs/linux/skiroot_defconfig b/openpower/configs/linux/skiroot_defconfig
index d8b8b1b..7e86f24 100644
--- a/openpower/configs/linux/skiroot_defconfig
+++ b/openpower/configs/linux/skiroot_defconfig
@@ -39,7 +39,6 @@
 # CONFIG_PPC_PSERIES is not set
 CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
 CONFIG_CPU_IDLE=y
-CONFIG_GEN_RTC=y
 CONFIG_HZ_100=y
 CONFIG_KEXEC=y
 CONFIG_IRQ_ALL_CPUS=y
@@ -52,7 +51,6 @@
 CONFIG_CMDLINE_BOOL=y
 CONFIG_CMDLINE="console=tty0 console=hvc0 quiet"
 # CONFIG_SECCOMP is not set
-CONFIG_PCI_MSI=y
 CONFIG_NET=y
 CONFIG_PACKET=y
 CONFIG_UNIX=y
@@ -151,7 +149,6 @@
 CONFIG_NETXEN_NIC=m
 CONFIG_SFC=m
 # 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
@@ -189,6 +186,8 @@
 # CONFIG_USB_EHCI_HCD_PPC_OF is not set
 CONFIG_USB_OHCI_HCD=y
 CONFIG_USB_STORAGE=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_DRV_GENERIC=m
 CONFIG_VIRT_DRIVERS=y
 CONFIG_VIRTIO_PCI=y
 # CONFIG_IOMMU_SUPPORT is not set
@@ -221,7 +220,6 @@
 CONFIG_CRC_ITU_T=y
 CONFIG_LIBCRC32C=y
 CONFIG_PRINTK_TIME=y
-CONFIG_DEBUG_FS=y
 CONFIG_MAGIC_SYSRQ=y
 CONFIG_DEBUG_KERNEL=y
 CONFIG_DEBUG_STACKOVERFLOW=y
diff --git a/openpower/configs/linux/skiroot_p9_defconfig b/openpower/configs/linux/skiroot_p9_defconfig
index a6f9452..9884909 100644
--- a/openpower/configs/linux/skiroot_p9_defconfig
+++ b/openpower/configs/linux/skiroot_p9_defconfig
@@ -39,7 +39,6 @@
 # CONFIG_PPC_PSERIES is not set
 CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
 CONFIG_CPU_IDLE=y
-CONFIG_GEN_RTC=y
 CONFIG_HZ_100=y
 CONFIG_KEXEC=y
 CONFIG_IRQ_ALL_CPUS=y
@@ -52,7 +51,6 @@
 CONFIG_CMDLINE_BOOL=y
 CONFIG_CMDLINE="console=tty0 console=hvc0 powersave=off"
 # CONFIG_SECCOMP is not set
-CONFIG_PCI_MSI=y
 CONFIG_NET=y
 CONFIG_PACKET=y
 CONFIG_UNIX=y
@@ -143,7 +141,6 @@
 CONFIG_NETXEN_NIC=m
 CONFIG_SFC=m
 # 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
@@ -180,6 +177,8 @@
 # CONFIG_USB_EHCI_HCD_PPC_OF is not set
 CONFIG_USB_OHCI_HCD=y
 CONFIG_USB_STORAGE=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_DRV_GENERIC=m
 CONFIG_VIRT_DRIVERS=y
 CONFIG_VIRTIO_PCI=y
 # CONFIG_IOMMU_SUPPORT is not set
@@ -208,7 +207,6 @@
 CONFIG_CRC_ITU_T=y
 CONFIG_LIBCRC32C=y
 CONFIG_PRINTK_TIME=y
-CONFIG_DEBUG_FS=y
 CONFIG_MAGIC_SYSRQ=y
 CONFIG_DEBUG_KERNEL=y
 CONFIG_DEBUG_STACKOVERFLOW=y
diff --git a/openpower/configs/openpower_mambo_defconfig b/openpower/configs/openpower_mambo_defconfig
index f3a61ce..cf7a6fd 100644
--- a/openpower/configs/openpower_mambo_defconfig
+++ b/openpower/configs/openpower_mambo_defconfig
@@ -14,7 +14,7 @@
 BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var ../openpower/scripts/firmware-whitelist"
 BR2_LINUX_KERNEL=y
 BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.10.7"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.11.2"
 BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_OP_BUILD_PATH)/linux"
 BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
 BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_OP_BUILD_PATH)/configs/linux/skiroot_defconfig"
@@ -37,10 +37,14 @@
 BR2_TARGET_ROOTFS_INITRAMFS=y
 BR2_OPENPOWER_PLATFORM=y
 BR2_OPENPOWER_POWER8=y
+# BR2_PACKAGE_HOST_OPENPOWER_FFS is not set
 # BR2_PACKAGE_HOSTBOOT is not set
 # BR2_PACKAGE_HOSTBOOT_BINARIES is not set
+# BR2_PACKAGE_MACHINE_XML is not set
 # BR2_PACKAGE_OPENPOWER_PNOR is not set
 BR2_OPENPOWER_CONFIG_NAME="openpower-mambo"
 BR2_PACKAGE_PETITBOOT=y
+# BR2_PACKAGE_HOST_P8_PORE_BINUTILS is not set
 # BR2_PACKAGE_OCC is not set
+# BR2_PACKAGE_CAPP_UCODE is not set
 # BR2_PACKAGE_IMA_CATALOG is not set
diff --git a/openpower/configs/openpower_p9_mambo_defconfig b/openpower/configs/openpower_p9_mambo_defconfig
index 5b782cf..c00a5fd 100644
--- a/openpower/configs/openpower_p9_mambo_defconfig
+++ b/openpower/configs/openpower_p9_mambo_defconfig
@@ -14,7 +14,7 @@
 BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var ../openpower/scripts/firmware-whitelist"
 BR2_LINUX_KERNEL=y
 BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.10.7"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.11.2"
 BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_OP_BUILD_PATH)/linux"
 BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
 BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_OP_BUILD_PATH)/configs/linux/skiroot_defconfig"
@@ -37,10 +37,17 @@
 BR2_TARGET_ROOTFS_INITRAMFS=y
 BR2_OPENPOWER_PLATFORM=y
 BR2_OPENPOWER_POWER9=y
+# BR2_PACKAGE_HOST_OPENPOWER_FFS is not set
 # BR2_PACKAGE_HOSTBOOT is not set
 # BR2_PACKAGE_HOSTBOOT_BINARIES is not set
+# BR2_PACKAGE_MACHINE_XML is not set
 # BR2_PACKAGE_OPENPOWER_PNOR is not set
 BR2_OPENPOWER_CONFIG_NAME="openpower-mambo-p9"
 BR2_PACKAGE_PETITBOOT=y
+# BR2_PACKAGE_HOST_P8_PORE_BINUTILS is not set
 # BR2_PACKAGE_OCC is not set
+# BR2_PACKAGE_CAPP_UCODE is not set
+# BR2_PACKAGE_HOST_PPE42_BINUTILS is not set
+# BR2_PACKAGE_HOST_PPE42_GCC is not set
 # BR2_PACKAGE_IMA_CATALOG is not set
+# BR2_PACKAGE_SBE is not set
diff --git a/openpower/configs/p9dsu_defconfig b/openpower/configs/p9dsu_defconfig
index f51c74a..4bf65f5 100644
--- a/openpower/configs/p9dsu_defconfig
+++ b/openpower/configs/p9dsu_defconfig
@@ -16,7 +16,7 @@
 BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var ../openpower/scripts/firmware-whitelist"
 BR2_LINUX_KERNEL=y
 BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.10.7"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.11.2"
 BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_OP_BUILD_PATH)/linux"
 BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
 BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_OP_BUILD_PATH)/configs/linux/skiroot_p9_defconfig"
@@ -41,9 +41,14 @@
 BR2_OPENPOWER_PLATFORM=y
 BR2_OPENPOWER_POWER9=y
 BR2_HOSTBOOT_CONFIG_FILE="p9dsu.config"
+BR2_OPENPOWER_MACHINE_XML_GITHUB_PROJECT_VALUE="p9dsu-xml"
+BR2_OPENPOWER_MACHINE_XML_VERSION="d429ddccae90d79769e4a0b5c8e07e37aa3edef5"
+BR2_OPENPOWER_MACHINE_XML_FILENAME="p9dsu.xml"
+BR2_OPENPOWER_SYSTEM_XML_FILENAME="P9DSU_hb.system.xml"
+BR2_OPENPOWER_MRW_XML_FILENAME="P9DSU_hb.mrw.xml"
+BR2_OPENPOWER_BIOS_XML_FILENAME="P9DSU_bios.xml"
 BR2_OPENPOWER_PNOR_XML_LAYOUT_FILENAME="defaultPnorLayout_64.xml"
 BR2_OPENPOWER_CONFIG_NAME="p9dsu"
-BR2_OPENPOWER_XML_PACKAGE="p9dsu-xml"
 BR2_OPENPOWER_PNOR_FILENAME="p9dsu.pnor"
 BR2_OPENPOWER_PNOR_UPDATE_FILENAME="p9dsu_update.pnor"
 BR2_HOSTBOOT_BINARY_SBE_FILENAME="nimbus_sbe.img.ecc"
@@ -57,9 +62,6 @@
 BR2_OCC_BIN_FILENAME="occ.bin"
 BR2_CAPP_UCODE_BIN_FILENAME="cappucode.bin"
 BR2_SKIBOOT_CUSTOM_VERSION=y
-BR2_SKIBOOT_CUSTOM_VERSION_VALUE="skiboot-5.5.0-rc2"
+BR2_SKIBOOT_CUSTOM_VERSION_VALUE="skiboot-5.6.0-16-g9abb449b9c57"
 BR2_PACKAGE_LOADKEYS=y
-BR2_P9DSU_SYSTEM_XML_FILENAME="P9DSU_hb.system.xml"
-BR2_P9DSU_MRW_XML_FILENAME="P9DSU_hb.mrw.xml"
-BR2_P9DSU_BIOS_XML_FILENAME="P9DSU_bios.xml"
-BR2_IMA_CATALOG_DTS="POWER9"
\ No newline at end of file
+BR2_IMA_CATALOG_DTS="POWER9"
diff --git a/openpower/configs/palmetto_defconfig b/openpower/configs/palmetto_defconfig
index d7c89a1..41691b7 100644
--- a/openpower/configs/palmetto_defconfig
+++ b/openpower/configs/palmetto_defconfig
@@ -1,5 +1,6 @@
 BR2_powerpc64le=y
 BR2_powerpc_power8=y
+BR2_GLOBAL_PATCH_DIR="$(BR2_EXTERNAL_OP_BUILD_PATH)/patches/palmetto-patches"
 BR2_GLIBC_VERSION_2_24=y
 BR2_BINUTILS_VERSION_2_27_X=y
 BR2_BINUTILS_EXTRA_CONFIG_OPTIONS="--enable-targets=powerpc64-linux"
@@ -15,7 +16,7 @@
 BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var ../openpower/scripts/firmware-whitelist"
 BR2_LINUX_KERNEL=y
 BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.10.7"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.11.2"
 BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_OP_BUILD_PATH)/linux"
 BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
 BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_OP_BUILD_PATH)/configs/linux/skiroot_defconfig"
@@ -39,12 +40,14 @@
 BR2_OPENPOWER_PLATFORM=y
 BR2_OPENPOWER_POWER8=y
 BR2_HOSTBOOT_CONFIG_FILE="palmetto.config"
-BR2_PALMETTO_SYSTEM_XML_FILENAME="PALMETTO_hb.system.xml"
-BR2_PALMETTO_MRW_XML_FILENAME="PALMETTO_hb.mrw.xml"
-BR2_PALMETTO_BIOS_XML_FILENAME="PALMETTO_bios.xml"
+BR2_OPENPOWER_MACHINE_XML_GITHUB_PROJECT_VALUE="palmetto-xml"
+BR2_OPENPOWER_MACHINE_XML_VERSION="c6f563966e9fadc4fb60194c064b2310c9b916b1"
+BR2_OPENPOWER_MACHINE_XML_FILENAME="palmetto.xml"
+BR2_OPENPOWER_SYSTEM_XML_FILENAME="PALMETTO_hb.system.xml"
+BR2_OPENPOWER_MRW_XML_FILENAME="PALMETTO_hb.mrw.xml"
+BR2_OPENPOWER_BIOS_XML_FILENAME="PALMETTO_bios.xml"
 BR2_OPENPOWER_PNOR_XML_LAYOUT_FILENAME="defaultPnorLayoutSingleSide.xml"
 BR2_OPENPOWER_CONFIG_NAME="palmetto"
-BR2_OPENPOWER_XML_PACKAGE="palmetto-xml"
 BR2_OPENPOWER_PNOR_FILENAME="palmetto.pnor"
 BR2_HOSTBOOT_BINARY_SBE_FILENAME="venice_sbe.img.ecc"
 BR2_HOSTBOOT_BINARY_SBEC_FILENAME="centaur_sbec_pad.img.ecc"
diff --git a/openpower/configs/romulus_defconfig b/openpower/configs/romulus_defconfig
index 395959a..534add2 100644
--- a/openpower/configs/romulus_defconfig
+++ b/openpower/configs/romulus_defconfig
@@ -16,7 +16,7 @@
 BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var ../openpower/scripts/firmware-whitelist"
 BR2_LINUX_KERNEL=y
 BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.10.7"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.11.2"
 BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_OP_BUILD_PATH)/linux"
 BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
 BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_OP_BUILD_PATH)/configs/linux/skiroot_p9_defconfig"
@@ -41,17 +41,19 @@
 BR2_OPENPOWER_PLATFORM=y
 BR2_OPENPOWER_POWER9=y
 BR2_HOSTBOOT_CONFIG_FILE="romulus.config"
+BR2_OPENPOWER_MACHINE_XML_GITHUB_PROJECT_VALUE="romulus-xml"
+BR2_OPENPOWER_MACHINE_XML_VERSION="301279cbdb3595ad1bbdce4d9d2189db0470a62a"
+BR2_OPENPOWER_MACHINE_XML_FILENAME="romulus.xml"
+BR2_OPENPOWER_SYSTEM_XML_FILENAME="ROMULUS_hb.system.xml"
+BR2_OPENPOWER_MRW_XML_FILENAME="ROMULUS_hb.mrw.xml"
+BR2_OPENPOWER_BIOS_XML_FILENAME="ROMULUS_bios.xml"
 BR2_OPENPOWER_PNOR_XML_LAYOUT_FILENAME="defaultPnorLayout_64.xml"
 BR2_OPENPOWER_CONFIG_NAME="romulus"
-BR2_OPENPOWER_XML_PACKAGE="romulus-xml"
 BR2_OPENPOWER_PNOR_FILENAME="romulus.pnor"
-#BR2_OPENPOWER_PNOR_UPDATE_FILENAME="romulus_update.pnor"
 BR2_HOSTBOOT_BINARY_SBE_FILENAME="nimbus_sbe.img.ecc"
 BR2_HOSTBOOT_BINARY_SBEC_FILENAME="centaur_sbec_pad.img.ecc"
 BR2_HOSTBOOT_BINARY_WINK_FILENAME="p9n.ref_image.hdr.bin.ecc"
 BR2_IMA_CATALOG_FILENAME="ima_catalog.bin"
-BR2_IMA_CATALOG_DTS="POWER9"
-#BR2_IMA_CATALOG_ECC_FILENAME="ima_catalog.bin.ecc"
 BR2_OPENPOWER_TARGETING_BIN_FILENAME="ROMULUS_HB.targeting.bin"
 BR2_OPENPOWER_TARGETING_ECC_FILENAME="ROMULUS_HB.targeting.bin.ecc"
 BR2_PACKAGE_PETITBOOT=y
@@ -59,8 +61,6 @@
 BR2_OCC_BIN_FILENAME="occ.bin"
 BR2_CAPP_UCODE_BIN_FILENAME="cappucode.bin"
 BR2_SKIBOOT_CUSTOM_VERSION=y
-BR2_SKIBOOT_CUSTOM_VERSION_VALUE="skiboot-5.5.0-rc2"
+BR2_SKIBOOT_CUSTOM_VERSION_VALUE="skiboot-5.6.0-16-g9abb449b9c57"
 BR2_PACKAGE_LOADKEYS=y
-BR2_ROMULUS_SYSTEM_XML_FILENAME="ROMULUS_hb.system.xml"
-BR2_ROMULUS_MRW_XML_FILENAME="ROMULUS_hb.mrw.xml"
-BR2_ROMULUS_BIOS_XML_FILENAME="ROMULUS_bios.xml"
+BR2_IMA_CATALOG_DTS="POWER9"
diff --git a/openpower/configs/witherspoon_defconfig b/openpower/configs/witherspoon_defconfig
index 419737e..5c886ec 100644
--- a/openpower/configs/witherspoon_defconfig
+++ b/openpower/configs/witherspoon_defconfig
@@ -16,7 +16,7 @@
 BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var ../openpower/scripts/firmware-whitelist"
 BR2_LINUX_KERNEL=y
 BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.10.7"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.11.2"
 BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_OP_BUILD_PATH)/linux"
 BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
 BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_OP_BUILD_PATH)/configs/linux/skiroot_p9_defconfig"
@@ -41,9 +41,14 @@
 BR2_OPENPOWER_PLATFORM=y
 BR2_OPENPOWER_POWER9=y
 BR2_HOSTBOOT_CONFIG_FILE="witherspoon.config"
+BR2_OPENPOWER_MACHINE_XML_GITHUB_PROJECT_VALUE="witherspoon-xml"
+BR2_OPENPOWER_MACHINE_XML_VERSION="96746e9052376274ee9e8b4a99dd4e840cbccfab"
+BR2_OPENPOWER_MACHINE_XML_FILENAME="witherspoon.xml"
+BR2_OPENPOWER_SYSTEM_XML_FILENAME="WITHERSPOON_hb.system.xml"
+BR2_OPENPOWER_MRW_XML_FILENAME="WITHERSPOON_hb.mrw.xml"
+BR2_OPENPOWER_BIOS_XML_FILENAME="WITHERSPOON_bios.xml"
 BR2_OPENPOWER_PNOR_XML_LAYOUT_FILENAME="defaultPnorLayout_64.xml"
 BR2_OPENPOWER_CONFIG_NAME="witherspoon"
-BR2_OPENPOWER_XML_PACKAGE="witherspoon-xml"
 BR2_OPENPOWER_PNOR_FILENAME="witherspoon.pnor"
 BR2_OPENPOWER_PNOR_UPDATE_FILENAME="witherspoon_update.pnor"
 BR2_HOSTBOOT_BINARY_SBE_FILENAME="nimbus_sbe.img.ecc"
@@ -57,9 +62,6 @@
 BR2_OCC_BIN_FILENAME="occ.bin"
 BR2_CAPP_UCODE_BIN_FILENAME="cappucode.bin"
 BR2_SKIBOOT_CUSTOM_VERSION=y
-BR2_SKIBOOT_CUSTOM_VERSION_VALUE="skiboot-5.5.0-rc2"
+BR2_SKIBOOT_CUSTOM_VERSION_VALUE="skiboot-5.6.0-16-g9abb449b9c57"
 BR2_PACKAGE_LOADKEYS=y
-BR2_WITHERSPOON_SYSTEM_XML_FILENAME="WITHERSPOON_hb.system.xml"
-BR2_WITHERSPOON_MRW_XML_FILENAME="WITHERSPOON_hb.mrw.xml"
-BR2_WITHERSPOON_BIOS_XML_FILENAME="WITHERSPOON_bios.xml"
 BR2_IMA_CATALOG_DTS="POWER9"
diff --git a/openpower/configs/zaius_defconfig b/openpower/configs/zaius_defconfig
index 3bdf058..fcb1a0d 100644
--- a/openpower/configs/zaius_defconfig
+++ b/openpower/configs/zaius_defconfig
@@ -16,7 +16,7 @@
 BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var ../openpower/scripts/firmware-whitelist"
 BR2_LINUX_KERNEL=y
 BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.10.7"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.11.2"
 BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_OP_BUILD_PATH)/linux"
 BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
 BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_OP_BUILD_PATH)/configs/linux/skiroot_p9_defconfig"
@@ -41,9 +41,14 @@
 BR2_OPENPOWER_PLATFORM=y
 BR2_OPENPOWER_POWER9=y
 BR2_HOSTBOOT_CONFIG_FILE="zaius.config"
+BR2_OPENPOWER_MACHINE_XML_GITHUB_PROJECT_VALUE="zaius-xml"
+BR2_OPENPOWER_MACHINE_XML_VERSION="bc19a36a49f9b11e86d3703032f20418e6a23244"
+BR2_OPENPOWER_MACHINE_XML_FILENAME="zaius.xml"
+BR2_OPENPOWER_SYSTEM_XML_FILENAME="ZAIUS_hb.system.xml"
+BR2_OPENPOWER_MRW_XML_FILENAME="ZAIUS_hb.mrw.xml"
+BR2_OPENPOWER_BIOS_XML_FILENAME="ZAIUS_bios.xml"
 BR2_OPENPOWER_PNOR_XML_LAYOUT_FILENAME="defaultPnorLayout_64.xml"
 BR2_OPENPOWER_CONFIG_NAME="zaius"
-BR2_OPENPOWER_XML_PACKAGE="zaius-xml"
 BR2_OPENPOWER_PNOR_FILENAME="zaius.pnor"
 BR2_HOSTBOOT_BINARY_SBE_FILENAME="nimbus_sbe.img.ecc"
 BR2_HOSTBOOT_BINARY_SBEC_FILENAME="centaur_sbec_pad.img.ecc"
@@ -56,9 +61,6 @@
 BR2_OCC_BIN_FILENAME="occ.bin"
 BR2_CAPP_UCODE_BIN_FILENAME="cappucode.bin"
 BR2_SKIBOOT_CUSTOM_VERSION=y
-BR2_SKIBOOT_CUSTOM_VERSION_VALUE="skiboot-5.5.0-rc2"
+BR2_SKIBOOT_CUSTOM_VERSION_VALUE="skiboot-5.6.0-16-g9abb449b9c57"
 BR2_PACKAGE_LOADKEYS=y
-BR2_ZAIUS_SYSTEM_XML_FILENAME="ZAIUS_hb.system.xml"
-BR2_ZAIUS_MRW_XML_FILENAME="ZAIUS_hb.mrw.xml"
-BR2_ZAIUS_BIOS_XML_FILENAME="ZAIUS_bios.xml"
 BR2_IMA_CATALOG_DTS="POWER9"
diff --git a/openpower/configs/zz_defconfig b/openpower/configs/zz_defconfig
index d0aab79..dca6bd6 100644
--- a/openpower/configs/zz_defconfig
+++ b/openpower/configs/zz_defconfig
@@ -15,7 +15,7 @@
 BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var ../openpower/scripts/firmware-whitelist"
 BR2_LINUX_KERNEL=y
 BR2_LINUX_KERNEL_CUSTOM_VERSION=y
-BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.10.7"
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.11.2"
 BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_OP_BUILD_PATH)/linux"
 BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
 BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_OP_BUILD_PATH)/configs/linux/skiroot_p9_defconfig"
@@ -42,6 +42,7 @@
 # BR2_PACKAGE_HOST_OPENPOWER_FFS is not set
 # BR2_PACKAGE_HOSTBOOT is not set
 # BR2_PACKAGE_HOSTBOOT_BINARIES is not set
+# BR2_PACKAGE_MACHINE_XML is not set
 # BR2_PACKAGE_OPENPOWER_PNOR is not set
 BR2_OPENPOWER_CONFIG_NAME="openpower-firenze"
 # BR2_TARGET_SKIBOOT_XZ is not set
@@ -51,7 +52,7 @@
 # BR2_PACKAGE_OCC is not set
 # BR2_PACKAGE_CAPP_UCODE is not set
 BR2_SKIBOOT_CUSTOM_VERSION=y
-BR2_SKIBOOT_CUSTOM_VERSION_VALUE="skiboot-5.5.0-rc2"
+BR2_SKIBOOT_CUSTOM_VERSION_VALUE="skiboot-5.6.0-16-g9abb449b9c57"
 BR2_PACKAGE_LOADKEYS=y
 # BR2_PACKAGE_HOST_PPE42_BINUTILS is not set
 # BR2_PACKAGE_HOST_PPE42_GCC is not set
diff --git a/openpower/linux/0001-xhci-Use-xhci_pci_remove-for-xhci-device-shutdown.patch b/openpower/linux/0001-xhci-Use-xhci_pci_remove-for-xhci-device-shutdown.patch
index b6226cf..ba1eeaf 100644
--- a/openpower/linux/0001-xhci-Use-xhci_pci_remove-for-xhci-device-shutdown.patch
+++ b/openpower/linux/0001-xhci-Use-xhci_pci_remove-for-xhci-device-shutdown.patch
@@ -1,7 +1,7 @@
 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
 From: Thadeu Lima De Souza Cascardo <thadeul@br.ibm.com>
 Date: Tue, 25 Mar 2014 10:45:16 -0400
-Subject: [PATCH 01/12] xhci: Use xhci_pci_remove for xhci device shutdown
+Subject: [PATCH 1/4] xhci: Use xhci_pci_remove for xhci device shutdown
 
 Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
 Signed-off-by: Joel Stanley <joel@jms.id.au>
@@ -10,10 +10,10 @@
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
-index 954abfd5014d..dc8c490f6dd4 100644
+index 7b86508ac8cf..c358d5e7ef79 100644
 --- a/drivers/usb/host/xhci-pci.c
 +++ b/drivers/usb/host/xhci-pci.c
-@@ -471,7 +471,7 @@ static struct pci_driver xhci_pci_driver = {
+@@ -470,7 +470,7 @@ static struct pci_driver xhci_pci_driver = {
  	.remove =	xhci_pci_remove,
  	/* suspend and resume implemented later */
  
diff --git a/openpower/linux/0002-xhci-do-not-halt-the-secondary-HCD.patch b/openpower/linux/0002-xhci-do-not-halt-the-secondary-HCD.patch
index 92c5a95..ad7d0a1 100644
--- a/openpower/linux/0002-xhci-do-not-halt-the-secondary-HCD.patch
+++ b/openpower/linux/0002-xhci-do-not-halt-the-secondary-HCD.patch
@@ -1,7 +1,7 @@
 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
 From: Joel Stanley <joel@jms.id.au>
 Date: Tue, 19 Jul 2016 22:43:26 +0930
-Subject: [PATCH 02/12] xhci: do not halt the secondary HCD
+Subject: [PATCH 2/4] xhci: do not halt the secondary HCD
 
 We can't halt the secondary HCD, because it's also the primary HCD,
 which will cause problems if we have devices attached to the primary
@@ -13,7 +13,7 @@
  1 file changed, 15 insertions(+), 5 deletions(-)
 
 diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
-index 9a0ec116654a..315020dac049 100644
+index 953fd8f62df0..d17a7039b154 100644
 --- a/drivers/usb/host/xhci.c
 +++ b/drivers/usb/host/xhci.c
 @@ -689,6 +689,21 @@ void xhci_stop(struct usb_hcd *hcd)
diff --git a/openpower/linux/0003-drm-ast-const-ify-mode-setting-tables.patch b/openpower/linux/0003-drm-ast-const-ify-mode-setting-tables.patch
deleted file mode 100644
index c9670e5..0000000
--- a/openpower/linux/0003-drm-ast-const-ify-mode-setting-tables.patch
+++ /dev/null
@@ -1,277 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
-Date: Fri, 17 Feb 2017 13:45:24 +1100
-Subject: [PATCH 03/12] drm/ast: const'ify mode setting tables
-
-And fix some comment alignment & space/tabs while at it
-
-Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
-Signed-off-by: Joel Stanley <joel@jms.id.au>
----
- drivers/gpu/drm/ast/ast_drv.h    |   4 +-
- drivers/gpu/drm/ast/ast_mode.c   |   8 +--
- drivers/gpu/drm/ast/ast_tables.h | 106 +++++++++++++++++++--------------------
- 3 files changed, 59 insertions(+), 59 deletions(-)
-
-diff --git a/drivers/gpu/drm/ast/ast_drv.h b/drivers/gpu/drm/ast/ast_drv.h
-index 3bedcf7ddd2a..3fd9d6e96bce 100644
---- a/drivers/gpu/drm/ast/ast_drv.h
-+++ b/drivers/gpu/drm/ast/ast_drv.h
-@@ -304,8 +304,8 @@ struct ast_vbios_dclk_info {
- };
- 
- struct ast_vbios_mode_info {
--	struct ast_vbios_stdtable *std_table;
--	struct ast_vbios_enhtable *enh_table;
-+	const struct ast_vbios_stdtable *std_table;
-+	const struct ast_vbios_enhtable *enh_table;
- };
- 
- extern int ast_mode_init(struct drm_device *dev);
-diff --git a/drivers/gpu/drm/ast/ast_mode.c b/drivers/gpu/drm/ast/ast_mode.c
-index e26c98f51eb4..1ff596e90225 100644
---- a/drivers/gpu/drm/ast/ast_mode.c
-+++ b/drivers/gpu/drm/ast/ast_mode.c
-@@ -80,9 +80,9 @@ static bool ast_get_vbios_mode_info(struct drm_crtc *crtc, struct drm_display_mo
- {
- 	struct ast_private *ast = crtc->dev->dev_private;
- 	u32 refresh_rate_index = 0, mode_id, color_index, refresh_rate;
-+	const struct ast_vbios_enhtable *best = NULL;
- 	u32 hborder, vborder;
- 	bool check_sync;
--	struct ast_vbios_enhtable *best = NULL;
- 
- 	switch (crtc->primary->fb->bits_per_pixel) {
- 	case 8:
-@@ -146,7 +146,7 @@ static bool ast_get_vbios_mode_info(struct drm_crtc *crtc, struct drm_display_mo
- 	refresh_rate = drm_mode_vrefresh(mode);
- 	check_sync = vbios_mode->enh_table->flags & WideScreenMode;
- 	do {
--		struct ast_vbios_enhtable *loop = vbios_mode->enh_table;
-+		const struct ast_vbios_enhtable *loop = vbios_mode->enh_table;
- 
- 		while (loop->refresh_rate != 0xff) {
- 			if ((check_sync) &&
-@@ -225,7 +225,7 @@ static void ast_set_std_reg(struct drm_crtc *crtc, struct drm_display_mode *mode
- 			    struct ast_vbios_mode_info *vbios_mode)
- {
- 	struct ast_private *ast = crtc->dev->dev_private;
--	struct ast_vbios_stdtable *stdtable;
-+	const struct ast_vbios_stdtable *stdtable;
- 	u32 i;
- 	u8 jreg;
- 
-@@ -381,7 +381,7 @@ static void ast_set_dclk_reg(struct drm_device *dev, struct drm_display_mode *mo
- 			     struct ast_vbios_mode_info *vbios_mode)
- {
- 	struct ast_private *ast = dev->dev_private;
--	struct ast_vbios_dclk_info *clk_info;
-+	const struct ast_vbios_dclk_info *clk_info;
- 
- 	clk_info = &dclk_table[vbios_mode->enh_table->dclk_index];
- 
-diff --git a/drivers/gpu/drm/ast/ast_tables.h b/drivers/gpu/drm/ast/ast_tables.h
-index 3608d5aa7451..a4ddf901a54f 100644
---- a/drivers/gpu/drm/ast/ast_tables.h
-+++ b/drivers/gpu/drm/ast/ast_tables.h
-@@ -78,37 +78,37 @@
- #define VCLK97_75     		0x19
- #define VCLK118_25			0x1A
- 
--static struct ast_vbios_dclk_info dclk_table[] = {
--	{0x2C, 0xE7, 0x03},					/* 00: VCLK25_175	*/
--	{0x95, 0x62, 0x03},				        /* 01: VCLK28_322	*/
--	{0x67, 0x63, 0x01},				        /* 02: VCLK31_5         */
--	{0x76, 0x63, 0x01},				        /* 03: VCLK36         	*/
--	{0xEE, 0x67, 0x01},				        /* 04: VCLK40          	*/
--	{0x82, 0x62, 0x01}, 			        /* 05: VCLK49_5        	*/
--	{0xC6, 0x64, 0x01},                        	        /* 06: VCLK50          	*/
--	{0x94, 0x62, 0x01},                        	        /* 07: VCLK56_25       	*/
--	{0x80, 0x64, 0x00},                        	        /* 08: VCLK65		*/
--	{0x7B, 0x63, 0x00},                        	        /* 09: VCLK75	        */
--	{0x67, 0x62, 0x00},				        /* 0A: VCLK78_75       	*/
--	{0x7C, 0x62, 0x00},                        	        /* 0B: VCLK94_5        	*/
--	{0x8E, 0x62, 0x00},                        	        /* 0C: VCLK108         	*/
--	{0x85, 0x24, 0x00},                        	        /* 0D: VCLK135         	*/
--	{0x67, 0x22, 0x00},                        	        /* 0E: VCLK157_5       	*/
--	{0x6A, 0x22, 0x00},				        /* 0F: VCLK162         	*/
--	{0x4d, 0x4c, 0x80},				        /* 10: VCLK154      	*/
--	{0xa7, 0x78, 0x80},					/* 11: VCLK83.5         */
--	{0x28, 0x49, 0x80},					/* 12: VCLK106.5        */
--	{0x37, 0x49, 0x80},					/* 13: VCLK146.25       */
--	{0x1f, 0x45, 0x80},					/* 14: VCLK148.5        */
--	{0x47, 0x6c, 0x80},					/* 15: VCLK71       */
--	{0x25, 0x65, 0x80},					/* 16: VCLK88.75    */
--	{0x77, 0x58, 0x80},					/* 17: VCLK119      */
--	{0x32, 0x67, 0x80},				    /* 18: VCLK85_5     */
--	{0x6a, 0x6d, 0x80},					/* 19: VCLK97_75	*/
--	{0x3b, 0x2c, 0x81},					/* 1A: VCLK118_25	*/
-+static const struct ast_vbios_dclk_info dclk_table[] = {
-+	{0x2C, 0xE7, 0x03},			/* 00: VCLK25_175	*/
-+	{0x95, 0x62, 0x03},			/* 01: VCLK28_322	*/
-+	{0x67, 0x63, 0x01},			/* 02: VCLK31_5		*/
-+	{0x76, 0x63, 0x01},			/* 03: VCLK36		*/
-+	{0xEE, 0x67, 0x01},			/* 04: VCLK40		*/
-+	{0x82, 0x62, 0x01},			/* 05: VCLK49_5		*/
-+	{0xC6, 0x64, 0x01},			/* 06: VCLK50		*/
-+	{0x94, 0x62, 0x01},			/* 07: VCLK56_25	*/
-+	{0x80, 0x64, 0x00},			/* 08: VCLK65		*/
-+	{0x7B, 0x63, 0x00},			/* 09: VCLK75		*/
-+	{0x67, 0x62, 0x00},			/* 0A: VCLK78_75	*/
-+	{0x7C, 0x62, 0x00},			/* 0B: VCLK94_5		*/
-+	{0x8E, 0x62, 0x00},			/* 0C: VCLK108		*/
-+	{0x85, 0x24, 0x00},			/* 0D: VCLK135		*/
-+	{0x67, 0x22, 0x00},			/* 0E: VCLK157_5	*/
-+	{0x6A, 0x22, 0x00},			/* 0F: VCLK162		*/
-+	{0x4d, 0x4c, 0x80},			/* 10: VCLK154		*/
-+	{0xa7, 0x78, 0x80},			/* 11: VCLK83.5		*/
-+	{0x28, 0x49, 0x80},			/* 12: VCLK106.5	*/
-+	{0x37, 0x49, 0x80},			/* 13: VCLK146.25	*/
-+	{0x1f, 0x45, 0x80},			/* 14: VCLK148.5	*/
-+	{0x47, 0x6c, 0x80},			/* 15: VCLK71		*/
-+	{0x25, 0x65, 0x80},			/* 16: VCLK88.75	*/
-+	{0x77, 0x58, 0x80},			/* 17: VCLK119		*/
-+	{0x32, 0x67, 0x80},			/* 18: VCLK85_5		*/
-+	{0x6a, 0x6d, 0x80},			/* 19: VCLK97_75	*/
-+	{0x3b, 0x2c, 0x81},			/* 1A: VCLK118_25	*/
- };
- 
--static struct ast_vbios_stdtable vbios_stdtable[] = {
-+static const struct ast_vbios_stdtable vbios_stdtable[] = {
- 	/* MD_2_3_400 */
- 	{
- 		0x67,
-@@ -181,21 +181,21 @@ static struct ast_vbios_stdtable vbios_stdtable[] = {
- 	},
- };
- 
--static struct ast_vbios_enhtable res_640x480[] = {
-+static const struct ast_vbios_enhtable res_640x480[] = {
- 	{ 800, 640, 8, 96, 525, 480, 2, 2, VCLK25_175,	/* 60Hz */
- 	  (SyncNN | HBorder | VBorder | Charx8Dot), 60, 1, 0x2E },
- 	{ 832, 640, 16, 40, 520, 480, 1, 3, VCLK31_5,	/* 72Hz */
- 	  (SyncNN | HBorder | VBorder | Charx8Dot), 72, 2, 0x2E  },
- 	{ 840, 640, 16, 64, 500, 480, 1, 3, VCLK31_5,	/* 75Hz */
- 	  (SyncNN | Charx8Dot) , 75, 3, 0x2E },
--	{ 832, 640, 56, 56, 509, 480, 1, 3, VCLK36,		/* 85Hz */
-+	{ 832, 640, 56, 56, 509, 480, 1, 3, VCLK36,	/* 85Hz */
- 	  (SyncNN | Charx8Dot) , 85, 4, 0x2E },
--	{ 832, 640, 56, 56, 509, 480, 1, 3, VCLK36,		/* end */
-+	{ 832, 640, 56, 56, 509, 480, 1, 3, VCLK36,	/* end */
- 	  (SyncNN | Charx8Dot) , 0xFF, 4, 0x2E },
- };
- 
--static struct ast_vbios_enhtable res_800x600[] = {
--	{1024, 800, 24, 72, 625, 600, 1, 2, VCLK36,		/* 56Hz */
-+static const struct ast_vbios_enhtable res_800x600[] = {
-+	{1024, 800, 24, 72, 625, 600, 1, 2, VCLK36,	/* 56Hz */
- 	 (SyncPP | Charx8Dot), 56, 1, 0x30 },
- 	{1056, 800, 40, 128, 628, 600, 1, 4, VCLK40,	/* 60Hz */
- 	 (SyncPP | Charx8Dot), 60, 2, 0x30 },
-@@ -210,7 +210,7 @@ static struct ast_vbios_enhtable res_800x600[] = {
- };
- 
- 
--static struct ast_vbios_enhtable res_1024x768[] = {
-+static const struct ast_vbios_enhtable res_1024x768[] = {
- 	{1344, 1024, 24, 136, 806, 768, 3, 6, VCLK65,	/* 60Hz */
- 	 (SyncNN | Charx8Dot), 60, 1, 0x31 },
- 	{1328, 1024, 24, 136, 806, 768, 3, 6, VCLK75,	/* 70Hz */
-@@ -223,7 +223,7 @@ static struct ast_vbios_enhtable res_1024x768[] = {
- 	 (SyncPP | Charx8Dot), 0xFF, 4, 0x31 },
- };
- 
--static struct ast_vbios_enhtable res_1280x1024[] = {
-+static const struct ast_vbios_enhtable res_1280x1024[] = {
- 	{1688, 1280, 48, 112, 1066, 1024, 1, 3, VCLK108,	/* 60Hz */
- 	 (SyncPP | Charx8Dot), 60, 1, 0x32 },
- 	{1688, 1280, 16, 144, 1066, 1024, 1, 3, VCLK135,	/* 75Hz */
-@@ -234,7 +234,7 @@ static struct ast_vbios_enhtable res_1280x1024[] = {
- 	 (SyncPP | Charx8Dot), 0xFF, 3, 0x32 },
- };
- 
--static struct ast_vbios_enhtable res_1600x1200[] = {
-+static const struct ast_vbios_enhtable res_1600x1200[] = {
- 	{2160, 1600, 64, 192, 1250, 1200, 1, 3, VCLK162,	/* 60Hz */
- 	 (SyncPP | Charx8Dot), 60, 1, 0x33 },
- 	{2160, 1600, 64, 192, 1250, 1200, 1, 3, VCLK162,	/* end */
-@@ -242,23 +242,23 @@ static struct ast_vbios_enhtable res_1600x1200[] = {
- };
- 
- /* 16:9 */
--static struct ast_vbios_enhtable res_1360x768[] = {
--	{1792, 1360, 64,112, 795,  768, 3, 6, VCLK85_5,	         /* 60Hz */
-+static const struct ast_vbios_enhtable res_1360x768[] = {
-+	{1792, 1360, 64, 112, 795, 768, 3, 6, VCLK85_5,		/* 60Hz */
- 	 (SyncPP | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 60, 1, 0x39 },
--	{1792, 1360, 64,112, 795,  768, 3, 6, VCLK85_5,	         /* end */
-+	{1792, 1360, 64, 112, 795, 768, 3, 6, VCLK85_5,	         /* end */
- 	 (SyncPP | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 0xFF, 1, 0x39 },
- };
- 
--static struct ast_vbios_enhtable res_1600x900[] = {
--	{1760, 1600, 48, 32, 926,  900, 3, 5, VCLK97_75,	/* 60Hz CVT RB */
-+static const struct ast_vbios_enhtable res_1600x900[] = {
-+	{1760, 1600, 48, 32, 926, 900, 3, 5, VCLK97_75,		/* 60Hz CVT RB */
- 	 (SyncNP | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 60, 1, 0x3A },
--	{2112, 1600, 88,168, 934,  900, 3, 5, VCLK118_25,	/* 60Hz CVT */
-+	{2112, 1600, 88, 168, 934, 900, 3, 5, VCLK118_25,	/* 60Hz CVT */
- 	 (SyncPN | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 60, 2, 0x3A },
--	{2112, 1600, 88,168, 934,  900, 3, 5, VCLK118_25,	/* 60Hz CVT */
-+	{2112, 1600, 88, 168, 934, 900, 3, 5, VCLK118_25,	/* 60Hz CVT */
- 	 (SyncPN | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 0xFF, 2, 0x3A },
- };
- 
--static struct ast_vbios_enhtable res_1920x1080[] = {
-+static const struct ast_vbios_enhtable res_1920x1080[] = {
- 	{2200, 1920, 88, 44, 1125, 1080, 4, 5, VCLK148_5,	/* 60Hz */
- 	 (SyncNP | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 60, 1, 0x38 },
- 	{2200, 1920, 88, 44, 1125, 1080, 4, 5, VCLK148_5,	/* 60Hz */
-@@ -267,8 +267,8 @@ static struct ast_vbios_enhtable res_1920x1080[] = {
- 
- 
- /* 16:10 */
--static struct ast_vbios_enhtable res_1280x800[] = {
--	{1440, 1280, 48, 32,  823,  800, 3, 6, VCLK71,	/* 60Hz RB */
-+static const struct ast_vbios_enhtable res_1280x800[] = {
-+	{1440, 1280, 48, 32,  823,  800, 3, 6, VCLK71,		/* 60Hz RB */
- 	 (SyncNP | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 60, 1, 0x35 },
- 	{1680, 1280, 72,128,  831,  800, 3, 6, VCLK83_5,	/* 60Hz */
- 	 (SyncPN | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 60, 2, 0x35 },
-@@ -277,7 +277,7 @@ static struct ast_vbios_enhtable res_1280x800[] = {
- 
- };
- 
--static struct ast_vbios_enhtable res_1440x900[] = {
-+static const struct ast_vbios_enhtable res_1440x900[] = {
- 	{1600, 1440, 48, 32,  926,  900, 3, 6, VCLK88_75,	/* 60Hz RB */
- 	 (SyncNP | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 60, 1, 0x36 },
- 	{1904, 1440, 80,152,  934,  900, 3, 6, VCLK106_5,	/* 60Hz */
-@@ -286,8 +286,8 @@ static struct ast_vbios_enhtable res_1440x900[] = {
- 	 (SyncPN | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 0xFF, 2, 0x36 },
- };
- 
--static struct ast_vbios_enhtable res_1680x1050[] = {
--	{1840, 1680, 48, 32, 1080, 1050, 3, 6, VCLK119,	/* 60Hz RB */
-+static const struct ast_vbios_enhtable res_1680x1050[] = {
-+	{1840, 1680, 48, 32, 1080, 1050, 3, 6, VCLK119,		/* 60Hz RB */
- 	 (SyncNP | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 60, 1, 0x37 },
- 	{2240, 1680,104,176, 1089, 1050, 3, 6, VCLK146_25,	/* 60Hz */
- 	 (SyncPN | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 60, 2, 0x37 },
-@@ -295,10 +295,10 @@ static struct ast_vbios_enhtable res_1680x1050[] = {
- 	 (SyncPN | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 0xFF, 2, 0x37 },
- };
- 
--static struct ast_vbios_enhtable res_1920x1200[] = {
--	{2080, 1920, 48, 32, 1235, 1200, 3, 6, VCLK154,	/* 60Hz RB*/
-+static const struct ast_vbios_enhtable res_1920x1200[] = {
-+	{2080, 1920, 48, 32, 1235, 1200, 3, 6, VCLK154,		/* 60Hz RB*/
- 	 (SyncNP | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 60, 1, 0x34 },
--	{2080, 1920, 48, 32, 1235, 1200, 3, 6, VCLK154,	/* 60Hz RB */
-+	{2080, 1920, 48, 32, 1235, 1200, 3, 6, VCLK154,		/* 60Hz RB */
- 	 (SyncNP | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 0xFF, 1, 0x34 },
- };
- 
--- 
-2.11.0
-
diff --git a/openpower/linux/0003-powerpc-powernv-Add-OPAL-exports-attributes-to-sysfs.patch b/openpower/linux/0003-powerpc-powernv-Add-OPAL-exports-attributes-to-sysfs.patch
new file mode 100644
index 0000000..d31ee40
--- /dev/null
+++ b/openpower/linux/0003-powerpc-powernv-Add-OPAL-exports-attributes-to-sysfs.patch
@@ -0,0 +1,120 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Matt Brown <matthew.brown.dev@gmail.com>
+Date: Thu, 30 Mar 2017 10:28:01 +1100
+Subject: [PATCH 3/4] powerpc/powernv: Add OPAL exports attributes to sysfs
+
+New versions of OPAL have a device node /ibm,opal/firmware/exports, each
+property of which describes a range of memory in OPAL that Linux might
+want to export to userspace for debugging.
+
+This patch adds a sysfs file under 'opal/exports' for each property
+found there, and makes it read-only by root.
+
+Signed-off-by: Matt Brown <matthew.brown.dev@gmail.com>
+[mpe: Drop counting of props, rename to attr, free on sysfs error, c'log]
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+(cherry picked from commit 11fe909d236263f62808dc3c73caf798e026d7aa)
+Signed-off-by: Joel Stanley <joel@jms.id.au>
+
+Signed-off-by: Joel Stanley <joel@jms.id.au>
+---
+ arch/powerpc/platforms/powernv/opal.c | 76 +++++++++++++++++++++++++++++++++++
+ 1 file changed, 76 insertions(+)
+
+diff --git a/arch/powerpc/platforms/powernv/opal.c b/arch/powerpc/platforms/powernv/opal.c
+index e0f856bfbfe8..25ea8f6fe7f8 100644
+--- a/arch/powerpc/platforms/powernv/opal.c
++++ b/arch/powerpc/platforms/powernv/opal.c
+@@ -595,6 +595,79 @@ static void opal_export_symmap(void)
+ 		pr_warn("Error %d creating OPAL symbols file\n", rc);
+ }
+ 
++static ssize_t export_attr_read(struct file *fp, struct kobject *kobj,
++				struct bin_attribute *bin_attr, char *buf,
++				loff_t off, size_t count)
++{
++	return memory_read_from_buffer(buf, count, &off, bin_attr->private,
++				       bin_attr->size);
++}
++
++/*
++ * opal_export_attrs: creates a sysfs node for each property listed in
++ * the device-tree under /ibm,opal/firmware/exports/
++ * All new sysfs nodes are created under /opal/exports/.
++ * This allows for reserved memory regions (e.g. HDAT) to be read.
++ * The new sysfs nodes are only readable by root.
++ */
++static void opal_export_attrs(void)
++{
++	struct bin_attribute *attr;
++	struct device_node *np;
++	struct property *prop;
++	struct kobject *kobj;
++	u64 vals[2];
++	int rc;
++
++	np = of_find_node_by_path("/ibm,opal/firmware/exports");
++	if (!np)
++		return;
++
++	/* Create new 'exports' directory - /sys/firmware/opal/exports */
++	kobj = kobject_create_and_add("exports", opal_kobj);
++	if (!kobj) {
++		pr_warn("kobject_create_and_add() of exports failed\n");
++		return;
++	}
++
++	for_each_property_of_node(np, prop) {
++		if (!strcmp(prop->name, "name") || !strcmp(prop->name, "phandle"))
++			continue;
++
++		if (of_property_read_u64_array(np, prop->name, &vals[0], 2))
++			continue;
++
++		attr = kmalloc(sizeof(*attr), GFP_KERNEL);
++
++		if (attr == NULL) {
++			pr_warn("Failed kmalloc for bin_attribute!");
++			continue;
++		}
++
++		attr->attr.name = kstrdup(prop->name, GFP_KERNEL);
++		attr->attr.mode = 0400;
++		attr->read = export_attr_read;
++		attr->private = __va(vals[0]);
++		attr->size = vals[1];
++
++		if (attr->attr.name == NULL) {
++			pr_warn("Failed kstrdup for bin_attribute attr.name");
++			kfree(attr);
++			continue;
++		}
++
++		rc = sysfs_create_bin_file(kobj, attr);
++		if (rc) {
++			pr_warn("Error %d creating OPAL sysfs exports/%s file\n",
++				 rc, prop->name);
++			kfree(attr->attr.name);
++			kfree(attr);
++		}
++	}
++
++	of_node_put(np);
++}
++
+ static void __init opal_dump_region_init(void)
+ {
+ 	void *addr;
+@@ -733,6 +806,9 @@ static int __init opal_init(void)
+ 		opal_msglog_sysfs_init();
+ 	}
+ 
++	/* Export all properties */
++	opal_export_attrs();
++
+ 	/* Initialize platform devices: IPMI backend, PRD & flash interface */
+ 	opal_pdev_init("ibm,opal-ipmi");
+ 	opal_pdev_init("ibm,opal-flash");
+-- 
+2.11.0
+
diff --git a/openpower/linux/0012-Release-OpenPower-kernel.patch b/openpower/linux/0004-Release-OpenPower-kernel.patch
similarity index 72%
rename from openpower/linux/0012-Release-OpenPower-kernel.patch
rename to openpower/linux/0004-Release-OpenPower-kernel.patch
index 861001b..a5ef22e 100644
--- a/openpower/linux/0012-Release-OpenPower-kernel.patch
+++ b/openpower/linux/0004-Release-OpenPower-kernel.patch
@@ -1,7 +1,7 @@
 From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
 From: Joel Stanley <joel@jms.id.au>
-Date: Tue, 28 Feb 2017 12:15:10 +1030
-Subject: [PATCH 12/12] Release OpenPower kernel
+Date: Wed, 3 May 2017 13:25:26 +0930
+Subject: [PATCH 4/4] Release OpenPower kernel
 
 Signed-off-by: Joel Stanley <joel@jms.id.au>
 ---
@@ -9,13 +9,13 @@
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/Makefile b/Makefile
-index 976e8d1a468a..507f49235ac9 100644
+index d7b64830a7b7..e77804c0405d 100644
 --- a/Makefile
 +++ b/Makefile
 @@ -1,7 +1,7 @@
  VERSION = 4
- PATCHLEVEL = 10
- SUBLEVEL = 7
+ PATCHLEVEL = 11
+ SUBLEVEL = 2
 -EXTRAVERSION =
 +EXTRAVERSION = -openpower1
  NAME = Fearless Coyote
diff --git a/openpower/linux/0004-drm-ast-Remove-spurrious-include.patch b/openpower/linux/0004-drm-ast-Remove-spurrious-include.patch
deleted file mode 100644
index ffa2606..0000000
--- a/openpower/linux/0004-drm-ast-Remove-spurrious-include.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
-Date: Fri, 17 Feb 2017 13:55:58 +1100
-Subject: [PATCH 04/12] drm/ast: Remove spurrious include
-
-Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
-Signed-off-by: Joel Stanley <joel@jms.id.au>
----
- drivers/gpu/drm/ast/ast_main.c | 2 --
- 1 file changed, 2 deletions(-)
-
-diff --git a/drivers/gpu/drm/ast/ast_main.c b/drivers/gpu/drm/ast/ast_main.c
-index fb9976254224..f01a937165b7 100644
---- a/drivers/gpu/drm/ast/ast_main.c
-+++ b/drivers/gpu/drm/ast/ast_main.c
-@@ -32,8 +32,6 @@
- #include <drm/drm_fb_helper.h>
- #include <drm/drm_crtc_helper.h>
- 
--#include "ast_dram_tables.h"
--
- void ast_set_index_reg_mask(struct ast_private *ast,
- 			    uint32_t base, uint8_t index,
- 			    uint8_t mask, uint8_t val)
--- 
-2.11.0
-
diff --git a/openpower/linux/0005-drm-ast-Fix-calculation-of-MCLK.patch b/openpower/linux/0005-drm-ast-Fix-calculation-of-MCLK.patch
deleted file mode 100644
index e72a789..0000000
--- a/openpower/linux/0005-drm-ast-Fix-calculation-of-MCLK.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
-Date: Fri, 17 Feb 2017 13:57:30 +1100
-Subject: [PATCH 05/12] drm/ast: Fix calculation of MCLK
-
-Some braces were missing causing an incorrect calculation.
-
-Y.C. Chen from Aspeed provided me with the right formula
-which I tested on AST2400 and 2500.
-
-The MCLK isn't currently used by the driver (it will eventually
-to filter modes) so the issue isn't catastrophic.
-
-Also make the printed value a bit more meaningful
-
-Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
-Signed-off-by: Joel Stanley <joel@jms.id.au>
----
- drivers/gpu/drm/ast/ast_main.c | 6 ++++--
- 1 file changed, 4 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/gpu/drm/ast/ast_main.c b/drivers/gpu/drm/ast/ast_main.c
-index f01a937165b7..8d87d3ca439b 100644
---- a/drivers/gpu/drm/ast/ast_main.c
-+++ b/drivers/gpu/drm/ast/ast_main.c
-@@ -354,7 +354,7 @@ static int ast_get_dram_info(struct drm_device *dev)
- 		div = 0x1;
- 		break;
- 	}
--	ast->mclk = ref_pll * (num + 2) / (denum + 2) * (div * 1000);
-+	ast->mclk = ref_pll * (num + 2) / ((denum + 2) * (div * 1000));
- 	return 0;
- }
- 
-@@ -498,7 +498,9 @@ int ast_driver_load(struct drm_device *dev, unsigned long flags)
- 		if (ret)
- 			goto out_free;
- 		ast->vram_size = ast_get_vram_info(dev);
--		DRM_INFO("dram %d %d %d %08x\n", ast->mclk, ast->dram_type, ast->dram_bus_width, ast->vram_size);
-+		DRM_INFO("dram MCLK=%u Mhz type=%d bus_width=%d size=%08x\n",
-+			 ast->mclk, ast->dram_type,
-+			 ast->dram_bus_width, ast->vram_size);
- 	}
- 
- 	if (need_post)
--- 
-2.11.0
-
diff --git a/openpower/linux/0006-drm-ast-Base-support-for-AST2500.patch b/openpower/linux/0006-drm-ast-Base-support-for-AST2500.patch
deleted file mode 100644
index 34fb54a..0000000
--- a/openpower/linux/0006-drm-ast-Base-support-for-AST2500.patch
+++ /dev/null
@@ -1,325 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: "Y.C. Chen" <yc_chen@aspeedtech.com>
-Date: Fri, 17 Feb 2017 14:36:46 +1100
-Subject: [PATCH 06/12] drm/ast: Base support for AST2500
-
-Add detection and mode setting updates for AST2500 generation chip,
-code originally from Aspeed and slightly reworked for coding style
-mostly by Ben. This doesn't contain the BMC DRAM POST code which
-is in a separate patch.
-
-Signed-off-by: Y.C. Chen <yc_chen@aspeedtech.com>
-Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
----
-
-v2. Add 800Mhz default mclk for AST2500
-
-Signed-off-by: Joel Stanley <joel@jms.id.au>
----
- drivers/gpu/drm/ast/ast_drv.h    |  2 ++
- drivers/gpu/drm/ast/ast_main.c   | 32 +++++++++++++++++++---
- drivers/gpu/drm/ast/ast_mode.c   | 30 ++++++++++++++++-----
- drivers/gpu/drm/ast/ast_tables.h | 58 +++++++++++++++++++++++++++++++++-------
- 4 files changed, 103 insertions(+), 19 deletions(-)
-
-diff --git a/drivers/gpu/drm/ast/ast_drv.h b/drivers/gpu/drm/ast/ast_drv.h
-index 3fd9d6e96bce..d1c1d530abaa 100644
---- a/drivers/gpu/drm/ast/ast_drv.h
-+++ b/drivers/gpu/drm/ast/ast_drv.h
-@@ -64,6 +64,7 @@ enum ast_chip {
- 	AST2150,
- 	AST2300,
- 	AST2400,
-+	AST2500,
- 	AST1180,
- };
- 
-@@ -80,6 +81,7 @@ enum ast_tx_chip {
- #define AST_DRAM_1Gx32   3
- #define AST_DRAM_2Gx16   6
- #define AST_DRAM_4Gx16   7
-+#define AST_DRAM_8Gx16   8
- 
- struct ast_fbdev;
- 
-diff --git a/drivers/gpu/drm/ast/ast_main.c b/drivers/gpu/drm/ast/ast_main.c
-index 8d87d3ca439b..5a83d3793000 100644
---- a/drivers/gpu/drm/ast/ast_main.c
-+++ b/drivers/gpu/drm/ast/ast_main.c
-@@ -142,7 +142,10 @@ static int ast_detect_chip(struct drm_device *dev, bool *need_post)
- 		ast->chip = AST1100;
- 		DRM_INFO("AST 1180 detected\n");
- 	} else {
--		if (dev->pdev->revision >= 0x30) {
-+		if (dev->pdev->revision >= 0x40) {
-+			ast->chip = AST2500;
-+			DRM_INFO("AST 2500 detected\n");
-+		} else if (dev->pdev->revision >= 0x30) {
- 			ast->chip = AST2400;
- 			DRM_INFO("AST 2400 detected\n");
- 		} else if (dev->pdev->revision >= 0x20) {
-@@ -196,6 +199,9 @@ static int ast_detect_chip(struct drm_device *dev, bool *need_post)
- 			if (ast->chip == AST2400 &&
- 			    (scu_rev & 0x300) == 0x100) /* ast1400 */
- 				ast->support_wide_screen = true;
-+			if (ast->chip == AST2500 &&
-+			    scu_rev == 0x100)           /* ast2510 */
-+				ast->support_wide_screen = true;
- 		}
- 		break;
- 	}
-@@ -291,7 +297,10 @@ static int ast_get_dram_info(struct drm_device *dev)
- 	default:
- 		ast->dram_bus_width = 16;
- 		ast->dram_type = AST_DRAM_1Gx16;
--		ast->mclk = 396;
-+		if (ast->chip == AST2500)
-+			ast->mclk = 800;
-+		else
-+			ast->mclk = 396;
- 		return 0;
- 	}
- 
-@@ -300,7 +309,23 @@ static int ast_get_dram_info(struct drm_device *dev)
- 	else
- 		ast->dram_bus_width = 32;
- 
--	if (ast->chip == AST2300 || ast->chip == AST2400) {
-+	if (ast->chip == AST2500) {
-+		switch (mcr_cfg & 0x03) {
-+		case 0:
-+			ast->dram_type = AST_DRAM_1Gx16;
-+			break;
-+		default:
-+		case 1:
-+			ast->dram_type = AST_DRAM_2Gx16;
-+			break;
-+		case 2:
-+			ast->dram_type = AST_DRAM_4Gx16;
-+			break;
-+		case 3:
-+			ast->dram_type = AST_DRAM_8Gx16;
-+			break;
-+		}
-+	} else if (ast->chip == AST2300 || ast->chip == AST2400) {
- 		switch (mcr_cfg & 0x03) {
- 		case 0:
- 			ast->dram_type = AST_DRAM_512Mx16;
-@@ -523,6 +548,7 @@ int ast_driver_load(struct drm_device *dev, unsigned long flags)
- 	    ast->chip == AST2200 ||
- 	    ast->chip == AST2300 ||
- 	    ast->chip == AST2400 ||
-+	    ast->chip == AST2500 ||
- 	    ast->chip == AST1180) {
- 		dev->mode_config.max_width = 1920;
- 		dev->mode_config.max_height = 2048;
-diff --git a/drivers/gpu/drm/ast/ast_mode.c b/drivers/gpu/drm/ast/ast_mode.c
-index 1ff596e90225..e4db1c72940c 100644
---- a/drivers/gpu/drm/ast/ast_mode.c
-+++ b/drivers/gpu/drm/ast/ast_mode.c
-@@ -271,7 +271,11 @@ static void ast_set_crtc_reg(struct drm_crtc *crtc, struct drm_display_mode *mod
- {
- 	struct ast_private *ast = crtc->dev->dev_private;
- 	u8 jreg05 = 0, jreg07 = 0, jreg09 = 0, jregAC = 0, jregAD = 0, jregAE = 0;
--	u16 temp;
-+	u16 temp, precache = 0;
-+
-+	if ((ast->chip == AST2500) &&
-+	    (vbios_mode->enh_table->flags & AST2500PreCatchCRT))
-+		precache = 40;
- 
- 	ast_set_index_reg_mask(ast, AST_IO_CRTC_PORT, 0x11, 0x7f, 0x00);
- 
-@@ -297,12 +301,12 @@ static void ast_set_crtc_reg(struct drm_crtc *crtc, struct drm_display_mode *mod
- 		jregAD |= 0x01;  /* HBE D[5] */
- 	ast_set_index_reg_mask(ast, AST_IO_CRTC_PORT, 0x03, 0xE0, (temp & 0x1f));
- 
--	temp = (mode->crtc_hsync_start >> 3) - 1;
-+	temp = ((mode->crtc_hsync_start-precache) >> 3) - 1;
- 	if (temp & 0x100)
- 		jregAC |= 0x40; /* HRS D[5] */
- 	ast_set_index_reg_mask(ast, AST_IO_CRTC_PORT, 0x04, 0x00, temp);
- 
--	temp = ((mode->crtc_hsync_end >> 3) - 1) & 0x3f;
-+	temp = (((mode->crtc_hsync_end-precache) >> 3) - 1) & 0x3f;
- 	if (temp & 0x20)
- 		jregAD |= 0x04; /* HRE D[5] */
- 	ast_set_index_reg_mask(ast, AST_IO_CRTC_PORT, 0x05, 0x60, (u8)((temp & 0x1f) | jreg05));
-@@ -363,6 +367,11 @@ static void ast_set_crtc_reg(struct drm_crtc *crtc, struct drm_display_mode *mod
- 	ast_set_index_reg_mask(ast, AST_IO_CRTC_PORT, 0x09, 0xdf, jreg09);
- 	ast_set_index_reg_mask(ast, AST_IO_CRTC_PORT, 0xAE, 0x00, (jregAE | 0x80));
- 
-+	if (precache)
-+		ast_set_index_reg_mask(ast, AST_IO_CRTC_PORT, 0xb6, 0x3f, 0x80);
-+	else
-+		ast_set_index_reg_mask(ast, AST_IO_CRTC_PORT, 0xb6, 0x3f, 0x00);
-+
- 	ast_set_index_reg_mask(ast, AST_IO_CRTC_PORT, 0x11, 0x7f, 0x80);
- }
- 
-@@ -383,12 +392,16 @@ static void ast_set_dclk_reg(struct drm_device *dev, struct drm_display_mode *mo
- 	struct ast_private *ast = dev->dev_private;
- 	const struct ast_vbios_dclk_info *clk_info;
- 
--	clk_info = &dclk_table[vbios_mode->enh_table->dclk_index];
-+	if (ast->chip == AST2500)
-+		clk_info = &dclk_table_ast2500[vbios_mode->enh_table->dclk_index];
-+	else
-+		clk_info = &dclk_table[vbios_mode->enh_table->dclk_index];
- 
- 	ast_set_index_reg_mask(ast, AST_IO_CRTC_PORT, 0xc0, 0x00, clk_info->param1);
- 	ast_set_index_reg_mask(ast, AST_IO_CRTC_PORT, 0xc1, 0x00, clk_info->param2);
- 	ast_set_index_reg_mask(ast, AST_IO_CRTC_PORT, 0xbb, 0x0f,
--			       (clk_info->param3 & 0x80) | ((clk_info->param3 & 0x3) << 4));
-+			       (clk_info->param3 & 0xc0) |
-+			       ((clk_info->param3 & 0x3) << 4));
- }
- 
- static void ast_set_ext_reg(struct drm_crtc *crtc, struct drm_display_mode *mode,
-@@ -421,7 +434,8 @@ static void ast_set_ext_reg(struct drm_crtc *crtc, struct drm_display_mode *mode
- 	ast_set_index_reg_mask(ast, AST_IO_CRTC_PORT, 0xa8, 0xfd, jregA8);
- 
- 	/* Set Threshold */
--	if (ast->chip == AST2300 || ast->chip == AST2400) {
-+	if (ast->chip == AST2300 || ast->chip == AST2400 ||
-+	    ast->chip == AST2500) {
- 		ast_set_index_reg(ast, AST_IO_CRTC_PORT, 0xa7, 0x78);
- 		ast_set_index_reg(ast, AST_IO_CRTC_PORT, 0xa6, 0x60);
- 	} else if (ast->chip == AST2100 ||
-@@ -794,7 +808,9 @@ static int ast_mode_valid(struct drm_connector *connector,
- 		if ((mode->hdisplay == 1600) && (mode->vdisplay == 900))
- 			return MODE_OK;
- 
--		if ((ast->chip == AST2100) || (ast->chip == AST2200) || (ast->chip == AST2300) || (ast->chip == AST2400) || (ast->chip == AST1180)) {
-+		if ((ast->chip == AST2100) || (ast->chip == AST2200) ||
-+		    (ast->chip == AST2300) || (ast->chip == AST2400) ||
-+		    (ast->chip == AST2500) || (ast->chip == AST1180)) {
- 			if ((mode->hdisplay == 1920) && (mode->vdisplay == 1080))
- 				return MODE_OK;
- 
-diff --git a/drivers/gpu/drm/ast/ast_tables.h b/drivers/gpu/drm/ast/ast_tables.h
-index a4ddf901a54f..5f4c2e833a65 100644
---- a/drivers/gpu/drm/ast/ast_tables.h
-+++ b/drivers/gpu/drm/ast/ast_tables.h
-@@ -47,6 +47,7 @@
- #define SyncPN			(PVSync | NHSync)
- #define SyncNP			(NVSync | PHSync)
- #define SyncNN			(NVSync | NHSync)
-+#define AST2500PreCatchCRT		0x00004000
- 
- /* DCLK Index */
- #define VCLK25_175     		0x00
-@@ -108,6 +109,36 @@ static const struct ast_vbios_dclk_info dclk_table[] = {
- 	{0x3b, 0x2c, 0x81},			/* 1A: VCLK118_25	*/
- };
- 
-+static const struct ast_vbios_dclk_info dclk_table_ast2500[] = {
-+	{0x2C, 0xE7, 0x03},			/* 00: VCLK25_175	*/
-+	{0x95, 0x62, 0x03},			/* 01: VCLK28_322	*/
-+	{0x67, 0x63, 0x01},			/* 02: VCLK31_5		*/
-+	{0x76, 0x63, 0x01},			/* 03: VCLK36		*/
-+	{0xEE, 0x67, 0x01},			/* 04: VCLK40		*/
-+	{0x82, 0x62, 0x01},			/* 05: VCLK49_5		*/
-+	{0xC6, 0x64, 0x01},			/* 06: VCLK50		*/
-+	{0x94, 0x62, 0x01},			/* 07: VCLK56_25	*/
-+	{0x80, 0x64, 0x00},			/* 08: VCLK65		*/
-+	{0x7B, 0x63, 0x00},			/* 09: VCLK75		*/
-+	{0x67, 0x62, 0x00},			/* 0A: VCLK78_75	*/
-+	{0x7C, 0x62, 0x00},			/* 0B: VCLK94_5		*/
-+	{0x8E, 0x62, 0x00},			/* 0C: VCLK108		*/
-+	{0x85, 0x24, 0x00},			/* 0D: VCLK135		*/
-+	{0x67, 0x22, 0x00},			/* 0E: VCLK157_5	*/
-+	{0x6A, 0x22, 0x00},			/* 0F: VCLK162		*/
-+	{0x4d, 0x4c, 0x80},			/* 10: VCLK154		*/
-+	{0xa7, 0x78, 0x80},			/* 11: VCLK83.5		*/
-+	{0x28, 0x49, 0x80},			/* 12: VCLK106.5	*/
-+	{0x37, 0x49, 0x80},			/* 13: VCLK146.25	*/
-+	{0x1f, 0x45, 0x80},			/* 14: VCLK148.5	*/
-+	{0x47, 0x6c, 0x80},			/* 15: VCLK71		*/
-+	{0x25, 0x65, 0x80},			/* 16: VCLK88.75	*/
-+	{0x58, 0x01, 0x42},			/* 17: VCLK119		*/
-+	{0x32, 0x67, 0x80},			/* 18: VCLK85_5		*/
-+	{0x6a, 0x6d, 0x80},			/* 19: VCLK97_75	*/
-+	{0x44, 0x20, 0x43},			/* 1A: VCLK118_25	*/
-+};
-+
- static const struct ast_vbios_stdtable vbios_stdtable[] = {
- 	/* MD_2_3_400 */
- 	{
-@@ -246,12 +277,14 @@ static const struct ast_vbios_enhtable res_1360x768[] = {
- 	{1792, 1360, 64, 112, 795, 768, 3, 6, VCLK85_5,		/* 60Hz */
- 	 (SyncPP | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 60, 1, 0x39 },
- 	{1792, 1360, 64, 112, 795, 768, 3, 6, VCLK85_5,	         /* end */
--	 (SyncPP | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 0xFF, 1, 0x39 },
-+	 (SyncPP | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo |
-+	  AST2500PreCatchCRT), 0xFF, 1, 0x39 },
- };
- 
- static const struct ast_vbios_enhtable res_1600x900[] = {
- 	{1760, 1600, 48, 32, 926, 900, 3, 5, VCLK97_75,		/* 60Hz CVT RB */
--	 (SyncNP | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 60, 1, 0x3A },
-+	 (SyncNP | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo |
-+	  AST2500PreCatchCRT), 60, 1, 0x3A },
- 	{2112, 1600, 88, 168, 934, 900, 3, 5, VCLK118_25,	/* 60Hz CVT */
- 	 (SyncPN | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 60, 2, 0x3A },
- 	{2112, 1600, 88, 168, 934, 900, 3, 5, VCLK118_25,	/* 60Hz CVT */
-@@ -260,16 +293,19 @@ static const struct ast_vbios_enhtable res_1600x900[] = {
- 
- static const struct ast_vbios_enhtable res_1920x1080[] = {
- 	{2200, 1920, 88, 44, 1125, 1080, 4, 5, VCLK148_5,	/* 60Hz */
--	 (SyncNP | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 60, 1, 0x38 },
-+	 (SyncNP | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo |
-+	  AST2500PreCatchCRT), 60, 1, 0x38 },
- 	{2200, 1920, 88, 44, 1125, 1080, 4, 5, VCLK148_5,	/* 60Hz */
--	 (SyncNP | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 0xFF, 1, 0x38 },
-+	 (SyncNP | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo |
-+	  AST2500PreCatchCRT), 0xFF, 1, 0x38 },
- };
- 
- 
- /* 16:10 */
- static const struct ast_vbios_enhtable res_1280x800[] = {
- 	{1440, 1280, 48, 32,  823,  800, 3, 6, VCLK71,		/* 60Hz RB */
--	 (SyncNP | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 60, 1, 0x35 },
-+	 (SyncNP | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo |
-+	  AST2500PreCatchCRT), 60, 1, 0x35 },
- 	{1680, 1280, 72,128,  831,  800, 3, 6, VCLK83_5,	/* 60Hz */
- 	 (SyncPN | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 60, 2, 0x35 },
- 	{1680, 1280, 72,128,  831,  800, 3, 6, VCLK83_5,	/* 60Hz */
-@@ -279,7 +315,8 @@ static const struct ast_vbios_enhtable res_1280x800[] = {
- 
- static const struct ast_vbios_enhtable res_1440x900[] = {
- 	{1600, 1440, 48, 32,  926,  900, 3, 6, VCLK88_75,	/* 60Hz RB */
--	 (SyncNP | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 60, 1, 0x36 },
-+	 (SyncNP | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo |
-+	  AST2500PreCatchCRT), 60, 1, 0x36 },
- 	{1904, 1440, 80,152,  934,  900, 3, 6, VCLK106_5,	/* 60Hz */
- 	 (SyncPN | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 60, 2, 0x36 },
- 	{1904, 1440, 80,152,  934,  900, 3, 6, VCLK106_5,	/* 60Hz */
-@@ -288,7 +325,8 @@ static const struct ast_vbios_enhtable res_1440x900[] = {
- 
- static const struct ast_vbios_enhtable res_1680x1050[] = {
- 	{1840, 1680, 48, 32, 1080, 1050, 3, 6, VCLK119,		/* 60Hz RB */
--	 (SyncNP | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 60, 1, 0x37 },
-+	 (SyncNP | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo |
-+	  AST2500PreCatchCRT), 60, 1, 0x37 },
- 	{2240, 1680,104,176, 1089, 1050, 3, 6, VCLK146_25,	/* 60Hz */
- 	 (SyncPN | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 60, 2, 0x37 },
- 	{2240, 1680,104,176, 1089, 1050, 3, 6, VCLK146_25,	/* 60Hz */
-@@ -297,9 +335,11 @@ static const struct ast_vbios_enhtable res_1680x1050[] = {
- 
- static const struct ast_vbios_enhtable res_1920x1200[] = {
- 	{2080, 1920, 48, 32, 1235, 1200, 3, 6, VCLK154,		/* 60Hz RB*/
--	 (SyncNP | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 60, 1, 0x34 },
-+	 (SyncNP | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo |
-+	  AST2500PreCatchCRT), 60, 1, 0x34 },
- 	{2080, 1920, 48, 32, 1235, 1200, 3, 6, VCLK154,		/* 60Hz RB */
--	 (SyncNP | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo), 0xFF, 1, 0x34 },
-+	 (SyncNP | Charx8Dot | LineCompareOff | WideScreenMode | NewModeInfo |
-+	  AST2500PreCatchCRT), 0xFF, 1, 0x34 },
- };
- 
- #endif
--- 
-2.11.0
-
diff --git a/openpower/linux/0007-drm-ast-Fixed-vram-size-incorrect-issue-on-POWER.patch b/openpower/linux/0007-drm-ast-Fixed-vram-size-incorrect-issue-on-POWER.patch
deleted file mode 100644
index da79871..0000000
--- a/openpower/linux/0007-drm-ast-Fixed-vram-size-incorrect-issue-on-POWER.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: "Y.C. Chen" <yc_chen@aspeedtech.com>
-Date: Fri, 17 Feb 2017 10:56:47 +0800
-Subject: [PATCH 07/12] drm/ast: Fixed vram size incorrect issue on POWER
-
-The default value of VGA scratch may incorrect.
-Should initial h/w before get vram info.
-
-Signed-off-by: Y.C. Chen <yc_chen@aspeedtech.com>
-Signed-off-by: Joel Stanley <joel@jms.id.au>
----
- drivers/gpu/drm/ast/ast_main.c | 6 +++---
- drivers/gpu/drm/ast/ast_post.c | 2 +-
- 2 files changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/drivers/gpu/drm/ast/ast_main.c b/drivers/gpu/drm/ast/ast_main.c
-index 5a83d3793000..eefc5124eeb3 100644
---- a/drivers/gpu/drm/ast/ast_main.c
-+++ b/drivers/gpu/drm/ast/ast_main.c
-@@ -518,6 +518,9 @@ int ast_driver_load(struct drm_device *dev, unsigned long flags)
- 
- 	ast_detect_chip(dev, &need_post);
- 
-+	if (need_post)
-+		ast_post_gpu(dev);
-+
- 	if (ast->chip != AST1180) {
- 		ret = ast_get_dram_info(dev);
- 		if (ret)
-@@ -528,9 +531,6 @@ int ast_driver_load(struct drm_device *dev, unsigned long flags)
- 			 ast->dram_bus_width, ast->vram_size);
- 	}
- 
--	if (need_post)
--		ast_post_gpu(dev);
--
- 	ret = ast_mm_init(ast);
- 	if (ret)
- 		goto out_free;
-diff --git a/drivers/gpu/drm/ast/ast_post.c b/drivers/gpu/drm/ast/ast_post.c
-index c7c58becb25d..5b7db846a2c1 100644
---- a/drivers/gpu/drm/ast/ast_post.c
-+++ b/drivers/gpu/drm/ast/ast_post.c
-@@ -75,7 +75,7 @@ ast_set_def_ext_reg(struct drm_device *dev)
- 	const u8 *ext_reg_info;
- 
- 	/* reset scratch */
--	for (i = 0x81; i <= 0x8f; i++)
-+	for (i = 0x81; i <= 0x9f; i++)
- 		ast_set_index_reg(ast, AST_IO_CRTC_PORT, i, 0x00);
- 
- 	if (ast->chip == AST2300 || ast->chip == AST2400) {
--- 
-2.11.0
-
diff --git a/openpower/linux/0008-drm-ast-Factor-mmc_test-code-in-POST-code.patch b/openpower/linux/0008-drm-ast-Factor-mmc_test-code-in-POST-code.patch
deleted file mode 100644
index f85a1ce..0000000
--- a/openpower/linux/0008-drm-ast-Factor-mmc_test-code-in-POST-code.patch
+++ /dev/null
@@ -1,174 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
-Date: Sat, 18 Feb 2017 14:19:10 +1100
-Subject: [PATCH 08/12] drm/ast: Factor mmc_test code in POST code
-
-There's a some duplication for what's essentially copies of
-two loops, so factor it. The upcoming AST2500 POST code adds
-more of them. Also cleanup return types for the test functions,
-most of them return a boolean, some return a u32.
-
-Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
---
-
-v2. - Keep the split between the "test" and "test2" functions
-      as they have a different exit condition in the loop and
-      a different return type.
-    - Fix the return types accross the call chain
-
-Signed-off-by: Joel Stanley <joel@jms.id.au>
----
- drivers/gpu/drm/ast/ast_post.c | 82 ++++++++++++++++--------------------------
- 1 file changed, 31 insertions(+), 51 deletions(-)
-
-diff --git a/drivers/gpu/drm/ast/ast_post.c b/drivers/gpu/drm/ast/ast_post.c
-index 5b7db846a2c1..89b09d60b2be 100644
---- a/drivers/gpu/drm/ast/ast_post.c
-+++ b/drivers/gpu/drm/ast/ast_post.c
-@@ -441,85 +441,65 @@ static const u32 pattern[8] = {
- 	0x7C61D253
- };
- 
--static int mmc_test_burst(struct ast_private *ast, u32 datagen)
-+static bool mmc_test(struct ast_private *ast, u32 datagen, u8 test_ctl)
- {
- 	u32 data, timeout;
- 
- 	ast_moutdwm(ast, 0x1e6e0070, 0x00000000);
--	ast_moutdwm(ast, 0x1e6e0070, 0x000000c1 | (datagen << 3));
-+	ast_moutdwm(ast, 0x1e6e0070, (datagen << 3) | test_ctl);
- 	timeout = 0;
- 	do {
- 		data = ast_mindwm(ast, 0x1e6e0070) & 0x3000;
--		if (data & 0x2000) {
--			return 0;
--		}
-+		if (data & 0x2000)
-+			return false;
- 		if (++timeout > TIMEOUT) {
- 			ast_moutdwm(ast, 0x1e6e0070, 0x00000000);
--			return 0;
-+			return false;
- 		}
- 	} while (!data);
--	ast_moutdwm(ast, 0x1e6e0070, 0x00000000);
--	return 1;
-+	ast_moutdwm(ast, 0x1e6e0070, 0x0);
-+	return true;
- }
- 
--static int mmc_test_burst2(struct ast_private *ast, u32 datagen)
-+static u32 mmc_test2(struct ast_private *ast, u32 datagen, u8 test_ctl)
- {
- 	u32 data, timeout;
- 
- 	ast_moutdwm(ast, 0x1e6e0070, 0x00000000);
--	ast_moutdwm(ast, 0x1e6e0070, 0x00000041 | (datagen << 3));
-+	ast_moutdwm(ast, 0x1e6e0070, (datagen << 3) | test_ctl);
- 	timeout = 0;
- 	do {
- 		data = ast_mindwm(ast, 0x1e6e0070) & 0x1000;
- 		if (++timeout > TIMEOUT) {
- 			ast_moutdwm(ast, 0x1e6e0070, 0x0);
--			return -1;
-+			return 0xffffffff;
- 		}
- 	} while (!data);
- 	data = ast_mindwm(ast, 0x1e6e0078);
- 	data = (data | (data >> 16)) & 0xffff;
--	ast_moutdwm(ast, 0x1e6e0070, 0x0);
-+	ast_moutdwm(ast, 0x1e6e0070, 0x00000000);
- 	return data;
- }
- 
--static int mmc_test_single(struct ast_private *ast, u32 datagen)
-+
-+static bool mmc_test_burst(struct ast_private *ast, u32 datagen)
- {
--	u32 data, timeout;
-+	return mmc_test(ast, datagen, 0xc1);
-+}
- 
--	ast_moutdwm(ast, 0x1e6e0070, 0x00000000);
--	ast_moutdwm(ast, 0x1e6e0070, 0x000000c5 | (datagen << 3));
--	timeout = 0;
--	do {
--		data = ast_mindwm(ast, 0x1e6e0070) & 0x3000;
--		if (data & 0x2000)
--			return 0;
--		if (++timeout > TIMEOUT) {
--			ast_moutdwm(ast, 0x1e6e0070, 0x0);
--			return 0;
--		}
--	} while (!data);
--	ast_moutdwm(ast, 0x1e6e0070, 0x0);
--	return 1;
-+static u32 mmc_test_burst2(struct ast_private *ast, u32 datagen)
-+{
-+	return mmc_test2(ast, datagen, 0x41);
- }
- 
--static int mmc_test_single2(struct ast_private *ast, u32 datagen)
-+static bool mmc_test_single(struct ast_private *ast, u32 datagen)
- {
--	u32 data, timeout;
-+	return mmc_test(ast, datagen, 0xc5);
-+}
- 
--	ast_moutdwm(ast, 0x1e6e0070, 0x00000000);
--	ast_moutdwm(ast, 0x1e6e0070, 0x00000005 | (datagen << 3));
--	timeout = 0;
--	do {
--		data = ast_mindwm(ast, 0x1e6e0070) & 0x1000;
--		if (++timeout > TIMEOUT) {
--			ast_moutdwm(ast, 0x1e6e0070, 0x0);
--			return -1;
--		}
--	} while (!data);
--	data = ast_mindwm(ast, 0x1e6e0078);
--	data = (data | (data >> 16)) & 0xffff;
--	ast_moutdwm(ast, 0x1e6e0070, 0x0);
--	return data;
-+static u32 mmc_test_single2(struct ast_private *ast, u32 datagen)
-+{
-+	return mmc_test2(ast, datagen, 0x05);
- }
- 
- static int cbr_test(struct ast_private *ast)
-@@ -597,16 +577,16 @@ static u32 cbr_scan2(struct ast_private *ast)
- 	return data2;
- }
- 
--static u32 cbr_test3(struct ast_private *ast)
-+static bool cbr_test3(struct ast_private *ast)
- {
- 	if (!mmc_test_burst(ast, 0))
--		return 0;
-+		return false;
- 	if (!mmc_test_single(ast, 0))
--		return 0;
--	return 1;
-+		return false;
-+	return true;
- }
- 
--static u32 cbr_scan3(struct ast_private *ast)
-+static bool cbr_scan3(struct ast_private *ast)
- {
- 	u32 patcnt, loop;
- 
-@@ -617,9 +597,9 @@ static u32 cbr_scan3(struct ast_private *ast)
- 				break;
- 		}
- 		if (loop == 2)
--			return 0;
-+			return false;
- 	}
--	return 1;
-+	return true;
- }
- 
- static bool finetuneDQI_L(struct ast_private *ast, struct ast2300_dram_param *param)
--- 
-2.11.0
-
diff --git a/openpower/linux/0009-drm-ast-Rename-ast_init_dram_2300-to-ast_post_chip_2.patch b/openpower/linux/0009-drm-ast-Rename-ast_init_dram_2300-to-ast_post_chip_2.patch
deleted file mode 100644
index d0dc48f..0000000
--- a/openpower/linux/0009-drm-ast-Rename-ast_init_dram_2300-to-ast_post_chip_2.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
-Date: Fri, 17 Feb 2017 13:51:34 +1100
-Subject: [PATCH 09/12] drm/ast: Rename ast_init_dram_2300 to
- ast_post_chip_2300
-
-The function does more than initializing the DRAM and in turns
-calls other functions to do the actual init. This will keeping
-things more consistent with the upcoming AST2500 POST code.
-
-Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
-Signed-off-by: Joel Stanley <joel@jms.id.au>
----
- drivers/gpu/drm/ast/ast_post.c | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/drivers/gpu/drm/ast/ast_post.c b/drivers/gpu/drm/ast/ast_post.c
-index 89b09d60b2be..3716795d27c8 100644
---- a/drivers/gpu/drm/ast/ast_post.c
-+++ b/drivers/gpu/drm/ast/ast_post.c
-@@ -31,7 +31,7 @@
- 
- #include "ast_dram_tables.h"
- 
--static void ast_init_dram_2300(struct drm_device *dev);
-+static void ast_post_chip_2300(struct drm_device *dev);
- 
- void ast_enable_vga(struct drm_device *dev)
- {
-@@ -377,7 +377,7 @@ void ast_post_gpu(struct drm_device *dev)
- 
- 	if (ast->config_mode == ast_use_p2a) {
- 		if (ast->chip == AST2300 || ast->chip == AST2400)
--			ast_init_dram_2300(dev);
-+			ast_post_chip_2300(dev);
- 		else
- 			ast_init_dram_reg(dev);
- 
-@@ -1585,7 +1585,7 @@ static void ddr2_init(struct ast_private *ast, struct ast2300_dram_param *param)
- 
- }
- 
--static void ast_init_dram_2300(struct drm_device *dev)
-+static void ast_post_chip_2300(struct drm_device *dev)
- {
- 	struct ast_private *ast = dev->dev_private;
- 	struct ast2300_dram_param param;
--- 
-2.11.0
-
diff --git a/openpower/linux/0010-drm-ast-POST-code-for-the-new-AST2500.patch b/openpower/linux/0010-drm-ast-POST-code-for-the-new-AST2500.patch
deleted file mode 100644
index 6e42f86..0000000
--- a/openpower/linux/0010-drm-ast-POST-code-for-the-new-AST2500.patch
+++ /dev/null
@@ -1,559 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: "Y.C. Chen" <yc_chen@aspeedtech.com>
-Date: Fri, 17 Feb 2017 14:45:07 +1100
-Subject: [PATCH 10/12] drm/ast: POST code for the new AST2500
-
-This is used when the BMC isn't running any code and thus has
-to be initialized by the host.
-
-The code originates from Aspeed (Y.C. Chen) and has been cleaned
-up for coding style purposes by BenH.
-
-Signed-off-by: Y.C. Chen <yc_chen@aspeedtech.com>
-Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
---
-
-v2. - Fix bug in ddr_test_2500 reported by Emil Velikov
-    - Rebase on updated mmc_test factoring patch
-    - Fix missing else statement in 2500 POST code
-
-Signed-off-by: Joel Stanley <joel@jms.id.au>
----
- drivers/gpu/drm/ast/ast_dram_tables.h |  62 +++++
- drivers/gpu/drm/ast/ast_post.c        | 417 +++++++++++++++++++++++++++++++++-
- 2 files changed, 476 insertions(+), 3 deletions(-)
-
-diff --git a/drivers/gpu/drm/ast/ast_dram_tables.h b/drivers/gpu/drm/ast/ast_dram_tables.h
-index cc04539c0ff3..1d9c4e75d303 100644
---- a/drivers/gpu/drm/ast/ast_dram_tables.h
-+++ b/drivers/gpu/drm/ast/ast_dram_tables.h
-@@ -141,4 +141,66 @@ static const struct ast_dramstruct ast2100_dram_table_data[] = {
- 	{ 0xffff, 0xffffffff },
- };
- 
-+/*
-+ * AST2500 DRAM settings modules
-+ */
-+#define REGTBL_NUM           17
-+#define REGIDX_010           0
-+#define REGIDX_014           1
-+#define REGIDX_018           2
-+#define REGIDX_020           3
-+#define REGIDX_024           4
-+#define REGIDX_02C           5
-+#define REGIDX_030           6
-+#define REGIDX_214           7
-+#define REGIDX_2E0           8
-+#define REGIDX_2E4           9
-+#define REGIDX_2E8           10
-+#define REGIDX_2EC           11
-+#define REGIDX_2F0           12
-+#define REGIDX_2F4           13
-+#define REGIDX_2F8           14
-+#define REGIDX_RFC           15
-+#define REGIDX_PLL           16
-+
-+static const u32 ast2500_ddr3_1600_timing_table[REGTBL_NUM] = {
-+	0x64604D38,		     /* 0x010 */
-+	0x29690599,		     /* 0x014 */
-+	0x00000300,		     /* 0x018 */
-+	0x00000000,		     /* 0x020 */
-+	0x00000000,		     /* 0x024 */
-+	0x02181E70,		     /* 0x02C */
-+	0x00000040,		     /* 0x030 */
-+	0x00000024,		     /* 0x214 */
-+	0x02001300,		     /* 0x2E0 */
-+	0x0E0000A0,		     /* 0x2E4 */
-+	0x000E001B,		     /* 0x2E8 */
-+	0x35B8C105,		     /* 0x2EC */
-+	0x08090408,		     /* 0x2F0 */
-+	0x9B000800,		     /* 0x2F4 */
-+	0x0E400A00,		     /* 0x2F8 */
-+	0x9971452F,		     /* tRFC  */
-+	0x000071C1		     /* PLL   */
-+};
-+
-+static const u32 ast2500_ddr4_1600_timing_table[REGTBL_NUM] = {
-+	0x63604E37,		     /* 0x010 */
-+	0xE97AFA99,		     /* 0x014 */
-+	0x00019000,		     /* 0x018 */
-+	0x08000000,		     /* 0x020 */
-+	0x00000400,		     /* 0x024 */
-+	0x00000410,		     /* 0x02C */
-+	0x00000101,		     /* 0x030 */
-+	0x00000024,		     /* 0x214 */
-+	0x03002900,		     /* 0x2E0 */
-+	0x0E0000A0,		     /* 0x2E4 */
-+	0x000E001C,		     /* 0x2E8 */
-+	0x35B8C106,		     /* 0x2EC */
-+	0x08080607,		     /* 0x2F0 */
-+	0x9B000900,		     /* 0x2F4 */
-+	0x0E400A00,		     /* 0x2F8 */
-+	0x99714545,		     /* tRFC  */
-+	0x000071C1		     /* PLL   */
-+};
-+
- #endif
-diff --git a/drivers/gpu/drm/ast/ast_post.c b/drivers/gpu/drm/ast/ast_post.c
-index 3716795d27c8..f7d421359d56 100644
---- a/drivers/gpu/drm/ast/ast_post.c
-+++ b/drivers/gpu/drm/ast/ast_post.c
-@@ -32,6 +32,7 @@
- #include "ast_dram_tables.h"
- 
- static void ast_post_chip_2300(struct drm_device *dev);
-+static void ast_post_chip_2500(struct drm_device *dev);
- 
- void ast_enable_vga(struct drm_device *dev)
- {
-@@ -78,7 +79,8 @@ ast_set_def_ext_reg(struct drm_device *dev)
- 	for (i = 0x81; i <= 0x9f; i++)
- 		ast_set_index_reg(ast, AST_IO_CRTC_PORT, i, 0x00);
- 
--	if (ast->chip == AST2300 || ast->chip == AST2400) {
-+	if (ast->chip == AST2300 || ast->chip == AST2400 ||
-+	    ast->chip == AST2500) {
- 		if (dev->pdev->revision >= 0x20)
- 			ext_reg_info = extreginfo_ast2300;
- 		else
-@@ -102,7 +104,8 @@ ast_set_def_ext_reg(struct drm_device *dev)
- 
- 	/* Enable RAMDAC for A1 */
- 	reg = 0x04;
--	if (ast->chip == AST2300 || ast->chip == AST2400)
-+	if (ast->chip == AST2300 || ast->chip == AST2400 ||
-+	    ast->chip == AST2500)
- 		reg |= 0x20;
- 	ast_set_index_reg_mask(ast, AST_IO_CRTC_PORT, 0xb6, 0xff, reg);
- }
-@@ -376,7 +379,9 @@ void ast_post_gpu(struct drm_device *dev)
- 	ast_set_def_ext_reg(dev);
- 
- 	if (ast->config_mode == ast_use_p2a) {
--		if (ast->chip == AST2300 || ast->chip == AST2400)
-+		if (ast->chip == AST2500)
-+			ast_post_chip_2500(dev);
-+		else if (ast->chip == AST2300 || ast->chip == AST2400)
- 			ast_post_chip_2300(dev);
- 		else
- 			ast_init_dram_reg(dev);
-@@ -502,6 +507,11 @@ static u32 mmc_test_single2(struct ast_private *ast, u32 datagen)
- 	return mmc_test2(ast, datagen, 0x05);
- }
- 
-+static bool mmc_test_single_2500(struct ast_private *ast, u32 datagen)
-+{
-+	return mmc_test(ast, datagen, 0x85);
-+}
-+
- static int cbr_test(struct ast_private *ast)
- {
- 	u32 data;
-@@ -1668,3 +1678,404 @@ static void ast_post_chip_2300(struct drm_device *dev)
- 	} while ((reg & 0x40) == 0);
- }
- 
-+static bool cbr_test_2500(struct ast_private *ast)
-+{
-+	ast_moutdwm(ast, 0x1E6E0074, 0x0000FFFF);
-+	ast_moutdwm(ast, 0x1E6E007C, 0xFF00FF00);
-+	if (!mmc_test_burst(ast, 0))
-+		return false;
-+	if (!mmc_test_single_2500(ast, 0))
-+		return false;
-+	return true;
-+}
-+
-+static bool ddr_test_2500(struct ast_private *ast)
-+{
-+	ast_moutdwm(ast, 0x1E6E0074, 0x0000FFFF);
-+	ast_moutdwm(ast, 0x1E6E007C, 0xFF00FF00);
-+	if (!mmc_test_burst(ast, 0))
-+		return false;
-+	if (!mmc_test_burst(ast, 1))
-+		return false;
-+	if (!mmc_test_burst(ast, 2))
-+		return false;
-+	if (!mmc_test_burst(ast, 3))
-+		return false;
-+	if (!mmc_test_single_2500(ast, 0))
-+		return false;
-+	return true;
-+}
-+
-+static void ddr_init_common_2500(struct ast_private *ast)
-+{
-+	ast_moutdwm(ast, 0x1E6E0034, 0x00020080);
-+	ast_moutdwm(ast, 0x1E6E0008, 0x2003000F);
-+	ast_moutdwm(ast, 0x1E6E0038, 0x00000FFF);
-+	ast_moutdwm(ast, 0x1E6E0040, 0x88448844);
-+	ast_moutdwm(ast, 0x1E6E0044, 0x24422288);
-+	ast_moutdwm(ast, 0x1E6E0048, 0x22222222);
-+	ast_moutdwm(ast, 0x1E6E004C, 0x22222222);
-+	ast_moutdwm(ast, 0x1E6E0050, 0x80000000);
-+	ast_moutdwm(ast, 0x1E6E0208, 0x00000000);
-+	ast_moutdwm(ast, 0x1E6E0218, 0x00000000);
-+	ast_moutdwm(ast, 0x1E6E0220, 0x00000000);
-+	ast_moutdwm(ast, 0x1E6E0228, 0x00000000);
-+	ast_moutdwm(ast, 0x1E6E0230, 0x00000000);
-+	ast_moutdwm(ast, 0x1E6E02A8, 0x00000000);
-+	ast_moutdwm(ast, 0x1E6E02B0, 0x00000000);
-+	ast_moutdwm(ast, 0x1E6E0240, 0x86000000);
-+	ast_moutdwm(ast, 0x1E6E0244, 0x00008600);
-+	ast_moutdwm(ast, 0x1E6E0248, 0x80000000);
-+	ast_moutdwm(ast, 0x1E6E024C, 0x80808080);
-+}
-+
-+static void ddr_phy_init_2500(struct ast_private *ast)
-+{
-+	u32 data, pass, timecnt;
-+
-+	pass = 0;
-+	ast_moutdwm(ast, 0x1E6E0060, 0x00000005);
-+	while (!pass) {
-+		for (timecnt = 0; timecnt < TIMEOUT; timecnt++) {
-+			data = ast_mindwm(ast, 0x1E6E0060) & 0x1;
-+			if (!data)
-+				break;
-+		}
-+		if (timecnt != TIMEOUT) {
-+			data = ast_mindwm(ast, 0x1E6E0300) & 0x000A0000;
-+			if (!data)
-+				pass = 1;
-+		}
-+		if (!pass) {
-+			ast_moutdwm(ast, 0x1E6E0060, 0x00000000);
-+			udelay(10); /* delay 10 us */
-+			ast_moutdwm(ast, 0x1E6E0060, 0x00000005);
-+		}
-+	}
-+
-+	ast_moutdwm(ast, 0x1E6E0060, 0x00000006);
-+}
-+
-+/*
-+ * Check DRAM Size
-+ * 1Gb : 0x80000000 ~ 0x87FFFFFF
-+ * 2Gb : 0x80000000 ~ 0x8FFFFFFF
-+ * 4Gb : 0x80000000 ~ 0x9FFFFFFF
-+ * 8Gb : 0x80000000 ~ 0xBFFFFFFF
-+ */
-+static void check_dram_size_2500(struct ast_private *ast, u32 tRFC)
-+{
-+	u32 reg_04, reg_14;
-+
-+	reg_04 = ast_mindwm(ast, 0x1E6E0004) & 0xfffffffc;
-+	reg_14 = ast_mindwm(ast, 0x1E6E0014) & 0xffffff00;
-+
-+	ast_moutdwm(ast, 0xA0100000, 0x41424344);
-+	ast_moutdwm(ast, 0x90100000, 0x35363738);
-+	ast_moutdwm(ast, 0x88100000, 0x292A2B2C);
-+	ast_moutdwm(ast, 0x80100000, 0x1D1E1F10);
-+
-+	/* Check 8Gbit */
-+	if (ast_mindwm(ast, 0xA0100000) == 0x41424344) {
-+		reg_04 |= 0x03;
-+		reg_14 |= (tRFC >> 24) & 0xFF;
-+		/* Check 4Gbit */
-+	} else if (ast_mindwm(ast, 0x90100000) == 0x35363738) {
-+		reg_04 |= 0x02;
-+		reg_14 |= (tRFC >> 16) & 0xFF;
-+		/* Check 2Gbit */
-+	} else if (ast_mindwm(ast, 0x88100000) == 0x292A2B2C) {
-+		reg_04 |= 0x01;
-+		reg_14 |= (tRFC >> 8) & 0xFF;
-+	} else {
-+		reg_14 |= tRFC & 0xFF;
-+	}
-+	ast_moutdwm(ast, 0x1E6E0004, reg_04);
-+	ast_moutdwm(ast, 0x1E6E0014, reg_14);
-+}
-+
-+static void enable_cache_2500(struct ast_private *ast)
-+{
-+	u32 reg_04, data;
-+
-+	reg_04 = ast_mindwm(ast, 0x1E6E0004);
-+	ast_moutdwm(ast, 0x1E6E0004, reg_04 | 0x1000);
-+
-+	do
-+		data = ast_mindwm(ast, 0x1E6E0004);
-+	while (!(data & 0x80000));
-+	ast_moutdwm(ast, 0x1E6E0004, reg_04 | 0x400);
-+}
-+
-+static void set_mpll_2500(struct ast_private *ast)
-+{
-+	u32 addr, data, param;
-+
-+	/* Reset MMC */
-+	ast_moutdwm(ast, 0x1E6E0000, 0xFC600309);
-+	ast_moutdwm(ast, 0x1E6E0034, 0x00020080);
-+	for (addr = 0x1e6e0004; addr < 0x1e6e0090;) {
-+		ast_moutdwm(ast, addr, 0x0);
-+		addr += 4;
-+	}
-+	ast_moutdwm(ast, 0x1E6E0034, 0x00020000);
-+
-+	ast_moutdwm(ast, 0x1E6E2000, 0x1688A8A8);
-+	data = ast_mindwm(ast, 0x1E6E2070) & 0x00800000;
-+	if (data) {
-+		/* CLKIN = 25MHz */
-+		param = 0x930023E0;
-+		ast_moutdwm(ast, 0x1E6E2160, 0x00011320);
-+	} else {
-+		/* CLKIN = 24MHz */
-+		param = 0x93002400;
-+	}
-+	ast_moutdwm(ast, 0x1E6E2020, param);
-+	udelay(100);
-+}
-+
-+static void reset_mmc_2500(struct ast_private *ast)
-+{
-+	ast_moutdwm(ast, 0x1E78505C, 0x00000004);
-+	ast_moutdwm(ast, 0x1E785044, 0x00000001);
-+	ast_moutdwm(ast, 0x1E785048, 0x00004755);
-+	ast_moutdwm(ast, 0x1E78504C, 0x00000013);
-+	mdelay(100);
-+	ast_moutdwm(ast, 0x1E785054, 0x00000077);
-+	ast_moutdwm(ast, 0x1E6E0000, 0xFC600309);
-+}
-+
-+static void ddr3_init_2500(struct ast_private *ast, const u32 *ddr_table)
-+{
-+
-+	ast_moutdwm(ast, 0x1E6E0004, 0x00000303);
-+	ast_moutdwm(ast, 0x1E6E0010, ddr_table[REGIDX_010]);
-+	ast_moutdwm(ast, 0x1E6E0014, ddr_table[REGIDX_014]);
-+	ast_moutdwm(ast, 0x1E6E0018, ddr_table[REGIDX_018]);
-+	ast_moutdwm(ast, 0x1E6E0020, ddr_table[REGIDX_020]);	     /* MODEREG4/6 */
-+	ast_moutdwm(ast, 0x1E6E0024, ddr_table[REGIDX_024]);	     /* MODEREG5 */
-+	ast_moutdwm(ast, 0x1E6E002C, ddr_table[REGIDX_02C] | 0x100); /* MODEREG0/2 */
-+	ast_moutdwm(ast, 0x1E6E0030, ddr_table[REGIDX_030]);	     /* MODEREG1/3 */
-+
-+	/* DDR PHY Setting */
-+	ast_moutdwm(ast, 0x1E6E0200, 0x02492AAE);
-+	ast_moutdwm(ast, 0x1E6E0204, 0x00001001);
-+	ast_moutdwm(ast, 0x1E6E020C, 0x55E00B0B);
-+	ast_moutdwm(ast, 0x1E6E0210, 0x20000000);
-+	ast_moutdwm(ast, 0x1E6E0214, ddr_table[REGIDX_214]);
-+	ast_moutdwm(ast, 0x1E6E02E0, ddr_table[REGIDX_2E0]);
-+	ast_moutdwm(ast, 0x1E6E02E4, ddr_table[REGIDX_2E4]);
-+	ast_moutdwm(ast, 0x1E6E02E8, ddr_table[REGIDX_2E8]);
-+	ast_moutdwm(ast, 0x1E6E02EC, ddr_table[REGIDX_2EC]);
-+	ast_moutdwm(ast, 0x1E6E02F0, ddr_table[REGIDX_2F0]);
-+	ast_moutdwm(ast, 0x1E6E02F4, ddr_table[REGIDX_2F4]);
-+	ast_moutdwm(ast, 0x1E6E02F8, ddr_table[REGIDX_2F8]);
-+	ast_moutdwm(ast, 0x1E6E0290, 0x00100008);
-+	ast_moutdwm(ast, 0x1E6E02C0, 0x00000006);
-+
-+	/* Controller Setting */
-+	ast_moutdwm(ast, 0x1E6E0034, 0x00020091);
-+
-+	/* Wait DDR PHY init done */
-+	ddr_phy_init_2500(ast);
-+
-+	ast_moutdwm(ast, 0x1E6E0120, ddr_table[REGIDX_PLL]);
-+	ast_moutdwm(ast, 0x1E6E000C, 0x42AA5C81);
-+	ast_moutdwm(ast, 0x1E6E0034, 0x0001AF93);
-+
-+	check_dram_size_2500(ast, ddr_table[REGIDX_RFC]);
-+	enable_cache_2500(ast);
-+	ast_moutdwm(ast, 0x1E6E001C, 0x00000008);
-+	ast_moutdwm(ast, 0x1E6E0038, 0xFFFFFF00);
-+}
-+
-+static void ddr4_init_2500(struct ast_private *ast, const u32 *ddr_table)
-+{
-+	u32 data, data2, pass, retrycnt;
-+	u32 ddr_vref, phy_vref;
-+	u32 min_ddr_vref = 0, min_phy_vref = 0;
-+	u32 max_ddr_vref = 0, max_phy_vref = 0;
-+
-+	ast_moutdwm(ast, 0x1E6E0004, 0x00000313);
-+	ast_moutdwm(ast, 0x1E6E0010, ddr_table[REGIDX_010]);
-+	ast_moutdwm(ast, 0x1E6E0014, ddr_table[REGIDX_014]);
-+	ast_moutdwm(ast, 0x1E6E0018, ddr_table[REGIDX_018]);
-+	ast_moutdwm(ast, 0x1E6E0020, ddr_table[REGIDX_020]);	     /* MODEREG4/6 */
-+	ast_moutdwm(ast, 0x1E6E0024, ddr_table[REGIDX_024]);	     /* MODEREG5 */
-+	ast_moutdwm(ast, 0x1E6E002C, ddr_table[REGIDX_02C] | 0x100); /* MODEREG0/2 */
-+	ast_moutdwm(ast, 0x1E6E0030, ddr_table[REGIDX_030]);	     /* MODEREG1/3 */
-+
-+	/* DDR PHY Setting */
-+	ast_moutdwm(ast, 0x1E6E0200, 0x42492AAE);
-+	ast_moutdwm(ast, 0x1E6E0204, 0x09002000);
-+	ast_moutdwm(ast, 0x1E6E020C, 0x55E00B0B);
-+	ast_moutdwm(ast, 0x1E6E0210, 0x20000000);
-+	ast_moutdwm(ast, 0x1E6E0214, ddr_table[REGIDX_214]);
-+	ast_moutdwm(ast, 0x1E6E02E0, ddr_table[REGIDX_2E0]);
-+	ast_moutdwm(ast, 0x1E6E02E4, ddr_table[REGIDX_2E4]);
-+	ast_moutdwm(ast, 0x1E6E02E8, ddr_table[REGIDX_2E8]);
-+	ast_moutdwm(ast, 0x1E6E02EC, ddr_table[REGIDX_2EC]);
-+	ast_moutdwm(ast, 0x1E6E02F0, ddr_table[REGIDX_2F0]);
-+	ast_moutdwm(ast, 0x1E6E02F4, ddr_table[REGIDX_2F4]);
-+	ast_moutdwm(ast, 0x1E6E02F8, ddr_table[REGIDX_2F8]);
-+	ast_moutdwm(ast, 0x1E6E0290, 0x00100008);
-+	ast_moutdwm(ast, 0x1E6E02C4, 0x3C183C3C);
-+	ast_moutdwm(ast, 0x1E6E02C8, 0x00631E0E);
-+
-+	/* Controller Setting */
-+	ast_moutdwm(ast, 0x1E6E0034, 0x0001A991);
-+
-+	/* Train PHY Vref first */
-+	pass = 0;
-+
-+	for (retrycnt = 0; retrycnt < 4 && pass == 0; retrycnt++) {
-+		max_phy_vref = 0x0;
-+		pass = 0;
-+		ast_moutdwm(ast, 0x1E6E02C0, 0x00001C06);
-+		for (phy_vref = 0x40; phy_vref < 0x80; phy_vref++) {
-+			ast_moutdwm(ast, 0x1E6E000C, 0x00000000);
-+			ast_moutdwm(ast, 0x1E6E0060, 0x00000000);
-+			ast_moutdwm(ast, 0x1E6E02CC, phy_vref | (phy_vref << 8));
-+			/* Fire DFI Init */
-+			ddr_phy_init_2500(ast);
-+			ast_moutdwm(ast, 0x1E6E000C, 0x00005C01);
-+			if (cbr_test_2500(ast)) {
-+				pass++;
-+				data = ast_mindwm(ast, 0x1E6E03D0);
-+				data2 = data >> 8;
-+				data  = data & 0xff;
-+				if (data > data2)
-+					data = data2;
-+				if (max_phy_vref < data) {
-+					max_phy_vref = data;
-+					min_phy_vref = phy_vref;
-+				}
-+			} else if (pass > 0)
-+				break;
-+		}
-+	}
-+	ast_moutdwm(ast, 0x1E6E02CC, min_phy_vref | (min_phy_vref << 8));
-+
-+	/* Train DDR Vref next */
-+	pass = 0;
-+
-+	for (retrycnt = 0; retrycnt < 4 && pass == 0; retrycnt++) {
-+		min_ddr_vref = 0xFF;
-+		max_ddr_vref = 0x0;
-+		pass = 0;
-+		for (ddr_vref = 0x00; ddr_vref < 0x40; ddr_vref++) {
-+			ast_moutdwm(ast, 0x1E6E000C, 0x00000000);
-+			ast_moutdwm(ast, 0x1E6E0060, 0x00000000);
-+			ast_moutdwm(ast, 0x1E6E02C0, 0x00000006 | (ddr_vref << 8));
-+			/* Fire DFI Init */
-+			ddr_phy_init_2500(ast);
-+			ast_moutdwm(ast, 0x1E6E000C, 0x00005C01);
-+			if (cbr_test_2500(ast)) {
-+				pass++;
-+				if (min_ddr_vref > ddr_vref)
-+					min_ddr_vref = ddr_vref;
-+				if (max_ddr_vref < ddr_vref)
-+					max_ddr_vref = ddr_vref;
-+			} else if (pass != 0)
-+				break;
-+		}
-+	}
-+
-+	ast_moutdwm(ast, 0x1E6E000C, 0x00000000);
-+	ast_moutdwm(ast, 0x1E6E0060, 0x00000000);
-+	ddr_vref = (min_ddr_vref + max_ddr_vref + 1) >> 1;
-+	ast_moutdwm(ast, 0x1E6E02C0, 0x00000006 | (ddr_vref << 8));
-+
-+	/* Wait DDR PHY init done */
-+	ddr_phy_init_2500(ast);
-+
-+	ast_moutdwm(ast, 0x1E6E0120, ddr_table[REGIDX_PLL]);
-+	ast_moutdwm(ast, 0x1E6E000C, 0x42AA5C81);
-+	ast_moutdwm(ast, 0x1E6E0034, 0x0001AF93);
-+
-+	check_dram_size_2500(ast, ddr_table[REGIDX_RFC]);
-+	enable_cache_2500(ast);
-+	ast_moutdwm(ast, 0x1E6E001C, 0x00000008);
-+	ast_moutdwm(ast, 0x1E6E0038, 0xFFFFFF00);
-+}
-+
-+static bool ast_dram_init_2500(struct ast_private *ast)
-+{
-+	u32 data;
-+	u32 max_tries = 5;
-+
-+	do {
-+		if (max_tries-- == 0)
-+			return false;
-+		set_mpll_2500(ast);
-+		reset_mmc_2500(ast);
-+		ddr_init_common_2500(ast);
-+
-+		data = ast_mindwm(ast, 0x1E6E2070);
-+		if (data & 0x01000000)
-+			ddr4_init_2500(ast, ast2500_ddr4_1600_timing_table);
-+		else
-+			ddr3_init_2500(ast, ast2500_ddr3_1600_timing_table);
-+	} while (!ddr_test_2500(ast));
-+
-+	ast_moutdwm(ast, 0x1E6E2040, ast_mindwm(ast, 0x1E6E2040) | 0x41);
-+
-+	/* Patch code */
-+	data = ast_mindwm(ast, 0x1E6E200C) & 0xF9FFFFFF;
-+	ast_moutdwm(ast, 0x1E6E200C, data | 0x10000000);
-+
-+	return true;
-+}
-+
-+void ast_post_chip_2500(struct drm_device *dev)
-+{
-+	struct ast_private *ast = dev->dev_private;
-+	u32 temp;
-+	u8 reg;
-+
-+	reg = ast_get_index_reg_mask(ast, AST_IO_CRTC_PORT, 0xd0, 0xff);
-+	if ((reg & 0x80) == 0) {/* vga only */
-+		/* Clear bus lock condition */
-+		ast_moutdwm(ast, 0x1e600000, 0xAEED1A03);
-+		ast_moutdwm(ast, 0x1e600084, 0x00010000);
-+		ast_moutdwm(ast, 0x1e600088, 0x00000000);
-+		ast_moutdwm(ast, 0x1e6e2000, 0x1688A8A8);
-+		ast_write32(ast, 0xf004, 0x1e6e0000);
-+		ast_write32(ast, 0xf000, 0x1);
-+		ast_write32(ast, 0x12000, 0x1688a8a8);
-+		while (ast_read32(ast, 0x12000) != 0x1)
-+			;
-+
-+		ast_write32(ast, 0x10000, 0xfc600309);
-+		while (ast_read32(ast, 0x10000) != 0x1)
-+			;
-+
-+		/* Slow down CPU/AHB CLK in VGA only mode */
-+		temp = ast_read32(ast, 0x12008);
-+		temp |= 0x73;
-+		ast_write32(ast, 0x12008, temp);
-+
-+		/* Reset USB port to patch USB unknown device issue */
-+		ast_moutdwm(ast, 0x1e6e2090, 0x20000000);
-+		temp  = ast_mindwm(ast, 0x1e6e2094);
-+		temp |= 0x00004000;
-+		ast_moutdwm(ast, 0x1e6e2094, temp);
-+		temp  = ast_mindwm(ast, 0x1e6e2070);
-+		if (temp & 0x00800000) {
-+			ast_moutdwm(ast, 0x1e6e207c, 0x00800000);
-+			mdelay(100);
-+			ast_moutdwm(ast, 0x1e6e2070, 0x00800000);
-+		}
-+
-+		if (!ast_dram_init_2500(ast))
-+			DRM_ERROR("DRAM init failed !\n");
-+
-+		temp = ast_mindwm(ast, 0x1e6e2040);
-+		ast_moutdwm(ast, 0x1e6e2040, temp | 0x40);
-+	}
-+
-+	/* wait ready */
-+	do {
-+		reg = ast_get_index_reg_mask(ast, AST_IO_CRTC_PORT, 0xd0, 0xff);
-+	} while ((reg & 0x40) == 0);
-+}
--- 
-2.11.0
-
diff --git a/openpower/linux/0011-powerpc-powernv-cpuidle-Pass-correct-drv-cpumask-for.patch b/openpower/linux/0011-powerpc-powernv-cpuidle-Pass-correct-drv-cpumask-for.patch
deleted file mode 100644
index 25937aa..0000000
--- a/openpower/linux/0011-powerpc-powernv-cpuidle-Pass-correct-drv-cpumask-for.patch
+++ /dev/null
@@ -1,93 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com>
-Date: Thu, 23 Mar 2017 20:52:46 +0530
-Subject: [PATCH 11/12] powerpc/powernv/cpuidle: Pass correct drv->cpumask for
- registration
-
-drv->cpumask defaults to cpu_possible_mask in __cpuidle_driver_init().
-On PowerNV platform cpu_present could be less than cpu_possible in cases
-where firmware detects the cpu, but it is not available to the OS.  When
-CONFIG_HOTPLUG_CPU=n, such cpus are not hotplugable at runtime and hence
-we skip creating cpu_device.
-
-This breaks cpuidle on powernv where register_cpu() is not called for
-cpus in cpu_possible_mask that cannot be hot-added at runtime.
-
-Trying cpuidle_register_device() on cpu without cpu_device will cause
-crash like this:
-
-cpu 0xf: Vector: 380 (Data SLB Access) at [c000000ff1503490]
-    pc: c00000000022c8bc: string+0x34/0x60
-    lr: c00000000022ed78: vsnprintf+0x284/0x42c
-    sp: c000000ff1503710
-   msr: 9000000000009033
-   dar: 6000000060000000
-  current = 0xc000000ff1480000
-  paca    = 0xc00000000fe82d00   softe: 0        irq_happened: 0x01
-    pid   = 1, comm = swapper/8
-Linux version 4.11.0-rc2 (sv@sagarika) (gcc version 4.9.4
-(Buildroot 2017.02-00004-gc28573e) ) #15 SMP Fri Mar 17 19:32:02 IST 2017
-enter ? for help
-[link register   ] c00000000022ed78 vsnprintf+0x284/0x42c
-[c000000ff1503710] c00000000022ebb8 vsnprintf+0xc4/0x42c (unreliable)
-[c000000ff1503800] c00000000022ef40 vscnprintf+0x20/0x44
-[c000000ff1503830] c0000000000ab61c vprintk_emit+0x94/0x2cc
-[c000000ff15038a0] c0000000000acc9c vprintk_func+0x60/0x74
-[c000000ff15038c0] c000000000619694 printk+0x38/0x4c
-[c000000ff15038e0] c000000000224950 kobject_get+0x40/0x60
-[c000000ff1503950] c00000000022507c kobject_add_internal+0x60/0x2c4
-[c000000ff15039e0] c000000000225350 kobject_init_and_add+0x70/0x78
-[c000000ff1503a60] c00000000053c288 cpuidle_add_sysfs+0x9c/0xe0
-[c000000ff1503ae0] c00000000053aeac cpuidle_register_device+0xd4/0x12c
-[c000000ff1503b30] c00000000053b108 cpuidle_register+0x98/0xcc
-[c000000ff1503bc0] c00000000085eaf0 powernv_processor_idle_init+0x140/0x1e0
-[c000000ff1503c60] c00000000000cd60 do_one_initcall+0xc0/0x15c
-[c000000ff1503d20] c000000000833e84 kernel_init_freeable+0x1a0/0x25c
-[c000000ff1503dc0] c00000000000d478 kernel_init+0x24/0x12c
-[c000000ff1503e30] c00000000000b564 ret_from_kernel_thread+0x5c/0x78
-
-This patch fixes the bug by passing correct cpumask from
-powernv-cpuidle driver.
-
-Signed-off-by: Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com>
-Reviewed-by: Gautham R. Shenoy <ego@linux.vnet.ibm.com>
-[From http://patchwork.ozlabs.org/patch/742706/]
-Signed-off-by: Joel Stanley <joel@jms.id.au>
-
-Signed-off-by: Joel Stanley <joel@jms.id.au>
----
- drivers/cpuidle/cpuidle-powernv.c | 18 ++++++++++++++++++
- 1 file changed, 18 insertions(+)
-
-diff --git a/drivers/cpuidle/cpuidle-powernv.c b/drivers/cpuidle/cpuidle-powernv.c
-index 0835a37a5f3a..5e06d7b6b508 100644
---- a/drivers/cpuidle/cpuidle-powernv.c
-+++ b/drivers/cpuidle/cpuidle-powernv.c
-@@ -164,6 +164,24 @@ static int powernv_cpuidle_driver_init(void)
- 		drv->state_count += 1;
- 	}
- 
-+	/*
-+	 * On PowerNV platform cpu_present may be less that cpu_possible in
-+	 * cases where firmware detects the cpu, but it is not available to the
-+	 * OS.  If CONFIG_HOTPLUG_CPU=n then such CPUs are not hotplugable at
-+	 * runtime and hence cpu_devices are not created for those cpus by
-+	 * generic topology_init().
-+	 *
-+	 * drv->cpumask defaults to cpu_possible_mask in
-+	 * __cpuidle_driver_init().  This breaks cpuidle on powernv where
-+	 * cpu_devices are not created for cpus in cpu_possible_mask that
-+	 * cannot be hot-added later at runtime.
-+	 *
-+	 * Trying cpuidle_register_device() on a cpu without cpu_devices is
-+	 * incorrect. Hence pass correct cpu mask to generic cpuidle driver.
-+	 */
-+
-+	drv->cpumask = (struct cpumask *)cpu_present_mask;
-+
- 	return 0;
- }
- 
--- 
-2.11.0
-
diff --git a/openpower/package/Config.in b/openpower/package/Config.in
index a28de54..d380784 100755
--- a/openpower/package/Config.in
+++ b/openpower/package/Config.in
@@ -3,11 +3,7 @@
 source "$BR2_EXTERNAL_OP_BUILD_PATH/package/hostboot-binaries/Config.in"
 source "$BR2_EXTERNAL_OP_BUILD_PATH/package/openpower-mrw/Config.in"
 source "$BR2_EXTERNAL_OP_BUILD_PATH/package/common-p8-xml/Config.in"
-source "$BR2_EXTERNAL_OP_BUILD_PATH/package/palmetto-xml/Config.in"
-source "$BR2_EXTERNAL_OP_BUILD_PATH/package/habanero-xml/Config.in"
-source "$BR2_EXTERNAL_OP_BUILD_PATH/package/firestone-xml/Config.in"
-source "$BR2_EXTERNAL_OP_BUILD_PATH/package/garrison-xml/Config.in"
-source "$BR2_EXTERNAL_OP_BUILD_PATH/package/barreleye-xml/Config.in"
+source "$BR2_EXTERNAL_OP_BUILD_PATH/package/machine-xml/Config.in"
 source "$BR2_EXTERNAL_OP_BUILD_PATH/package/openpower-pnor/Config.in"
 source "$BR2_EXTERNAL_OP_BUILD_PATH/package/petitboot/Config.in"
 source "$BR2_EXTERNAL_OP_BUILD_PATH/package/p8-pore-binutils/Config.in"
@@ -16,10 +12,8 @@
 source "$BR2_EXTERNAL_OP_BUILD_PATH/package/skiboot/Config.in"
 source "$BR2_EXTERNAL_OP_BUILD_PATH/package/libflash/Config.in"
 source "$BR2_EXTERNAL_OP_BUILD_PATH/package/loadkeys/Config.in"
-source "$BR2_EXTERNAL_OP_BUILD_PATH/package/witherspoon-xml/Config.in"
-source "$BR2_EXTERNAL_OP_BUILD_PATH/package/romulus-xml/Config.in"
 source "$BR2_EXTERNAL_OP_BUILD_PATH/package/ppe42-binutils/Config.in"
 source "$BR2_EXTERNAL_OP_BUILD_PATH/package/ppe42-gcc/Config.in"
-source "$BR2_EXTERNAL_OP_BUILD_PATH/package/zaius-xml/Config.in"
 source "$BR2_EXTERNAL_OP_BUILD_PATH/package/ima-catalog/Config.in"
-source "$BR2_EXTERNAL_OP_BUILD_PATH/package/p9dsu-xml/Config.in"
+source "$BR2_EXTERNAL_OP_BUILD_PATH/package/sbe/Config.in"
+
diff --git a/openpower/package/barreleye-xml/Config.in b/openpower/package/barreleye-xml/Config.in
deleted file mode 100755
index 5a8ba74..0000000
--- a/openpower/package/barreleye-xml/Config.in
+++ /dev/null
@@ -1,24 +0,0 @@
-config BR2_PACKAGE_BARRELEYE_XML
-        bool "barreleye_xml"
-        default y if (BR2_OPENPOWER_CONFIG_NAME = "barreleye")
-        select BR2_PACKAGE_COMMON_P8_XML
-        help
-            Utilites for building xml and the targeting binary image
-
-config BR2_BARRELEYE_SYSTEM_XML_FILENAME
-        string "Barreleye targeting system xml filename"
-        default ""
-        help
-            Defines the name of the system XML filename to be used when creating targeting binary image
-
-config BR2_BARRELEYE_MRW_XML_FILENAME
-        string "Barreleye targeting mrw xml filename"
-        default ""
-        help
-            Defines the name of the mrw XML filename to be used when creating targeting binary image
-
-config BR2_BARRELEYE_BIOS_XML_FILENAME
-        string "Barreleye BIOS metadata XML filename"
-        default ""
-        help
-            Defines the name of the BIOS XML filename to parse when generating BIOS metadata
diff --git a/openpower/package/barreleye-xml/barreleye-xml.mk b/openpower/package/barreleye-xml/barreleye-xml.mk
deleted file mode 100755
index 1621a56..0000000
--- a/openpower/package/barreleye-xml/barreleye-xml.mk
+++ /dev/null
@@ -1,77 +0,0 @@
-################################################################################
-#
-# barreleye_xml
-#
-################################################################################
-
-BARRELEYE_XML_VERSION ?= 253622f22fe142ea67a0025e9bcc3044db038898
-BARRELEYE_XML_SITE = $(call github,open-power,barreleye-xml,$(BARRELEYE_XML_VERSION))
-
-BARRELEYE_XML_LICENSE = Apache-2.0
-BARRELEYE_XML_DEPENDENCIES = hostboot openpower-mrw common-p8-xml
-
-BARRELEYE_XML_INSTALL_IMAGES = YES
-BARRELEYE_XML_INSTALL_TARGET = YES
-
-MRW_SCRATCH=$(STAGING_DIR)/openpower_mrw_scratch
-MRW_HB_TOOLS=$(STAGING_DIR)/hostboot_build_images
-
-# Defines for BIOS metadata creation
-BIOS_SCHEMA_FILE = $(MRW_HB_TOOLS)/bios.xsd
-BARRELEYE_BIOS_XML_CONFIG_FILE = $(MRW_SCRATCH)/$(BR2_BARRELEYE_BIOS_XML_FILENAME)
-BIOS_XML_METADATA_FILE = \
-    $(MRW_HB_TOOLS)/$(BR2_OPENPOWER_CONFIG_NAME)_bios_metadata.xml
-PETITBOOT_XSLT_FILE = $(MRW_HB_TOOLS)/bios_metadata_petitboot.xslt
-PETITBOOT_BIOS_XML_METADATA_FILE = \
-    $(MRW_HB_TOOLS)/$(BR2_OPENPOWER_CONFIG_NAME)_bios_metadata_petitboot.xml
-PETITBOOT_BIOS_XML_METADATA_INITRAMFS_FILE = \
-    $(TARGET_DIR)/usr/share/bios_metadata.xml
-
-define BARRELEYE_XML_BUILD_CMDS
-        # copy the barreleye xml where the common lives
-        bash -c 'mkdir -p $(MRW_SCRATCH) && cp -r $(@D)/* $(MRW_SCRATCH)'
-
-        # generate the system mrw xml
-        perl -I $(MRW_HB_TOOLS) \
-        $(MRW_HB_TOOLS)/processMrw.pl -x $(MRW_SCRATCH)/barreleye.xml
-        
-        # merge in any system specific attributes, hostboot attributes
-        $(MRW_HB_TOOLS)/mergexml.sh $(MRW_SCRATCH)/$(BR2_BARRELEYE_SYSTEM_XML_FILENAME) \
-            $(MRW_HB_TOOLS)/attribute_types.xml \
-            $(MRW_HB_TOOLS)/attribute_types_hb.xml \
-            $(MRW_HB_TOOLS)/attribute_types_openpower.xml \
-            $(MRW_HB_TOOLS)/target_types_merged.xml \
-            $(MRW_HB_TOOLS)/target_types_hb.xml \
-            $(MRW_HB_TOOLS)/target_types_openpower.xml \
-            $(MRW_SCRATCH)/$(BR2_BARRELEYE_MRW_XML_FILENAME) > $(MRW_HB_TOOLS)/temporary_hb.hb.xml;
-
-        # creating the targeting binary
-        $(MRW_HB_TOOLS)/xmltohb.pl  \
-            --hb-xml-file=$(MRW_HB_TOOLS)/temporary_hb.hb.xml \
-            --fapi-attributes-xml-file=$(MRW_HB_TOOLS)/fapiattrs.xml \
-            --src-output-dir=none \
-            --img-output-dir=$(MRW_HB_TOOLS)/ \
-            --vmm-consts-file=$(MRW_HB_TOOLS)/vmmconst.h --noshort-enums \
-            --bios-xml-file=$(BARRELEYE_BIOS_XML_CONFIG_FILE) \
-            --bios-schema-file=$(BIOS_SCHEMA_FILE) \
-            --bios-output-file=$(BIOS_XML_METADATA_FILE)
-
-        # Transform BIOS XML into Petitboot specific BIOS XML via the schema
-        xsltproc -o \
-            $(PETITBOOT_BIOS_XML_METADATA_FILE) \
-            $(PETITBOOT_XSLT_FILE) \
-            $(BIOS_XML_METADATA_FILE)
-endef
-
-define BARRELEYE_XML_INSTALL_IMAGES_CMDS
-        mv $(MRW_HB_TOOLS)/targeting.bin $(MRW_HB_TOOLS)/$(BR2_OPENPOWER_TARGETING_BIN_FILENAME)
-endef
-
-define BARRELEYE_XML_INSTALL_TARGET_CMDS
-        # Install Petitboot specific BIOS XML into initramfs's usr/share/ dir
-        $(INSTALL) -D -m 0644 \
-            $(PETITBOOT_BIOS_XML_METADATA_FILE) \
-            $(PETITBOOT_BIOS_XML_METADATA_INITRAMFS_FILE)
-endef
-
-$(eval $(generic-package))
diff --git a/openpower/package/capp-ucode/capp-ucode.mk b/openpower/package/capp-ucode/capp-ucode.mk
index c846638..7513fe0 100644
--- a/openpower/package/capp-ucode/capp-ucode.mk
+++ b/openpower/package/capp-ucode/capp-ucode.mk
@@ -3,7 +3,7 @@
 # capp-ucode.mk
 #
 ################################################################################
-CAPP_UCODE_VERSION ?= 1bb7503078ed39b74a7b9c46925da75e547ceea6
+CAPP_UCODE_VERSION ?= 9c73e9f51d240847fbd150815a3b9c548aae0cb8
 CAPP_UCODE_SITE ?= $(call github,open-power,capp-ucode,$(CAPP_UCODE_VERSION))
 CAPP_UCODE_LICENSE = Apache-2.0
 CAPP_UCODE_LICENSE_FILES = NOTICES
diff --git a/openpower/package/firestone-xml/Config.in b/openpower/package/firestone-xml/Config.in
deleted file mode 100755
index 3990b29..0000000
--- a/openpower/package/firestone-xml/Config.in
+++ /dev/null
@@ -1,24 +0,0 @@
-config BR2_PACKAGE_FIRESTONE_XML
-        bool "firestone_xml"
-        default y if (BR2_OPENPOWER_CONFIG_NAME = "firestone")
-        select BR2_PACKAGE_COMMON_P8_XML
-        help
-            Utilites for building xml and the targeting binary image
-
-config BR2_FIRESTONE_SYSTEM_XML_FILENAME
-        string "Firestone targeting system xml filename"
-        default ""
-        help
-            Defines the name of the system XML filename to be used when creating targeting binary image
-
-config BR2_FIRESTONE_MRW_XML_FILENAME
-        string "Firestone targeting mrw xml filename"
-        default ""
-        help
-            Defines the name of the mrw XML filename to be used when creating targeting binary image
-
-config BR2_FIRESTONE_BIOS_XML_FILENAME
-        string "Firestone BIOS metadata XML filename"
-        default ""
-        help
-            Defines the name of the BIOS XML filename to parse when generating BIOS metadata
diff --git a/openpower/package/firestone-xml/firestone.mk b/openpower/package/firestone-xml/firestone.mk
deleted file mode 100644
index 4a2a55e..0000000
--- a/openpower/package/firestone-xml/firestone.mk
+++ /dev/null
@@ -1,75 +0,0 @@
-################################################################################
-#
-# firestone_xml
-#
-################################################################################
-
-FIRESTONE_XML_VERSION ?= 2494a430656504d014780000adbc2c2e7cfc54ab
-FIRESTONE_XML_SITE ?= $(call github,open-power,firestone-xml,$(FIRESTONE_XML_VERSION))
-
-FIRESTONE_XML_LICENSE = Apache-2.0
-FIRESTONE_XML_DEPENDENCIES = hostboot openpower-mrw common-p8-xml
-
-FIRESTONE_XML_INSTALL_IMAGES = YES
-FIRESTONE_XML_INSTALL_TARGET = YES
-
-MRW_SCRATCH=$(STAGING_DIR)/openpower_mrw_scratch
-MRW_HB_TOOLS=$(STAGING_DIR)/hostboot_build_images
-
-# Defines for BIOS metadata creation
-BIOS_SCHEMA_FILE = $(MRW_HB_TOOLS)/bios.xsd
-FIRESTONE_BIOS_XML_CONFIG_FILE = $(MRW_SCRATCH)/$(BR2_FIRESTONE_BIOS_XML_FILENAME)
-BIOS_XML_METADATA_FILE = \
-    $(MRW_HB_TOOLS)/$(BR2_OPENPOWER_CONFIG_NAME)_bios_metadata.xml
-PETITBOOT_XSLT_FILE = $(MRW_HB_TOOLS)/bios_metadata_petitboot.xslt
-PETITBOOT_BIOS_XML_METADATA_FILE = \
-    $(MRW_HB_TOOLS)/$(BR2_OPENPOWER_CONFIG_NAME)_bios_metadata_petitboot.xml
-PETITBOOT_BIOS_XML_METADATA_INITRAMFS_FILE = \
-    $(TARGET_DIR)/usr/share/bios_metadata.xml
-
-define FIRESTONE_XML_BUILD_CMDS
-        # copy the firestone xml where the common lives
-        bash -c 'mkdir -p $(MRW_SCRATCH) && cp -r $(@D)/* $(MRW_SCRATCH)'
-
-        # generate the system mrw xml
-        perl -I $(MRW_HB_TOOLS) \
-        $(MRW_HB_TOOLS)/processMrw.pl -x $(MRW_SCRATCH)/firestone.xml
-        
-        # merge in any system specific attributes, hostboot attributes
-        $(MRW_HB_TOOLS)/mergexml.sh $(MRW_SCRATCH)/$(BR2_FIRESTONE_SYSTEM_XML_FILENAME) \
-            $(MRW_HB_TOOLS)/attribute_types.xml \
-            $(MRW_HB_TOOLS)/attribute_types_hb.xml \
-            $(MRW_HB_TOOLS)/target_types_merged.xml \
-            $(MRW_HB_TOOLS)/target_types_hb.xml \
-            $(MRW_SCRATCH)/$(BR2_FIRESTONE_MRW_XML_FILENAME) > $(MRW_HB_TOOLS)/temporary_hb.hb.xml;
-
-        # creating the targeting binary
-        $(MRW_HB_TOOLS)/xmltohb.pl  \
-            --hb-xml-file=$(MRW_HB_TOOLS)/temporary_hb.hb.xml \
-            --fapi-attributes-xml-file=$(MRW_HB_TOOLS)/fapiattrs.xml \
-            --src-output-dir=none \
-            --img-output-dir=$(MRW_HB_TOOLS)/ \
-            --vmm-consts-file=$(MRW_HB_TOOLS)/vmmconst.h --noshort-enums \
-            --bios-xml-file=$(FIRESTONE_BIOS_XML_CONFIG_FILE) \
-            --bios-schema-file=$(BIOS_SCHEMA_FILE) \
-            --bios-output-file=$(BIOS_XML_METADATA_FILE)
-
-        # Transform BIOS XML into Petitboot specific BIOS XML via the schema
-        xsltproc -o \
-            $(PETITBOOT_BIOS_XML_METADATA_FILE) \
-            $(PETITBOOT_XSLT_FILE) \
-            $(BIOS_XML_METADATA_FILE)
-endef
-
-define FIRESTONE_XML_INSTALL_IMAGES_CMDS
-        mv $(MRW_HB_TOOLS)/targeting.bin $(MRW_HB_TOOLS)/$(BR2_OPENPOWER_TARGETING_BIN_FILENAME)
-endef
-
-define FIRESTONE_XML_INSTALL_TARGET_CMDS
-        # Install Petitboot specific BIOS XML into initramfs's usr/share/ dir
-        $(INSTALL) -D -m 0644 \
-            $(PETITBOOT_BIOS_XML_METADATA_FILE) \
-            $(PETITBOOT_BIOS_XML_METADATA_INITRAMFS_FILE)
-endef
-
-$(eval $(generic-package))
diff --git a/openpower/package/garrison-xml/Config.in b/openpower/package/garrison-xml/Config.in
deleted file mode 100755
index a71a2c8..0000000
--- a/openpower/package/garrison-xml/Config.in
+++ /dev/null
@@ -1,24 +0,0 @@
-config BR2_PACKAGE_GARRISON_XML
-        bool "garrison_xml"
-        default y if (BR2_OPENPOWER_CONFIG_NAME = "garrison")
-        select BR2_PACKAGE_COMMON_P8_XML
-        help
-            Utilites for building xml and the targeting binary image
-
-config BR2_GARRISON_SYSTEM_XML_FILENAME
-        string "Garrison targeting system xml filename"
-        default ""
-        help
-            Defines the name of the system XML filename to be used when creating targeting binary image
-
-config BR2_GARRISON_MRW_XML_FILENAME
-        string "Garrison targeting mrw xml filename"
-        default ""
-        help
-            Defines the name of the mrw XML filename to be used when creating targeting binary image
-
-config BR2_GARRISON_BIOS_XML_FILENAME
-        string "Garrison BIOS metadata XML filename"
-        default ""
-        help
-            Defines the name of the BIOS XML filename to parse when generating BIOS metadata
diff --git a/openpower/package/garrison-xml/garrison.mk b/openpower/package/garrison-xml/garrison.mk
deleted file mode 100644
index 1e152ce..0000000
--- a/openpower/package/garrison-xml/garrison.mk
+++ /dev/null
@@ -1,75 +0,0 @@
-################################################################################
-#
-# garrison_xml
-#
-################################################################################
-
-GARRISON_XML_VERSION ?= 19a516499e1090c20c5a3303db256529ef22c1c9
-GARRISON_XML_SITE ?= $(call github,open-power,garrison-xml,$(GARRISON_XML_VERSION))
-
-GARRISON_XML_LICENSE = Apache-2.0
-GARRISON_XML_DEPENDENCIES = hostboot openpower-mrw common-p8-xml
-
-GARRISON_XML_INSTALL_IMAGES = YES
-GARRISON_XML_INSTALL_TARGET = YES
-
-MRW_SCRATCH=$(STAGING_DIR)/openpower_mrw_scratch
-MRW_HB_TOOLS=$(STAGING_DIR)/hostboot_build_images
-
-# Defines for BIOS metadata creation
-BIOS_SCHEMA_FILE = $(MRW_HB_TOOLS)/bios.xsd
-GARRISON_BIOS_XML_CONFIG_FILE = $(MRW_SCRATCH)/$(BR2_GARRISON_BIOS_XML_FILENAME)
-BIOS_XML_METADATA_FILE = \
-    $(MRW_HB_TOOLS)/$(BR2_OPENPOWER_CONFIG_NAME)_bios_metadata.xml
-PETITBOOT_XSLT_FILE = $(MRW_HB_TOOLS)/bios_metadata_petitboot.xslt
-PETITBOOT_BIOS_XML_METADATA_FILE = \
-    $(MRW_HB_TOOLS)/$(BR2_OPENPOWER_CONFIG_NAME)_bios_metadata_petitboot.xml
-PETITBOOT_BIOS_XML_METADATA_INITRAMFS_FILE = \
-    $(TARGET_DIR)/usr/share/bios_metadata.xml
-
-define GARRISON_XML_BUILD_CMDS
-        # copy the garrison xml where the common lives
-        bash -c 'mkdir -p $(MRW_SCRATCH) && cp -r $(@D)/* $(MRW_SCRATCH)'
-
-        # generate the system mrw xml
-        perl -I $(MRW_HB_TOOLS) \
-        $(MRW_HB_TOOLS)/processMrw.pl -x $(MRW_SCRATCH)/garrison.xml
-        
-        # merge in any system specific attributes, hostboot attributes
-        $(MRW_HB_TOOLS)/mergexml.sh $(MRW_SCRATCH)/$(BR2_GARRISON_SYSTEM_XML_FILENAME) \
-            $(MRW_HB_TOOLS)/attribute_types.xml \
-            $(MRW_HB_TOOLS)/attribute_types_hb.xml \
-            $(MRW_HB_TOOLS)/target_types_merged.xml \
-            $(MRW_HB_TOOLS)/target_types_hb.xml \
-            $(MRW_SCRATCH)/$(BR2_GARRISON_MRW_XML_FILENAME) > $(MRW_HB_TOOLS)/temporary_hb.hb.xml;
-
-        # creating the targeting binary
-        $(MRW_HB_TOOLS)/xmltohb.pl  \
-            --hb-xml-file=$(MRW_HB_TOOLS)/temporary_hb.hb.xml \
-            --fapi-attributes-xml-file=$(MRW_HB_TOOLS)/fapiattrs.xml \
-            --src-output-dir=none \
-            --img-output-dir=$(MRW_HB_TOOLS)/ \
-            --vmm-consts-file=$(MRW_HB_TOOLS)/vmmconst.h --noshort-enums \
-            --bios-xml-file=$(GARRISON_BIOS_XML_CONFIG_FILE) \
-            --bios-schema-file=$(BIOS_SCHEMA_FILE) \
-            --bios-output-file=$(BIOS_XML_METADATA_FILE)
-
-        # Transform BIOS XML into Petitboot specific BIOS XML via the schema
-        xsltproc -o \
-            $(PETITBOOT_BIOS_XML_METADATA_FILE) \
-            $(PETITBOOT_XSLT_FILE) \
-            $(BIOS_XML_METADATA_FILE)
-endef
-
-define GARRISON_XML_INSTALL_IMAGES_CMDS
-        mv $(MRW_HB_TOOLS)/targeting.bin $(MRW_HB_TOOLS)/$(BR2_OPENPOWER_TARGETING_BIN_FILENAME)
-endef
-
-define GARRISON_XML_INSTALL_TARGET_CMDS
-        # Install Petitboot specific BIOS XML into initramfs's usr/share/ dir
-        $(INSTALL) -D -m 0644 \
-            $(PETITBOOT_BIOS_XML_METADATA_FILE) \
-            $(PETITBOOT_BIOS_XML_METADATA_INITRAMFS_FILE)
-endef
-
-$(eval $(generic-package))
diff --git a/openpower/package/habanero-xml/Config.in b/openpower/package/habanero-xml/Config.in
deleted file mode 100755
index 02420ce..0000000
--- a/openpower/package/habanero-xml/Config.in
+++ /dev/null
@@ -1,24 +0,0 @@
-config BR2_PACKAGE_HABANERO_XML
-        bool "habanero_xml"
-        default y if (BR2_OPENPOWER_CONFIG_NAME = "habanero")
-        select BR2_PACKAGE_COMMON_P8_XML
-        help
-            Utilites for building xml and the targeting binary image
-
-config BR2_HABANERO_SYSTEM_XML_FILENAME
-        string "Habanero targeting system xml filename"
-        default ""
-        help
-            Defines the name of the system XML filename to be used when creating targeting binary image
-
-config BR2_HABANERO_MRW_XML_FILENAME
-        string "Habanero targeting mrw xml filename"
-        default ""
-        help
-            Defines the name of the mrw XML filename to be used when creating targeting binary image
-            
-config BR2_HABANERO_BIOS_XML_FILENAME
-        string "Habanero BIOS metadata XML filename"
-        default ""
-        help
-            Defines the name of the BIOS XML filename to parse when generating BIOS metadata
diff --git a/openpower/package/habanero-xml/habanero-xml.mk b/openpower/package/habanero-xml/habanero-xml.mk
deleted file mode 100644
index 66f2791..0000000
--- a/openpower/package/habanero-xml/habanero-xml.mk
+++ /dev/null
@@ -1,78 +0,0 @@
-################################################################################
-#
-# habanero_xml
-#
-################################################################################
-
-HABANERO_XML_VERSION ?= 6a78496c286e284719a8201148a5088030b897de
-HABANERO_XML_SITE ?= $(call github,open-power,habanero-xml,$(HABANERO_XML_VERSION))
-
-HABANERO_XML_LICENSE = Apache-2.0
-HABANERO_XML_LICENSE_FILES = LICENSE
-HABANERO_XML_DEPENDENCIES = hostboot openpower-mrw common-p8-xml
-
-HABANERO_XML_INSTALL_IMAGES = YES
-HABANERO_XML_INSTALL_TARGET = YES
-
-MRW_SCRATCH=$(STAGING_DIR)/openpower_mrw_scratch
-MRW_HB_TOOLS=$(STAGING_DIR)/hostboot_build_images
-
-# Defines for BIOS metadata creation
-BIOS_SCHEMA_FILE = $(MRW_HB_TOOLS)/bios.xsd
-HABANERO_BIOS_XML_CONFIG_FILE = $(MRW_SCRATCH)/$(BR2_HABANERO_BIOS_XML_FILENAME)
-BIOS_XML_METADATA_FILE = \
-    $(MRW_HB_TOOLS)/$(BR2_OPENPOWER_CONFIG_NAME)_bios_metadata.xml
-PETITBOOT_XSLT_FILE = $(MRW_HB_TOOLS)/bios_metadata_petitboot.xslt
-PETITBOOT_BIOS_XML_METADATA_FILE = \
-    $(MRW_HB_TOOLS)/$(BR2_OPENPOWER_CONFIG_NAME)_bios_metadata_petitboot.xml
-PETITBOOT_BIOS_XML_METADATA_INITRAMFS_FILE = \
-    $(TARGET_DIR)/usr/share/bios_metadata.xml
-
-define HABANERO_XML_BUILD_CMDS
-        # copy the habanero xml where the common lives
-        bash -c 'mkdir -p $(MRW_SCRATCH) && cp -r $(@D)/* $(MRW_SCRATCH)'
-
-        # generate the system mrw xml
-        perl -I $(MRW_HB_TOOLS) \
-        $(MRW_HB_TOOLS)/processMrw.pl -x $(MRW_SCRATCH)/habanero.xml
-        
-        # merge in any system specific attributes, hostboot attributes
-        $(MRW_HB_TOOLS)/mergexml.sh $(MRW_SCRATCH)/$(BR2_HABANERO_SYSTEM_XML_FILENAME) \
-            $(MRW_HB_TOOLS)/attribute_types.xml \
-            $(MRW_HB_TOOLS)/attribute_types_hb.xml \
-            $(MRW_HB_TOOLS)/attribute_types_openpower.xml \
-            $(MRW_HB_TOOLS)/target_types_merged.xml \
-            $(MRW_HB_TOOLS)/target_types_hb.xml \
-            $(MRW_HB_TOOLS)/target_types_openpower.xml \
-            $(MRW_SCRATCH)/$(BR2_HABANERO_MRW_XML_FILENAME) > $(MRW_HB_TOOLS)/temporary_hb.hb.xml;
-
-        # creating the targeting binary
-        $(MRW_HB_TOOLS)/xmltohb.pl  \
-            --hb-xml-file=$(MRW_HB_TOOLS)/temporary_hb.hb.xml \
-            --fapi-attributes-xml-file=$(MRW_HB_TOOLS)/fapiattrs.xml \
-            --src-output-dir=none \
-            --img-output-dir=$(MRW_HB_TOOLS)/ \
-            --vmm-consts-file=$(MRW_HB_TOOLS)/vmmconst.h --noshort-enums \
-            --bios-xml-file=$(HABANERO_BIOS_XML_CONFIG_FILE) \
-            --bios-schema-file=$(BIOS_SCHEMA_FILE) \
-            --bios-output-file=$(BIOS_XML_METADATA_FILE)
-
-        # Transform BIOS XML into Petitboot specific BIOS XML via the schema
-        xsltproc -o \
-            $(PETITBOOT_BIOS_XML_METADATA_FILE) \
-            $(PETITBOOT_XSLT_FILE) \
-            $(BIOS_XML_METADATA_FILE)
-endef
-
-define HABANERO_XML_INSTALL_IMAGES_CMDS
-        mv $(MRW_HB_TOOLS)/targeting.bin $(MRW_HB_TOOLS)/$(BR2_OPENPOWER_TARGETING_BIN_FILENAME)
-endef
-
-define HABANERO_XML_INSTALL_TARGET_CMDS
-        # Install Petitboot specific BIOS XML into initramfs's usr/share/ dir
-        $(INSTALL) -D -m 0644 \
-            $(PETITBOOT_BIOS_XML_METADATA_FILE) \
-            $(PETITBOOT_BIOS_XML_METADATA_INITRAMFS_FILE)
-endef
-
-$(eval $(generic-package))
diff --git a/openpower/package/hostboot-binaries/hostboot_binaries.mk b/openpower/package/hostboot-binaries/hostboot_binaries.mk
index c10f2c2..ef28e87 100644
--- a/openpower/package/hostboot-binaries/hostboot_binaries.mk
+++ b/openpower/package/hostboot-binaries/hostboot_binaries.mk
@@ -4,7 +4,7 @@
 #
 ################################################################################
 
-HOSTBOOT_BINARIES_VERSION ?= 46670e3214d1ec1fbffe06d286b307b25505d149
+HOSTBOOT_BINARIES_VERSION ?= 762912103d3d74be185b1b886063515232070375
 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.mk b/openpower/package/hostboot/hostboot.mk
index a0b5c64..94fb7ef 100644
--- a/openpower/package/hostboot/hostboot.mk
+++ b/openpower/package/hostboot/hostboot.mk
@@ -4,7 +4,7 @@
 #
 ################################################################################
 HOSTBOOT_VERSION_BRANCH_MASTER_P8 ?= 695bd891343faf1f0ef85fe53148590e58239efd
-HOSTBOOT_VERSION_BRANCH_MASTER ?= 3a3d65e1bec528f3ba6b526bdeb843ad379c68fc
+HOSTBOOT_VERSION_BRANCH_MASTER ?= d96098eaf93f873dc859dacb1b91eb95f1c8877a
 
 HOSTBOOT_VERSION ?= $(if $(BR2_OPENPOWER_POWER9),$(HOSTBOOT_VERSION_BRANCH_MASTER),$(HOSTBOOT_VERSION_BRANCH_MASTER_P8))
 HOSTBOOT_SITE ?= $(call github,open-power,hostboot,$(HOSTBOOT_VERSION))
diff --git a/openpower/package/hostboot/p9Patches/hostboot-0002-Only-build-attributeOverride-if-compiler-supports-st.patch b/openpower/package/hostboot/p9Patches/hostboot-0002-Only-build-attributeOverride-if-compiler-supports-st.patch
new file mode 100644
index 0000000..d369874
--- /dev/null
+++ b/openpower/package/hostboot/p9Patches/hostboot-0002-Only-build-attributeOverride-if-compiler-supports-st.patch
@@ -0,0 +1,101 @@
+From 88a9eed95a72e6cbc8956585308599bf07aec70a Mon Sep 17 00:00:00 2001
+From: Stewart Smith <stewart@linux.vnet.ibm.com>
+Date: Mon, 20 Mar 2017 13:31:35 +1100
+Subject: [PATCH] Only build attributeOverride if compiler supports
+ -std=gnu++11
+
+GCC prior to 4.8 doesn't support -std=gnu++11, which the attributeOverride
+tool requires to build.
+
+Since this is only a host side utility, we can not build it if we're
+building hostboot with ancient host compilers (e.g. on RHEL6.x)
+
+Change-Id: I53ad31b56dd90c2cd77f5ca1f91b46e519cdfe48
+Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
+---
+ src/build/mkrules/cc.rules.mk           | 10 +++++++++-
+ src/build/mkrules/dist.targets.mk       |  7 ++++++-
+ src/usr/targeting/attroverride/makefile |  8 +++++++-
+ 3 files changed, 22 insertions(+), 3 deletions(-)
+
+diff --git a/src/build/mkrules/cc.rules.mk b/src/build/mkrules/cc.rules.mk
+index cb00ea001072..c89995f825df 100644
+--- a/src/build/mkrules/cc.rules.mk
++++ b/src/build/mkrules/cc.rules.mk
+@@ -5,7 +5,9 @@
+ #
+ # OpenPOWER HostBoot Project
+ #
+-# COPYRIGHT International Business Machines Corp. 2013,2014
++# Contributors Listed Below - COPYRIGHT 2013,2017
++# [+] International Business Machines Corp.
++#
+ #
+ # Licensed under the Apache License, Version 2.0 (the "License");
+ # you may not use this file except in compliance with the License.
+@@ -74,3 +76,9 @@ $(IMGDIR)/lib$(MODULE).so : $(OBJECTS) $(ROOTPATH)/src/module.ld $(MODULE_INIT)
+ 		   $(OBJECTS) $(MODULE_INIT) \
+ 	           -T $(ROOTPATH)/src/module.ld -o $@
+ endif
++
++try = $(shell set -e; if ($(1)) >/dev/null 2>&1; \
++        then echo "$(2)"; \
++        else echo "$(3)"; fi )
++
++try-cflag = $(call try,$(1) $(2) -x c -c /dev/null -o /dev/null,$(2))
+diff --git a/src/build/mkrules/dist.targets.mk b/src/build/mkrules/dist.targets.mk
+index 2f047bcda0b7..ba6114db9aae 100644
+--- a/src/build/mkrules/dist.targets.mk
++++ b/src/build/mkrules/dist.targets.mk
+@@ -71,7 +71,6 @@ COPY_FILES = \
+     obj/genfiles/targAttrInfo.csv:vpo \
+     obj/genfiles/target_types_merged.xml:openpower \
+     obj/genfiles/fapiattrs.xml:openpower \
+-    obj/genfiles/attributeOverride:tools,openpower \
+     src/usr/targeting/attroverride/README.attr_override:tools,openpower \
+     src/build/hwpf/prcd_compile.tcl:tools \
+     src/build/buildpnor/buildSbePart.pl:openpower \
+@@ -94,6 +93,12 @@ COPY_FILES = \
+     src/usr/targeting/common/xmltohb/bios_metadata_petitboot.xslt:openpower \
+     $(foreach file, $(call ROOTPATH_WILDCARD,releaseNotes.html), $(file):fsp)\
+ 
++ifeq ($(call try-cflag,$(CCACHE) $(HOST_PREFIX)g++,-std=gnu++11),-std=gnu++11)
++COPY_FILES += obj/genfiles/attributeOverride:tools,openpower
++else
++COPY_FILES += obj/genfiles/attributeOverride:tools
++endif
++
+ include ${ROOTPATH}/config.mk
+ COPY_FILES += $(if $(CONFIG_INCLUDE_XML_OPPOWERVM),src/usr/targeting/common/xmltohb/target_types_oppowervm.xml:openpower) \
+     $(if $(CONFIG_INCLUDE_XML_OPPOWERVM),src/usr/targeting/common/xmltohb/attribute_types_oppowervm.xml:openpower) \
+diff --git a/src/usr/targeting/attroverride/makefile b/src/usr/targeting/attroverride/makefile
+index 8ab26fd5009b..d9f0e85b324c 100644
+--- a/src/usr/targeting/attroverride/makefile
++++ b/src/usr/targeting/attroverride/makefile
+@@ -5,7 +5,7 @@
+ #
+ # OpenPOWER HostBoot Project
+ #
+-# Contributors Listed Below - COPYRIGHT 2014,2016
++# Contributors Listed Below - COPYRIGHT 2014,2017
+ # [+] International Business Machines Corp.
+ #
+ #
+@@ -49,8 +49,14 @@ include $(ROOTPATH)/config.mk
+ vpath %.C $(GENDIR)
+ vpath %.H $(GENDIR)
+ 
++ifeq ($(call try-cflag,$(CCACHE) $(HOST_PREFIX)g++,-std=gnu++11),-std=gnu++11)
+ $(OUT_FILE): $(C_FILES) $(H_FILES)
+ 	$(C2) "    CC         $(notdir $@)"
+ 	$(C1)$(CCACHE) $(HOST_PREFIX)g++ -std=gnu++11 -O3 -g -o $(OUT_FILE)\
+ 			$(foreach dir,$(INC_DIRS), -I $(dir)) -iquote.\
+ 			$(foreach file,$^,$(if $(findstring .H,$(file)),,$(file)))
++else
++$(OUT_FILE): $(C_FILES) $(H_FILES)
++	$(C2) "    GEN-NULL   $(notdir $@)"
++	@(echo '#!/bin/sh'; echo 'exit -1';) > $(OUT_FILE)
++endif
+-- 
+2.9.3
+
diff --git a/openpower/package/hostboot/p9Patches/hostboot-0002-remove-attr-override-compile.patch b/openpower/package/hostboot/p9Patches/hostboot-0002-remove-attr-override-compile.patch
deleted file mode 100644
index 6ae8248..0000000
--- a/openpower/package/hostboot/p9Patches/hostboot-0002-remove-attr-override-compile.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From 53bd51536cccbef8d080a92bf4a2b16ca549af3c Mon Sep 17 00:00:00 2001
-From: Matt Ploetz <maploetz@us.ibm.com>
-Date: Tue, 6 Sep 2016 14:08:08 -0500
-Subject: [PATCH] Remove the building and distributuion of attribute override
- tool
-
-Change-Id: Ifbe7eef4152d5c5521aa6f1e2659d30aa46fd525
-RTC:160270
----
- src/build/mkrules/dist.targets.mk | 2 +-
- src/usr/targeting/makefile        | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/build/mkrules/dist.targets.mk b/src/build/mkrules/dist.targets.mk
-index d201570..df08258 100644
---- a/src/build/mkrules/dist.targets.mk
-+++ b/src/build/mkrules/dist.targets.mk
-@@ -70,7 +70,7 @@ COPY_FILES = \
-     obj/genfiles/targAttrInfo.csv:vpo \
-     obj/genfiles/target_types_merged.xml:openpower \
-     obj/genfiles/fapiattrs.xml:openpower \
--    obj/genfiles/attributeOverride:tools,openpower \
-+    obj/genfiles/attributeOverride:tools \
-     src/usr/targeting/attroverride/README.attr_override:tools,openpower \
-     src/build/hwpf/prcd_compile.tcl:tools \
-     src/build/buildpnor/buildSbePart.pl:openpower \
-diff --git a/src/usr/targeting/makefile b/src/usr/targeting/makefile
-index 61dfb0a..c0c31ea 100644
---- a/src/usr/targeting/makefile
-+++ b/src/usr/targeting/makefile
-@@ -65,7 +65,7 @@ OBJS += ${HOSTBOOT_SPECIFIC_OBJS}
- SUBDIRS += test.d
- SUBDIRS += xmltohb.d
- SUBDIRS += runtime.d
--SUBDIRS += attroverride.d
-+#SUBDIRS += attroverride.d
- 
- include ${ROOTPATH}/config.mk
- 
--- 
-1.8.2.2
-
diff --git a/openpower/package/hostboot/p9Patches/hostboot-0003-Revert-ProcessMRW-changes-for-dynamic-i2c-devices.patch b/openpower/package/hostboot/p9Patches/hostboot-0003-Revert-ProcessMRW-changes-for-dynamic-i2c-devices.patch
new file mode 100644
index 0000000..7c097e7
--- /dev/null
+++ b/openpower/package/hostboot/p9Patches/hostboot-0003-Revert-ProcessMRW-changes-for-dynamic-i2c-devices.patch
@@ -0,0 +1,359 @@
+From 7a4142d229ddd0554684664df8d7fa9bd402abc7 Mon Sep 17 00:00:00 2001
+From: Bill Hoffa <wghoffa@us.ibm.com>
+Date: Mon, 8 May 2017 13:03:51 -0500
+Subject: [PATCH] Revert "ProcessMRW changes for dynamic i2c devices"
+
+- Do this temporarily while the attribute dependencies are sorted out
+  (HDAT_I2C_DEVICE_TYPE + HDAT_I2C_DEVICE_PURPOSE)
+
+This reverts commit 651ed35f1c045ea0c52ac659f9c27d757a351877.
+---
+ src/usr/i2c/i2c.C                                  |  12 +-
+ src/usr/targeting/common/Targets.pm                |  16 --
+ src/usr/targeting/common/processMrw.pl             | 190 ---------------------
+ .../common/xmltohb/attribute_types_openpower.xml   |   4 +-
+ .../common/xmltohb/target_types_openpower.xml      |   6 +-
+ 5 files changed, 12 insertions(+), 216 deletions(-)
+
+diff --git a/src/usr/i2c/i2c.C b/src/usr/i2c/i2c.C
+index 3892497..835d9ea 100755
+--- a/src/usr/i2c/i2c.C
++++ b/src/usr/i2c/i2c.C
+@@ -3854,6 +3854,9 @@ void getDeviceInfo( TARGETING::Target* i_i2cMaster,
+                 case EEPROM::VPD_BACKUP:
+                     l_currentDI.devicePurpose =
+                             TARGETING::HDAT_I2C_DEVICE_PURPOSE_MODULE_VPD;
++                    //TODO RTC:165485 this isn't currently right. we'll need
++                    //to add the changes in the enum and possibly the other
++                    //struct/attribute.
+                     break;
+                 case EEPROM::SBE_PRIMARY:
+                 case EEPROM::SBE_BACKUP:
+@@ -3938,8 +3941,8 @@ void getDeviceInfo( TARGETING::Target* i_i2cMaster,
+         TARGETING::ATTR_HDAT_I2C_MASTER_PORT_type l_i2cMasterPort;
+         (*childItr)->tryGetAttr<TARGETING::ATTR_HDAT_I2C_MASTER_PORT>(
+                                                     l_i2cMasterPort);
+-        TARGETING::ATTR_HDAT_I2C_DEVICE_TYPE_type l_i2cDevType;
+-        (*childItr)->tryGetAttr<TARGETING::ATTR_HDAT_I2C_DEVICE_TYPE>(
++        TARGETING::ATTR_HDAT_I2C_DEVTYPE_type l_i2cDevType;
++        (*childItr)->tryGetAttr<TARGETING::ATTR_HDAT_I2C_DEVTYPE>(
+                                                     l_i2cDevType);
+         TARGETING::ATTR_HDAT_I2C_ADDR_type l_i2cAddr;
+         (*childItr)->tryGetAttr<TARGETING::ATTR_HDAT_I2C_ADDR>(l_i2cAddr);
+@@ -3949,8 +3952,8 @@ void getDeviceInfo( TARGETING::Target* i_i2cMaster,
+         TARGETING::ATTR_HDAT_I2C_BUS_FREQ_type l_i2cBusFreq;
+         (*childItr)->tryGetAttr<TARGETING::ATTR_HDAT_I2C_BUS_FREQ>(
+                                                     l_i2cBusFreq);
+-        TARGETING::ATTR_HDAT_I2C_DEVICE_PURPOSE_type l_i2cDevPurpose;
+-        (*childItr)->tryGetAttr<TARGETING::ATTR_HDAT_I2C_DEVICE_PURPOSE>(
++        TARGETING::ATTR_HDAT_I2C_DEV_PURPOSE_type l_i2cDevPurpose;
++        (*childItr)->tryGetAttr<TARGETING::ATTR_HDAT_I2C_DEV_PURPOSE>(
+                                                     l_i2cDevPurpose);
+ 
+         uint8_t l_arrayLength =
+@@ -3966,7 +3969,6 @@ void getDeviceInfo( TARGETING::Target* i_i2cMaster,
+                     l_idx++)
+         {
+             DeviceInfo_t l_currentDevice;
+-            l_currentDevice.masterChip = (*childItr);
+             l_currentDevice.engine = l_i2cEngine[l_idx];
+             l_currentDevice.masterPort = l_i2cMasterPort[l_idx];
+             l_currentDevice.addr = l_i2cAddr[l_idx];
+diff --git a/src/usr/targeting/common/Targets.pm b/src/usr/targeting/common/Targets.pm
+index 44b24bb..9009b4d 100644
+--- a/src/usr/targeting/common/Targets.pm
++++ b/src/usr/targeting/common/Targets.pm
+@@ -1708,18 +1708,6 @@ sub getBusAttribute
+       ->{default};
+ }
+ 
+-## returns a boolean for if a given bus attribute is defined
+-sub isBusAttributeDefined
+-{
+-    my $self       = shift;
+-    my $target     = shift;
+-    my $busnum     = shift;
+-    my $attr       = shift;
+-    my $target_ptr = $self->getTarget($target);
+-
+-    return defined($target_ptr->{CONNECTION}->{BUS}->[$busnum]->{bus_attribute}
+-            ->{$attr}->{default});
+-}
+ 
+ ## returns a pointer to an array of children target names
+ sub getTargetChildren
+@@ -2059,10 +2047,6 @@ to value C<VALUE>.  This is for complex attributes.
+ Gets the attribute C<ATTRIBUTE_NAME> from bus C<TARGET_STRING> bus number
+ C<INDEX>.
+ 
+-=item isBusAttributeDefined(C<TARGET_STRING>,C<INDEX>.C<ATTRIBUTE_NAME>)
+-
+-Looks for a specific attribute and returns if it exists or not
+-
+ =item getTargetChildren(C<TARGET_STRING>)
+ 
+ Returns an array of target strings representing all the children of target
+diff --git a/src/usr/targeting/common/processMrw.pl b/src/usr/targeting/common/processMrw.pl
+index 97d9901..fd6fbad 100644
+--- a/src/usr/targeting/common/processMrw.pl
++++ b/src/usr/targeting/common/processMrw.pl
+@@ -477,15 +477,6 @@ sub processProcessor
+        $targetObj->setMasterProc($target);
+     }
+ 
+-    # I2C arrays
+-    my @engine = ();
+-    my @port = ();
+-    my @slavePort = ();
+-    my @addr = ();
+-    my @speed = ();
+-    my @type = ();
+-    my @purpose = ();
+-
+     $targetObj->log($target, "Processing PROC");
+     foreach my $child (@{ $targetObj->getTargetChildren($target) })
+     {
+@@ -537,58 +528,8 @@ sub processProcessor
+         {
+             processOcc($targetObj, $child, $target);
+         }
+-        # Ideally this should be $child_type eq "I2C", but we need a change
+-        # in serverwiz and the witherspoon.xml first
+-        elsif (index($child,"i2c-master") != -1)
+-        {
+-            my ($i2cEngine, $i2cPort, $i2cSlavePort, $i2cAddr,
+-                $i2cSpeed, $i2cType, $i2cPurpose) =
+-                    processI2C($targetObj, $child, $target);
+-
+-            # Add this I2C device's information to the proc array
+-            push(@engine,@$i2cEngine);
+-            push(@port,@$i2cPort);
+-            push(@slavePort,@$i2cSlavePort);
+-            push(@addr,@$i2cAddr);
+-            push(@speed,@$i2cSpeed);
+-            push(@type,@$i2cType);
+-            push(@purpose,@$i2cPurpose);
+-
+-        }
+     }
+ 
+-    # Add final I2C arrays to processor
+-    my $size         = scalar @engine;
+-    my $engine_attr  = $engine[0];
+-    my $port_attr    = $port[0];
+-    my $slave_attr   = $slavePort[0];
+-    my $addr_attr    = $addr[0];
+-    my $speed_attr   = $speed[0];
+-    my $type_attr    = "0x".$type[0];
+-    my $purpose_attr = "0x".$purpose[0];
+-
+-    # Parse out array to print as a string
+-    foreach my $n (1..($size-1))
+-    {
+-        $engine_attr    .= ",".$engine[$n];
+-        $port_attr      .= ",".$port[$n];
+-        $slave_attr     .= ",".$slavePort[$n];
+-        $addr_attr      .= ",".$addr[$n];
+-        $speed_attr     .= ",".$speed[$n];
+-        $type_attr      .= ",0x".$type[$n];
+-        $purpose_attr   .= ",0x".$purpose[$n];
+-    }
+-
+-    # Set the arrays to the corresponding attribute on the proc
+-    $targetObj->setAttribute($target,"HDAT_I2C_ENGINE",$engine_attr);
+-    $targetObj->setAttribute($target,"HDAT_I2C_MASTER_PORT",$port_attr);
+-    $targetObj->setAttribute($target,"HDAT_I2C_SLAVE_PORT",$slave_attr);
+-    $targetObj->setAttribute($target,"HDAT_I2C_ADDR",$addr_attr);
+-    $targetObj->setAttribute($target,"HDAT_I2C_BUS_FREQ",$speed_attr);
+-    $targetObj->setAttribute($target,"HDAT_I2C_DEVICE_TYPE",$type_attr);
+-    $targetObj->setAttribute($target,"HDAT_I2C_DEVICE_PURPOSE",$purpose_attr);
+-    $targetObj->setAttribute($target,"HDAT_I2C_ELEMENTS",$size);
+-
+     ## update path for mvpd's and sbe's
+     my $path  = $targetObj->getAttribute($target, "PHYS_PATH");
+     my $model = $targetObj->getAttribute($target, "MODEL");
+@@ -1290,137 +1231,6 @@ sub getI2cMapField
+     return $hexfield;
+ }
+ 
+-#------------------------------------------------------------------------------
+-# I2C
+-#
+-sub processI2C
+-{
+-    my $targetObj    = shift; # Top Hierarchy of targeting structure
+-    my $target       = shift; # I2C targetInstance
+-    my $parentTarget = shift; # Processor target
+-
+-    # Initialize output arrays
+-    my @i2cEngine = ();
+-    my @i2cPort = ();
+-    my @i2cSlave = ();
+-    my @i2cAddr = ();
+-    my @i2cSpeed = ();
+-    my @i2cType = ();
+-    my @i2cPurpose = ();
+-
+-    # Step 1: get I2C_ENGINE and PORT from <targetInstance>
+-
+-    my $engine = $targetObj->getAttribute($target, "I2C_ENGINE");
+-    if($engine eq "") {$engine = "0xFF";}
+-
+-    my $port = $targetObj->getAttribute($target, "I2C_PORT");
+-    if($port eq "") {$port = "0xFF";}
+-
+-    # Step 2: get I2C_ADDRESS and I2C_SPEED from <bus>
+-    #         This is different for each connection.
+-
+-    my $i2cs = $targetObj->findConnections($parentTarget, "I2C","");
+-    if ($i2cs ne "")
+-    {
+-        # This gives all i2c connections
+-        foreach my $i2c (@{$i2cs->{CONN}})
+-        {
+-            # Here we are checking that the i2c source matches our target
+-            my $source = $i2c->{SOURCE};
+-            if ($source ne $target)
+-            {
+-                next;
+-            }
+-
+-            # Most I2C devices will default the slave port, it is only valid
+-            # for gpio expanders.
+-            my $slavePort = "0xFF";
+-
+-            my @source_array = split(/-/,$source);
+-            my $source_idx = scalar @source_array;
+-
+-            # If the last part of the source only includes numbers
+-            if($source_array[$source_idx-1] =~ /^[0-9,.E]+$/)
+-            {
+-                $slavePort = $source_array[$source_idx-1];
+-            }
+-
+-            my $addr;
+-            my $speed;
+-            my $type;
+-            my $purpose;
+-
+-            # For all these attributes, we need to check if they're defined,
+-            # and if not we set them to a default value.
+-            if ($targetObj->isBusAttributeDefined(
+-                     $i2c->{SOURCE},$i2c->{BUS_NUM},"I2C_ADDRESS"))
+-            {
+-                $addr = $targetObj->getBusAttribute(
+-                           $i2c->{SOURCE},$i2c->{BUS_NUM},"I2C_ADDRESS");
+-            }
+-
+-            if ($addr eq "") {$addr = "0xFF";}
+-
+-            if ($targetObj->isBusAttributeDefined(
+-                     $i2c->{SOURCE},$i2c->{BUS_NUM},"I2C_SPEED"))
+-            {
+-                $speed = $targetObj->getBusAttribute(
+-                           $i2c->{SOURCE},$i2c->{BUS_NUM},"I2C_SPEED");
+-            }
+-
+-            if ($speed eq "") {$speed = "0";}
+-
+-            if ($targetObj->isBusAttributeDefined(
+-                     $i2c->{SOURCE},$i2c->{BUS_NUM},"I2C_TYPE"))
+-            {
+-                $type = $targetObj->getBusAttribute(
+-                           $i2c->{SOURCE},$i2c->{BUS_NUM},"I2C_TYPE");
+-            }
+-
+-            if ($type eq "")
+-            {
+-                $type = "FF";
+-            }
+-            else
+-            {
+-                $type = $targetObj->getEnumValue("HDAT_I2C_DEVICE_TYPE",$type);
+-            }
+-
+-            if ($targetObj->isBusAttributeDefined(
+-                     $i2c->{SOURCE},$i2c->{BUS_NUM},"I2C_PURPOSE"))
+-            {
+-                $purpose = $targetObj->getBusAttribute(
+-                           $i2c->{SOURCE},$i2c->{BUS_NUM},"I2C_PURPOSE");
+-            }
+-
+-            if ($purpose eq "")
+-            {
+-                $purpose = "FF";
+-            }
+-            else
+-            {
+-                $purpose = $targetObj->getEnumValue("HDAT_I2C_DEVICE_PURPOSE",
+-                                                    $purpose);
+-            }
+-
+-            # Step 3: For each connection, create an instance in the array
+-            #         for the DeviceInfo_t struct.
+-            push @i2cEngine, $engine;
+-            push @i2cPort, $port;
+-            push @i2cSlave, $slavePort;
+-            push @i2cAddr, $addr;
+-            push @i2cSpeed, $speed;
+-            push @i2cType, $type;
+-            push @i2cPurpose, $purpose;
+-
+-        }
+-    }
+-
+-    # Return this i2c device's information back to the processor
+-    return (\@i2cEngine, \@i2cPort, \@i2cSlave, \@i2cAddr,
+-            \@i2cSpeed, \@i2cType, \@i2cPurpose);
+-}
+-
+ 
+ sub setEepromAttributes
+ {
+diff --git a/src/usr/targeting/common/xmltohb/attribute_types_openpower.xml b/src/usr/targeting/common/xmltohb/attribute_types_openpower.xml
+index e40f8eb..841d3d2 100644
+--- a/src/usr/targeting/common/xmltohb/attribute_types_openpower.xml
++++ b/src/usr/targeting/common/xmltohb/attribute_types_openpower.xml
+@@ -191,7 +191,7 @@
+ </attribute>
+ 
+ <attribute>
+-    <id>HDAT_I2C_DEVICE_TYPE</id>
++    <id>HDAT_I2C_DEVTYPE</id>
+     <description>
+         This attribute holds the values of the I2C device type from the i2c
+         device connections as defined in the MRW.  It is parsed into a
+@@ -255,7 +255,7 @@
+ </attribute>
+ 
+ <attribute>
+-    <id>HDAT_I2C_DEVICE_PURPOSE</id>
++    <id>HDAT_I2C_DEV_PURPOSE</id>
+     <description>
+         This attribute holds the values of the I2C device purpose from the i2c
+         device connections as defined in the MRW.  It is parsed into a
+diff --git a/src/usr/targeting/common/xmltohb/target_types_openpower.xml b/src/usr/targeting/common/xmltohb/target_types_openpower.xml
+index 6efbbd1..548c559 100644
+--- a/src/usr/targeting/common/xmltohb/target_types_openpower.xml
++++ b/src/usr/targeting/common/xmltohb/target_types_openpower.xml
+@@ -32,14 +32,14 @@
+      =====================================================================
+  -->
+ <targetTypeExtension>
+-    <id>chip-processor</id>
++    <id>base</id>
+     <attribute><id>HDAT_I2C_ENGINE</id></attribute>
+     <attribute><id>HDAT_I2C_MASTER_PORT</id></attribute>
+-    <attribute><id>HDAT_I2C_DEVICE_TYPE</id></attribute>
++    <attribute><id>HDAT_I2C_DEVTYPE</id></attribute>
+     <attribute><id>HDAT_I2C_ADDR</id></attribute>
+     <attribute><id>HDAT_I2C_SLAVE_PORT</id></attribute>
+     <attribute><id>HDAT_I2C_BUS_FREQ</id></attribute>
+-    <attribute><id>HDAT_I2C_DEVICE_PURPOSE</id></attribute>
++    <attribute><id>HDAT_I2C_DEV_PURPOSE</id></attribute>
+     <attribute><id>HDAT_I2C_ELEMENTS</id></attribute>
+     <attribute>
+         <id>IPMI_INSTANCE</id>
+-- 
+1.8.2.2
+
diff --git a/openpower/package/hostboot/p9Patches/hostboot-0010-Updates-to-HBRT-runtime-interfaces.patch b/openpower/package/hostboot/p9Patches/hostboot-0010-Updates-to-HBRT-runtime-interfaces.patch
new file mode 100644
index 0000000..e2d052f
--- /dev/null
+++ b/openpower/package/hostboot/p9Patches/hostboot-0010-Updates-to-HBRT-runtime-interfaces.patch
@@ -0,0 +1,419 @@
+From 826657215c64a6fba1f8141769af5a93994b4a5d Mon Sep 17 00:00:00 2001
+From: Dan Crowell <dcrowell@us.ibm.com>
+Date: Fri, 12 May 2017 15:40:46 -0500
+Subject: [PATCH] Updates to HBRT runtime interfaces
+
+Reconciling P9 function table with P8 table to make opal-prd
+work.
+
+Added new entries for:
+- firmware_request
+- get_ipoll_events
+- firmware_notify
+
+Added in entries for P8 functions:
+- get_interface_capabilities
+
+Added deprecated placeholders for P8 functions:
+- occ_load
+- occ_start
+- occ_stop
+
+Moved entries for:
+- load_pm_complex
+- start_pm_complex
+- reset_pm_complex
+
+Change-Id: I1892b4465a6e5901aa9eaa6a49e139a4bc4c5b56
+---
+ src/include/runtime/interface.h | 230 +++++++++++++++++++++++++++-------------
+ src/runtime/rt_main.C           |  26 ++++-
+ 2 files changed, 182 insertions(+), 74 deletions(-)
+
+diff --git a/src/include/runtime/interface.h b/src/include/runtime/interface.h
+index aafbbf9..363e50c 100644
+--- a/src/include/runtime/interface.h
++++ b/src/include/runtime/interface.h
+@@ -37,9 +37,9 @@
+  */
+ 
+ /** Current interface version.
+- *  0x9001:  9=P9, 001=Version 1
++ *  0x9001:  9=P9, 002=Version 2
+  */
+-#define HOSTBOOT_RUNTIME_INTERFACE_VERSION 0x9001
++#define HOSTBOOT_RUNTIME_INTERFACE_VERSION 0x9002
+ 
+ #ifndef __HOSTBOOT_RUNTIME_INTERFACE_VERSION_ONLY
+ 
+@@ -53,7 +53,7 @@ enum MemoryError_t
+      *  continues to report errors on subsequent reads. A second CE on that
+      *  cache line will result in memory UE. Therefore, it is advised to
+      *  migrate off of the address range as soon as possible. */
+-    MEMORY_ERROR_CE,
++    MEMORY_ERROR_CE = 0,
+ 
+     /** Hardware has reported an uncorrectable error in memory (memory UE,
+      *  channel failure, etc). The hypervisor should migrate any partitions
+@@ -63,13 +63,13 @@ enum MemoryError_t
+      *  partition failures to handle the hardware attentions so that the
+      *  hypervisor will know all areas of memory that are impacted by the
+      *  failure. */
+-    MEMORY_ERROR_UE,
++    MEMORY_ERROR_UE = 1,
+ 
+     /** Firmware has predictively requested service on a part in the memory
+      *  subsystem. The partitions may not have been affected, but it is
+      *  advised to migrate off of the address range as soon as possible to
+      *  avoid potential partition outages. */
+-    MEMORY_ERROR_PREDICTIVE,
++    MEMORY_ERROR_PREDICTIVE = 2,
+ };
+ 
+ /**
+@@ -130,6 +130,21 @@ enum MemoryError_t
+ #define HBRT_RSVD_MEM__SBE_FFDC           "ibm,sbe-ffdc"
+ 
+ 
++/**
++ * Specifiers for get_interface_capabilities
++ */
++
++/* Common Features */
++#define HBRT_CAPS_SET0_COMMON  0
++
++/* OPAL fixes */
++#define HBRT_CAPS_SET1_OPAL    1
++#define HBRT_CAPS_OPAL_HAS_XSCOM_RC     (1ul << 0)
++
++/* PHYP fixes */
++#define HBRT_CAPS_SET2_PHYP    2
++
++
+ /** @typedef hostInterfaces_t
+  *  @brief Interfaces provided by the underlying environment (ex. Sapphire).
+  *
+@@ -412,6 +427,40 @@ typedef struct hostInterfaces
+                          enum MemoryError_t i_errorType );
+ 
+     /**
++     * @brief Query the HBRT host for a list of fixes/features
++     *
++     * There are times when workarounds need to be put into place to handle
++     * issues with the hosting layer (e.g. opal-prd) while fixes are not yet
++     * released.  This is especially true because of the disconnected release
++     * streams for the firmware and the hosting environment.
++     *
++     * @param  i_set Indicates which set of fixes/features we're checking
++     *               see HBRT_CAPS_SET...
++     *
++     * @return a bitmask containing the relevant flags for the current
++     *         implementation, see HBRT_CAPS_FLAGS_...
++     */
++    uint64_t (*get_interface_capabilities)( uint64_t i_set );
++
++    /**
++     *  @brief Map a physical address space into usable memory
++     *  @note Repeated calls to map the same memory should not return an error
++     *  @param[in]  i_physMem  Physical address
++     *  @param[in]  i_bytes    Number of bytes to map in
++     *  @return NULL on error, else pointer to usable memory
++     *  @platform FSP, OpenPOWER
++     */
++    void* (*map_phys_mem)(uint64_t i_physMem, size_t i_bytes);
++
++    /**
++     *  @brief Unmap a physical address space from usable memory
++     *  @param[in]  i_ptr  Previously mapped pointer
++     *  @return 0 on success, else RC
++     *  @platform FSP, OpenPOWER
++     */
++    int (*unmap_phys_mem)(void* i_ptr);
++
++    /**
+      *  @brief Modify the SCOM restore section of the HCODE image with the
+      *         given register data
+      *
+@@ -441,22 +490,27 @@ typedef struct hostInterfaces
+                               uint64_t i_scomData );
+ 
+     /**
+-     *  @brief Map a physical address space into usable memory
+-     *  @note Repeated calls to map the same memory should not return an error
+-     *  @param[in]  i_physMem  Physical address
+-     *  @param[in]  i_bytes    Number of bytes to map in
+-     *  @return NULL on error, else pointer to usable memory
+-     *  @platform FSP, OpenPOWER
+-     */
+-    void* (*map_phys_mem)(uint64_t i_physMem, size_t i_bytes);
+-
+-    /**
+-     *  @brief Unmap a physical address space from usable memory
+-     *  @param[in]  i_ptr  Previously mapped pointer
+-     *  @return 0 on success, else RC
+-     *  @platform FSP, OpenPOWER
++     * @brief Send a request to firmware, and receive a response
++     * @details
++     *   req_len bytes are sent to runtime firmware, and resp_len
++     *   bytes received in response.
++     *
++     *   Both req and resp are allocated by the caller. If resp_len
++     *   is not large enough to contain the full response, an error
++     *   is returned.
++     *
++     * @param[in]  i_reqLen       length of request data
++     * @param[in]  i_req          request data
++     * @param[inout] o_respLen    in: size of request data buffer
++     *                            out: length of request data
++     * @param[in]  o_resp         response data
++     * @return 0 on success, else RC
++     * @platform FSP, OpenPOWER
+      */
+-    int (*unmap_phys_mem)(void* i_ptr);
++    int (*firmware_request)( uint64_t i_reqLen,
++                             void *i_req,
++                             uint64_t* o_respLen,
++                             void *o_resp );
+ 
+     // Reserve some space for future growth.
+     // do NOT ever change this number, even if you add functions.
+@@ -475,7 +529,7 @@ typedef struct hostInterfaces
+     // allocated with sufficient space and populated with NULL function
+     // pointers.  32 is big enough that we should not likely add that many
+     // functions from either direction in between any two levels of support.
+-    void (*reserved[32])(void);
++    void (*reserved[27])(void);
+ 
+ } hostInterfaces_t;
+ 
+@@ -502,44 +556,11 @@ typedef struct runtimeInterfaces
+     const uint32_t * (*get_lid_list)(size_t * o_num);
+ 
+     /**
+-     *  @brief Load OCC/HCODE images into mainstore
+-     *
+-     *  @param[in] i_chip            the HW chip id (XSCOM chip ID)
+-     *  @param[in] i_homer_addr      the physical mainstore address of the
+-     *                               start of the HOMER image,
+-     *  @param[in] i_occ_common_addr the physical mainstore address of the
+-     *                               OCC common area, 8MB, used for
+-     *                               OCC-OCC communication (1 per node)
+-     *  @param[in] i_mode            selects initial load vs concurrent reloads
+-     *                               HBRT_PM_LOAD:
+-     *                                  load all lids/sections from scratch,
+-     *                                  preserve nothing
+-     *                               HBRT_PM_RELOAD:
+-     *                                  reload all lids/sections,
+-     *                                  but preserve runtime updates
+-     *  @return 0 on success else return code
+-     *  @platform FSP, OpenPOWER
+-     */
+-    int (*load_pm_complex)( uint64_t i_chip,
+-                            uint64_t i_homer_addr,
+-                            uint64_t i_occ_common_addr,
+-                            uint32_t i_mode );
+-
+-    /**
+-     *  @brief Start OCC/HCODE on the specified chip
+-     *  @param[in] i_chip the HW chip id
+-     *  @return 0 on success else return code
+-     *  @platform FSP, OpenPOWER
+-     */
+-    int (*start_pm_complex)( uint64_t i_chip );
+-
+-    /**
+-     *  @brief Reset OCC/HCODE on the specified chip
+-     *  @param[in] i_chip the HW chip id
+-     *  @return 0 on success else return code
+-     *  @platform FSP, OpenPOWER
++     * Space allocated for deprecated P8 interfaces
+      */
+-    int (*reset_pm_complex)( uint64_t i_chip );
++    const uint32_t * (*occ_load__deprecated)(size_t * o_num);
++    const uint32_t * (*occ_start__deprecated)(size_t * o_num);
++    const uint32_t * (*occ_stop__deprecated)(size_t * o_num);
+ 
+     /**
+      *  @brief Notify HTMGT that an OCC has an error to report
+@@ -629,20 +650,20 @@ typedef struct runtimeInterfaces
+     /**
+      *  @brief Send a pass-through command to HTMGT
+      *
+-     *  @details  This is a blocking call that will send a command
+-     *            to HTMGT.
+-     *  @note     If o_rspLength is returned with a non-zero value,
+-     *            the data at the o_rspData should be dumped to
+-     *            stdout in a hex dump format.
+-     *  @note     The maximum response data returned will be 4096 bytes
++     *  @details This is a blocking call that will send a command
++     *           to HTMGT.
++     *  @note   If o_rspLength is returned with a non-zero value,
++     *          the data at the o_rspData should be dumped to
++     *          stdout in a hex dump format.
++     *  @note   The maximum response data returned will be 4096 bytes
+      *
+      *  @param[in]      i_cmdLength  number of bytes in pass-thru command data
+-     *  @param[in]     *i_cmdData    pointer to pass-thru command data
++     *  @param[in]   *i_cmdData   pointer to pass-thru command data
+      *  @param[out]    *o_rspLength  pointer to number of bytes returned
+      *                               in o_rspData
+-     *  @param[out]    *o_rspData    pointer to a 4096 byte buffer that will
++     *  @param[out]    *o_rspData   pointer to a 4096 byte buffer that will
+      *                               contain the response data from the command
+-     *  @returns  0 on success, or return code if the command failed
++     *  @returns 0 on success, or return code if the command failed
+      *  @platform OpenPOWER
+      */
+     int (*mfg_htmgt_pass_thru)( uint16_t   i_cmdLength,
+@@ -691,20 +712,83 @@ typedef struct runtimeInterfaces
+               size_t i_hwKeyHashSize);
+ 
+     /**
+-     *  @brief SBE message passing
++     *  @brief SBE message passing notification
+      *
+-     *  @details  This is a blocking call that will pass an SBE message
+-     *            with a pass-through command through HBRT to code that
+-     *            will process the command and provide a response.
++     *  @details
++     *      This is a blocking call that is used to notify HBRT there is
++     *      a SBE message available.  This should be called when the Host
++     *      detects the appropriate PSU interrupt from the SBE.
+      *
+      *  @param[in] i_procChipId Chip ID of the processor whose SBE is passing
+      *                          the message and sent the interrupt
+      *
+-     *  @returns  0 on success, or return code if the command failed
++     *  @return 0 on success, or return code if the command failed
+      *  @platform FSP, OpenPOWER
+      */
+     int (*sbe_message_passing)(uint32_t i_procChipId);
+ 
++    /**
++     *  @brief Load OCC/HCODE images into mainstore
++     *
++     *  @param[in] i_chip            the HW chip id (XSCOM chip ID)
++     *  @param[in] i_homer_addr      the physical mainstore address of the
++     *                               start of the HOMER image,
++     *  @param[in] i_occ_common_addr the physical mainstore address of the
++     *                               OCC common area, 8MB, used for
++     *                               OCC-OCC communication (1 per node)
++     *  @param[in] i_mode            selects initial load vs concurrent reloads
++     *                               HBRT_PM_LOAD:
++     *                                  load all lids/sections from scratch,
++     *                                  preserve nothing
++     *                               HBRT_PM_RELOAD:
++     *                                  reload all lids/sections,
++     *                                  but preserve runtime updates
++     *  @return 0 on success else return code
++     *  @platform FSP, OpenPOWER
++     */
++    int (*load_pm_complex)( uint64_t i_chip,
++                            uint64_t i_homer_addr,
++                            uint64_t i_occ_common_addr,
++                            uint32_t i_mode );
++
++    /**
++     *  @brief Start OCC/HCODE on the specified chip
++     *  @param[in] i_chip the HW chip id
++     *  @return 0 on success else return code
++     *  @platform FSP, OpenPOWER
++     */
++    int (*start_pm_complex)( uint64_t i_chip );
++
++    /**
++     *  @brief Reset OCC/HCODE on the specified chip
++     *  @param[in] i_chip the HW chip id
++     *  @return 0 on success else return code
++     *  @platform FSP, OpenPOWER
++     */
++    int (*reset_pm_complex)( uint64_t i_chip );
++
++    /**
++     * @brief Query the IPOLL event mask supported by HBRT
++     *
++     * @details  This call allows the wrapper application to query
++     * the ipoll event mask to set when the HBRT instance is running. Bits
++     * that are *set* in this bitmask represent events that will be
++     * forwarded to the handle_attn() callback.
++     *
++     * @return        The IPOLL event bits to enable during HBRT execution
++     * @platform FSP, OpenPOWER
++     */
++    uint64_t (*get_ipoll_events)( void );
++
++    /**
++     * @brief Receive an async notification from firmware
++     * @param[in] i_len   length of notification data
++     * @param[in] i_data  notification data
++     * @platform FSP, OpenPOWER
++     */
++    void (*firmware_notify)( uint64_t len,
++                             void *data );
++
+     // Reserve some space for future growth.
+     // do NOT ever change this number, even if you add functions.
+     //
+@@ -722,7 +806,7 @@ typedef struct runtimeInterfaces
+     // allocated with sufficient space and populated with NULL function
+     // pointers.  32 is big enough that we should not likely add that many
+     // functions from either direction in between any two levels of support.
+-    void (*reserved[32])(void);
++    void (*reserved[22])(void);
+ 
+ } runtimeInterfaces_t;
+ 
+diff --git a/src/runtime/rt_main.C b/src/runtime/rt_main.C
+index d9a21c9..d539018 100644
+--- a/src/runtime/rt_main.C
++++ b/src/runtime/rt_main.C
+@@ -5,7 +5,7 @@
+ /*                                                                        */
+ /* OpenPOWER HostBoot Project                                             */
+ /*                                                                        */
+-/* Contributors Listed Below - COPYRIGHT 2013,2016                        */
++/* Contributors Listed Below - COPYRIGHT 2013,2017                        */
+ /* [+] International Business Machines Corp.                              */
+ /*                                                                        */
+ /*                                                                        */
+@@ -70,6 +70,27 @@ extern "C"
+  */
+ runtimeInterfaces_t* rt_start(hostInterfaces_t*) NEVER_INLINE;
+ 
++
++/** @fn rt_version_fixup
++ *
++ *  @brief Make any adjustments needed to handle old versions
++ */
++void rt_version_fixup( void )
++{
++    uint64_t hostver = g_hostInterfaces->interfaceVersion;
++    if( HOSTBOOT_RUNTIME_INTERFACE_VERSION == hostver )
++    {
++        return; //nothing to do, we match
++    }
++
++    char verstring[100];
++    sprintf( verstring,
++             "HRBT Ver=%X, HostVer=%X\n",
++             HOSTBOOT_RUNTIME_INTERFACE_VERSION,
++             hostver );
++    (g_hostInterfaces->puts)(verstring);
++}
++
+ /** Call C++ constructors present in this image. */
+ void rt_cppBootstrap();
+ 
+@@ -111,6 +132,9 @@ runtimeInterfaces_t* rt_start(hostInterfaces_t* intf)
+     postInitCalls_t* rtPost = getPostInitCalls();
+     rtPost->callApplyTempOverrides();
+ 
++    // do any version mismatch fixups
++    rt_version_fixup();
++
+     // Return our interface pointer structure.
+     return rtInterfaces;
+ }
+-- 
+1.8.2.2
+
diff --git a/openpower/package/hostboot/p9Patches/hostboot-0011-Revert-Handling-of-functional-NX-chiplet.patch b/openpower/package/hostboot/p9Patches/hostboot-0011-Revert-Handling-of-functional-NX-chiplet.patch
new file mode 100644
index 0000000..8d64244
--- /dev/null
+++ b/openpower/package/hostboot/p9Patches/hostboot-0011-Revert-Handling-of-functional-NX-chiplet.patch
@@ -0,0 +1,240 @@
+From 569a650085d4ea7cf87c88ec5542ff31477e8c6d Mon Sep 17 00:00:00 2001
+From: Bill Hoffa <wghoffa@us.ibm.com>
+Date: Fri, 2 Jun 2017 10:32:27 -0500
+Subject: [PATCH] Revert "Handling of functional NX chiplet"
+
+This reverts commit 392272c0247878a832473157e7d2e6023496ca99.
+---
+ src/include/usr/hwas/common/hwas_reasoncodes.H |  1 -
+ src/usr/hwas/common/hwas.C                     | 51 ------------------------
+ src/usr/isteps/istep10/call_host_rng_bist.C    | 53 ++++++-------------------
+ src/usr/isteps/istep16/call_host_secure_rng.C  | 55 +++++++-------------------
+ 4 files changed, 28 insertions(+), 132 deletions(-)
+
+diff --git a/src/include/usr/hwas/common/hwas_reasoncodes.H b/src/include/usr/hwas/common/hwas_reasoncodes.H
+index 1c3a789..667ac6c 100644
+--- a/src/include/usr/hwas/common/hwas_reasoncodes.H
++++ b/src/include/usr/hwas/common/hwas_reasoncodes.H
+@@ -55,7 +55,6 @@ namespace HWAS
+         RC_SYSAVAIL_MISSING_CRITICAL_RESOURCE   = HWAS_COMP_ID | 0x0B,
+         RC_SYSAVAIL_NO_MCAS_FUNC                = HWAS_COMP_ID | 0x0C,
+         RC_SYSAVAIL_NO_MEMORY_FUNC_MASTER       = HWAS_COMP_ID | 0x0D,
+-        RC_SYSAVAIL_NO_NX_FUNC                  = HWAS_COMP_ID | 0x0E,
+     };
+ };
+ 
+diff --git a/src/usr/hwas/common/hwas.C b/src/usr/hwas/common/hwas.C
+index 9908ef8..79d541b 100644
+--- a/src/usr/hwas/common/hwas.C
++++ b/src/usr/hwas/common/hwas.C
+@@ -1881,57 +1881,6 @@ errlHndl_t checkMinimumHardware(const TARGETING::ConstTargetHandle_t i_nodeOrSys
+                 // errl is now NULL
+             }
+         }
+-
+-        // check for functional NX chiplets
+-        TargetHandleList l_functionalNXChiplets;
+-        getChildChiplets(l_functionalNXChiplets, pTop, TYPE_NX, true);
+-        HWAS_DBG( "checkMinimumHardware: %d NX chiplets",
+-                  l_functionalNXChiplets.size());
+-
+-        if (l_functionalNXChiplets.empty())
+-        {
+-            HWAS_ERR( "Insufficient hardware to continue IPL (NX chiplets)");
+-
+-            if(o_bootable)
+-            {
+-                *o_bootable = false;
+-                break;
+-            }
+-            TargetHandleList l_presentNXChiplets;
+-            getChildChiplets(l_presentNXChiplets, pTop, TYPE_NX, false);
+-            uint32_t nx_present = l_presentNXChiplets.size();
+-
+-            /*@
+-             * @errortype
+-             * @severity           ERRL_SEV_UNRECOVERABLE
+-             * @moduleid           MOD_CHECK_MIN_HW
+-             * @reasoncode         RC_SYSAVAIL_NO_NX_FUNC
+-             * @devdesc            checkMinimumHardware found no
+-             *                     functional NX chiplets
+-             * @custdesc           Insufficient hardware to continue IPL
+-             * @userdata1[00:31]   HUID of node
+-             * @userdata2[00:31]   number of present nonfunctional NX chiplets
+-             */
+-            const uint64_t userdata1 =
+-                (static_cast<uint64_t>(get_huid(pTop)) << 32);
+-            const uint64_t userdata2 =
+-                (static_cast<uint64_t>(nx_present) << 32);
+-            l_errl = hwasError(ERRL_SEV_UNRECOVERABLE,
+-                         MOD_CHECK_MIN_HW,
+-                         RC_SYSAVAIL_NO_NX_FUNC,
+-                         userdata1, userdata2);
+-
+-            //  call out the procedure to find the deconfigured part.
+-            hwasErrorAddProcedureCallout( l_errl,
+-                         EPUB_PRC_FIND_DECONFIGURED_PART,
+-                         SRCI_PRIORITY_HIGH );
+-
+-            //  if we already have an error, link this one to the earlier;
+-            //  if not, set the common plid
+-            hwasErrorUpdatePlid( l_errl, l_commonPlid );
+-            errlCommit(l_errl, HWAS_COMP_ID);
+-        }
+-
+         //  ------------------------------------------------------------
+         //  Check for Mirrored memory -
+         //  If the user requests mirrored memory and we do not have it,
+diff --git a/src/usr/isteps/istep10/call_host_rng_bist.C b/src/usr/isteps/istep10/call_host_rng_bist.C
+index 68d2435..b1ccc51 100644
+--- a/src/usr/isteps/istep10/call_host_rng_bist.C
++++ b/src/usr/isteps/istep10/call_host_rng_bist.C
+@@ -42,7 +42,6 @@
+ 
+ #include    <isteps/hwpisteperror.H>
+ #include    <errl/errludtarget.H>
+-#include    <errl/errlreasoncodes.H>
+ 
+ #include    <initservice/isteps_trace.H>
+ #include    <initservice/initserviceif.H>
+@@ -87,49 +86,23 @@ void* call_host_rng_bist( void *io_pArgs )
+     // Loop through all processors including master
+     for (const auto & l_cpu_target: l_cpuTargetList)
+     {
+-        const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>l_fapi2_proc_target(
++      const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>l_fapi2_proc_target(
+                 l_cpu_target);
+-        // Check for functional NX
+-        TARGETING::TargetHandleList l_nxTargetList;
+-        getChildChiplets(l_nxTargetList, l_cpu_target, TYPE_NX, true);
+-        if (l_nxTargetList.empty())
+-        {
+-            TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+-              "p9_rng_init_phase1: no functional NX found for proc %.8X",
+-              TARGETING::get_huid(l_cpu_target));
+-            continue;
+-        }
+-        TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
++
++      TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+           "Running p9_rng_init_phase1 HWP on processor target %.8X",
+           TARGETING::get_huid(l_cpu_target) );
+ 
+-        FAPI_INVOKE_HWP(l_err, p9_rng_init_phase1, l_fapi2_proc_target);
+-        if(l_err)
+-        {
+-            TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
+-                "ERROR: call p9_rng_init_phase1, PLID=0x%x, rc=0x%.4X",
+-                l_err->plid(), l_err->reasonCode());
+-
+-            for (const auto l_callout : l_err->getUDSections(
+-                    HWPF_COMP_ID,
+-                    ERRORLOG::ERRL_UDT_CALLOUT))
+-            {
+-                if(reinterpret_cast<HWAS::callout_ud_t*>
+-                    (l_callout)->type == HWAS::HW_CALLOUT)
+-                {
+-                    for (const auto & l_nxTarget: l_nxTargetList)
+-                    {
+-                        l_err->addHwCallout( l_nxTarget,
+-                            HWAS::SRCI_PRIORITY_HIGH,
+-                            HWAS::DECONFIG,
+-                            HWAS::GARD_NULL );
+-                    }
+-                 }
+-            }
+-
+-            l_StepError.addErrorDetails(l_err);
+-            errlCommit(l_err, HWPF_COMP_ID);
+-        }
++      FAPI_INVOKE_HWP(l_err, p9_rng_init_phase1, l_fapi2_proc_target);
++      if(l_err)
++      {
++          TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
++                    "ERROR: call p9_rng_init_phase1, PLID=0x%x",
++                    l_err->plid());
++          l_StepError.addErrorDetails(l_err);
++          errlCommit(l_err, HWPF_COMP_ID);
++      }
++
+     } // end of going through all processors
+ 
+     TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+diff --git a/src/usr/isteps/istep16/call_host_secure_rng.C b/src/usr/isteps/istep16/call_host_secure_rng.C
+index 9ca7e0f..5a51504 100644
+--- a/src/usr/isteps/istep16/call_host_secure_rng.C
++++ b/src/usr/isteps/istep16/call_host_secure_rng.C
+@@ -45,7 +45,6 @@
+ 
+ #include    <isteps/hwpisteperror.H>
+ #include    <errl/errludtarget.H>
+-#include    <errl/errlreasoncodes.H>
+ 
+ #include    <initservice/isteps_trace.H>
+ #include    <initservice/initserviceif.H>
+@@ -90,47 +89,23 @@ void* call_host_secure_rng( void *io_pArgs )
+     // Loop through all processors including master
+     for (const auto & l_cpu_target: l_cpuTargetList)
+     {
+-        const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>l_fapi2_proc_target(
++      const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>l_fapi2_proc_target(
+                 l_cpu_target);
+ 
+-        // Check for functional NX
+-        TARGETING::TargetHandleList l_nxTargetList;
+-        getChildChiplets(l_nxTargetList, l_cpu_target, TYPE_NX, true);
+-        if (l_nxTargetList.empty())
+-        {
+-            TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+-              "Running host_secure_rng; no functional NX found for proc %.8X",
+-              TARGETING::get_huid(l_cpu_target));
+-            continue;
+-        }
+-
+-        FAPI_INVOKE_HWP(l_err, p9_rng_init_phase2, l_fapi2_proc_target);
+-        if(l_err)
+-        {
+-            TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
+-                "ERROR: call p9_rng_init_phase2, PLID=0x%x, rc=0x%.4X",
+-                l_err->plid(), l_err->reasonCode());
+-
+-            for (const auto l_callout : l_err->getUDSections(
+-                    HWPF_COMP_ID,
+-                    ERRORLOG::ERRL_UDT_CALLOUT))
+-            {
+-                if(reinterpret_cast<HWAS::callout_ud_t*>
+-                    (l_callout)->type == HWAS::HW_CALLOUT)
+-                {
+-                    for (const auto & l_nxTarget: l_nxTargetList)
+-                    {
+-                        l_err->addHwCallout( l_nxTarget,
+-                            HWAS::SRCI_PRIORITY_HIGH,
+-                            HWAS::DECONFIG,
+-                            HWAS::GARD_NULL );
+-                    }
+-                 }
+-            }
+-
+-            l_StepError.addErrorDetails(l_err);
+-            errlCommit(l_err, HWPF_COMP_ID);
+-        }
++      TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
++          "Running host_secure_rng HWP on processor target %.8X",
++          TARGETING::get_huid(l_cpu_target) );
++
++      FAPI_INVOKE_HWP(l_err, p9_rng_init_phase2, l_fapi2_proc_target);
++      if(l_err)
++      {
++          TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
++                    "ERROR: call p9_rng_init_phase2, PLID=0x%x",
++                    l_err->plid());
++          l_StepError.addErrorDetails(l_err);
++          errlCommit(l_err, HWPF_COMP_ID);
++      }
++
+     } // end of going through all processors
+ 
+     TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+-- 
+1.8.2.2
+
diff --git a/openpower/package/ima-catalog/ima-catalog.mk b/openpower/package/ima-catalog/ima-catalog.mk
index 4cdb25f..20b62f2 100644
--- a/openpower/package/ima-catalog/ima-catalog.mk
+++ b/openpower/package/ima-catalog/ima-catalog.mk
@@ -3,7 +3,7 @@
 # ima-catalog.mk
 #
 ################################################################################
-IMA_CATALOG_VERSION ?= 0894c8e392ea5b8ad63860136deff777343685c7
+IMA_CATALOG_VERSION ?= 0e3bbcb56dfc60fd99b862406ecd3e117117d9af
 IMA_CATALOG_SITE ?= $(call github,open-power,ima-catalog,$(IMA_CATALOG_VERSION))
 IMA_CATALOG_LICENSE = Apache-2.0
 IMA_CATALOG_DEPENDENCIES = host-dtc host-xz
diff --git a/openpower/package/machine-xml/Config.in b/openpower/package/machine-xml/Config.in
new file mode 100755
index 0000000..3f2163f
--- /dev/null
+++ b/openpower/package/machine-xml/Config.in
@@ -0,0 +1,63 @@
+config BR2_PACKAGE_MACHINE_XML
+        bool "machine_xml"
+        default y if (BR2_OPENPOWER_PLATFORM)
+        select BR2_PACKAGE_COMMON_P8_XML
+        help
+
+choice
+	prompt "Machine XML location"
+
+config BR2_OPENPOWER_MACHINE_XML_GITHUB_PROJECT
+       bool "OpenPOWER Github project name"
+
+config BR2_OPENPOWER_MACHINE_XML_CUSTOM_GIT
+       bool "Custom URL of machine xml repository"
+
+endchoice
+
+config BR2_OPENPOWER_MACHINE_XML_FILTER_UNWANTED_ATTRIBUTES
+       bool "Filter Unwanted Attributes"
+       default y if (BR2_OPENPOWER_POWER9)
+       default n
+
+config BR2_OPENPOWER_MACHINE_XML_OPPOWERVM_ATTRIBUTES
+       bool "OPPOWERVM Attributes/Target"
+       default y if (BR2_OPENPOWER_POWER9)
+       default n
+
+config BR2_OPENPOWER_MACHINE_XML_TARGET_TYPES_OPENPOWER_XML
+       bool "Include target_types_openpower.xml"
+       default y if (BR2_OPENPOWER_POWER9)
+       default n
+
+config BR2_OPENPOWER_MACHINE_XML_CUSTOM_GIT_VALUE
+	string "URL of machine xml repository"
+	depends on BR2_OPENPOWER_MACHINE_XML_CUSTOM_GIT
+
+config BR2_OPENPOWER_MACHINE_XML_GITHUB_PROJECT_VALUE
+       string "The Github project name (e.g. palmetto-xml)"
+       depends on BR2_OPENPOWER_MACHINE_XML_GITHUB_PROJECT
+
+config BR2_OPENPOWER_MACHINE_XML_VERSION
+       string "Version of Machine XML"
+
+config BR2_OPENPOWER_MACHINE_XML_FILENAME
+       string "Machine XML filename (e.g. habanero.xml)"
+
+config BR2_OPENPOWER_SYSTEM_XML_FILENAME
+        string "Targeting system xml filename"
+        default ""
+        help
+            Defines the name of the system XML filename to be used when creating targeting binary image
+
+config BR2_OPENPOWER_MRW_XML_FILENAME
+        string "Targeting mrw xml filename"
+        default ""
+        help
+            Defines the name of the mrw XML filename to be used when creating targeting binary image
+
+config BR2_OPENPOWER_BIOS_XML_FILENAME
+        string "BIOS metadata XML filename"
+        default ""
+        help
+            Defines the name of the BIOS XML filename to parse when generating BIOS metadata
diff --git a/openpower/package/machine-xml/machine-xml.mk b/openpower/package/machine-xml/machine-xml.mk
new file mode 100644
index 0000000..d8009dd
--- /dev/null
+++ b/openpower/package/machine-xml/machine-xml.mk
@@ -0,0 +1,107 @@
+################################################################################
+# machine_xml
+#
+################################################################################
+
+MACHINE_XML_VERSION ?= $(call qstrip,$(BR2_OPENPOWER_MACHINE_XML_VERSION))
+ifeq ($(BR2_OPENPOWER_MACHINE_XML_GITHUB_PROJECT),y)
+MACHINE_XML_SITE = $(call github,open-power,$(BR2_OPENPOWER_MACHINE_XML_GITHUB_PROJECT_VALUE),$(MACHINE_XML_VERSION))
+else ifeq ($(BR2_OPENPOWER_MACHINE_XML_CUSTOM_GIT),y)
+MACHINE_XML_SITE_METHOD = git
+MACHINE_XML_SITE = $(BR2_OPENPOWER_MACHINE_XML_CUSTOM_GIT_VALUE)
+endif
+
+MACHINE_XML_LICENSE = Apache-2.0
+MACHINE_XML_LICENSE_FILES = LICENSE
+MACHINE_XML_DEPENDENCIES = hostboot openpower-mrw common-p8-xml
+
+MACHINE_XML_INSTALL_IMAGES = YES
+MACHINE_XML_INSTALL_TARGET = YES
+
+MRW_SCRATCH=$(STAGING_DIR)/openpower_mrw_scratch
+MRW_HB_TOOLS=$(STAGING_DIR)/hostboot_build_images
+
+# Defines for BIOS metadata creation
+BIOS_SCHEMA_FILE = $(MRW_HB_TOOLS)/bios.xsd
+OPENPOWER_BIOS_XML_CONFIG_FILE = $(MRW_SCRATCH)/$(BR2_OPENPOWER_BIOS_XML_FILENAME)
+BIOS_XML_METADATA_FILE = \
+    $(MRW_HB_TOOLS)/$(BR2_OPENPOWER_CONFIG_NAME)_bios_metadata.xml
+PETITBOOT_XSLT_FILE = $(MRW_HB_TOOLS)/bios_metadata_petitboot.xslt
+PETITBOOT_BIOS_XML_METADATA_FILE = \
+    $(MRW_HB_TOOLS)/$(BR2_OPENPOWER_CONFIG_NAME)_bios_metadata_petitboot.xml
+PETITBOOT_BIOS_XML_METADATA_INITRAMFS_FILE = \
+    $(TARGET_DIR)/usr/share/bios_metadata.xml
+
+ifeq ($(BR2_OPENPOWER_MACHINE_XML_OPPOWERVM_ATTRIBUTES),y)
+MACHINE_XML_OPPOWERVM_ATTR_XML = $(MRW_HB_TOOLS)/attribute_types_oppowervm.xml
+MACHINE_XML_OPPOWERVM_TARGET_XML = $(MRW_HB_TOOLS)/target_types_oppowervm.xml
+endif
+ifeq ($(BR2_OPENPOWER_MACHINE_XML_TARGET_TYPES_OPENPOWER_XML),y)
+MACHINE_XML_TARGET_TYPES_OPENPOWER_XML = $(MRW_HB_TOOLS)/target_types_openpower.xml
+endif
+
+define MACHINE_XML_FILTER_UNWANTED_ATTRIBUTES
+       chmod +x $(MRW_HB_TOOLS)/filter_out_unwanted_attributes.pl
+
+       $(MRW_HB_TOOLS)/filter_out_unwanted_attributes.pl \
+            --tgt-xml $(MRW_HB_TOOLS)/target_types_merged.xml \
+            --tgt-xml $(MRW_HB_TOOLS)/target_types_hb.xml \
+            --tgt-xml $(MRW_HB_TOOLS)/target_types_oppowervm.xml \
+            --tgt-xml $(MRW_HB_TOOLS)/target_types_openpower.xml \
+            --mrw-xml $(MRW_SCRATCH)/$(BR2_OPENPOWER_MRW_XML_FILENAME)
+
+       cp  $(MRW_SCRATCH)/$(BR2_OPENPOWER_MRW_XML_FILENAME).updated  $(MRW_SCRATCH)/$(BR2_OPENPOWER_MRW_XML_FILENAME)
+endef
+
+define MACHINE_XML_BUILD_CMDS
+        # copy the machine xml where the common lives
+        bash -c 'mkdir -p $(MRW_SCRATCH) && cp -r $(@D)/* $(MRW_SCRATCH)'
+
+        # generate the system mrw xml
+        perl -I $(MRW_HB_TOOLS) \
+        $(MRW_HB_TOOLS)/processMrw.pl -x $(MRW_SCRATCH)/$(BR2_OPENPOWER_MACHINE_XML_FILENAME)
+
+	$(if $(BR2_OPENPOWER_MACHINE_XML_FILTER_UNWANTED_ATTRIBUTES), $(call MACHINE_XML_FILTER_UNWANTED_ATTRIBUTES))
+
+        # merge in any system specific attributes, hostboot attributes
+        $(MRW_HB_TOOLS)/mergexml.sh $(MRW_SCRATCH)/$(BR2_OPENPOWER_SYSTEM_XML_FILENAME) \
+            $(MRW_HB_TOOLS)/attribute_types.xml \
+            $(MRW_HB_TOOLS)/attribute_types_hb.xml \
+            $(MACHINE_XML_OPPOWERVM_ATTR_XML) \
+            $(MRW_HB_TOOLS)/attribute_types_openpower.xml \
+            $(MRW_HB_TOOLS)/target_types_merged.xml \
+            $(MRW_HB_TOOLS)/target_types_hb.xml \
+            $(MACHINE_XML_OPPOWERVM_TARGET_XML) \
+            $(MACHINE_XML_TARGET_TYPES_OPENPOWER_XML) \
+            $(MRW_SCRATCH)/$(BR2_OPENPOWER_MRW_XML_FILENAME) > $(MRW_HB_TOOLS)/temporary_hb.hb.xml;
+
+        # creating the targeting binary
+        $(MRW_HB_TOOLS)/xmltohb.pl  \
+            --hb-xml-file=$(MRW_HB_TOOLS)/temporary_hb.hb.xml \
+            --fapi-attributes-xml-file=$(MRW_HB_TOOLS)/fapiattrs.xml \
+            --src-output-dir=none \
+            --img-output-dir=$(MRW_HB_TOOLS)/ \
+            --vmm-consts-file=$(MRW_HB_TOOLS)/vmmconst.h --noshort-enums \
+            --bios-xml-file=$(OPENPOWER_BIOS_XML_CONFIG_FILE) \
+            --bios-schema-file=$(BIOS_SCHEMA_FILE) \
+            --bios-output-file=$(BIOS_XML_METADATA_FILE)
+
+        # Transform BIOS XML into Petitboot specific BIOS XML via the schema
+        xsltproc -o \
+            $(PETITBOOT_BIOS_XML_METADATA_FILE) \
+            $(PETITBOOT_XSLT_FILE) \
+            $(BIOS_XML_METADATA_FILE)
+endef
+
+define MACHINE_XML_INSTALL_IMAGES_CMDS
+        mv $(MRW_HB_TOOLS)/targeting.bin $(MRW_HB_TOOLS)/$(BR2_OPENPOWER_TARGETING_BIN_FILENAME)
+endef
+
+define MACHINE_XML_INSTALL_TARGET_CMDS
+        # Install Petitboot specific BIOS XML into initramfs's usr/share/ dir
+        $(INSTALL) -D -m 0644 \
+            $(PETITBOOT_BIOS_XML_METADATA_FILE) \
+            $(PETITBOOT_BIOS_XML_METADATA_INITRAMFS_FILE)
+endef
+
+$(eval $(generic-package))
diff --git a/openpower/package/occ/occ.mk b/openpower/package/occ/occ.mk
index 19600b9..14a4d12 100644
--- a/openpower/package/occ/occ.mk
+++ b/openpower/package/occ/occ.mk
@@ -4,8 +4,8 @@
 #
 ################################################################################
 
-OCC_VERSION_BRANCH_MASTER_P8 ?= 301b535a933e0c9c41b0f014677004cc8da2c445
-OCC_VERSION_BRANCH_MASTER ?= e1889e5dfcb4707ac66ab5ee0427ce97156bf4c0
+OCC_VERSION_BRANCH_MASTER_P8 ?= 28f2cec690b7f19548ce860a8820f519e6c39a6a
+OCC_VERSION_BRANCH_MASTER ?= bc34ad5806549a7a20079745b2b1f8ef439ade0c
 
 OCC_VERSION ?= $(if $(BR2_OPENPOWER_POWER9),$(OCC_VERSION_BRANCH_MASTER),$(OCC_VERSION_BRANCH_MASTER_P8))
 OCC_SITE ?= $(call github,open-power,occ,$(OCC_VERSION))
diff --git a/openpower/package/openpower-pnor/Config.in b/openpower/package/openpower-pnor/Config.in
index f0b7f31..a94f72c 100644
--- a/openpower/package/openpower-pnor/Config.in
+++ b/openpower/package/openpower-pnor/Config.in
@@ -8,14 +8,7 @@
         select BR2_PACKAGE_OCC
         select BR2_PACKAGE_CAPP_UCODE
         select BR2_PACKAGE_IMA_CATALOG
-        select BR2_PACKAGE_ZAIUS_XML if (BR2_OPENPOWER_XML_PACKAGE = "zaius-xml")
-        select BR2_PACKAGE_WITHERSPOON_XML if (BR2_OPENPOWER_XML_PACKAGE = "witherspoon-xml")
-        select BR2_PACKAGE_ROMULUS_XML if (BR2_OPENPOWER_XML_PACKAGE = "romulus-xml")
-        select BR2_PACKAGE_BARRELEYE_XML if (BR2_OPENPOWER_XML_PACKAGE = "barreleye-xml")
-        select BR2_PACKAGE_FIRESTONE_XML if (BR2_OPENPOWER_XML_PACKAGE = "firestone-xml")
-        select BR2_PACKAGE_GARRISON_XML if (BR2_OPENPOWER_XML_PACKAGE = "garrison-xml")
-        select BR2_PACKAGE_HABANERO_XML if (BR2_OPENPOWER_XML_PACKAGE = "habanero-xml")
-        select BR2_PACKAGE_PALMETTO_XML if (BR2_OPENPOWER_XML_PACKAGE = "palmetto-xml")
+	select BR2_PACKAGE_MACHINE_XML
         help
             Utilites for building a targeting binary image
 
@@ -29,11 +22,6 @@
         help
             String used to define configuration name
 
-config BR2_OPENPOWER_XML_PACKAGE
-        string "Name of xml/targeting package"
-        help
-            String defines the xml/targeting package used
-
 config BR2_OPENPOWER_PNOR_FILENAME
         string "Name of pnor file to be created"
         help
diff --git a/openpower/package/openpower-pnor/openpower-pnor.mk b/openpower/package/openpower-pnor/openpower-pnor.mk
index 72fcc64..c178223 100644
--- a/openpower/package/openpower-pnor/openpower-pnor.mk
+++ b/openpower/package/openpower-pnor/openpower-pnor.mk
@@ -4,16 +4,12 @@
 #
 ################################################################################
 
-# remove the quotes from the XML/Targeting package as
-# make doesn't care for quotes in the dependencies.
-XML_PACKAGE=$(subst $\",,$(BR2_OPENPOWER_XML_PACKAGE))
-
-OPENPOWER_PNOR_VERSION ?= 52b1b91ea5ea7651688802f72d168139c29c4780
+OPENPOWER_PNOR_VERSION ?= 3ab2d5d3f0c030bd68a4b431ac128004d54f7511
 OPENPOWER_PNOR_SITE ?= $(call github,open-power,pnor,$(OPENPOWER_PNOR_VERSION))
 
 OPENPOWER_PNOR_LICENSE = Apache-2.0
 OPENPOWER_PNOR_LICENSE_FILES = LICENSE
-OPENPOWER_PNOR_DEPENDENCIES = hostboot hostboot-binaries $(XML_PACKAGE) skiboot host-openpower-ffs occ capp-ucode
+OPENPOWER_PNOR_DEPENDENCIES = hostboot hostboot-binaries machine-xml skiboot host-openpower-ffs occ capp-ucode
 
 ifeq ($(BR2_PACKAGE_IMA_CATALOG),y)
 OPENPOWER_PNOR_DEPENDENCIES += ima-catalog
@@ -45,13 +41,19 @@
 
 HOSTBOOT_IMAGE_DIR=$(STAGING_DIR)/hostboot_build_images/
 HOSTBOOT_BINARY_DIR = $(STAGING_DIR)/hostboot_binaries/
+SBE_BINARY_DIR = $(STAGING_DIR)/sbe_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 = skiboot hostboot linux petitboot $(XML_PACKAGE) occ hostboot-binaries capp-ucode
+OPENPOWER_VERSIONED_SUBPACKAGES = skiboot hostboot linux petitboot machine-xml occ hostboot-binaries capp-ucode
 OPENPOWER_PNOR = openpower-pnor
 
+ifeq ($(BR2_OPENPOWER_POWER9),y)
+    OPENPOWER_PNOR_DEPENDENCIES += sbe
+    OPENPOWER_VERSIONED_SUBPACKAGES += sbe
+endif
+
 define OPENPOWER_PNOR_INSTALL_IMAGES_CMDS
         mkdir -p $(OPENPOWER_PNOR_SCRATCH_DIR)
 
@@ -64,6 +66,7 @@
             -targeting_binary_filename $(BR2_OPENPOWER_TARGETING_ECC_FILENAME) \
             -targeting_binary_source $(BR2_OPENPOWER_TARGETING_BIN_FILENAME) \
             -sbe_binary_filename $(BR2_HOSTBOOT_BINARY_SBE_FILENAME) \
+            -sbe_binary_dir $(SBE_BINARY_DIR) \
             -sbec_binary_filename $(BR2_HOSTBOOT_BINARY_SBEC_FILENAME) \
             -wink_binary_filename $(BR2_HOSTBOOT_BINARY_WINK_FILENAME) \
             -occ_binary_filename $(OCC_STAGING_DIR)/$(BR2_OCC_BIN_FILENAME) \
diff --git a/openpower/package/palmetto-xml/Config.in b/openpower/package/palmetto-xml/Config.in
deleted file mode 100755
index 05a094f..0000000
--- a/openpower/package/palmetto-xml/Config.in
+++ /dev/null
@@ -1,24 +0,0 @@
-config BR2_PACKAGE_PALMETTO_XML
-        bool "palmetto_xml"
-        default y if (BR2_OPENPOWER_CONFIG_NAME = "palmetto")
-        select BR2_PACKAGE_COMMON_P8_XML
-        help
-            Utilites for building xml and the targeting binary image
-
-config BR2_PALMETTO_SYSTEM_XML_FILENAME
-        string "Palmetto targeting system xml filename"
-        default ""
-        help
-            Defines the name of the system XML filename to be used when creating targeting binary image
-
-config BR2_PALMETTO_MRW_XML_FILENAME
-        string "Palmetto targeting mrw xml filename"
-        default ""
-        help
-            Defines the name of the mrw XML filename to be used when creating targeting binary image
-
-config BR2_PALMETTO_BIOS_XML_FILENAME
-        string "Palmetto BIOS metadata XML filename"
-        default ""
-        help
-            Defines the name of the BIOS XML filename to parse when generating BIOS metadata
diff --git a/openpower/package/palmetto-xml/palmetto-xml.mk b/openpower/package/palmetto-xml/palmetto-xml.mk
deleted file mode 100644
index 7cc554d..0000000
--- a/openpower/package/palmetto-xml/palmetto-xml.mk
+++ /dev/null
@@ -1,75 +0,0 @@
-################################################################################
-#
-# palmetto_xml
-#
-################################################################################
-
-PALMETTO_XML_VERSION ?= c6f563966e9fadc4fb60194c064b2310c9b916b1
-PALMETTO_XML_SITE = $(call github,open-power,palmetto-xml,$(PALMETTO_XML_VERSION))
-
-PALMETTO_XML_LICENSE = Apache-2.0
-PALMETTO_XML_DEPENDENCIES = hostboot openpower-mrw common-p8-xml
-
-PALMETTO_XML_INSTALL_IMAGES = YES
-PALMETTO_XML_INSTALL_TARGET = YES
-
-MRW_SCRATCH=$(STAGING_DIR)/openpower_mrw_scratch
-MRW_HB_TOOLS=$(STAGING_DIR)/hostboot_build_images
-
-# Defines for BIOS metadata creation
-BIOS_SCHEMA_FILE = $(MRW_HB_TOOLS)/bios.xsd
-PALMETTO_BIOS_XML_CONFIG_FILE = $(MRW_SCRATCH)/$(BR2_PALMETTO_BIOS_XML_FILENAME)
-BIOS_XML_METADATA_FILE = \
-    $(MRW_HB_TOOLS)/$(BR2_OPENPOWER_CONFIG_NAME)_bios_metadata.xml
-PETITBOOT_XSLT_FILE = $(MRW_HB_TOOLS)/bios_metadata_petitboot.xslt
-PETITBOOT_BIOS_XML_METADATA_FILE = \
-    $(MRW_HB_TOOLS)/$(BR2_OPENPOWER_CONFIG_NAME)_bios_metadata_petitboot.xml
-PETITBOOT_BIOS_XML_METADATA_INITRAMFS_FILE = \
-    $(TARGET_DIR)/usr/share/bios_metadata.xml
-
-define PALMETTO_XML_BUILD_CMDS
-        # copy the palmetto xml where the common lives
-        bash -c 'mkdir -p $(MRW_SCRATCH) && cp -r $(@D)/* $(MRW_SCRATCH)'
-
-        # generate the system mrw xml
-        perl -I $(MRW_HB_TOOLS) \
-        $(MRW_HB_TOOLS)/processMrw.pl -x $(MRW_SCRATCH)/palmetto.xml
-        
-        # merge in any system specific attributes, hostboot attributes
-        $(MRW_HB_TOOLS)/mergexml.sh $(MRW_SCRATCH)/$(BR2_PALMETTO_SYSTEM_XML_FILENAME) \
-            $(MRW_HB_TOOLS)/attribute_types.xml \
-            $(MRW_HB_TOOLS)/attribute_types_hb.xml \
-            $(MRW_HB_TOOLS)/target_types_merged.xml \
-            $(MRW_HB_TOOLS)/target_types_hb.xml \
-            $(MRW_SCRATCH)/$(BR2_PALMETTO_MRW_XML_FILENAME) > $(MRW_HB_TOOLS)/temporary_hb.hb.xml;
-
-        # creating the targeting binary
-        $(MRW_HB_TOOLS)/xmltohb.pl  \
-            --hb-xml-file=$(MRW_HB_TOOLS)/temporary_hb.hb.xml \
-            --fapi-attributes-xml-file=$(MRW_HB_TOOLS)/fapiattrs.xml \
-            --src-output-dir=none \
-            --img-output-dir=$(MRW_HB_TOOLS)/ \
-            --vmm-consts-file=$(MRW_HB_TOOLS)/vmmconst.h --noshort-enums \
-            --bios-xml-file=$(PALMETTO_BIOS_XML_CONFIG_FILE) \
-            --bios-schema-file=$(BIOS_SCHEMA_FILE) \
-            --bios-output-file=$(BIOS_XML_METADATA_FILE)
-
-        # Transform BIOS XML into Petitboot specific BIOS XML via the schema
-        xsltproc -o \
-            $(PETITBOOT_BIOS_XML_METADATA_FILE) \
-            $(PETITBOOT_XSLT_FILE) \
-            $(BIOS_XML_METADATA_FILE)
-endef
-
-define PALMETTO_XML_INSTALL_IMAGES_CMDS
-        mv $(MRW_HB_TOOLS)/targeting.bin $(MRW_HB_TOOLS)/$(BR2_OPENPOWER_TARGETING_BIN_FILENAME)
-endef
-
-define PALMETTO_XML_INSTALL_TARGET_CMDS
-        # Install Petitboot specific BIOS XML into initramfs's usr/share/ dir
-        $(INSTALL) -D -m 0644 \
-            $(PETITBOOT_BIOS_XML_METADATA_FILE) \
-            $(PETITBOOT_BIOS_XML_METADATA_INITRAMFS_FILE)
-endef
-
-$(eval $(generic-package))
diff --git a/openpower/package/petitboot/66-add-sg-module.rules b/openpower/package/petitboot/66-add-sg-module.rules
new file mode 100644
index 0000000..ae18d28
--- /dev/null
+++ b/openpower/package/petitboot/66-add-sg-module.rules
@@ -0,0 +1,2 @@
+# load modules to scsi disks, if they aren't in kernel
+SUBSYSTEM=="scsi", ENV{DEVTYPE}=="scsi_device", TEST!="[module/sg]", RUN+="/sbin/modprobe sg"
diff --git a/openpower/package/petitboot/petitboot.mk b/openpower/package/petitboot/petitboot.mk
index 5d28fc7..ba7276b 100644
--- a/openpower/package/petitboot/petitboot.mk
+++ b/openpower/package/petitboot/petitboot.mk
@@ -44,8 +44,6 @@
 	$(INSTALL) -d -m 0755 $(TARGET_DIR)/etc/petitboot/boot.d
 	$(INSTALL) -D -m 0755 $(@D)/utils/hooks/01-create-default-dtb \
 		$(TARGET_DIR)/etc/petitboot/boot.d/
-	$(INSTALL) -D -m 0755 $(@D)/utils/hooks/30-dtb-updates \
-		$(TARGET_DIR)/etc/petitboot/boot.d/
 	$(INSTALL) -D -m 0755 $(@D)/utils/hooks/90-sort-dtb \
 		$(TARGET_DIR)/etc/petitboot/boot.d/
 
@@ -63,6 +61,8 @@
 		$(TARGET_DIR)/etc/udev/rules.d/
 	$(INSTALL) -D -m 0755 $(BR2_EXTERNAL_OP_BUILD_PATH)/package/petitboot/65-md-incremental.rules \
 		$(TARGET_DIR)/etc/udev/rules.d/
+	$(INSTALL) -D -m 0755 $(BR2_EXTERNAL)/package/petitboot/66-add-sg-module.rules \
+		$(TARGET_DIR)/etc/udev/rules.d/
 
 	ln -sf /usr/sbin/pb-udhcpc \
 		$(TARGET_DIR)/usr/share/udhcpc/default.script.d/
@@ -72,6 +72,15 @@
 	$(MAKE) -C $(@D)/po DESTDIR=$(TARGET_DIR) install
 endef
 
+define PETITBOOT_POST_INSTALL_DTB
+	$(INSTALL) -D -m 0755 $(@D)/utils/hooks/30-dtb-updates \
+		$(TARGET_DIR)/etc/petitboot/boot.d/
+endef
+
 PETITBOOT_POST_INSTALL_TARGET_HOOKS += PETITBOOT_POST_INSTALL
 
+ifeq ($(BR2_PACKAGE_DTC),y)
+	PETITBOOT_POST_INSTALL_TARGET_HOOKS += PETITBOOT_POST_INSTALL_DTB
+endif
+
 $(eval $(autotools-package))
diff --git a/openpower/package/ppe42-gcc/ppe42-gcc.mk b/openpower/package/ppe42-gcc/ppe42-gcc.mk
index ec10e4f..bfaf608 100644
--- a/openpower/package/ppe42-gcc/ppe42-gcc.mk
+++ b/openpower/package/ppe42-gcc/ppe42-gcc.mk
@@ -8,8 +8,8 @@
 PPE42_GCC_SITE ?= $(call github,open-power,ppe42-gcc,$(PPE42_GCC_VERSION))
 PPE42_GCC_LICENSE = GPLv3+
 
-PPE42_GCC_DEPENDENCIES = ppe42-binutils
-HOST_PPE42_GCC_DEPENDENCIES = host-ppe42-binutils
+PPE42_GCC_DEPENDENCIES = ppe42-binutils gmp mpfr mpc
+HOST_PPE42_GCC_DEPENDENCIES = host-ppe42-binutils host-gmp host-mpfr host-mpc
 
 PPE42_GCC_DIR = $(STAGING_DIR)/ppe42-binutils
 PPE42_GCC_BIN = $(STAGING_DIR)/ppe42-binutils/linux
diff --git a/openpower/package/romulus-xml/Config.in b/openpower/package/romulus-xml/Config.in
deleted file mode 100755
index 6cec332..0000000
--- a/openpower/package/romulus-xml/Config.in
+++ /dev/null
@@ -1,23 +0,0 @@
-config BR2_PACKAGE_ROMULUS_XML
-        bool "romulus_xml"
-        default y if (BR2_OPENPOWER_CONFIG_NAME = "romulus")
-        help
-            Utilities for building xml and the targeting binary image
-
-config BR2_ROMULUS_SYSTEM_XML_FILENAME
-        string "Romulus targeting system xml filename"
-        default ""
-        help
-            Defines the name of the system XML filename to be used when creating targeting binary image
-
-config BR2_ROMULUS_MRW_XML_FILENAME
-        string "Romulus targeting mrw xml filename"
-        default ""
-        help
-            Defines the name of the mrw XML filename to be used when creating targeting binary image
-
-config BR2_ROMULUS_BIOS_XML_FILENAME
-        string "Romulus BIOS metadata XML filename"
-        default ""
-        help
-            Defines the name of the BIOS XML filename to parse when generating BIOS metadata
diff --git a/openpower/package/romulus-xml/romulus.mk b/openpower/package/romulus-xml/romulus.mk
deleted file mode 100644
index f611b02..0000000
--- a/openpower/package/romulus-xml/romulus.mk
+++ /dev/null
@@ -1,90 +0,0 @@
-################################################################################
-#
-# romulus_xml
-#
-################################################################################
-
-ROMULUS_XML_VERSION ?= cee21733cf05784b401d04ac13d9ac43e9449147
-ROMULUS_XML_SITE ?= $(call github,open-power,romulus-xml,$(ROMULUS_XML_VERSION))
-
-ROMULUS_XML_LICENSE = Apache-2.0
-ROMULUS_XML_DEPENDENCIES = hostboot-install-images openpower-mrw-install-images common-p8-xml-install-images
-
-ROMULUS_XML_INSTALL_IMAGES = YES
-ROMULUS_XML_INSTALL_TARGET = YES
-
-MRW_SCRATCH=$(STAGING_DIR)/openpower_mrw_scratch
-MRW_HB_TOOLS=$(STAGING_DIR)/hostboot_build_images
-
-# Defines for BIOS metadata creation
-BIOS_SCHEMA_FILE = $(MRW_HB_TOOLS)/bios.xsd
-ROMULUS_BIOS_XML_CONFIG_FILE = $(MRW_SCRATCH)/$(BR2_ROMULUS_BIOS_XML_FILENAME)
-BIOS_XML_METADATA_FILE = \
-    $(MRW_HB_TOOLS)/$(BR2_OPENPOWER_CONFIG_NAME)_bios_metadata.xml
-PETITBOOT_XSLT_FILE = $(MRW_HB_TOOLS)/bios_metadata_petitboot.xslt
-PETITBOOT_BIOS_XML_METADATA_FILE = \
-    $(MRW_HB_TOOLS)/$(BR2_OPENPOWER_CONFIG_NAME)_bios_metadata_petitboot.xml
-PETITBOOT_BIOS_XML_METADATA_INITRAMFS_FILE = \
-    $(TARGET_DIR)/usr/share/bios_metadata.xml
-
-define ROMULUS_XML_BUILD_CMDS
-        # copy the romulus xml where the common lives
-        bash -c 'mkdir -p $(MRW_SCRATCH) && cp -r $(@D)/* $(MRW_SCRATCH)'
-
-        # generate the system mrw xml
-        perl -I $(MRW_HB_TOOLS) \
-        $(MRW_HB_TOOLS)/processMrw.pl -x $(MRW_SCRATCH)/romulus.xml
-
-        chmod +x $(MRW_HB_TOOLS)/filter_out_unwanted_attributes.pl
-
-       $(MRW_HB_TOOLS)/filter_out_unwanted_attributes.pl \
-            --tgt-xml $(MRW_HB_TOOLS)/target_types_merged.xml \
-            --tgt-xml $(MRW_HB_TOOLS)/target_types_hb.xml \
-            --tgt-xml $(MRW_HB_TOOLS)/target_types_oppowervm.xml \
-            --tgt-xml $(MRW_HB_TOOLS)/target_types_openpower.xml \
-            --mrw-xml $(MRW_SCRATCH)/ROMULUS_hb.mrw.xml
-
-       cp  $(MRW_SCRATCH)/ROMULUS_hb.mrw.xml.updated  $(MRW_SCRATCH)/ROMULUS_hb.mrw.xml
-
-        # merge in any system specific attributes, hostboot attributes
-        $(MRW_HB_TOOLS)/mergexml.sh $(MRW_SCRATCH)/$(BR2_ROMULUS_SYSTEM_XML_FILENAME) \
-            $(MRW_HB_TOOLS)/attribute_types.xml \
-            $(MRW_HB_TOOLS)/attribute_types_hb.xml \
-            $(MRW_HB_TOOLS)/attribute_types_oppowervm.xml \
-            $(MRW_HB_TOOLS)/attribute_types_openpower.xml \
-            $(MRW_HB_TOOLS)/target_types_merged.xml \
-            $(MRW_HB_TOOLS)/target_types_hb.xml \
-            $(MRW_HB_TOOLS)/target_types_oppowervm.xml \
-            $(MRW_HB_TOOLS)/target_types_openpower.xml \
-            $(MRW_SCRATCH)/$(BR2_ROMULUS_MRW_XML_FILENAME) > $(MRW_HB_TOOLS)/temporary_hb.hb.xml;
-
-        # creating the targeting binary
-        $(MRW_HB_TOOLS)/xmltohb.pl  \
-            --hb-xml-file=$(MRW_HB_TOOLS)/temporary_hb.hb.xml \
-            --fapi-attributes-xml-file=$(MRW_HB_TOOLS)/fapiattrs.xml \
-            --src-output-dir=none \
-            --img-output-dir=$(MRW_HB_TOOLS)/ \
-            --vmm-consts-file=$(MRW_HB_TOOLS)/vmmconst.h --noshort-enums \
-            --bios-xml-file=$(ROMULUS_BIOS_XML_CONFIG_FILE) \
-            --bios-schema-file=$(BIOS_SCHEMA_FILE) \
-            --bios-output-file=$(BIOS_XML_METADATA_FILE)
-
-        # Transform BIOS XML into Petitboot specific BIOS XML via the schema
-        xsltproc -o \
-            $(PETITBOOT_BIOS_XML_METADATA_FILE) \
-            $(PETITBOOT_XSLT_FILE) \
-            $(BIOS_XML_METADATA_FILE)
-endef
-
-define ROMULUS_XML_INSTALL_IMAGES_CMDS
-        mv $(MRW_HB_TOOLS)/targeting.bin $(MRW_HB_TOOLS)/$(BR2_OPENPOWER_TARGETING_BIN_FILENAME)
-endef
-
-define ROMULUS_XML_INSTALL_TARGET_CMDS
-        # Install Petitboot specific BIOS XML into initramfs's usr/share/ dir
-        $(INSTALL) -D -m 0644 \
-            $(PETITBOOT_BIOS_XML_METADATA_FILE) \
-            $(PETITBOOT_BIOS_XML_METADATA_INITRAMFS_FILE)
-endef
-
-$(eval $(generic-package))
diff --git a/openpower/package/sbe/Config.in b/openpower/package/sbe/Config.in
new file mode 100644
index 0000000..cd9e84f
--- /dev/null
+++ b/openpower/package/sbe/Config.in
@@ -0,0 +1,6 @@
+config BR2_PACKAGE_SBE
+        bool "sbe"
+        default y if (BR2_OPENPOWER_PLATFORM && BR2_OPENPOWER_POWER9)
+        select BR2_CPP
+        help
+            Project to build the sbe firmware codebase
diff --git a/openpower/package/sbe/sbe.mk b/openpower/package/sbe/sbe.mk
new file mode 100644
index 0000000..aa926f5
--- /dev/null
+++ b/openpower/package/sbe/sbe.mk
@@ -0,0 +1,29 @@
+################################################################################
+#
+# SBE
+#
+################################################################################
+
+SBE_VERSION ?= d770027426ba0c5d6c44fa985e9dfaf28fd6fcce
+SBE_SITE ?= $(call github,open-power,sbe,$(SBE_VERSION))
+
+SBE_LICENSE = Apache-2.0
+SBE_DEPENDENCIES = host-ppe42-gcc
+
+SBE_INSTALL_IMAGES = YES
+SBE_INSTALL_TARGET = NO
+
+define SBE_BUILD_CMDS
+	SBE_COMMIT_ID=$(SBE_VERSION) $(MAKE1) -C $(@D) \
+		LD_LIBRARY_PATH=$(HOST_DIR)/usr/lib \
+		CROSS_COMPILER_PATH=$(PPE42_GCC_BIN) \
+		all
+endef
+
+define SBE_INSTALL_IMAGES_CMDS
+	$(INSTALL) -D $(@D)/images/p9_ipl_build  $(HOST_DIR)/usr/bin/
+	python $(@D)/src/build/sbeOpDistribute.py --sbe_binary_dir=$(STAGING_DIR)/sbe_binaries --img_dir=$(@D)/images
+	cp $(@D)/src/build/sbeOpDistribute.py $(STAGING_DIR)/sbe_binaries/
+endef
+
+$(eval $(generic-package))
diff --git a/openpower/package/skiboot/Config.in b/openpower/package/skiboot/Config.in
index 070fa50..0506983 100644
--- a/openpower/package/skiboot/Config.in
+++ b/openpower/package/skiboot/Config.in
@@ -31,7 +31,7 @@
 
 config BR2_SKIBOOT_VERSION
 	string
-	default "skiboot-5.5.0-rc2" if BR2_SKIBOOT_LATEST_VERSION
+	default "skiboot-5.6.0" if BR2_SKIBOOT_LATEST_VERSION
 	default BR2_SKIBOOT_CUSTOM_VERSION_VALUE \
 		if BR2_SKIBOOT_CUSTOM_VERSION
 
diff --git a/openpower/package/witherspoon-xml/Config.in b/openpower/package/witherspoon-xml/Config.in
deleted file mode 100755
index 3e4333c..0000000
--- a/openpower/package/witherspoon-xml/Config.in
+++ /dev/null
@@ -1,23 +0,0 @@
-config BR2_PACKAGE_WITHERSPOON_XML
-        bool "witherspoon_xml"
-        default y if (BR2_OPENPOWER_CONFIG_NAME = "witherspoon")
-        help
-            Utilites for building xml and the targeting binary image
-
-config BR2_WITHERSPOON_SYSTEM_XML_FILENAME
-        string "Witherspoon targeting system xml filename"
-        default ""
-        help
-            Defines the name of the system XML filename to be used when creating targeting binary image
-
-config BR2_WITHERSPOON_MRW_XML_FILENAME
-        string "Witherspoon targeting mrw xml filename"
-        default ""
-        help
-            Defines the name of the mrw XML filename to be used when creating targeting binary image
-
-config BR2_WITHERSPOON_BIOS_XML_FILENAME
-        string "Witherspoon BIOS metadata XML filename"
-        default ""
-        help
-            Defines the name of the BIOS XML filename to parse when generating BIOS metadata
diff --git a/openpower/package/witherspoon-xml/witherspoon.mk b/openpower/package/witherspoon-xml/witherspoon.mk
deleted file mode 100644
index c34eee7..0000000
--- a/openpower/package/witherspoon-xml/witherspoon.mk
+++ /dev/null
@@ -1,90 +0,0 @@
-################################################################################
-#
-# witherspoon_xml
-#
-################################################################################
-
-WITHERSPOON_XML_VERSION ?= 07ef29dcfbfe88943a0fde35bebeec79d0fee62d
-WITHERSPOON_XML_SITE ?= $(call github,open-power,witherspoon-xml,$(WITHERSPOON_XML_VERSION))
-
-WITHERSPOON_XML_LICENSE = Apache-2.0
-WITHERSPOON_XML_DEPENDENCIES = hostboot-install-images openpower-mrw-install-images common-p8-xml-install-images
-
-WITHERSPOON_XML_INSTALL_IMAGES = YES
-WITHERSPOON_XML_INSTALL_TARGET = YES
-
-MRW_SCRATCH=$(STAGING_DIR)/openpower_mrw_scratch
-MRW_HB_TOOLS=$(STAGING_DIR)/hostboot_build_images
-
-# Defines for BIOS metadata creation
-BIOS_SCHEMA_FILE = $(MRW_HB_TOOLS)/bios.xsd
-WITHERSPOON_BIOS_XML_CONFIG_FILE = $(MRW_SCRATCH)/$(BR2_WITHERSPOON_BIOS_XML_FILENAME)
-BIOS_XML_METADATA_FILE = \
-    $(MRW_HB_TOOLS)/$(BR2_OPENPOWER_CONFIG_NAME)_bios_metadata.xml
-PETITBOOT_XSLT_FILE = $(MRW_HB_TOOLS)/bios_metadata_petitboot.xslt
-PETITBOOT_BIOS_XML_METADATA_FILE = \
-    $(MRW_HB_TOOLS)/$(BR2_OPENPOWER_CONFIG_NAME)_bios_metadata_petitboot.xml
-PETITBOOT_BIOS_XML_METADATA_INITRAMFS_FILE = \
-    $(TARGET_DIR)/usr/share/bios_metadata.xml
-
-define WITHERSPOON_XML_BUILD_CMDS
-        # copy the witherspoon xml where the common lives
-        bash -c 'mkdir -p $(MRW_SCRATCH) && cp -r $(@D)/* $(MRW_SCRATCH)'
-
-        # generate the system mrw xml
-        perl -I $(MRW_HB_TOOLS) \
-        $(MRW_HB_TOOLS)/processMrw.pl -x $(MRW_SCRATCH)/witherspoon.xml
-
-        chmod +x $(MRW_HB_TOOLS)/filter_out_unwanted_attributes.pl
-
-       $(MRW_HB_TOOLS)/filter_out_unwanted_attributes.pl \
-            --tgt-xml $(MRW_HB_TOOLS)/target_types_merged.xml \
-            --tgt-xml $(MRW_HB_TOOLS)/target_types_hb.xml \
-            --tgt-xml $(MRW_HB_TOOLS)/target_types_oppowervm.xml \
-            --tgt-xml $(MRW_HB_TOOLS)/target_types_openpower.xml \
-            --mrw-xml $(MRW_SCRATCH)/WITHERSPOON_hb.mrw.xml
-
-       cp  $(MRW_SCRATCH)/WITHERSPOON_hb.mrw.xml.updated  $(MRW_SCRATCH)/WITHERSPOON_hb.mrw.xml
-
-        # merge in any system specific attributes, hostboot attributes
-        $(MRW_HB_TOOLS)/mergexml.sh $(MRW_SCRATCH)/$(BR2_WITHERSPOON_SYSTEM_XML_FILENAME) \
-            $(MRW_HB_TOOLS)/attribute_types.xml \
-            $(MRW_HB_TOOLS)/attribute_types_hb.xml \
-            $(MRW_HB_TOOLS)/attribute_types_oppowervm.xml \
-            $(MRW_HB_TOOLS)/attribute_types_openpower.xml \
-            $(MRW_HB_TOOLS)/target_types_merged.xml \
-            $(MRW_HB_TOOLS)/target_types_hb.xml \
-            $(MRW_HB_TOOLS)/target_types_oppowervm.xml \
-            $(MRW_HB_TOOLS)/target_types_openpower.xml \
-            $(MRW_SCRATCH)/$(BR2_WITHERSPOON_MRW_XML_FILENAME) > $(MRW_HB_TOOLS)/temporary_hb.hb.xml;
-
-        # creating the targeting binary
-        $(MRW_HB_TOOLS)/xmltohb.pl  \
-            --hb-xml-file=$(MRW_HB_TOOLS)/temporary_hb.hb.xml \
-            --fapi-attributes-xml-file=$(MRW_HB_TOOLS)/fapiattrs.xml \
-            --src-output-dir=none \
-            --img-output-dir=$(MRW_HB_TOOLS)/ \
-            --vmm-consts-file=$(MRW_HB_TOOLS)/vmmconst.h --noshort-enums \
-            --bios-xml-file=$(WITHERSPOON_BIOS_XML_CONFIG_FILE) \
-            --bios-schema-file=$(BIOS_SCHEMA_FILE) \
-            --bios-output-file=$(BIOS_XML_METADATA_FILE)
-
-        # Transform BIOS XML into Petitboot specific BIOS XML via the schema
-        xsltproc -o \
-            $(PETITBOOT_BIOS_XML_METADATA_FILE) \
-            $(PETITBOOT_XSLT_FILE) \
-            $(BIOS_XML_METADATA_FILE)
-endef
-
-define WITHERSPOON_XML_INSTALL_IMAGES_CMDS
-        mv $(MRW_HB_TOOLS)/targeting.bin $(MRW_HB_TOOLS)/$(BR2_OPENPOWER_TARGETING_BIN_FILENAME)
-endef
-
-define WITHERSPOON_XML_INSTALL_TARGET_CMDS
-        # Install Petitboot specific BIOS XML into initramfs's usr/share/ dir
-        $(INSTALL) -D -m 0644 \
-            $(PETITBOOT_BIOS_XML_METADATA_FILE) \
-            $(PETITBOOT_BIOS_XML_METADATA_INITRAMFS_FILE)
-endef
-
-$(eval $(generic-package))
diff --git a/openpower/package/zaius-xml/Config.in b/openpower/package/zaius-xml/Config.in
deleted file mode 100755
index b335ff3..0000000
--- a/openpower/package/zaius-xml/Config.in
+++ /dev/null
@@ -1,23 +0,0 @@
-config BR2_PACKAGE_ZAIUS_XML
-        bool "zaius_xml"
-        default y if (BR2_OPENPOWER_CONFIG_NAME = "zaius")
-        help
-            Utilities for building xml and the targeting binary image
-
-config BR2_ZAIUS_SYSTEM_XML_FILENAME
-        string "Zaius targeting system xml filename"
-        default ""
-        help
-            Defines the name of the system XML filename to be used when creating targeting binary image
-
-config BR2_ZAIUS_MRW_XML_FILENAME
-        string "Zaius targeting mrw xml filename"
-        default ""
-        help
-            Defines the name of the mrw XML filename to be used when creating targeting binary image
-
-config BR2_ZAIUS_BIOS_XML_FILENAME
-        string "Zaius BIOS metadata XML filename"
-        default ""
-        help
-            Defines the name of the BIOS XML filename to parse when generating BIOS metadata
diff --git a/openpower/package/zaius-xml/zaius.mk b/openpower/package/zaius-xml/zaius.mk
deleted file mode 100644
index 3d3380a..0000000
--- a/openpower/package/zaius-xml/zaius.mk
+++ /dev/null
@@ -1,92 +0,0 @@
-################################################################################
-#
-# zaius_xml
-#
-################################################################################
-
-ZAIUS_XML_VERSION ?= b907705f75e5d462b9f23b894ea781ae5ab5c2bf
-ZAIUS_XML_SITE ?= $(call github,open-power,zaius-xml,$(ZAIUS_XML_VERSION))
-
-ZAIUS_XML_LICENSE = Apache-2.0
-ZAIUS_XML_DEPENDENCIES = hostboot-install-images openpower-mrw-install-images common-p8-xml-install-images
-
-ZAIUS_XML_INSTALL_IMAGES = YES
-ZAIUS_XML_INSTALL_TARGET = YES
-
-MRW_SCRATCH=$(STAGING_DIR)/openpower_mrw_scratch
-MRW_HB_TOOLS=$(STAGING_DIR)/hostboot_build_images
-
-# Defines for BIOS metadata creation
-BIOS_SCHEMA_FILE = $(MRW_HB_TOOLS)/bios.xsd
-ZAIUS_BIOS_XML_CONFIG_FILE = $(MRW_SCRATCH)/$(BR2_ZAIUS_BIOS_XML_FILENAME)
-BIOS_XML_METADATA_FILE = \
-    $(MRW_HB_TOOLS)/$(BR2_OPENPOWER_CONFIG_NAME)_bios_metadata.xml
-PETITBOOT_XSLT_FILE = $(MRW_HB_TOOLS)/bios_metadata_petitboot.xslt
-PETITBOOT_BIOS_XML_METADATA_FILE = \
-    $(MRW_HB_TOOLS)/$(BR2_OPENPOWER_CONFIG_NAME)_bios_metadata_petitboot.xml
-PETITBOOT_BIOS_XML_METADATA_INITRAMFS_FILE = \
-    $(TARGET_DIR)/usr/share/bios_metadata.xml
-
-define ZAIUS_XML_BUILD_CMDS
-        # copy the zaius xml where the common lives
-        bash -c 'mkdir -p $(MRW_SCRATCH) && cp -r $(@D)/* $(MRW_SCRATCH)'
-
-        # generate the system mrw xml
-        perl -I $(MRW_HB_TOOLS) \
-        $(MRW_HB_TOOLS)/processMrw.pl -x $(MRW_SCRATCH)/zaius.xml
-
-        # filter out unwanted attributes
-        chmod +x $(MRW_HB_TOOLS)/filter_out_unwanted_attributes.pl
-
-        $(MRW_HB_TOOLS)/filter_out_unwanted_attributes.pl \
-            --tgt-xml $(MRW_HB_TOOLS)/target_types_merged.xml \
-            --tgt-xml $(MRW_HB_TOOLS)/target_types_hb.xml \
-            --tgt-xml $(MRW_HB_TOOLS)/target_types_oppowervm.xml \
-            --tgt-xml $(MRW_HB_TOOLS)/target_types_openpower.xml \
-            --mrw-xml $(MRW_SCRATCH)/$(BR2_ZAIUS_MRW_XML_FILENAME)
-
-        cp $(MRW_SCRATCH)/$(BR2_ZAIUS_MRW_XML_FILENAME).updated \
-            $(MRW_SCRATCH)/$(BR2_ZAIUS_MRW_XML_FILENAME)
-
-        # merge in any system specific attributes, hostboot attributes
-        $(MRW_HB_TOOLS)/mergexml.sh $(MRW_SCRATCH)/$(BR2_ZAIUS_SYSTEM_XML_FILENAME) \
-            $(MRW_HB_TOOLS)/attribute_types.xml \
-            $(MRW_HB_TOOLS)/attribute_types_hb.xml \
-            $(MRW_HB_TOOLS)/attribute_types_oppowervm.xml \
-            $(MRW_HB_TOOLS)/attribute_types_openpower.xml \
-            $(MRW_HB_TOOLS)/target_types_merged.xml \
-            $(MRW_HB_TOOLS)/target_types_hb.xml \
-            $(MRW_HB_TOOLS)/target_types_oppowervm.xml \
-            $(MRW_HB_TOOLS)/target_types_openpower.xml \
-            $(MRW_SCRATCH)/$(BR2_ZAIUS_MRW_XML_FILENAME) > $(MRW_HB_TOOLS)/temporary_hb.hb.xml;
-
-        # creating the targeting binary
-        $(MRW_HB_TOOLS)/xmltohb.pl  \
-            --hb-xml-file=$(MRW_HB_TOOLS)/temporary_hb.hb.xml \
-            --fapi-attributes-xml-file=$(MRW_HB_TOOLS)/fapiattrs.xml \
-            --src-output-dir=none \
-            --img-output-dir=$(MRW_HB_TOOLS)/ \
-            --vmm-consts-file=$(MRW_HB_TOOLS)/vmmconst.h --noshort-enums \
-            --bios-xml-file=$(ZAIUS_BIOS_XML_CONFIG_FILE) \
-            --bios-schema-file=$(BIOS_SCHEMA_FILE) \
-            --bios-output-file=$(BIOS_XML_METADATA_FILE)
-
-        # Transform BIOS XML into Petitboot specific BIOS XML via the schema
-        xsltproc -o \
-            $(PETITBOOT_BIOS_XML_METADATA_FILE) \
-            $(PETITBOOT_XSLT_FILE) \
-            $(BIOS_XML_METADATA_FILE)
-endef
-
-define ZAIUS_XML_INSTALL_IMAGES_CMDS
-        mv $(MRW_HB_TOOLS)/targeting.bin $(MRW_HB_TOOLS)/$(BR2_OPENPOWER_TARGETING_BIN_FILENAME)
-endef
-
-define ZAIUS_XML_INSTALL_TARGET_CMDS
-        # Install Petitboot specific BIOS XML into initramfs's usr/share/ dir
-        $(INSTALL) -D -m 0644 \
-            $(PETITBOOT_BIOS_XML_METADATA_FILE) \
-            $(PETITBOOT_BIOS_XML_METADATA_INITRAMFS_FILE)
-endef
-
-$(eval $(generic-package))
diff --git a/openpower/package/habanero-xml/habanero-xml-0002-Add-System-Fw-Fru-Id.patch b/openpower/patches/habanero-patches/machine-xml/habanero-xml-0002-Add-System-Fw-Fru-Id.patch
similarity index 100%
rename from openpower/package/habanero-xml/habanero-xml-0002-Add-System-Fw-Fru-Id.patch
rename to openpower/patches/habanero-patches/machine-xml/habanero-xml-0002-Add-System-Fw-Fru-Id.patch
diff --git a/openpower/package/palmetto-xml/palmetto-xml-0002-Add-Sys-Fw-Fru-Id.patch b/openpower/patches/palmetto-patches/machine-xml/palmetto-xml-0002-Add-Sys-Fw-Fru-Id.patch
similarity index 100%
rename from openpower/package/palmetto-xml/palmetto-xml-0002-Add-Sys-Fw-Fru-Id.patch
rename to openpower/patches/palmetto-patches/machine-xml/palmetto-xml-0002-Add-Sys-Fw-Fru-Id.patch
diff --git a/openpower/scripts/release-notes b/openpower/scripts/release-notes
index 2bf1b90..4231aa0 100755
--- a/openpower/scripts/release-notes
+++ b/openpower/scripts/release-notes
@@ -1,49 +1,242 @@
 #!/bin/env perl
+
 use strict;
 
+use Getopt::Long;
+use DBI;
+
+# We use an in-memory SQLite database as SQL is good for doing queries
+# of differences between data sets, and doing that in perl is annoying.
+my $db = "dbi:SQLite:dbname=release-notes.sqlite";
+#my $dbh = DBI->connect("dbi:SQLite:dbname=:memory:","","");
+my $dbh = DBI->connect($db,undef,undef, {AutoCommit => 1, RaiseError=>1});
+
 my $repos =
 {
     'op-build' => { REPO => "http://github.com/open-power/op-build" },
     'hostboot' => { REPO => "http://github.com/open-power/hostboot" ,
-                    DIR => "openpower/package/hostboot",
-                    PACKAGE => "HOSTBOOT" },
+                    DIR => "openpower/package/hostboot" },
+    'sbe'      => { REPO => "http://github.com/open-power/sbe" ,
+                    DIR => "openpower/package/sbe"},
     'skiboot'  => { REPO => "http://github.com/open-power/skiboot" ,
-                    DIR => "openpower/package/skiboot",
-                    PACKAGE => "SKIBOOT" },
+                    DIR => "openpower/package/skiboot"},
     'occ'      => { REPO => "http://github.com/open-power/occ" ,
-                    DIR => "openpower/package/occ",
-                    PACKAGE => "OCC" },
+                    DIR => "openpower/package/occ"},
     'pnor'     => { REPO => "http://github.com/open-power/pnor" ,
-                    DIR => "openpower/package/openpower-pnor",
-                    PACKAGE => "OPENPOWER_PNOR" },
-    'palmetto-xml' => { REPO => "http://github.com/open-power/palmetto-xml" ,
-                    DIR => "openpower/package/palmetto-xml",
-                    PACKAGE => "PALMETTO_XML" },
-    'habanero-xml' => { REPO => "http://github.com/open-power/habanero-xml" ,
-                    DIR => "openpower/package/habanero-xml",
-                    PACKAGE => "HABANERO_XML" },
-    'firestone-xml' => { REPO => "http://github.com/open-power/firestone-xml" ,
-                    DIR => "openpower/package/firestone-xml",
-                    PACKAGE => "FIRESTONE_XML" },
-    'garrison-xml'  => { REPO => "http://github.com/open-power/garrison-xml" ,
-                    DIR => "openpower/package/garrison-xml",
-                    PACKAGE => "GARRISON_XML" },
-    'barreleye-xml'  => { REPO => "http://github.com/open-power/barreleye-xml" ,
-                    DIR => "openpower/package/barreleye-xml",
-                    PACKAGE => "BARRELEYE_XML" },
-    'witherspoon-xml'  => { REPO => "http://github.com/open-power/witherspoon-xml" ,
-                    DIR => "openpower/package/witherspoon-xml",
-                    PACKAGE => "WITHERSPOON_XML" },
-    'zaius-xml'  => { REPO => "http://github.com/open-power/zaius-xml" ,
-                    DIR => "openpower/package/zaius-xml",
-                    PACKAGE => "ZAIUS_XML" },
+                    DIR => "openpower/package/openpower-pnor"},
     'petitboot'     => { REPO => "http://github.com/open-power/petitboot" ,
-                    DIR => "openpower/package/petitboot",
-                    PACKAGE => "PETITBOOT" },
+			 DIR => "openpower/package/petitboot"},
 };
 
-my $begin_release = shift;
-my $end_release = shift;
+my $begin_release;
+my $end_release;
+my $begin_worktree;
+my $end_worktree;
+my $platform;
+
+GetOptions("begin-release=s" => \$begin_release,
+	   "end-release=s" => \$end_release,
+	   "begin-worktree=s" => \$begin_worktree,
+	   "platform=s" => \$platform,
+	   "end-worktree=s" => \$end_worktree)
+    or die("Error in command line arguments");
+
+die "Required argument missing" unless ($begin_release and $end_release and $begin_worktree and $end_worktree);
+
+open(OUTPUT, "> RELEASE.md") || die "Failed to open RELEASE.md";
+
+print OUTPUT "# Release Notes for OpenPower Firmware $end_release\n";
+
+if (-e $begin_worktree) {
+    system("cd $begin_worktree && git checkout $begin_release && git submodule update --reference ../buildroot && git submodule update") and die "Could not update $begin_worktree";
+} else {
+    system("git worktree add $begin_worktree $begin_release && cd $begin_worktree&& git submodule update --reference ../buildroot && git submodule update && rm -rf dl && ln -s ../dl dl") and die "Couldn't init $begin_worktree";
+}
+
+if (-e $end_worktree) {
+    system("cd $end_worktree && git checkout $end_release  && git submodule update --reference ../buildroot && git submodule update") and die "Could not update $end_worktree";
+} else {
+    system("git worktree add $end_worktree $end_release && cd $end_worktree && git submodule update --reference ../buildroot && git submodule update && rm -rf dl && ln -s ../dl dl") and die "Couldn't init $end_worktree";
+}
+
+opendir (my $dh, "$begin_worktree/openpower/configs")
+    or die "can't scan $begin_worktree defconfigs";
+my @begin_platforms = grep { /.*_defconfig/ } readdir($dh);
+closedir $dh;
+
+opendir (my $dh, "$end_worktree/openpower/configs")
+    or die "can't scan $end_worktree defconfigs";
+my @end_platforms = grep { /.*_defconfig/ } readdir($dh);
+closedir $dh;
+
+s/_defconfig// foreach (@begin_platforms);
+s/_defconfig// foreach (@end_platforms);
+
+if ($platform) {
+    @begin_platforms = ($platform);
+    @end_platforms = ($platform);
+}
+
+$dbh->do("CREATE TABLE platforms (platform TEXT, version TEXT);") or die "$!";
+{
+    my $q = "INSERT INTO platforms (platform,version) VALUES (?,?)";
+    my $sth = $dbh->prepare($q) or die "$!";
+    $sth->execute($_, $begin_release) foreach (@begin_platforms);
+    $sth->execute($_, $end_release) foreach (@end_platforms);
+}
+
+{
+    my $q = "SELECT platform FROM platforms WHERE version is ? AND platform NOT IN (SELECT platform FROM platforms WHERE version is ?)";
+    my $sth = $dbh->prepare($q) or die $!;
+    $sth->execute($begin_release, $end_release);
+    my $r;
+    print OUTPUT "## Removed platforms\n\n- ".$r->{platform}."\n" if $r = $sth->fetchrow_hashref;
+    print OUTPUT "- ".$_->{platform}."\n" while ($r = $sth->fetchrow_hashref);
+
+    $sth->execute($end_release, $begin_release);
+    print OUTPUT "## New platforms\n\n- ".$r->{platform}."\n" if $r = $sth->fetchrow_hashref;
+    print OUTPUT "- ".$_->{platform}."\n" while($r = $sth->fetchrow_hashref);
+}
+
+my @common_platforms;
+{
+    my $q = "SELECT platform FROM platforms WHERE version is ? AND EXISTS (select platform from platforms where version is ?)";
+    my $sth = $dbh->prepare($q) or die $!;
+    $sth->execute($begin_release, $end_release);
+    my $r;
+    push @common_platforms, $r->{platform} while ($r = $sth->fetchrow_hashref);
+}
+
+foreach my $p (@common_platforms) {
+    next if $p =~ /firenze/;
+    next if $p =~ /^zz$/;
+    next if $p =~ /mambo/;
+    $repos->{"$p-xml"} = { REPO => "http://github.com/open-power/$p-xml" ,
+			   DIR => "openpower/package/$p-xml" };
+}
+
+foreach my $p (@begin_platforms) {
+    system("bash -c '(cd $begin_worktree && . op-build-env && op-build ".$p."_defconfig && op-build legal-info)'");
+    # Forgive me for this....
+    system("sqlite3 release-notes.sqlite \".mode csv\" \".import $begin_worktree/output/legal-info/manifest.csv begin_".$p."_manifest\"");
+}
+
+foreach my $p (@end_platforms) {
+    system("bash -c '(cd $end_worktree && . op-build-env && op-build ".$p."_defconfig && op-build legal-info)'");
+    # Forgive me for this....
+    system("sqlite3 release-notes.sqlite \".mode csv\" \".import $end_worktree/output/legal-info/manifest.csv end_".$p."_manifest\"");
+}
+
+$dbh->do(<<'SQL') or die "$!";
+CREATE TABLE package_upgrades (
+  PACKAGE TEXT,
+  OLDVERSION TEXT,
+  NEWVERSION TEXT,
+  PLATFORM TEXT
+)
+SQL
+
+foreach my $p (@common_platforms) {
+    $dbh->do("INSERT INTO package_upgrades select b.package,b.version,e.version,'$p' from begin_".$p."_manifest as b LEFT JOIN end_".$p."_manifest AS e ON b.package=e.package WHERE b.version != e.version") or die $!;
+}
+
+$dbh->do(<<'SQL') or die "$!";
+CREATE TABLE new_package (
+  PACKAGE TEXT,
+  VERSION TEXT,
+  PLATFORM TEXT
+)
+SQL
+
+foreach my $p (@common_platforms) {
+    $dbh->do("INSERT INTO new_package select b.package,b.version,'$p' from end_".$p."_manifest as b WHERE NOT EXISTS(SELECT package FROM begin_".$p."_manifest AS e WHERE b.package=e.package)") or die $!;
+}
+
+$dbh->do(<<'SQL') or die "$!";
+CREATE TABLE removed_package (
+  PACKAGE TEXT,
+  VERSION TEXT,
+  PLATFORM TEXT
+)
+SQL
+
+foreach my $p (@common_platforms) {
+    $dbh->do("INSERT INTO removed_package select b.package,b.version,'$p' from begin_".$p."_manifest as b WHERE NOT EXISTS(SELECT package FROM end_".$p."_manifest AS e WHERE b.package=e.package)") or die $!;
+}
+
+my $old_level = {};
+my $new_level = {};
+
+{
+    my $q = <<'SQL';
+select package as pk ,oldversion as o ,newversion as n, 
+	GROUP_CONCAT(platform) as ps
+FROM package_upgrades 
+	GROUP BY package,oldversion,newversion
+ORDER BY package,platform
+SQL
+    my $sth = $dbh->prepare($q) or die $!;
+    $sth->execute();
+
+    print OUTPUT "## Updated Packages\n\n";
+    print OUTPUT "Package | Old Version | New Version | Platforms\n";
+    print OUTPUT "--- | --- | --- | ---\n";
+    while (my $r = $sth->fetchrow_hashref) {
+	print OUTPUT join(' | ',($r->{pk}, $r->{o}, $r->{n}, $r->{ps}))."\n" ;
+	if ($r->{pk} eq 'machine-xml') {
+	    $old_level->{$r->{ps}."-xml"} = $r->{o};
+	    $new_level->{$r->{ps}."-xml"} = $r->{n};
+	} else {
+	    $old_level->{$r->{pk}} = $r->{o};
+	    $new_level->{$r->{pk}} = $r->{n};
+	}
+    }
+}
+
+{
+    my $q = <<'SQL';
+select package as pk ,version as v,
+	GROUP_CONCAT(platform) as ps
+FROM new_package
+	GROUP BY package,version
+ORDER BY package,platform
+SQL
+    my $sth = $dbh->prepare($q) or die $!;
+    $sth->execute();
+
+    print OUTPUT "\n\n## New Packages\n\n";
+    print OUTPUT "Package | Version | Platforms\n";
+    print OUTPUT "--- | --- | ---\n";
+    while (my $r = $sth->fetchrow_hashref) {
+	print OUTPUT join(' | ',($r->{pk}, $r->{v}, $r->{ps}))."\n" ;
+	if ($r->{pk} eq 'machine-xml') {
+	    $new_level->{$r->{ps}."-xml"} = $r->{v};
+	}
+    }
+}
+
+{
+    my $q = <<'SQL';
+select package as pk ,version as v,
+	GROUP_CONCAT(platform) as ps
+FROM removed_package
+	GROUP BY package,version
+ORDER BY package,platform
+SQL
+    my $sth = $dbh->prepare($q) or die $!;
+    $sth->execute();
+
+    print OUTPUT "\n\n## Removed Packages\n\n";
+    print OUTPUT "Package | Version | Platforms\n";
+    print OUTPUT "--- | --- | ---\n";
+    while (my $r = $sth->fetchrow_hashref) {
+	print OUTPUT join(' | ',($r->{pk}, $r->{v}, $r->{ps}))."\n" ;
+	if ($r->{pk} eq $r->{ps}."-xml") {
+	    $old_level->{$r->{ps}."-xml"} = $r->{v};
+	}
+    }
+    print OUTPUT "\n\n";
+}
 
 foreach my $repo (keys %{$repos})
 {
@@ -61,67 +254,11 @@
 system("cd op-build; git checkout $end_release --force; git reset HEAD --hard");
 
 
-open(OP_SUMMARY, "cd op-build; ".
-        "git diff $begin_release...$end_release --name-only |".
-        "grep -e \"\.mk\" -e \"Config.in\" |".
-        "xargs git diff $begin_release...$end_release -- |".
-        "grep -e '^[+-][^[:space:]]*_VERSION' ".
-        "-e'^[+-][[:space:]]*default.*if.*LATEST_VERSION' |") || die;
-
-my $old_level = {};
-my $new_level = {};
-
-while(my $line = <OP_SUMMARY>)
-{
-    chomp $line;
-    if ($line =~ m/\$/) # Sanity check there are not variables here.
-    {
-        next;
-    }
-    if ($line =~ m/-([^[:space:]]*)_VERSION([[:space:]]*\?*=[[:space:]]*)(.*)/)
-    {
-        print "Old $1:$3\n";
-        $old_level->{$1} = $3;
-    }
-    if ($line =~ m/-([^[:space:]]*)_VERSION_BRANCH_MASTER([[:space:]]*\?*=[[:space:]]*)(.*)/)
-    {
-        print "Old $1:$3\n";
-        $old_level->{$1} = $3;
-    }
-    if ($line =~ m/\+([^[:space:]]*)_VERSION([[:space:]]*\?*=[[:space:]]*)(.*)/)
-    {
-        print "New $1:$3\n";
-        $new_level->{$1} = $3;
-    }
-    if ($line =~ m/\+([^[:space:]]*)_VERSION_BRANCH_MASTER([[:space:]]*\?*=[[:space:]]*)(.*)/)
-    {
-        print "New $1:$3\n";
-        $new_level->{$1} = $3;
-    }
-
-    if ($line =~ m/-[[:space:]]*default[[:space:]]*"([^[:space:]]*)"[[:space:]]*if[[:space:]]BR2_([^[:space:]]*)_LATEST_VERSION/)
-    {
-        print "Old $2:$1\n";
-        $old_level->{$2} = $1;
-    }
-    if ($line =~ m/\+[[:space:]]*default[[:space:]]*"([^[:space:]]*)"[[:space:]]*if[[:space:]]BR2_([^[:space:]]*)_LATEST_VERSION/)
-    {
-        print "New $2:$1\n";
-        $new_level->{$2} = $1;
-    }
-}
-
-open(OUTPUT, "> RELEASE.md") || die "Failed to open RELEASE.md";
-
-print OUTPUT "# Release Notes for OpenPower Firmware $end_release\n";
-
 my $op_url = $repos->{'op-build'}->{REPO};
 
 foreach my $repo (sort keys %{$repos})
 {
-    next if (not exists $repos->{$repo}->{PACKAGE});
-
-    my $package = $repos->{$repo}->{PACKAGE};
+    my $package = $repo;
     my $url = $repos->{$repo}->{REPO};
     my $dir = $repos->{$repo}->{DIR};
 
@@ -129,8 +266,6 @@
     print OUTPUT "[Repository]($url)\n";
     print OUTPUT "\n";
 
-    my $package = $repos->{$repo}->{PACKAGE};
-
     # Display patches.
     if (open(LSLOG, "ls op-build/$dir/*.patch | ".
                     "xargs -n1 --no-run-if-empty basename |"))
@@ -165,7 +300,6 @@
         (exists $new_level->{$package}))
     {
         print "Changes in $repo...\n";
-
         open(GITLOG, "cd $repo; git shortlog $old_level->{$package}...".
                      "$new_level->{$package} --no-merges --format=".
                      "\"* [%h]($url/commit/%h) %s\" |");