Update Hostboot and Habanero XML and some additional IPMI fixes
diff --git a/openpower/configs/hostboot/habanero.config b/openpower/configs/hostboot/habanero.config
index 0f27f58..08caec1 100755
--- a/openpower/configs/hostboot/habanero.config
+++ b/openpower/configs/hostboot/habanero.config
@@ -19,9 +19,12 @@
 set GPIODD
 set PALMETTO_VDDR
 
-# disable sbe updates
+# to disable sbe updates
 set NO_SBE_UPDATES
 
+# Enable SBE updates
+#set SBE_UPDATE_INDEPENDENT
+
 unset PCIE_HOTPLUG_CONTROLLER
 
 # turn on console output
diff --git a/openpower/configs/hostboot/palmetto.config b/openpower/configs/hostboot/palmetto.config
index 2d7d74d..9d09e68 100755
--- a/openpower/configs/hostboot/palmetto.config
+++ b/openpower/configs/hostboot/palmetto.config
@@ -18,8 +18,11 @@
 set GPIODD
 set PALMETTO_VDDR
 
-# disable sbe updates
+# to disable sbe updates
 set NO_SBE_UPDATES
+ 
+# Enable SBE updates
+# set SBE_UPDATE_INDEPENDENT
 
 unset PCIE_HOTPLUG_CONTROLLER
 
diff --git a/openpower/package/habanero-xml/habanero-xml.mk b/openpower/package/habanero-xml/habanero-xml.mk
index 42f83cc..b2e759b 100644
--- a/openpower/package/habanero-xml/habanero-xml.mk
+++ b/openpower/package/habanero-xml/habanero-xml.mk
@@ -4,7 +4,7 @@
 #
 ################################################################################
 
-HABANERO_XML_VERSION ?= db10d0022ed1d4d96057ad1fa89bff65f14002bc
+HABANERO_XML_VERSION ?= f98000504ec8fafb4f8547c0427f0a8056e7b8b7
 HABANERO_XML_SITE ?= $(call github,open-power,habanero-xml,$(HABANERO_XML_VERSION))
 
 HABANERO_XML_LICENSE = Apache-2.0
