diff --git a/openpower/configs/hostboot/zaius.config b/openpower/configs/hostboot/zaius.config
index cd0390e..7f76996 100755
--- a/openpower/configs/hostboot/zaius.config
+++ b/openpower/configs/hostboot/zaius.config
@@ -47,8 +47,11 @@
 
 # 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/p9dsu_defconfig b/openpower/configs/p9dsu_defconfig
index 532e7b0..7487d09 100644
--- a/openpower/configs/p9dsu_defconfig
+++ b/openpower/configs/p9dsu_defconfig
@@ -42,7 +42,7 @@
 BR2_OPENPOWER_POWER9=y
 BR2_HOSTBOOT_CONFIG_FILE="p9dsu.config"
 BR2_OPENPOWER_MACHINE_XML_GITHUB_PROJECT_VALUE="p9dsu-xml"
-BR2_OPENPOWER_MACHINE_XML_VERSION="8ff7cebbaad6426e17706b7585300e63653a219e"
+BR2_OPENPOWER_MACHINE_XML_VERSION="1c5c5b43ace53371671ca189f7fae16fdf8fe3ed"
 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"
@@ -63,7 +63,5 @@
 BR2_PACKAGE_PETITBOOT_MTD=y
 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.6.0-64-g700b8962e5fe"
 BR2_PACKAGE_LOADKEYS=y
 BR2_IMA_CATALOG_DTS="POWER9"
diff --git a/openpower/configs/romulus_defconfig b/openpower/configs/romulus_defconfig
index 0618da7..6f1540a 100644
--- a/openpower/configs/romulus_defconfig
+++ b/openpower/configs/romulus_defconfig
@@ -60,7 +60,5 @@
 BR2_PACKAGE_PETITBOOT_MTD=y
 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.6.0-64-g700b8962e5fe"
 BR2_PACKAGE_LOADKEYS=y
 BR2_IMA_CATALOG_DTS="POWER9"
diff --git a/openpower/configs/witherspoon_defconfig b/openpower/configs/witherspoon_defconfig
index 86de04c..309fc03 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="c5e17e084a1eb057fe8ad41af886e1558a407dc0"
+BR2_OPENPOWER_MACHINE_XML_VERSION="d0f86cf46a99800c6f15a4e650701da141216940"
 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"
@@ -50,7 +50,6 @@
 BR2_OPENPOWER_PNOR_XML_LAYOUT_FILENAME="defaultPnorLayout_64.xml"
 BR2_OPENPOWER_CONFIG_NAME="witherspoon"
 BR2_OPENPOWER_PNOR_FILENAME="witherspoon.pnor"
-BR2_OPENPOWER_PNOR_UPDATE_FILENAME="witherspoon_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"
@@ -63,7 +62,5 @@
 BR2_PACKAGE_PETITBOOT_MTD=y
 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.6.0-64-g700b8962e5fe"
 BR2_PACKAGE_LOADKEYS=y
 BR2_IMA_CATALOG_DTS="POWER9"
diff --git a/openpower/configs/zaius_defconfig b/openpower/configs/zaius_defconfig
index ae98890..2657629 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="6843fceba8404c600782fec2dcdcaca604e48d05"
+BR2_OPENPOWER_MACHINE_XML_VERSION="500647235aab6e2bb5a24dd00baab59083461833"
 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"
@@ -62,7 +62,5 @@
 BR2_PACKAGE_PETITBOOT_MTD=y
 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.6.0-64-g700b8962e5fe"
 BR2_PACKAGE_LOADKEYS=y
 BR2_IMA_CATALOG_DTS="POWER9"
diff --git a/openpower/configs/zz_defconfig b/openpower/configs/zz_defconfig
index bbe29cb..afd6fc7 100644
--- a/openpower/configs/zz_defconfig
+++ b/openpower/configs/zz_defconfig
@@ -51,8 +51,6 @@
 # BR2_PACKAGE_HOST_P8_PORE_BINUTILS is not set
 # 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.6.0-64-g700b8962e5fe"
 BR2_PACKAGE_LOADKEYS=y
 # BR2_PACKAGE_HOST_PPE42_BINUTILS is not set
 # BR2_PACKAGE_HOST_PPE42_GCC is not set
diff --git a/openpower/package/hostboot/hostboot.mk b/openpower/package/hostboot/hostboot.mk
index ed4e725..83c9b80 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 ?= 0f8d0c0955cc2a3769961257f4d39495ef6eba56
+HOSTBOOT_VERSION_BRANCH_MASTER ?= 3608c1ff8cc3df658c095280e0dab8705a6be036
 
 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
deleted file mode 100644
index e2d052f..0000000
--- a/openpower/package/hostboot/p9Patches/hostboot-0010-Updates-to-HBRT-runtime-interfaces.patch
+++ /dev/null
@@ -1,419 +0,0 @@
-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
deleted file mode 100644
index 8d64244..0000000
--- a/openpower/package/hostboot/p9Patches/hostboot-0011-Revert-Handling-of-functional-NX-chiplet.patch
+++ /dev/null
@@ -1,240 +0,0 @@
-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/openpower-pnor/Config.in b/openpower/package/openpower-pnor/Config.in
index 438ea95..2328a04 100644
--- a/openpower/package/openpower-pnor/Config.in
+++ b/openpower/package/openpower-pnor/Config.in
@@ -67,11 +67,13 @@
 
 config BR2_WOFDATA_FILENAME
         string "Name of wofdata original file"
+        default "wof_output"
         help
             String used to define name of wofdata original file
 
 config BR2_WOFDATA_BINARY_FILENAME
         string "Name of wofdata binary file"
+        default "wofdata.bin.ecc"
         help
             String used to define name of wofdata binary ecc'd file
 
diff --git a/openpower/package/skiboot/Config.in b/openpower/package/skiboot/Config.in
index 0506983..fa8a8a3 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.6.0" if BR2_SKIBOOT_LATEST_VERSION
+	default "skiboot-5.6.0-87-ge835c2fb7ce1" if BR2_SKIBOOT_LATEST_VERSION
 	default BR2_SKIBOOT_CUSTOM_VERSION_VALUE \
 		if BR2_SKIBOOT_CUSTOM_VERSION
 
