op-build current based on
https://github.com/open-power/hostboot/commit/bda236e6e0c7d3aa5165160abbd5ead92ac0a68e
diff --git a/openpower/package/hostboot/hostboot-0006-Runtime-fixes-for-IPMI.patch b/openpower/package/hostboot/hostboot-0006-Runtime-fixes-for-IPMI.patch
deleted file mode 100644
index 011dae7..0000000
--- a/openpower/package/hostboot/hostboot-0006-Runtime-fixes-for-IPMI.patch
+++ /dev/null
@@ -1,70 +0,0 @@
-From 94cd1249c46be945efa92f09c41e27bfaacc9405 Mon Sep 17 00:00:00 2001
-From: Dan Crowell <dcrowell@us.ibm.com>
-Date: Sun, 1 Mar 2015 12:32:24 -0600
-Subject: [PATCH 1/4] Runtime fixes for IPMI
-
--initialize trace buffer in IPMI runtime code
--fix buffer mixup
--fix netfn format for opal call
-
-Change-Id: I612431f81d40f1698b585353da9c245adf1447e1
-(cherry picked from commit f4998cabf6ff541de0624532a5fa46bdf96419d1)
----
- src/usr/ipmi/runtime/rt_ipmirp.C | 12 ++++++++----
- 1 files changed, 8 insertions(+), 4 deletions(-)
-
-diff --git a/src/usr/ipmi/runtime/rt_ipmirp.C b/src/usr/ipmi/runtime/rt_ipmirp.C
-index f99723a..846e068 100644
---- a/src/usr/ipmi/runtime/rt_ipmirp.C
-+++ b/src/usr/ipmi/runtime/rt_ipmirp.C
-@@ -49,6 +49,8 @@
- #include <runtime/interface.h>
-
- trace_desc_t * g_trac_ipmi;
-+TRAC_INIT(&g_trac_ipmi, IPMI_COMP_NAME, 6*KILOBYTE, TRACE::BUFFER_SLOW);
-+
- #define IPMI_TRAC(printf_string,args...) \
- TRACFCOMP(g_trac_ipmi,"rt: "printf_string,##args)
-
-@@ -89,8 +91,9 @@ namespace IPMI
- // if the buffer is too large this is a programming error.
- assert(io_len <= max_buffer());
-
-+ uint8_t netfn = i_cmd.first >> 2; //remove embedded LUN
- IPMI_TRAC("calling sync %x:%x len=%d",
-- i_cmd.first, i_cmd.second, io_len);
-+ netfn, i_cmd.second, io_len);
-
- if(g_hostInterfaces && g_hostInterfaces->ipmi_msg)
- {
-@@ -98,7 +101,7 @@ namespace IPMI
- uint8_t *l_data = new uint8_t[l_len];
-
- rc = g_hostInterfaces->ipmi_msg(
-- i_cmd.first, i_cmd.second,
-+ netfn, i_cmd.second,
- io_data, io_len,
- l_data, &l_len);
-
-@@ -124,7 +127,7 @@ namespace IPMI
- IPMI::MOD_IPMIRT,
- IPMI::RC_INVALID_SENDRECV,
- TWO_UINT32_TO_UINT64(rc,
-- TWO_UINT16_TO_UINT32(i_cmd.first, i_cmd.second)),
-+ TWO_UINT16_TO_UINT32(netfn, i_cmd.second)),
- io_len,
- true);
- err->collectTrace(IPMI_COMP_NAME);
-@@ -135,7 +138,8 @@ namespace IPMI
- else
- {
- // clean up the memory for the caller
-- o_completion_code = static_cast<IPMI::completion_code>(io_data[0]);
-+ o_completion_code =
-+ static_cast<IPMI::completion_code>(l_data[0]);
-
- // now need to create the buffer to return
- io_len = l_len - 1; // get rid of the completion_code
---
-1.7.4.1
-
diff --git a/openpower/package/hostboot/hostboot-0006-sbe-pnor.patch b/openpower/package/hostboot/hostboot-0006-sbe-pnor.patch
new file mode 100644
index 0000000..cbf25e1
--- /dev/null
+++ b/openpower/package/hostboot/hostboot-0006-sbe-pnor.patch
@@ -0,0 +1,28 @@
+From 961d01024912ce7b0547095d38921bdd61ae8cd8 Mon Sep 17 00:00:00 2001
+From: Brian Horton <brianh@linux.ibm.com>
+Date: Wed, 11 Mar 2015 10:14:31 -0500
+Subject: [PATCH] fix SBE/PNOR merge issues
+
+Change-Id: I74752dbfa50fc78be66a9f185a7c6bc4d31732cd
+---
+ src/usr/sbe/sbe_update.C | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/usr/sbe/sbe_update.C b/src/usr/sbe/sbe_update.C
+index a559229..5ac4909 100644
+--- a/src/usr/sbe/sbe_update.C
++++ b/src/usr/sbe/sbe_update.C
+@@ -1791,8 +1791,8 @@ namespace SBE
+ reinterpret_cast<void*>(SBE_IMG_VADDR),
+ ((io_sbeState.seeprom_side_to_update ==
+ EEPROM::SBE_PRIMARY ) ?
+- PNOR::SBE_SEEPROM0 :
+- PNOR::SBE_SEEPROM1 ),
++ SBE_SEEPROM0 :
++ SBE_SEEPROM1 ),
+ PNOR::WORKING,
+ imageWasUpdated );
+
+--
+1.7.4.1
+
diff --git a/openpower/package/hostboot/hostboot-0007-Update-DIMM_TEMP-Sensor-Enum.patch b/openpower/package/hostboot/hostboot-0007-Update-DIMM_TEMP-Sensor-Enum.patch
deleted file mode 100644
index 63ceb6e..0000000
--- a/openpower/package/hostboot/hostboot-0007-Update-DIMM_TEMP-Sensor-Enum.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From e929e3bdbabad39c4c21ed220b0be7078afe0ef7 Mon Sep 17 00:00:00 2001
-From: Bill Hoffa <wghoffa@us.ibm.com>
-Date: Sun, 1 Mar 2015 18:38:45 -0600
-Subject: [PATCH 3/4] Update DIMM_TEMP Sensor Enum
-
-Change-Id: Ia850e56b85f13b4b421525541f547bde03cb4cbc
-RTC:124867
-(cherry picked from commit e9ad83fc6a2f0cc32826291c20d731337ba76f42)
----
- .../common/xmltohb/attribute_types_hb.xml | 2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/src/usr/targeting/common/xmltohb/attribute_types_hb.xml b/src/usr/targeting/common/xmltohb/attribute_types_hb.xml
-index 74fb492..3c00c33 100644
---- a/src/usr/targeting/common/xmltohb/attribute_types_hb.xml
-+++ b/src/usr/targeting/common/xmltohb/attribute_types_hb.xml
-@@ -917,7 +917,7 @@
- </enumerator>
- <enumerator>
- <name>DIMM_TEMP</name>
-- <value>0x01C0</value>
-+ <value>0x0120</value>
- </enumerator>
- <enumerator>
- <name>CORE_TEMP</name>
---
-1.7.4.1
-
diff --git a/openpower/package/hostboot/hostboot-0008-mss-thermal-init-SW297647.patch b/openpower/package/hostboot/hostboot-0007-mss-thermal-init-SW297647_and_undo.patch
similarity index 67%
rename from openpower/package/hostboot/hostboot-0008-mss-thermal-init-SW297647.patch
rename to openpower/package/hostboot/hostboot-0007-mss-thermal-init-SW297647_and_undo.patch
index 5ed49f8..f6eafe5 100644
--- a/openpower/package/hostboot/hostboot-0008-mss-thermal-init-SW297647.patch
+++ b/openpower/package/hostboot/hostboot-0007-mss-thermal-init-SW297647_and_undo.patch
@@ -1,35 +1,38 @@
-From 1b7b2c8af560b71aa1dcddb4e8075047a1321d1e Mon Sep 17 00:00:00 2001
-From: Matt Ploetz <maploetz@us.ibm.com>
-Date: Wed, 4 Mar 2015 13:25:30 -0600
+From 430bf7d7b8194bf7789db053999464390e143fdc Mon Sep 17 00:00:00 2001
+From: Brian Horton <brianh@linux.ibm.com>
+Date: Wed, 11 Mar 2015 16:13:11 -0500
Subject: [PATCH] mss thermal patch from Mike Pradik
-Change-Id: I0980f7b996a854f92c0ffad39eb32758539df91e
+AND undeo 1.18 attribute change
+
+Change-Id: I0c3e9d126077fb18bb771909631e0491da4b5f99
---
- .../mss_thermal_init/mss_thermal_init.C | 23 ++++++++++++++++++----
- 1 file changed, 19 insertions(+), 4 deletions(-)
+ .../mss_thermal_init/mss_thermal_init.C | 26 ++++++++++++++++----
+ 1 files changed, 21 insertions(+), 5 deletions(-)
diff --git a/src/usr/hwpf/hwp/dram_initialization/mss_thermal_init/mss_thermal_init.C b/src/usr/hwpf/hwp/dram_initialization/mss_thermal_init/mss_thermal_init.C
-index aa217c6..2e6600f 100644
+index e09f47f..dc21852 100644
--- a/src/usr/hwpf/hwp/dram_initialization/mss_thermal_init/mss_thermal_init.C
+++ b/src/usr/hwpf/hwp/dram_initialization/mss_thermal_init/mss_thermal_init.C
@@ -22,7 +22,7 @@
/* permissions and limitations under the License. */
/* */
/* IBM_PROLOG_END_TAG */
--// $Id: mss_thermal_init.C,v 1.18 2015/01/23 17:54:09 dcrowell Exp $
-+// $Id: mss_thermal_init.C,v 1.18b CHANGED IN OPENPOWER PATCH maploetz Exp $
+-// $Id: mss_thermal_init.C,v 1.19 2015/02/12 23:23:56 pardeik Exp $
++// $Id: mss_thermal_init.C,v 1.18c CHANGED IN OPENPOWER PATCH brianh Exp $
// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/centaur/working/procedures/ipl/fapi/mss_thermal_init.C,v $
//------------------------------------------------------------------------------
// *! (C) Copyright International Business Machines Corp. 2011
-@@ -49,6 +49,7 @@
+@@ -49,6 +49,8 @@
//------------------------------------------------------------------------------
// Version:| Author: | Date: | Comment:
//---------|----------|---------|-----------------------------------------------
++// 1.18v | brianhk |11-MAR-15| undo 1.18 change
+// 1.18u | pardeik |03-MAR-15| user version to be like v1.20
+ // 1.18 | pardeik |12-FEB-15| change ATTR_MRW_MEM_SENSOR_CACHE_ADDR_MAP to
+ // | a centaur target (was system)
// 1.17 | pardeik |19-NOV-14| Use MRW attribute for SC address map for ISDIMMs
- // 1.16 | pardeik |06-FEB-14| removed string in trace statement
- // 1.15 | pardeik |24-FEB-14| added support for ATTR_MRW_CDIMM_SPARE_I2C_TEMP_SENSOR_ENABLE
-@@ -158,6 +159,7 @@ fapi::ReturnCode mss_thermal_init(const fapi::Target & i_target)
+@@ -160,6 +162,7 @@ fapi::ReturnCode mss_thermal_init(const fapi::Target & i_target)
const uint8_t I2C_BUS_ENCODE_PRIMARY = 0;
const uint8_t I2C_BUS_ENCODE_SECONDARY = 8;
const uint8_t MAX_NUM_DIMM_SENSORS = 8;
@@ -37,7 +40,7 @@
// Variable declaration
uint8_t l_dimm_ranks_array[l_NUM_MBAS][l_NUM_PORTS][l_NUM_DIMMS]; // Number of ranks for each configured DIMM in each MBA
-@@ -247,6 +249,19 @@ fapi::ReturnCode mss_thermal_init(const fapi::Target & i_target)
+@@ -249,6 +252,19 @@ fapi::ReturnCode mss_thermal_init(const fapi::Target & i_target)
l_custom_dimm[i] = fapi::ENUM_ATTR_EFF_CUSTOM_DIMM_NO;
}
@@ -57,7 +60,16 @@
for (uint8_t mba_index = 0; mba_index < l_target_mba_array.size(); mba_index++){
l_rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, &l_target_mba_array[mba_index], l_mba_pos);
if (l_rc) return l_rc;
-@@ -397,9 +412,9 @@ fapi::ReturnCode mss_thermal_init(const fapi::Target & i_target)
+@@ -279,7 +295,7 @@ fapi::ReturnCode mss_thermal_init(const fapi::Target & i_target)
+ else
+ {
+ // sensor cache address map for non custom dimm temperature sensors (which i2c bus and i2c address they are)
+- l_rc = FAPI_ATTR_GET(ATTR_MRW_MEM_SENSOR_CACHE_ADDR_MAP, &i_target, l_dimm_sensor_cache_addr_map);
++ l_rc = FAPI_ATTR_GET(ATTR_MRW_MEM_SENSOR_CACHE_ADDR_MAP, NULL, l_dimm_sensor_cache_addr_map);
+ if (l_rc) return l_rc;
+ }
+
+@@ -399,9 +415,9 @@ fapi::ReturnCode mss_thermal_init(const fapi::Target & i_target)
l_cdimm_number_dimm_temp_sensors = 0;
// cycle through both primary and secondary i2c busses, determine i2c address and enable bits
@@ -69,7 +81,7 @@
{
if (k == 0)
{
-@@ -490,7 +505,7 @@ fapi::ReturnCode mss_thermal_init(const fapi::Target & i_target)
+@@ -492,7 +508,7 @@ fapi::ReturnCode mss_thermal_init(const fapi::Target & i_target)
// Iterate through the num_ranks array to determine what DIMMs are plugged
// Enable sensor monitoring for each plugged DIMM
uint32_t l_iterator = 0;
@@ -79,5 +91,5 @@
l_ecmd_rc |= l_data_scac_enable.setBit(l_iterator);
}
--
-1.8.2.2
+1.7.4.1
diff --git a/openpower/package/hostboot/hostboot-0009-Sel-instead-of-eSel.patch b/openpower/package/hostboot/hostboot-0009-Sel-instead-of-eSel.patch
deleted file mode 100644
index 6b4c82d..0000000
--- a/openpower/package/hostboot/hostboot-0009-Sel-instead-of-eSel.patch
+++ /dev/null
@@ -1,201 +0,0 @@
-From 03029acd024ac886296f8ed0cbc711d9b81b26da Mon Sep 17 00:00:00 2001
-From: Brian Horton <brianh@linux.ibm.com>
-Date: Mon, 2 Mar 2015 12:12:28 -0600
-Subject: [PATCH] change error log to SEL processing
-
-for hostboot runtime, do not send eSEL (AMI bug)
-for hostboot ipl, send down SEL following eSEL
-
-Change-Id: I86ee9766e27548c3f7f72fbdbfd76c8a8be7da73
-RTC: 124971
----
- src/include/usr/ipmi/ipmisel.H | 18 ++++++++++--
- src/usr/errl/errlmanager_common.C | 4 ++-
- src/usr/ipmi/ipmisel.C | 61 ++++++++++++++++++++++++++++++++-------
- 3 files changed, 70 insertions(+), 13 deletions(-)
-
-diff --git a/src/include/usr/ipmi/ipmisel.H b/src/include/usr/ipmi/ipmisel.H
-index de2dd32..91e3651 100644
---- a/src/include/usr/ipmi/ipmisel.H
-+++ b/src/include/usr/ipmi/ipmisel.H
-@@ -65,11 +65,13 @@ namespace IPMISEL
- * @param[in] size of eSEL data
- * @param[in] eid of errorlog for this eSEL (for ack)
- * @param[in] event_dir_type for this eSEL
-+ * @param[in] event_offset for this eSEL
- * @param[in] sensorType that caused the error/eSEL
- * @param[in] sensorNumber that caused the error/eSEL
- */
- void sendESEL(uint8_t* i_eselData, uint32_t i_dataSize,
-- uint32_t i_eid, uint8_t i_eventDirType,
-+ uint32_t i_eid,
-+ uint8_t i_eventDirType, uint8_t i_eventOffset,
- uint8_t i_sensorType, uint8_t i_sensorNumber);
-
- // per IPMI Spec, section 32.1 SEL Event Records
-@@ -85,6 +87,7 @@ namespace IPMISEL
- format_ipmi_version_2_0 = 0x04,
- };
-
-+ // event_type, per section 42.1 of the IPMI spec
- enum sel_event_dir_type
- {
- event_unspecified = 0x00,
-@@ -93,11 +96,22 @@ namespace IPMISEL
- event_predictive = 0x04,
- event_limit = 0x05,
- event_permformance = 0x06,
-+ event_transition = 0x07,
-+ event_OEM = 0x70,
- };
-
- enum sel_event_data
- {
-- event_data1_ami = 0xAA,
-+ event_data1_ami = 0xAA,
-+ event_data1_trans_to_ok = 0x00,
-+ event_data1_trans_to_noncrit_from_ok = 0x01,
-+ event_data1_trans_to_crit_from_less = 0x02,
-+ event_data1_trans_to_non_recv_from_less = 0x03,
-+ event_data1_trans_to_non_crit_from_more = 0x04,
-+ event_data1_trans_to_crit_from_non_r = 0x05,
-+ event_data1_trans_to_non_recoverable = 0x06,
-+ event_data1_trans_monitor = 0x07,
-+ event_data1_trans_informational = 0x08,
- };
-
- enum sel_generator_id
-diff --git a/src/usr/errl/errlmanager_common.C b/src/usr/errl/errlmanager_common.C
-index a64ed3b..6c68818 100644
---- a/src/usr/errl/errlmanager_common.C
-+++ b/src/usr/errl/errlmanager_common.C
-@@ -135,7 +135,9 @@ void ErrlManager::sendErrLogToBmc(errlHndl_t &io_err)
- "sendErrLogToBmc: sensor %.2x/%.2x, size %d",
- l_sensorType, l_sensorNumber, l_pelSize);
- IPMISEL::sendESEL(l_pelData, l_pelSize,
-- io_err->eid(), IPMISEL::event_unspecified,
-+ io_err->eid(),
-+ IPMISEL::event_transition,
-+ IPMISEL::event_data1_trans_to_non_recoverable,
- l_sensorType, l_sensorNumber);
-
- // free the buffer
-diff --git a/src/usr/ipmi/ipmisel.C b/src/usr/ipmi/ipmisel.C
-index c05c60f..49dcee6 100644
---- a/src/usr/ipmi/ipmisel.C
-+++ b/src/usr/ipmi/ipmisel.C
-@@ -82,7 +82,8 @@ enum esel_retry
- namespace IPMISEL
- {
- void sendESEL(uint8_t* i_eselData, uint32_t i_dataSize,
-- uint32_t i_eid, uint8_t i_eventDirType,
-+ uint32_t i_eid,
-+ uint8_t i_eventDirType, uint8_t i_eventOffset,
- uint8_t i_sensorType, uint8_t i_sensorNumber)
- {
- IPMI_TRAC(ENTER_MRK "sendESEL()");
-@@ -100,13 +101,13 @@ void sendESEL(uint8_t* i_eselData, uint32_t i_dataSize,
-
- // create the sel record of information
- selRecord l_sel;
-- l_sel.record_type = record_type_ami_esel;
-+ l_sel.record_type = record_type_system_event;
- l_sel.generator_id = generator_id_ami;
- l_sel.evm_format_version = format_ipmi_version_2_0;
- l_sel.sensor_type = i_sensorType;
- l_sel.sensor_number = i_sensorNumber;
- l_sel.event_dir_type = i_eventDirType;
-- l_sel.event_data1 = event_data1_ami;
-+ l_sel.event_data1 = i_eventOffset;
-
- eselInitData *eselData =
- new eselInitData(&l_sel, i_eselData, i_dataSize);
-@@ -216,13 +217,16 @@ void send_esel(eselInitData * i_data,
- {
- IPMI_TRAC(ENTER_MRK "send_esel");
- uint8_t* data = NULL;
-- const size_t l_eSELlen = i_data->dataSize;
-
- size_t len = 0;
-- uint8_t reserveID[2] = {0,0};
- uint8_t esel_recordID[2] = {0,0};
-+ uint8_t sel_recordID[2] = {0,0};
-
-+#ifndef __HOSTBOOT_RUNTIME
-+// TODO RTC: 124972 take this out when runtime supports the eSEL
- do{
-+ const size_t l_eSELlen = i_data->dataSize;
-+ uint8_t reserveID[2] = {0,0};
- // we need to send down the extended sel data (eSEL), which is
- // longer than the protocol buffer, so we need to do a reservation and
- // call the AMI partial_add_esel command multiple times
-@@ -258,6 +262,9 @@ void send_esel(eselInitData * i_data,
- // copy in the SEL event record data
- memcpy(&data[PARTIAL_ADD_ESEL_REQ], i_data->eSel,
- sizeof(selRecord));
-+ // update to make this what AMI eSEL wants
-+ data[PARTIAL_ADD_ESEL_REQ + offsetof(selRecord,record_type)] = record_type_ami_esel;
-+ data[PARTIAL_ADD_ESEL_REQ + offsetof(selRecord,event_data1)] = event_data1_ami;
-
- o_cc = IPMI::CC_UNKBAD;
- TRACFBIN( g_trac_ipmi, INFO_MRK"1st partial_add_esel:", data, len);
-@@ -338,17 +345,51 @@ void send_esel(eselInitData * i_data,
- // BMC returns the recordID, it's always the same (unless
- // there's a major BMC bug...)
- storeReserveRecord(esel_recordID,data);
-+ } // while eSELindex
-+ }while(0);
-+#endif
-+
-+ // if eSEL wasn't created due to an error, we don't want to continue
-+ if(o_err == NULL)
-+ {
-+ // if the eSEL wasn't created due to a bad completion code, we will
-+ // still try to send down a SEL that we create, which will contain
-+ // the eSEL recordID (if it was successful)
-+ delete [] data;
-+ len = sizeof(IPMISEL::selRecord);
-+ data = new uint8_t[len];
-+
-+ // copy in the SEL event record data
-+ memcpy(data, i_data->eSel, sizeof(IPMISEL::selRecord));
-+ // copy the eSEL recordID (if it was created) into the extra data area
-+ data[offsetof(selRecord,event_data2)] = esel_recordID[1];
-+ data[offsetof(selRecord,event_data3)] = esel_recordID[0];
-+
-+ // use local cc so that we don't corrupt the esel from above
-+ IPMI::completion_code l_cc = IPMI::CC_UNKBAD;
-+ TRACFBIN( g_trac_ipmi, INFO_MRK"add_sel:", data, len);
-+ o_err = IPMI::sendrecv(IPMI::add_sel(),l_cc,len,data);
-+ if(o_err)
-+ {
-+ IPMI_TRAC(ERR_MRK "error from add_sel");
- }
-- if(o_err || (o_cc != IPMI::CC_OK))
-+ else if (l_cc != IPMI::CC_OK)
- {
-- break;
-+ IPMI_TRAC(ERR_MRK "failed add_sel, l_cc %02x", l_cc);
- }
-- }while(0);
-+ else
-+ {
-+ // if CC_OK, then len = 2 and data contains the recordID of the new SEL
-+ storeReserveRecord(sel_recordID,data);
-+ }
-+ }
-
- delete[] data;
-
-- IPMI_TRAC(EXIT_MRK "send_esel (o_err %.8X, o_cc x%.2x, recID=x%x%x)",
-- o_err ? o_err->plid() : NULL, o_cc, esel_recordID[1], esel_recordID[0]);
-+ IPMI_TRAC(EXIT_MRK
-+ "send_esel o_err=%.8X, o_cc=x%.2x, sel recID=x%x%x, esel recID=x%x%x",
-+ o_err ? o_err->plid() : NULL, o_cc, sel_recordID[1], sel_recordID[0],
-+ esel_recordID[1], esel_recordID[0]);
-
- return;
- } // send_esel
---
-1.8.2.2
-
diff --git a/openpower/package/hostboot/hostboot-0010-Reset-occ-when-fails-to-activate.patch b/openpower/package/hostboot/hostboot-0010-Reset-occ-when-fails-to-activate.patch
deleted file mode 100644
index 4b666b0..0000000
--- a/openpower/package/hostboot/hostboot-0010-Reset-occ-when-fails-to-activate.patch
+++ /dev/null
@@ -1,301 +0,0 @@
-From 98fc2914b15e89c2324c1636af62225c653e45f9 Mon Sep 17 00:00:00 2001
-From: Doug Gilbert <dgilbert@us.ibm.com>
-Date: Tue, 3 Mar 2015 16:00:29 -0600
-Subject: [PATCH] HTMGT add attempt to reset OCC when OCC Activate fails
-
-Change-Id: I964d2b68216c3ddabae73ce3b851bbc468ec96a7
-RTC: 123180
----
- src/include/usr/htmgt/htmgt_reasoncodes.H | 1 +
- src/usr/htmgt/htmgt.C | 123 ++++++++++++++++++------------
- src/usr/htmgt/htmgt_activate.C | 9 +++
- src/usr/htmgt/htmgt_occ.C | 32 +++++++-
- src/usr/htmgt/htmgt_occ.H | 1 +
- 5 files changed, 116 insertions(+), 50 deletions(-)
-
-diff --git a/src/include/usr/htmgt/htmgt_reasoncodes.H b/src/include/usr/htmgt/htmgt_reasoncodes.H
-index ade192d..6fe269d 100644
---- a/src/include/usr/htmgt/htmgt_reasoncodes.H
-+++ b/src/include/usr/htmgt/htmgt_reasoncodes.H
-@@ -48,6 +48,7 @@ namespace HTMGT
- HTMGT_MOD_CHECK_OCC_RSP = 0x92,
- HTMGT_MOD_PARSE_OCC_RSP = 0x94,
- HTMGT_MOD_HANLDE_OCC_EXCEPTION = 0xE0,
-+ HTMGT_MOD_ENABLE_OCC_ACTUATION = 0xE1,
- };
-
- enum htmgtReasonCode
-diff --git a/src/usr/htmgt/htmgt.C b/src/usr/htmgt/htmgt.C
-index aff2500..a2f556f 100644
---- a/src/usr/htmgt/htmgt.C
-+++ b/src/usr/htmgt/htmgt.C
-@@ -184,42 +184,30 @@ namespace HTMGT
-
- if (NULL != l_err)
- {
-- TMGT_ERR("OCCs not all active. System will stay in safe mode");
-+ TMGT_ERR("OCCs not all active. Attempting OCC Reset");
- TMGT_CONSOLE("OCCs are not active (rc=0x%04X). "
-- "System will remain in safe mode",
-+ "Attempting OCC Reset",
- l_err->reasonCode());
-- TMGT_INF("Calling HBOCC::stopAllOCCs");
-- errlHndl_t err2 = HBOCC::stopAllOCCs();
-+ TMGT_INF("Calling resetOccs");
-+ errlHndl_t err2 = OccManager::resetOccs(NULL);
- if(err2)
- {
-- TMGT_ERR("stopAllOCCs() failed with 0x%04X",
-+ TMGT_ERR("OccManager:;resetOccs failed with 0x%04X",
- err2->reasonCode());
-- ERRORLOG::errlCommit(err2, HTMGT_COMP_ID);
-- }
--
-- // Update error log to unrecoverable and set SRC
-- // to indicate the system will remain in safe mode
-- /*@
-- * @errortype
-- * @reasoncode HTMGT_RC_OCC_CRIT_FAILURE
-- * @moduleid HTMGT_MOD_LOAD_START_STATUS
-- * @userdata1[0:7] load/start completed
-- * @devdesc OCCs did not all reach active state,
-- * system will be in Safe Mode
-- */
-- bldErrLog(l_err, HTMGT_MOD_LOAD_START_STATUS,
-- HTMGT_RC_OCC_CRIT_FAILURE,
-- i_startCompleted, 0, 0, 1,
-- ERRORLOG::ERRL_SEV_UNRECOVERABLE);
-
-- // Add level 2 support callout
-- l_err->addProcedureCallout(HWAS::EPUB_PRC_LVL_SUPP,
-- HWAS::SRCI_PRIORITY_MED);
-- // Add HB firmware callout
-- l_err->addProcedureCallout(HWAS::EPUB_PRC_HB_CODE,
-- HWAS::SRCI_PRIORITY_MED);
-+ // Set original error log as unrecoverable and commit
-+ l_err->setSev(ERRORLOG::ERRL_SEV_UNRECOVERABLE);
-+ ERRORLOG::errlCommit(l_err, HTMGT_COMP_ID);
-
-- ERRORLOG::errlCommit(l_err, HTMGT_COMP_ID);
-+ // Commit occReset error
-+ ERRORLOG::errlCommit(err2, HTMGT_COMP_ID);
-+ }
-+ else
-+ {
-+ // retry worked - commit original error as informational
-+ l_err->setSev(ERRORLOG::ERRL_SEV_INFORMATIONAL);
-+ ERRORLOG::errlCommit(l_err, HTMGT_COMP_ID);
-+ }
- }
-
- } // end processOccStartStatus()
-@@ -229,6 +217,19 @@ namespace HTMGT
- // Notify HTMGT that an OCC has an error to report
- void processOccError(TARGETING::Target * i_procTarget)
- {
-+ TARGETING::Target* sys = NULL;
-+ TARGETING::targetService().getTopLevelTarget(sys);
-+ uint8_t safeMode = 0;
-+
-+ // If the system is in safemode then can't talk to OCCs -
-+ // ignore call to processOccError
-+ if(sys &&
-+ sys->tryGetAttr<TARGETING::ATTR_HTMGT_SAFEMODE>(safeMode) &&
-+ safeMode)
-+ {
-+ return;
-+ }
-+
- bool polledOneOcc = false;
- OccManager::buildOccs();
-
-@@ -347,29 +348,57 @@ namespace HTMGT
- // Set the OCC state
- errlHndl_t enableOccActuation(bool i_occActivation)
- {
-- occStateId targetState = OCC_STATE_ACTIVE;
-- if (false == i_occActivation)
-- {
-- targetState = OCC_STATE_OBSERVATION;
-- }
-+ errlHndl_t l_err = NULL;
-+ TARGETING::Target* sys = NULL;
-+
-+ TARGETING::targetService().getTopLevelTarget(sys);
-+ uint8_t safeMode = 0;
-
-- // Set state for all OCCs
-- errlHndl_t l_err = OccManager::setOccState(targetState);
-- if (NULL == l_err)
-+ // If the system is in safemode then can't talk to OCCs -
-+ // ignore call to enableOccActuation
-+ if(sys &&
-+ sys->tryGetAttr<TARGETING::ATTR_HTMGT_SAFEMODE>(safeMode) &&
-+ safeMode)
- {
-- TMGT_INF("enableOccActuation: OCC states updated to 0x%02X",
-- targetState);
-+ /*@
-+ * @errortype
-+ * @reasoncode HTMGT_RC_OCC_CRIT_FAILURE
-+ * @moduleid HTMGT_MOD_ENABLE_OCC_ACTUATION
-+ * @userdata1[0:7] OCC activate [1==true][0==false]
-+ * @devdesc Invalid operation when OCCs are in safemode
-+ */
-+ bldErrLog(l_err,
-+ HTMGT_MOD_ENABLE_OCC_ACTUATION,
-+ HTMGT_RC_OCC_CRIT_FAILURE,
-+ i_occActivation, 0, 0, 1,
-+ ERRORLOG::ERRL_SEV_UNRECOVERABLE);
- }
--
-- if (OccManager::occNeedsReset())
-+ else
- {
-- TMGT_ERR("enableOccActuation(): OCCs need to be reset");
-- // Don't pass failed target as OCC should have already
-- // been marked as failed during the poll.
-- errlHndl_t err2 = OccManager::resetOccs(NULL);
-- if(err2)
-+ occStateId targetState = OCC_STATE_ACTIVE;
-+ if (false == i_occActivation)
- {
-- ERRORLOG::errlCommit(err2, HTMGT_COMP_ID);
-+ targetState = OCC_STATE_OBSERVATION;
-+ }
-+
-+ // Set state for all OCCs
-+ l_err = OccManager::setOccState(targetState);
-+ if (NULL == l_err)
-+ {
-+ TMGT_INF("enableOccActuation: OCC states updated to 0x%02X",
-+ targetState);
-+ }
-+
-+ if (OccManager::occNeedsReset())
-+ {
-+ TMGT_ERR("enableOccActuation(): OCCs need to be reset");
-+ // Don't pass failed target as OCC should have already
-+ // been marked as failed during the poll.
-+ errlHndl_t err2 = OccManager::resetOccs(NULL);
-+ if(err2)
-+ {
-+ ERRORLOG::errlCommit(err2, HTMGT_COMP_ID);
-+ }
- }
- }
-
-diff --git a/src/usr/htmgt/htmgt_activate.C b/src/usr/htmgt/htmgt_activate.C
-index 7f54d6d..4cb46f0 100644
---- a/src/usr/htmgt/htmgt_activate.C
-+++ b/src/usr/htmgt/htmgt_activate.C
-@@ -39,6 +39,7 @@
-
- #include <ipmi/ipmisensor.H>
- #include <sys/time.h>
-+#include <console/consoleif.H>
-
- using namespace TARGETING;
-
-@@ -163,6 +164,14 @@ namespace HTMGT
- l_err = occ->ipmiSensor(i_activate);
- if( l_err )
- {
-+ TMGT_ERR("setOccActiveSensors failed. (OCC%d state:%d)",
-+ occ->getInstance(),
-+ i_activate);
-+
-+ TMGT_CONSOLE("setOccActiveSensors failed. (OCC%d state:%d)",
-+ occ->getInstance(),
-+ i_activate);
-+
- ERRORLOG::errlCommit(l_err, HTMGT_COMP_ID);
- }
- }
-diff --git a/src/usr/htmgt/htmgt_occ.C b/src/usr/htmgt/htmgt_occ.C
-index 8a539f4..bd95987 100644
---- a/src/usr/htmgt/htmgt_occ.C
-+++ b/src/usr/htmgt/htmgt_occ.C
-@@ -248,7 +248,8 @@ namespace HTMGT
- OccManager::OccManager()
- :iv_occMaster(NULL),
- iv_state(OCC_STATE_UNKNOWN),
-- iv_targetState(OCC_STATE_ACTIVE)
-+ iv_targetState(OCC_STATE_ACTIVE),
-+ iv_resetCount(0)
- {
- }
-
-@@ -590,6 +591,19 @@ namespace HTMGT
- ERRORLOG::errlCommit(err, HTMGT_COMP_ID);
- }
-
-+ if(NULL == i_failedOccTarget)
-+ {
-+ ++iv_resetCount; // increment system reset count
-+
-+ TMGT_INF("resetOCCs: Incrementing system OCC reset count to %d",
-+ iv_resetCount);
-+
-+ if(iv_resetCount > OCC_RESET_COUNT_THRESHOLD)
-+ {
-+ atThreshold = true;
-+ }
-+ }
-+
- for(occList_t::const_iterator occ = iv_occArray.begin();
- occ != iv_occArray.end();
- ++occ)
-@@ -663,7 +677,7 @@ namespace HTMGT
- */
- bldErrLog(err,
- HTMTG_MOD_OCC_RESET,
-- HTMGT_RC_OCC_RESET_THREHOLD,
-+ HTMGT_RC_OCC_CRIT_FAILURE,
- 0, 0, 0, 0,
- ERRORLOG::ERRL_SEV_UNRECOVERABLE);
- }
-@@ -673,6 +687,13 @@ namespace HTMGT
- {
- err->setSev(ERRORLOG::ERRL_SEV_UNRECOVERABLE);
-
-+ // Add level 2 support callout
-+ err->addProcedureCallout(HWAS::EPUB_PRC_LVL_SUPP,
-+ HWAS::SRCI_PRIORITY_MED);
-+ // Add HB firmware callout
-+ err->addProcedureCallout(HWAS::EPUB_PRC_HB_CODE,
-+ HWAS::SRCI_PRIORITY_MED);
-+
- TARGETING::Target* sys = NULL;
- TARGETING::targetService().getTopLevelTarget(sys);
- uint8_t safeMode = 1;
-@@ -683,8 +704,13 @@ namespace HTMGT
- sys->setAttr<TARGETING::ATTR_HTMGT_SAFEMODE>(safeMode);
- }
-
-- TMGT_ERR("_resetOccs: Safe Mode RC: 0x%04X (OCC%d)",
-+ TMGT_ERR("_resetOccs: Safe Mode (RC: 0x%04X OCC%d)",
- cv_safeReturnCode, cv_safeOccInstance);
-+
-+ TMGT_CONSOLE("OCCs are not active. The system will remain in "
-+ "safe mode (RC: 0x%04x for OCC%d)",
-+ cv_safeReturnCode,
-+ cv_safeOccInstance);
- }
-
- return err;
-diff --git a/src/usr/htmgt/htmgt_occ.H b/src/usr/htmgt/htmgt_occ.H
-index dec19b8..5ac545a 100644
---- a/src/usr/htmgt/htmgt_occ.H
-+++ b/src/usr/htmgt/htmgt_occ.H
-@@ -507,6 +507,7 @@ namespace HTMGT
- occList_t iv_occArray;
- occStateId iv_state;
- occStateId iv_targetState;
-+ uint8_t iv_resetCount;
-
- /**
- * @brief SRC that caused system to enter safe mode
---
-1.8.2.2
-
diff --git a/openpower/package/hostboot/hostboot-0011-eRepair-MBVPD-size-check-for-CDIMM-and-ISDIMM.patch b/openpower/package/hostboot/hostboot-0011-eRepair-MBVPD-size-check-for-CDIMM-and-ISDIMM.patch
deleted file mode 100644
index 55c94f0..0000000
--- a/openpower/package/hostboot/hostboot-0011-eRepair-MBVPD-size-check-for-CDIMM-and-ISDIMM.patch
+++ /dev/null
@@ -1,504 +0,0 @@
-From 403b5b351e0ee82fa0b7147ea924b455384cf39d Mon Sep 17 00:00:00 2001
-From: Bilicon Patil <bilpatil@in.ibm.com>
-Date: Fri, 5 Dec 2014 07:25:24 -0600
-Subject: [PATCH 2/6] eRepair MBVPD size check for CDIMM and ISDIMM
-
-The eRepair VPD size for DMI Bus is bigger in systems with ISDIMMs because
-the VPD accounts for all the Centaurs. The current check in the code is
-for each Centaur which is applicable for systems with CDIMMs.
-
-The fix also includes a change to do restore of eRepair records noted
-in the VPD when the system had a non-fips830 driver.
-
-Change-Id: Ibaaf98c5be3e26474ee0eede6081f506f4bb7ec3
-RTC: 119532
-Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/14727
-Tested-by: Jenkins Server
-Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
-Reviewed-by: Prem Shanker Jha <premjha2@in.ibm.com>
-Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
-(cherry picked from commit db9b6fed621390d10459834300924e0fafd6fa04)
----
- .../hwp/bus_training/erepairGetFailedLanesHwp.C | 194 +++++++++++++++-----
- .../hwp/bus_training/erepairSetFailedLanesHwp.C | 73 +++++++-
- 2 files changed, 215 insertions(+), 52 deletions(-)
-
-diff --git a/src/usr/hwpf/hwp/bus_training/erepairGetFailedLanesHwp.C b/src/usr/hwpf/hwp/bus_training/erepairGetFailedLanesHwp.C
-index a4db160..33ec195 100644
---- a/src/usr/hwpf/hwp/bus_training/erepairGetFailedLanesHwp.C
-+++ b/src/usr/hwpf/hwp/bus_training/erepairGetFailedLanesHwp.C
-@@ -5,7 +5,7 @@
- /* */
- /* OpenPOWER HostBoot Project */
- /* */
--/* Contributors Listed Below - COPYRIGHT 2013,2014 */
-+/* Contributors Listed Below - COPYRIGHT 2013,2015 */
- /* [+] International Business Machines Corp. */
- /* */
- /* */
-@@ -38,6 +38,8 @@
-
- #include <erepairGetFailedLanesHwp.H>
-
-+using namespace EREPAIR;
-+
- extern "C"
- {
-
-@@ -62,10 +64,10 @@ extern "C"
- *
- * @return ReturnCode
- */
--fapi::ReturnCode retrieveRepairData(const fapi::Target &i_tgtHandle,
-- EREPAIR::erepairVpdType i_vpdType,
-- std::vector<uint8_t> &o_txFailLanes,
-- std::vector<uint8_t> &o_rxFailLanes);
-+fapi::ReturnCode retrieveRepairData(const fapi::Target &i_tgtHandle,
-+ erepairVpdType i_vpdType,
-+ std::vector<uint8_t> &o_txFailLanes,
-+ std::vector<uint8_t> &o_rxFailLanes);
-
- /**
- * @brief Function called by the FW Team HWP that parses the data read from
-@@ -92,15 +94,25 @@ fapi::ReturnCode determineRepairLanes(const fapi::Target &i_tgtHandle,
- std::vector<uint8_t> &o_rxFailLanes);
-
-
-+/**
-+ * @brief Function to check if the system has Custom DIMM type (CDIMM).
-+ * Attribute ATTR_EFF_CUSTOM_DIMM is read to determine the type.
-+ * @param[in] i_tgtHandle Reference to X-Bus or A-Bus or MCS target
-+ * @param[o] o_customDimm Return value - ENUM_ATTR_EFF_CUSTOM_DIMM_NO
-+ * or ENUM_ATTR_EFF_CUSTOM_DIMM_YES
-+ * @return ReturnCode
-+ */
-+fapi::ReturnCode getDimmType(const fapi::Target &i_tgtHandle,
-+ uint8_t &o_customDimm);
-+
- /******************************************************************************
- * Accessor HWP
- *****************************************************************************/
-
--fapi::ReturnCode erepairGetFailedLanesHwp(
-- const fapi::Target &i_tgtHandle,
-- EREPAIR::erepairVpdType i_vpdType,
-- std::vector<uint8_t> &o_txFailLanes,
-- std::vector<uint8_t> &o_rxFailLanes)
-+fapi::ReturnCode erepairGetFailedLanesHwp(const fapi::Target &i_tgtHandle,
-+ erepairVpdType i_vpdType,
-+ std::vector<uint8_t> &o_txFailLanes,
-+ std::vector<uint8_t> &o_rxFailLanes)
- {
- fapi::ReturnCode l_rc;
- fapi::Target l_processorTgt;
-@@ -147,15 +159,16 @@ fapi::ReturnCode erepairGetFailedLanesHwp(
- return l_rc;
- }
-
--fapi::ReturnCode retrieveRepairData(const fapi::Target &i_tgtHandle,
-- EREPAIR::erepairVpdType i_vpdType,
-- std::vector<uint8_t> &o_txFailLanes,
-- std::vector<uint8_t> &o_rxFailLanes)
-+fapi::ReturnCode retrieveRepairData(const fapi::Target &i_tgtHandle,
-+ erepairVpdType i_vpdType,
-+ std::vector<uint8_t> &o_txFailLanes,
-+ std::vector<uint8_t> &o_rxFailLanes)
- {
- fapi::ReturnCode l_rc;
- uint8_t *l_retBuf = NULL;
- uint32_t l_bufSize = 0;
- fapi::Target l_procTarget;
-+ uint8_t l_customDimm;
-
- FAPI_DBG(">> retrieveRepairData");
-
-@@ -165,7 +178,7 @@ fapi::ReturnCode retrieveRepairData(const fapi::Target &i_tgtHandle,
- {
- fapi::MBvpdRecord l_vpdRecord = fapi::MBVPD_RECORD_VEIR;
-
-- if(i_vpdType == EREPAIR::EREPAIR_VPD_MNFG)
-+ if(i_vpdType == EREPAIR_VPD_MNFG)
- {
- l_vpdRecord = fapi::MBVPD_RECORD_MER0;
- }
-@@ -184,12 +197,34 @@ fapi::ReturnCode retrieveRepairData(const fapi::Target &i_tgtHandle,
- break;
- }
-
-- if((l_bufSize == 0) ||
-- ((i_vpdType == EREPAIR::EREPAIR_VPD_FIELD) &&
-- (l_bufSize > EREPAIR::EREPAIR_MEM_FIELD_VPD_SIZE_PER_CENTAUR))||
-- ((i_vpdType == EREPAIR::EREPAIR_VPD_MNFG) &&
-- (l_bufSize > EREPAIR::EREPAIR_MEM_MNFG_VPD_SIZE_PER_CENTAUR)))
-+ // Check whether we have Memory on a CDIMM
-+ l_rc = getDimmType(i_tgtHandle, l_customDimm);
-+
-+ if(l_rc)
-+ {
-+ FAPI_ERR("Error (0x%x) during DIMM type check",
-+ static_cast<uint32_t> (l_rc));
-+ break;
-+ }
-+
-+ if(l_customDimm == fapi::ENUM_ATTR_SPD_CUSTOM_YES)
- {
-+ if((l_bufSize == 0) ||
-+ ((i_vpdType == EREPAIR_VPD_FIELD) &&
-+ (l_bufSize > EREPAIR_MEM_FIELD_VPD_SIZE_PER_CENTAUR)) ||
-+ ((i_vpdType == EREPAIR_VPD_MNFG) &&
-+ (l_bufSize > EREPAIR_MEM_MNFG_VPD_SIZE_PER_CENTAUR)))
-+ {
-+ FAPI_SET_HWP_ERROR(l_rc,
-+ RC_ACCESSOR_HWP_INVALID_MEM_VPD_SIZE);
-+ break;
-+ }
-+ }
-+ else if(l_bufSize == 0)
-+ {
-+ // TODO RTC: 119531. Add upper bound checking for l_bufSize
-+ // This size check will depend on whether the Lane eRepair data
-+ // is stored on the Planar VPD or on the Riser card VPD.
- FAPI_SET_HWP_ERROR(l_rc, RC_ACCESSOR_HWP_INVALID_MEM_VPD_SIZE);
- break;
- }
-@@ -230,7 +265,7 @@ fapi::ReturnCode retrieveRepairData(const fapi::Target &i_tgtHandle,
-
- fapi::MvpdRecord l_vpdRecord = fapi::MVPD_RECORD_VWML;
-
-- if(i_vpdType == EREPAIR::EREPAIR_VPD_MNFG)
-+ if(i_vpdType == EREPAIR_VPD_MNFG)
- {
- l_vpdRecord = fapi::MVPD_RECORD_MER0;
- }
-@@ -250,10 +285,10 @@ fapi::ReturnCode retrieveRepairData(const fapi::Target &i_tgtHandle,
- }
-
- if((l_bufSize == 0) ||
-- ((i_vpdType == EREPAIR::EREPAIR_VPD_FIELD) &&
-- (l_bufSize > EREPAIR::EREPAIR_P8_MODULE_VPD_FIELD_SIZE)) ||
-- ((i_vpdType == EREPAIR::EREPAIR_VPD_MNFG) &&
-- (l_bufSize > EREPAIR::EREPAIR_P8_MODULE_VPD_MNFG_SIZE)))
-+ ((i_vpdType == EREPAIR_VPD_FIELD) &&
-+ (l_bufSize > EREPAIR_P8_MODULE_VPD_FIELD_SIZE)) ||
-+ ((i_vpdType == EREPAIR_VPD_MNFG) &&
-+ (l_bufSize > EREPAIR_P8_MODULE_VPD_MNFG_SIZE)))
- {
- FAPI_SET_HWP_ERROR(l_rc,
- RC_ACCESSOR_HWP_INVALID_FABRIC_VPD_SIZE);
-@@ -323,6 +358,7 @@ fapi::ReturnCode determineRepairLanes(const fapi::Target &i_tgtHandle,
- fapi::Target l_mcsTarget;
- fapi::Target l_tgtHandle;
- fapi::ReturnCode l_rc;
-+ uint8_t l_customDimm;
- fapi::ATTR_CHIP_UNIT_POS_Type l_busNum;
-
- FAPI_DBG(">> determineRepairLanes");
-@@ -394,21 +430,18 @@ fapi::ReturnCode determineRepairLanes(const fapi::Target &i_tgtHandle,
- l_fabricBus->interface = (l_temp & 0x0F);
- #endif
-
-- // Check if we have the correct Processor ID
-- if(l_chipPosition != l_fabricBus->device.processor_id)
-- {
-- continue;
-- }
-+ // We do not need the check of processor ID because
-+ // a MVPD read is specific to a Processor
-
- // Check if we have the matching the Fabric Bus types
- if((l_tgtType == fapi::TARGET_TYPE_ABUS_ENDPOINT) &&
-- (l_fabricBus->type != EREPAIR::PROCESSOR_EDI))
-+ (l_fabricBus->type != PROCESSOR_EDI))
- {
- continue;
- }
-
- if((l_tgtType == fapi::TARGET_TYPE_XBUS_ENDPOINT) &&
-- (l_fabricBus->type != EREPAIR::PROCESSOR_EI4))
-+ (l_fabricBus->type != PROCESSOR_EI4))
- {
- continue;
- }
-@@ -428,17 +461,17 @@ fapi::ReturnCode determineRepairLanes(const fapi::Target &i_tgtHandle,
- }
-
- // Check if we have valid fail lane numbers
-- if(l_fabricBus->failBit == EREPAIR::INVALID_FAIL_LANE_NUMBER)
-+ if(l_fabricBus->failBit == INVALID_FAIL_LANE_NUMBER)
- {
- continue;
- }
-
- // Copy the fail lane numbers in the vectors
-- if(l_fabricBus->interface == EREPAIR::PBUS_DRIVER)
-+ if(l_fabricBus->interface == PBUS_DRIVER)
- {
- o_txFailLanes.push_back(l_fabricBus->failBit);
- }
-- else if(l_fabricBus->interface == EREPAIR::PBUS_RECEIVER)
-+ else if(l_fabricBus->interface == PBUS_RECEIVER)
- {
- o_rxFailLanes.push_back(l_fabricBus->failBit);
- }
-@@ -468,6 +501,19 @@ fapi::ReturnCode determineRepairLanes(const fapi::Target &i_tgtHandle,
- l_tgtHandle = l_mcsTarget;
- }
-
-+ if(l_tgtType == fapi::TARGET_TYPE_MEMBUF_CHIP)
-+ {
-+ // Check whether we have Memory on a CDIMM
-+ l_rc = getDimmType(i_tgtHandle, l_customDimm);
-+
-+ if(l_rc)
-+ {
-+ FAPI_ERR("Error (0x%x) during DIMM type check",
-+ static_cast<uint32_t> (l_rc));
-+ break;
-+ }
-+ }
-+
- // Read Power bus eRepair data and get the failed lane numbers
- for(l_loop = 0;
- l_loop < l_numRepairs;
-@@ -491,14 +537,20 @@ fapi::ReturnCode determineRepairLanes(const fapi::Target &i_tgtHandle,
- l_memBus->interface = (l_temp & 0x0F);
- #endif
-
-- // Check if we have the correct Processor/Centaur ID
-- if(l_chipPosition != l_memBus->device.proc_centaur_id)
-+ // Check if we have the correct Centaur ID
-+ // NOTE: We do not prefer to make the check of Centaur ID if the
-+ // system is known to have CDIMMs. This check is applicable
-+ // only for systems with ISDIMM because in the ISDIMM systems
-+ // the Lane eRepair data for multiple Centaurs is maintained in
-+ // a common VPD.
-+ if((l_customDimm != fapi::ENUM_ATTR_SPD_CUSTOM_YES) &&
-+ (l_chipPosition != l_memBus->device.proc_centaur_id))
- {
- continue;
- }
-
- // Check if we have the matching the Memory Bus types
-- if(l_memBus->type != EREPAIR::MEMORY_EDI)
-+ if(l_memBus->type != MEMORY_EDI)
- {
- continue;
- }
-@@ -518,7 +570,7 @@ fapi::ReturnCode determineRepairLanes(const fapi::Target &i_tgtHandle,
- }
-
- // Check if we have valid fail lane numbers
-- if(l_memBus->failBit == EREPAIR::INVALID_FAIL_LANE_NUMBER)
-+ if(l_memBus->failBit == INVALID_FAIL_LANE_NUMBER)
- {
- continue;
- }
-@@ -526,22 +578,22 @@ fapi::ReturnCode determineRepairLanes(const fapi::Target &i_tgtHandle,
- // Copy the fail lane numbers in the vectors
- if(l_tgtType == fapi::TARGET_TYPE_MCS_CHIPLET)
- {
-- if(l_memBus->interface == EREPAIR::DMI_MCS_DRIVE)
-+ if(l_memBus->interface == DMI_MCS_DRIVE)
- {
- o_txFailLanes.push_back(l_memBus->failBit);
- }
-- else if(l_memBus->interface == EREPAIR::DMI_MCS_RECEIVE)
-+ else if(l_memBus->interface == DMI_MCS_RECEIVE)
- {
- o_rxFailLanes.push_back(l_memBus->failBit);
- }
- }
- else if(l_tgtType == fapi::TARGET_TYPE_MEMBUF_CHIP)
- {
-- if(l_memBus->interface == EREPAIR::DMI_MEMBUF_DRIVE)
-+ if(l_memBus->interface == DMI_MEMBUF_DRIVE)
- {
- o_txFailLanes.push_back(l_memBus->failBit);
- }
-- else if(l_memBus->interface == EREPAIR::DMI_MEMBUF_RECEIVE)
-+ else if(l_memBus->interface == DMI_MEMBUF_RECEIVE)
- {
- o_rxFailLanes.push_back(l_memBus->failBit);
- }
-@@ -551,10 +603,64 @@ fapi::ReturnCode determineRepairLanes(const fapi::Target &i_tgtHandle,
-
- }while(0);
-
-- FAPI_INF("<< No.of Fail Lanes: tx: %d, rx: %d",
-+ FAPI_INF("<< No.of Fail Lanes: tx: %zd, rx: %zd",
- o_txFailLanes.size(), o_rxFailLanes.size());
-
- return(l_rc);
- }
-
-+fapi::ReturnCode getDimmType(const fapi::Target &i_tgtHandle,
-+ uint8_t &o_customDimm)
-+{
-+ fapi::ReturnCode l_rc;
-+ std::vector<fapi::Target> l_mbaChiplets;
-+ fapi::Target l_mbaTarget;
-+
-+ do
-+ {
-+ // Get the connected MBA chiplet and determine whether we have CDIMM
-+ l_rc = fapiGetChildChiplets(i_tgtHandle,
-+ fapi::TARGET_TYPE_MBA_CHIPLET,
-+ l_mbaChiplets,
-+ fapi::TARGET_STATE_FUNCTIONAL);
-+ if(l_rc || (0 == l_mbaChiplets.size()))
-+ {
-+ FAPI_ERR("Error (0x%x) during get child MBA targets",
-+ static_cast<uint32_t> (l_rc));
-+ break;
-+ }
-+
-+ l_mbaTarget = l_mbaChiplets[0];
-+ std::vector<fapi::Target> l_target_dimm_array;
-+
-+ l_rc = fapiGetAssociatedDimms(l_mbaTarget, l_target_dimm_array);
-+
-+ if(l_rc)
-+ {
-+ FAPI_ERR("Error (0x%x), from fapiGetAssociatedDimms",
-+ static_cast<uint32_t>(l_rc));
-+ break;
-+ }
-+
-+ if(0 != l_target_dimm_array.size())
-+ {
-+ l_rc = FAPI_ATTR_GET(ATTR_SPD_CUSTOM,
-+ &l_target_dimm_array[0],
-+ o_customDimm);
-+ if(l_rc)
-+ {
-+ FAPI_ERR("Error (0x%x), from FAPI_ATTR_GET",
-+ static_cast<uint32_t>(l_rc));
-+ break;
-+ }
-+ }
-+ else
-+ {
-+ o_customDimm = fapi::ENUM_ATTR_SPD_CUSTOM_NO;
-+ }
-+ }while(0);
-+
-+ return l_rc;
-+}
-+
- }// endof extern "C"
-diff --git a/src/usr/hwpf/hwp/bus_training/erepairSetFailedLanesHwp.C b/src/usr/hwpf/hwp/bus_training/erepairSetFailedLanesHwp.C
-index a59d9e5..b0724f9 100755
---- a/src/usr/hwpf/hwp/bus_training/erepairSetFailedLanesHwp.C
-+++ b/src/usr/hwpf/hwp/bus_training/erepairSetFailedLanesHwp.C
-@@ -5,7 +5,7 @@
- /* */
- /* OpenPOWER HostBoot Project */
- /* */
--/* Contributors Listed Below - COPYRIGHT 2013,2014 */
-+/* Contributors Listed Below - COPYRIGHT 2013,2015 */
- /* [+] International Business Machines Corp. */
- /* */
- /* */
-@@ -173,6 +173,9 @@ ReturnCode writeRepairDataToVPD(const Target &i_tgtHandle,
- uint8_t *l_retBuf = NULL;
- uint32_t l_bufSize = 0;
- Target l_procTarget;
-+ uint8_t l_customDimm;
-+ std::vector<fapi::Target> l_mbaChiplets;
-+ fapi::Target l_mbaTarget;
-
- FAPI_DBG(">> writeRepairDataToVPD");
-
-@@ -202,12 +205,66 @@ ReturnCode writeRepairDataToVPD(const Target &i_tgtHandle,
- break;
- }
-
-- if((l_bufSize == 0) ||
-- ((i_vpdType == EREPAIR_VPD_FIELD) &&
-- (l_bufSize > EREPAIR_MEM_FIELD_VPD_SIZE_PER_CENTAUR)) ||
-- ((i_vpdType == EREPAIR_VPD_MNFG) &&
-- (l_bufSize > EREPAIR_MEM_MNFG_VPD_SIZE_PER_CENTAUR)))
-+ // Get the connected MBA chiplet and determine whether we have CDIMM
-+ l_rc = fapiGetChildChiplets(i_tgtHandle,
-+ fapi::TARGET_TYPE_MBA_CHIPLET,
-+ l_mbaChiplets,
-+ fapi::TARGET_STATE_FUNCTIONAL);
-+
-+ if(l_rc || (0 == l_mbaChiplets.size()))
-+ {
-+ FAPI_ERR("Error (0x%x) during get child MBA targets",
-+ static_cast<uint32_t> (l_rc));
-+ break;
-+ }
-+
-+ l_mbaTarget = l_mbaChiplets[0];
-+ std::vector<fapi::Target> l_target_dimm_array;
-+
-+ l_rc = fapiGetAssociatedDimms(l_mbaTarget, l_target_dimm_array);
-+
-+ if(l_rc)
-+ {
-+ FAPI_ERR("Error (0x%x), from fapiGetAssociatedDimms",
-+ static_cast<uint32_t>(l_rc));
-+ break;
-+ }
-+
-+ if(0 != l_target_dimm_array.size())
-+ {
-+ l_rc = FAPI_ATTR_GET(ATTR_SPD_CUSTOM,
-+ &l_target_dimm_array[0],
-+ l_customDimm);
-+ if(l_rc)
-+ {
-+ FAPI_ERR("Error (0x%x), from FAPI_ATTR_GET",
-+ static_cast<uint32_t>(l_rc));
-+ break;
-+ }
-+ }
-+ else
-+ {
-+ l_customDimm = fapi::ENUM_ATTR_SPD_CUSTOM_NO;
-+ }
-+
-+ if(l_customDimm == fapi::ENUM_ATTR_SPD_CUSTOM_YES)
-+ {
-+ if((l_bufSize == 0) ||
-+ ((i_vpdType == EREPAIR_VPD_FIELD) &&
-+ (l_bufSize > EREPAIR_MEM_FIELD_VPD_SIZE_PER_CENTAUR)) ||
-+ ((i_vpdType == EREPAIR_VPD_MNFG) &&
-+ (l_bufSize > EREPAIR_MEM_MNFG_VPD_SIZE_PER_CENTAUR)))
-+ {
-+ FAPI_SET_HWP_ERROR(l_rc,
-+ RC_ACCESSOR_HWP_INVALID_MEM_VPD_SIZE);
-+ break;
-+ }
-+ }
-+ else if(l_bufSize == 0)
- {
-+ // TODO RTC: 119531. Add upper bound checking for l_bufSize
-+ // This size check will depend on whether the Lane eRepair data
-+ // is stored on the Planar VPD or on the Riser card VPD.
- FAPI_SET_HWP_ERROR(l_rc, RC_ACCESSOR_HWP_INVALID_MEM_VPD_SIZE);
- break;
- }
-@@ -221,7 +278,7 @@ ReturnCode writeRepairDataToVPD(const Target &i_tgtHandle,
- break;
- }
-
-- // Retrieve the eRepair data from the Centaur FRU VPD
-+ // Retrieve the Field eRepair data from the Centaur FRU VPD
- l_rc = fapiGetMBvpdField(l_vpdRecord,
- MBVPD_KEYWORD_PDI,
- i_tgtHandle,
-@@ -315,7 +372,7 @@ ReturnCode writeRepairDataToVPD(const Target &i_tgtHandle,
- break;
- }
-
-- // Retrieve the eRepair data from the MVPD
-+ // Retrieve the Field eRepair data from the MVPD
- l_rc = fapiGetMvpdField(l_vpdRecord,
- MVPD_KEYWORD_PDI,
- l_procTarget,
---
-1.7.4.1
-
diff --git a/openpower/package/hostboot/hostboot.mk b/openpower/package/hostboot/hostboot.mk
index d3b76fa..e7bb202 100644
--- a/openpower/package/hostboot/hostboot.mk
+++ b/openpower/package/hostboot/hostboot.mk
@@ -4,7 +4,7 @@
#
################################################################################
-HOSTBOOT_VERSION ?= 3593853a4323d9ec7de1ad6502e22b3e66af03ae
+HOSTBOOT_VERSION ?= bda236e6e0c7d3aa5165160abbd5ead92ac0a68e
HOSTBOOT_SITE ?= $(call github,open-power,hostboot,$(HOSTBOOT_VERSION))
HOSTBOOT_LICENSE = Apache-2.0