diff --git a/openpower/package/Config.in b/openpower/package/Config.in
index 903e6cb..db8e455 100755
--- a/openpower/package/Config.in
+++ b/openpower/package/Config.in
@@ -1,6 +1,7 @@
 source "$BR2_EXTERNAL_OP_BUILD_PATH/package/openpower-ffs/Config.in"
 source "$BR2_EXTERNAL_OP_BUILD_PATH/package/hostboot/Config.in"
 source "$BR2_EXTERNAL_OP_BUILD_PATH/package/hostboot-p8/Config.in"
+source "$BR2_EXTERNAL_OP_BUILD_PATH/package/hostboot-p10/Config.in"
 source "$BR2_EXTERNAL_OP_BUILD_PATH/package/hostboot-binaries/Config.in"
 source "$BR2_EXTERNAL_OP_BUILD_PATH/package/openpower-mrw/Config.in"
 source "$BR2_EXTERNAL_OP_BUILD_PATH/package/common-p8-xml/Config.in"
@@ -9,8 +10,10 @@
 source "$BR2_EXTERNAL_OP_BUILD_PATH/package/petitboot/Config.in"
 source "$BR2_EXTERNAL_OP_BUILD_PATH/package/p8-pore-binutils/Config.in"
 source "$BR2_EXTERNAL_OP_BUILD_PATH/package/hcode/Config.in"
+source "$BR2_EXTERNAL_OP_BUILD_PATH/package/hcode-p10/Config.in"
 source "$BR2_EXTERNAL_OP_BUILD_PATH/package/occ/Config.in"
 source "$BR2_EXTERNAL_OP_BUILD_PATH/package/occ-p8/Config.in"
+source "$BR2_EXTERNAL_OP_BUILD_PATH/package/occ-p10/Config.in"
 source "$BR2_EXTERNAL_OP_BUILD_PATH/package/capp-ucode/Config.in"
 source "$BR2_EXTERNAL_OP_BUILD_PATH/package/skiboot/Config.in"
 source "$BR2_EXTERNAL_OP_BUILD_PATH/package/libflash/Config.in"
@@ -19,6 +22,7 @@
 source "$BR2_EXTERNAL_OP_BUILD_PATH/package/ppe42-gcc/Config.in"
 source "$BR2_EXTERNAL_OP_BUILD_PATH/package/ima-catalog/Config.in"
 source "$BR2_EXTERNAL_OP_BUILD_PATH/package/sbe/Config.in"
+source "$BR2_EXTERNAL_OP_BUILD_PATH/package/sbe-p10/Config.in"
 source "$BR2_EXTERNAL_OP_BUILD_PATH/package/sb-signing-utils/Config.in"
 source "$BR2_EXTERNAL_OP_BUILD_PATH/package/sb-signing-framework/Config.in"
 source "$BR2_EXTERNAL_OP_BUILD_PATH/package/ocmb-explorer-fw/Config.in"
diff --git a/openpower/package/hcode-p10/Config.in b/openpower/package/hcode-p10/Config.in
new file mode 100644
index 0000000..7e5fbeb
--- /dev/null
+++ b/openpower/package/hcode-p10/Config.in
@@ -0,0 +1,38 @@
+config BR2_PACKAGE_HCODE_P10
+        bool "hcode-p10"
+        default y if (BR2_OPENPOWER_PLATFORM && BR2_OPENPOWER_POWER10)
+        select BR2_CPP
+        help
+            Project to build the HCODE package for P10
+
+if BR2_PACKAGE_HCODE_P10
+
+config BR2_HCODE_INCLUDE_IONV
+        bool "Enables packaging of the NVIDIA GPU image into the final hw image"
+        default y
+        help
+            Boolean used to flag whether to include NVIDIA GPU binary
+
+choice
+	prompt "HCODE version"
+	default BR2_HCODE_P10_LATEST_VERSION
+
+config BR2_HCODE_P10_LATEST_VERSION
+	bool "Use latest HCODE P10 version"
+
+config BR2_HCODE_P10_CUSTOM_VERSION
+	bool "Custom HCODE P10 version"
+
+endchoice
+
+config BR2_HCODE_P10_CUSTOM_VERSION_VALUE
+	string "HCODE P10 version"
+	depends on BR2_HCODE_P10_CUSTOM_VERSION
+
+config BR2_HCODE_P10_VERSION
+	string
+	default "hw092119a.opmst" if BR2_HCODE_P10_LATEST_VERSION
+	default BR2_HCODE_P10_CUSTOM_VERSION_VALUE \
+		if BR2_HCODE_P10_CUSTOM_VERSION
+
+endif
diff --git a/openpower/package/hcode-p10/hcode-p10.mk b/openpower/package/hcode-p10/hcode-p10.mk
new file mode 100644
index 0000000..8d2a43e
--- /dev/null
+++ b/openpower/package/hcode-p10/hcode-p10.mk
@@ -0,0 +1,50 @@
+################################################################################
+#
+# HCODE for P10
+#
+################################################################################
+
+HCODE_P10_VERSION = $(call qstrip,$(BR2_HCODE_P10_VERSION))
+HCODE_P10_SITE = $(call github,open-power,hcode,$(HCODE_P10_VERSION))
+# TODO: Need to comment out above line and enable next two lines
+# once buildable P10 HCODE is available in GHE
+#HCODE_P10_SITE = https://github.ibm.com/open-power/hcode.git
+#HCODE_P10_SITE_METHOD=git
+HCODE_P10_LICENSE = Apache-2.0
+
+HCODE_P10_INSTALL_IMAGES = YES
+HCODE_P10_INSTALL_TARGET = NO
+
+HCODE_P10_DEPENDENCIES = host-binutils host-ppe42-gcc hostboot-binaries
+
+HW_IMAGE_BIN_PATH=output/images/hw_image
+
+# TODO: Customize next four lines for P10
+HW_IMAGE_BIN=p9n.hw_image.bin
+HCODE_IMAGE_BIN = p9n.ref_image.bin
+HW_AXONE_IMAGE_BIN=p9a.hw_image.bin
+HCODE_AXONE_IMAGE_BIN = p9a.ref_image.bin
+
+CROSS_COMPILER_PATH=$(PPE42_GCC_BIN)
+PPE_TOOL_PATH ?= $(CROSS_COMPILER_PATH)
+PPE_PREFIX    ?= $(PPE_TOOL_PATH)/bin/powerpc-eabi-
+
+HCODE_P10_ENV_VARS= CONFIG_FILE=$(BR2_EXTERNAL_OP_BUILD_PATH)/configs/hcode/$(BR2_HCODE_CONFIG_FILE) \
+	LD_LIBRARY_PATH=$(HOST_DIR)/usr/lib OPENPOWER_BUILD=1\
+	CROSS_COMPILER_PATH=$(PPE42_GCC_BIN) PPE_TOOL_PATH=$(CROSS_COMPILER_PATH) \
+	PPE_PREFIX=$(CROSS_COMPILER_PATH)/bin/powerpc-eabi- \
+	RINGFILEPATH=$(STAGING_DIR)/hostboot_binaries __EKB_PREFIX=$(CXXPATH) \
+	CONFIG_IONV_FILE_LOCATION=$(STAGING_DIR)/hostboot_binaries/$(BR2_HOSTBOOT_BINARY_IONV_FILENAME) \
+	CONFIG_INCLUDE_IONV=$(BR2_HCODE_INCLUDE_IONV)
+
+define HCODE_P10_INSTALL_IMAGES_CMDS
+	mkdir -p $(STAGING_DIR)/hcode
+	$(INSTALL) $(@D)/$(HW_IMAGE_BIN_PATH)/$(HW_IMAGE_BIN) $(STAGING_DIR)/hcode/$(HCODE_IMAGE_BIN)
+        $(INSTALL) $(@D)/$(HW_IMAGE_BIN_PATH)/$(HW_AXONE_IMAGE_BIN) $(STAGING_DIR)/hcode/$(HCODE_AXONE_IMAGE_BIN)
+endef
+
+define HCODE_P10_BUILD_CMDS
+		$(HCODE_ENV_VARS) bash -c 'cd $(@D) && source ./env.bash && $(MAKE) '
+endef
+
+$(eval $(generic-package))
diff --git a/openpower/package/hostboot-binaries/hostboot_binaries.mk b/openpower/package/hostboot-binaries/hostboot_binaries.mk
index 658c281..c8b2c13 100644
--- a/openpower/package/hostboot-binaries/hostboot_binaries.mk
+++ b/openpower/package/hostboot-binaries/hostboot_binaries.mk
@@ -55,5 +55,26 @@
 endef
 endif
 
+###################################
+# P10:
+ifeq ($(BR2_OPENPOWER_POWER10),y)
+
+# TODO: Update for P10
+NIMBUS_RING_FILE=p9n.hw.rings.bin
+NIMBUS_RING_OVERLAYS_FILE=p9n.hw.overlays.bin
+AXONE_RING_FILE=p9a.hw.rings.bin
+AXONE_RING_OVERLAYS_FILE=p9a.hw.overlays.bin
+
+define HOSTBOOT_BINARIES_INSTALL_IMAGES_CMDS
+     $(INSTALL) -D $(@D)/cvpd.bin  $(STAGING_DIR)/hostboot_binaries/cvpd.bin
+     $(INSTALL) -D $(@D)/gpu_gpe1.bin  $(STAGING_DIR)/hostboot_binaries/gpu_gpe1.bin
+     $(INSTALL) -D $(@D)/$(BR2_HOSTBOOT_BINARY_IONV_FILENAME)  $(STAGING_DIR)/hostboot_binaries/
+     $(INSTALL) -D $(@D)/$(BR2_HOSTBOOT_BINARY_SBEC_FILENAME) $(STAGING_DIR)/hostboot_binaries/
+     $(INSTALL) -D $(@D)/$(NIMBUS_RING_FILE)  $(STAGING_DIR)/hostboot_binaries/
+     $(INSTALL) -D $(@D)/$(NIMBUS_RING_OVERLAYS_FILE)  $(STAGING_DIR)/hostboot_binaries/
+     $(INSTALL) -D $(@D)/$(AXONE_RING_FILE)  $(STAGING_DIR)/hostboot_binaries/
+     $(INSTALL) -D $(@D)/$(AXONE_RING_OVERLAYS_FILE)  $(STAGING_DIR)/hostboot_binaries/
+endef
+endif
 
 $(eval $(generic-package))