diff --git a/openpower/package/hostboot/hostboot-0006-Provide-OCC-Target-with-FRU_ID-attribute.patch b/openpower/package/hostboot/hostboot-0006-Provide-OCC-Target-with-FRU_ID-attribute.patch
new file mode 100644
index 0000000..a459876
--- /dev/null
+++ b/openpower/package/hostboot/hostboot-0006-Provide-OCC-Target-with-FRU_ID-attribute.patch
@@ -0,0 +1,34 @@
+From 27a08856a62b32d028315951da06bf091bd22bf6 Mon Sep 17 00:00:00 2001
+From: Bill Hoffa <wghoffa@us.ibm.com>
+Date: Thu, 26 Feb 2015 12:50:20 -0600
+Subject: [PATCH 1/5] Provide OCC Target with FRU_ID attribute
+
+Required with github commits:
+https://github.com/open-power/habanero-xml/commit/dc738f40fc6e6c63c2bf6e25dca0f85987c870b8
+and
+https://github.com/open-power/palmetto-xml/commit/84f5bf5cc10459a85340cd0cc82a8c65b5bc4c97
+
+Change-Id: I8dd08fe5b4649f1398675c47db3abbdb8a5363b0
+RTC:124817
+(cherry picked from commit 15d270e5f3f7b49fd26e2656b6d5b617aea207d9)
+---
+ src/usr/targeting/common/xmltohb/target_types.xml |    3 +++
+ 1 files changed, 3 insertions(+), 0 deletions(-)
+
+diff --git a/src/usr/targeting/common/xmltohb/target_types.xml b/src/usr/targeting/common/xmltohb/target_types.xml
+index 4dcc796..6dc4e58 100644
+--- a/src/usr/targeting/common/xmltohb/target_types.xml
++++ b/src/usr/targeting/common/xmltohb/target_types.xml
+@@ -1726,6 +1726,9 @@
+     <attribute>
+         <id>OCC_MASTER_CAPABLE</id>
+     </attribute>
++    <attribute>
++        <id>FRU_ID</id>
++    </attribute>
+ </targetType>
+ 
+ </attributes>
+-- 
+1.7.4.1
+
diff --git a/openpower/package/hostboot/hostboot-0007-Update-dev-tree-with-additional-sensor-information.patch b/openpower/package/hostboot/hostboot-0007-Update-dev-tree-with-additional-sensor-information.patch
new file mode 100644
index 0000000..c83b019
--- /dev/null
+++ b/openpower/package/hostboot/hostboot-0007-Update-dev-tree-with-additional-sensor-information.patch
@@ -0,0 +1,510 @@
+From d8c341b72aad30bff1417f1a2cec82af9cc14786 Mon Sep 17 00:00:00 2001
+From: Richard J. Knight <rjknight@us.ibm.com>
+Date: Thu, 19 Feb 2015 23:47:03 -0600
+Subject: [PATCH 2/5] Update dev tree with additional sensor information
+
+    -Add sensor type, reading type and specific offsets.
+    -Add IPMI entity ID and instance information for sensors
+    -Include IPMI Enity instance in targets which have ipmi sensors
+     attribute
+
+Change-Id: I02b0a5046c67e2e00af30a0c78cbcc182ae4c0cd
+RTC:123186
+(cherry picked from commit ff8c81ac1ab76d9835165a8dae4a0e3b1e5a0055)
+---
+ src/include/usr/ipmi/ipmisensor.H                  |   96 ++++++++++++++++++++
+ src/usr/devtree/bld_devtree.C                      |   89 ++++++++++++++-----
+ src/usr/ipmi/ipmisensor.C                          |   76 ++++++++++++++++
+ src/usr/targeting/common/Targets.pm                |    2 +-
+ .../common/xmltohb/attribute_types_hb.xml          |   73 +++++++++++++++
+ .../targeting/common/xmltohb/target_types_hb.xml   |   12 ++-
+ 6 files changed, 322 insertions(+), 26 deletions(-)
+
+diff --git a/src/include/usr/ipmi/ipmisensor.H b/src/include/usr/ipmi/ipmisensor.H
+index 7b4e3fa..ef00bfa 100644
+--- a/src/include/usr/ipmi/ipmisensor.H
++++ b/src/include/usr/ipmi/ipmisensor.H
+@@ -48,6 +48,20 @@ namespace SENSOR
+     const uint8_t INVALID_TYPE = 0xFF;
+ 
+     /**
++     *  @enum sensorReadingTypes
++     *  Sensor specific completion codes, defined in IPMI Spec.
++     *
++     */
++    enum sensorReadingType
++    {
++        THRESHOLD                   = 0x01,
++        DIGITAL_ASSERT_DEASSERT     = 0x03,
++        DIGITAL_ENABLE_DISABLE      = 0x09,
++        SENSOR_SPECIFIC             = 0x6f,
++    };
++
++
++    /**
+      *  @enum procStatusSensorOffsets
+      *  Sensor specific completion codes, defined in IPMI Spec.
+      *
+@@ -90,6 +104,74 @@ namespace SENSOR
+         CRITICAL_OVER_TEMP              = 0x0A,
+     };
+ 
++    /**
++     *  @enum firmwareBootProgressSensorOffsets
++     *  Boot progress specific offsets defined in IPMI Spec.
++     *
++     */
++    enum firmwareProgressSensorOffsets
++    {
++        // offset 02h
++        SYSTEM_FIRMWARE_PROGRESS = 0x02,
++    };
++
++    /**
++     *  @enum discrete09_Offsets
++     *
++     *      Offsets specific to IPMI sensor reading type 09
++     *      digital discrete senosrs. These offsets result in
++     *      Device Enabled or Device Disabled events in the
++     *      BMC event log.
++     *
++     */
++    enum discrete09_Offsets
++    {
++        // offset 00h
++        DEVICE_DISABLED = 0x0,
++
++        //offset 01h
++        DEVICE_ENABLED  = 0x1,
++    };
++
++     /**
++     *  @enum discrete03_Offsets
++     *
++     *      Offsets specific to IPMI sensor reading type 03
++     *      digital discrete senosrs. These offsets result in generic
++     *      State Asserted or State Deasserted events in the
++     *      BMC event log.
++     *
++     */
++    enum discrete03_Offsets
++    {
++        // offset 00h
++        DEASSERTED = 0x00,
++
++        //offset 01h
++        ASSERTED   = 0x01,
++    };
++
++     /**
++     *  @enum acpiPowerState_Offsets
++     *
++     *      Offsets specific to IPMI ACPI Power state
++     *      senosrs. These offsets result in power
++     *      state messages in the BMC event log.
++     *
++     */
++    enum acpiPowerState_Offsets
++    {
++        // offset 0h
++        S0_G0_WORKING   = 0x00,
++
++        // offset 05h
++        G5_SOFT_OFF     = 0x05,
++
++        //offset 0Bh
++        LEGACY_ON       = 0x0B,
++
++    };
++
+     //**  Bit definition for set sensor reading cmd operation field
+     //      [7:6] 10b - write given values to event data bytes let BMC handle
+     //                  offset in event data 1 when an external event is
+@@ -827,6 +909,20 @@ namespace SENSOR
+     errlHndl_t getAPSSChannelSensorNumbers(
+                                      const uint16_t (* &o_sensor_numbers)[16]);
+ 
++    /**
++     *   Helper function to return a mask of the supported masks for the
++     *   sensor passed in.
++     *
++     *  @param[i] - sensor name to determine the offset for.
++     *  @param[o] - sensor reading type, defined in IPMI spec for the
++     *              passed in sensor number.
++     *
++     *
++     *  @return sensor offsets
++     */
++    uint16_t getSensorOffsets(TARGETING::SENSOR_NAME i_name,
++                              sensorReadingType &o_readType );
++
+ 
+ 
+ }; // end namespace
+diff --git a/src/usr/devtree/bld_devtree.C b/src/usr/devtree/bld_devtree.C
+index dd81392..f4647a3 100644
+--- a/src/usr/devtree/bld_devtree.C
++++ b/src/usr/devtree/bld_devtree.C
+@@ -1299,17 +1299,40 @@ errlHndl_t bld_fdt_mem(devTree * i_dt, bool i_smallTree)
+     return errhdl;
+ }
+ 
++
++#ifdef CONFIG_BMC_IPMI
++enum
++{
++    ENTITY_ID_MASK      = 0x00FF,
++    SENSOR_TYPE_MASK    = 0xFF00,
++};
++
+ /* create a node for each IPMI sensor in the system, the sensor unit number
+    corresponds to the BMC assigned sensor number */
+ uint32_t bld_sensor_node(devTree * i_dt, const dtOffset_t & i_parentNode,
+-                         const uint16_t sensorData[] )
++                         const uint16_t sensorData[],
++                         uint32_t instance, uint32_t chipId )
+ {
+ 
+-    const uint32_t sensorNumber = sensorData[
++    SENSOR::sensorReadingType readType;
++
++    // pass in the sensor name to get back the supported offsets and the event
++    // reading type for this sensor.
++    uint32_t offsets = SENSOR::getSensorOffsets(
++             static_cast<TARGETING::SENSOR_NAME>(
++                 sensorData[TARGETING::IPMI_SENSOR_ARRAY_NAME_OFFSET]),
++             readType);
++
++    const uint16_t sensorNumber = sensorData[
+                         TARGETING::IPMI_SENSOR_ARRAY_NUMBER_OFFSET];
+ 
+-    const uint32_t sensorName =
+-                        sensorData[TARGETING::IPMI_SENSOR_ARRAY_NAME_OFFSET];
++    // the sensor name is a combination of the sensor type + entity ID
++    const uint16_t sensorType = (
++        sensorData[TARGETING::IPMI_SENSOR_ARRAY_NAME_OFFSET]
++                    & SENSOR_TYPE_MASK) >> 8;
++
++    const uint16_t entityId =
++        sensorData[TARGETING::IPMI_SENSOR_ARRAY_NAME_OFFSET] & ENTITY_ID_MASK;
+ 
+     /* Build sensor node based on sensor number */
+     dtOffset_t sensorNode = i_dt->addNode(i_parentNode, "sensor", sensorNumber);
+@@ -1317,22 +1340,35 @@ uint32_t bld_sensor_node(devTree * i_dt, const dtOffset_t & i_parentNode,
+     i_dt->addPropertyCell32(sensorNode, "reg", sensorNumber);
+ 
+     // add sensor type
+-    i_dt->addPropertyCell32(sensorNode, "ipmi-sensor-type", sensorName);
+-
+-   // @TODO RTC:113902
+-    // get more info from Ben H. regarding what info he needs
+-    // add the name of the sensor
+-    //i_dt->addPropertyString(sensorNode, "name", sensorToString( sensorName ));
+-    //   i_dt->addPropertyCell32(sensorNode, "ipmi-entity-type",
+-    //                                          sensorData[ENTITY_TYPE_OFFSET]);
+-    //   i_dt->addPropertyCell32(sensorNode, "ipmi-reading-type",
+-    //                                         sensorData[READING_TYPE_OFFSET]);
+-
+-    /* return the phandle for this sensor, might need to add it to the
+-    cpus node per Ben H. proposal */
++    i_dt->addPropertyCell32(sensorNode, "ipmi-sensor-type", sensorType);
++    i_dt->addPropertyCell32(sensorNode, "ipmi-entity-id", entityId);
++    i_dt->addPropertyCell32(sensorNode, "ipmi-entity-instance", instance);
++    i_dt->addPropertyCell32(sensorNode, "ipmi-sensor-offsets", offsets);
++    i_dt->addPropertyCell32(sensorNode, "ipmi-sensor-reading-type", readType);
++
++    // currently we only add the chip ID to the OCC sensor
++    if(chipId != 0xFF )
++    {
++        i_dt->addPropertyCell32(sensorNode, "ibm,chip-id", chipId);
++    }
++
++    /* return the phandle for this sensor */
+     return i_dt->getPhandle(sensorNode);
+ }
+ 
++// return the IPMI entity instance from the SDR for this
++// target.
++uint32_t getInstanceNumber( TARGETING::Target * i_pTarget )
++{
++    AttributeTraits<ATTR_IPMI_INSTANCE>::Type l_instance;
++
++   l_instance = i_pTarget->getAttr<TARGETING::ATTR_IPMI_INSTANCE>();
++
++   return l_instance;
++
++}
++
++// build the sensor node for a given target
+ uint32_t bld_sensor_node(devTree * i_dt, const dtOffset_t & i_sensorNode,
+         TARGETING::Target * i_pTarget )
+ {
+@@ -1344,6 +1380,17 @@ uint32_t bld_sensor_node(devTree * i_dt, const dtOffset_t & i_sensorNode,
+      * for each sensor */
+     if ( i_pTarget->tryGetAttr<ATTR_IPMI_SENSORS>(l_sensors) )
+     {
++        uint32_t chipId = 0xFF;
++
++        // add the chip id to the OCC sensor since OPAL needs it to figure out
++        // which OCC it is.
++        if( TARGETING::TYPE_OCC == i_pTarget->getAttr<TARGETING::ATTR_TYPE>())
++        {
++            ConstTargetHandle_t proc = getParentChip(i_pTarget);
++
++            chipId = getProcChipId( proc );
++        }
++
+         for(uint16_t i=0; i< array_rows; i++)
+         {
+             /*  if the sensor number is 0xFF move on */
+@@ -1351,7 +1398,8 @@ uint32_t bld_sensor_node(devTree * i_dt, const dtOffset_t & i_sensorNode,
+             {
+                 /* use this row to create the next sensor node - ignoring
+                  * return value for now */
+-                bld_sensor_node(i_dt, i_sensorNode, l_sensors[i] );
++                bld_sensor_node(i_dt, i_sensorNode, l_sensors[i],
++                        getInstanceNumber(i_pTarget) , chipId );
+             }
+             else
+             {
+@@ -1394,10 +1442,6 @@ errlHndl_t bld_fdt_sensors(devTree * i_dt, const dtOffset_t & i_parentNode,
+     i_dt->addPropertyCell32(sensorNode, "#address-cells", 1);
+     i_dt->addPropertyCell32(sensorNode, "#size-cells", 0);
+ 
+-    // pass ALL IPMI_SENSORS to opal
+-    // @TODO RTC:113902 - add remaining sensor info and limit sensors
+-    // and adjust the sensors passed to opal to match their requirements
+-
+     /*  loop through all the targets and get the IPMI sensor data if it
+         exists */
+     for (TargetIterator itr = TARGETING::targetService().begin();
+@@ -1454,6 +1498,7 @@ errlHndl_t bld_fdt_bmc(devTree * i_dt, bool i_smallTree)
+ 
+     return errhdl;
+ }
++#endif
+ 
+ errlHndl_t bld_fdt_vpd(devTree * i_dt, bool i_smallTree)
+ {
+diff --git a/src/usr/ipmi/ipmisensor.C b/src/usr/ipmi/ipmisensor.C
+index 3e15e91..fc7284b 100644
+--- a/src/usr/ipmi/ipmisensor.C
++++ b/src/usr/ipmi/ipmisensor.C
+@@ -1121,4 +1121,80 @@ namespace SENSOR
+         return NULL;
+     }
+ 
++    uint16_t getSensorOffsets( TARGETING::SENSOR_NAME i_name,
++                             sensorReadingType &o_readType )
++    {
++
++        uint16_t offsets = 0;
++
++        // most of our sensors use generic sensor specific reading types
++        // so use that as the default value
++        o_readType = SENSOR_SPECIFIC;
++
++        // sensor type is lower byte of sensor name, if we dont match
++        // based on name, then try the sensor type
++        uint16_t t = ( i_name >> 8 ) & 0x00FF;
++
++        switch( i_name )
++        {
++            case TARGETING::SENSOR_NAME_FW_BOOT_PROGRESS:
++                {
++                    offsets = ( 1 << SYSTEM_FIRMWARE_PROGRESS );
++                    break;
++                }
++            case TARGETING::SENSOR_NAME_OCC_ACTIVE:
++                {
++                    offsets = ( 1 << DEVICE_DISABLED ) |
++                              ( 1 << DEVICE_ENABLED );
++                    o_readType = DIGITAL_ENABLE_DISABLE;
++                    break;
++                }
++            case TARGETING::SENSOR_NAME_HOST_STATUS:
++                {
++                    offsets = ( 1 << S0_G0_WORKING ) |
++                              ( 1 << G5_SOFT_OFF )   |
++                              ( 1 << LEGACY_ON );
++                    break;
++                }
++            case TARGETING::SENSOR_NAME_PCI_ACTIVE:
++            case TARGETING::SENSOR_NAME_OS_BOOT:
++                {
++                    // default all offsets enabled
++                    offsets = 0x7FFF;
++                    break;
++                }
++
++                default:
++                {
++                    // try sensor type
++                    switch (t)
++                    {
++                        case TARGETING::SENSOR_TYPE_FAULT:
++                            offsets = ( 1 << ASSERTED );
++                            o_readType = DIGITAL_ASSERT_DEASSERT;
++                            break;
++
++                        case TARGETING::SENSOR_TYPE_PROCESSOR:
++                            offsets = ( 1 << PROC_PRESENCE_DETECTED ) |
++                                      ( 1 << PROC_DISABLED )         |
++                                      ( 1 << IERR );
++                            break;
++
++                        case TARGETING::SENSOR_TYPE_MEMORY:
++                            offsets = ( 1 << MEMORY_DEVICE_DISABLED ) |
++                                      ( 1 << MEM_DEVICE_PRESENCE_DETECTED );
++                            break;
++                        default:
++                            offsets = 0;
++                            o_readType = THRESHOLD;
++                            break;
++                    }
++
++                }
++        }
++
++        return offsets;
++    }
++
++
+ }; // end name space
+diff --git a/src/usr/targeting/common/Targets.pm b/src/usr/targeting/common/Targets.pm
+index eb1ea1f..29f6bcb 100644
+--- a/src/usr/targeting/common/Targets.pm
++++ b/src/usr/targeting/common/Targets.pm
+@@ -195,7 +195,7 @@ sub printAttribute
+     $filter{ENTITY_ID_LOOKUP}               = 1;
+     $filter{ENTITY_INSTANCE}                = 1;
+     $filter{MBA_NUM}                        = 1;
+-    $filter{IPMI_INSTANCE}                  = 1;
++    $filter{IPMI_INSTANCE}                  = 0;
+     $filter{IPMI_NAME}                      = 1;
+     $filter{INSTANCE_ID}                    = 1;
+     #$filter{ADC_CHANNEL_SENSOR_NUMBERS}     = 1;
+diff --git a/src/usr/targeting/common/xmltohb/attribute_types_hb.xml b/src/usr/targeting/common/xmltohb/attribute_types_hb.xml
+index 3bb57e6..74fb492 100644
+--- a/src/usr/targeting/common/xmltohb/attribute_types_hb.xml
++++ b/src/usr/targeting/common/xmltohb/attribute_types_hb.xml
+@@ -822,6 +822,16 @@
+     <writeable/>
+     <hbOnly/>
+ </attribute>
++<attribute>
++    <id>IPMI_INSTANCE</id>
++    <description>Holds the IPMI instance number for this entity.</description>
++    <simpleType>
++        <uint32_t>
++        </uint32_t>
++    </simpleType>
++    <persistency>non-volatile</persistency>
++    <readable/>
++</attribute>
+ <enumerationType>
+     <id>ENTITY_ID</id>
+     <description>Enumeration indicating the IPMI entity ID, these values are
+@@ -1003,6 +1013,69 @@
+     </enumerator>
+ </enumerationType>
+ 
++<enumerationType>
++    <id>SENSOR_TYPE</id>
++    <description>Enumeration indicating the IPMI sensor type, these values
++        are defined in the IPMI specification. These values will be used when
++    sending sensor reading events to the BMC.</description>
++    <enumerator>
++        <name>NA</name>
++        <value>0</value>
++    </enumerator>
++    <enumerator>
++        <name>TEMPERATURE</name>
++        <value>0x01</value>
++    </enumerator>
++    <enumerator>
++        <name>PROCESSOR</name>
++        <value>0x07</value>
++    </enumerator>
++    <enumerator>
++        <name>MEMORY</name>
++        <value>0x0c</value>
++    </enumerator>
++    <enumerator>
++        <name>SYS_FW_PROGRESS</name>
++        <value>0x0F</value>
++    </enumerator>
++    <enumerator>
++        <name>SYS_EVENT</name>
++        <value>0x12</value>
++    </enumerator>
++    <enumerator>
++        <name>OS_BOOT</name>
++       <value>0x1F</value>
++    </enumerator>
++    <enumerator>
++        <name>APCI_POWER_STATE</name>
++        <value>0x22</value>
++    </enumerator>
++    <enumerator>
++        <name>FREQ</name>
++        <value>0xC1</value>
++    </enumerator>
++    <enumerator>
++        <name>POWER</name>
++        <value>0xC2</value>
++    </enumerator>
++    <enumerator>
++        <name>BOOT_COUNT</name>
++        <value>0xC3</value>
++    </enumerator>
++    <enumerator>
++        <name>PCI_LINK_PRES</name>
++        <value>0xC4</value>
++    </enumerator>
++    <enumerator>
++        <name>PWR_LIMIT_ACTIVE</name>
++        <value>0xC4</value>
++    </enumerator>
++    <enumerator>
++        <name>FAULT</name>
++        <value>0xC7</value>
++    </enumerator>
++</enumerationType>
++
+ <!-- IPMI Sensor numbers are defined in the IPMI spec as 8 bit values. However
+ in the hostboot code they will be defined as a uint16_t to allow us to add
+ additonal information. An example relates to error logs returned by the OCC,
+diff --git a/src/usr/targeting/common/xmltohb/target_types_hb.xml b/src/usr/targeting/common/xmltohb/target_types_hb.xml
+index 8255b70..bd00b87 100644
+--- a/src/usr/targeting/common/xmltohb/target_types_hb.xml
++++ b/src/usr/targeting/common/xmltohb/target_types_hb.xml
+@@ -33,6 +33,14 @@
+      ================================================================= -->
+ 
+ <targetTypeExtension>
++    <id>base</id>
++    <attribute>
++        <id>IPMI_INSTANCE</id>
++        <default>0</default>
++    </attribute>
++</targetTypeExtension>
++
++<targetTypeExtension>
+     <id>sys-sys-power8</id>
+     <attribute><id>IS_MPIPL_HB</id></attribute>
+     <attribute><id>IBSCOM_ENABLE_OVERRIDE</id></attribute>
+@@ -182,9 +190,7 @@
+     <attribute>
+         <id>PSTATE_TABLE</id>
+     </attribute>
+-    <attribute>
+-        <id>IPMI_SENSORS</id>
+-    </attribute>
++    <attribute><id>IPMI_SENSORS</id></attribute>
+ </targetTypeExtension>
+ 
+ <targetTypeExtension>
+-- 
+1.7.4.1
+
diff --git a/openpower/package/hostboot/hostboot-0008-Report-pnor-side-booted-up-on-A-B-to-OPAL.patch b/openpower/package/hostboot/hostboot-0008-Report-pnor-side-booted-up-on-A-B-to-OPAL.patch
new file mode 100644
index 0000000..7abf536
--- /dev/null
+++ b/openpower/package/hostboot/hostboot-0008-Report-pnor-side-booted-up-on-A-B-to-OPAL.patch
@@ -0,0 +1,207 @@
+From 2dd8eb6b90b7dfe63587292e163e27075f652b40 Mon Sep 17 00:00:00 2001
+From: Bill Schwartz <whs@us.ibm.com>
+Date: Wed, 11 Feb 2015 05:17:23 -0600
+Subject: [PATCH 4/5] Report pnor side booted up on A/B to OPAL
+
+This story will use the getPnorInfo and getSideInfo interfaces
+to fill in devtree entries informing Opal about the existence,
+location, and state of PNOR sides that we know about.  We will pass up a list
+of TOCs associated with the active side and the inactive side.
+
+RTC: 109703
+Change-Id: I740b086a9e22a0bc167141e3565bf813e50d9a00
+(cherry picked from commit b42f65df9fddb3938c096c23ccdcb2568a727120)
+---
+ src/include/usr/pnor/pnorif.H |    5 ++
+ src/usr/devtree/bld_devtree.C |  110 +++++++++++++++++++++++++++++++++++++++++
+ src/usr/pnor/pnor_common.H    |    1 -
+ src/usr/pnor/pnordd.C         |    3 +-
+ 4 files changed, 117 insertions(+), 2 deletions(-)
+
+diff --git a/src/include/usr/pnor/pnorif.H b/src/include/usr/pnor/pnorif.H
+index e12ccf1..0fc5a83 100644
+--- a/src/include/usr/pnor/pnorif.H
++++ b/src/include/usr/pnor/pnorif.H
+@@ -120,6 +120,11 @@ struct SideInfo_t
+     uint64_t hbbMmioOffset; /**< HBB MMIO Offset associated with hbbAddress*/
+ };
+ 
++enum
++{
++    INVALID_OFFSET = 0xFFFFFFF,  // Invalid primary or alternate TOC
++};
++
+ /**
+  * @brief Returns information about a given side of pnor
+  *
+diff --git a/src/usr/devtree/bld_devtree.C b/src/usr/devtree/bld_devtree.C
+index f4647a3..d90c1fd 100644
+--- a/src/usr/devtree/bld_devtree.C
++++ b/src/usr/devtree/bld_devtree.C
+@@ -405,6 +405,113 @@ void add_i2c_info( const TARGETING::Target* i_targ,
+ 
+ }
+ 
++void bld_getSideInfo(PNOR::SideId i_side,
++                     uint32_t     o_TOCaddress[2],
++                     uint8_t    & o_count,
++                     bool       & o_isGolden)
++{
++    errlHndl_t  errhdl = NULL;
++    PNOR::SideInfo_t  l_info;
++
++    o_count = 0;
++    o_isGolden = false;
++
++    errhdl = getSideInfo (i_side, l_info);
++    if (!errhdl)
++    {
++        // return the valid TOC offsets & count of valid TOCs
++        if (PNOR::INVALID_OFFSET != l_info.primaryTOC)
++        {
++            o_TOCaddress[o_count++] = l_info.primaryTOC;
++        }
++        if (PNOR::INVALID_OFFSET != l_info.backupTOC)
++        {
++            o_TOCaddress[o_count++] = l_info.backupTOC;
++        }
++        o_isGolden      = l_info.isGolden;
++    }
++    else
++    {
++        // commit error and return 0 TOC offsets
++        errlCommit(errhdl, DEVTREE_COMP_ID);
++    }
++
++    return;
++}
++
++void bld_fdt_pnor(devTree *   i_dt,
++                  dtOffset_t  i_parentNode)
++{
++    do
++    {
++        uint32_t l_active[2]    = {PNOR::INVALID_OFFSET,PNOR::INVALID_OFFSET};
++        uint32_t l_golden[2]    = {PNOR::INVALID_OFFSET,PNOR::INVALID_OFFSET};
++        uint8_t  l_count = 0;
++        bool     l_isGolden = false;
++        bool     l_goldenFound = false;
++        uint8_t  l_goldenCount = 0;
++        PNOR::PnorInfo_t l_pnorInfo;
++
++        //Get pnor address and size
++        getPnorInfo (l_pnorInfo);
++
++        dtOffset_t l_pnorNode = i_dt->addNode(i_parentNode,
++                                              "pnor",
++                                              l_pnorInfo.mmioOffset);
++
++        const uint8_t l_isaLinkage = 0; // 0==Mem
++        uint32_t pnor_prop[3] = {l_isaLinkage,
++                                 l_pnorInfo.mmioOffset,
++                                 l_pnorInfo.flashSize};
++        i_dt->addPropertyCells32(l_pnorNode, "reg", pnor_prop, 3);
++
++        //Add Working/Active parition
++        bld_getSideInfo(PNOR::WORKING,l_active,l_count,l_isGolden);
++        if (l_count) // valid TOCs present
++        {
++            i_dt->addPropertyCells32(l_pnorNode,
++                                 "active-image-tocs", l_active, l_count);
++            // capture golden
++            if (l_isGolden)
++            {
++                l_golden[0] = l_active[0];
++                l_golden[1] = l_active[1];
++                l_goldenCount = l_count;
++                l_goldenFound = true;
++            }
++        }
++
++#if CONFIG_PNOR_TWO_SIDE_SUPPORT
++        //Add Alternate parition
++        uint32_t l_alternate[2] = {PNOR::INVALID_OFFSET,PNOR::INVALID_OFFSET};
++
++        bld_getSideInfo(PNOR::ALTERNATE,l_alternate,l_count,l_isGolden);
++        if (l_count) // valid TOCs present
++        {
++            i_dt->addPropertyCells32(l_pnorNode,
++                                 "alternate-image-tocs",l_alternate,l_count);
++            // capture golden
++            if (l_isGolden)
++            {
++                l_golden[0] = l_alternate[0];
++                l_golden[1] = l_alternate[1];
++                l_goldenCount = l_count;
++                l_goldenFound = true;
++            }
++        }
++#endif
++
++        //Include golden if there is one
++        if (l_goldenFound)
++        {
++            i_dt->addPropertyCells32(l_pnorNode,
++                                 "golden-image-tocs",l_golden,l_goldenCount);
++        }
++
++    } while (0);
++
++    return;
++}
+ 
+ void bld_xscom_node(devTree * i_dt, dtOffset_t & i_parentNode,
+                     const TARGETING::Target * i_pProc, uint32_t i_chipid)
+@@ -488,6 +595,8 @@ void bld_xscom_node(devTree * i_dt, dtOffset_t & i_parentNode,
+         i_dt->addPropertyCell32(lpcNode, "#address-cells", 2);
+         i_dt->addPropertyCell32(lpcNode, "#size-cells", 1);
+ 
++        bld_fdt_pnor (i_dt, lpcNode);
++
+     }
+ 
+     /*NX*/
+@@ -908,6 +1017,7 @@ void load_hbrt_image(uint64_t& io_address)
+     }
+ }
+ 
++
+ errlHndl_t bld_fdt_system(devTree * i_dt, bool i_smallTree)
+ {
+     errlHndl_t errhdl = NULL;
+diff --git a/src/usr/pnor/pnor_common.H b/src/usr/pnor/pnor_common.H
+index dd7ab2e..7213add 100644
+--- a/src/usr/pnor/pnor_common.H
++++ b/src/usr/pnor/pnor_common.H
+@@ -61,7 +61,6 @@ namespace PNOR {
+         SUPPORTED_FFS_VERSION = 0x1,  /**< Supported FFS Version */
+         FFS_TABLE_BASE_ADDR = 0x0,    /**< Currently only have FFS table */
+         TOC_SIZE = 0x8000,
+-        INVALID_OFFSET = 0xFFFFFFF,
+     };
+ 
+     /**
+diff --git a/src/usr/pnor/pnordd.C b/src/usr/pnor/pnordd.C
+index 13667ce..c0c7b0e 100644
+--- a/src/usr/pnor/pnordd.C
++++ b/src/usr/pnor/pnordd.C
+@@ -46,6 +46,7 @@
+ #include <errl/errludstring.H>
+ #include <targeting/common/targetservice.H>
+ #include "pnordd.H"
++#include "pnor_common.H"
+ #include <pnor/pnorif.H>
+ #include <pnor/pnor_reasoncodes.H>
+ #include <sys/time.h>
+@@ -196,7 +197,7 @@ bool usingL3Cache()
+  */
+ void getPnorInfo( PnorInfo_t& o_pnorInfo )
+ {
+-    o_pnorInfo.mmioOffset = 0; //LPC_SFC_MMIO_OFFSET;//@fixme-need Prachi's code for this
++    o_pnorInfo.mmioOffset = LPC_SFC_MMIO_OFFSET|LPC_FW_SPACE;
+     o_pnorInfo.norWorkarounds =
+       Singleton<PnorDD>::instance().getNorWorkarounds();
+     o_pnorInfo.flashSize =
+-- 
+1.7.4.1
+
diff --git a/openpower/package/hostboot/hostboot-0009-Change-Opal-Devtree-IPMI-FRU_ID-Name.patch b/openpower/package/hostboot/hostboot-0009-Change-Opal-Devtree-IPMI-FRU_ID-Name.patch
new file mode 100644
index 0000000..35944b9
--- /dev/null
+++ b/openpower/package/hostboot/hostboot-0009-Change-Opal-Devtree-IPMI-FRU_ID-Name.patch
@@ -0,0 +1,28 @@
+From 90c6df43a7b7836f973d0fbae5c751742d305e37 Mon Sep 17 00:00:00 2001
+From: Bill Hoffa <wghoffa@us.ibm.com>
+Date: Fri, 27 Feb 2015 11:33:07 -0600
+Subject: [PATCH 4/5] Change Opal Devtree IPMI FRU_ID Name
+
+Change-Id: I95156302b65c1a1be611d081e842eaf2aac5d03a
+RTC:124830
+(cherry picked from commit 3847eee998f35baeee1a3c085042ff0cdb78e5d1)
+---
+ src/usr/devtree/bld_devtree.C |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/src/usr/devtree/bld_devtree.C b/src/usr/devtree/bld_devtree.C
+index d90c1fd..66b0d6f 100644
+--- a/src/usr/devtree/bld_devtree.C
++++ b/src/usr/devtree/bld_devtree.C
+@@ -1600,7 +1600,7 @@ errlHndl_t bld_fdt_bmc(devTree * i_dt, bool i_smallTree)
+     TARGETING::targetService().getTopLevelTarget(pSys);
+     assert(pSys != NULL,
+                "bld_fdt_bmc - Error: Could not find the top level target.");
+-    i_dt->addPropertyCell32(bmcNode, "fruId",
++    i_dt->addPropertyCell32(bmcNode, "firmware-fru-id",
+                                    pSys->getAttr<TARGETING::ATTR_FRU_ID>());
+ 
+     /* create a node to hold the sensors */
+-- 
+1.7.4.1
+
diff --git a/openpower/package/hostboot/hostboot.mk b/openpower/package/hostboot/hostboot.mk
index 99de01f..a415be2 100644
--- a/openpower/package/hostboot/hostboot.mk
+++ b/openpower/package/hostboot/hostboot.mk
@@ -4,7 +4,7 @@
 #
 ################################################################################
 
-HOSTBOOT_VERSION ?= 84a672bd28630d9998fc2808df3659ddcf5a7eda
+HOSTBOOT_VERSION ?= 6c9eac071a9a79921c4b360af53e023dad19666f
 HOSTBOOT_SITE ?= $(call github,open-power,hostboot,$(HOSTBOOT_VERSION))
 
 HOSTBOOT_LICENSE = Apache-2.0
diff --git a/openpower/package/palmetto-xml/palmetto-xml.mk b/openpower/package/palmetto-xml/palmetto-xml.mk
index 8b005dd..72803ff 100644
--- a/openpower/package/palmetto-xml/palmetto-xml.mk
+++ b/openpower/package/palmetto-xml/palmetto-xml.mk
@@ -4,7 +4,7 @@
 #
 ################################################################################
 
-PALMETTO_XML_VERSION = d64b97a28bbc905a991a176b53952b469198e74c
+PALMETTO_XML_VERSION = 84f5bf5cc10459a85340cd0cc82a8c65b5bc4c97
 PALMETTO_XML_SITE = $(call github,open-power,palmetto-xml,$(PALMETTO_XML_VERSION))
 
 PALMETTO_XML_LICENSE = Apache-2.0