summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Geddes <crgeddes@us.ibm.com>2018-04-25 18:08:28 -0500
committerChristian R. Geddes <crgeddes@us.ibm.com>2018-05-14 12:22:15 -0400
commitb1771bfafee10eb48308457bab14f511394cf57d (patch)
tree53434237d5506920f4184d2ed8e6b0fbf704656d
parentd2f22373f239842f7eb9d9abbc3290c85894056b (diff)
downloadtalos-hostboot-b1771bfafee10eb48308457bab14f511394cf57d.tar.gz
talos-hostboot-b1771bfafee10eb48308457bab14f511394cf57d.zip
Create HWP to save/restore OBUS fir masks
During the IPL in a multi-node system Hostboot is unable to detect other nodes. Because of this Hostboot is unable to set the PEER_TARGET attr for OBUS targets as their PEERs are on different nodes. Once the system reaching runtime HBRT will have the information to fill in PEER_TARGET attributes on the OBUS targets. During the period while Hostboot doesn't know the OBUS PEER_TARGETs we must mask off additional FIRs so that PRD doesn't attempt to access the an OBUS's peer during a fail. This HWP will provide a way to save off the FIR masks during IPL time, and will apply additional masks required for the rest of the IPL. In addition this HWP will provide a way to reapply the original masks after HBRT has filled in the information for all OBUSes peer targets. CQ: SW425530 Change-Id: I45a3d23023f0021d7dbf5c6726075b270e2e1418 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/57853 Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: HWSV CI <hwsv-ci+hostboot@us.ibm.com> Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com> Reviewed-by: Thi N. Tran <thi@us.ibm.com> Reviewed-by: Christopher W. Steffen <cwsteffen@us.ibm.com> Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/57857 Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com> Reviewed-by: Christian R. Geddes <crgeddes@us.ibm.com>
-rw-r--r--src/import/chips/p9/procedures/hwp/io/p9_io_obus_firmask_save_restore.C310
-rw-r--r--src/import/chips/p9/procedures/hwp/io/p9_io_obus_firmask_save_restore.H141
-rw-r--r--src/import/chips/p9/procedures/xml/attribute_info/p9_io_obus_attributes.xml35
-rwxr-xr-xsrc/import/chips/p9/procedures/xml/error_info/p9_io_obus_errors.xml11
4 files changed, 495 insertions, 2 deletions
diff --git a/src/import/chips/p9/procedures/hwp/io/p9_io_obus_firmask_save_restore.C b/src/import/chips/p9/procedures/hwp/io/p9_io_obus_firmask_save_restore.C
new file mode 100644
index 000000000..47857b524
--- /dev/null
+++ b/src/import/chips/p9/procedures/hwp/io/p9_io_obus_firmask_save_restore.C
@@ -0,0 +1,310 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/import/chips/p9/procedures/hwp/io/p9_io_obus_firmask_save_restore.C $ */
+/* */
+/* OpenPOWER HostBoot Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2018 */
+/* [+] 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 */
+/// @file p9_io_obus_firmask_save_restore.H
+/// @brief HWP that will give user ability to save off obus firmask into attribute
+/// and restore them at a later date.
+///
+///-----------------------------------------------------------------------------
+/// *HWP HW Owner : Chris Steffen <cwsteffen@us.ibm.com>
+/// *HWP HW Backup Owner :
+/// *HWP FW Owner : Christian Geddes <crgeddes@us.ibm.com>
+/// *HWP Team : IO
+/// *HWP Level : 3
+/// *HWP Consumed by : HB
+///-----------------------------------------------------------------------------
+///
+/// @verbatim
+/// High-level procedure flow:
+///
+/// This procedure will provide a way to save and restore OBUS and PB fir masks that
+/// have to do with OBUS peer targets. During the IPL Hostboot will not know about other
+/// OBUS peers so we must mask off OBUS peer related firs until HBRT when Hostboot is
+/// aware of the OBUS peer targets.
+///
+/// Procedure Prereq:
+/// - PB and OBUS scom init is called prior to saving off fir masks
+/// - The save command is called prior to the restore command
+///
+/// @endverbatim
+///----------------------------------------------------------------------------
+
+//------------------------------------------------------------------------------
+// Defines
+//------------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Includes
+//-----------------------------------------------------------------------------
+#include <p9_io_obus_firmask_save_restore.H>
+#include <p9_obus_scom_addresses.H>
+#include <p9_obus_scom_addresses_fld.H>
+#include <p9_misc_scom_addresses.H>
+#include <p9_misc_scom_addresses_fld.H>
+#include <fapi2.H>
+
+// Firs to save and restore
+// 0x5013803 = PBIOOFIR MASK
+// Bits Masked on Save :
+// PARSER00_ATTN_MASK:28
+// PARSER01_ATTN_MASK:29
+// PARSER02_ATTN_MASK:30
+// PARSER03_ATTN_MASK:31
+// PARSER04_ATTN_MASK:32
+// PARSER05_ATTN_MASK:33
+// PARSER06_ATTN_MASK:34
+// PARSER07_ATTN_MASK:35
+// DOB01_ERR_MASK:52
+// DOB23_ERR_MASK:53
+// DOB45_ERR_MASK:54
+// DOB67_ERR_MASK:55
+// DIB01_ERR_MASK:56
+// DIB23_ERR_MASK:57
+// DIB45_ERR_MASK:58
+// DIB67_ERR_MASK:59
+// 0x9010803 = IOOLFIR MASK ( obus 0)
+// 0xA010803 = IOOLFIR MASK ( obus 1)
+// 0xB010803 = IOOLFIR MASK ( obus 2)
+// 0xC010803 = IOOLFIR MASK ( obus 3)
+// Bits Potentially Masked on Save :
+// FIR_LINK0_NO_SPARE_MASK:42
+// FIR_LINK1_NO_SPARE_MASK:43
+// FIR_LINK0_SPARE_DONE_MASK:44
+// FIR_LINK1_SPARE_DONE_MASK:45
+// FIR_LINK0_TOO_MANY_CRC_ERRORS_MASK:46
+// FIR_LINK1_TOO_MANY_CRC_ERRORS_MASK:47
+// FIR_LINK0_CORRECTABLE_ARRAY_ERROR_MASK:52
+// FIR_LINK1_CORRECTABLE_ARRAY_ERROR_MASK:53
+// FIR_LINK0_UNCORRECTABLE_ARRAY_ERROR_MASK:54
+// FIR_LINK1_UNCORRECTABLE_ARRAY_ERROR_MASK:55
+// FIR_LINK0_TRAINING_FAILED_MASK:56
+// FIR_LINK1_TRAINING_FAILED_MASK:57
+// FIR_LINK0_UNRECOVERABLE_ERROR_MASK:58
+// FIR_LINK1_UNRECOVERABLE_ERROR_MASK:59
+
+//-----------------------------------------------------------------------------
+// Definitions
+//-----------------------------------------------------------------------------
+constexpr uint8_t SET_BYTE = 0xFF;
+// LINK_NO_SPARE_MASK Not defined in p9_obus_scom_addresses_fld so must define here
+constexpr uint32_t PB_IOOL_FIR_MASK_REG_FIR_LINK0_NO_SPARE_MASK = 42;
+constexpr uint32_t SET_LENGTH_8 = 8;
+
+/**
+* @brief This function will do getScoms on the firmask regs that are OBUS related and
+* will save off the values read into attributes for later use.
+*
+* @param[in] i_target_chip Processor target we want to save/restore OBUS firmasks for
+* @param[in] i_obus_targets vector the Processor's functional child OBUS targets
+*
+* @retval ReturnCode
+*/
+fapi2::ReturnCode p9_io_obus_firmask_save(const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target_chip,
+ const std::vector<fapi2::Target<fapi2::TARGET_TYPE_OBUS>> i_obus_targets);
+
+/**
+* @brief This function will look up attributes that contain firmask values that we have saved off earlier
+* and write the values to the appropriate firmask registers
+*
+* @param[in] i_target_chip Processor target we want to save/restore OBUS firmasks for
+* @param[in] i_obus_targets vector the Processor's functional child OBUS targets
+*
+* @retval ReturnCode
+*/
+fapi2::ReturnCode p9_io_obus_firmask_restore(const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target_chip,
+ const std::vector<fapi2::Target<fapi2::TARGET_TYPE_OBUS>> i_obus_targets);
+
+
+fapi2::ReturnCode p9_io_obus_firmask_save_restore(const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target_chip,
+ const p9iofirmasksaverestore::OP_TYPE i_op)
+{
+ FAPI_DBG("p9_io_obus_firmask_save_restore: Entering...");
+
+ const auto l_obus_func_vector =
+ i_target_chip.getChildren<fapi2::TARGET_TYPE_OBUS>(fapi2::TARGET_STATE_FUNCTIONAL);
+
+ if(i_op == p9iofirmasksaverestore::SAVE)
+ {
+ // run save method
+ FAPI_TRY(p9_io_obus_firmask_save(i_target_chip, l_obus_func_vector));
+ }
+ else
+ {
+ // run restore method
+ FAPI_TRY(p9_io_obus_firmask_restore(i_target_chip, l_obus_func_vector));
+ }
+
+fapi_try_exit:
+ FAPI_DBG("p9_io_obus_firmask_save_restore: Exiting...");
+ return fapi2::current_err;
+}
+
+fapi2::ReturnCode p9_io_obus_firmask_save(const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target_chip,
+ const std::vector<fapi2::Target<fapi2::TARGET_TYPE_OBUS>> i_obus_targets)
+{
+ FAPI_IMP("p9_io_obus_firmask_save: Entering...");
+
+ fapi2::buffer<uint64_t> l_scomBuffer = 0;
+ fapi2::buffer<uint64_t> l_action0Buffer = 0;
+ fapi2::buffer<uint64_t> l_action1Buffer = 0;
+
+ // First read the PB IOO fir mask register
+ FAPI_TRY(fapi2::getScom(i_target_chip,
+ PU_IOE_PB_IOO_FIR_MASK_REG,
+ l_scomBuffer),
+ "getScom of PU_IOE_PB_IOO_FIR_MASK_REG failed");
+
+ // Save off scom value we read into ATTR_IO_PB_IOOFIR_MASK
+ FAPI_TRY(FAPI_ATTR_SET(fapi2::ATTR_IO_PB_IOOFIR_MASK,
+ i_target_chip,
+ l_scomBuffer),
+ "failed to set attribute ATTR_IO_PB_IOOFIR_MASK");
+
+ // Apply mask required for Hostboot IPL time
+ // Set bits 28-35 (see above for more details)
+ l_scomBuffer.insertFromRight<PU_IOE_PB_IOO_FIR_MASK_REG_PARSER00_ATTN,
+ SET_LENGTH_8>(SET_BYTE);
+ // Set bits 52-59 (see above for more details)
+ l_scomBuffer.insertFromRight<PU_IOE_PB_IOO_FIR_MASK_REG_DOB01_ERR,
+ SET_LENGTH_8>(SET_BYTE);
+
+ // Write modified mask back to scom register
+ FAPI_TRY(fapi2::putScom(i_target_chip,
+ PU_IOE_PB_IOO_FIR_MASK_REG,
+ l_scomBuffer),
+ "putScom of PU_IOE_PB_IOO_FIR_MASK_REG failed");
+
+ // Loop through obus targets and save off IOO LFIR
+ for(const auto& l_obusTarget : i_obus_targets)
+ {
+ // For each obus target read the IOOL FIR mask and store it in
+ // the ATTR_IO_OLLFIR_MASK attribute for later
+ FAPI_TRY(fapi2::getScom(l_obusTarget,
+ OBUS_LL0_LL0_LL0_PB_IOOL_FIR_MASK_REG,
+ l_scomBuffer),
+ "getScom of OBUS_LL0_LL0_LL0_PB_IOOL_FIR_MASK_REG failed");
+
+ FAPI_TRY(FAPI_ATTR_SET(fapi2::ATTR_IO_OLLFIR_MASK,
+ l_obusTarget,
+ l_scomBuffer),
+ "failed to set attribute ATTR_IO_OLLFIR_MASK");
+
+ // For each obus target read the IOOL FIR action registers
+ FAPI_TRY(fapi2::getScom(l_obusTarget,
+ OBUS_LL0_PB_IOOL_FIR_ACTION0_REG,
+ l_action0Buffer),
+ "getScom of OBUS_LL0_LL0_LL0_PB_IOOL_FIR_MASK_REG failed");
+
+ FAPI_TRY(fapi2::getScom(l_obusTarget,
+ OBUS_LL0_PB_IOOL_FIR_ACTION1_REG,
+ l_action1Buffer),
+ "getScom of OBUS_LL0_LL0_LL0_PB_IOOL_FIR_MASK_REG failed");
+
+ // Apply mask required for Hostboot IPL time, we must mask additional
+ // bits during IPL time because Hostboot does not know about OBUS
+ // peer targets yet. When PRD attempts to handle some of these FIRs
+ // it will expect the PEER_TARGET information to be there.
+
+ // Set bits 42-47 if the action register indicate the error as recoverable
+ for(uint64_t i = PB_IOOL_FIR_MASK_REG_FIR_LINK0_NO_SPARE_MASK;
+ i <= OBUS_LL0_LL0_LL0_PB_IOOL_FIR_MASK_REG_LINK1_TOO_MANY_CRC_ERRORS;
+ i++)
+ {
+ if(l_action0Buffer.getBit(i) == 0 &&
+ l_action1Buffer.getBit(i) == 1 )
+ {
+ l_scomBuffer.setBit(i);
+ }
+ }
+
+ // Set bits 52-59 if the action register indicate the error as recoverable
+ for(uint64_t i = OBUS_LL0_LL0_LL0_PB_IOOL_FIR_MASK_REG_LINK0_CORRECTABLE_ARRAY_ERROR;
+ i <= OBUS_LL0_LL0_LL0_PB_IOOL_FIR_MASK_REG_LINK1_TOO_MANY_CRC_ERRORS;
+ i++)
+ {
+ if(l_action0Buffer.getBit(i) == 0 &&
+ l_action1Buffer.getBit(i) == 1 )
+ {
+ l_scomBuffer.setBit(i);
+ }
+ }
+
+ // Write modified mask back to scom register
+ FAPI_TRY(fapi2::putScom(l_obusTarget,
+ OBUS_LL0_LL0_LL0_PB_IOOL_FIR_MASK_REG,
+ l_scomBuffer),
+ "putScom of OBUS_LL0_LL0_LL0_PB_IOOL_FIR_MASK_REG failed");
+ }
+
+fapi_try_exit:
+ FAPI_IMP("p9_io_obus_firmask_restore: Exiting...");
+ return fapi2::current_err;
+}
+
+fapi2::ReturnCode p9_io_obus_firmask_restore(const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target_chip,
+ const std::vector<fapi2::Target<fapi2::TARGET_TYPE_OBUS>> i_obus_targets)
+{
+ FAPI_IMP("p9_io_obus_firmask_restore: Entering...");
+ uint64_t l_restoreValue;
+
+ // Read the value we stored previously
+ FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_IO_PB_IOOFIR_MASK,
+ i_target_chip,
+ l_restoreValue),
+ "failed to get attribute ATTR_IO_PB_IOOFIR_MASK");
+
+ FAPI_ASSERT(l_restoreValue,
+ fapi2::P9_IO_FIRMASK_RESTORE_ERROR().set_TARGET( i_target_chip ),
+ "Attempted to restore PU_IOE_PB_IOO_FIR_MASK_REG but ATTR_IO_PB_IOOFIR_MASK was never set");
+
+ // Write the stored value back to the scom register
+ FAPI_TRY(fapi2::putScom(i_target_chip,
+ PU_IOE_PB_IOO_FIR_MASK_REG,
+ l_restoreValue),
+ "putScom of PU_IOE_PB_IOO_FIR_MASK_REG failed");
+
+ // Loop through obus targets and restore the IOO LFIR value
+ for(const auto& l_obusTarget : i_obus_targets)
+ {
+ // Read the value we stored previously
+ FAPI_TRY(FAPI_ATTR_GET(fapi2::ATTR_IO_OLLFIR_MASK,
+ l_obusTarget,
+ l_restoreValue),
+ "failed to get attribute ATTR_IO_OLLFIR_MASK");
+
+ FAPI_ASSERT(l_restoreValue,
+ fapi2::P9_IO_FIRMASK_RESTORE_ERROR().set_TARGET( l_obusTarget ),
+ "Attempted to restore OBUS_LL0_LL0_LL0_PB_IOOL_FIR_MASK_REG but ATTR_IO_OLLFIR_MASK was never set");
+
+ // Write the stored value back to the scom register
+ FAPI_TRY(fapi2::putScom(l_obusTarget,
+ OBUS_LL0_LL0_LL0_PB_IOOL_FIR_MASK_REG,
+ l_restoreValue),
+ "putScom of OBUS_LL0_LL0_LL0_PB_IOOL_FIR_MASK_REG failed");
+ }
+
+fapi_try_exit:
+ FAPI_IMP("p9_io_obus_firmask_restore: Exiting...");
+ return fapi2::current_err;
+}
diff --git a/src/import/chips/p9/procedures/hwp/io/p9_io_obus_firmask_save_restore.H b/src/import/chips/p9/procedures/hwp/io/p9_io_obus_firmask_save_restore.H
new file mode 100644
index 000000000..8eaf80539
--- /dev/null
+++ b/src/import/chips/p9/procedures/hwp/io/p9_io_obus_firmask_save_restore.H
@@ -0,0 +1,141 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/import/chips/p9/procedures/hwp/io/p9_io_obus_firmask_save_restore.H $ */
+/* */
+/* OpenPOWER HostBoot Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2018 */
+/* [+] 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 */
+/// @file p9_io_obus_firmask_save_restore.H
+/// @brief HWP that will give user ability to save off obus firmask into attribute
+/// and restore them at a later date.
+///
+///-----------------------------------------------------------------------------
+/// *HWP HW Owner : Chris Steffen <cwsteffen@us.ibm.com>
+/// *HWP HW Backup Owner :
+/// *HWP FW Owner : Christian Geddes <crgeddes@us.ibm.com>
+/// *HWP Team : IO
+/// *HWP Level : 3
+/// *HWP Consumed by : HB
+///-----------------------------------------------------------------------------
+
+#ifndef _P9_IO_OBUS_FIRMASK_SAVE_RESTORE_H
+#define _P9_IO_OBUS_FIRMASK_SAVE_RESTORE_H
+
+
+//-----------------------------------------------------------------------------
+// System Header Include
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// fapi2 Includes
+//-----------------------------------------------------------------------------
+#include <fapi2.H>
+
+//-----------------------------------------------------------------------------
+// Definitions
+//-----------------------------------------------------------------------------
+
+namespace p9iofirmasksaverestore
+{
+
+/**
+* @brief Operation Type (Save or Restore)
+*/
+enum OP_TYPE
+{
+ SAVE = 0x0,
+ RESTORE = 0x1,
+};
+
+} // namespace p9iofirmasksaverestore
+
+typedef fapi2::ReturnCode (*p9_io_obus_firmask_save_restore_FP_t)(const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>&,
+ const p9iofirmasksaverestore::OP_TYPE);
+
+extern "C"
+{
+ /**
+ * @brief This hardware procedure takes a processor chip and an OP_TYPE enum in as params.
+ * Depending on what the enum says to do this procedure will either read and store the
+ * values of PU_IOE_PB_IOO_FIR_MASK_REG on the processor and OBUS_LL0_LL0_LL0_PB_IOOL_FIR_MASK_REGs
+ * on all of the PROC's child OBUSes, or it will write those scoms based one what we
+ * have stored away previously.
+ *
+ * This HWP is expected to be called by Hostboot during IPL time with the SAVE OP_TYPE so
+ * that Hostboot can temporarily apply extra masks during IPL time. This scominit for these
+ * registers is done in istep 10.6 (proc_chiplet_scominit) so this HWP need to be called with
+ * the SAVE paramter after istep 10.6. Once we reach runtime HBRT will call this HWP again with
+ * the RESTORE OP_TYPE and the masks will be restored to their initial values. We expect the
+ * HWP to be called with the RESTORE_OP_TYPE during the HBRT initialzation after the target service
+ * has been initialized in HBRT.
+ *
+ * Note: If this HWP is called with the SAVE op then after we read and store the firmasks
+ * into attributes, we will set additional bits in the mask.
+ *
+ * Firs to save and restore
+ * - 0x5013803 = PBIOOFIR MASK
+ * Bits Masked on Save :
+ * PARSER00_ATTN_MASK:28
+ * PARSER01_ATTN_MASK:29
+ * PARSER02_ATTN_MASK:30
+ * PARSER03_ATTN_MASK:31
+ * PARSER04_ATTN_MASK:32
+ * PARSER05_ATTN_MASK:33
+ * PARSER06_ATTN_MASK:34
+ * PARSER07_ATTN_MASK:35
+ * DOB01_ERR_MASK:52
+ * DOB23_ERR_MASK:53
+ * DOB45_ERR_MASK:54
+ * DOB67_ERR_MASK:55
+ * DIB01_ERR_MASK:56
+ * DIB23_ERR_MASK:57
+ * DIB45_ERR_MASK:58
+ * DIB67_ERR_MASK:59
+ * - 0x9010803 = IOOLFIR MASK ( obus 0)
+ * - 0xA010803 = IOOLFIR MASK ( obus 1)
+ * - 0xB010803 = IOOLFIR MASK ( obus 2)
+ * - 0xC010803 = IOOLFIR MASK ( obus 3)
+ * Bits Potentially Masked on Save :
+ * FIR_LINK0_NO_SPARE_MASK:42
+ * FIR_LINK1_NO_SPARE_MASK:43
+ * FIR_LINK0_SPARE_DONE_MASK:44
+ * FIR_LINK1_SPARE_DONE_MASK:45
+ * FIR_LINK0_TOO_MANY_CRC_ERRORS_MASK:46
+ * FIR_LINK1_TOO_MANY_CRC_ERRORS_MASK:47
+ * FIR_LINK0_CORRECTABLE_ARRAY_ERROR_MASK:52
+ * FIR_LINK1_CORRECTABLE_ARRAY_ERROR_MASK:53
+ * FIR_LINK0_UNCORRECTABLE_ARRAY_ERROR_MASK:54
+ * FIR_LINK1_UNCORRECTABLE_ARRAY_ERROR_MASK:55
+ * FIR_LINK0_TRAINING_FAILED_MASK:56
+ * FIR_LINK1_TRAINING_FAILED_MASK:57
+ * FIR_LINK0_UNRECOVERABLE_ERROR_MASK:58
+ * FIR_LINK1_UNRECOVERABLE_ERROR_MASK:59
+ *
+ * @param[in] i_target_chip Processor target we want to save/restore OBUS firmasks for
+ * @param[in] i_op OP_TYPE that caller wishes to be performed (SAVE or RESTORE)
+ *
+ * @retval ReturnCode
+ */
+ fapi2::ReturnCode p9_io_obus_firmask_save_restore(const fapi2::Target<fapi2::TARGET_TYPE_PROC_CHIP>& i_target_chip,
+ const p9iofirmasksaverestore::OP_TYPE i_op);
+} //extern "C"
+
+
+#endif // _P9_IO_OBUS_FIRMASK_SAVE_RESTORE_H
diff --git a/src/import/chips/p9/procedures/xml/attribute_info/p9_io_obus_attributes.xml b/src/import/chips/p9/procedures/xml/attribute_info/p9_io_obus_attributes.xml
index f3467db81..a1f35c62f 100644
--- a/src/import/chips/p9/procedures/xml/attribute_info/p9_io_obus_attributes.xml
+++ b/src/import/chips/p9/procedures/xml/attribute_info/p9_io_obus_attributes.xml
@@ -115,6 +115,40 @@
</attribute>
<!-- ********************************************************************** -->
<attribute>
+ <id>ATTR_IO_OLLFIR_MASK</id>
+ <targetType>TARGET_TYPE_OBUS</targetType>
+ <description>
+ This attribute provides a place for Hostboot to save off the IO_OLLFIR_MASK.
+ During IPL time Hostboot wants to change the value of the FIR but it will
+ write the value back during Hostboot Runtime (HBRT). Hostboot will need to
+ wait to save the values until after p9_chiplet_scominit is called because that
+ HWP sets the fir masks we want to save off. Values will need to restored
+ after the PEER_TARGET values have been updated in HBRT
+ </description>
+ <valueType>uint64</valueType>
+ <initToZero/>
+ <writeable/>
+ <platInit/>
+</attribute>
+<!-- ********************************************************************** -->
+<attribute>
+ <id>ATTR_IO_PB_IOOFIR_MASK</id>
+ <targetType>TARGET_TYPE_PROC_CHIP</targetType>
+ <description>
+ This attribute provides a place for Hostboot to save off the PB_IOOFIR_MASK.
+ During IPL time Hostboot wants to change the value of the FIR but it will
+ write the value back during Hostboot Runtime (HBRT). Hostboot will need to
+ wait to save the values until after p9_chiplet_scominit is called because that
+ HWP sets the fir masks we want to save off. Values will need to restored
+ after the PEER_TARGET values have been updated in HBRT
+ </description>
+ <valueType>uint64</valueType>
+ <initToZero/>
+ <writeable/>
+ <platInit/>
+</attribute>
+<!-- ********************************************************************** -->
+<attribute>
<id>ATTR_IO_O_CHANNEL_TYPE</id>
<targetType>TARGET_TYPE_OBUS</targetType>
<description>
@@ -129,5 +163,4 @@
<platInit/>
</attribute>
<!-- ********************************************************************** -->
-
</attributes>
diff --git a/src/import/chips/p9/procedures/xml/error_info/p9_io_obus_errors.xml b/src/import/chips/p9/procedures/xml/error_info/p9_io_obus_errors.xml
index 19b0b8689..0efba8eeb 100755
--- a/src/import/chips/p9/procedures/xml/error_info/p9_io_obus_errors.xml
+++ b/src/import/chips/p9/procedures/xml/error_info/p9_io_obus_errors.xml
@@ -5,7 +5,7 @@
<!-- -->
<!-- OpenPOWER HostBoot Project -->
<!-- -->
-<!-- Contributors Listed Below - COPYRIGHT 2015,2017 -->
+<!-- Contributors Listed Below - COPYRIGHT 2015,2018 -->
<!-- [+] International Business Machines Corp. -->
<!-- -->
<!-- -->
@@ -53,4 +53,13 @@
</callout>
</hwpError>
<!-- *********************************************************************** -->
+ <hwpError>
+ <rc>RC_P9_IO_FIRMASK_RESTORE_ERROR</rc>
+ <description>Attempted to restore OBUS firmasks when values were never saved</description>
+ <ffdc>TARGET</ffdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>HIGH</priority>
+ </callout>
+ </hwpError>
</hwpErrors>
OpenPOWER on IntegriCloud