Merge pull request #75 from geissonator/master
Remove merged patches and add ipmi runtime fix and dimm sensor fix
diff --git a/openpower/package/hostboot/hostboot-0004-Downgrade-OCC-Config-Data-Version-if-no-FIR-Master.patch b/openpower/package/hostboot/hostboot-0004-Downgrade-OCC-Config-Data-Version-if-no-FIR-Master.patch
deleted file mode 100644
index 4cda4f5..0000000
--- a/openpower/package/hostboot/hostboot-0004-Downgrade-OCC-Config-Data-Version-if-no-FIR-Master.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-From 93266f96f39f038fc8ad396a5df316c07980f4bf Mon Sep 17 00:00:00 2001
-From: Dan Crowell <dcrowell@us.ibm.com>
-Date: Sat, 28 Feb 2015 11:54:47 -0600
-Subject: [PATCH 3/4] Downgrade OCC Config Data Version if no FIR Master
-
-Change-Id: Idc48298a9c3068da2216172da474ebff93eb3839
-(cherry picked from commit f84f34cc5628d9e7d7d55d0e95462b3fe22d80d5)
----
- src/include/usr/hwpf/hwp/occ/occ_common.H | 2 ++
- src/usr/hwpf/hwp/occ/occ_common.C | 3 +++
- 2 files changed, 5 insertions(+), 0 deletions(-)
-
-diff --git a/src/include/usr/hwpf/hwp/occ/occ_common.H b/src/include/usr/hwpf/hwp/occ/occ_common.H
-index ca7ab39..7ddb302 100644
---- a/src/include/usr/hwpf/hwp/occ/occ_common.H
-+++ b/src/include/usr/hwpf/hwp/occ/occ_common.H
-@@ -58,6 +58,8 @@ namespace HBOCC
- enum
- {
- OccHostDataVersion = 3,
-+ PRE_FIR_MASTER_VERSION = 2,
-+
- OCC_LIDID = 0x81e00430,
- OCC_IBSCOM_RANGE_IN_MB = MEGABYTE,
-
-diff --git a/src/usr/hwpf/hwp/occ/occ_common.C b/src/usr/hwpf/hwp/occ/occ_common.C
-index 98e6382..0373727 100644
---- a/src/usr/hwpf/hwp/occ/occ_common.C
-+++ b/src/usr/hwpf/hwp/occ/occ_common.C
-@@ -170,6 +170,9 @@ namespace HBOCC
- }
- #else
- config_data->firMaster = 0;
-+ //force to an older version so we can support
-+ // older levels of OCC
-+ config_data->version = PRE_FIR_MASTER_VERSION;
- #endif
-
- TRACUCOMP( g_fapiTd,
---
-1.7.4.1
-
diff --git a/openpower/package/hostboot/hostboot-0006-Revert-SW294127-INITPROC-FSP-Hostboot-fast-exit-powe.patch b/openpower/package/hostboot/hostboot-0004-Revert-SW294127-INITPROC-FSP-Hostboot-fast-exit-powe.patch
similarity index 100%
rename from openpower/package/hostboot/hostboot-0006-Revert-SW294127-INITPROC-FSP-Hostboot-fast-exit-powe.patch
rename to openpower/package/hostboot/hostboot-0004-Revert-SW294127-INITPROC-FSP-Hostboot-fast-exit-powe.patch
diff --git a/openpower/package/hostboot/hostboot-0008-Disable-SPD-writes-workaround-for-DRAM-repairs-error.patch b/openpower/package/hostboot/hostboot-0005-Disable-SPD-writes-workaround-for-DRAM-repairs-error.patch
similarity index 86%
rename from openpower/package/hostboot/hostboot-0008-Disable-SPD-writes-workaround-for-DRAM-repairs-error.patch
rename to openpower/package/hostboot/hostboot-0005-Disable-SPD-writes-workaround-for-DRAM-repairs-error.patch
index 05ea39a..43b5c43 100644
--- a/openpower/package/hostboot/hostboot-0008-Disable-SPD-writes-workaround-for-DRAM-repairs-error.patch
+++ b/openpower/package/hostboot/hostboot-0005-Disable-SPD-writes-workaround-for-DRAM-repairs-error.patch
@@ -1,7 +1,7 @@
-From de6b906bd93e0928cd5464418091268aa7a5ac78 Mon Sep 17 00:00:00 2001
+From e02245750b63a6b892ee48f1422309c8dd4f0c4f Mon Sep 17 00:00:00 2001
From: Corey Swenson <cswenson@us.ibm.com>
Date: Fri, 27 Feb 2015 09:45:47 -0600
-Subject: [PATCH 1/3] Disable SPD writes - workaround for DRAM repairs error
+Subject: [PATCH 2/4] Disable SPD writes - workaround for DRAM repairs error
Change-Id: Ic5fac400abff8fef004268dfbdf33fa6ecdded1c
(cherry picked from commit 1bc5bb42be8e81b525993e9b5dcf08fe684bade4)
diff --git a/openpower/package/hostboot/hostboot-0005-Watchdog-timer-increase-to-7-minutes.patch b/openpower/package/hostboot/hostboot-0005-Watchdog-timer-increase-to-7-minutes.patch
deleted file mode 100644
index 321a067..0000000
--- a/openpower/package/hostboot/hostboot-0005-Watchdog-timer-increase-to-7-minutes.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From 55b61605f1a58885e77d6737bfe36f957417a991 Mon Sep 17 00:00:00 2001
-From: Andrew Geissler <andrewg@us.ibm.com>
-Date: Wed, 25 Feb 2015 13:09:48 -0600
-Subject: [PATCH 1/2] Increase watchdog timout to 7.5 minutes
-
-Change-Id: I46070784c303e8135075bc5d36e17a2593ee494c
-RTC: 124676
----
- src/include/usr/ipmi/ipmiwatchdog.H | 7 +++++--
- 1 files changed, 5 insertions(+), 2 deletions(-)
-
-diff --git a/src/include/usr/ipmi/ipmiwatchdog.H b/src/include/usr/ipmi/ipmiwatchdog.H
-index f23b771..2296cc4 100644
---- a/src/include/usr/ipmi/ipmiwatchdog.H
-+++ b/src/include/usr/ipmi/ipmiwatchdog.H
-@@ -43,12 +43,15 @@ namespace IPMIWATCHDOG
- // Globals/Constants
- /******************************************************************************/
- /**
-- * @brief the default watchdog countdown setting it to 120 seconds.
-+ * @brief the default watchdog countdown setting it to 450 seconds.a
-+ *
-+ * Total time on 16x16GB on Habanero was 170s so double and add
-+ * some padding for max config 32 way Habanero.
- *
- * @TODO RTC:124499 revisit after performace improvments
- *
- */
--const uint16_t DEFAULT_WATCHDOG_COUNTDOWN = 120;
-+const uint16_t DEFAULT_WATCHDOG_COUNTDOWN = 450;
-
- /**
- * @brief the default watchdog countdown for transition between hostboot
---
-1.7.4.1
-
diff --git a/openpower/package/hostboot/hostboot-0006-Runtime-fixes-for-IPMI.patch b/openpower/package/hostboot/hostboot-0006-Runtime-fixes-for-IPMI.patch
new file mode 100644
index 0000000..011dae7
--- /dev/null
+++ b/openpower/package/hostboot/hostboot-0006-Runtime-fixes-for-IPMI.patch
@@ -0,0 +1,70 @@
+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-0007-Assert-called-when-trying-to-deconfigure-a-DIMM.patch b/openpower/package/hostboot/hostboot-0007-Assert-called-when-trying-to-deconfigure-a-DIMM.patch
deleted file mode 100644
index f3d6ff6..0000000
--- a/openpower/package/hostboot/hostboot-0007-Assert-called-when-trying-to-deconfigure-a-DIMM.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 5a3e8e0e91dfee9f7f6b1e31f07789e2c2788e21 Mon Sep 17 00:00:00 2001
-From: Richard J. Knight <rjknight@us.ibm.com>
-Date: Fri, 27 Feb 2015 19:45:56 -0600
-Subject: [PATCH 2/3] Assert called when trying to deconfigure a DIMM
-
- -Remove assert call from default path. Assert
- should not be called for targets without status
- sensors. Path should be a no-op.
-
-Change-Id: Id1aa002ea3d79cf24b5c123cbd92647257d12093
-RTC:124846
-(cherry picked from commit eadb8a16b0f04ce10169091263297f3dc4372c9c)
----
- src/usr/ipmi/ipmisensor.C | 2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/src/usr/ipmi/ipmisensor.C b/src/usr/ipmi/ipmisensor.C
-index e5b4e64..a62e084 100644
---- a/src/usr/ipmi/ipmisensor.C
-+++ b/src/usr/ipmi/ipmisensor.C
-@@ -640,7 +640,7 @@ namespace SENSOR
- break;
-
- default:
-- assert(0, "No status sensor associated with target type 0x%x",
-+ TRACFCOMP(g_trac_ipmi,"INF>>No status sensor associated with target type 0x%x",
- i_target->getAttr<TARGETING::ATTR_TYPE>());
- break;
- }
---
-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
new file mode 100644
index 0000000..63ceb6e
--- /dev/null
+++ b/openpower/package/hostboot/hostboot-0007-Update-DIMM_TEMP-Sensor-Enum.patch
@@ -0,0 +1,28 @@
+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-0009-GOLDEN-SBE-Update-Support-Reconcile-SBE-images-and-P.patch b/openpower/package/hostboot/hostboot-0009-GOLDEN-SBE-Update-Support-Reconcile-SBE-images-and-P.patch
deleted file mode 100644
index 94e4c49..0000000
--- a/openpower/package/hostboot/hostboot-0009-GOLDEN-SBE-Update-Support-Reconcile-SBE-images-and-P.patch
+++ /dev/null
@@ -1,2028 +0,0 @@
-From 842770c162544b35609528b205d7c015454593fa Mon Sep 17 00:00:00 2001
-From: Mike Baiocchi <baiocchi@us.ibm.com>
-Date: Tue, 17 Feb 2015 13:07:13 -0600
-Subject: [PATCH 4/7] GOLDEN SBE Update Support - Reconcile SBE images and PNOR sides
-
-This code adds a new function at istep 6 to reconcile the two
-SBE Seeproms with the PNOR side and mode (ie, 2-sided, golden, etc).
-It also updates what happens in istep 9 in SBE_UPDATE_INDEPENDENT
-mode.
-
-Change-Id: If71ca52338a179b8cf38cfa336d9790737844715
-RTC: 120734
-(cherry picked from commit fe9afa4e7a3b0eb0e9ae16abb943039aacf34e09)
----
- src/include/usr/sbe/sbeif.H | 13 +-
- src/include/usr/sbe/sbereasoncodes.H | 10 +-
- src/usr/hwpf/hwp/slave_sbe/slave_sbe.C | 12 +
- src/usr/sbe/HBconfig | 6 +-
- src/usr/sbe/makefile | 5 +-
- src/usr/sbe/sbe_resolve_sides.C | 1363 ++++++++++++++++++++++++++++++++
- src/usr/sbe/sbe_resolve_sides.H | 259 ++++++
- src/usr/sbe/sbe_update.C | 124 +++-
- 8 files changed, 1753 insertions(+), 39 deletions(-)
- create mode 100644 src/usr/sbe/sbe_resolve_sides.C
- create mode 100644 src/usr/sbe/sbe_resolve_sides.H
-
-diff --git a/src/include/usr/sbe/sbeif.H b/src/include/usr/sbe/sbeif.H
-index 8706e91..9cf20c6 100644
---- a/src/include/usr/sbe/sbeif.H
-+++ b/src/include/usr/sbe/sbeif.H
-@@ -5,7 +5,9 @@
- /* */
- /* OpenPOWER HostBoot Project */
- /* */
--/* COPYRIGHT International Business Machines Corp. 2013,2014 */
-+/* Contributors Listed Below - COPYRIGHT 2013,2015 */
-+/* [+] International Business Machines Corp. */
-+/* */
- /* */
- /* Licensed under the Apache License, Version 2.0 (the "License"); */
- /* you may not use this file except in compliance with the License. */
-@@ -66,6 +68,15 @@ namespace SBE
- */
- errlHndl_t updateProcessorSbeSeeproms();
-
-+ /**
-+ * @brief Iterates through all the functional processors and resolves
-+ * the Hostboot Base Addresses (HBB) in each SBE Image and performs
-+ * any necessary operations related to GOLDEN side support.
-+ *
-+ * @return errlHndl_t Error log handle on failure.
-+ */
-+ errlHndl_t resolveProcessorSbeSeeproms();
-+
-
- } //end namespace SBE
-
-diff --git a/src/include/usr/sbe/sbereasoncodes.H b/src/include/usr/sbe/sbereasoncodes.H
-index a09bb68..effb69e 100644
---- a/src/include/usr/sbe/sbereasoncodes.H
-+++ b/src/include/usr/sbe/sbereasoncodes.H
-@@ -5,7 +5,9 @@
- /* */
- /* OpenPOWER HostBoot Project */
- /* */
--/* COPYRIGHT International Business Machines Corp. 2013,2014 */
-+/* Contributors Listed Below - COPYRIGHT 2013,2015 */
-+/* [+] International Business Machines Corp. */
-+/* */
- /* */
- /* Licensed under the Apache License, Version 2.0 (the "License"); */
- /* you may not use this file except in compliance with the License. */
-@@ -54,6 +56,10 @@ enum sbeModuleId
- SBE_CUSTOMIZE_IMG = 0x0B,
- SBE_PERFORM_UPDATE_ACTIONS = 0x0C,
- SBE_MASTER_VERSION_COMPARE = 0x0D,
-+ SBE_RESOLVE_HBB_ADDR = 0x0E,
-+ SBE_READ_SBE_IMAGE = 0x0F,
-+ SBE_WRITE_SBE_IMAGE = 0x10,
-+ SBE_GET_SBE_IMAGE_SIZE = 0x11,
- };
-
- /**
-@@ -91,6 +97,8 @@ enum sbeReasonCode
- SBE_MISCOMPARE_WITH_MASTER_VERSION = SBE_COMP_ID | 0x13,
- SBE_ERROR_ON_UPDATE = SBE_COMP_ID | 0x14,
- SBE_MASTER_VERSION_DOWNLEVEL = SBE_COMP_ID | 0x15,
-+ SBE_IMAGE_GET_SET_SCALAR_FAIL = SBE_COMP_ID | 0x16,
-+
- };
-
- }; // end SBE
-diff --git a/src/usr/hwpf/hwp/slave_sbe/slave_sbe.C b/src/usr/hwpf/hwp/slave_sbe/slave_sbe.C
-index 49225a4..fe568e2 100644
---- a/src/usr/hwpf/hwp/slave_sbe/slave_sbe.C
-+++ b/src/usr/hwpf/hwp/slave_sbe/slave_sbe.C
-@@ -175,6 +175,18 @@ void* call_host_slave_sbe_config(void *io_pArgs)
-
- }
- }
-+
-+ // Resolve the side characteristics of the Processor SBE Seeproms
-+ errlHndl_t err = SBE::resolveProcessorSbeSeeproms();
-+ if ( err )
-+ {
-+ // Create IStep error log and cross reference error that occurred
-+ l_stepError.addErrorDetails( err );
-+
-+ // Commit Error
-+ errlCommit( err, HWPF_COMP_ID );
-+ }
-+
- TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
- "call_host_slave_sbe_config exit" );
-
-diff --git a/src/usr/sbe/HBconfig b/src/usr/sbe/HBconfig
-index 0fa2441..fd2a8d0 100644
---- a/src/usr/sbe/HBconfig
-+++ b/src/usr/sbe/HBconfig
-@@ -20,9 +20,9 @@ config SBE_UPDATE_INDEPENDENT
- depends on !SBE_UPDATE_SEQUENTIAL && !SBE_UPDATE_SIMULTANEOUS
- help
- If an update is necessary, and if the "current" SBE SEEPROM of this
-- IPL is not the 'GOLDEN' SBE SEEPROM, then only the current SBE SEEPROM
-- will be updated. After the update a re-IPL request will be issued.
-- The other SBE SEEPROM, whether 'GOLDEN' or not, will not be updated.
-+ IPL is not pointing at PNOR's 'GOLDEN' side, then only the current SBE
-+ SEEPROM will be updated. After the update a re-IPL request will be
-+ issued. The other SBE SEEPROM will not be updated.
-
- config NO_SBE_UPDATES
- default n
-diff --git a/src/usr/sbe/makefile b/src/usr/sbe/makefile
-index 06159ff..c45206e 100644
---- a/src/usr/sbe/makefile
-+++ b/src/usr/sbe/makefile
-@@ -5,7 +5,9 @@
- #
- # OpenPOWER HostBoot Project
- #
--# COPYRIGHT International Business Machines Corp. 2013,2014
-+# Contributors Listed Below - COPYRIGHT 2013,2015
-+# [+] International Business Machines Corp.
-+#
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
-@@ -36,6 +38,7 @@ EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/include
- EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/build_winkle_images/p8_slw_build
-
- OBJS += sbe_update.o
-+OBJS += sbe_resolve_sides.o
-
- SUBDIRS += test.d
-
-diff --git a/src/usr/sbe/sbe_resolve_sides.C b/src/usr/sbe/sbe_resolve_sides.C
-new file mode 100644
-index 0000000..df9958d
---- /dev/null
-+++ b/src/usr/sbe/sbe_resolve_sides.C
-@@ -0,0 +1,1363 @@
-+/* IBM_PROLOG_BEGIN_TAG */
-+/* This is an automatically generated prolog. */
-+/* */
-+/* $Source: src/usr/sbe/sbe_resolve_sides.C $ */
-+/* */
-+/* OpenPOWER HostBoot Project */
-+/* */
-+/* Contributors Listed Below - COPYRIGHT 2015 */
-+/* [+] International Business Machines Corp. */
-+/* */
-+/* */
-+/* Licensed under the Apache License, Version 2.0 (the "License"); */
-+/* you may not use this file except in compliance with the License. */
-+/* You may obtain a copy of the License at */
-+/* */
-+/* http://www.apache.org/licenses/LICENSE-2.0 */
-+/* */
-+/* Unless required by applicable law or agreed to in writing, software */
-+/* distributed under the License is distributed on an "AS IS" BASIS, */
-+/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
-+/* implied. See the License for the specific language governing */
-+/* permissions and limitations under the License. */
-+/* */
-+/* IBM_PROLOG_END_TAG */
-+
-+#include <trace/interface.H>
-+#include <errl/errlentry.H>
-+#include <errl/errlmanager.H>
-+#include <errl/errludtarget.H>
-+#include <errl/errlreasoncodes.H>
-+#include <errl/hberrltypes.H>
-+#include <targeting/common/predicates/predicatectm.H>
-+#include <targeting/common/utilFilter.H>
-+#include <targeting/common/targetservice.H>
-+#include <util/misc.H>
-+#include <pnor/pnorif.H>
-+#include <pnor/ecc.H>
-+#include <devicefw/driverif.H>
-+#include <sys/mm.h>
-+#include <sys/misc.h>
-+#include <hwas/common/deconfigGard.H>
-+#include <initservice/initserviceif.H>
-+#include <config.h>
-+#include <ipmi/ipmiwatchdog.H>
-+#include <ipmi/ipmisensor.H>
-+#include <sbe/sbeif.H>
-+#include <sbe/sbereasoncodes.H>
-+#include "sbe_resolve_sides.H"
-+#include "sbe_update.H"
-+
-+// fapi support
-+#include <fapi.H>
-+#include <fapiHwpExecutor.H>
-+#include <hwpf/plat/fapiPlatHwpInvoker.H>
-+#include <hwpf/plat/fapiPlatTrace.H>
-+
-+//Procedures
-+#include <p8_xip_customize.H>
-+#include <sbe_xip_image.h>
-+#include <p8_image_help_base.H>
-+
-+// ----------------------------------------------
-+// Trace definitions
-+// ----------------------------------------------
-+extern trace_desc_t* g_trac_sbe;
-+
-+// ------------------------
-+// Macros for unit testing
-+//#define TRACUCOMP(args...) TRACFCOMP(args)
-+#define TRACUCOMP(args...)
-+
-+
-+using namespace ERRORLOG;
-+using namespace TARGETING;
-+
-+namespace SBE
-+{
-+ enum {
-+ SBE_IMG_VADDR = VMM_VADDR_SBE_UPDATE,
-+ RING_BUF1_VADDR = FIXED_SEEPROM_WORK_SPACE + SBE_IMG_VADDR,
-+ RING_BUF2_VADDR = RING_BUF1_VADDR + FIXED_RING_BUF_SIZE,
-+ //NOTE: recycling the same memory space for different
-+ //steps in the process.
-+ SBE_ECC_IMG_VADDR = RING_BUF1_VADDR,
-+ SBE_ECC_IMG_MAX_SIZE = VMM_VADDR_SBE_UPDATE_END - SBE_ECC_IMG_VADDR,
-+ };
-+
-+/////////////////////////////////////////////////////////////////////
-+errlHndl_t resolveProcessorSbeSeeproms()
-+{
-+ errlHndl_t err = NULL;
-+ errlHndl_t err_cleanup = NULL;
-+ sbeResolveState_t sideState;
-+ bool l_cleanupVmmSpace = false;
-+ bool l_restartNeeded = false;
-+
-+ TRACUCOMP( g_trac_sbe,
-+ ENTER_MRK"resolveProcessorSbeSeeproms()" );
-+
-+ do{
-+
-+#ifdef CONFIG_NO_SBE_UPDATES
-+ TRACFCOMP( g_trac_sbe, INFO_MRK"resolveProcessorSbeSeeproms() - "
-+ "SBE updates not configured");
-+ break;
-+#endif
-+
-+#ifdef CONFIG_SBE_UPDATE_SIMULTANEOUS
-+ TRACFCOMP( g_trac_sbe, INFO_MRK"resolveProcessorSbeSeeproms() - "
-+ "Do Nothing in SBE_UPDATE_SIMULTANEOUS mode");
-+ break;
-+#endif
-+
-+#ifdef CONFIG_SBE_UPDATE_SEQUENTIAL
-+ // Check if FSP-services are enabled and if we're running in simics
-+ if ( !INITSERVICE::spBaseServicesEnabled() &&
-+ !Util::isSimicsRunning() )
-+ {
-+ assert (false, "resolveProcessorSbeSeeproms() - "
-+ "SBE_UPDATE_SEQUENTIAL mode, but FSP-services are not "
-+ "enabled - Invalid Configuration");
-+ }
-+ else
-+ {
-+ TRACUCOMP( g_trac_sbe, INFO_MRK"resolveProcessorSbeSeeproms() - "
-+ "Do Nothing in SBE_UPDATE_INDEPENDENT mode with FSP-"
-+ "services enabled or running in simics");
-+ break;
-+ }
-+#endif
-+
-+ // Get Target Service, and the system target.
-+ TargetService& tS = targetService();
-+ TARGETING::Target* sys = NULL;
-+ (void) tS.getTopLevelTarget( sys );
-+ assert(sys, "resolveProcessorSbeSeeproms() system target is NULL");
-+
-+
-+ //Make sure procedure constants keep within expected range.
-+ assert((FIXED_SEEPROM_WORK_SPACE <= VMM_SBE_UPDATE_SIZE/2),
-+ "resolveProcessorSbeSeeproms() FIXED_SEEPROM_WORK_SPACE "
-+ "too large");
-+ assert((FIXED_RING_BUF_SIZE <= VMM_SBE_UPDATE_SIZE/4),
-+ "resolveProcessorSbeSeeproms() FIXED_RING_BUF_SIZE too "
-+ "large");
-+
-+ // Create VMM space for p8_xip_customize() procedure
-+ err = createSbeImageVmmSpace();
-+ if (err)
-+ {
-+ TRACFCOMP( g_trac_sbe,
-+ INFO_MRK"resolveProcessorSbeSeeproms: "
-+ "createSbeImageVmmSpace() Failed. ",
-+ "rc=0x%.4X", err->reasonCode() );
-+
-+ break;
-+ }
-+ else
-+ {
-+ // Make sure cleanup gets called
-+ l_cleanupVmmSpace = true;
-+ }
-+
-+ /*****************************************************************/
-+ /* Iterate over all the functional processors and do for each: */
-+ /*****************************************************************/
-+ TARGETING::TargetHandleList procList;
-+ TARGETING::getAllChips(procList,
-+ TARGETING::TYPE_PROC,
-+ true); // true: return functional targets
-+
-+ if( ( 0 == procList.size() ) ||
-+ ( NULL == procList[0] ) )
-+ {
-+ TRACFCOMP( g_trac_sbe, ERR_MRK"resolveProcessorSbeSeeproms() - "
-+ "No functional processors Found!" );
-+ break;
-+ }
-+
-+ for(uint32_t i=0; i<procList.size(); i++)
-+ {
-+ /***********************************************/
-+ /* Get Side This Processor did/will boot from */
-+ /***********************************************/
-+ memset(&sideState, 0, sizeof(sideState));
-+ sideState.tgt = procList[i];
-+
-+ err = getSideState(sideState);
-+ if ( err )
-+ {
-+ TRACFCOMP( g_trac_sbe, ERR_MRK
-+ "resolveProcessorSbeSeeproms: Error returned "
-+ "from getSideState() "
-+ "rc=0x%.4X, Target UID=0x%X",
-+ err->reasonCode(),
-+ TARGETING::get_huid(sideState.tgt));
-+ // Don't break - handle error at the end of the loop
-+ }
-+
-+
-+ /**********************************************/
-+ /* Determine the necessary actions */
-+ /**********************************************/
-+ // Skip if we got an error previously
-+ if ( err == NULL )
-+ {
-+ err = getSideActions(sideState);
-+ if (err)
-+ {
-+ TRACFCOMP( g_trac_sbe,
-+ INFO_MRK"resolveProcessorSbeSeeproms: "
-+ "getSideActions() Failed "
-+ "rc=0x%.4X, Target UID=0x%X",
-+ err->reasonCode(),
-+ TARGETING::get_huid(sideState.tgt));
-+
-+ // Don't break - handle error at the end of the loop,
-+ }
-+ }
-+
-+ /**********************************************/
-+ /* Perform the necessary actions */
-+ /**********************************************/
-+ // Skip if we got an error previously
-+ if ( err == NULL )
-+ {
-+ err = performSideActions(sideState);
-+ if (err)
-+ {
-+ TRACFCOMP( g_trac_sbe,
-+ INFO_MRK"resolveProcessorSbeSeeproms: "
-+ "performSideActions() Failed "
-+ "rc=0x%.4X, Target UID=0x%X",
-+ err->reasonCode(),
-+ TARGETING::get_huid(sideState.tgt));
-+
-+ // Don't break - handle error at the end of the loop,
-+ }
-+ else
-+ {
-+ // Target updated without failure, so set IPL_RESTART
-+ // flag, if necessary
-+ if (sideState.actions & REIPL)
-+ {
-+ l_restartNeeded = true;
-+ }
-+ }
-+ }
-+
-+ /**********************************************/
-+ /* Handle Errors */
-+ /**********************************************/
-+
-+ if ( err )
-+ {
-+ // Something failed for this target.
-+
-+ // Commit the error here and move on to the next target,
-+ // or if no targets left, will just continue the IPL
-+ TRACFCOMP( g_trac_sbe,
-+ INFO_MRK"resolveProcessorSbeSeeproms: "
-+ "Committing Error Log rc=0x%.4X eid=0x%.8X "
-+ "plid=0x%.8X for Target UID=0x%X, but "
-+ "continuing procedure",
-+ err->reasonCode(),
-+ err->eid(),
-+ err->plid(),
-+ TARGETING::get_huid(sideState.tgt));
-+ errlCommit( err, SBE_COMP_ID );
-+ }
-+
-+
-+ } //end of Target for loop collecting each target's SBE State
-+
-+
-+ /**************************************************************/
-+ /* Perform System Operation */
-+ /**************************************************************/
-+ // Restart IPL if SBE Update requires it
-+ if ( l_restartNeeded == true )
-+ {
-+ TRACFCOMP( g_trac_sbe,
-+ INFO_MRK"resolveProcessorSbeSeeprom: Restart "
-+ "Needed (%d).",
-+ l_restartNeeded);
-+
-+#ifdef CONFIG_BMC_IPMI
-+ sbePreShutdownIpmiCalls();
-+#endif
-+
-+ TRACFCOMP( g_trac_sbe,
-+ INFO_MRK"resolveProcessorSbeSeeproms: Calling "
-+ "INITSERVICE::doShutdown() with "
-+ "SBE_UPDATE_REQUEST_REIPL = 0x%X",
-+ SBE_UPDATE_REQUEST_REIPL );
-+ INITSERVICE::doShutdown(SBE_UPDATE_REQUEST_REIPL);
-+ }
-+
-+ }while(0);
-+
-+
-+ // Cleanup VMM Workspace
-+ if ( l_cleanupVmmSpace == true )
-+ {
-+ err_cleanup = cleanupSbeImageVmmSpace();
-+ if ( err_cleanup != NULL )
-+ {
-+
-+ if ( err != NULL )
-+ {
-+ // 2 error logs, so commit the cleanup log here
-+ TRACFCOMP( g_trac_sbe,
-+ ERR_MRK"resolveProcessorSbeSeeproms: Previous "
-+ "error (rc=0x%X) before cleanupSbeImageVmmSpace"
-+ "() failed. Committing cleanup error (rc=0x%X) "
-+ "and returning original error",
-+ err->reasonCode(), err_cleanup->reasonCode() );
-+
-+ errlCommit( err_cleanup, SBE_COMP_ID );
-+ }
-+ else
-+ {
-+ // no previous error, so returning cleanup error
-+ TRACFCOMP( g_trac_sbe,
-+ ERR_MRK"resolveProcessorSbeSeeproms: "
-+ "cleanupSbeImageVmmSpace() failed.",
-+ "rc=0x%.4X", err_cleanup->reasonCode() );
-+ err = err_cleanup;
-+ }
-+ }
-+ }
-+
-+
-+ TRACUCOMP( g_trac_sbe,
-+ EXIT_MRK"resolveProcessorSbeSeeproms()" );
-+
-+ return err;
-+}
-+
-+/////////////////////////////////////////////////////////////////////
-+errlHndl_t getSideState(sbeResolveState_t& io_sideState)
-+{
-+ errlHndl_t err = NULL;
-+ TRACUCOMP( g_trac_sbe,
-+ ENTER_MRK"getSideState()" );
-+
-+ do{
-+
-+ /***********************************************/
-+ /* Get Side This Processor did/will boot from */
-+ /***********************************************/
-+ PNOR::sbeSeepromSide_t tmp_cur_side = PNOR::SBE_SEEPROM_INVALID;
-+ err = PNOR::getSbeBootSeeprom(io_sideState.tgt, tmp_cur_side);
-+ if ( err )
-+ {
-+ TRACFCOMP( g_trac_sbe, ERR_MRK
-+ "resolveProcessorSbeSeeproms() - Error returned "
-+ "from PNOR::getSbeBootSeeprom() "
-+ "rc=0x%.4X, Target UID=0x%X",
-+ err->reasonCode(),
-+ TARGETING::get_huid(io_sideState.tgt));
-+ break;
-+ }
-+
-+ io_sideState.cur_side = tmp_cur_side;
-+
-+ io_sideState.alt_side = (tmp_cur_side == PNOR::SBE_SEEPROM0)
-+ ? PNOR::SBE_SEEPROM1 : PNOR::SBE_SEEPROM0;
-+
-+ /**********************************************/
-+ /* Get PNOR Side Information */
-+ /**********************************************/
-+ PNOR::SideId tmp_side = PNOR::WORKING;
-+ PNOR::SideInfo_t tmp_side_info;
-+ err = PNOR::getSideInfo (tmp_side, tmp_side_info);
-+ if ( err )
-+ {
-+ TRACFCOMP( g_trac_sbe, ERR_MRK
-+ "resolveProcessorSbeSeeproms() - Error returned "
-+ "from PNOR::getSideInfo() "
-+ "rc=0x%.4X, Target UID=0x%X",
-+ err->reasonCode(),
-+ TARGETING::get_huid(io_sideState.tgt));
-+ break;
-+ }
-+
-+ io_sideState.pnor_sideId = tmp_side_info.id;
-+ io_sideState.pnor_side = tmp_side_info.side;
-+ io_sideState.pnor_isGolden = tmp_side_info.isGolden;
-+ io_sideState.pnor_hasOtherSide = tmp_side_info.hasOtherSide;
-+
-+ }while(0);
-+
-+
-+ TRACUCOMP( g_trac_sbe,
-+ EXIT_MRK"getSideState(): cur/alt=%d/%d. Side-%c(%d): "
-+ "isGolden=%d, hasOtherSide=%d",
-+ io_sideState.cur_side, io_sideState.alt_side,
-+ io_sideState.pnor_side, io_sideState.pnor_sideId,
-+ io_sideState.pnor_isGolden, io_sideState.pnor_hasOtherSide );
-+
-+ return err;
-+}
-+
-+
-+/////////////////////////////////////////////////////////////////////
-+errlHndl_t getSideActions(sbeResolveState_t& io_sideState)
-+{
-+ errlHndl_t err = NULL;
-+ uint32_t l_actions = NO_ACTIONS;
-+ TRACUCOMP( g_trac_sbe,
-+ ENTER_MRK"getSideActions()" );
-+
-+ do{
-+
-+ // Check if PNOR is running from its GOLDEN side
-+ if ( io_sideState.pnor_isGolden == true )
-+ {
-+
-+ // If Booting From Seeprom that is pointing to PNOR's GOLDEN Side
-+ // and is possibly the READ_ONLY_SEEPROM - No Re-IPL
-+ if ( io_sideState.cur_side == READ_ONLY_SEEPROM )
-+ {
-+ l_actions |= COPY_READ_ONLY_TO_WORKING;
-+ io_sideState.update_side = io_sideState.alt_side;
-+#ifdef CONFIG_PNOR_TWO_SIDE_SUPPORT
-+ // Need info from PNOR's non-working side for update side
-+ l_actions |= USE_PNOR_ALT_SIDE;
-+ TRACUCOMP( g_trac_sbe, "getSideActions(): Asking for "
-+ "USE_PNOR_ALT_SIDE: actions=0x%X", l_actions);
-+#endif
-+ }
-+ else
-+ {
-+ // non-READ_ONLY_SEEPROM is pointing to PNOR's GOLDEN side
-+ // This requires an update and re-IPL (Possibly Genesis Mode)
-+ l_actions |= COPY_READ_ONLY_TO_WORKING;
-+ l_actions |= REIPL;
-+ io_sideState.update_side = io_sideState.cur_side;
-+
-+#ifdef CONFIG_PNOR_TWO_SIDE_SUPPORT
-+ // Need info from PNOR's non-working side for update side
-+ l_actions |= USE_PNOR_ALT_SIDE;
-+ TRACUCOMP( g_trac_sbe, "getSideActions(): Asking for "
-+ "USE_PNOR_ALT_SIDE: actions=0x%X", l_actions);
-+#endif
-+
-+ }
-+ }
-+
-+ // Even though READ_ONLY_SEEPROM is not pointing to PNOR's GOLDEN side,
-+ // treat like it is if there is only 1 side (ie, Palmetto configuration)
-+ else if ( ( io_sideState.pnor_hasOtherSide == false ) &&
-+ ( io_sideState.cur_side == READ_ONLY_SEEPROM ) )
-+ {
-+ l_actions |= COPY_READ_ONLY_TO_WORKING;
-+ io_sideState.update_side = io_sideState.alt_side;
-+ }
-+
-+ else // current Seeprom not pointing to PNOR's GOLDEN side
-+ {
-+ l_actions |= CHECK_WORKING_HBB;
-+ io_sideState.update_side = io_sideState.cur_side;
-+ // REIPL action will be determined later
-+ }
-+
-+ io_sideState.actions = l_actions;
-+
-+ TRACUCOMP( g_trac_sbe, "getSideActions() Tgt=0x%X: "
-+ "pnor_isGolden/hasOtherSide=%d/%d, actions=0x%.8X, "
-+ "Update Side=0x%X, cur=%d",
-+ TARGETING::get_huid(io_sideState.tgt),
-+ io_sideState.pnor_isGolden, io_sideState.pnor_hasOtherSide,
-+ io_sideState.actions,
-+ io_sideState.update_side,
-+ io_sideState.cur_side);
-+
-+ }while(0);
-+
-+ TRACUCOMP( g_trac_sbe,
-+ EXIT_MRK"getSideActions()" );
-+
-+ return err;
-+}
-+
-+
-+
-+/////////////////////////////////////////////////////////////////////
-+errlHndl_t performSideActions(sbeResolveState_t& io_sideState)
-+{
-+ errlHndl_t err = NULL;
-+ TRACUCOMP( g_trac_sbe,
-+ ENTER_MRK"performSideActions()" );
-+
-+ bool updateForHBB = false;
-+ size_t image_size = 0;
-+ sbeSeepromVersionInfo_t image_version;
-+
-+ do{
-+ if ( io_sideState.actions & COPY_READ_ONLY_TO_WORKING )
-+ {
-+ // Copy READ_ONLY SBE Seeprom Image to Memory
-+ err = readSbeImage(io_sideState.tgt,
-+ reinterpret_cast<void*>(SBE_IMG_VADDR),
-+ READ_ONLY_SEEPROM,
-+ image_size,
-+ image_version);
-+ if ( err )
-+ {
-+ TRACFCOMP( g_trac_sbe, ERR_MRK
-+ "performSideActions: Error returned from "
-+ "getSetSbeImage() rc=0x%.4X, Target UID=0x%X, "
-+ "actions = 0x%X, image_size=0x%X",
-+ err->reasonCode(),
-+ TARGETING::get_huid(io_sideState.tgt),
-+ io_sideState.actions, image_size);
-+ break;
-+ }
-+ }
-+
-+ if ( io_sideState.actions & CHECK_WORKING_HBB )
-+ {
-+
-+ // Copy current SBE Seeprom Image to Memory
-+ // NOTE: Seprate section from above because of possible future
-+ // improvement to use MBPD SB Keyword bit to keep track of HBB
-+
-+ err = readSbeImage(io_sideState.tgt,
-+ reinterpret_cast<void*>(SBE_IMG_VADDR),
-+ io_sideState.update_side,
-+ image_size,
-+ image_version);
-+ if ( err )
-+ {
-+ TRACFCOMP( g_trac_sbe, ERR_MRK
-+ "performSideActions: Error returned from "
-+ "getSetSbeImage() rc=0x%.4X, Target UID=0x%X, "
-+ "actions = 0x%X, image_size=0x%X",
-+ err->reasonCode(),
-+ TARGETING::get_huid(io_sideState.tgt),
-+ io_sideState.actions, image_size);
-+ break;
-+ }
-+
-+ }
-+
-+
-+ if ( ( io_sideState.actions & COPY_READ_ONLY_TO_WORKING ) ||
-+ ( io_sideState.actions & CHECK_WORKING_HBB ) )
-+ {
-+ // verify HBB
-+ PNOR::SideId pnor_side = PNOR::WORKING;
-+
-+#ifdef CONFIG_PNOR_TWO_SIDE_SUPPORT
-+ // In certain situations need info from Alternate PNOR
-+ if ( io_sideState.actions & USE_PNOR_ALT_SIDE)
-+ {
-+ pnor_side = PNOR::ALTERNATE;
-+ }
-+#endif
-+
-+
-+
-+ err = resolveImageHBBaddr(io_sideState.tgt,
-+ reinterpret_cast<void*>(SBE_IMG_VADDR),
-+ io_sideState.update_side,
-+ pnor_side,
-+ updateForHBB);
-+ if ( err )
-+ {
-+ TRACFCOMP( g_trac_sbe, ERR_MRK
-+ "performSideActions: Error returned from "
-+ "resolveImageHBBaddr() rc=0x%.4X, Target UID=0x%X, "
-+ "actions = 0x%X",
-+ err->reasonCode(),
-+ TARGETING::get_huid(io_sideState.tgt),
-+ io_sideState.actions);
-+ break;
-+ }
-+
-+ // Since HBB was updated, we need to re-IPL if not booting on
-+ // READ_ONLY seeprom
-+ if ( ( updateForHBB == true ) &&
-+ ( io_sideState.cur_side != READ_ONLY_SEEPROM ) )
-+ {
-+ io_sideState.actions |= REIPL;
-+ TRACUCOMP( g_trac_sbe, ERR_MRK
-+ "performSideActions: resolveImageHBBaddr returned "
-+ "updateForHBB=%d, and not on READ_ONLY_SEEPROM so "
-+ "REIPL (actions=0x%X)",
-+ updateForHBB, io_sideState.actions);
-+ }
-+ }
-+
-+ if ( ( io_sideState.actions & COPY_READ_ONLY_TO_WORKING ) ||
-+ ( updateForHBB == true ) )
-+ {
-+ // Write Seeprom Image from memory to Seeprom
-+ err = writeSbeImage(io_sideState.tgt,
-+ reinterpret_cast<void*>(SBE_IMG_VADDR),
-+ io_sideState.update_side,
-+ image_size,
-+ image_version);
-+ if ( err )
-+ {
-+ TRACFCOMP( g_trac_sbe, ERR_MRK
-+ "performSideActions: Error returned from "
-+ "getSetSbeImage() rc=0x%.4X, Target UID=0x%X, "
-+ "actions = 0x%X",
-+ err->reasonCode(),
-+ TARGETING::get_huid(io_sideState.tgt),
-+ io_sideState.actions);
-+ break;
-+ }
-+ }
-+
-+ }while(0);
-+
-+ TRACUCOMP( g_trac_sbe,
-+ EXIT_MRK"performSideActions()" );
-+
-+ return err;
-+}
-+
-+
-+/////////////////////////////////////////////////////////////////////
-+errlHndl_t readSbeImage(TARGETING::Target* i_target,
-+ void* o_imgPtr,
-+ PNOR::sbeSeepromSide_t i_side,
-+ size_t& o_image_size,
-+ sbeSeepromVersionInfo_t& o_image_version)
-+{
-+ TRACUCOMP( g_trac_sbe,
-+ ENTER_MRK"readSbeImage(): tgt=0x%X, i_side=%d "
-+ "o_imgPtr=%p, o_image_size=0x%X",
-+ TARGETING::get_huid(i_target), i_side, o_imgPtr, o_image_size);
-+
-+ errlHndl_t err = NULL;
-+ int64_t rc = 0;
-+ PNOR::ECC::eccStatus eccStatus = PNOR::ECC::CLEAN;
-+ EEPROM::eeprom_chip_types_t l_seeprom = sbe_side_sync[i_side];
-+ size_t image_size_ECC = 0;
-+
-+ // Need to ensure that io_imgPtr is at SBE_IMG_VADDR = VMM_VADDR_SBE_UPDATE
-+ // since we need to use the VMM_VADDR_SBE_UPDATE space
-+ assert ( o_imgPtr == reinterpret_cast<void*>(SBE_IMG_VADDR),
-+ "getSetSbeImage() - o_imgPtr is not at SBE_IMG_VADDR");
-+
-+ do{
-+
-+ // Clear out back half of page block to use as temp space
-+ // for ECC injected SBE Image.
-+ rc = mm_remove_pages(RELEASE,
-+ reinterpret_cast<void*>
-+ (SBE_ECC_IMG_VADDR),
-+ SBE_ECC_IMG_MAX_SIZE);
-+ if( rc )
-+ {
-+ TRACFCOMP( g_trac_sbe, ERR_MRK"getSetSbeImage() - Error "
-+ "from mm_remove_pages : rc=%d, HUID=0x%.8X.",
-+ rc, TARGETING::get_huid(i_target) );
-+ /*@
-+ * @errortype
-+ * @moduleid SBE_READ_SBE_IMAGE
-+ * @reasoncode SBE_REMOVE_PAGES_FOR_EC
-+ * @userdata1 Requested Address
-+ * @userdata2 rc from mm_remove_pages
-+ * @devdesc updateProcessorSbeSeeproms> mm_remove_pages
-+ * RELEASE failed
-+ * @custdesc A problem occurred while updating processor
-+ * boot code.
-+ */
-+ err = new ErrlEntry(ERRL_SEV_UNRECOVERABLE,
-+ SBE_READ_SBE_IMAGE,
-+ SBE_REMOVE_PAGES_FOR_EC,
-+ TO_UINT64(SBE_ECC_IMG_VADDR),
-+ TO_UINT64(rc),
-+ true /*Add HB SW Callout*/ );
-+
-+ //Target isn't directly related to fail, but could be useful
-+ // to see how far we got before failing.
-+ ErrlUserDetailsTarget(i_target).addToLog(err);
-+ err->collectTrace(SBE_COMP_NAME);
-+ break;
-+ }
-+
-+ /*****************************************/
-+ /* Get Image Size */
-+ /*****************************************/
-+ err = getSbeImageSize(i_target,
-+ o_imgPtr,
-+ i_side,
-+ o_image_size);
-+ if(err)
-+ {
-+ TRACFCOMP( g_trac_sbe, ERR_MRK"readSbeImage: - Error from "
-+ "getSbeImageSize(): rc=0x%.4X, side=%d, HUID=0x%.8X.",
-+ err->reasonCode(),
-+ i_side, TARGETING::get_huid(i_target));
-+ break;
-+ }
-+
-+
-+ /*****************************************/
-+ /* Do Actual Read */
-+ /*****************************************/
-+ image_size_ECC = ALIGN_8((o_image_size*9)/8);
-+
-+ assert(image_size_ECC <= SBE_ECC_IMG_MAX_SIZE,
-+ "getSetSbeImage() SBE Image with ECC too large");
-+
-+ // Read image to memory space
-+ err = DeviceFW::deviceOp(
-+ DeviceFW::READ,
-+ i_target,
-+ reinterpret_cast<void*>
-+ (SBE_ECC_IMG_VADDR),
-+ image_size_ECC,
-+ DEVICE_EEPROM_ADDRESS(
-+ l_seeprom,
-+ SBE_IMAGE_SEEPROM_ADDRESS));
-+
-+ if(err)
-+ {
-+ TRACFCOMP( g_trac_sbe, ERR_MRK"readSbeImage: - Error "
-+ "from EEPROM op: rc=0x%.4X, seeprom=%d (side=%d). "
-+ "HUID=0x%.8X. SBE_VADDR=0x%.16X, ECC_VADDR=0x%.16X, "
-+ "size=0x%.8X, eccSize=0x%.8X, EEPROM offset=0x%X",
-+ err->reasonCode(), l_seeprom, i_side,
-+ TARGETING::get_huid(i_target),
-+ SBE_IMG_VADDR, SBE_ECC_IMG_VADDR, o_image_size,
-+ image_size_ECC, SBE_IMAGE_SEEPROM_ADDRESS);
-+ break;
-+ }
-+
-+ /*****************************************/
-+ /* Remove ECC From Image */
-+ /*****************************************/
-+
-+ // Clear destination
-+ memset( o_imgPtr, 0, MAX_SEEPROM_IMAGE_SIZE );
-+
-+ // Remove ECC
-+ eccStatus = PNOR::ECC::removeECC(reinterpret_cast<uint8_t*>
-+ (SBE_ECC_IMG_VADDR),
-+ reinterpret_cast<uint8_t*>
-+ (o_imgPtr),
-+ image_size_ECC);
-+
-+ // Fail if uncorrectable ECC
-+ if ( eccStatus == PNOR::ECC::UNCORRECTABLE )
-+ {
-+ // There is an ECC issue with this SEEPROM
-+
-+ TRACFCOMP( g_trac_sbe,ERR_MRK"readSbeImage: ECC Error "
-+ "On SBE Image Read eccStatus=%d sI=%d, sI_ECC="
-+ "%d, HUID=0x%.8X, Seeprom %d (side=%d)",
-+ eccStatus, o_image_size, image_size_ECC,
-+ TARGETING::get_huid(i_target),
-+ l_seeprom, i_side );
-+
-+ /*@
-+ * @errortype
-+ * @moduleid SBE_READ_SBE_IMAGE
-+ * @reasoncode SBE_ECC_FAIL
-+ * @userdata1[0:15] ECC Status
-+ * @userdata1[16:31] SEEPROM Side
-+ * @userdata1[32:63] Target HUID
-+ * @userdata2[0:31] Size - No Ecc
-+ * @userdata2[32:63] Size - ECC
-+ * @devdesc ECC Fail Reading SBE Image
-+ */
-+ err = new ErrlEntry(ERRL_SEV_PREDICTIVE,
-+ SBE_READ_SBE_IMAGE,
-+ SBE_ECC_FAIL,
-+ TWO_UINT32_TO_UINT64(
-+ ( (eccStatus << 16 ) |
-+ l_seeprom ),
-+ TARGETING::get_huid(i_target)),
-+ TWO_UINT32_TO_UINT64(o_image_size,
-+ image_size_ECC));
-+
-+ err->collectTrace(SBE_COMP_NAME);
-+
-+ err->addPartCallout(
-+ i_target,
-+ HWAS::SBE_SEEPROM_PART_TYPE,
-+ HWAS::SRCI_PRIORITY_HIGH,
-+ HWAS::NO_DECONFIG,
-+ HWAS::GARD_NULL );
-+
-+ ErrlUserDetailsTarget(i_target).addToLog(err);
-+
-+ break;
-+
-+ } // ECC check
-+
-+
-+ // Read out SBE Version Info
-+ bool seeprom_ver_ECC_fail = false;
-+ err = getSeepromSideVersion(i_target,
-+ l_seeprom,
-+ o_image_version,
-+ seeprom_ver_ECC_fail);
-+
-+
-+ if(err)
-+ {
-+ TRACFCOMP( g_trac_sbe, ERR_MRK"readSbeImage: - Error "
-+ "from getSeepromSideVersion: rc=0x%.4X, seeprom=%d "
-+ "(side=%d). HUID=0x%.8X",
-+ err->reasonCode(), l_seeprom, i_side,
-+ TARGETING::get_huid(i_target));
-+ break;
-+ }
-+
-+ else if (seeprom_ver_ECC_fail == true)
-+ {
-+ // For now, any issues will be addressed in SBE Update
-+ // later in the IPL
-+ TRACFCOMP( g_trac_sbe, ERR_MRK"readSbeImage: ECC fail=%d "
-+ "Reading Seeprom Version seeprom=%d "
-+ "(side=%d). HUID=0x%.8X",
-+ seeprom_ver_ECC_fail, l_seeprom, i_side,
-+ TARGETING::get_huid(i_target));
-+ }
-+
-+ TRACDBIN(g_trac_sbe, "readSbeImage: SBE Info Version",
-+ reinterpret_cast<uint8_t*>(&o_image_version),
-+ sizeof(o_image_version));
-+
-+ }while(0);
-+
-+
-+ TRACUCOMP( g_trac_sbe,
-+ EXIT_MRK"readSbeImage() - eccStatus=%d, "
-+ "size=0x%X, size_ECC=0x%X",
-+ eccStatus, o_image_size, image_size_ECC);
-+
-+
-+ return err;
-+}
-+
-+
-+/////////////////////////////////////////////////////////////////////
-+errlHndl_t writeSbeImage(TARGETING::Target* i_target,
-+ void* i_imgPtr,
-+ PNOR::sbeSeepromSide_t i_side,
-+ size_t i_image_size,
-+ sbeSeepromVersionInfo_t& io_version)
-+
-+{
-+ TRACFCOMP( g_trac_sbe,
-+ ENTER_MRK"writeSbeImage(): tgt=0x%X, i_side=%d "
-+ "i_imgPtr=%p, i_image_size=0x%X",
-+ TARGETING::get_huid(i_target), i_side, i_imgPtr, i_image_size);
-+
-+ errlHndl_t err = NULL;
-+ int64_t rc = 0;
-+ EEPROM::eeprom_chip_types_t l_seeprom = sbe_side_sync[i_side];
-+ size_t image_size_ECC = 0;
-+
-+ // For Version Information
-+ size_t sbeInfoSize = sizeof(sbeSeepromVersionInfo_t);
-+ size_t sbeInfoSize_ECC = (sbeInfoSize*9)/8;
-+
-+ uint8_t * sbeInfo_data_ECC = static_cast<uint8_t*>
-+ (malloc(sbeInfoSize_ECC));
-+
-+
-+ // Need to ensure that io_imgPtr is at SBE_IMG_VADDR = VMM_VADDR_SBE_UPDATE
-+ // since we need to use the VMM_VADDR_SBE_UPDATE space
-+ assert ( i_imgPtr == reinterpret_cast<void*>(SBE_IMG_VADDR),
-+ "writeSbeImage() - io_imgPtr is not at SBE_IMG_VADDR");
-+
-+ do{
-+
-+ // Clear out back half of page block to use as temp space
-+ // for ECC injected SBE Image.
-+ rc = mm_remove_pages(RELEASE,
-+ reinterpret_cast<void*>
-+ (SBE_ECC_IMG_VADDR),
-+ SBE_ECC_IMG_MAX_SIZE);
-+ if( rc )
-+ {
-+ TRACFCOMP( g_trac_sbe, ERR_MRK"writeSbeImage() - Error "
-+ "from mm_remove_pages : rc=%d, HUID=0x%.8X.",
-+ rc, TARGETING::get_huid(i_target) );
-+ /*@
-+ * @errortype
-+ * @moduleid SBE_WRITE_SBE_IMAGE
-+ * @reasoncode SBE_REMOVE_PAGES_FOR_EC
-+ * @userdata1 Requested Address
-+ * @userdata2 rc from mm_remove_pages
-+ * @devdesc updateProcessorSbeSeeproms> mm_remove_pages
-+ * RELEASE failed
-+ * @custdesc A problem occurred while updating processor
-+ * boot code.
-+ */
-+
-+ err = new ErrlEntry(ERRL_SEV_UNRECOVERABLE,
-+ SBE_WRITE_SBE_IMAGE,
-+ SBE_REMOVE_PAGES_FOR_EC,
-+ TO_UINT64(SBE_ECC_IMG_VADDR),
-+ TO_UINT64(rc),
-+ true /*Add HB SW Callout*/ );
-+
-+ //Target isn't directly related to fail, but could be useful
-+ //to see how far we got before failing.
-+ ErrlUserDetailsTarget(i_target).addToLog(err);
-+ err->collectTrace(SBE_COMP_NAME);
-+ break;
-+ }
-+
-+ // Inject ECC
-+ PNOR::ECC::injectECC(reinterpret_cast<uint8_t*>(i_imgPtr),
-+ ALIGN_8(i_image_size),
-+ reinterpret_cast<uint8_t*>
-+ (SBE_ECC_IMG_VADDR));
-+
-+ /*****************************************/
-+ /* Do Actual Write of Image */
-+ /*****************************************/
-+ image_size_ECC = ALIGN_8((i_image_size*9)/8);
-+
-+ assert(image_size_ECC <= SBE_ECC_IMG_MAX_SIZE,
-+ "writeSbeImage() SBE Image with ECC too large");
-+
-+ err = deviceWrite(i_target,
-+ reinterpret_cast<void*>
-+ (SBE_ECC_IMG_VADDR),
-+ image_size_ECC,
-+ DEVICE_EEPROM_ADDRESS(
-+ l_seeprom,
-+ SBE_IMAGE_SEEPROM_ADDRESS));
-+
-+ if(err)
-+ {
-+ TRACFCOMP( g_trac_sbe, ERR_MRK"writeSbeImage: - Error "
-+ "from EEPROM op: rc=0x%.4X, seeprom=%d (side=%d). "
-+ "HUID=0x%.8X. SBE_VADDR=0x%.16X, ECC_VADDR=0x%.16X, "
-+ "size=0x%.8X, eccSize=0x%.8X, EEPROM offset=0x%X",
-+ err->reasonCode(), l_seeprom, i_side,
-+ TARGETING::get_huid(i_target),
-+ SBE_IMG_VADDR, SBE_ECC_IMG_VADDR, i_image_size,
-+ image_size_ECC, SBE_IMAGE_SEEPROM_ADDRESS);
-+ break;
-+ }
-+
-+ /********************************************/
-+ /* Do Actual Write of Version Information */
-+ /********************************************/
-+
-+ // Update the image crc in the version information
-+ uint32_t image_crc = Util::crc32_calc(i_imgPtr, i_image_size);
-+
-+ memcpy( &(io_version.data_crc),
-+ &image_crc,
-+ sizeof(image_crc));
-+
-+ TRACDBIN( g_trac_sbe, "writeSbeImage: Version no ECC",
-+ reinterpret_cast<uint8_t*>(&io_version), sizeof(io_version));
-+
-+ // Inject ECC
-+ memset( sbeInfo_data_ECC, 0, sbeInfoSize_ECC);
-+ PNOR::ECC::injectECC(reinterpret_cast<uint8_t*>(&io_version),
-+ sbeInfoSize, sbeInfo_data_ECC);
-+
-+ TRACDBIN( g_trac_sbe, "writeSbeImage: Version with ECC",
-+ sbeInfo_data_ECC, sbeInfoSize_ECC);
-+
-+ err = deviceWrite( i_target,
-+ sbeInfo_data_ECC,
-+ sbeInfoSize_ECC,
-+ DEVICE_EEPROM_ADDRESS(
-+ l_seeprom,
-+ SBE_VERSION_SEEPROM_ADDRESS));
-+
-+ if(err)
-+ {
-+ TRACFCOMP( g_trac_sbe, ERR_MRK"writeSbeImage: - Error "
-+ "Writing SBE Version Info: rc=0x%.4X, "
-+ "HUID=0x%.8X, seeprom=%d, side=%d",
-+ err->reasonCode(),
-+ TARGETING::get_huid(i_target), l_seeprom, i_side);
-+ break;
-+ }
-+
-+ }while(0);
-+
-+ // Free allocated memory
-+ free(sbeInfo_data_ECC);
-+
-+ TRACUCOMP( g_trac_sbe,
-+ EXIT_MRK"writeSetSbeImage()" );
-+
-+ return err;
-+}
-+
-+
-+
-+
-+/////////////////////////////////////////////////////////////////////
-+errlHndl_t getSbeImageSize(TARGETING::Target* i_target,
-+ void* i_imgPtr,
-+ PNOR::sbeSeepromSide_t i_side,
-+ size_t& o_image_size)
-+{
-+ TRACUCOMP( g_trac_sbe,
-+ ENTER_MRK"geSbeImageSize(): tgt=0x%X, i_side=%d "
-+ "i_imgPtr=%p, o_image_size=0x%X",
-+ TARGETING::get_huid(i_target), i_side, i_imgPtr, o_image_size);
-+
-+ errlHndl_t err = NULL;
-+ PNOR::ECC::eccStatus eccStatus = PNOR::ECC::CLEAN;
-+ EEPROM::eeprom_chip_types_t l_seeprom = sbe_side_sync[i_side];
-+ size_t image_size_ECC = 0;
-+
-+ // Need to ensure that i_imgPtr is at SBE_IMG_VADDR = VMM_VADDR_SBE_UPDATE
-+ // since we need to use the VMM_VADDR_SBE_UPDATE space
-+
-+ assert ( i_imgPtr == reinterpret_cast<void*>(SBE_IMG_VADDR),
-+ "getSbeImageSize() - i_imgPtr is not at SBE_IMG_VADDR");
-+
-+ do{
-+ // Need to read the SbeXipHeader of the image to determine size
-+ // of the image to read out.
-+ // Using io_imgPtr space. First read our header+ECC from SBE
-+ // Seeprom and then use space after that to put header without ECC
-+
-+
-+ size_t hdr_size = ALIGN_8(sizeof(SbeXipHeader));
-+ size_t hdr_size_ECC = (hdr_size * 9)/8;
-+
-+ uint8_t* hdr_ptr = reinterpret_cast<uint8_t*>(i_imgPtr) + hdr_size_ECC;
-+
-+ memset( i_imgPtr, 0, hdr_size_ECC + hdr_size );
-+
-+ TRACUCOMP( g_trac_sbe, INFO_MRK"getSetSbeImage() Reading "
-+ "SbeXipHeader for Target 0x%X, Seeprom %d "
-+ "(side=%d), size_ECC=0x%X (size=0x%X)",
-+ TARGETING::get_huid(i_target),
-+ l_seeprom, i_side, hdr_size_ECC, hdr_size );
-+
-+ err = DeviceFW::deviceOp( DeviceFW::READ,
-+ i_target,
-+ i_imgPtr,
-+ hdr_size_ECC,
-+ DEVICE_EEPROM_ADDRESS(
-+ l_seeprom,
-+ SBE_IMAGE_SEEPROM_ADDRESS));
-+
-+ if(err)
-+ {
-+ TRACFCOMP( g_trac_sbe, ERR_MRK"getSbeImageSize: - Error "
-+ "Reading SbeXipHeader: rc=0x%.4X, seeprom=%d (side=%d). "
-+ "HUID=0x%.8X. size=0x%.8X, EEPROM offset=0x%X",
-+ err->reasonCode(), l_seeprom, i_side,
-+ TARGETING::get_huid(i_target), sizeof(SbeXipHeader),
-+ SBE_IMAGE_SEEPROM_ADDRESS);
-+ break;
-+ }
-+
-+
-+ TRACDBIN( g_trac_sbe,
-+ "Data with ECC read from Seeprom",
-+ i_imgPtr,
-+ hdr_size_ECC );
-+
-+ // Remove ECC
-+ eccStatus = PNOR::ECC::removeECC(
-+ reinterpret_cast<uint8_t*>(i_imgPtr),
-+ hdr_ptr,
-+ hdr_size);
-+
-+ // Fail if uncorrectable ECC
-+ if ( eccStatus == PNOR::ECC::UNCORRECTABLE )
-+ {
-+ TRACFCOMP( g_trac_sbe,ERR_MRK"getSbeImageSize: ECC Error "
-+ "On SBE Image Read eccStatus=%d sI=%d, sI_ECC="
-+ "%d, HUID=0x%.8X, Seeprom %d (side=%d)",
-+ eccStatus, o_image_size, image_size_ECC,
-+ TARGETING::get_huid(i_target),
-+ l_seeprom, i_side );
-+ /*@
-+ * @errortype
-+ * @moduleid SBE_GET_SBE_IMAGE_SIZE
-+ * @reasoncode SBE_ECC_FAIL
-+ * @userdata1[0:15] ECC Status
-+ * @userdata1[16:31] SEEPROM Side
-+ * @userdata1[32:63] Target HUID
-+ * @userdata2[0:31] Size - No Ecc
-+ * @userdata2[32:63] Size - ECC
-+ * @devdesc ECC Fail Reading SBE Image
-+ */
-+ err = new ErrlEntry(ERRL_SEV_PREDICTIVE,
-+ SBE_GET_SBE_IMAGE_SIZE,
-+ SBE_ECC_FAIL,
-+ TWO_UINT32_TO_UINT64(
-+ ( (eccStatus << 16 ) |
-+ l_seeprom ),
-+ TARGETING::get_huid(i_target)),
-+ TWO_UINT32_TO_UINT64(o_image_size,
-+ image_size_ECC));
-+ err->collectTrace(SBE_COMP_NAME);
-+ err->addPartCallout(
-+ i_target,
-+ HWAS::SBE_SEEPROM_PART_TYPE,
-+ HWAS::SRCI_PRIORITY_HIGH,
-+ HWAS::NO_DECONFIG,
-+ HWAS::GARD_NULL );
-+
-+ ErrlUserDetailsTarget(i_target).addToLog(err);
-+
-+ break;
-+ }
-+
-+ TRACDBIN( g_trac_sbe,
-+ "Data without ECC read from Seeprom",
-+ hdr_ptr,
-+ hdr_size );
-+
-+ o_image_size = (((SbeXipHeader*)hdr_ptr)->iv_imageSize);
-+
-+ }while(0);
-+
-+ TRACFCOMP( g_trac_sbe,
-+ EXIT_MRK"getSbeImageSize(): o_image_size=0x%X", o_image_size );
-+
-+ return err;
-+}
-+
-+
-+
-+/////////////////////////////////////////////////////////////////////
-+errlHndl_t resolveImageHBBaddr(TARGETING::Target* i_target,
-+ void* io_imgPtr,
-+ PNOR::sbeSeepromSide_t i_side,
-+ PNOR::SideId i_pnorSideId,
-+ bool& o_imageWasUpdated )
-+{
-+ errlHndl_t err = NULL;
-+ uint64_t data = 0;
-+ int rc = 0;
-+ bool rc_fail_on_get = false; // 1=get failed, 0=set failed
-+
-+ o_imageWasUpdated = false;
-+
-+ TRACUCOMP( g_trac_sbe,
-+ ENTER_MRK"resolveImageHBBaddr() - tgt=0x%X, i_side=%d, "
-+ "i_pnorSideId=%d",
-+ TARGETING::get_huid(i_target), i_side, i_pnorSideId);
-+
-+ do{
-+
-+ // Get info from PNOR
-+ PNOR::SideInfo_t pnor_side_info;
-+ err = PNOR::getSideInfo (i_pnorSideId, pnor_side_info);
-+ if ( err )
-+ {
-+ TRACFCOMP( g_trac_sbe, ERR_MRK
-+ "resolveImageHBBaddr() - Error returned "
-+ "from PNOR::getSideInfo() rc=0x%.4X, Target UID=0x%X "
-+ "i_pnorSideId",
-+ err->reasonCode(),
-+ TARGETING::get_huid(i_target), i_pnorSideId);
-+ break;
-+ }
-+
-+
-+ // Only Need to Check/Update if PNOR has Other Side
-+ // and Seeprom isn't pointing at PNOR's GOLDEN side
-+ if ( ( pnor_side_info.hasOtherSide == true ) &&
-+ ( pnor_side_info.isGolden == false ) )
-+ {
-+
-+ // Read the MMIO offset associated with the HBB address
-+ // from the image
-+ rc = sbe_xip_get_scalar( io_imgPtr,
-+ "standalone_mbox2_value",
-+ &data);
-+ if ( rc != 0 )
-+ {
-+ rc_fail_on_get = true; // get failed
-+
-+ TRACFCOMP( g_trac_sbe, ERR_MRK"resolveImageHBBaddr() - "
-+ "sbe_xip_get_scalar() failed rc = 0x%X (%d)",
-+ rc, rc_fail_on_get);
-+ break;
-+ }
-+
-+ if ( pnor_side_info.hbbMmioOffset == data )
-+ {
-+ TRACUCOMP( g_trac_sbe, "resolveImageHBBaddr: Image has MMIO "
-+ "offset = 0x%X that matches PNOR MMIO="
-+ "0x%X for HBB Address=0x%X",
-+ data, pnor_side_info.hbbMmioOffset,
-+ pnor_side_info.hbbAddress);
-+ }
-+ else
-+ {
-+ TRACFCOMP( g_trac_sbe, "resolveImageHBBaddr: Image has MMIO "
-+ "offset = 0x%X does NOT match PNOR MMIO="
-+ "0x%X for HBB Address=0x%X. Updating Image",
-+ data, pnor_side_info.hbbMmioOffset,
-+ pnor_side_info.hbbAddress);
-+
-+ TRACDBIN (g_trac_sbe, "resolveImageHBBaddr: data", &data, 8 );
-+
-+ TRACDBIN (g_trac_sbe, "resolveImageHBBaddr: hbbMmioOffset",
-+ &pnor_side_info.hbbMmioOffset, 8 );
-+ TRACDBIN (g_trac_sbe, "resolveImageHBBaddr: hbbAddress",
-+ &pnor_side_info.hbbAddress, 8);
-+
-+ rc = sbe_xip_set_scalar( io_imgPtr, "standalone_mbox2_value",
-+ pnor_side_info.hbbMmioOffset);
-+
-+ if ( rc != 0 )
-+ {
-+ rc_fail_on_get = false; // set failed
-+
-+ TRACFCOMP( g_trac_sbe, ERR_MRK"resolveImageHBBaddr() - "
-+ "sbe_xip_set_scalar() failed rc = 0x%X (%d)",
-+ rc, rc_fail_on_get);
-+ break;
-+ }
-+ o_imageWasUpdated = true;
-+ }
-+
-+ }
-+ else
-+ {
-+ // pnor_side_info.hasOtherSide is false
-+ TRACUCOMP( g_trac_sbe, "resolveImageHBBaddr: PNOR only has "
-+ "1 side - No Update Required");
-+ }
-+
-+ }while(0);
-+
-+
-+ if ( ( err == NULL ) && ( rc != 0) )
-+ {
-+ // We failed on get/set cmd above (already traced)
-+
-+ /*@
-+ * @errortype
-+ * @moduleid SBE_RESOLVE_HBB_ADDR
-+ * @reasoncode SBE_IMAGE_GET_SET_SCALAR_FAIL
-+ * @userdata1 Return Code of failed operation
-+ * @userdata2 True/False if Get (true) or Set (false) Op failed
-+ * @devdesc sbe_xip_get/set_scalar() failed when accessing the
-+ HBB Address MMIO offset in 'standalone_mbox2_value'
-+ * @custdesc A problem occurred while updating processor
-+ * boot code.
-+ */
-+ err = new ErrlEntry(ERRL_SEV_UNRECOVERABLE,
-+ SBE_RESOLVE_HBB_ADDR,
-+ SBE_IMAGE_GET_SET_SCALAR_FAIL,
-+ TO_UINT64(rc),
-+ TO_UINT64(rc_fail_on_get),
-+ true /*Add HB SW Callout*/ );
-+
-+ err->collectTrace(SBE_COMP_NAME);
-+ }
-+
-+
-+ TRACUCOMP( g_trac_sbe,
-+ EXIT_MRK"resolveImageHBBaddr() - o_imageWasUpdated = %d",
-+ o_imageWasUpdated);
-+
-+ return err;
-+}
-+
-+#ifdef CONFIG_BMC_IPMI
-+/////////////////////////////////////////////////////////////////////
-+void sbePreShutdownIpmiCalls( void )
-+{
-+ errlHndl_t err = NULL;
-+
-+ TRACFCOMP( g_trac_sbe, ENTER_MRK"sbePreShutdownIpmiCalls");
-+
-+ do{
-+ uint16_t count = 0;
-+ SENSOR::RebootCountSensor l_sensor;
-+
-+ // Read reboot count sensor
-+ err = l_sensor.getRebootCount(count);
-+ if ( err )
-+ {
-+ TRACFCOMP( g_trac_sbe,
-+ ERR_MRK"sbePreShutdownIpmiCalls: "
-+ "FAIL Reading Reboot Sensor Count. "
-+ "Committing Error Log rc=0x%.4X eid=0x%.8X "
-+ "plid=0x%.8X, but continuing shutdown",
-+ err->reasonCode(),
-+ err->eid(),
-+ err->plid());
-+ err->collectTrace(SBE_COMP_NAME);
-+ errlCommit( err, SBE_COMP_ID );
-+
-+ // No Break - Still Do Watchdog Timer Call
-+ }
-+ else
-+ {
-+ // Increment Reboot Count Sensor
-+ count++;
-+ TRACFCOMP( g_trac_sbe,
-+ INFO_MRK"sbePreShutdownIpmiCalls: "
-+ "Writing Reboot Sensor Count=%d", count);
-+
-+ err = l_sensor.setRebootCount( count );
-+ if ( err )
-+ {
-+ TRACFCOMP( g_trac_sbe,
-+ ERR_MRK"sbePreShutdownIpmiCalls: "
-+ "FAIL Writing Reboot Sensor Count to %d. "
-+ "Committing Error Log rc=0x%.4X eid=0x%.8X "
-+ "plid=0x%.8X, but continuing shutdown",
-+ count,
-+ err->reasonCode(),
-+ err->eid(),
-+ err->plid());
-+ err->collectTrace(SBE_COMP_NAME);
-+ errlCommit( err, SBE_COMP_ID );
-+
-+ // No Break - Still Do Watchdog Timer Call
-+ }
-+ }
-+
-+ // @todo RTC 124679 - Remove Once BMC Monitors Shutdown Attention
-+ // Set Watchdog Timer To 10 seconds
-+ const uint16_t SET_WD_TIMER_10_SECS = 10;
-+ TRACFCOMP( g_trac_sbe,"sbePreShutdownIpmiCalls: "
-+ "Set Watch Dog Timer To %d Seconds",
-+ SET_WD_TIMER_10_SECS);
-+
-+ err = IPMIWATCHDOG::setWatchDogTimer(SET_WD_TIMER_10_SECS);
-+ if(err)
-+ {
-+ TRACFCOMP( g_trac_sbe,
-+ ERR_MRK"sbePreShutdownIpmiCalls: "
-+ "FAIL Setting Watch Dog Timer to %d seconds. "
-+ "Committing Error Log rc=0x%.4X eid=0x%.8X "
-+ "plid=0x%.8X, but continuing shutdown",
-+ SET_WD_TIMER_10_SECS,
-+ err->reasonCode(),
-+ err->eid(),
-+ err->plid());
-+
-+ err->collectTrace(SBE_COMP_NAME);
-+ errlCommit(err, SBE_COMP_ID );
-+ }
-+
-+ }while(0);
-+
-+ TRACFCOMP( g_trac_sbe, EXIT_MRK"sbePreShutdownIpmiCalls");
-+
-+ return;
-+}
-+#endif // CONFIG_BMC_IPMI
-+
-+
-+} //end SBE Namespace
-diff --git a/src/usr/sbe/sbe_resolve_sides.H b/src/usr/sbe/sbe_resolve_sides.H
-new file mode 100644
-index 0000000..42f727a
---- /dev/null
-+++ b/src/usr/sbe/sbe_resolve_sides.H
-@@ -0,0 +1,259 @@
-+/* IBM_PROLOG_BEGIN_TAG */
-+/* This is an automatically generated prolog. */
-+/* */
-+/* $Source: src/usr/sbe/sbe_resolve_sides.H $ */
-+/* */
-+/* OpenPOWER HostBoot Project */
-+/* */
-+/* Contributors Listed Below - COPYRIGHT 2015 */
-+/* [+] International Business Machines Corp. */
-+/* */
-+/* */
-+/* Licensed under the Apache License, Version 2.0 (the "License"); */
-+/* you may not use this file except in compliance with the License. */
-+/* You may obtain a copy of the License at */
-+/* */
-+/* http://www.apache.org/licenses/LICENSE-2.0 */
-+/* */
-+/* Unless required by applicable law or agreed to in writing, software */
-+/* distributed under the License is distributed on an "AS IS" BASIS, */
-+/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
-+/* implied. See the License for the specific language governing */
-+/* permissions and limitations under the License. */
-+/* */
-+/* IBM_PROLOG_END_TAG */
-+#ifndef __SBE_SBE_RESOLVE_SIDES_H
-+#define __SBE_SBE_RESOLVE_SIDES_H
-+
-+
-+#include <stdint.h>
-+#include <builtins.h>
-+#include <errl/errlentry.H>
-+#include <pnor/pnorif.H>
-+#include <util/align.H>
-+#include <vmmconst.h>
-+#include <targeting/common/targetservice.H>
-+#include <i2c/eepromif.H>
-+#include "sbe_update.H"
-+
-+namespace SBE
-+{
-+ /******************************************/
-+ /* Constants */
-+ /******************************************/
-+
-+ // This seeprom is a candidate to be READ_ONLY (ie, not updated)
-+ const PNOR::sbeSeepromSide_t READ_ONLY_SEEPROM = PNOR::SBE_SEEPROM1;
-+
-+ // Used to keep SBE Seeproms in sync with EEPROM::eeprom_chip_types_t
-+ const EEPROM::eeprom_chip_types_t sbe_side_sync[2] =
-+ { EEPROM::SBE_PRIMARY,
-+ EEPROM::SBE_BACKUP };
-+
-+ /******************************************/
-+ /* Enums */
-+ /******************************************/
-+
-+ // Actions can be combined
-+ enum
-+ {
-+ NO_ACTIONS = 0x00000000,
-+ REIPL = 0x00000001,
-+
-+ // Use PNOR::ALTERNATE SideId for HBB Address info
-+ USE_PNOR_ALT_SIDE = 0x00000002,
-+
-+ // NOTE: These next 2 values are mutually exclusive
-+ CHECK_WORKING_HBB = 0x00000010,
-+ COPY_READ_ONLY_TO_WORKING = 0x00000020,
-+ };
-+
-+ /******************************************/
-+ /* Structs */
-+ /******************************************/
-+ struct sbeResolveState_t
-+ {
-+
-+ // Target Information
-+ TARGETING::Target* tgt;
-+
-+ PNOR::sbeSeepromSide_t cur_side; // aka 'booted' side
-+ PNOR::sbeSeepromSide_t alt_side; // non-booted/non-cur side
-+ PNOR::sbeSeepromSide_t update_side; // side to be updated
-+
-+ // Info from PNOR
-+ PNOR::SideId pnor_sideId;
-+ char pnor_side; /**< name of the side either A or B */
-+ bool pnor_isGolden; /**< True if side is golden */
-+ bool pnor_hasOtherSide; /**< True if a valid alternate side exists*/
-+
-+ uint32_t actions;
-+
-+ // Constructor to default certain values
-+ sbeResolveState_t() :
-+ tgt(NULL), cur_side(PNOR::SBE_SEEPROM_INVALID),
-+ alt_side(PNOR::SBE_SEEPROM_INVALID),
-+ update_side(PNOR::SBE_SEEPROM_INVALID),
-+ pnor_sideId(PNOR::WORKING),
-+ pnor_side(NULL),
-+ pnor_isGolden(false), pnor_hasOtherSide(false),
-+ actions(NO_ACTIONS)
-+ {}
-+
-+ };
-+
-+
-+ /******************************************/
-+ /* Functions -- High Level Functions */
-+ /******************************************/
-+
-+ /**
-+ * @brief Collects SBE Side Information for a specifc target
-+ *
-+ * @param[io/out] io_sideState Struct containing SBE State of the target
-+ *
-+ * @return errlHndl_t Error log handle on failure.
-+ */
-+ errlHndl_t getSideState(sbeResolveState_t& io_sideState);
-+
-+ /**
-+ * @brief Analyze and Determine Update Actions for a specific target
-+ *
-+ * @param[io/out] io_sideState Struct containing SBE State of the target
-+ *
-+ * @return errlHndl_t Error log handle on failure.
-+ */
-+ errlHndl_t getSideActions(sbeResolveState_t& io_sideState);
-+
-+ /**
-+ * @brief Performs the Update Actions for a specific target
-+ *
-+ * @param[io/out] io_sideState Struct containing SBE State of the target
-+ *
-+ * @return errlHndl_t Error log handle on failure.
-+ */
-+ errlHndl_t performSideActions(sbeResolveState_t& io_sideState);
-+
-+
-+
-+ /******************************************/
-+ /* Functions -- System Access */
-+ /******************************************/
-+
-+
-+ /**
-+ * @brief Read SBE Image from SBE Seeprom
-+ *
-+ * @param[in] i_target Target processor
-+ *
-+ * @param[out] o_imgPtr Pointer to SBE image in memory
-+ * Memory for this pointer is expected to be
-+ * pre-alloacted
-+ * NOTE: ECC is handled internally in this
-+ * function. io_imgPtr points to non-ECC image
-+ *
-+ * @param[in] i_side Seeprom Side to access
-+ *
-+ * @param[in] o_image_size The size of the image (non-ECC)
-+ *
-+ * @param[in] o_version SBE Version struct from seeprom (non-ECC)
-+ *
-+ * @return errlHndl_t Error log handle on failure.
-+ */
-+ errlHndl_t readSbeImage(TARGETING::Target* i_target,
-+ void* o_imgPtr,
-+ PNOR::sbeSeepromSide_t i_side,
-+ size_t& o_image_size,
-+ sbeSeepromVersionInfo_t& o_version);
-+
-+ /**
-+ * @brief Write SBE Image from SBE Seeprom
-+ *
-+ * @param[in] i_target Target processor
-+ *
-+ * @param[in] i_imgPtr Pointer to SBE image in memory
-+ * Memory for this pointer is expected to be
-+ * pre-alloacted
-+ * NOTE: ECC is handled internally in this function
-+ * i_imgPtr points to non-ECC image
-+ *
-+ * @param[in] i_side Seeprom Side to access
-+ *
-+ * @param[in] i_image_size Size of image to write (non-ECC)
-+ *
-+ * @param[in] io_version SBE Version struct to write (non-ECC)
-+ * NOTE: data_crc updated in this function
-+ *
-+ * @return errlHndl_t Error log handle on failure.
-+ */
-+ errlHndl_t writeSbeImage(TARGETING::Target* i_target,
-+ void* i_imgPtr,
-+ PNOR::sbeSeepromSide_t i_side,
-+ size_t i_image_size,
-+ sbeSeepromVersionInfo_t& io_version);
-+
-+
-+ /**
-+ * @brief Read SBE Image Header from SBE Seeprom and gets the
-+ * Image size from the heaser
-+ *
-+ * @param[in] i_target Target processor
-+ *
-+ * @param[out] i_imgPtr Pointer to pre-allocated memory to be used
-+ * for different operations
-+ *
-+ * @param[in] i_side Seeprom Side to access
-+ *
-+ * @param[in] o_image_size The size of the image (non-ECC)
-+ *
-+ * @return errlHndl_t Error log handle on failure.
-+ */
-+ errlHndl_t getSbeImageSize(TARGETING::Target* i_target,
-+ void* i_imgPtr,
-+ PNOR::sbeSeepromSide_t i_side,
-+ size_t& o_image_size);
-+
-+
-+
-+
-+ /******************************************/
-+ /* Functions -- Helper Functions */
-+ /******************************************/
-+
-+ /**
-+ * @brief Check and Update (if necessary) the HBB Address MMIO offset
-+ * in a customized SBE Image for the current Processor
-+ *
-+ * @param[in] i_target Target processor to customize
-+ *
-+ * @param[in/out] io_imgPtr Pointer to SBE image in memory
-+ * Memory for this pointer is expected to be
-+ * pre-alloacted
-+ *
-+ * @param[in] i_side Seeprom Side to access
-+ *
-+ * @param[in] i_pnorSideId PNOR side to get information for
-+ *
-+ * @param[out] o_imageWasUpdated Set to true if Image was updated;
-+ * otherwise false
-+ *
-+ * @return errlHndl_t Error log handle on failure.
-+ */
-+ errlHndl_t resolveImageHBBaddr(TARGETING::Target* i_target,
-+ void* io_imgPtr,
-+ PNOR::sbeSeepromSide_t i_side,
-+ PNOR::SideId i_pnorSideId,
-+ bool& o_imageWasUpdated);
-+
-+#ifdef CONFIG_BMC_IPMI
-+ /**
-+ * @brief Performs any necessary IPMI calls before shutting down the system
-+ *
-+ * @return void Any generated Error Logs will be commited before the
-+ * function returns
-+ */
-+ void sbePreShutdownIpmiCalls( void );
-+#endif
-+
-+} //end namespace SBE
-+#endif
-diff --git a/src/usr/sbe/sbe_update.C b/src/usr/sbe/sbe_update.C
-index 97a0484..562798b 100644
---- a/src/usr/sbe/sbe_update.C
-+++ b/src/usr/sbe/sbe_update.C
-@@ -50,6 +50,7 @@
- #include <sbe/sbeif.H>
- #include <sbe/sbereasoncodes.H>
- #include "sbe_update.H"
-+#include "sbe_resolve_sides.H"
-
- // fapi support
- #include <fapi.H>
-@@ -112,6 +113,25 @@ namespace SBE
-
- do{
-
-+#ifdef CONFIG_NO_SBE_UPDATES
-+ TRACFCOMP( g_trac_sbe, INFO_MRK"updateProcessorSbeSeeproms() - "
-+ "SBE updates not configured");
-+ break;
-+#endif
-+
-+#ifdef CONFIG_SBE_UPDATE_SEQUENTIAL
-+ // Check if FSP-services are enabled and if we're running in simics
-+ if ( !INITSERVICE::spBaseServicesEnabled() &&
-+ !Util::isSimicsRunning() )
-+ {
-+ assert (false, "resolveProcessorSbeSeeproms() - "
-+ "SBE_UPDATE_SEQUENTIAL mode, but FSP-services are not "
-+ "enabled - Invalid Configuration");
-+ }
-+ // else - continue on
-+#endif
-+
-+
- // Get Target Service, and the system target.
- TargetService& tS = targetService();
- TARGETING::Target* sys = NULL;
-@@ -204,11 +224,6 @@ namespace SBE
- err = NULL;
- }
-
--#ifdef CONFIG_NO_SBE_UPDATES
-- TRACFCOMP( g_trac_sbe, INFO_MRK"updateProcessorSbeSeeproms() - "
-- "SBE updates not configured");
-- break;
--#endif
-
- for(uint32_t i=0; i<procList.size(); i++)
- {
-@@ -277,7 +292,6 @@ namespace SBE
- /**********************************************/
- if ((err == NULL) && (sbeState.update_actions & DO_UPDATE))
- {
--
- err = performUpdateActions(sbeState);
- if (err)
- {
-@@ -328,7 +342,6 @@ namespace SBE
-
- } //end of Target for loop collecting each target's SBE State
-
--
- /**************************************************************/
- /* Perform System Operation */
- /**************************************************************/
-@@ -355,7 +368,7 @@ namespace SBE
- }
-
- #ifdef CONFIG_BMC_IPMI
-- // @todo RTC 120734 reset system's reboot count via IPMI sensor
-+ sbePreShutdownIpmiCalls();
- #endif
-
- TRACFCOMP( g_trac_sbe,
-@@ -685,14 +698,15 @@ namespace SBE
-
- do{
-
-- // @todo RTC 120734 - before customizing, ensure correct HBB address
-- // is set in the necessary attribute
--
- // cast OUR type of target to a FAPI type of target.
- const fapi::Target
- l_fapiTarg(fapi::TARGET_TYPE_PROC_CHIP,
- (const_cast<TARGETING::Target*>(i_target)));
-
-+ // NOTE: The p8_xip_customize_procedure uses SBE_IMAGE_OFFSET
-+ // attribute for HBB address value. Purpsely leaving this
-+ // attribute as-is for now and will do the check for HBB address
-+ // later.
-
- // The p8_xip_customize() procedure tries to include as much core
- // information as possible, but is limited by SBE Image size
-@@ -871,7 +885,6 @@ namespace SBE
- HWAS::SRCI_PRIORITY_HIGH );
- }
-
--
- }while(0);
-
- TRACUCOMP( g_trac_sbe,
-@@ -1715,6 +1728,26 @@ namespace SBE
- // The Customized Image For This Target Still Resides In
- // The SBE Update VMM Space: SBE_IMG_VADDR = VMM_VADDR_SBE_UPDATE
-
-+#ifdef CONFIG_SBE_UPDATE_INDEPENDENT
-+ // Ensure HBB address value in the customized image is correct
-+ // for this side
-+ bool imageWasUpdated=false;
-+ err = resolveImageHBBaddr ( io_sbeState.target,
-+ reinterpret_cast<void*>(SBE_IMG_VADDR),
-+ ((io_sbeState.seeprom_side_to_update ==
-+ EEPROM::SBE_PRIMARY ) ?
-+ PNOR::SBE_SEEPROM0 :
-+ PNOR::SBE_SEEPROM1 ),
-+ PNOR::WORKING,
-+ imageWasUpdated );
-+
-+ if (imageWasUpdated == true )
-+ {
-+ TRACUCOMP( g_trac_sbe, ERR_MRK"updateSeepromSide() - "
-+ "HBB Address's MMIO Offset Updated in Image");
-+ }
-+
-+#endif
-
- // Inject ECC
- // clear out back half of page block to use as temp space
-@@ -1941,7 +1974,6 @@ namespace SBE
- io_sbeState.seeprom_0_ver.data_crc, isSimics_check);
- }
-
--
- /**************************************************************/
- /* Compare SEEPROM 1 with PNOR and Customized Image CRC -- */
- /* -- dirty or clean? */
-@@ -2153,22 +2185,55 @@ namespace SBE
- #ifdef CONFIG_SBE_UPDATE_INDEPENDENT
-
- // The 2 SBE SEEPROMs are independent of each other
-- // Determine if PNOR is 1- or 2-sided and if there is a
-- // GOLDEN boot involved
-+ // Determine if PNOR is 1- or 2-sided and if the current
-+ // Seeprom is pointing at PNOR's GOLDEN side
-+
-+ PNOR::SideId tmp_side = PNOR::WORKING;
-+ PNOR::SideInfo_t pnor_side_info;
-+ err = PNOR::getSideInfo (tmp_side, pnor_side_info);
-+ if ( err )
-+ {
-+ TRACFCOMP( g_trac_sbe, ERR_MRK
-+ "SBE Update() - Error returned from "
-+ "PNOR::getSideInfo() rc=0x%.4X, Target UID=0x%X",
-+ err->reasonCode(),
-+ TARGETING::get_huid(io_sbeState.target));
-+ break;
-+ }
-
--#ifdef CONFIG_PNOR_TWO_SIDE_SUPPORT
-+ TRACUCOMP( g_trac_sbe, INFO_MRK"SBE Update tgt=0x%X: PNOR Info: "
-+ "side-%c, sideId=0x%X, isGolden=%d, hasOtherSide=%d",
-+ TARGETING::get_huid(io_sbeState.target),
-+ pnor_side_info.side, pnor_side_info.id,
-+ pnor_side_info.isGolden, pnor_side_info.hasOtherSide);
-
-- // @todo RTC 120734 - ask PNOR if we are in "GOLDEN" mode,
-- // which would mean that we are booting off the the GOLDEN
-- // SBE SEEPROM which corresponds to the GOLDEN side of PNOR
--/*
-- if (true)
-+ if ( pnor_side_info.isGolden == true )
- {
- // If true, nothing to do (covered in istep 6 function)
- l_actions = CLEAR_ACTIONS;
-
- TRACFCOMP( g_trac_sbe, INFO_MRK"SBE Update tgt=0x%X: "
-- "Booting GOLDEN SBE SEEPROM in PNOR 2-sided Mode. "
-+ "Booting READ_ONLY SEEPROM pointing at PNOR's "
-+ "GOLDEN side. No updates for cur side=%d. Continue "
-+ "IPL. (sit=0x%.2X, act=0x%.8X flags=0x%.2X)",
-+ TARGETING::get_huid(io_sbeState.target),
-+ io_sbeState.cur_seeprom_side,
-+ i_system_situation, l_actions,
-+ io_sbeState.mvpdSbKeyword.flags);
-+ break;
-+ }
-+
-+ else if ( ( pnor_side_info.hasOtherSide == false ) &&
-+ ( io_sbeState.cur_seeprom_side == READ_ONLY_SEEPROM ) )
-+ {
-+ // Even though current seeprom is not pointing at PNOR's
-+ // GOLDEN side, treat like READ_ONLY if booting from READ_ONLY
-+ // seeprom and and PNOR does not have another side - No Update
-+ // (ie, Palmetto configuration)
-+ l_actions = CLEAR_ACTIONS;
-+
-+ TRACFCOMP( g_trac_sbe, INFO_MRK"SBE Update tgt=0x%X: "
-+ "Treating cur like READ_ONLY SBE SEEPROM. "
- "No updates for cur side=%d. Continue IPL. "
- "(sit=0x%.2X, act=0x%.8X flags=0x%.2X)",
- TARGETING::get_huid(io_sbeState.target),
-@@ -2179,22 +2244,14 @@ namespace SBE
- }
- else // proceed to update this side
- {
-+ // proceed to update this side
- TRACUCOMP( g_trac_sbe, INFO_MRK"SBE Update tgt=0x%X: "
-- "NOT Booting GOLDEN SBE SEEPROM in PNOR 2-sided "
-- "mode. Checking for update on cur side=%d ",
-+ "NOT Booting READ_ONLY SEEPROM. Check for update "
-+ "on cur side=%d ",
- TARGETING::get_huid(io_sbeState.target),
- io_sbeState.cur_seeprom_side)
- }
--*/
--#else
-
-- // @todo RTC 120734 - check this assumption
-- // Assume that we're only checking/updating the current side
-- TRACUCOMP( g_trac_sbe, INFO_MRK"SBE Update tgt=0x%X: "
-- "PNOR 1-sided so only check for update on cur side=%d",
-- TARGETING::get_huid(io_sbeState.target),
-- io_sbeState.cur_seeprom_side);
--#endif
-
- // Check for clean vs. dirty only on cur side
- if ( i_system_situation & SITUATION_CUR_IS_DIRTY )
-@@ -2203,6 +2260,7 @@ namespace SBE
- l_actions |= IPL_RESTART;
- l_actions |= DO_UPDATE;
- l_actions |= UPDATE_SBE;
-+ l_actions |= UPDATE_MVPD; // even though flags byte not updated
-
- // Set Update side to cur
- io_sbeState.seeprom_side_to_update =
---
-1.7.4.1
-
diff --git a/openpower/package/hostboot/hostboot-0010-Mark-Centaurs-as-present-functionl-on-IPL.patch b/openpower/package/hostboot/hostboot-0010-Mark-Centaurs-as-present-functionl-on-IPL.patch
deleted file mode 100644
index 9d9ff0f..0000000
--- a/openpower/package/hostboot/hostboot-0010-Mark-Centaurs-as-present-functionl-on-IPL.patch
+++ /dev/null
@@ -1,56 +0,0 @@
-From d569d04ce1b7451af590465e1befab0ae3634ccf Mon Sep 17 00:00:00 2001
-From: Richard J. Knight <rjknight@us.ibm.com>
-Date: Fri, 27 Feb 2015 22:13:21 -0600
-Subject: [PATCH 5/7] Mark Centaurs as present/functionl on IPL
-
- -Update Centaur status sensor after discove targets is called
- to initialize the Centaur Func sensors on the BMC
-
-Change-Id: I28b1047b50b690b97a20093721467f45455c5217
-RTC:124846
-(cherry picked from commit dd9502f744de8c09425d677570825699a979128f)
----
- src/usr/ipmi/ipmisensor.C | 15 ++++++++++++---
- 1 files changed, 12 insertions(+), 3 deletions(-)
-
-diff --git a/src/usr/ipmi/ipmisensor.C b/src/usr/ipmi/ipmisensor.C
-index fba66a6..4b5b478 100644
---- a/src/usr/ipmi/ipmisensor.C
-+++ b/src/usr/ipmi/ipmisensor.C
-@@ -894,14 +894,19 @@ namespace SENSOR
- // get all targets of the passed in type, functional or not
- switch( i_type )
- {
-- case TARGETING::TYPE_PROC:
-- getAllChips( l_tList, TARGETING::TYPE_PROC, false );
-- break;
-
- case TARGETING::TYPE_DIMM:
- getAllLogicalCards( l_tList, TARGETING::TYPE_DIMM, false );
- break;
-
-+ case TARGETING::TYPE_MEMBUF:
-+ getAllChips( l_tList, TARGETING::TYPE_MEMBUF, false );
-+ break;
-+
-+ case TARGETING::TYPE_PROC:
-+ getAllChips( l_tList, TARGETING::TYPE_PROC, false );
-+ break;
-+
- case TARGETING::TYPE_CORE:
- getAllChiplets( l_tList, TARGETING::TYPE_CORE, false);
- break;
-@@ -1024,6 +1029,10 @@ namespace SENSOR
-
- void updateBMCSensorStatus()
- {
-+
-+ // send status of all MEMBUF targets
-+ updateBMCSensorStatus(TARGETING::TYPE_MEMBUF);
-+
- // send status of all DIMM targets
- updateBMCSensorStatus(TARGETING::TYPE_DIMM);
-
---
-1.7.4.1
-
diff --git a/openpower/package/hostboot/hostboot-0011-Update-Shutdown-Path-for-SBE-Updates.patch b/openpower/package/hostboot/hostboot-0011-Update-Shutdown-Path-for-SBE-Updates.patch
deleted file mode 100644
index dc80e92..0000000
--- a/openpower/package/hostboot/hostboot-0011-Update-Shutdown-Path-for-SBE-Updates.patch
+++ /dev/null
@@ -1,158 +0,0 @@
-From c8c9edd25a04a8ff1974fd75e27a3b24b71030fc Mon Sep 17 00:00:00 2001
-From: Mike Baiocchi <baiocchi@us.ibm.com>
-Date: Fri, 27 Feb 2015 13:55:34 -0600
-Subject: [PATCH 6/7] Update Shutdown Path for SBE Updates
-
-This change will do the following:
--- Flush out a console message to alert the user that the system is
- shutting down to perform a SBE Update.
--- Set the watchdog timer to 15 seconds before shutting down.
--- Set the watchdog timer to NO_ACTIONS such that the boot count
- sensor will handle the re-IPL.
-
-Change-Id: I3e8ca07030e50a56cd8bafc514bab036e3fdab96
-RTC: 120734
-(cherry picked from commit 20163b32e98f40e9346863e5954184958acc9af5)
----
- src/include/usr/ipmi/ipmiwatchdog.H | 1 +
- src/usr/sbe/sbe_resolve_sides.C | 33 +++++++++++++++++++++++++--------
- src/usr/sbe/sbe_resolve_sides.H | 4 ++++
- src/usr/sbe/sbe_update.C | 14 ++++++++++++++
- 4 files changed, 44 insertions(+), 8 deletions(-)
-
-diff --git a/src/include/usr/ipmi/ipmiwatchdog.H b/src/include/usr/ipmi/ipmiwatchdog.H
-index f23b771..62840ce 100644
---- a/src/include/usr/ipmi/ipmiwatchdog.H
-+++ b/src/include/usr/ipmi/ipmiwatchdog.H
-@@ -79,6 +79,7 @@ enum TIMER_USE
- */
- enum TIMER_ACTIONS
- {
-+ NO_ACTIONS = 0x00, // all bits
- PRE_TIMEOUT_INT_SMI = 0x10, // bit 4
- PRE_TIMEOUT_INT_NMI = 0x20, // bit 5
- PRE_TIMEOUT_INT_MSG = 0x30, // bits 4 & 5
-diff --git a/src/usr/sbe/sbe_resolve_sides.C b/src/usr/sbe/sbe_resolve_sides.C
-index df9958d..90217b6 100644
---- a/src/usr/sbe/sbe_resolve_sides.C
-+++ b/src/usr/sbe/sbe_resolve_sides.C
-@@ -40,6 +40,7 @@
- #include <sys/misc.h>
- #include <hwas/common/deconfigGard.H>
- #include <initservice/initserviceif.H>
-+#include <console/consoleif.H>
- #include <config.h>
- #include <ipmi/ipmiwatchdog.H>
- #include <ipmi/ipmisensor.H>
-@@ -285,7 +286,20 @@ errlHndl_t resolveProcessorSbeSeeproms()
- l_restartNeeded);
-
- #ifdef CONFIG_BMC_IPMI
-- sbePreShutdownIpmiCalls();
-+ sbePreShutdownIpmiCalls();
-+#endif
-+
-+#ifdef CONFIG_CONSOLE
-+ #ifdef CONFIG_BMC_IPMI
-+ CONSOLE::displayf(SBE_COMP_NAME, "System Shutting Down In %d "
-+ "Seconds To Perform SBE Update\n",
-+ SET_WD_TIMER_IN_SECS);
-+ #else
-+ CONSOLE::displayf(SBE_COMP_NAME, "System Shutting Down To "
-+ "Perform SBE Update\n");
-+ #endif
-+
-+ CONSOLE::flush();
- #endif
-
- TRACFCOMP( g_trac_sbe,
-@@ -1276,7 +1290,6 @@ errlHndl_t resolveImageHBBaddr(TARGETING::Target* i_target,
- void sbePreShutdownIpmiCalls( void )
- {
- errlHndl_t err = NULL;
--
- TRACFCOMP( g_trac_sbe, ENTER_MRK"sbePreShutdownIpmiCalls");
-
- do{
-@@ -1328,13 +1341,17 @@ void sbePreShutdownIpmiCalls( void )
- }
-
- // @todo RTC 124679 - Remove Once BMC Monitors Shutdown Attention
-- // Set Watchdog Timer To 10 seconds
-- const uint16_t SET_WD_TIMER_10_SECS = 10;
-+ // Set Watchdog Timer before calling doShutdown()
- TRACFCOMP( g_trac_sbe,"sbePreShutdownIpmiCalls: "
- "Set Watch Dog Timer To %d Seconds",
-- SET_WD_TIMER_10_SECS);
--
-- err = IPMIWATCHDOG::setWatchDogTimer(SET_WD_TIMER_10_SECS);
-+ SET_WD_TIMER_IN_SECS);
-+
-+ err = IPMIWATCHDOG::setWatchDogTimer(
-+ SET_WD_TIMER_IN_SECS, // new time
-+ static_cast<uint8_t>
-+ (IPMIWATCHDOG::DO_NOT_STOP |
-+ IPMIWATCHDOG::BIOS_FRB2), // default
-+ IPMIWATCHDOG::NO_ACTIONS); // boot count reset
- if(err)
- {
- TRACFCOMP( g_trac_sbe,
-@@ -1342,7 +1359,7 @@ void sbePreShutdownIpmiCalls( void )
- "FAIL Setting Watch Dog Timer to %d seconds. "
- "Committing Error Log rc=0x%.4X eid=0x%.8X "
- "plid=0x%.8X, but continuing shutdown",
-- SET_WD_TIMER_10_SECS,
-+ SET_WD_TIMER_IN_SECS,
- err->reasonCode(),
- err->eid(),
- err->plid());
-diff --git a/src/usr/sbe/sbe_resolve_sides.H b/src/usr/sbe/sbe_resolve_sides.H
-index 42f727a..d7c1f7c 100644
---- a/src/usr/sbe/sbe_resolve_sides.H
-+++ b/src/usr/sbe/sbe_resolve_sides.H
-@@ -50,6 +50,10 @@ namespace SBE
- { EEPROM::SBE_PRIMARY,
- EEPROM::SBE_BACKUP };
-
-+ // @todo RTC 124679 - Remove Once BMC Monitors Shutdown Attention
-+ // Set Watchdog Timer To 15 seconds before calling doShutdown()
-+ const uint16_t SET_WD_TIMER_IN_SECS = 15;
-+
- /******************************************/
- /* Enums */
- /******************************************/
-diff --git a/src/usr/sbe/sbe_update.C b/src/usr/sbe/sbe_update.C
-index 562798b..a20c1a8 100644
---- a/src/usr/sbe/sbe_update.C
-+++ b/src/usr/sbe/sbe_update.C
-@@ -46,6 +46,7 @@
- #include <sys/msg.h>
- #include <hwas/common/deconfigGard.H>
- #include <initservice/initserviceif.H>
-+#include <console/consoleif.H>
- #include <config.h>
- #include <sbe/sbeif.H>
- #include <sbe/sbereasoncodes.H>
-@@ -371,6 +372,19 @@ namespace SBE
- sbePreShutdownIpmiCalls();
- #endif
-
-+#ifdef CONFIG_CONSOLE
-+ #ifdef CONFIG_BMC_IPMI
-+ CONSOLE::displayf(SBE_COMP_NAME, "System Shutting Down In %d "
-+ "Seconds To Perform SBE Update\n",
-+ SET_WD_TIMER_IN_SECS);
-+ #else
-+ CONSOLE::displayf(SBE_COMP_NAME, "System Shutting Down To "
-+ "Perform SBE Update\n");
-+ #endif
-+
-+ CONSOLE::flush();
-+#endif
-+
- TRACFCOMP( g_trac_sbe,
- INFO_MRK"updateProcessorSbeSeeproms(): Calling "
- "INITSERVICE::doShutdown() with "
---
-1.7.4.1
-
diff --git a/openpower/package/hostboot/hostboot.mk b/openpower/package/hostboot/hostboot.mk
index 9c39190..d3b76fa 100644
--- a/openpower/package/hostboot/hostboot.mk
+++ b/openpower/package/hostboot/hostboot.mk
@@ -4,7 +4,7 @@
#
################################################################################
-HOSTBOOT_VERSION ?= a91a8f7b3d35490845272e839e372329114df7a4
+HOSTBOOT_VERSION ?= 3593853a4323d9ec7de1ad6502e22b3e66af03ae
HOSTBOOT_SITE ?= $(call github,open-power,hostboot,$(HOSTBOOT_VERSION))
HOSTBOOT_LICENSE = Apache-2.0