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..ca84442 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"
@@ -50,7 +50,6 @@
 BR2_OPENPOWER_PNOR_XML_LAYOUT_FILENAME="defaultPnorLayout_64.xml"
 BR2_OPENPOWER_CONFIG_NAME="p9dsu"
 BR2_OPENPOWER_PNOR_FILENAME="p9dsu.pnor"
-BR2_OPENPOWER_PNOR_UPDATE_FILENAME="p9dsu_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/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/overlay/etc/init.d/S18lvm b/openpower/overlay/etc/init.d/S18lvm
new file mode 100755
index 0000000..043e846
--- /dev/null
+++ b/openpower/overlay/etc/init.d/S18lvm
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+case "$1" in
+	start)
+		logger "Scanning for LVM volumes"
+		/usr/sbin/vgscan
+		/usr/sbin/vgchange -ay
+		;;
+	stop)
+		logger "Stopping LVM volumes"
+		/usr/sbin/vgchange -an
+		;;
+	restart|force-reload)
+		;;
+esac
+
+exit 0
diff --git a/openpower/overlay/lib/udev/rules.d/10-dm.rules b/openpower/overlay/lib/udev/rules.d/10-dm.rules
new file mode 100644
index 0000000..f33df58
--- /dev/null
+++ b/openpower/overlay/lib/udev/rules.d/10-dm.rules
@@ -0,0 +1,150 @@
+# Copyright (C) 2009 Red Hat, Inc. All rights reserved.
+#
+# This file is part of LVM2.
+
+# Udev rules for device-mapper devices.
+#
+# These rules create a DM control node in /dev/mapper directory.
+# The rules also create nodes named dm-x (x is a number) in /dev
+# directory and symlinks to these nodes with names given by
+# the actual DM names. Some udev environment variables are set
+# for use in later rules:
+#   DM_NAME - actual DM device's name
+#   DM_UUID - UUID set for DM device (blank if not specified)
+#   DM_SUSPENDED - suspended state of DM device (0 or 1)
+#   DM_UDEV_RULES_VSN - DM udev rules version
+#
+# These rules cover only basic device-mapper functionality in udev.
+#
+# Various DM subsystems may contain further subsystem-specific rules
+# in 11-dm-<subsystem_name>.rules which should be installed together
+# with the DM subsystem and which extend these basic rules.
+# For example:
+#   11-dm-lvm.rules for LVM subsystem
+#   11-dm-mpath.rules for multipath subsystem (since version 0.6.0, recommended!)
+#
+# Even more specific rules may be required by subsystems so always
+# check subsystem's upstream repository for recent set of rules.
+# Also, keep in mind that recent rules may also require recent
+# subsystem-specific binaries.
+
+KERNEL=="device-mapper", NAME="mapper/control"
+
+SUBSYSTEM!="block", GOTO="dm_end"
+KERNEL!="dm-[0-9]*", GOTO="dm_end"
+
+
+# Device created, major and minor number assigned - "add" event generated.
+# Table loaded - no event generated.
+# Device resumed (or renamed) - "change" event generated.
+# Device removed - "remove" event generated.
+#
+# The dm-X nodes are always created, even on "add" event, we can't suppress
+# that (the node is created even earlier with devtmpfs). All the symlinks
+# (e.g. /dev/mapper) are created in right time after a device has its table
+# loaded and is properly resumed. For this reason, direct use of dm-X nodes
+# is not recommended.
+ACTION!="add|change", GOTO="dm_end"
+
+# Decode udev control flags and set environment variables appropriately.
+# These flags are encoded in DM_COOKIE variable that was introduced in
+# kernel version 2.6.31. Therefore, we can use this feature with
+# kernels >= 2.6.31 only. Cookie is not decoded for remove event.
+ENV{DM_COOKIE}=="?*", IMPORT{program}="/usr/sbin/dmsetup udevflags $env{DM_COOKIE}"
+
+# Rule out easy-to-detect inappropriate events first.
+ENV{DISK_RO}=="1", GOTO="dm_disable"
+
+# There is no cookie set nor any flags encoded in events not originating
+# in libdevmapper so we need to detect this and try to behave correctly.
+# For such spurious events, regenerate all flags from current udev database content
+# (this information would normally be inaccessible for spurious ADD and CHANGE events).
+ENV{DM_UDEV_PRIMARY_SOURCE_FLAG}=="1", ENV{DM_ACTIVATION}="1", GOTO="dm_flags_done"
+IMPORT{db}="DM_UDEV_DISABLE_DM_RULES_FLAG"
+IMPORT{db}="DM_UDEV_DISABLE_SUBSYSTEM_RULES_FLAG"
+IMPORT{db}="DM_UDEV_DISABLE_DISK_RULES_FLAG"
+IMPORT{db}="DM_UDEV_DISABLE_OTHER_RULES_FLAG"
+IMPORT{db}="DM_UDEV_LOW_PRIORITY_FLAG"
+IMPORT{db}="DM_UDEV_DISABLE_LIBRARY_FALLBACK_FLAG"
+IMPORT{db}="DM_UDEV_PRIMARY_SOURCE_FLAG"
+IMPORT{db}="DM_UDEV_FLAG7"
+IMPORT{db}="DM_UDEV_RULES_VSN"
+LABEL="dm_flags_done"
+
+# Normally, we operate on "change" events. But when coldplugging, there's an
+# "add" event present. We have to recognize this and do our actions in this
+# particular situation, too. Also, we don't want the nodes to be created
+# prematurely on "add" events while not coldplugging. We check
+# DM_UDEV_PRIMARY_SOURCE_FLAG to see if the device was activated correctly
+# before and if not, we ignore the "add" event totally. This way we can support
+# udev triggers generating "add" events (e.g. "udevadm trigger --action=add" or
+# "echo add > /sys/block/<dm_device>/uevent"). The trigger with "add" event is
+# also used at boot to reevaluate udev rules for all existing devices activated
+# before (e.g. in initrd). If udev is used in initrd, we require the udev init
+# script to not remove the existing udev database so we can reuse the information
+# stored at the time of device activation in the initrd.
+ACTION!="add", GOTO="dm_no_coldplug"
+ENV{DM_UDEV_RULES_VSN}!="1", ENV{DM_UDEV_PRIMARY_SOURCE_FLAG}!="1", GOTO="dm_disable"
+ENV{DM_ACTIVATION}="1"
+LABEL="dm_no_coldplug"
+
+# Putting it together, following table is used to recognize genuine and spurious events.
+# N.B. Spurious events are generated based on use of the WATCH udev
+# rule or by triggering an event manually by "udevadm trigger" call
+# or by "echo <event_name> > /sys/block/dm-X/uevent".
+#
+#        EVENT              DM_UDEV_PRIMARY_SOURCE_FLAG   DM_ACTIVATION
+# ======================================================================
+# add event (genuine)                  0                        0
+# change event (genuine)               1                        1
+# add event (spurious)
+#   |_ dev still not active            0                        0
+#   \_ dev already active              1                        1
+# change event (spurious)
+#   |_ dev still not active            0                        0
+#   \_ dev already active              1                        0
+
+# "dm" sysfs subdirectory is available in newer versions of DM
+# only (kernels >= 2.6.29). We have to check for its existence
+# and use dmsetup tool instead to get the DM name, uuid and 
+# suspended state if the "dm" subdirectory is not present.
+# The "suspended" item was added even later (kernels >= 2.6.31),
+# so we also have to call dmsetup if the kernel version used
+# is in between these releases.
+TEST=="dm", ENV{DM_NAME}="$attr{dm/name}", ENV{DM_UUID}="$attr{dm/uuid}", ENV{DM_SUSPENDED}="$attr{dm/suspended}"
+TEST!="dm", IMPORT{program}="/usr/sbin/dmsetup info -j %M -m %m -c --nameprefixes --noheadings --rows -o name,uuid,suspended"
+ENV{DM_SUSPENDED}!="?*", IMPORT{program}="/usr/sbin/dmsetup info -j %M -m %m -c --nameprefixes --noheadings --rows -o suspended"
+
+# dmsetup tool provides suspended state information in textual
+# form with values "Suspended"/"Active". We translate it to
+# 0/1 respectively to be consistent with sysfs values.
+ENV{DM_SUSPENDED}=="Active", ENV{DM_SUSPENDED}="0"
+ENV{DM_SUSPENDED}=="Suspended", ENV{DM_SUSPENDED}="1"
+
+# This variable provides a reliable way to check that device-mapper
+# rules were installed. It means that all needed variables are set
+# by these rules directly so there's no need to acquire them again
+# later. Other rules can alternate the functionality based on this
+# fact (e.g. fallback to rules that behave correctly even without
+# these rules installed). It also provides versioning for any
+# possible future changes.
+# VSN 1 - original rules
+# VSN 2 - add support for synthesized events
+ENV{DM_UDEV_RULES_VSN}="2"
+
+ENV{DM_UDEV_DISABLE_DM_RULES_FLAG}!="1", ENV{DM_NAME}=="?*", SYMLINK+="mapper/$env{DM_NAME}"
+
+# Avoid processing and scanning a DM device in the other (foreign)
+# rules if it is in suspended state. However, we still keep 'disk'
+# and 'DM subsystem' related rules enabled in this case.
+ENV{DM_SUSPENDED}=="1", ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}="1"
+
+GOTO="dm_end"
+
+LABEL="dm_disable"
+ENV{DM_UDEV_DISABLE_SUBSYSTEM_RULES_FLAG}="1"
+ENV{DM_UDEV_DISABLE_DISK_RULES_FLAG}="1"
+ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}="1"
+OPTIONS:="nowatch"
+
+LABEL="dm_end"
diff --git a/openpower/overlay/lib/udev/rules.d/11-dm-lvm.rules b/openpower/overlay/lib/udev/rules.d/11-dm-lvm.rules
new file mode 100644
index 0000000..16b80f9
--- /dev/null
+++ b/openpower/overlay/lib/udev/rules.d/11-dm-lvm.rules
@@ -0,0 +1,54 @@
+# Copyright (C) 2009 Red Hat, Inc. All rights reserved.
+#
+# This file is part of LVM2.
+
+# Udev rules for LVM.
+#
+# These rules create symlinks for LVM logical volumes in
+# /dev/VG directory (VG is an actual VG name). Some udev
+# environment variables are set (they can be used in later
+# rules as well):
+#   DM_LV_NAME - logical volume name
+#   DM_VG_NAME - volume group name
+#   DM_LV_LAYER - logical volume layer (blank if not set)
+
+# "add" event is processed on coldplug only!
+ACTION!="add|change", GOTO="lvm_end"
+ENV{DM_UDEV_RULES_VSN}!="?*", GOTO="lvm_end"
+ENV{DM_UUID}!="LVM-?*", GOTO="lvm_end"
+
+# Use DM name and split it up into its VG/LV/layer constituents.
+IMPORT{program}="/usr/sbin/dmsetup splitname --nameprefixes --noheadings --rows $env{DM_NAME}"
+
+# DM_SUBSYSTEM_UDEV_FLAG0 is the 'NOSCAN' flag for LVM subsystem.
+# This flag is used to temporarily disable selected rules to prevent any
+# processing or scanning done on the LVM volume before LVM has any chance
+# to zero any stale metadata found within the LV data area. Such stale
+# metadata could cause false claim of the LV device, keeping it open etc.
+#
+# If the NOSCAN flag is present, backup selected existing flags used to
+# disable rules, then set them firmly so those selected rules are surely skipped.
+# Restore these flags once the NOSCAN flag is dropped (which is normally any
+# uevent that follows for this LV, even an artificially generated one).
+ENV{DM_SUBSYSTEM_UDEV_FLAG0}=="1", ENV{DM_NOSCAN}="1", ENV{DM_DISABLE_OTHER_RULES_FLAG_OLD}="$env{DM_UDEV_DISABLE_OTHER_RULES_FLAG}", ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}="1"
+ENV{DM_SUBSYSTEM_UDEV_FLAG0}!="1", IMPORT{db}="DM_NOSCAN", IMPORT{db}="DM_DISABLE_OTHER_RULES_FLAG_OLD"
+ENV{DM_SUBSYSTEM_UDEV_FLAG0}!="1", ENV{DM_NOSCAN}=="1", ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}="$env{DM_DISABLE_OTHER_RULES_FLAG_OLD}", \
+				   ENV{DM_DISABLE_OTHER_RULES_FLAG_OLD}="", ENV{DM_NOSCAN}=""
+
+ENV{DM_UDEV_DISABLE_SUBSYSTEM_RULES_FLAG}=="1", GOTO="lvm_end"
+
+OPTIONS+="event_timeout=180"
+
+# Do not create symlinks for inappropriate subdevices.
+ENV{DM_LV_NAME}=="pvmove?*|?*_vorigin", GOTO="lvm_disable"
+ENV{DM_LV_LAYER}=="?*", GOTO="lvm_disable"
+
+# Create symlinks for top-level devices only.
+ENV{DM_VG_NAME}=="?*", ENV{DM_LV_NAME}=="?*", SYMLINK+="$env{DM_VG_NAME}/$env{DM_LV_NAME}", GOTO="lvm_end"
+
+LABEL="lvm_disable"
+ENV{DM_UDEV_DISABLE_DISK_RULES_FLAG}="1"
+ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}="1"
+OPTIONS:="nowatch"
+
+LABEL="lvm_end"
diff --git a/openpower/overlay/lib/udev/rules.d/13-dm-disk.rules b/openpower/overlay/lib/udev/rules.d/13-dm-disk.rules
new file mode 100644
index 0000000..9958cac
--- /dev/null
+++ b/openpower/overlay/lib/udev/rules.d/13-dm-disk.rules
@@ -0,0 +1,39 @@
+# Copyright (C) 2009 Red Hat, Inc. All rights reserved.
+#
+# This file is part of LVM2.
+
+# Udev rules for device-mapper devices.
+#
+# These rules create symlinks in /dev/disk directory.
+# Symlinks that depend on probing filesystem type,
+# label and uuid are created only if the device is not
+# suspended.
+
+# "add" event is processed on coldplug only!
+ACTION!="add|change", GOTO="dm_end"
+ENV{DM_UDEV_RULES_VSN}!="?*", GOTO="dm_end"
+ENV{DM_UDEV_DISABLE_DISK_RULES_FLAG}=="1", GOTO="dm_end"
+
+SYMLINK+="disk/by-id/dm-name-$env{DM_NAME}"
+ENV{DM_UUID}=="?*", SYMLINK+="disk/by-id/dm-uuid-$env{DM_UUID}"
+
+ENV{DM_SUSPENDED}=="1", GOTO="dm_end"
+ENV{DM_NOSCAN}=="1", GOTO="dm_watch"
+
+IMPORT{builtin}="blkid"
+ENV{DM_UDEV_LOW_PRIORITY_FLAG}=="1", OPTIONS="link_priority=-100"
+ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}"
+ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}"
+
+# Add inotify watch to track changes on this device.
+# Using the watch rule is not optimal - it generates a lot of spurious
+# and useless events whenever the device opened for read-write is closed.
+# The best would be to generete the event directly in the tool changing
+# relevant information so only relevant events will be processed
+# (like creating a filesystem, changing filesystem label etc.).
+#
+# But let's use this until we have something better...
+LABEL="dm_watch"
+OPTIONS+="watch"
+
+LABEL="dm_end"
diff --git a/openpower/overlay/lib/udev/rules.d/95-dm-notify.rules b/openpower/overlay/lib/udev/rules.d/95-dm-notify.rules
new file mode 100644
index 0000000..e6bb512
--- /dev/null
+++ b/openpower/overlay/lib/udev/rules.d/95-dm-notify.rules
@@ -0,0 +1,12 @@
+# Copyright (C) 2009 Red Hat, Inc. All rights reserved.
+#
+# This file is part of LVM2.
+
+# Udev rules for device-mapper devices.
+#
+# These rules are responsible for sending a notification to a process
+# waiting for completion of udev rules. The process is identified by
+# a cookie value sent within "change" and "remove" events (the cookie
+# value is set before by that process for every action requested).
+
+ENV{DM_COOKIE}=="?*", RUN+="/usr/sbin/dmsetup udevcomplete $env{DM_COOKIE}"
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
 