diff --git a/openpower/package/hostboot-p10/0001-mrw-parser-initial-fixes.patch b/openpower/package/hostboot-p10/0001-mrw-parser-initial-fixes.patch
new file mode 100644
index 0000000..e014d7d
--- /dev/null
+++ b/openpower/package/hostboot-p10/0001-mrw-parser-initial-fixes.patch
@@ -0,0 +1,2216 @@
+From c69095d5359b800068c258819014f0bb684046f6 Mon Sep 17 00:00:00 2001
+From: Roland Veloz <rveloz@us.ibm.com>
+Date: Fri, 6 Sep 2019 13:52:32 -0500
+Subject: [PATCH] P10 MRW parsing: Changes to the parser scripts
+
+This commit deals with refactoring and modularizing the processMrw.pl
+and Targets.pm scripts.  This commit is not about the artifact that
+gets produced by these files but the act of parsing an MRW file.
+
+Change-Id: I359afeebd9aa00ec6db2857a03ba0d9684c0858e
+RTC: 215164
+---
+ src/usr/targeting/common/Targets.pm    |  637 +++++++++++------
+ src/usr/targeting/common/processMrw.pl | 1183 +++++++++++++++++++++-----------
+ 2 files changed, 1218 insertions(+), 602 deletions(-)
+
+diff --git a/src/usr/targeting/common/Targets.pm b/src/usr/targeting/common/Targets.pm
+index dfd65d6..fb0bcbb 100644
+--- a/src/usr/targeting/common/Targets.pm
++++ b/src/usr/targeting/common/Targets.pm
+@@ -91,10 +91,29 @@ my %maxInstance = (
+     "SMPGROUP"      => 8,
+     "OMIC"          => 6,
+ );
++
++#--------------------------------------------------
++# @brief The constructor for the object Target
++#--------------------------------------------------
+ sub new
+ {
+     my $class = shift;
+     my $self  = {
++        # The following data are associated with the
++        # user command line options
++        build           => "hb",  # default to HB
++        force           => 0,
++        serverwiz_file  => "",    # input xml file
++        serverwiz_dir   => "",    # directory of input xml file
++        debug           => 0,
++        system_config   => "",
++        output_file     => "",
++        version         => 0,
++        report          => 0,
++        run_self_test   => 0,     # run internal test
++
++        # The following data are associated with the
++        # xml itself
+         xml          => undef,
+         data         => undef,
+         targeting    => undef,
+@@ -103,13 +122,11 @@ sub new
+         UNIT_COUNTS  => undef,
+         huid_idx     => undef,
+         mru_idx      => undef,
+-        force        => 0,
+-        debug        => 0,
+-        version      => "",
+         xml_version  => 0,
+         errorsExist  => 0,
+         NUM_PROCS    => 0,
+         TOP_LEVEL    => "",
++        TOP_LEVEL_HANDLE    => undef,
+         TOPOLOGY     => undef,
+         report_log   => "",
+         vpd_num      => 0,
+@@ -388,6 +405,162 @@ sub storeGroups
+     }
+ }
+ 
++#--------------------------------------------------
++# @brief Initialize a handle to the target instance.
++#
++# @details This method locates where the target instance
++#          resides and caches it for fast retrieval.
++#
++# @post A handle to the target instance is cached or exit
++#       stating that the target instance cannot be found.
++#
++# @param [in] $self - The global target object.
++#--------------------------------------------------
++sub initializeTargetInstanceHandle
++{
++    my $self = shift;
++
++    if ( (!defined $self->{TARGET_INST_HANDLE}) ||
++         ($self->{TARGET_INST_HANDLE} eq "") )
++    {
++        # Find the location of where target instances reside
++        my $targetInstances = $self->{xml}->{'targetInstance'};
++        if (!defined $targetInstances)
++        {
++            # Check one more level for the target instances
++            $targetInstances = $self->{xml}->{'targetInstances'}
++                                           ->{'targetInstance'};
++        }
++
++        # If can't find the target instances, then state so and exit
++        if (!defined $targetInstances)
++        {
++            die "No target instances defined\n";
++        }
++
++        $self->setTargetInstanceHandle($targetInstances);
++    } # end if ( (!defined $self->{TARGET_INST_HANDLE}) ||  ...
++}
++
++#--------------------------------------------------
++# @brief Return a handle to the target instances.
++#
++# @details This method will initialize the target instances
++#          if has not been already initialized.
++#
++# @param [in] $self - The global target object.
++#
++# @return - A handle to the target instance.
++#--------------------------------------------------
++sub getTargetInstanceHandle
++{
++    my $self = shift;
++
++    # If handle to target instances is not already cached, then initialize it
++    if ( (!defined $self->{TARGET_INST_HANDLE}) ||
++         ($self->{TARGET_INST_HANDLE} eq "") )
++    {
++        $self->initializeTargetInstanceHandle();
++    }
++
++    return ($self->{TARGET_INST_HANDLE});
++}
++
++#--------------------------------------------------
++# @brief Set the target instance handle to the given target handle
++#
++# @param [in] $self - The global target object.
++# @param [in] $targetHndl - The value the target instance handle is set to.
++#--------------------------------------------------
++sub setTargetInstanceHandle
++{
++    my $self = shift;
++    my $targetHndl = shift;
++
++    # Dynamically create and cache a handle to the target instance
++    $self->{TARGET_INST_HANDLE} = $targetHndl;
++}
++
++#--------------------------------------------------
++# @brief Initialize the top level target.
++#
++# @details This method locate the top level target
++#          and cache it for fast retrieval.
++#
++# @post The top level target is cached or exit stating that
++#       top level target not found.
++#
++# @param [in] $self - The global target object.
++#--------------------------------------------------
++sub initalizeTopLevel
++{
++    my $self = shift;
++
++    # If the top level target instance has not been found and set,
++    # then find that target and set top level to it
++    if ((!defined $self->{TOP_LEVEL}) || ($self->{TOP_LEVEL} eq ""))
++    {
++        # Get a handle to the target instances
++        my $targetInstancesHandle = $self->getTargetInstanceHandle();
++
++        # Find the system target which is the top level target
++        foreach my $target (keys(%{$targetInstancesHandle}))
++        {
++            # If target is of type 'SYS' then we found the top level target
++            if ($targetInstancesHandle->{$target}->{attribute}
++                                      ->{TYPE}->{default} eq "SYS")
++            {
++                # Set the top level target and search no more
++                $self->setTopLevel($target);
++                # YOU SHALL NOT PASS!!!
++                last;
++            }
++        }
++
++        # If unable to find top level target, then state so and exit
++        if ((!defined $self->{TOP_LEVEL}) || ($self->{TOP_LEVEL} eq ""))
++        {
++            die "Unable to find system top level target\n";
++        }
++    } # end if ((!defined $self->{TOP_LEVEL}) || ($self->{TOP_LEVEL} eq ""))
++}
++
++#--------------------------------------------------
++# @brief Return the top level target.
++#
++# @details This method will initialize the top level
++#          target if has not been already initialized.
++#
++# @param [in] $self - The global target object.
++#
++# @return - The top level target.
++#--------------------------------------------------
++sub getTopLevel
++{
++    my $self = shift;
++
++    # If the top level target is not already cached, then initialize it
++    if ((!defined $self->{TOP_LEVEL}) || ($self->{TOP_LEVEL} eq ""))
++    {
++        $self->initalizeTopLevel();
++    }
++    return ($self->{TOP_LEVEL});
++}
++
++#--------------------------------------------------
++# @brief Set the top level target to the given target.
++#
++# @param [in] $self - The global target object.
++# @param [in] $target - The value the top level target is set to.
++#--------------------------------------------------
++sub setTopLevel
++{
++    my $self = shift;
++    my $target = shift;
++
++    $self->{TOP_LEVEL} = $target;
++}
++
+ ####################################################
+ ## build target hierarchy recursively
+ ##
+@@ -422,34 +595,23 @@ sub buildHierarchy
+     my $self   = shift;
+     my $target = shift;
+ 
+-    my $instance_path = $self->{data}->{INSTANCE_PATH};
+-    if (!defined $instance_path)
+-    {
+-        $instance_path = "";
+-    }
+-    my $baseptr = $self->{xml}->{'targetInstance'};
+-    if ($self->{xml_version} == 1)
+-    {
+-        $baseptr = $self->{xml}->{'targetInstances'}->{'targetInstance'};
+-    }
++    # Get a handle to the target instances
++    my $targetInstanceRef = $self->getTargetInstanceHandle();
++
++    # If caller did not provide a target, then use the top level target
+     if ($target eq "")
+     {
+-        ## find system target
+-        foreach my $t (keys(%{$baseptr}))
+-        {
+-            if ($baseptr->{$t}->{attribute}->{TYPE}->{default} eq "SYS")
+-            {
+-                $self->{TOP_LEVEL} = $t;
+-                $target = $t;
+-            }
+-        }
++        $target = $self->getTopLevel();
+     }
+-    if ($target eq "")
++
++    my $instance_path = $self->{data}->{INSTANCE_PATH};
++    if (!defined $instance_path)
+     {
+-        die "Unable to find system top level target\n";
++        $instance_path = "";
+     }
++
+     my $old_path        = $instance_path;
+-    my $target_xml      = $baseptr->{$target};
++    my $target_xml      = $targetInstanceRef->{$target};
+     my $affinity_target = $target;
+     my $key             = $instance_path . "/" . $target;
+ 
+@@ -466,7 +628,6 @@ sub buildHierarchy
+     $self->{data}->{INSTANCE_PATH} = $old_path . "/" . $target;
+ 
+     ## copy attributes
+-
+     foreach my $attribute (keys %{ $target_xml->{attribute} })
+     {
+         my $value = $target_xml->{attribute}->{$attribute}->{default};
+@@ -2448,192 +2609,6 @@ sub findDestConnections
+ 
+ }
+ 
+-sub setEepromAttributesForAxone
+-{
+-    my $self      = shift;
+-    my $targetObj = shift;
+-    # Expects ocmb target
+-    my $target    = shift;
+-
+-    my %connections;
+-    my $num=0;
+-
+-    my $eeprom_name = "EEPROM_VPD_PRIMARY_INFO";
+-    my $fapi_name = "FAPI_I2C_CONTROL_INFO";
+-    # SPD contains data for EEPROM_VPD_PRIMARY_INFO and FAPI_I2C_CONTROL_INFO
+-    # SPD is the child of ocmb's parent, so get ocmb's parent
+-    # then look for the SPD child
+-    # With the resulting info, we populate pmic0, pmic1, ocmb, and dimm
+-    my $target_parent = $self->getTargetParent($target);
+-
+-    # Need to store pmic targets because they get parsed before we
+-    # do calculations for engine, port, and muxBusSelector
+-    # pmics need these values, so we store them until we need them later
+-    my $address = 0;
+-    my @pmic_array;
+-    foreach my $child (@{ $self->getTargetChildren($target_parent) })
+-    {
+-        my $type = $self->getTargetType($child);
+-        if ($type eq "chip-spd-device")
+-        {
+-            my $offset = $self->getAttribute($child, "BYTE_ADDRESS_OFFSET");
+-            my $memory_size = $self->getAttribute($child, "MEMORY_SIZE_IN_KB");
+-            my $cycle_time = $self->getAttribute($child, "WRITE_CYCLE_TIME");
+-            my $page_size = $self->getAttribute($child, "WRITE_PAGE_SIZE");
+-
+-            # Populate EEPROM for ocmb
+-            $targetObj->setAttributeField($target, $eeprom_name, "byteAddrOffset",
+-                $offset);
+-            $targetObj->setAttributeField($target, $eeprom_name, "maxMemorySizeKB",
+-                $memory_size);
+-            $targetObj->setAttributeField($target, $eeprom_name, "writeCycleTime",
+-                $cycle_time);
+-            $targetObj->setAttributeField($target, $eeprom_name, "writePageSize",
+-                $page_size);
+-
+-            # Populate EEPROM for dimm
+-            $targetObj->setAttributeField($target_parent, $eeprom_name, "byteAddrOffset",
+-                $offset);
+-            $targetObj->setAttributeField($target_parent, $eeprom_name, "maxMemorySizeKB",
+-                $memory_size);
+-            $targetObj->setAttributeField($target_parent, $eeprom_name, "writeCycleTime",
+-                $cycle_time);
+-            $targetObj->setAttributeField($target_parent, $eeprom_name, "writePageSize",
+-                $page_size);
+-
+-            # spd only child is i2c-slave, which contains devAddr info
+-            foreach my $i2c_slave (@{ $self->getTargetChildren($child) })
+-            {
+-                $address = $self->getAttribute($i2c_slave, "I2C_ADDRESS");
+-                # Populate EEPROM for dimm
+-                $targetObj->setAttributeField($target_parent, $eeprom_name, "devAddr",
+-                    $address);
+-
+-                # Populate EEPROM for ocmb
+-                $targetObj->setAttributeField($target, $eeprom_name, "devAddr",
+-                    $address);
+-            }
+-        }
+-        elsif ($type eq "chip-vreg-generic")
+-        {
+-            push(@pmic_array, $child);
+-            foreach my $i2c_slave (@{ $self->getTargetChildren($child) })
+-            {
+-                $type = $self->getTargetType($i2c_slave);
+-                # pmic has child i2c_slave which contains the device address
+-                if ($type eq "unit-i2c-slave")
+-                {
+-                    $address = $self->getAttribute($i2c_slave, "I2C_ADDRESS");
+-
+-                    # Populate FAPI for pmic
+-                    $targetObj->setAttributeField($child, $fapi_name, "devAddr",
+-                        $address);
+-                    last;
+-                }
+-            }
+-        }
+-        elsif ($type eq "chip-ocmb")
+-        {
+-            foreach my $i2c_slave (@{ $self->getTargetChildren($child) })
+-            {
+-                # ocmb has multiple i2c-slaves, so we query with instance_name
+-                my $instance_name = $self->getInstanceName($i2c_slave);
+-                if ($instance_name eq "i2c-ocmb")
+-                {
+-                    $address = $self->getAttribute($i2c_slave, "I2C_ADDRESS");
+-
+-                    # Populate FAPI for ocmb
+-                    $targetObj->setAttributeField($target, $fapi_name, "devAddr",
+-                        $address);
+-                    last;
+-                }
+-            }
+-        }
+-    }
+-
+-    # Get data from i2c-master-omi, which connects to the i2c_mux PCA9847
+-    my $conn = $self->findConnectionsByDirection($target, "I2C", "", 1);
+-    if ($conn ne "")
+-    {
+-        # There exists multiple i2c bus connections with chip-ocmb
+-        # They are all the same connections so we just take the first one
+-        # The mux channel has the i2cMuxBusSelector
+-        my $conn_source = @{$conn->{CONN}}[0]->{SOURCE};
+-        my $mux = $self->getAttribute($conn_source, "MUX_CHANNEL");
+-
+-        # Parent PCA9848 determines the mux path
+-        my $parent = $self->getTargetParent($conn_source);
+-        my $parent_pos = $self->getAttribute($parent, "POSITION");
+-        my $i2c_mux_path = "physical:sys-0/node-0/i2c_mux-$parent_pos";
+-
+-        # pmics and ocmb all grab FRU_ID from parent dimm
+-        my $fru = $self->getAttribute($target_parent, "FRU_ID");
+-
+-        my $master_i2c = $self->findConnectionsByDirection($self->getTargetParent($conn_source), "I2C", "", 1);
+-        if ($master_i2c ne "")
+-        {
+-            # There exists multiple i2c bus connections with the PCA9847 i2c_mux
+-            # They are all the same connections so we just take the first one
+-            $master_i2c = @{$master_i2c->{CONN}}[0];
+-            # i2c-master-omi source which has data we need
+-            my $source = $master_i2c->{SOURCE};
+-            my $dest = $master_i2c->{DEST};
+-            my $engine = $self->getAttribute($source, "I2C_ENGINE");
+-            my $port = $self->getAttribute($source, "I2C_PORT");
+-
+-            # Populate FAPI for ocmb
+-            $self->setAttributeField($target, $fapi_name, "engine",
+-                $engine);
+-            $self->setAttributeField($target, $fapi_name, "port",
+-                $port);
+-            $self->setAttributeField($target, $fapi_name, "i2cMuxBusSelector",
+-                $mux);
+-            $self->setAttributeField($target, $fapi_name, "i2cMuxPath",
+-                $i2c_mux_path);
+-            $self->setAttribute($target, "FRU_ID",
+-                $fru);
+-
+-            # Populate EEPROM for ocmb
+-            $self->setAttributeField($target, $eeprom_name, "i2cMuxPath",
+-                $i2c_mux_path);
+-            $self->setAttributeField($target, $eeprom_name, "engine",
+-                $engine);
+-            $self->setAttributeField($target, $eeprom_name, "port",
+-                $port);
+-            $self->setAttributeField($target, $eeprom_name, "i2cMuxBusSelector",
+-                $mux);
+-
+-
+-            # Populate FAPI for pmics
+-            foreach my $pmic (@pmic_array)
+-            {
+-                $self->setAttributeField($pmic, $fapi_name, "engine",
+-                    $engine);
+-                $self->setAttributeField($pmic, $fapi_name, "port",
+-                    $port);
+-                $self->setAttributeField($pmic, $fapi_name, "i2cMuxBusSelector",
+-                    $mux);
+-                $self->setAttributeField($pmic, $fapi_name, "i2cMuxPath",
+-                    $i2c_mux_path);
+-                $self->setAttribute($pmic, "FRU_ID",
+-                    $fru);
+-            }
+-
+-            # Populate EEPROM for dimm
+-            $self->setAttributeField($target_parent, $eeprom_name, "engine",
+-                $engine);
+-            $self->setAttributeField($target_parent, $eeprom_name, "port",
+-                $port);
+-            $self->setAttributeField($target_parent, $eeprom_name, "i2cMuxBusSelector",
+-                $mux);
+-            $self->setAttributeField($target_parent, $eeprom_name, "i2cMuxPath",
+-                $i2c_mux_path);
+-            $self->setAttribute($target_parent, "FRU_ID",
+-                $fru);
+-        }
+-    }
+-}
+-
+ # Find connections from/to $target (and it's children)
+ # $to_this_target indicates the direction to find.
+ sub findConnectionsByDirection
+@@ -2792,6 +2767,41 @@ sub getTargetType
+     return $target_ptr->{TARGET}->{type};
+ }
+ 
++
++#--------------------------------------------------
++# @brief Checks the given target for given attribute
++#
++# @details Will check the target for the given attribute.
++#          If attribute does not exist for target then
++#          return 0 (false), else if attribute does exist
++#          for target then return 1 (true).  This methods
++#          does not check the validity of the attribute
++#          or it's value.
++#
++# @param [in] $self - The global target object.
++# @param [in] $target - target to locate attribute on
++# @param [in] $attribut - attribute to locate
++#
++# @return true if attribute found, else false
++#--------------------------------------------------
++sub doesAttributeExistForTarget
++{
++    my $self       = shift;
++    my $target     = shift;
++    my $attribute  = shift;
++
++    my $target_ptr = $self->getTarget($target);
++
++    # If can't locate attribute for target then return back 0 (false)
++    if (!defined($target_ptr->{ATTRIBUTES}->{$attribute}))
++    {
++        return 0;
++    }
++
++    # Attribute for target was found, return back 1 (true)
++    return 1;
++}
++
+ ## checks if attribute is value
+ ## must be defined and have a non-empty value
+ sub isBadAttribute
+@@ -2818,6 +2828,7 @@ sub isBadAttribute
+     {
+         return 1;
+     }
++
+     return 0;
+ }
+ 
+@@ -2864,6 +2875,7 @@ sub getAttribute
+     my $target     = shift;
+     my $attribute  = shift;
+     my $target_ptr = $self->getTarget($target);
++
+     if (!defined($target_ptr->{ATTRIBUTES}->{$attribute}->{default}))
+     {
+         printf("ERROR: getAttribute(%s,%s) | Attribute not defined\n",
+@@ -3296,6 +3308,207 @@ sub writeReportFile
+     close R;
+ }
+ 
++#--------------------------------------------------
++# @brief Populates the EEPROM attributes for DDIMS
++#
++# @param [in] $self - The global target object.
++# @param [in] $target - An OCMB target
++#--------------------------------------------------
++sub setEepromAttributesForDDIMs
++{
++    my $self      = shift;
++    my $target    = shift;  # Expects ocmb target
++
++    my %connections;
++    my $num=0;
++
++    my $eeprom_name = "EEPROM_VPD_PRIMARY_INFO";
++    my $fapi_name = "FAPI_I2C_CONTROL_INFO";
++    # SPD contains data for EEPROM_VPD_PRIMARY_INFO and FAPI_I2C_CONTROL_INFO
++    # SPD is the child of ocmb's parent, so get ocmb's parent
++    # then look for the SPD child
++    # With the resulting info, we populate pmic0, pmic1, ocmb, and dimm
++    my $target_parent = $self->getTargetParent($target);
++
++    # Need to store pmic targets because they get parsed before we
++    # do calculations for engine, port, etc
++    # pmics need these values, so we store them until we need them later
++    my $address = 0;
++    my @pmic_array;
++    foreach my $child (@{ $self->getTargetChildren($target_parent) })
++    {
++        my $type = $self->getTargetType($child);
++        if ($type eq "chip-spd-device")
++        {
++            my $offset = $self->getAttribute($child, "BYTE_ADDRESS_OFFSET");
++            my $memory_size = $self->getAttribute($child, "MEMORY_SIZE_IN_KB");
++            my $cycle_time = $self->getAttribute($child, "WRITE_CYCLE_TIME");
++            my $page_size = $self->getAttribute($child, "WRITE_PAGE_SIZE");
++
++            # Populate EEPROM for ocmb
++            $self->setAttributeField($target, $eeprom_name, "byteAddrOffset",
++                $offset);
++            $self->setAttributeField($target, $eeprom_name, "maxMemorySizeKB",
++                $memory_size);
++            $self->setAttributeField($target, $eeprom_name, "writeCycleTime",
++                $cycle_time);
++            $self->setAttributeField($target, $eeprom_name, "writePageSize",
++                $page_size);
++
++            # Populate EEPROM for dimm
++            $self->setAttributeField($target_parent, $eeprom_name, "byteAddrOffset",
++                $offset);
++            $self->setAttributeField($target_parent, $eeprom_name, "maxMemorySizeKB",
++                $memory_size);
++            $self->setAttributeField($target_parent, $eeprom_name, "writeCycleTime",
++                $cycle_time);
++            $self->setAttributeField($target_parent, $eeprom_name, "writePageSize",
++                $page_size);
++
++            # spd only child is i2c-slave, which contains devAddr info
++            foreach my $i2c_slave (@{ $self->getTargetChildren($child) })
++            {
++                $address = $self->getAttribute($i2c_slave, "I2C_ADDRESS");
++                # Populate EEPROM for dimm
++                $self->setAttributeField($target_parent, $eeprom_name, "devAddr",
++                    $address);
++
++                # Populate EEPROM for ocmb
++                $self->setAttributeField($target, $eeprom_name, "devAddr",
++                    $address);
++            }
++        } # end if ($type eq "chip-spd-device") ...
++        elsif ($type eq "chip-vreg-generic")
++        {
++            push(@pmic_array, $child);
++            foreach my $i2c_slave (@{ $self->getTargetChildren($child) })
++            {
++                $type = $self->getTargetType($i2c_slave);
++                # pmic has child i2c_slave which contains the device address
++                if ($type eq "unit-i2c-slave")
++                {
++                    $address = $self->getAttribute($i2c_slave, "I2C_ADDRESS");
++
++                    # Populate FAPI for pmic
++                    $self->setAttributeField($child, $fapi_name, "devAddr",
++                        $address);
++                    last;
++                }
++            }
++        } # end elsif ($type eq "chip-vreg-generic")
++        elsif ($type eq "chip-ocmb")
++        {
++            foreach my $i2c_slave (@{ $self->getTargetChildren($child) })
++            {
++                # ocmb has multiple i2c-slaves, so we query with instance_name
++                my $instance_name = $self->getInstanceName($i2c_slave);
++                if ($instance_name eq "i2c-ocmb")
++                {
++                    $address = $self->getAttribute($i2c_slave, "I2C_ADDRESS");
++
++                    # Populate FAPI for ocmb
++                    $self->setAttributeField($target, $fapi_name, "devAddr",
++                        $address);
++                    last;
++                }
++            }
++        } # end elsif ($type eq "chip-ocmb")
++    } # end foreach my $child ...
++
++        # Get data from i2c-master-omi, which connects to the i2c_mux PCA9847
++    my $conn = $self->findConnectionsByDirection($target, "I2C", "", 1);
++    if ($conn ne "")
++    {
++        # There exists multiple i2c bus connections with chip-ocmb
++        # They are all the same connections so we just take the first one
++        # The mux channel has the i2cMuxBusSelector
++        my $conn_source = @{$conn->{CONN}}[0]->{SOURCE};
++# TODO FIX ROLAND
++# Will fix later in the process
++# ROLAND causing errors:
++# ERROR: getAttribute(/sys-0/node-0/nisqually-0/proc_socket-0/godel-0/power10-0/i2c-master-op3b,MUX_CHANNEL) | Attribute not defined
++# I only found MUX_CHANNEL on attributes /sys-0/node-0/nisqually-0/PCA9849-[0-7]/PCA9849.i2cm-[0..3]
++#
++#        my $mux = $self->getAttribute($conn_source, "MUX_CHANNEL");
++        my $mux = 0;
++
++        # Parent PCA9848 determines the mux path
++        my $parent = $self->getTargetParent($conn_source);
++        my $parent_pos = $self->getAttribute($parent, "POSITION");
++        my $i2c_mux_path = "physical:sys-0/node-0/i2c_mux-$parent_pos";
++
++        # pmics and ocmb all grab FRU_ID from parent dimm
++        my $fru = $self->getAttribute($target_parent, "FRU_ID");
++
++        my $master_i2c = $self->findConnectionsByDirection($self->getTargetParent($conn_source), "I2C", "", 1);
++        if ($master_i2c ne "")
++        {
++            # There exists multiple i2c bus connections with the PCA9847 i2c_mux
++            # They are all the same connections so we just take the first one
++            $master_i2c = @{$master_i2c->{CONN}}[0];
++            # i2c-master-omi source which has data we need
++            my $source = $master_i2c->{SOURCE};
++            my $dest = $master_i2c->{DEST};
++            my $engine = $self->getAttribute($source, "I2C_ENGINE");
++            my $port = $self->getAttribute($source, "I2C_PORT");
++
++            # Populate FAPI for ocmb
++            $self->setAttributeField($target, $fapi_name, "engine",
++                $engine);
++            $self->setAttributeField($target, $fapi_name, "port",
++                $port);
++            $self->setAttributeField($target, $fapi_name, "i2cMuxBusSelector",
++                $mux);
++            $self->setAttributeField($target, $fapi_name, "i2cMuxPath",
++                $i2c_mux_path);
++            $self->setAttribute($target, "FRU_ID",
++                $fru);
++
++            # Populate EEPROM for ocmb
++            $self->setAttributeField($target, $eeprom_name, "i2cMuxPath",
++                $i2c_mux_path);
++            $self->setAttributeField($target, $eeprom_name, "engine",
++                $engine);
++            $self->setAttributeField($target, $eeprom_name, "port",
++                $port);
++            $self->setAttributeField($target, $eeprom_name, "i2cMuxBusSelector",
++                $mux);
++
++            # Populate FAPI for pmics
++            foreach my $pmic (@pmic_array)
++            {
++                $self->setAttributeField($pmic, $fapi_name, "engine",
++                    $engine);
++                $self->setAttributeField($pmic, $fapi_name, "port",
++                    $port);
++                $self->setAttributeField($pmic, $fapi_name, "i2cMuxBusSelector",
++                    $mux);
++                $self->setAttributeField($pmic, $fapi_name, "i2cMuxPath",
++                    $i2c_mux_path);
++                $self->setAttribute($pmic, "FRU_ID",
++                    $fru);
++            }
++
++            # Populate EEPROM for dimm
++            $self->setAttributeField($target_parent, $eeprom_name, "engine",
++                $engine);
++            $self->setAttributeField($target_parent, $eeprom_name, "port",
++                $port);
++            $self->setAttributeField($target_parent, $eeprom_name, "i2cMuxBusSelector",
++                $mux);
++            $self->setAttributeField($target_parent, $eeprom_name, "i2cMuxPath",
++                $i2c_mux_path);
++            $self->setAttribute($target_parent, "FRU_ID",
++                $fru);
++        } # end if ($master_i2c  ne "")
++    } # end if ($conn ne "")
++}
++
++#--------------------------------------------------
++# @brief The end of the executable elements of this PERL module
++#
++# @details Don't forget to return the true value from this file
++#--------------------------------------------------
+ 1;
+ 
+ =head1 NAME
+diff --git a/src/usr/targeting/common/processMrw.pl b/src/usr/targeting/common/processMrw.pl
+index 7a63791..cd84b14 100755
+--- a/src/usr/targeting/common/processMrw.pl
++++ b/src/usr/targeting/common/processMrw.pl
+@@ -24,6 +24,9 @@
+ #
+ # IBM_PROLOG_END_TAG
+ 
++###############################################################################
++# Include these libraries
++###############################################################################
+ use strict;
+ use XML::Simple;
+ use Data::Dumper;
+@@ -32,112 +35,168 @@ use Math::BigInt;
+ use Getopt::Long;
+ use File::Basename;
+ 
+-use constant HZ_PER_KHZ=>1000;
+-use constant MAX_MCS_PER_PROC => 4; # 4 MCS per Nimbus
+ 
++###############################################################################
++# Define some global constants
++###############################################################################
+ my $VERSION = "1.0.0";
++my $targetObj = Targets->new;
+ 
+-my $force           = 0;
+-my $serverwiz_file  = "";
+-my $version         = 0;
+-my $debug           = 0;
+-my $report          = 0;
+-my $sdr_file        = "";
+-my $build           = "hb";
+-my $system_config   = "";
+-my $output_filename = "";
+-
+-# Map the OMI instance to its corresponding OMIC parent
+-my %omi_map         = (4  => "omic-0",
+-                       5  => "omic-0",
+-                       6  => "omic-0",
+-                       7  => "omic-1",
+-                       2  => "omic-1",
+-                       3  => "omic-1",
+-                       0  => "omic-2",
+-                       1  => "omic-2",
+-                       12 => "omic-0",
+-                       13 => "omic-0",
+-                       14 => "omic-0",
+-                       15 => "omic-1",
+-                       10 => "omic-1",
+-                       11 => "omic-1",
+-                       8  => "omic-2",
+-                       9  => "omic-2");
++# Define a true an false keyword
++use constant { true => 1, false => 0 };
++
++use constant HZ_PER_KHZ=>1000;
++use constant MAX_MCS_PER_PROC => 4; # 4 MCS per Nimbus
+ 
+ # TODO RTC:170860 - Remove this after dimm connector defines VDDR_ID
+-my $num_voltage_rails_per_proc = 1;
+-
+-GetOptions(
+-    "build=s" => \$build,
+-    "f"   => \$force,             # numeric
+-    "x=s" => \$serverwiz_file,    # string
+-    "d"   => \$debug,
+-    "c=s" => \$system_config,      #string
+-    "o=s" => \$output_filename,   #string
+-    "v"   => \$version,
+-    "r"   => \$report,
+-  )                               # flag
+-  or printUsage();
+-
+-if ($version == 1)
+-{
+-    die "\nprocessMrw.pl\tversion $VERSION\n";
+-}
++my $NUM_VOLTAGE_RAILS_PER_PROC = 1;
+ 
+-if ($serverwiz_file eq "")
+-{
+-    printUsage();
+-}
++## Used to setup GPU sensors on processors
++# key: OBUS slot target,
++# value: (GPU#, Function, Temp, MemTemp IPMI name/ids,
++my %GPU_SENSORS;
+ 
+-$XML::Simple::PREFERRED_PARSER = 'XML::Parser';
++# key: OBUS slot string
++# value: processor target string
++my %SLOT_TO_PROC;
+ 
+-my $targetObj = Targets->new;
+-if ($force == 1)
++our %hwsvmrw_plugins;
++
++###############################################################################
++# The starting point for this script
++###############################################################################
++main($targetObj);
++
++sub main
+ {
+-    $targetObj->{force} = 1;
++    my $targetObj = shift;
++
++    # Extract the caller's options off the command and validate.
++    # Will exit if options are not valid.
++    getAndValidateCallerInputOptions();
++
++
++    # Run tests if asked to do so
++    if ($targetObj->{run_self_test} == 1)
++    {
++        runTests($targetObj);
++        return 0;
++    }
++
++    # Load the XML and process the file, extracting targets and associating
++    # attributes, with their data, to the targets
++    loadXmlFile();
++
++    if ($targetObj->{build} eq "fsp")
++    {
++        doFspBuild();
++    }
++
++    # Process the targets - set some needed attribute values
++    processTargets();
++
++    # Check for errors in the targets
++    errorCheckTheTargets($targetObj);
++
++    # Write the results of processing the targets to an XML file
++    writeResultsToXml($targetObj);
+ }
+-if ($debug == 1)
++
++###############################################################################
++# Supporting subroutines
++###############################################################################
++#--------------------------------------------------
++# @brief Extract caller's command line options
++#
++# @details Extract caller's command line options and
++#          validate them.  If valid then store in the
++#          global Target object for easy retrieval.
++#          If options are not valid, then print
++#          usage statement and exit script.
++#--------------------------------------------------
++sub getAndValidateCallerInputOptions
+ {
+-    $targetObj->{debug} = 1;
+-}
++    # Local variables, and their defaults, to cache the command line options to
++    my $build           = "hb";
++    my $force           = 0;
++    my $serverwiz_file  = "";
++    my $debug           = 0;
++    my $system_config   = "";
++    my $output_file     = "";
++    my $version         = 0;
++    my $report          = 0;
++    my $run_self_test   = 0;
++
++    # Grab the user's command line options.  If options not recognized
++    # print usage statement and exit script.
++    GetOptions(
++        "build=s" => \$build,      # string
++        "f"   => \$force,          # numeric
++        "x=s" => \$serverwiz_file, # string
++        "d"   => \$debug,          # flag
++        "c=s" => \$system_config,  # string
++        "o=s" => \$output_file,    # string
++        "v"   => \$version,        # flag
++        "r"   => \$report,         # flag
++        "t"   => \$run_self_test,  # flag
++      )
++      or printUsage();
++
++    # Display current version of file
++    if ($version == 1)
++    {
++        die "\nprocessMrw.pl\tversion $VERSION\n";
++    }
++
++    # If caller did not specify an input file, then print usage and die
++    if ($serverwiz_file eq "")
++    {
++        printUsage();
++    }
++
++    # Save the caller's input options to global storage for easy retrieval
++    $targetObj->{build} = $build;
++    $targetObj->{force} = $force;
++    $targetObj->{serverwiz_file} = $serverwiz_file;
++    $targetObj->{serverwiz_dir} = dirname($serverwiz_file);
++    $targetObj->{debug} = $debug;
++    $targetObj->{system_config} = $system_config;
++    $targetObj->{output_file} = $output_file;
++    $targetObj->setVersion($VERSION);
++    $targetObj->{report} = $report;
++    $targetObj->{run_self_test} = $run_self_test;
++
++} # end getAndValidateCallerInputOptions
++
++# loadXmlFile
++sub loadXmlFile
++{
++    $XML::Simple::PREFERRED_PARSER = 'XML::Parser';
++    $targetObj->loadXML($targetObj->{serverwiz_file});
+ 
+-$targetObj->setVersion($VERSION);
+-my $xmldir = dirname($serverwiz_file);
+-$targetObj->loadXML($serverwiz_file);
++    my $str=sprintf(
++        " %30s | %10s | %6s | %4s | %9s | %4s | %4s | %4s | %10s | %s\n",
++        "Sensor Name","FRU Name","Ent ID","Type","Evt Type","ID","Inst","FRU",
++        "HUID","Target");
++
++    $targetObj->writeReport($str);
++    my $str=sprintf(
++        " %30s | %10s | %6s | %4s | %9s | %4s | %4s | %4s | %10s | %s\n",
++        "------------------------------","----------",
++        "------","----","---------","----","----","----","----------",
++        "----------");
++
++    $targetObj->writeReport($str);
++} # end loadXmlFile
+ 
+-our %hwsvmrw_plugins;
+ # FSP-specific functions
+-if ($build eq "fsp")
++sub doFspBuild
+ {
+     eval ("use processMrw_fsp; return 1;");
+     processMrw_fsp::return_plugins();
+-}
+-
+-my $str=sprintf(
+-    " %30s | %10s | %6s | %4s | %9s | %4s | %4s | %4s | %10s | %s\n",
+-    "Sensor Name","FRU Name","Ent ID","Type","Evt Type","ID","Inst","FRU",
+-    "HUID","Target");
++} # end doFspBuild
+ 
+-$targetObj->writeReport($str);
+-my $str=sprintf(
+-    " %30s | %10s | %6s | %4s | %9s | %4s | %4s | %4s | %10s | %s\n",
+-    "------------------------------","----------",
+-    "------","----","---------","----","----","----","----------",
+-    "----------");
+-
+-$targetObj->writeReport($str);
+-
+-########################
+-## Used to setup GPU sensors on processors
+-my %G_gpu_sensors;
+-# key: obusslot target,
+-# value: (GPU#, Function, Temp, MemTemp IPMI name/ids,
+ 
+-my %G_slot_to_proc;
+-# key: obusslot string
+-# value: processor target string
+-#########################
+ 
+ # convert a number string into a bit-position number
+ # example:  "0x02" -->  0b0100 = 4
+@@ -151,7 +210,7 @@ sub numToBitPositionNum
+     return $newNum;
+ }
+ 
+-# Used to populate G_gpu_sensors hash of array references
++# Used to populate GPU_SENSORS hash of array references
+ #
+ # Each array reference will be composed of 3 sensors +
+ # board cfg ID which together makes up a GPU.
+@@ -167,7 +226,7 @@ sub addSensorToGpuSensors
+     my $GPU_SENSORS_TEMP_OFFSET = 2;
+     my $GPU_SENSORS_MEM_TEMP_OFFSET = 4;
+ 
+-    my $rSensorArray = $G_gpu_sensors{$obusslot_str};
++    my $rSensorArray = $GPU_SENSORS{$obusslot_str};
+     unless ($rSensorArray) {
+         $rSensorArray = [ "0xFFFF","0xFF","0xFFFF","0xFF",
+                           "0xFFFF","0xFF","0x00" ];
+@@ -192,11 +251,11 @@ sub addSensorToGpuSensors
+         $rSensorArray->[$GPU_SENSORS_TEMP_OFFSET+1] = $sensorID;
+     }
+ 
+-    $G_gpu_sensors{$obusslot_str} = $rSensorArray;
++    $GPU_SENSORS{$obusslot_str} = $rSensorArray;
+ }
+ 
+ 
+-# Populates the G_slot_to_proc hash and updates the cfgID in G_gpu_sensors
++# Populates the SLOT_TO_PROC hash and updates the cfgID in GPU_SENSORS
+ # This is how we map the obusslot to the GPU sensors
+ sub addObusCfgToGpuSensors
+ {
+@@ -205,14 +264,14 @@ sub addObusCfgToGpuSensors
+ 
+     my $foundSlot = 0;
+ 
+-    $G_slot_to_proc{$obusslot_str} = $proc_target;
++    $SLOT_TO_PROC{$obusslot_str} = $proc_target;
+ 
+-    foreach my $obusslot (keys %G_gpu_sensors)
++    foreach my $obusslot (keys %GPU_SENSORS)
+     {
+         if ($obusslot =~ m/$obusslot_str/)
+         {
+             # Add in the cfg number
+-            my $rSensorArray = $G_gpu_sensors{$obusslot_str};
++            my $rSensorArray = $GPU_SENSORS{$obusslot_str};
+             $rSensorArray->[$GPU_SENSORS_OBUS_CFG_OFFSET] =
+                  sprintf("0x%02X",
+                         (oct($rSensorArray->[$GPU_SENSORS_OBUS_CFG_OFFSET]) |
+@@ -225,10 +284,10 @@ sub addObusCfgToGpuSensors
+     {
+         print STDOUT sprintf("%s:%d ", __FILE__,__LINE__);
+         print STDOUT "Found obus slot ($obusslot_str - processor $proc_target)".
+-                     " not in G_gpu_sensors hash\n";
++                     " not in GPU_SENSORS hash\n";
+ 
+         my $cfg_bit_num = numToBitPositionNum($cfg);
+-        $G_gpu_sensors{$obusslot_str} =
++        $GPU_SENSORS{$obusslot_str} =
+             ["0xFFFF","0xFF","0xFFFF","0xFF","0xFFFF",
+              "0xFF", sprintf("0x02X",oct($cfg_bit_num))];
+     }
+@@ -273,17 +332,207 @@ sub isMultiTpmSystem
+ }
+ 
+ #--------------------------------------------------
+-## loop through all targets and do stuff
+-my @targets = sort keys %{ $targetObj->getAllTargets() };
+-my $isMultiTpmSys = isMultiTpmSystem(\@targets);
+-foreach my $target (@targets)
++# @brief Loop through all targets and set attributes as needed
++#
++# @param [in] $targetObj - The global target object.
++#--------------------------------------------------
++sub processTargets
++{
++    my @targets = sort keys %{ $targetObj->getAllTargets() };
++    my $isMultiTpmSys = isMultiTpmSystem(\@targets);
++    foreach my $target (@targets)
++{
++        my $type = $targetObj->getType($target);
++        if ($type eq "SYS")
++        {
++            processSystem($targetObj, $target);
++
++            my $maxComputeNodes  = get_max_compute_nodes($targetObj , $target);
++            $targetObj->setAttribute($target, "MAX_COMPUTE_NODES_PER_SYSTEM", $maxComputeNodes);
++
++            #handle enumeration changes
++            my $enum_val = $targetObj->getAttribute($target,"PROC_FABRIC_PUMP_MODE");
++            if ( $enum_val =~ /MODE1/i)
++            {
++                $targetObj->setAttribute($target,"PROC_FABRIC_PUMP_MODE","CHIP_IS_NODE");
++            }
++            elsif ( $enum_val =~ /MODE2/i)
++            {
++                $targetObj->setAttribute($target,"PROC_FABRIC_PUMP_MODE","CHIP_IS_GROUP");
++            }
++        }
++        elsif ($type eq "PROC")
++        {
++            processProcessor($targetObj, $target);
++            if ($targetObj->{build} eq "fsp")
++            {
++                do_plugin("fsp_proc", $targetObj, $target);
++            }
++        }
++        elsif ($type eq "APSS")
++        {
++            processApss($targetObj, $target);
++        }
++
++        # @TODO RTC: 189374 Remove multiple TPMs filter when all platforms' MRW
++        # supports dynamically determining the processor driving it.
++        elsif (($type eq "TPM") && $isMultiTpmSys)
++        {
++            processTpm($targetObj, $target);
++        }
++        elsif ($type eq "POWER_SEQUENCER")
++        {
++            my $target_type = $targetObj->getTargetType($target);
++
++            # Strip off the chip- part of the target type name
++            $target_type =~ s/chip\-//g;
++
++            # Currently only UCD9090 and UCD90120A on FSP systems are supported.
++            # All other UCD types are skipped.
++            if (($target_type eq "UCD9090")
++                || ($target_type eq "UCD90120A"))
++            {
++                processUcd($targetObj, $target);
++            }
++        }
++        elsif ($type eq "OCMB_CHIP")
++        {
++            processOcmbChip($targetObj, $target);
++        }
++
++        # Once processing of the target type is complete, remove
++        # deprecated and un-needed attributes for this type
++        pruneTargetAttributes($targetObj, $target, $type);
++
++        processIpmiSensors($targetObj,$target);
++    }  # end foreach my $target (@targets)
++
++
++    if ($targetObj->{build} eq "fsp")
++    {
++        processMrw_fsp::loadFSP($targetObj);
++    }
++} # end processTargets
++
++#--------------------------------------------------
++# @brief Check the processed targets for errors
++#
++# @param [in] $targetObj - The global target object.
++#--------------------------------------------------
++sub errorCheckTheTargets
+ {
+-    my $type = $targetObj->getType($target);
++    my $targetObj = shift;
++
++# TODO FIX ROLAND
++# Will fix later in the process
++# check topology
++# ROLAND Having issues with the topology:
++# ERROR: Fabric topology invalid.  2 targets have same FABRIC_TOPOLOGY_ID (0x0)
++# Once resolved, add this check back in
++# The MRW XML has 2 procs: power10-0 of type chip-processor-power10 and
++#                          power10-1 of type chip-processor-power10 and
++# In the loadXmlFile method, it produces 4 procs, 2 on a socket:
++#  '/sys-0/node-0/nisqually-0/proc_socket-0/godel-0/power10-0';
++#  '/sys-0/node-0/nisqually-0/proc_socket-1/godel-0/power10-0';
++#  '/sys-0/node-0/nisqually-0/proc_socket-0/godel-0/power10-1';
++#  '/sys-0/node-0/nisqually-0/proc_socket-1/godel-0/power10-1';
++#     For both power10-0 procs it uses topologoy ID 0
++#     For both power10-1 procs it uses topologoy ID 1
++#       So this end up in duplicates being used
++
++#    foreach my $n (keys %{$targetObj->{TOPOLOGY}})
++#    {
++#        if ($targetObj->{TOPOLOGY}->{$n} > 1)
++#        {
++#            print "ERROR: Fabric topology invalid.  2 targets have same ".
++#                  "FABRIC_TOPOLOGY_ID ($n)\n";
++#            $targetObj->myExit(3);
++#        }
++#    }
++
++    foreach my $target (keys %{ $targetObj->getAllTargets() })
++    {
++    # TODO FIX ROLAND
++    # Will fix later in the process
++    # ROLAND Having issues with power10-0 so wrapped errorCheck with if statement:
++    # ERROR: EEPROM_VPD_PRIMARY_INFO/devAddr attribute is invalid (Target=/sys-0/node-0/nisqually-0/proc_socket-0/godel-0/power10-0)
++    #	I2C connection to target is not defined
++    ## Once resolved, will remove if statement
++        if ($target != "/sys-0/node-0/nisqually-0/proc_socket-0/godel-0/power10-0")
++        {
++            errorCheck($targetObj, $target);
++        }
++    }
++} # end sub errorCheckTheTargets
++
++#--------------------------------------------------
++# @brief Write out the results to an XML file
++#
++# @param [in] $targetObj - The global target object.
++#--------------------------------------------------
++sub writeResultsToXml
++{
++    my $targetObj = shift;
++
++    my $xml_fh;
++    my $filename;
++    my $config_str = $targetObj->{system_config};
++
++    #If user did not specify the output filename, then build one up by using
++    #config and build parameters
++    if ($targetObj->{output_file} eq "")
++    {
++        if ($config_str ne "")
++        {
++            $config_str = "_" . $config_str;
++        }
++
++        $filename = $targetObj->{serverwiz_dir} . "/" . $targetObj->getSystemName() . $config_str . "_" . $targetObj->{build} . ".mrw.xml";
++    }
++    else
++    {
++        $filename = $targetObj->{output_file};
++    }
++
++    print "Creating XML: $filename\n";
++    open($xml_fh, ">$filename") || die "Unable to create: $filename";
++
++    $targetObj->printXML($xml_fh, "top", $targetObj->{build});
++    close $xml_fh;
++    if (!$targetObj->{errorsExist})
++    {
++        ## optionally print out report
++        if ($targetObj->{report})
++        {
++            print "Writing report to: ".$targetObj->{report_filename}."\n";
++            $targetObj->writeReportFile();
++        }
++        print "MRW created successfully!\n";
++    }
++} # end sub writeResultsToXml
++
++#--------------------------------------------------
++# @brief Remove attributes associated with target.
++#        Either because they have been deprecated
++#        or simply not used/needed.
++# @param[in] $targetObj - The global target object
++#                         blob
++# @param[in] $target - The target to remove attributes
++#                      from
++# @param[in] $type -   The type of the target
++#
++# TODO RTC: 178351 Remove depricated Attribute from HB XML
++# these are obsolete
++#
++#--------------------------------------------------
++sub pruneTargetAttributes
++{
++    my $targetObj = shift;
++    my $target    = shift;
++    my $type      = shift;
++
+     if ($type eq "SYS")
+     {
+-        processSystem($targetObj, $target);
+-        #TODO RTC: 178351 Remove depricated Attribute from HB XML
+-        #these are obsolete
+         $targetObj->deleteAttribute($target,"FUSED_CORE_MODE");
+         $targetObj->deleteAttribute($target,"MRW_CDIMM_MASTER_I2C_TEMP_SENSOR_ENABLE");
+         $targetObj->deleteAttribute($target,"MRW_CDIMM_SPARE_I2C_TEMP_SENSOR_ENABLE");
+@@ -302,31 +551,9 @@ foreach my $target (@targets)
+         $targetObj->deleteAttribute($target,"SYSTEM_WOF_ENABLED");
+         $targetObj->deleteAttribute($target,"VDM_ENABLE");
+         $targetObj->deleteAttribute($target,"CHIP_HAS_SBE");
+-
+-        my $maxComputeNodes  = get_max_compute_nodes($targetObj , $target);
+-        $targetObj->setAttribute($target, "MAX_COMPUTE_NODES_PER_SYSTEM", $maxComputeNodes);
+-
+-        #handle enumeration changes
+-        my $enum_val = $targetObj->getAttribute($target,"PROC_FABRIC_PUMP_MODE");
+-        if ( $enum_val =~ /MODE1/i)
+-        {
+-            $targetObj->setAttribute($target,"PROC_FABRIC_PUMP_MODE","CHIP_IS_NODE");
+-        }
+-        elsif ( $enum_val =~ /MODE2/i)
+-        {
+-            $targetObj->setAttribute($target,"PROC_FABRIC_PUMP_MODE","CHIP_IS_GROUP");
+-        }
+-
+     }
+     elsif ($type eq "PROC")
+     {
+-        processProcessor($targetObj, $target);
+-        if ($build eq "fsp")
+-        {
+-            do_plugin("fsp_proc", $targetObj, $target);
+-        }
+-        #TODO RTC: 178351 Remove depricated Attribute from HB XML
+-        #these are obsolete
+         $targetObj->deleteAttribute($target,"CHIP_HAS_SBE");
+         $targetObj->deleteAttribute($target,"FSI_GP_REG_SCOM_ACCESS");
+         $targetObj->deleteAttribute($target,"I2C_SLAVE_ADDRESS");
+@@ -349,18 +576,8 @@ foreach my $target (@targets)
+         $targetObj->deleteAttribute($target,"PROC_SECURITY_SETUP_VECTOR");
+         $targetObj->deleteAttribute($target,"SBE_SEEPROM_I2C_ADDRESS_BYTES");
+     }
+-    elsif ($type eq "APSS")
+-    {
+-        processApss($targetObj, $target);
+-    }
+-    elsif ($type eq "MEMBUF")
+-    {
+-        processMembuf($targetObj, $target);
+-        $targetObj->deleteAttribute($target,"CEN_MSS_VREF_CAL_CNTL");
+-    }
+     elsif ($type eq "PHB")
+     {
+-        #TODO RTC: 178351 Remove depricated Attribute from HB XML
+         $targetObj->deleteAttribute($target,"DEVICE_ID");
+         $targetObj->deleteAttribute($target,"HDDW_ORDER");
+         $targetObj->deleteAttribute($target,"MAX_POWER");
+@@ -376,91 +593,7 @@ foreach my $target (@targets)
+         $targetObj->deleteAttribute($target,"SLOT_NAME");
+         $targetObj->deleteAttribute($target,"VENDOR_ID");
+     }
+-    # @TODO RTC: 189374 Remove multiple TPMs filter when all platforms' MRW
+-    # supports dynamically determining the processor driving it.
+-    elsif (($type eq "TPM") && $isMultiTpmSys)
+-    {
+-        processTpm($targetObj, $target);
+-    }
+-    elsif ($type eq "POWER_SEQUENCER")
+-    {
+-        my $target_type = $targetObj->getTargetType($target);
+-
+-        # Strip off the chip- part of the target type name
+-        $target_type =~ s/chip\-//g;
+-
+-        # Currently only UCD9090 and UCD90120A on FSP systems are supported.
+-        # All other UCD types are skipped.
+-        if (($target_type eq "UCD9090")
+-            || ($target_type eq "UCD90120A"))
+-        {
+-            processUcd($targetObj, $target);
+-        }
+-    }
+-    elsif ($type eq "OCMB_CHIP")
+-    {
+-        processOcmbChip($targetObj, $target);
+-    }
+-
+-    processIpmiSensors($targetObj,$target);
+-}
+-
+-if ($build eq "fsp")
+-{
+-    processMrw_fsp::loadFSP($targetObj);
+-}
+-## check topology
+-foreach my $n (keys %{$targetObj->{TOPOLOGY}}) {
+-    if ($targetObj->{TOPOLOGY}->{$n} > 1) {
+-        print "ERROR: Fabric topology invalid.  2 targets have same ".
+-              "FABRIC_TOPOLOGY_ID ($n)\n";
+-        $targetObj->myExit(3);
+-    }
+-}
+-## check for errors
+-foreach my $target (keys %{ $targetObj->getAllTargets() })
+-{
+-    errorCheck($targetObj, $target);
+-}
+-
+-#--------------------------------------------------
+-## write out final XML
+-my $xml_fh;
+-my $filename;
+-my $config_str = $system_config;
+-
+-#If user did not specify the output filename, then build one up by using
+-#config and build parameters
+-if ($output_filename eq "")
+-{
+-    if ($config_str ne "")
+-    {
+-        $config_str = "_" . $config_str;
+-    }
+-
+-    $filename = $xmldir . "/" . $targetObj->getSystemName() . $config_str . "_" . $build . ".mrw.xml";
+-}
+-else
+-{
+-    $filename = $output_filename;
+-}
+-
+-print "Creating XML: $filename\n";
+-open($xml_fh, ">$filename") || die "Unable to create: $filename";
+-
+-$targetObj->printXML($xml_fh, "top", $build);
+-close $xml_fh;
+-if (!$targetObj->{errorsExist})
+-{
+-    ## optionally print out report
+-    if ($report)
+-    {
+-        print "Writing report to: ".$targetObj->{report_filename}."\n";
+-        $targetObj->writeReportFile();
+-    }
+-    print "MRW created successfully!\n";
+-}
+-
++}  # end pruneTargetAttributes
+ 
+ #--------------------------------------------------
+ #--------------------------------------------------
+@@ -493,7 +626,7 @@ sub processSystem
+     my $system_name = $targetObj->getAttribute($target,"SYSTEM_NAME");
+     if ($system_name =~ /ZAIUS/i)
+     {
+-        $num_voltage_rails_per_proc = 2;
++        $NUM_VOLTAGE_RAILS_PER_PROC = 2;
+     }
+ 
+     # TODO RTC:182764 -- right now there is no support for CDIMMs. So,
+@@ -940,9 +1073,9 @@ sub processUcd
+ }
+ 
+ #--------------------------------------------------
+-## Processor
+-##
+-
++# @brief Process processors
++#
++#--------------------------------------------------
+ sub processProcessor
+ {
+     my $targetObj = shift;
+@@ -998,7 +1131,6 @@ sub processProcessor
+         }
+     }
+ 
+-
+     # I2C arrays
+     my @engine = ();
+     my @port = ();
+@@ -1051,11 +1183,11 @@ sub processProcessor
+             #   contain this information and this can be removed
+             my $socket_pos =  $targetObj->getAttribute($socket_target,
+                                   "POSITION");
+-            if ($num_voltage_rails_per_proc > 1)
++            if ($NUM_VOLTAGE_RAILS_PER_PROC > 1)
+             {
+                 my $mcbist_pos = $targetObj->getAttribute($child, "CHIP_UNIT");
+                 $targetObj->setAttribute($child, "VDDR_ID",
+-                         $socket_pos*$num_voltage_rails_per_proc + $mcbist_pos);
++                         $socket_pos*$NUM_VOLTAGE_RAILS_PER_PROC + $mcbist_pos);
+             }
+             else
+             {
+@@ -1097,16 +1229,16 @@ sub processProcessor
+ 
+     # Add GPU sensors to processor
+     my @aGpuSensors = ();
+-    foreach my $obusslot (sort keys %G_gpu_sensors)
++    foreach my $obusslot (sort keys %GPU_SENSORS)
+     {
+         # find matching obusslot to processor
+-        my $proc_target = $G_slot_to_proc{$obusslot};
++        my $proc_target = $SLOT_TO_PROC{$obusslot};
+ 
+         # if a processor target is found and it is the same as this target
+         if ($proc_target && ($target =~ m/$proc_target/))
+         {
+             # Add this GPU's sensors to the processor's array of GPU sensors
+-            push (@aGpuSensors, @{ $G_gpu_sensors{$obusslot} });
++            push (@aGpuSensors, @{ $GPU_SENSORS{$obusslot} });
+         }
+     }
+     if (@aGpuSensors)
+@@ -1216,10 +1348,11 @@ sub processProcessor
+                              $targetObj->getAttribute($target,
+                                                       "FABRIC_CHIP_ID"));
+ 
+-    processMembufVpdAssociation($targetObj,$target);
++
+     #TODO RTC: 191762 -- Need a generic way to source FABRIC_GROUP_ID and
+     #FABRIC_CHIP_ID from the MRW and select the right value in processMRW
+     #based on the system configuration we are compiling for.
++    my $system_config = $targetObj->{system_config};
+     if ($system_config eq "w")
+     {
+         my $huid_str = $targetObj->getAttribute($target, "HUID");
+@@ -1412,36 +1545,21 @@ sub processI2cSpeeds
+     $targetObj->setAttribute($target,"I2C_BUS_SPEED_ARRAY",$bus_speed_attr);
+ }
+ 
+-################################
+-## Setup address map
+-
++#--------------------------------------------------
++# @brief Setup address map
++#--------------------------------------------------
+ sub setupBars
+ {
+     my $targetObj = shift;
+     my $target = shift;
+-    #--------------------------------------------------
+-    ## Setup BARs
+-
+-    #The topology ID is a 4 bit value that must be converted to
+-    #a 5-bit topology index before we can use it to calculate the
+-    #address offset.
+-    #The conversion method depends on the topology mode.
+-    my $topoId = $targetObj->getAttribute($target, "PROC_FABRIC_TOPOLOGY_ID");
+-    my $topoMode = $targetObj->getAttribute($target, "PROC_FABRIC_TOPOLOGY_MODE");
+-
+-    #Assume topo mode 1 (GGCC -> 0GGCC)
+-    my $topoIndex = $topoId;
+-
+-    #Check for topo mode 0
+-    if ($topoMode == 0)
+-    {
+-        # GGGC -> GGG0C
+-        $topoIndex = (($topoIndex & 0xE) << 1) | ($topoIndex & 0x1);
+-    }
+ 
+-    #keep track of which topology ID's have been used
++    # Keep track of which topology ID's have been used
++    my $topoId = getTopologyId($targetObj, $target);
+     $targetObj->{TOPOLOGY}->{$topoId}++;
+ 
++    # Get the topology index
++    my $topologyIndex = getTopologyIndex($targetObj, $target);
++
+     #P10 has a defined memory map for all configurations,
+     #these are the base addresses for topology ID 0 (group0-chip0).
+     my %bars=(  "FSP_BASE_ADDR"             => 0x0006030100000000,
+@@ -1466,9 +1584,147 @@ sub setupBars
+     {
+         my $i_base = Math::BigInt->new($bars{$bar});
+         my $value=sprintf("0x%016s",substr((
+-                        $i_base+$topoIndexOffset*$topoIndex)->as_hex(),2));
++                        $i_base+$topoIndexOffset*$topologyIndex)->as_hex(),2));
+         $targetObj->setAttribute($target,$bar,$value);
+     }
++}  # end setupBars
++
++#--------------------------------------------------
++# @brief Retrieve the fabric topolgy mode
++#
++# @details The fabric topology mode, attribute PROC_FABRIC_TOPOLOGY_MODE,
++#          is an attribute of the top level target (sys-0), but retrieving
++#          the value from the attribute returns a string (MODE0 or MODE1).
++#          This string is used to get the actual value, tied that mode,
++#          within the enumeration types.
++#
++# @param[in] $targetObj - The global target object, needed to get topology mode
++#
++# @return the numerical value of the topology mode in base 10
++#--------------------------------------------------
++sub getTopologyMode
++{
++    my $targetObj = shift;
++
++    use constant TOPOLOGY_MODE_ATTRIBUTE => "PROC_FABRIC_TOPOLOGY_MODE";
++
++    # Get topology mode from top level target
++    # Need to prepend "/" to the returned top level target because targets
++    # are mapped slightly different in the TARGETS hash vs the xml hash.
++    my $topologoyMode = $targetObj->getAttribute("/".$targetObj->{TOP_LEVEL},
++                                                 TOPOLOGY_MODE_ATTRIBUTE);
++
++    # Return the value of the mode as defined in
++    # enumeration type PROC_FABRIC_TOPOLOGY_MODE
++    # Convert the value from hex to base 10
++    return hex($targetObj->{xml}->{enumerationTypes}->{enumerationType}
++                      ->{PROC_FABRIC_TOPOLOGY_MODE}
++                      ->{enumerator}->{$topologoyMode}->{value});
++}
++
++#--------------------------------------------------
++# @brief Convert the topology ID to a topology index.
++#
++# @details  The topology ID is a 4 bit value that will be converted to a 5 bit
++#           topology index. The topology index is an index into the topology
++#           table.
++#           The conversion method depends on the topology mode.
++#                Mode      ID      index
++#               MODE 0 => GGGC --> GGG0C
++#               MODE 1 => GGCC --> GG0CC
++#
++# @param[in] $topologyId - The topology ID to convert to an index
++# @param[in] $topologyMode - The topology mode that determines the conversion
++#                            method. Needs to be a base 10 numeral value.
++#
++# @return a toplogy index, that is a base 10 numeral value.
++#--------------------------------------------------
++sub convertTopologyIdToIndex
++{
++    my $topologyId = shift;
++    my $topologyMode = shift;
++
++    use constant TOPOLOGY_MODE_1 => 1;
++
++    # Assume topology mode 0 (GGGC -> GGG0C)
++    my $groupMask = 0xE; # Use 0xE, 1110b, to extract 'GGG' from 'GGGC'
++    my $chipMask = 0x1;  # Use 0x1, 0001b, to extract 'C' from 'GGGC'
++
++    # If topology mode 1 (GGCC -> GG0CC)
++    if (TOPOLOGY_MODE_1 == $topologyMode)
++    {
++        $groupMask = 0xC; # Use 0xC, 1100b, to extract 'GG' from 'GGCC'
++        $chipMask = 0x3;  # Use 0x3, 0011b, to extract 'CC' from 'GGCC'
++    }
++
++    # Set topology index to topology ID before doing conversion
++    my $topologyIndex = $topologyId;
++
++    ## Turn the 4 bit topology ID into a 5 bit index
++    ## convert GGGC to GGG0C
++    ##      OR GGCC to GG0CC
++    # If group mask equal to 0xE (mode 0) then extract 'GGG' from 'GGGC':
++    #  1) GGGC & 0xE (1110b) returns GGG0 then shift to left (<< 1) to get GGG00
++    #  2) extract C from GGGC: GGGC & 0x1 (0001b) returns C
++    # If group mask equal to 0xC (mode 1) then extract 'GG' from 'GGCC':
++    #  1) GGCC & 0xC (1100b) returns GG00 then shift to left (<< 1) to get GG000
++    #  2) extract CC from GGCC: GGCC & 0x3 (0011b) returns CC
++    # Bitwise 'OR' 1 and 2 together to produce a 5 bit index value: GGG0C OR GG0CC
++    #    Index     =                  1                  'OR'               2
++    $topologyIndex = (($topologyIndex & $groupMask) << 1) | ($topologyIndex & $chipMask);
++
++    return ($topologyIndex);
++}
++
++#--------------------------------------------------
++# @brief Get the topology ID from processor
++#
++#
++# @param[in] $targetObj - The global target object, needed to get topology mode
++# @param[in] $processorTarget - The processor target, has the attribute topology ID
++#
++# @return topology ID, that is a base 10 numeral value.
++#--------------------------------------------------
++sub getTopologyId
++{
++    my $targetObj = shift;
++    my $processorTarget = shift;
++
++    use constant TOPOLOGY_ID_ATTRIBUTE => "PROC_FABRIC_TOPOLOGY_ID";
++
++    # Get the topology ID from the processor.
++    # Convert hex value to base 10 numerical value
++    return hex($targetObj->getAttribute($processorTarget,
++                                        TOPOLOGY_ID_ATTRIBUTE));
++
++}
++
++#--------------------------------------------------
++# @brief Get the topology index, an index into the topology table.
++#
++# @details The topology index needs to be calculated using the topology mode
++#          and the topology ID.  @see convertTopologyIdToIndex for
++#          more details
++#
++# @param[in] $targetObj - The global target object, needed to get topology mode
++# @param[in] $processorTarget - The processor target has the attribute topology ID
++#
++# @return a topology index, that is base 10 numeral value.
++#--------------------------------------------------
++sub getTopologyIndex
++{
++    my $targetObj = shift;
++    my $processorTarget = shift;
++
++    # Get the topology mode: MODE 0 (0) or MODE 1 (1)
++    my $topologyMode = getTopologyMode($targetObj);
++
++    # Get the topology ID from the processor.
++    my $topologyId = getTopologyId($targetObj, $processorTarget);
++
++    # Convert the topology ID to a topology index. The conversion method is
++    # based on the topology mode.
++    return (convertTopologyIdToIndex($topologyId, $topologyMode));
+ }
+ 
+ #--------------------------------------------------
+@@ -1572,10 +1828,14 @@ sub processEq
+         $targetObj->log($target,
+             "Processing EQ child: $child Type: $child_type");
+ 
+-        if ($child_type eq "EX")
++        if ($child_type eq "EQ")
+         {
+             processEx($targetObj, $child, $chip_unit);
+         }
++        elsif ($child_type eq "FC")
++        {
++            processFc($targetObj, $child, $chip_unit);
++        }
+     }
+ 
+     my $value = sprintf("0x%x",
+@@ -1584,6 +1844,35 @@ sub processEq
+     $targetObj->setAttribute( $target, "CHIPLET_ID", $value);
+ }
+ 
++## FC
++sub processFc
++{
++    my $targetObj        = shift;
++    my $target           = shift;
++    my $parent_chip_unit = shift;
++
++    foreach my $child (@{ $targetObj->getTargetChildren($target) })
++    {
++        my $child_type = $targetObj->getType($child);
++
++        $targetObj->log($target,
++            "Processing EX child: $child Type: $child_type");
++
++        if ($child_type eq "CORE")
++        {
++            processCore($targetObj, $child);
++        }
++    }
++
++    my $value = sprintf("0x%x",
++                        Targets::PERVASIVE_PARENT_EQ_OFFSET
++                        + $parent_chip_unit);
++
++    $targetObj->setAttribute( $target, "CHIPLET_ID", $value);
++}
++
++
++
+ ## EX
+ sub processEx
+ {
+@@ -1672,9 +1961,9 @@ sub processMcbist
+ ##
+ sub processMc
+ {
+-    # NOTE: OMI_INBAND_BAR_BASE_ADDR_OFFSET will be set for the MC                         
+-    # targets via a specific child OMI Target. View the                                    
+-    # processOmi function for further details.                                             
++    # NOTE: OMI_INBAND_BAR_BASE_ADDR_OFFSET will be set for the MC
++    # targets via a specific child OMI Target. View the
++    # processOmi function for further details.
+     my $targetObj    = shift;
+     my $target       = shift;
+ 
+@@ -1751,8 +2040,28 @@ sub processMcc
+ ##
+ sub processOmi
+ {
+-    my $mrwObj   = shift;
+-    my $omitarg      = shift;
++    my $mrwObj  = shift;
++    my $omitarg = shift;
++
++# TODO This may need to be updated if layout is different
++# ROLAND investigate this
++    # Map the OMI instance to its corresponding OMIC parent
++    my %omi_map = (4  => "omic-0",
++                   5  => "omic-0",
++                   6  => "omic-0",
++                   7  => "omic-1",
++                   2  => "omic-1",
++                   3  => "omic-1",
++                   0  => "omic-2",
++                   1  => "omic-2",
++                   12 => "omic-0",
++                   13 => "omic-0",
++                   14 => "omic-0",
++                   15 => "omic-1",
++                   10 => "omic-1",
++                   11 => "omic-1",
++                   8  => "omic-2",
++                   9  => "omic-2");
+ 
+     use integer;
+     # There are a total of eight OMI units on an MC unit. So, to
+@@ -1834,15 +2143,15 @@ sub processOmic
+ }
+ 
+ #--------------------------------------------------
+-## OCMB_CHIP
+-##
+-##
++# @brief OCMB_CHIP
++#
++#--------------------------------------------------
+ sub processOcmbChip
+ {
+     my $targetObj    = shift;
+     my $target       = shift;
+ 
+-    $targetObj->setEepromAttributesForAxone($targetObj, $target);
++    $targetObj->setEepromAttributesForDDIMs($target);
+ }
+ 
+ #-------------------------------------------------g
+@@ -2032,6 +2341,7 @@ sub processXbus
+         #For example, in wrap config, CONFIG_APPLY is expected to have "w"
+         #If "w" is not there, then we skip the connection and mark peers
+         #as NULL
++        my $system_config = $targetObj->{system_config};
+         if (($system_config eq $wrap_config && $config =~ /$wrap_config/) ||
+            ($system_config ne $wrap_config && $config =~ /$default_config/))
+         {
+@@ -2098,7 +2408,7 @@ sub processAbus
+     # A-bus connection has to be conisdered or not
+     # If user has passed 2N as argument, then we consider only those
+     # A-bus connections where token "2" is present
+-
++    my $system_config = $targetObj->{system_config};
+     if($system_config eq "2N" && $config =~ /$twonode/)
+     {
+         #Looking for Abus connections pertaining to 2 node system only
+@@ -2634,123 +2944,6 @@ sub processOcc
+     $targetObj->setAttribute($target,"OCC_MASTER_CAPABLE",$master_capable);
+ }
+ 
+-sub processMembufVpdAssociation
+-{
+-    my $targetObj = shift;
+-    my $target    = shift;
+-
+-    my $vpds=$targetObj->findConnections($target,"I2C","VPD");
+-    if ($vpds ne "" ) {
+-        my $vpd = $vpds->{CONN}->[0];
+-        my $membuf_assocs=$targetObj->findConnections($vpd->{DEST_PARENT},
+-                          "LOGICAL_ASSOCIATION","MEMBUF");
+-
+-        if ($membuf_assocs ne "") {
+-            foreach my $membuf_assoc (@{$membuf_assocs->{CONN}}) {
+-                my $membuf_target = $membuf_assoc->{DEST_PARENT};
+-                setEepromAttributes($targetObj,
+-                       "EEPROM_VPD_PRIMARY_INFO",$membuf_target,$vpd);
+-                my $index = $targetObj->getBusAttribute($membuf_assoc->{SOURCE},
+-                                $membuf_assoc->{BUS_NUM}, "ISDIMM_MBVPD_INDEX");
+-                $targetObj->setAttribute(
+-                            $membuf_target,"ISDIMM_MBVPD_INDEX",$index);
+-                $targetObj->setAttribute($membuf_target,
+-                            "VPD_REC_NUM",$targetObj->{vpd_num});
+-            }
+-        }
+-        my $group_assocs=$targetObj->findConnections($vpd->{DEST_PARENT},
+-                          "LOGICAL_ASSOCIATION","CARD");
+-
+-        if ($group_assocs ne "") {
+-            foreach my $group_assoc (@{$group_assocs->{CONN}}) {
+-                my $mb_target = $group_assoc->{DEST_PARENT};
+-                my $group_target = $targetObj->getTargetParent($mb_target);
+-                $targetObj->setAttribute($group_target,
+-                            "VPD_REC_NUM",$targetObj->{vpd_num});
+-            }
+-        }
+-        $targetObj->{vpd_num}++;
+-    }
+-}
+-
+-#--------------------------------------------------
+-## MEMBUF
+-##
+-## Finds I2C connections to DIMM and creates EEPROM attributes
+-## FYI:  I had to handle DMI busses in framework because they
+-## define affinity path
+-sub processMembuf
+-{
+-    my $targetObj = shift;
+-    my $membufTarg    = shift;
+-    if ($targetObj->isBadAttribute($membufTarg, "PHYS_PATH", ""))
+-    {
+-        ##dmi is probably not connected.  will get caught in error checking
+-        return;
+-    }
+-
+-    processMembufVpdAssociation($targetObj,$membufTarg);
+-
+-    ## find port mapping
+-    my %dimm_portmap;
+-    foreach my $child (@{$targetObj->getTargetChildren($membufTarg)})
+-    {
+-         if ($targetObj->getType($child) eq "MBA")
+-         {
+-             # find this MBA's position relative to the membuf
+-             my $mba_num = $targetObj->getAttribute($child,"MBA_NUM");
+-             # follow the DDR4 bus connection to find the 'ddr' targets
+-             my $ddrs = $targetObj->findConnections($child,"DDR4","");
+-
+-             if($ddrs eq "")
+-             {
+-                # on multi node system there is a possibility that either
+-                # DDR4 or DDR3 dimms are connected under a node
+-                my $ddrs = $targetObj->findConnections($child,"DDR3","");
+-             }
+-
+-             if ($ddrs ne "")
+-             {
+-                 foreach my $ddr (@{$ddrs->{CONN}})
+-                 {
+-                       my $port_num = $targetObj->getDimmPort($ddr->{SOURCE});
+-                       my $dimm_num = $targetObj->getDimmPos($ddr->{SOURCE});
+-                       my $map = oct("0b".$mba_num.$port_num.$dimm_num);
+-                       $dimm_portmap{$ddr->{DEST_PARENT}} = $map;
+-                 }
+-             }
+-         }
+-    }
+-
+-
+-    ## Process MEMBUF to DIMM I2C connections
+-    my @addr_map=('0','0','0','0','0','0','0','0');
+-    my $dimms=$targetObj->findConnections($membufTarg,"I2C","SPD");
+-    if ($dimms ne "") {
+-        foreach my $dimm (@{$dimms->{CONN}}) {
+-            my $dimm_target = $targetObj->getTargetParent($dimm->{DEST_PARENT});
+-            setEepromAttributes($targetObj,
+-                       "EEPROM_VPD_PRIMARY_INFO",$dimm_target,
+-                       $dimm);
+-
+-            my $field=getI2cMapField($targetObj,$dimm_target,$dimm);
+-            my $map = $dimm_portmap{$dimm_target};
+-
+-            if ($map eq "") {
+-                print "ERROR: $dimm_target doesn't map to a dimm/port\n";
+-                $targetObj->myExit(3);
+-            }
+-            $addr_map[$map] = $field;
+-        }
+-    }
+-    $targetObj->setAttribute($membufTarg,
+-            "MRW_MEM_SENSOR_CACHE_ADDR_MAP","0x".join("",@addr_map));
+-
+-    ## Update bus speeds
+-    processI2cSpeeds($targetObj,$membufTarg);
+-
+-    processPowerRails($targetObj, $membufTarg);
+-}
+ 
+ sub getI2cMapField
+ {
+@@ -2794,7 +2987,7 @@ sub getI2cMapField
+     return $hexfield;
+ }
+ 
+-#------------------------------------------------------------------------------
++#--------------------------------------------------
+ # I2C
+ #
+ sub processI2C
+@@ -3253,7 +3446,9 @@ sub get_max_compute_nodes
+ }
+ 
+ #--------------------------------------------------
+-## ERROR checking
++# @brief Error checking
++#
++#--------------------------------------------------
+ sub errorCheck
+ {
+     my $targetObj = shift;
+@@ -3363,9 +3558,9 @@ Options:
+              2N = special 2 node config with extra ABUS links
+              w = Special MST wrap config
+         -o = output filename
+-        -s [SDR XML file] = import SDRs
+         -r = create report and save to [system_name].rpt
+-        -v = version
++        -v = display current version
++        -t = run self test
+ ";
+     exit(1);
+ }
+@@ -3380,8 +3575,216 @@ sub do_plugin
+     {
+         $hwsvmrw_plugins{$step}(@_);
+     }
+-    elsif ($debug && ($build eq "fsp"))
++    elsif ($targetObj->{debug} && ($targetObj->{build} eq "fsp"))
++    {
++        print STDERR "build is $targetObj->{build} but no plugin for $step\n";
++    }
++}
++
++###############################################################################
++# Self tests
++###############################################################################
++#--------------------------------------------------
++# @brief The main procedure to run the tests
++#
++# @param[in] $targetObj - The global target object
++#--------------------------------------------------
++sub runTests
++{
++    print "\nRunning tests: \n\n";
++    my $targetObj = shift;
++
++    # Load the XML and process the file, extracting targets and associating
++    # attributes, with their data, to the targets
++    loadXmlFile();
++
++    # Process the targets, setting the targets attributes.
++    processTargets();
++
++    # Each one of the test build on each other, if one fails then no point in
++    # running the other
++    testGetTopologyMode($targetObj)   &&
++    testTopologyIdToTopologyIndex()   &&
++    testGetTopologyIndex($targetObj);
++}
++
++#--------------------------------------------------
++# @brief Test the method that gets the topology mode.
++#
++# @param[in] $targetObj - The global target object
++#
++# @return true if test passed, false other wise
++#--------------------------------------------------
++sub testGetTopologyMode
++{
++    print ">> Running testgetTopologyMode \n";
++    my $targetObj = shift;
++
++    my $testPassed = true;
++
++    use constant TOPOLOGY_MODE_ATTRIBUTE => "PROC_FABRIC_TOPOLOGY_MODE";
++    use constant TOPOLOGY_MODES => qw/ MODE0 MODE1 /;
++    my @topologyModes = (TOPOLOGY_MODES);
++
++    # Cache the current mode to restore later
++    my $persistMode = $targetObj->getAttribute("/".$targetObj->{TOP_LEVEL},
++                                               TOPOLOGY_MODE_ATTRIBUTE);
++
++    # Test getting the topology mode
++    foreach my $topologyMode (@topologyModes)
+     {
+-        print STDERR "build is $build but no plugin for $step\n";
++        $targetObj->setAttribute("/".$targetObj->{TOP_LEVEL},
++                                 TOPOLOGY_MODE_ATTRIBUTE,
++                                 $topologyMode);
++        my $topologyModeNumber = chop($topologyMode);
++        if (getTopologyMode($targetObj) != $topologyModeNumber)
++        {
++
++            $testPassed = false;
++            print "ERROR: Expected topology mode '$topologyModeNumber' but got " .
++                   getTopologyMode($targetObj) . "\n";
++        }
+     }
++
++    # Restore mode
++    $targetObj->setAttribute("/".$targetObj->{TOP_LEVEL},
++                             TOPOLOGY_MODE_ATTRIBUTE,
++                             $persistMode);
++
++    print "<< Running testgetTopologyMode: test " .
++          getPassFailString($testPassed) . "\n";
++
++    return $testPassed;
+ }
++
++#--------------------------------------------------
++# @brief Tests the conversion method that converts the topology ID,
++#        with given topology mode, to the topology index.
++#
++# @return true if test passed, false other wise
++#--------------------------------------------------
++sub testTopologyIdToTopologyIndex
++{
++    print ">> Running testTopologyIdToTopologyIndex \n";
++
++    my $testPassed = true;
++
++    # The different values expected when mode is 0 or 1
++    use constant TOPOLOGY_MODE_0_ARRAY => qw/ 0 1 4 5 8 9 12 13 16 17 20 21 24 25 28 29 /;
++    use constant TOPOLOGY_MODE_1_ARRAY => qw/ 0 1 2 3 8 9 10 11 16 17 18 19 24 25 26 27 /;
++
++    # The different topology modes
++    use constant TOPOLOGY_MODES => qw/ MODE0 MODE1 /;
++    my @topologyModes = (TOPOLOGY_MODES);
++
++    # Default with mode 0
++    my @toplogyModeArray = (TOPOLOGY_MODE_0_ARRAY);
++
++    # Test the conversion on the different IDs and modes
++    for my $topologyMode (@topologyModes)
++    {
++        my $topologyModeNumber = chop($topologyMode);
++        if (1 == $topologyModeNumber)
++        {
++            @toplogyModeArray = (TOPOLOGY_MODE_1_ARRAY);
++        }
++
++        # Needed variable
++        my $topologyIndex = 0;
++
++        # Iterate thru each permutation of the topology ID and
++        # test conversion to index
++        for (my $topologyId = 0; $topologyId < 16; ++$topologyId)
++        {
++            $topologyIndex = convertTopologyIdToIndex($topologyId,
++                                                      $topologyModeNumber);
++            if ($topologyIndex != $toplogyModeArray[$topologyId])
++            {
++                $testPassed = false;
++                print "ERROR: conversion on topology Id($topologyId) with ";
++                print "topology mode($topologyMode) returned ";
++                print "topology index($topologyIndex), but expected ";
++                print "topology index($toplogyModeArray[$topologyId]) \n";
++            }
++        }  # end for (my $topologyId = 0 ...
++    } # end foreach my $topologyMode (@topologyModes)
++
++    print "<< Running testTopologyIdToTopologyIndex: test " .
++          getPassFailString($testPassed) . "\n";
++
++    return $testPassed;
++}
++
++#--------------------------------------------------
++# @brief Test the method that gets the topology index based
++#        based on the current processors within the MRW XML
++#
++# @param[in] $targetObj - The global target object
++#
++# @return true if test passed, false other wise
++#--------------------------------------------------
++sub testGetTopologyIndex
++{
++    my $targetObj = shift;
++
++    my $testPassed = true;
++
++    my $system_name = $targetObj->getAttribute('/sys-0',"SYSTEM_NAME");
++    if ($system_name =~ /RAINIER/i)
++    {
++        print ">> Running testGetTopologyIndex \n";
++
++        # The different procs available
++        use constant PROC_0 => "/sys-0/node-0/nisqually-0/proc_socket-0/godel-0/power10-0";
++        use constant PROC_1 => "/sys-0/node-0/nisqually-0/proc_socket-0/godel-0/power10-1";
++
++        # Get processor 1's index
++        my $processorTarget = PROC_0;
++        my $topologyIndex = getTopologyIndex($targetObj, $processorTarget);
++
++        # For the current MRW, proc 0 has index 0 with mode 0
++        my $expectedTopologyIndex = 0;
++        if ($topologyIndex != $expectedTopologyIndex)
++        {
++            $testPassed = false;
++            my @fullProc = split(/\//, $processorTarget);
++            print "ERROR: retrieved topology index $topologyIndex for processor " .
++                   "@fullProc[-1] but expected $expectedTopologyIndex \n";
++        }
++
++        # Get processor 2's index
++        $processorTarget = PROC_1;
++        $topologyIndex = getTopologyIndex($targetObj, $processorTarget);
++
++        # For the current MRW, proc 1 has index 4 with mode 0
++        $expectedTopologyIndex = 4;
++        if ($topologyIndex != $expectedTopologyIndex)
++        {
++            $testPassed = false;
++            my @fullProc = split(/\//, $processorTarget);
++            print "ERROR: retrieved topology index $topologyIndex for processor " .
++                   "@fullProc[-1] but expected $expectedTopologyIndex \n";
++        }
++
++        print "<< Running testGetTopologyIndex: test " .
++              getPassFailString($testPassed) . "\n";
++
++    } # end if ($system_name =~ /RAINIER/i)
++
++    return $testPassed;
++}
++
++sub getPassFailString
++{
++    my $passFailBoolean = shift;
++    my $failPassString = "passed";
++
++    if ($passFailBoolean == false)
++    {
++        $failPassString = "failed";
++    }
++
++    return $failPassString;
++}
++
++
+-- 
+1.8.2.2
+
diff --git a/openpower/package/hostboot-p10/Config.in b/openpower/package/hostboot-p10/Config.in
new file mode 100644
index 0000000..d65776a
--- /dev/null
+++ b/openpower/package/hostboot-p10/Config.in
@@ -0,0 +1,39 @@
+config BR2_PACKAGE_HOSTBOOT_P10
+        bool "hostboot-p10"
+        default y if (BR2_OPENPOWER_POWER10)
+        select BR2_CPP
+        help
+            Project to build the Hostboot package for P10
+
+if BR2_PACKAGE_HOSTBOOT_P10
+
+choice
+	prompt "P10 Hostboot version"
+	default BR2_HOSTBOOT_P10_LATEST_VERSION
+
+config BR2_HOSTBOOT_P10_LATEST_VERSION
+	bool "Use latest Hostboot version"
+
+config BR2_HOSTBOOT_P10_CUSTOM_VERSION
+	bool "Use custom Hostboot version"
+
+endchoice
+
+config BR2_HOSTBOOT_P10_CUSTOM_VERSION_VALUE
+	string "Hostboot P10 version"
+	depends on BR2_HOSTBOOT_P10_CUSTOM_VERSION
+
+config BR2_HOSTBOOT_P10_VERSION
+	string
+	default "1aed986c145918dfee4d60f433e69280fd718d72" if BR2_HOSTBOOT_P10_LATEST_VERSION
+	default BR2_HOSTBOOT_P10_CUSTOM_VERSION_VALUE \
+		if BR2_HOSTBOOT_P10_CUSTOM_VERSION
+
+config BR2_HOSTBOOT_P10_CONFIG_FILE
+        string "Hostboot configuration file for compilation"
+        default default
+        help
+            String used to define hw specific make config file
+
+endif
+
diff --git a/openpower/package/hostboot-p10/hostboot-p10.mk b/openpower/package/hostboot-p10/hostboot-p10.mk
new file mode 100644
index 0000000..20a6f32
--- /dev/null
+++ b/openpower/package/hostboot-p10/hostboot-p10.mk
@@ -0,0 +1,37 @@
+################################################################################
+#
+# Hostboot for POWER10
+#
+################################################################################
+
+HOSTBOOT_P10_VERSION = $(call qstrip,$(BR2_HOSTBOOT_P10_VERSION))
+# TODO: WORKAROUND: Need to reenable next line and comment out the two lines
+# after that, when code is propagated to a public repo
+#HOSTBOOT_P10_SITE ?= $(call github,open-power,hostboot,$(HOSTBOOT_P10_VERSION))
+HOSTBOOT_P10_SITE = https://github.ibm.com/open-power/hostboot.git
+HOSTBOOT_P10_SITE_METHOD=git
+
+HOSTBOOT_P10_LICENSE = Apache-2.0
+HOSTBOOT_P10_LICENSE_FILES = LICENSE
+HOSTBOOT_P10_DEPENDENCIES = host-binutils
+
+HOSTBOOT_P10_INSTALL_IMAGES = YES
+HOSTBOOT_P10_INSTALL_TARGET = NO
+
+HOSTBOOT_P10_ENV_VARS=$(TARGET_MAKE_ENV) PERL_USE_UNSAFE_INC=1 \
+    CONFIG_FILE=$(BR2_EXTERNAL_OP_BUILD_PATH)/configs/hostboot/$(BR2_HOSTBOOT_P10_CONFIG_FILE) \
+    OPENPOWER_BUILD=1 CROSS_PREFIX="$(CCACHE) $(TARGET_CROSS)" HOST_PREFIX="" HOST_BINUTILS_DIR=$(HOST_BINUTILS_DIR) \
+    HOSTBOOT_VERSION=`cat $(HOSTBOOT_P10_VERSION_FILE)`
+
+# TODO: WORKAROUND: Currently the git clone causes a bad symlink
+# to be created for src/include/usr/tracinterface.H; so delete it and rebuild it
+# manually
+define HOSTBOOT_P10_BUILD_CMDS
+        $(HOSTBOOT_P10_ENV_VARS) bash -c 'cd $(@D) && rm -f src/include/usr/tracinterface.H && cp src/include/usr/trace/interface.H src/include/usr/tracinterface.H && source ./env.bash && $(MAKE)'
+endef
+
+define HOSTBOOT_P10_INSTALL_IMAGES_CMDS
+        cd $(@D) && source ./env.bash && $(@D)/src/build/tools/hbDistribute --openpower $(STAGING_DIR)/hostboot_build_images/
+endef
+
+$(eval $(generic-package))
diff --git a/openpower/package/machine-xml/Config.in b/openpower/package/machine-xml/Config.in
index c1064d7..63d31e2 100755
--- a/openpower/package/machine-xml/Config.in
+++ b/openpower/package/machine-xml/Config.in
@@ -18,17 +18,17 @@
 
 config BR2_OPENPOWER_MACHINE_XML_FILTER_UNWANTED_ATTRIBUTES
        bool "Filter Unwanted Attributes"
-       default y if (BR2_OPENPOWER_POWER9)
+       default y if (BR2_OPENPOWER_POWER9 || BR2_OPENPOWER_POWER10)
        default n
 
 config BR2_OPENPOWER_MACHINE_XML_OPPOWERVM_ATTRIBUTES
        bool "OPPOWERVM Attributes/Target"
-       default y if (BR2_OPENPOWER_POWER9)
+       default y if (BR2_OPENPOWER_POWER9 || BR2_OPENPOWER_POWER10)
        default n
 
 config BR2_OPENPOWER_MACHINE_XML_TARGET_TYPES_OPENPOWER_XML
        bool "Include target_types_openpower.xml"
-       default y if (BR2_OPENPOWER_POWER9)
+       default y if (BR2_OPENPOWER_POWER9 || BR2_OPENPOWER_POWER10)
        default n
 
 config BR2_OPENPOWER_MACHINE_XML_CUSTOM_GIT_VALUE
diff --git a/openpower/package/machine-xml/machine-xml.mk b/openpower/package/machine-xml/machine-xml.mk
index 4d31c4f..29170de 100644
--- a/openpower/package/machine-xml/machine-xml.mk
+++ b/openpower/package/machine-xml/machine-xml.mk
@@ -15,6 +15,9 @@
 MACHINE_XML_LICENSE_FILES = LICENSE
 MACHINE_XML_DEPENDENCIES =
 
+ifeq ($(BR2_OPENPOWER_POWER10),y)
+MACHINE_XML_DEPENDENCIES += hostboot-p10
+endif
 ifeq ($(BR2_OPENPOWER_POWER9),y)
 MACHINE_XML_DEPENDENCIES += hostboot
 endif
diff --git a/openpower/package/occ-p10/0001-Workaround-certain-OCC-errors-for-P10.patch b/openpower/package/occ-p10/0001-Workaround-certain-OCC-errors-for-P10.patch
new file mode 100644
index 0000000..c00a28c
--- /dev/null
+++ b/openpower/package/occ-p10/0001-Workaround-certain-OCC-errors-for-P10.patch
@@ -0,0 +1,28 @@
+From 48c944978a8fea129b4fce39063386237881871b Mon Sep 17 00:00:00 2001
+From: Nick Bofferding <bofferdn@us.ibm.com>
+Date: Thu, 3 Oct 2019 14:36:31 -0500
+Subject: [PATCH] Workaround certain OCC errors for P10
+
+To allow P10 OCC code to compile, temporarily suppress errors for:
+  aggressive-loop-optimizations
+  unused-but-set-variable
+---
+ src/occ_405/occ_defs.mk | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/occ_405/occ_defs.mk b/src/occ_405/occ_defs.mk
+index c87c44a..fa06a42 100644
+--- a/src/occ_405/occ_defs.mk
++++ b/src/occ_405/occ_defs.mk
+@@ -23,7 +23,7 @@
+ #
+ # IBM_PROLOG_END_TAG
+ 
+-GCC-CFLAGS += -Werror
++GCC-CFLAGS += -Werror -Wno-error=aggressive-loop-optimizations  -Wno-error=unused-but-set-variable
+ 
+ %.o: %.c
+ $(OBJDIR)/%.o: %.c
+-- 
+1.8.2.2
+
diff --git a/openpower/package/occ-p10/Config.in b/openpower/package/occ-p10/Config.in
new file mode 100644
index 0000000..6a2e284
--- /dev/null
+++ b/openpower/package/occ-p10/Config.in
@@ -0,0 +1,16 @@
+config BR2_PACKAGE_OCC_P10
+        bool "OCC for P10"
+        default y if (BR2_OPENPOWER_PLATFORM && BR2_OPENPOWER_POWER10)
+        select BR2_CPP
+        help
+            Project to build OCC for P10
+
+if BR2_PACKAGE_OCC_P10
+
+config BR2_OCC_P10_BIN_FILENAME
+    string "Name of OCC P10 image file"
+    default "occ.bin"
+    help
+        String used to define name of the OCC binary image file
+
+endif
diff --git a/openpower/package/occ-p10/occ-p10.mk b/openpower/package/occ-p10/occ-p10.mk
new file mode 100644
index 0000000..14410df
--- /dev/null
+++ b/openpower/package/occ-p10/occ-p10.mk
@@ -0,0 +1,47 @@
+################################################################################
+#
+# occ for power10
+#
+################################################################################
+
+OCC_P10_VERSION ?= 36b56e72c2dd6c2a2fb21667c55a594f86f6132e
+# TODO: WORKAROUND: Need to reenable next line and comment out the two lines
+# after that, when code is propagated to a public repo
+#OCC_P10_SITE ?= $(call github,open-power,occ,$(OCC_P10_VERSION))
+OCC_P10_SITE = https://github.ibm.com/open-power/occ.git
+OCC_P10_SITE_METHOD=git
+
+OCC_P10_LICENSE = Apache-2.0
+
+OCC_P10_LICENSE_FILES = LICENSE
+
+OCC_P10_INSTALL_IMAGES = YES
+OCC_P10_INSTALL_TARGET = NO
+
+OCC_P10_STAGING_DIR = $(STAGING_DIR)/occ
+
+OCC_P10_IMAGE_BIN_PATH = obj/image.bin
+
+OCC_P10_DEPENDENCIES = host-binutils host-ppe42-gcc
+ifeq ($(BR2_OCC_GPU_BIN_BUILD),y)
+	OCC_P10_DEPENDENCIES += hostboot-binaries
+endif
+
+define OCC_P10_BUILD_CMDS
+	if [ "$(BR2_OCC_GPU_BIN_BUILD)" == "y"  ]; then \
+	    cd $(@D)/src && \
+            make PPE_TOOL_PATH=$(PPE42_GCC_BIN) OCC_OP_BUILD=1 CROSS_PREFIX=$(TARGET_CROSS) LD_LIBRARY_PATH=$(HOST_DIR)/usr/lib GPE1_BIN_IMAGE_PATH=$(STAGING_DIR)/hostboot_binaries/ OPOCC_GPU_SUPPORT=1 all; \
+	else \
+            cd $(@D)/src && \
+            make PPE_TOOL_PATH=$(PPE42_GCC_BIN) OCC_OP_BUILD=1 CROSS_PREFIX=$(TARGET_CROSS) LD_LIBRARY_PATH=$(HOST_DIR)/usr/lib all; \
+	fi;
+endef
+
+OCC_P10_BUILD_CMDS ?= $(OCC_BUILD_CMDS_P9)
+
+define OCC_P10_INSTALL_IMAGES_CMDS
+       mkdir -p $(STAGING_DIR)/occ
+       cp $(@D)/$(OCC_P10_IMAGE_BIN_PATH) $(OCC_P10_STAGING_DIR)/$(BR2_OCC_BIN_FILENAME)
+endef
+
+$(eval $(generic-package))
diff --git a/openpower/package/openpower-pnor/Config.in b/openpower/package/openpower-pnor/Config.in
index 82280f5..ab35d4c 100644
--- a/openpower/package/openpower-pnor/Config.in
+++ b/openpower/package/openpower-pnor/Config.in
@@ -1,18 +1,21 @@
 config BR2_PACKAGE_OPENPOWER_PNOR
         bool "openpower_pnor"
         default y if (BR2_OPENPOWER_PLATFORM)
-        select BR2_PACKAGE_HOSTBOOT if !BR2_OPENPOWER_POWER8
+        select BR2_PACKAGE_HOSTBOOT_P10 if (! (BR2_OPENPOWER_POWER8 || BR2_OPENPOWER_POWER9) )
+        select BR2_PACKAGE_HOSTBOOT if BR2_OPENPOWER_POWER9
         select BR2_PACKAGE_HOSTBOOT_P8 if BR2_OPENPOWER_POWER8
         select BR2_PACKAGE_HOSTBOOT_BINARIES
         select BR2_PACKAGE_SKIBOOT
         select BR2_PACKAGE_OPENPOWER_FFS
-        select BR2_PACKAGE_OCC if !BR2_OPENPOWER_POWER8
+        select BR2_PACKAGE_OCC_P10 if (! (BR2_OPENPOWER_POWER8 || BR2_OPENPOWER_POWER9 ) )
+        select BR2_PACKAGE_OCC if !BR2_OPENPOWER_POWER9
         select BR2_PACKAGE_OCC_P8 if BR2_OPENPOWER_POWER8
         select BR2_PACKAGE_CAPP_UCODE
         select BR2_PACKAGE_IMA_CATALOG
         select BR2_PACKAGE_HOST_OPENPOWER_VPNOR
         select BR2_PACKAGE_MACHINE_XML
-        select BR2_PACKAGE_HCODE if BR2_OPENPOWER_POWER9
+        select BR2_PACKAGE_HCODE_P10 if (BR2_OPENPOWER_POWER10)
+        select BR2_PACKAGE_HCODE if (BR2_OPENPOWER_POWER9)
         help
             Utilites for building a targeting binary image
 
diff --git a/openpower/package/openpower-pnor/openpower-pnor.mk b/openpower/package/openpower-pnor/openpower-pnor.mk
index 9408a07..71ca734 100644
--- a/openpower/package/openpower-pnor/openpower-pnor.mk
+++ b/openpower/package/openpower-pnor/openpower-pnor.mk
@@ -4,15 +4,20 @@
 #
 ################################################################################
 
-OPENPOWER_PNOR_VERSION ?= bdfd0d08a7a04b1326553f570d35e778eda9db81
-OPENPOWER_PNOR_SITE ?= $(call github,open-power,pnor,$(OPENPOWER_PNOR_VERSION))
+OPENPOWER_PNOR_VERSION ?= e75dcb184995fd60f1add131681e4df9dc671eff
+
+# TODO: WORKAROUND: Need to reenable next line and comment out the two lines
+# after that, when code is propagated to a public repo
+#OPENPOWER_PNOR_SITE ?= $(call github,open-power,pnor,$(OPENPOWER_PNOR_VERSION))
+OPENPOWER_PNOR_SITE = https://github.ibm.com/open-power/pnor.git
+OPENPOWER_PNOR_SITE_METHOD=git
 
 OPENPOWER_PNOR_LICENSE = Apache-2.0
 OPENPOWER_PNOR_LICENSE_FILES = LICENSE
 OPENPOWER_PNOR_DEPENDENCIES = hostboot-binaries machine-xml skiboot host-openpower-ffs capp-ucode host-openpower-pnor-util
 
 ifeq ($(BR2_OPENPOWER_POWER9),y)
-OPENPOWER_PNOR_DEPENDENCIES += hcode
+    OPENPOWER_PNOR_DEPENDENCIES += hcode
 endif
 
 ifeq ($(BR2_PACKAGE_IMA_CATALOG),y)
@@ -46,7 +51,9 @@
 SIGN_MODE_ARG=-sign_mode $(BR2_OPENPOWER_SECUREBOOT_SIGN_MODE)
 endif
 
-ifeq ($(BR2_OPENPOWER_POWER9),y)
+ifeq ($(BR2_OPENPOWER_POWER10),y)
+    OPENPOWER_RELEASE=p10
+else ifeq ($(BR2_OPENPOWER_POWER9),y)
     OPENPOWER_RELEASE=p9
 else
     OPENPOWER_RELEASE=p8
@@ -79,12 +86,16 @@
 
 # Subpackages we want to include in the version info (do not include openpower-pnor)
 OPENPOWER_VERSIONED_SUBPACKAGES = skiboot
+
 ifeq ($(BR2_PACKAGE_HOSTBOOT_P8),y)
-OPENPOWER_VERSIONED_SUBPACKAGES += hostboot-p8 occ-p8
+    OPENPOWER_VERSIONED_SUBPACKAGES += hostboot-p8 occ-p8
+else ifeq ($(BR2_PACKAGE_HOSTBOOT_P10),y)
+    OPENPOWER_VERSIONED_SUBPACKAGES += hostboot-p10 occ-p10 sbe-p10 hcode-p10
+	OPENPOWER_PNOR_DEPENDENCIES += hostboot-p10 occ-p10 sbe-p10 hcode-p10
+else ifeq ($(BR2_PACKAGE_HOSTBOOT),y)
+    OPENPOWER_VERSIONED_SUBPACKAGES += hostboot occ
 endif
-ifeq ($(BR2_PACKAGE_HOSTBOOT),y)
-OPENPOWER_VERSIONED_SUBPACKAGES += hostboot occ
-endif
+
 OPENPOWER_VERSIONED_SUBPACKAGES += linux petitboot machine-xml hostboot-binaries capp-ucode
 OPENPOWER_PNOR = openpower-pnor
 
@@ -93,7 +104,9 @@
     OPENPOWER_VERSIONED_SUBPACKAGES += sbe hcode
 endif
 
-ifeq ($(BR2_PACKAGE_OCC_P8),y)
+ifeq ($(BR2_PACKAGE_OCC_P10),y)
+    OCC_BIN_FILENAME=$(BR2_OCC_P10_BIN_FILENAME)
+else ifeq ($(BR2_PACKAGE_OCC_P8),y)
     OCC_BIN_FILENAME=$(BR2_OCC_P8_BIN_FILENAME)
 else
     OCC_BIN_FILENAME=$(BR2_OCC_BIN_FILENAME)
diff --git a/openpower/package/ppe42-binutils/Config.in b/openpower/package/ppe42-binutils/Config.in
index 824e557..341e8ad 100644
--- a/openpower/package/ppe42-binutils/Config.in
+++ b/openpower/package/ppe42-binutils/Config.in
@@ -1,6 +1,6 @@
 config BR2_PACKAGE_HOST_PPE42_BINUTILS
         bool "ppe42-binutils"
-        default y if (BR2_OPENPOWER_PLATFORM && BR2_OPENPOWER_POWER9)
+        default y if (BR2_OPENPOWER_PLATFORM && (BR2_OPENPOWER_POWER10 || BR2_OPENPOWER_POWER9))
         select BR2_CPP
         help
             Project to build the PPE42 PORE binutils
diff --git a/openpower/package/ppe42-binutils/ppe42-binutils.mk b/openpower/package/ppe42-binutils/ppe42-binutils.mk
index b63e2a1..0c365b8 100644
--- a/openpower/package/ppe42-binutils/ppe42-binutils.mk
+++ b/openpower/package/ppe42-binutils/ppe42-binutils.mk
@@ -4,7 +4,7 @@
 #
 ################################################################################
 
-PPE42_BINUTILS_VERSION ?= ded0eff199fa1d9bd8be5a78935e8f023a2c5fad
+PPE42_BINUTILS_VERSION ?= c615a89c5beb032cbb00bf0c3e670319b2bbd4f5
 PPE42_BINUTILS_SITE ?= $(call github,open-power,ppe42-binutils,$(PPE42_BINUTILS_VERSION))
 PPE42_BINUTILS_LICENSE = GPLv3+
 
diff --git a/openpower/package/ppe42-gcc/Config.in b/openpower/package/ppe42-gcc/Config.in
index d66418d..54ae38b 100644
--- a/openpower/package/ppe42-gcc/Config.in
+++ b/openpower/package/ppe42-gcc/Config.in
@@ -1,6 +1,6 @@
 config BR2_PACKAGE_HOST_PPE42_GCC
         bool "ppe42-gcc"
-        default y if (BR2_OPENPOWER_PLATFORM && BR2_OPENPOWER_POWER9)
+        default y if (BR2_OPENPOWER_PLATFORM && (BR2_OPENPOWER_POWER10 || BR2_OPENPOWER_POWER9))
         select BR2_CPP
         help
             Project to build the PPE42 gcc
diff --git a/openpower/package/ppe42-gcc/ppe42-gcc.mk b/openpower/package/ppe42-gcc/ppe42-gcc.mk
index 3ab8a55..31496cc 100644
--- a/openpower/package/ppe42-gcc/ppe42-gcc.mk
+++ b/openpower/package/ppe42-gcc/ppe42-gcc.mk
@@ -4,7 +4,7 @@
 #
 ################################################################################
 
-PPE42_GCC_VERSION ?= c13849780c80d1ed466efbeaabcc663fe48cd87d
+PPE42_GCC_VERSION ?= 3d454701206d141a26777c3f6c1d966921f363de
 PPE42_GCC_SITE ?= $(call github,open-power,ppe42-gcc,$(PPE42_GCC_VERSION))
 PPE42_GCC_LICENSE = GPLv3+
 
diff --git a/openpower/package/sbe-p10/0001-Update-SBE-distribute-to-export-P10-DD1-files.patch b/openpower/package/sbe-p10/0001-Update-SBE-distribute-to-export-P10-DD1-files.patch
new file mode 100644
index 0000000..26cea10
--- /dev/null
+++ b/openpower/package/sbe-p10/0001-Update-SBE-distribute-to-export-P10-DD1-files.patch
@@ -0,0 +1,37 @@
+From b0a445addc19754ebea92ea3ee46185a3716267a Mon Sep 17 00:00:00 2001
+From: Nick Bofferding <bofferdn@us.ibm.com>
+Date: Thu, 3 Oct 2019 13:22:58 -0500
+Subject: [PATCH] Update SBE distribute to export P10 DD1 files
+
+Change-Id: I8bda043e0fe69187923abcfb1e79dd4de98e98ae
+---
+ src/build/sbeOpDistribute.py | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/build/sbeOpDistribute.py b/src/build/sbeOpDistribute.py
+index 14546d9..32b0cff 100755
+--- a/src/build/sbeOpDistribute.py
++++ b/src/build/sbeOpDistribute.py
+@@ -5,7 +5,7 @@
+ #
+ # OpenPOWER sbe Project
+ #
+-# Contributors Listed Below - COPYRIGHT 2017,2018
++# Contributors Listed Below - COPYRIGHT 2017,2019
+ # [+] International Business Machines Corp.
+ #
+ #
+@@ -26,8 +26,8 @@ import os
+ import sys
+ import getopt
+ 
+-CHIPID = 'p9n'
+-p9n_EC = {'21':'DD2', '22':'DD2', '23':'DD2'}
++CHIPID = 'p10'
++p9n_EC = {'10':'DD1'}
+ 
+ def usage():
+     print "usage:sbeOpDistribute.py [--sbe_binary_dir] <sbe binary path> [--img_dir] <images path>"
+-- 
+1.8.2.2
+
diff --git a/openpower/package/sbe-p10/0002-Temporarily-disabled-install-directive-in-SBE-distri.patch b/openpower/package/sbe-p10/0002-Temporarily-disabled-install-directive-in-SBE-distri.patch
new file mode 100644
index 0000000..c0fb22d
--- /dev/null
+++ b/openpower/package/sbe-p10/0002-Temporarily-disabled-install-directive-in-SBE-distri.patch
@@ -0,0 +1,36 @@
+From e34aaa2b68ec05f85f3d47ef37bdbd2aa5a162ae Mon Sep 17 00:00:00 2001
+From: Nick Bofferding <bofferdn@us.ibm.com>
+Date: Mon, 7 Oct 2019 15:58:41 -0500
+Subject: [PATCH] Temporarily disabled install directive in SBE distribute
+
+Change-Id: I3f54da025cde5944b098ced69be43995c495ec66
+---
+ src/build/sbeOpDistribute.py | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/src/build/sbeOpDistribute.py b/src/build/sbeOpDistribute.py
+index 32b0cff..373edb7 100755
+--- a/src/build/sbeOpDistribute.py
++++ b/src/build/sbeOpDistribute.py
+@@ -3,7 +3,7 @@
+ #
+ # $Source: src/build/sbeOpDistribute.py $
+ #
+-# OpenPOWER sbe Project
++# OpenPOWER HostBoot Project
+ #
+ # Contributors Listed Below - COPYRIGHT 2017,2019
+ # [+] International Business Machines Corp.
+@@ -103,7 +103,8 @@ def main(argv):
+             # Copy sbe raw binary to scratch folder
+             run_system_cmd('cp '+sbe_binary_dir+'/'+basename+'.bin'+' '+scratch_dir+'/'+basename+'.bin')
+             # Add HW ref image
+-            run_system_cmd('p9_ipl_build '+scratch_dir+'/'+basename+'.bin '+hw_ref_image+' 0x'+ecLevel)
++            #TODO: This is currently not working in p10 op-build
++            # run_system_cmd('p9_ipl_build '+scratch_dir+'/'+basename+'.bin '+hw_ref_image+' 0x'+ecLevel)
+             #add pnor header
+             run_system_cmd("env echo -en VERSION\\\\0 > "+scratch_dir+"/"+basename+".sha.bin")
+             run_system_cmd("sha512sum "+scratch_dir+"/"+basename+".bin | awk '{print $1}' | xxd -pr -r >> "+scratch_dir+"/"+basename+".sha.bin")
+-- 
+1.8.2.2
+
diff --git a/openpower/package/sbe-p10/Config.in b/openpower/package/sbe-p10/Config.in
new file mode 100644
index 0000000..3468511
--- /dev/null
+++ b/openpower/package/sbe-p10/Config.in
@@ -0,0 +1,33 @@
+config BR2_PACKAGE_SBE_P10
+        bool "sbe-p10"
+        default y if (BR2_OPENPOWER_PLATFORM && BR2_OPENPOWER_POWER10)
+        select BR2_CPP
+        depends on BR2_PACKAGE_HCODE_P10
+        help
+            Project to build the sbe firmware codebase for P10
+
+if BR2_PACKAGE_SBE_P10
+
+choice
+	prompt "SBE version"
+	default BR2_SBE_P10_LATEST_VERSION
+
+config BR2_SBE_P10_LATEST_VERSION
+	bool "Use latest SBE master"
+
+config BR2_SBE_P10_CUSTOM_VERSION
+	bool "Custom SBE version"
+
+endchoice
+
+config BR2_SBE_P10_CUSTOM_VERSION_VALUE
+	string "SBE version"
+	depends on BR2_SBE_P10_CUSTOM_VERSION
+
+config BR2_SBE_P10_VERSION
+	string
+	default "59ca18cfdb3f2585e95e664be751440ad2557550" if BR2_SBE_P10_LATEST_VERSION
+	default BR2_SBE_P10_CUSTOM_VERSION_VALUE \
+		if BR2_SBE_P10_CUSTOM_VERSION
+
+endif
diff --git a/openpower/package/sbe-p10/sbe-p10.mk b/openpower/package/sbe-p10/sbe-p10.mk
new file mode 100644
index 0000000..35af089
--- /dev/null
+++ b/openpower/package/sbe-p10/sbe-p10.mk
@@ -0,0 +1,35 @@
+################################################################################
+#
+# SBE for P10
+#
+################################################################################
+
+SBE_P10_VERSION = $(call qstrip,$(BR2_SBE_P10_VERSION))
+# TODO: WORKAROUND: Need to reenable next line and comment out the two lines
+# after that, when code is propagated to a public repo
+#SBE_P10_SITE = $(call github,open-power,sbe,$(SBE_P10_VERSION))
+SBE_P10_SITE = https://github.ibm.com/open-power/sbe.git
+SBE_P10_SITE_METHOD=git
+
+SBE_P10_LICENSE = Apache-2.0
+SBE_P10_DEPENDENCIES = host-ppe42-gcc hcode-p10
+# TODO WORKAROUND ... host-ppe42-gc not compiling
+# host-ppe42-gcc hcode-p10
+
+SBE_P10_INSTALL_IMAGES = YES
+SBE_P10_INSTALL_TARGET = NO
+
+define SBE_P10_BUILD_CMDS
+	SBE_COMMIT_ID=$(SBE_P10_VERSION) $(MAKE) -C $(@D) \
+		LD_LIBRARY_PATH=$(HOST_DIR)/usr/lib \
+		CROSS_COMPILER_PATH=$(PPE42_GCC_BIN) \
+		all
+endef
+
+define SBE_P10_INSTALL_IMAGES_CMDS
+	$(INSTALL) -D $(@D)/images/ipl_image_tool $(HOST_DIR)/usr/bin/
+	python $(@D)/src/build/sbeOpDistribute.py  --sbe_binary_dir=$(STAGING_DIR)/sbe_binaries --img_dir=$(@D)/images --sbe_binary_filename $(BR2_HOSTBOOT_BINARY_SBE_FILENAME)
+	cp $(@D)/src/build/sbeOpDistribute.py $(STAGING_DIR)/sbe_binaries/
+endef
+
+$(eval $(generic-package))
