diff --git a/openpower/configs/witherspoon_defconfig b/openpower/configs/witherspoon_defconfig
index 4e046b7..e9745ca 100644
--- a/openpower/configs/witherspoon_defconfig
+++ b/openpower/configs/witherspoon_defconfig
@@ -42,7 +42,7 @@
 BR2_OPENPOWER_POWER9=y
 BR2_HOSTBOOT_CONFIG_FILE="witherspoon.config"
 BR2_OPENPOWER_MACHINE_XML_GITHUB_PROJECT_VALUE="witherspoon-xml"
-BR2_OPENPOWER_MACHINE_XML_VERSION="d389352298566dfaec3d7cfc28778eba012c9256"
+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"
diff --git a/openpower/configs/zaius_defconfig b/openpower/configs/zaius_defconfig
index c0848a4..084063d 100644
--- a/openpower/configs/zaius_defconfig
+++ b/openpower/configs/zaius_defconfig
@@ -42,7 +42,7 @@
 BR2_OPENPOWER_POWER9=y
 BR2_HOSTBOOT_CONFIG_FILE="zaius.config"
 BR2_OPENPOWER_MACHINE_XML_GITHUB_PROJECT_VALUE="zaius-xml"
-BR2_OPENPOWER_MACHINE_XML_VERSION="6bcffcf4b3af8a2de7245c9d6d373b1144bd3037"
+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"
diff --git a/openpower/package/hostboot-binaries/hostboot_binaries.mk b/openpower/package/hostboot-binaries/hostboot_binaries.mk
index 856b1b2..289660b 100644
--- a/openpower/package/hostboot-binaries/hostboot_binaries.mk
+++ b/openpower/package/hostboot-binaries/hostboot_binaries.mk
@@ -4,7 +4,7 @@
 #
 ################################################################################
 
-HOSTBOOT_BINARIES_VERSION ?= d8f4ab7e0eb5cadd7f68a88c1ae602af54e08dd1
+HOSTBOOT_BINARIES_VERSION ?= 92195a34879407d90424a4f90ae4e5a386891410
 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 11da0fc..4faef1d 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 ?= d02273fb506c99bb2951453feae27f6acc863a2f
+HOSTBOOT_VERSION_BRANCH_MASTER ?= 5e1b4a600a87238a04cb19284e3385a4c73e80e8
 
 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-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/openpower-pnor/openpower-pnor.mk b/openpower/package/openpower-pnor/openpower-pnor.mk
index 95c831f..c178223 100644
--- a/openpower/package/openpower-pnor/openpower-pnor.mk
+++ b/openpower/package/openpower-pnor/openpower-pnor.mk
@@ -4,7 +4,7 @@
 #
 ################################################################################
 
-OPENPOWER_PNOR_VERSION ?= 86474de814334341cc6146174b6aee9afe0e5547
+OPENPOWER_PNOR_VERSION ?= 3ab2d5d3f0c030bd68a4b431ac128004d54f7511
 OPENPOWER_PNOR_SITE ?= $(call github,open-power,pnor,$(OPENPOWER_PNOR_VERSION))
 
 OPENPOWER_PNOR_LICENSE = Apache-2.0
