summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/ccs/ccs_explorer.C166
-rw-r--r--src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/ccs/ccs_explorer.H53
-rw-r--r--src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/ccs/ccs_traits_explorer.H269
-rw-r--r--src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/mc/exp_port.H2
-rw-r--r--src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/mcbist/exp_mcbist_traits.H7
-rw-r--r--src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/shared/exp_consts.H2
-rw-r--r--src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/shared/exp_defaults.H4
-rw-r--r--src/import/chips/ocmb/explorer/procedures/xml/error_info/mss_exp_errors.xml182
-rw-r--r--src/import/chips/p9/procedures/hwp/memory/lib/ccs/ccs_nimbus.C24
-rw-r--r--src/import/chips/p9/procedures/hwp/memory/lib/ccs/ccs_traits_nimbus.H1
-rw-r--r--src/import/chips/p9/procedures/hwp/memory/lib/dimm/ddr4/pda.H2
-rw-r--r--src/import/chips/p9/procedures/hwp/memory/lib/dimm/rank.H10
-rw-r--r--src/import/chips/p9/procedures/hwp/memory/lib/phy/ddr_phy.C2
-rw-r--r--src/import/chips/p9/procedures/hwp/memory/lib/phy/dp16.C2
-rw-r--r--src/import/chips/p9/procedures/hwp/memory/lib/phy/mss_training.C4
-rw-r--r--src/import/chips/p9/procedures/hwp/memory/lib/shared/mss_const.H3
-rw-r--r--src/import/chips/p9/procedures/hwp/memory/lib/workarounds/ccs_workarounds.C2
-rw-r--r--src/import/chips/p9/procedures/xml/error_info/p9_memory_mss_draminit_training.xml14
-rw-r--r--src/import/generic/memory/lib/ccs/ccs.H31
-rw-r--r--src/import/generic/memory/lib/utils/shared/mss_generic_consts.H1
-rw-r--r--src/import/generic/procedures/xml/error_info/generic_error.xml14
-rwxr-xr-xsrc/import/hwpf/fapi2/tools/parseErrorInfo.pl1
-rw-r--r--src/usr/errldisplay/makefile3
-rwxr-xr-xsrc/usr/fapi2/fapi2.mk2
-rwxr-xr-xsrc/usr/fapi2/platCreateHwpErrParser.pl3
-rw-r--r--src/usr/isteps/mss/makefile3
26 files changed, 750 insertions, 57 deletions
diff --git a/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/ccs/ccs_explorer.C b/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/ccs/ccs_explorer.C
new file mode 100644
index 000000000..26855282e
--- /dev/null
+++ b/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/ccs/ccs_explorer.C
@@ -0,0 +1,166 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/ccs/ccs_explorer.C $ */
+/* */
+/* OpenPOWER HostBoot Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2015,2019 */
+/* [+] 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 ccs_explorer.C
+/// @brief Run and manage the CCS engine
+///
+// *HWP HWP Owner: Matthew Hickman <Matthew.Hickman@ibm.com>
+// *HWP HWP Backup: Stephen Glancy <sglancy@us.ibm.com>
+// *HWP Team: Memory
+// *HWP Level: 3
+// *HWP Consumed by: FSP:HB
+
+#include <fapi2.H>
+
+#include <lib/shared/exp_defaults.H>
+#include <lib/ccs/ccs_traits_explorer.H>
+#include <generic/memory/lib/ccs/ccs.H>
+#include <lib/ccs/ccs_explorer.H>
+#include <lib/utils/mss_exp_conversions.H>
+
+// Generates linkage
+constexpr std::pair<uint64_t, uint64_t> ccsTraits<mss::mc_type::EXPLORER>::CS_N[];
+constexpr std::pair<uint64_t, uint64_t> ccsTraits<mss::mc_type::EXPLORER>::CS_ND[];
+
+namespace mss
+{
+namespace ccs
+{
+
+///
+/// @brief Cleans up from a CCS execution - multiple ports - EXPLORER specialization
+/// @param[in] i_program the vector of instructions
+/// @param[in] i_ports the vector of ports
+/// @return FAPI2_RC_SUCCSS iff ok
+///
+template<>
+fapi2::ReturnCode cleanup_from_execute<fapi2::TARGET_TYPE_MEM_PORT, mss::mc_type::EXPLORER>
+(const ccs::program& i_program,
+ const std::vector< fapi2::Target<fapi2::TARGET_TYPE_MEM_PORT> >& i_ports)
+{
+ return fapi2::FAPI2_RC_SUCCESS;
+}
+
+///
+/// @brief Determine the CCS failure type
+/// @param[in] i_target OCMB target
+/// @param[in] i_type the failure type
+/// @param[in] i_port The port the CCS instruction is training
+/// @return ReturnCode associated with the fail.
+/// @note FFDC is handled here, caller doesn't need to do it
+///
+template<>
+fapi2::ReturnCode fail_type( const fapi2::Target<fapi2::TARGET_TYPE_OCMB_CHIP>& i_target,
+ const uint64_t i_type,
+ const fapi2::Target<fapi2::TARGET_TYPE_MEM_PORT>& i_port )
+{
+ typedef ccsTraits<mss::mc_type::EXPLORER> TT;
+
+ // Including the PORT_TARGET here and below at CAL_TIMEOUT since these problems likely lie at the MCA level
+ // So we disable the PORT and hopefully that's it
+ // If the problem lies with the MCBIST, it'll just have to loop
+ FAPI_ASSERT(TT::STAT_READ_MISCOMPARE != i_type,
+ fapi2::MSS_EXP_CCS_READ_MISCOMPARE()
+ .set_MC_TARGET(i_target)
+ .set_FAIL_TYPE(i_type)
+ .set_PORT_TARGET(i_port),
+ "%s CCS FAIL Read Miscompare", mss::c_str(i_port));
+
+ // This error is likely due to a bad CCS engine/ MCBIST
+ FAPI_ASSERT(TT::STAT_UE_SUE != i_type,
+ fapi2::MSS_EXP_CCS_UE_SUE()
+ .set_FAIL_TYPE(i_type)
+ .set_MC_TARGET(i_target),
+ "%s CCS FAIL UE or SUE Error", mss::c_str(i_target));
+
+ // Problem with the CCS engine
+ FAPI_ASSERT(TT::STAT_HUNG != i_type,
+ fapi2::MSS_EXP_CCS_HUNG().set_MC_TARGET(i_target),
+ "%s CCS appears hung", mss::c_str(i_target));
+fapi_try_exit:
+ // Due to the PRD update, we need to check for FIR's
+ // If any FIR's have lit up, this CCS fail could have been caused by the FIR
+ // So, let PRD retrigger this step to see if we can resolve the issue
+ return mss::check::fir_or_pll_fail<mss::mc_type::EXPLORER>(i_target, fapi2::current_err);
+}
+
+///
+/// @brief EXP specialization for modeq_copy_cke_to_spare_cke
+/// @param[in] fapi2::Target<TARGET_TYPE_OCMB_CHIP>& the target to effect
+/// @param[in,out] the buffer representing the mode register
+/// @param[in] mss::states - mss::ON iff Copy CKE signals to CKE Spare on both ports
+/// @note no-op for p9n
+///
+template<>
+void copy_cke_to_spare_cke<fapi2::TARGET_TYPE_OCMB_CHIP>( const fapi2::Target<fapi2::TARGET_TYPE_OCMB_CHIP>&,
+ fapi2::buffer<uint64_t>&, states )
+{
+ return;
+}
+
+///
+/// @brief Updates the initial delays based upon the total delays passed in - EXP specialization
+/// @param[in] i_target the target type on which to operate
+/// @param[in] i_delay the calculated delays from CCS
+/// @param[in,out] io_program the program for which to update the delays
+/// @return FAPI2_RC_SUCCSS iff ok
+///
+template<>
+fapi2::ReturnCode update_initial_delays<fapi2::TARGET_TYPE_OCMB_CHIP, mss::mc_type::EXPLORER>
+( const fapi2::Target<fapi2::TARGET_TYPE_OCMB_CHIP>& i_target,
+ const uint64_t i_delay,
+ ccs::program& io_program)
+{
+ // Check our program for any delays. If there isn't a iv_initial_delay configured, then
+ // we use the delay we just summed from the instructions.
+ if (io_program.iv_poll.iv_initial_delay == 0)
+ {
+ io_program.iv_poll.iv_initial_delay = cycles_to_ns(i_target, i_delay);
+ }
+
+ if (io_program.iv_poll.iv_initial_sim_delay == 0)
+ {
+ io_program.iv_poll.iv_initial_sim_delay = cycles_to_simcycles(i_delay);
+ }
+
+ return fapi2::FAPI2_RC_SUCCESS;
+}
+
+///
+/// @brief Select the port(s) to be used by the CCS - EXPLORER specialization
+/// @param[in] i_target the target to effect
+/// @param[in] i_ports the buffer representing the ports
+///
+template<>
+fapi2::ReturnCode select_ports<mss::mc_type::EXPLORER>( const fapi2::Target<fapi2::TARGET_TYPE_OCMB_CHIP>& i_target,
+ uint64_t i_ports)
+{
+ // No broadcast mode, only one port, so no port selection
+ return fapi2::FAPI2_RC_SUCCESS;
+}
+
+} // namespace ccs
+} // namespace mss
diff --git a/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/ccs/ccs_explorer.H b/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/ccs/ccs_explorer.H
new file mode 100644
index 000000000..e02292508
--- /dev/null
+++ b/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/ccs/ccs_explorer.H
@@ -0,0 +1,53 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/ccs/ccs_explorer.H $ */
+/* */
+/* OpenPOWER HostBoot Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2015,2019 */
+/* [+] 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 ccs_explorer.H
+/// @brief Run and manage the CCS engine
+///
+// *HWP HWP Owner: Matthew Hickman <Matthew.Hickman@ibm.com>
+// *HWP HWP Backup: Stephen Glancy <sglancy@us.ibm.com>
+// *HWP Team: Memory
+// *HWP Level: 3
+// *HWP Consumed by: FSP:HB
+
+#ifndef _MSS_CCS_EXPLORER_H_
+#define _MSS_CCS_EXPLORER_H_
+
+#include <fapi2.H>
+#include <lib/ccs/ccs_traits_explorer.H>
+#include <generic/memory/lib/ccs/ccs.H>
+
+namespace mss
+{
+namespace ccs
+{
+
+// This file ties the two needed header files together
+
+} // namespace ccs
+} // namespace mss
+
+#endif
diff --git a/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/ccs/ccs_traits_explorer.H b/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/ccs/ccs_traits_explorer.H
new file mode 100644
index 000000000..965b98057
--- /dev/null
+++ b/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/ccs/ccs_traits_explorer.H
@@ -0,0 +1,269 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/ccs/ccs_traits_explorer.H $ */
+/* */
+/* OpenPOWER HostBoot Project */
+/* */
+/* Contributors Listed Below - COPYRIGHT 2015,2019 */
+/* [+] 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 ccs_traits_nimbus.H
+/// @brief Run and manage the CCS engine
+///
+// *HWP HWP Owner: Matthew Hickman <Matthew.Hickman@ibm.com>
+// *HWP HWP Backup: Stephen Glancy <sglancy@us.ibm.com>
+// *HWP Team: Memory
+// *HWP Level: 3
+// *HWP Consumed by: HB:FSP
+
+#ifndef _MSS_CCS_TRAITS_EXP_H_
+#define _MSS_CCS_TRAITS_EXP_H_
+
+#include <fapi2.H>
+#include <explorer_scom_addresses.H>
+#include <explorer_scom_addresses_fld.H>
+#include <lib/shared/exp_consts.H>
+#include <generic/memory/lib/utils/shared/mss_generic_consts.H>
+#include <generic/memory/lib/mss_generic_attribute_getters.H>
+#include <generic/memory/lib/ccs/ccs_traits.H>
+
+///
+/// @class ccsTraits
+/// @brief Explorer CCS Engine traits
+///
+template<>
+class ccsTraits<mss::mc_type::EXPLORER>
+{
+ public:
+ static constexpr fapi2::TargetType PORT_TARGET_TYPE = fapi2::TARGET_TYPE_MEM_PORT;
+ static constexpr uint64_t MODEQ_REG = EXPLR_MCBIST_CCS_MODEQ;
+ static constexpr uint64_t MCB_CNTL_REG = EXPLR_MCBIST_MCB_CNTLQ;
+ static constexpr uint64_t CNTLQ_REG = EXPLR_MCBIST_CCS_CNTLQ;
+ static constexpr uint64_t STATQ_REG = EXPLR_MCBIST_CCS_STATQ;
+
+ static constexpr uint64_t PORTS_PER_MC_TARGET = mss::exp::MAX_PORT_PER_OCMB;
+ static constexpr uint64_t CCS_MAX_DIMM_PER_PORT = mss::exp::MAX_DIMM_PER_PORT;
+ static constexpr uint64_t CCS_MAX_MRANK_PER_PORT = mss::exp::MAX_MRANK_PER_PORT;
+ static constexpr uint64_t CCS_MAX_RANK_PER_DIMM = mss::exp::MAX_RANK_PER_DIMM;
+ static constexpr uint64_t CCS_MAX_RANKS_DIMM1 = mss::exp::MAX_RANKS_DIMM1;
+
+ static constexpr uint64_t NTTM_READ_DELAY = 0x40;
+ static constexpr uint64_t NTTM_MODE_FORCE_READ = 33;
+
+
+ // Command Pass Disable Delay Time for Explorer - really a JEDEC timing
+ static constexpr uint64_t TIMING_TCPDED = 4;
+
+ enum
+ {
+ // Non address values that are needed for helper functions
+
+ // ODT values used for beautification
+ // Attribute locations
+ ATTR_ODT_DIMM0_R0 = 0,
+ ATTR_ODT_DIMM0_R1 = 1,
+ ATTR_ODT_DIMM1_R0 = 4,
+ ATTR_ODT_DIMM1_R1 = 5,
+
+ // Right justified output - makes it so we can use insertFromRight
+ CCS_ODT_DIMM0_R0 = 4,
+ CCS_ODT_DIMM0_R1 = 5,
+ CCS_ODT_DIMM1_R0 = 6,
+ CCS_ODT_DIMM1_R1 = 7,
+
+ // Default ODT cycle length is 5 - one for the preamble and 4 for the data
+ DEFAULT_ODT_CYCLE_LEN = 5,
+
+ // CCS MODEQ
+ STOP_ON_ERR = EXPLR_MCBIST_CCS_MODEQ_STOP_ON_ERR,
+ UE_DISABLE = EXPLR_MCBIST_CCS_MODEQ_UE_DISABLE,
+ DATA_COMPARE_BURST_SEL = EXPLR_MCBIST_CCS_MODEQ_DATA_COMPARE_BURST_SEL,
+ DATA_COMPARE_BURST_SEL_LEN = EXPLR_MCBIST_CCS_MODEQ_DATA_COMPARE_BURST_SEL_LEN,
+ DDR_CAL_TIMEOUT_CNT = EXPLR_MCBIST_CCS_MODEQ_DDR_CAL_TIMEOUT_CNT,
+ DDR_CAL_TIMEOUT_CNT_LEN = EXPLR_MCBIST_CCS_MODEQ_DDR_CAL_TIMEOUT_CNT_LEN,
+ CFG_PARITY_AFTER_CMD = EXPLR_MCBIST_CCS_MODEQ_CFG_PARITY_AFTER_CMD,
+ COPY_CKE_TO_SPARE_CKE = EXPLR_MCBIST_CCS_MODEQ_COPY_CKE_TO_SPARE_CKE,
+ DISABLE_ECC_ARRAY_CHK = EXPLR_MCBIST_CCS_MODEQ_DISABLE_ECC_ARRAY_CHK,
+ DISABLE_ECC_ARRAY_CORRECTION = EXPLR_MCBIST_CCS_MODEQ_DISABLE_ECC_ARRAY_CORRECTION,
+ CFG_DGEN_FIXED_MODE = EXPLR_MCBIST_CCS_MODEQ_CFG_DGEN_FIXED_MODE,
+ DDR_CAL_TIMEOUT_CNT_MULT = EXPLR_MCBIST_CCS_MODEQ_DDR_CAL_TIMEOUT_CNT_MULT,
+ DDR_CAL_TIMEOUT_CNT_MULT_LEN = EXPLR_MCBIST_CCS_MODEQ_DDR_CAL_TIMEOUT_CNT_MULT_LEN,
+ IDLE_PAT_ADDRESS_0_13 = EXPLR_MCBIST_CCS_MODEQ_IDLE_PAT_ADDRESS_0_13,
+ IDLE_PAT_ADDRESS_0_13_LEN = EXPLR_MCBIST_CCS_MODEQ_IDLE_PAT_ADDRESS_0_13_LEN,
+ IDLE_PAT_ADDRESS_17 = EXPLR_MCBIST_CCS_MODEQ_IDLE_PAT_ADDRESS_17,
+ IDLE_PAT_BANK_GROUP_1 = EXPLR_MCBIST_CCS_MODEQ_IDLE_PAT_BANK_GROUP_1,
+ IDLE_PAT_BANK_0_1 = EXPLR_MCBIST_CCS_MODEQ_IDLE_PAT_BANK_0_1,
+ IDLE_PAT_BANK_0_1_LEN = EXPLR_MCBIST_CCS_MODEQ_IDLE_PAT_BANK_0_1_LEN,
+ IDLE_PAT_BANK_GROUP_0 = EXPLR_MCBIST_CCS_MODEQ_IDLE_PAT_BANK_GROUP_0,
+ IDLE_PAT_ACTN = EXPLR_MCBIST_CCS_MODEQ_IDLE_PAT_ACTN,
+ IDLE_PAT_ADDRESS_16 = EXPLR_MCBIST_CCS_MODEQ_IDLE_PAT_ADDRESS_16,
+ IDLE_PAT_ADDRESS_15 = EXPLR_MCBIST_CCS_MODEQ_IDLE_PAT_ADDRESS_15,
+ IDLE_PAT_ADDRESS_14 = EXPLR_MCBIST_CCS_MODEQ_IDLE_PAT_ADDRESS_14,
+ NTTM_MODE = EXPLR_MCBIST_CCS_MODEQ_NTTM_MODE,
+ NTTM_RW_DATA_DLY = EXPLR_MCBIST_CCS_MODEQ_NTTM_RW_DATA_DLY,
+ NTTM_RW_DATA_DLY_LEN = EXPLR_MCBIST_CCS_MODEQ_NTTM_RW_DATA_DLY_LEN,
+ IDLE_PAT_BANK_2 = EXPLR_MCBIST_CCS_MODEQ_IDLE_PAT_BANK_2,
+ DDR_PARITY_ENABLE = EXPLR_MCBIST_CCS_MODEQ_DDR_PARITY_ENABLE,
+ IDLE_PAT_PARITY = EXPLR_MCBIST_CCS_MODEQ_IDLE_PAT_PARITY,
+
+ // CCS CNTL
+ CCS_START = EXPLR_MCBIST_CCS_CNTLQ_START,
+ CCS_STOP = EXPLR_MCBIST_CCS_CNTLQ_STOP,
+
+ // CCS STATQ
+ CCS_IN_PROGRESS = EXPLR_MCBIST_CCS_STATQ_IP,
+
+ // ARR0
+ ARR0_DDR_ADDRESS_0_13 = EXPLR_MCBIST_CCS_INST_ARR0_00_DDR_ADDRESS_0_13,
+ ARR0_DDR_ADDRESS_0_13_LEN = EXPLR_MCBIST_CCS_INST_ARR0_00_DDR_ADDRESS_0_13_LEN,
+ ARR0_DDR_ADDRESS_0_9 = EXPLR_MCBIST_CCS_INST_ARR0_00_DDR_ADDRESS_0_13, // Useful for rd/wr cmds
+ ARR0_DDR_ADDRESS_0_9_LEN = 10, // CA bits are 9:0, total length of 10
+ ARR0_DDR_ADDRESS_10 = 10, // ADR10 is the 10th bit from the left in Nimbus ARR0
+ ARR0_DDR_ADDRESS_17 = EXPLR_MCBIST_CCS_INST_ARR0_00_DDR_ADDRESS_17,
+ ARR0_DDR_BANK_GROUP_1 = EXPLR_MCBIST_CCS_INST_ARR0_00_DDR_BANK_GROUP_1,
+ ARR0_DDR_RESETN = EXPLR_MCBIST_CCS_INST_ARR0_00_DDR_RESETN,
+ ARR0_DDR_BANK_0_1 = EXPLR_MCBIST_CCS_INST_ARR0_00_DDR_BANK_0_1,
+ ARR0_DDR_BANK_0_1_LEN = EXPLR_MCBIST_CCS_INST_ARR0_00_DDR_BANK_0_1_LEN,
+ ARR0_DDR_BANK_GROUP_0 = EXPLR_MCBIST_CCS_INST_ARR0_00_DDR_BANK_GROUP_0,
+ ARR0_DDR_ACTN = EXPLR_MCBIST_CCS_INST_ARR0_00_DDR_ACTN,
+ ARR0_DDR_ADDRESS_16 = EXPLR_MCBIST_CCS_INST_ARR0_00_DDR_ADDRESS_16,
+ ARR0_DDR_ADDRESS_15 = EXPLR_MCBIST_CCS_INST_ARR0_00_DDR_ADDRESS_15,
+ ARR0_DDR_ADDRESS_14 = EXPLR_MCBIST_CCS_INST_ARR0_00_DDR_ADDRESS_14,
+ ARR0_DDR_CKE = EXPLR_MCBIST_CCS_INST_ARR0_00_DDR_CKE,
+ ARR0_DDR_CKE_LEN = EXPLR_MCBIST_CCS_INST_ARR0_00_DDR_CKE_LEN,
+ ARR0_DDR_CSN_0_1 = EXPLR_MCBIST_CCS_INST_ARR0_00_DDR_CSN_0_1,
+ ARR0_DDR_CSN_0_1_LEN = EXPLR_MCBIST_CCS_INST_ARR0_00_DDR_CSN_0_1_LEN,
+ ARR0_DDR_CID_0_1 = EXPLR_MCBIST_CCS_INST_ARR0_00_DDR_CID_0_1,
+ ARR0_DDR_CID_0_1_LEN = EXPLR_MCBIST_CCS_INST_ARR0_00_DDR_CID_0_1_LEN,
+ ARR0_DDR_CSN_2_3 = EXPLR_MCBIST_CCS_INST_ARR0_00_DDR_CSN_2_3,
+ ARR0_DDR_CSN_2_3_LEN = EXPLR_MCBIST_CCS_INST_ARR0_00_DDR_CSN_2_3_LEN,
+ ARR0_DDR_CID_2 = EXPLR_MCBIST_CCS_INST_ARR0_00_DDR_CID_2,
+ ARR0_DDR_ODT = EXPLR_MCBIST_CCS_INST_ARR0_00_DDR_ODT,
+ ARR0_DDR_ODT_LEN = EXPLR_MCBIST_CCS_INST_ARR0_00_DDR_ODT_LEN,
+ ARR0_DDR_CAL_TYPE = EXPLR_MCBIST_CCS_INST_ARR0_00_DDR_CAL_TYPE,
+ ARR0_DDR_CAL_TYPE_LEN = EXPLR_MCBIST_CCS_INST_ARR0_00_DDR_CAL_TYPE_LEN,
+ ARR0_DDR_PARITY = EXPLR_MCBIST_CCS_INST_ARR0_00_DDR_PARITY,
+ ARR0_DDR_BANK_2 = EXPLR_MCBIST_CCS_INST_ARR0_00_DDR_BANK_2,
+ ARR0_LOOP_BREAK_MODE = EXPLR_MCBIST_CCS_INST_ARR0_00_LOOP_BREAK_MODE,
+ ARR0_LOOP_BREAK_MODE_LEN = EXPLR_MCBIST_CCS_INST_ARR0_00_LOOP_BREAK_MODE_LEN,
+
+ // ARR1
+ ARR1_IDLES = EXPLR_MCBIST_CCS_INST_ARR1_00_IDLES,
+ ARR1_IDLES_LEN = EXPLR_MCBIST_CCS_INST_ARR1_00_IDLES_LEN,
+ ARR1_REPEAT_CMD_CNT = EXPLR_MCBIST_CCS_INST_ARR1_00_REPEAT_CMD_CNT,
+ ARR1_REPEAT_CMD_CNT_LEN = EXPLR_MCBIST_CCS_INST_ARR1_00_REPEAT_CMD_CNT_LEN,
+ ARR1_READ_OR_WRITE_DATA = EXPLR_MCBIST_CCS_INST_ARR1_00_READ_OR_WRITE_DATA,
+ ARR1_READ_OR_WRITE_DATA_LEN = EXPLR_MCBIST_CCS_INST_ARR1_00_READ_OR_WRITE_DATA_LEN,
+ ARR1_READ_COMPARE_REQUIRED = EXPLR_MCBIST_CCS_INST_ARR1_00_READ_COMPARE_REQUIRED,
+ ARR1_DDR_CAL_RANK = EXPLR_MCBIST_CCS_INST_ARR1_00_DDR_CAL_RANK,
+ ARR1_DDR_CAL_RANK_LEN = EXPLR_MCBIST_CCS_INST_ARR1_00_DDR_CAL_RANK_LEN,
+ ARR1_DDR_CALIBRATION_ENABLE = EXPLR_MCBIST_CCS_INST_ARR1_00_DDR_CALIBRATION_ENABLE,
+ ARR1_END = EXPLR_MCBIST_CCS_INST_ARR1_00_END,
+ ARR1_GOTO_CMD = EXPLR_MCBIST_CCS_INST_ARR1_00_GOTO_CMD,
+ ARR1_GOTO_CMD_LEN = EXPLR_MCBIST_CCS_INST_ARR1_00_GOTO_CMD_LEN,
+
+ // CCS array constants
+ CCS_ARRAY_LEN = 32,
+ CCS_ARR0_START = EXPLR_MCBIST_CCS_INST_ARR0_00,
+ CCS_ARR1_START = EXPLR_MCBIST_CCS_INST_ARR1_00,
+ };
+
+ ///
+ /// @brief Enums for CCS return codes
+ ///
+ enum
+ {
+ // Success is defined as done-bit set, no others.
+ STAT_QUERY_SUCCESS = 0x4000000000000000,
+
+ // Bit positions 3:5
+ STAT_ERR_MASK = 0x1800000000000000,
+ STAT_READ_MISCOMPARE = 0x1000000000000000,
+ STAT_UE_SUE = 0x0800000000000000,
+
+ // If the fail type isn't one of these, we're hung
+ STAT_HUNG = 0x0ull,
+ };
+
+
+ // CSN Regular Settings
+ static constexpr std::pair<uint64_t, uint64_t> CS_N[mss::MAX_RANK_PER_DIMM] =
+ {
+ // CS0 L, CS1 H, CID0-> L => Rank 0
+ { 0b01, 0b00 },
+
+ // CS0 L, CS1 H, CID0-> H => Rank 1
+ { 0b01, 0b11 },
+
+ // CS0 H, CS1 L, CID0-> L => Rank 2
+ { 0b10, 0b00 },
+
+ // CS0 H, CS1 L, CID0-> H => Rank 3
+ { 0b10, 0b11 },
+ };
+
+
+ // CSN Setup for Dual Direct Mode
+ // For DIMM0 .first is the CSN_0_1 setting, .second is the CSN_2_3 setting.
+ // For DIMM1 .first is the CSN_2_3 setting, .second is the CSN_0_1 setting.
+ static constexpr std::pair<uint64_t, uint64_t> CS_ND[mss::MAX_RANK_PER_DIMM] =
+ {
+ // CS0 L CS1 H => CS2 => H CS3 => H Rank 0
+ { 0b01, 0b11 },
+
+ // CS0 H CS1 L => CS2 => H CS3 => H Rank 1
+ { 0b10, 0b11 },
+
+ // CS0 H CS1 H => CS2 => L CS3 => H Rank 2
+ { 0b11, 0b01 },
+
+ // CS0 H CS1 H => CS2 => H CS3 => L Rank 3
+ { 0b11, 0b10 },
+ };
+
+ ///
+ /// @brief Gets the attribute for checking our rank configuration
+ /// @param[in] i_target the port target on which to operate
+ /// @param[out] o_ranks the rank data
+ /// @return SUCCESS iff the code executes successfully
+ ///
+ static fapi2::ReturnCode get_rank_config_attr(const fapi2::Target<fapi2::TARGET_TYPE_MEM_PORT>& i_target,
+ uint8_t (&o_array)[2])
+ {
+ return mss::attr::get_num_master_ranks_per_dimm(i_target, o_array);
+ }
+
+ ///
+ /// @brief Gets the attribute for checking our rank configuration
+ /// @param[in] i_target the port target on which to operate
+ /// @param[out] o_ranks the rank data
+ /// @return The fully setup nimbus error
+ ///
+ static fapi2::EXP_CCS_HUNG_TRYING_TO_STOP setup_trying_to_stop_err(const fapi2::Target<fapi2::TARGET_TYPE_OCMB_CHIP>&
+ i_target)
+ {
+ return fapi2::EXP_CCS_HUNG_TRYING_TO_STOP().set_MC_TARGET(i_target);
+ }
+
+ // Lab values
+ static constexpr uint64_t LAB_MRS_CMD = 0x000008F000000000;
+};
+
+#endif
diff --git a/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/mc/exp_port.H b/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/mc/exp_port.H
index efbec9b09..cf990c94d 100644
--- a/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/mc/exp_port.H
+++ b/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/mc/exp_port.H
@@ -102,9 +102,11 @@ class portTraits< mss::mc_type::EXPLORER >
DFI_INIT_START = EXPLR_SRQ_MBA_FARB0Q_CFG_MISR_FEEDBACK_ENABLE,
RCD_RECOVERY_DISABLE = EXPLR_SRQ_MBA_FARB0Q_CFG_DISABLE_RCD_RECOVERY,
+ RECR_ENABLE_UE_NOISE_WINDOW = EXPLR_RDF_RECR_MBSECCQ_ENABLE_UE_NOISE_WINDOW,
RECR_TCE_CORRECTION = EXPLR_RDF_RECR_MBSECCQ_ENABLE_TCE_CORRECTION,
RECR_MBSECCQ_DATA_INVERSION = EXPLR_RDF_RECR_MBSECCQ_DATA_INVERSION,
RECR_MBSECCQ_DATA_INVERSION_LEN = EXPLR_RDF_RECR_MBSECCQ_DATA_INVERSION_LEN,
+
DSM0Q_RDTAG_DLY = EXPLR_SRQ_MBA_DSM0Q_CFG_RDTAG_DLY,
DSM0Q_RDTAG_DLY_LEN = EXPLR_SRQ_MBA_DSM0Q_CFG_RDTAG_DLY_LEN,
DSM0Q_WRDONE_DLY = EXPLR_SRQ_MBA_DSM0Q_CFG_WRDONE_DLY,
diff --git a/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/mcbist/exp_mcbist_traits.H b/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/mcbist/exp_mcbist_traits.H
index 7a56d4cc6..70830f58f 100644
--- a/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/mcbist/exp_mcbist_traits.H
+++ b/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/mcbist/exp_mcbist_traits.H
@@ -126,6 +126,13 @@ class mcbistTraits< mss::mc_type::EXPLORER, fapi2::TARGET_TYPE_OCMB_CHIP>
// All of the pattern registers are calculated off of this base
static constexpr uint64_t PATTERN0_REG = EXPLR_MCBIST_MCBFD0Q;
+ static constexpr uint64_t PATTERN1_REG = EXPLR_MCBIST_MCBFD1Q;
+ static constexpr uint64_t PATTERN2_REG = EXPLR_MCBIST_MCBFD2Q;
+ static constexpr uint64_t PATTERN3_REG = EXPLR_MCBIST_MCBFD3Q;
+ static constexpr uint64_t PATTERN4_REG = EXPLR_MCBIST_MCBFD4Q;
+ static constexpr uint64_t PATTERN5_REG = EXPLR_MCBIST_MCBFD5Q;
+ static constexpr uint64_t PATTERN6_REG = EXPLR_MCBIST_MCBFD6Q;
+ static constexpr uint64_t PATTERN7_REG = EXPLR_MCBIST_MCBFD7Q;
static constexpr uint64_t DATA_ROTATE_CNFG_REG = EXPLR_MCBIST_MCBDRCRQ;
static constexpr uint64_t DATA_ROTATE_SEED_REG = EXPLR_MCBIST_MCBDRSRQ;
diff --git a/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/shared/exp_consts.H b/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/shared/exp_consts.H
index 4d7a7d4cc..0678d94af 100644
--- a/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/shared/exp_consts.H
+++ b/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/shared/exp_consts.H
@@ -122,6 +122,8 @@ enum sizes
MAX_DIMM_PER_PORT = 2,
MAX_RANK_PER_DIMM = 4,
MAX_BITS_PER_PORT = 80,
+ MAX_RANKS_DIMM1 = 2,
+ MAX_MRANK_PER_PORT = MAX_DIMM_PER_PORT * MAX_RANK_PER_DIMM,
};
///
diff --git a/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/shared/exp_defaults.H b/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/shared/exp_defaults.H
index 42648c785..d4bfd3387 100644
--- a/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/shared/exp_defaults.H
+++ b/src/import/chips/ocmb/explorer/procedures/hwp/memory/lib/shared/exp_defaults.H
@@ -42,9 +42,9 @@
namespace mss
{
-constexpr fapi2::TargetType DEFAULT_MEM_PORT_TARGET = fapi2::TARGET_TYPE_MEM_PORT;
-
constexpr mss::mc_type DEFAULT_MC_TYPE = mss::mc_type::EXPLORER;
+constexpr fapi2::TargetType DEFAULT_MC_TARGET = fapi2::TARGET_TYPE_OCMB_CHIP;
+constexpr fapi2::TargetType DEFAULT_MEM_PORT_TARGET = fapi2::TARGET_TYPE_MEM_PORT;
} // ns mss
diff --git a/src/import/chips/ocmb/explorer/procedures/xml/error_info/mss_exp_errors.xml b/src/import/chips/ocmb/explorer/procedures/xml/error_info/mss_exp_errors.xml
index 25ca0fbfc..c6a941e2d 100644
--- a/src/import/chips/ocmb/explorer/procedures/xml/error_info/mss_exp_errors.xml
+++ b/src/import/chips/ocmb/explorer/procedures/xml/error_info/mss_exp_errors.xml
@@ -216,4 +216,186 @@
</deconfigure>
</hwpError>
+ <registerFfdc>
+ <id>REG_FFDC_EXP_CCS_FAILURE</id>
+ <scomRegister>EXPLR_MCBIST_CCS_MODEQ</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_STATQ</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_CNTLQ</scomRegister>
+ <scomRegister>EXPLR_MCBIST_MCBMCATQ</scomRegister>
+
+ <!-- Instructions -->
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR0_00</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR0_01</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR0_02</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR0_03</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR0_04</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR0_05</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR0_06</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR0_07</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR0_08</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR0_09</scomRegister>
+
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR0_10</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR0_11</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR0_12</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR0_13</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR0_14</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR0_15</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR0_16</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR0_17</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR0_18</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR0_19</scomRegister>
+
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR0_20</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR0_21</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR0_22</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR0_23</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR0_24</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR0_25</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR0_26</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR0_27</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR0_28</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR0_29</scomRegister>
+
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR0_30</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR0_31</scomRegister>
+
+ <!-- Control array -->
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR1_00</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR1_01</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR1_02</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR1_03</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR1_04</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR1_05</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR1_06</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR1_07</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR1_08</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR1_09</scomRegister>
+
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR1_10</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR1_11</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR1_12</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR1_13</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR1_14</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR1_15</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR1_16</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR1_17</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR1_18</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR1_19</scomRegister>
+
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR1_20</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR1_21</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR1_22</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR1_23</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR1_24</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR1_25</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR1_26</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR1_27</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR1_28</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR1_29</scomRegister>
+
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR1_30</scomRegister>
+ <scomRegister>EXPLR_MCBIST_CCS_INST_ARR1_31</scomRegister>
+
+ <!-- to get the CCS state machine hung state -->
+ <scomRegister>EXPLR_MCBIST_MBA_MCBERRPT0Q</scomRegister>
+ <scomRegister>EXPLR_MCBIST_MBA_MCBERRPT1Q</scomRegister>
+ </registerFfdc>
+
+ <hwpError>
+ <rc>RC_MSS_EXP_CCS_READ_MISCOMPARE</rc>
+ <description>
+ CCS reports a read miscompare.
+ </description>
+ <ffdc>FAIL_TYPE</ffdc>
+ <collectRegisterFfdc>
+ <id>REG_FFDC_EXP_CCS_FAILURE</id>
+ <target>MC_TARGET</target>
+ <targetType>TARGET_TYPE_OCMB_CHIP</targetType>
+ </collectRegisterFfdc>
+ <callout>
+ <target>PORT_TARGET</target>
+ <priority>HIGH</priority>
+ </callout>
+ <deconfigure>
+ <target>PORT_TARGET</target>
+ </deconfigure>
+ <gard>
+ <target>PORT_TARGET</target>
+ </gard>
+ </hwpError>
+
+ <hwpError>
+ <rc>RC_MSS_EXP_CCS_UE_SUE</rc>
+ <description>
+ CCS reports a UE or SUE in the CCS program array
+ Chould be an indicator of corruption in the CCS program
+ </description>
+ <ffdc>FAIL_TYPE</ffdc>
+ <collectRegisterFfdc>
+ <id>REG_FFDC_EXP_CCS_FAILURE</id>
+ <target>MC_TARGET</target>
+ <targetType>TARGET_TYPE_OCMB_CHIP</targetType>
+ </collectRegisterFfdc>
+ <callout>
+ <target>MC_TARGET</target>
+ <priority>HIGH</priority>
+ </callout>
+ <deconfigure>
+ <target>MC_TARGET</target>
+ </deconfigure>
+ <gard>
+ <target>MC_TARGET</target>
+ </gard>
+ </hwpError>
+
+ <hwpError>
+ <rc>RC_MSS_EXP_CCS_HUNG</rc>
+ <description>
+ Software reported that the machine is not seeing the CCS finish in the alloted time
+ </description>
+ <collectRegisterFfdc>
+ <id>REG_FFDC_EXP_CCS_FAILURE</id>
+ <target>MC_TARGET</target>
+ <targetType>TARGET_TYPE_OCMB_CHIP</targetType>
+ </collectRegisterFfdc>
+ <callout>
+ <target>MC_TARGET</target>
+ <priority>HIGH</priority>
+ </callout>
+ <deconfigure>
+ <target>MC_TARGET</target>
+ </deconfigure>
+ <gard>
+ <target>MC_TARGET</target>
+ </gard>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>MEDIUM</priority>
+ </callout>
+ </hwpError>
+
+ <hwpError>
+ <rc>RC_EXP_CCS_HUNG_TRYING_TO_STOP</rc>
+ <description>
+ CCS failed to return from in-progress status while trying to stop a previous program
+ Software reported that CCS did not finish in alloted time after manually triggering stop
+ </description>
+ <collectRegisterFfdc>
+ <id>REG_FFDC_EXP_CCS_FAILURE</id>
+ <target>MC_TARGET</target>
+ <targetType>TARGET_TYPE_OCMB_CHIP</targetType>
+ </collectRegisterFfdc>
+ <callout>
+ <target>MC_TARGET</target>
+ <priority>HIGH</priority>
+ </callout>
+ <deconfigure>
+ <target>MC_TARGET</target>
+ </deconfigure>
+ <gard>
+ <target>MC_TARGET</target>
+ </gard>
+ </hwpError>
+
</hwpErrors>
diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/ccs/ccs_nimbus.C b/src/import/chips/p9/procedures/hwp/memory/lib/ccs/ccs_nimbus.C
index f5a5ba066..d3725beee 100644
--- a/src/import/chips/p9/procedures/hwp/memory/lib/ccs/ccs_nimbus.C
+++ b/src/import/chips/p9/procedures/hwp/memory/lib/ccs/ccs_nimbus.C
@@ -61,6 +61,30 @@ namespace ccs
{
///
+/// @brief Select the port(s) to be used by the CCS - EXPLORER specialization
+/// @param[in] i_target the target to effect
+/// @param[in] i_ports the buffer representing the ports
+///
+template<>
+fapi2::ReturnCode select_ports<mss::mc_type::NIMBUS>( const fapi2::Target<fapi2::TARGET_TYPE_MCBIST>& i_target,
+ uint64_t i_ports)
+{
+ typedef ccsTraits<mss::mc_type::NIMBUS> TT;
+ fapi2::buffer<uint64_t> l_data;
+ fapi2::buffer<uint64_t> l_ports;
+
+ // Not handling multiple ports here, can't do that for CCS. BRS
+ FAPI_TRY( l_ports.setBit(i_ports) );
+
+ FAPI_TRY( mss::getScom(i_target, TT::MCB_CNTL_REG, l_data) );
+ l_data.insert<TT::MCB_CNTL_PORT_SEL, TT::MCB_CNTL_PORT_SEL_LEN>(l_ports);
+ FAPI_TRY( mss::putScom(i_target, TT::MCB_CNTL_REG, l_data) );
+
+fapi_try_exit:
+ return fapi2::current_err;
+}
+
+///
/// @brief Execute a set of CCS instructions - multiple ports - NIMBUS specialization
/// @param[in] i_program the vector of instructions
/// @param[in] i_ports the vector of ports
diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/ccs/ccs_traits_nimbus.H b/src/import/chips/p9/procedures/hwp/memory/lib/ccs/ccs_traits_nimbus.H
index 382fa63fd..c3b93cd5d 100644
--- a/src/import/chips/p9/procedures/hwp/memory/lib/ccs/ccs_traits_nimbus.H
+++ b/src/import/chips/p9/procedures/hwp/memory/lib/ccs/ccs_traits_nimbus.H
@@ -59,6 +59,7 @@ class ccsTraits<mss::mc_type::NIMBUS>
static constexpr uint64_t STATQ_REG = MCBIST_CCS_STATQ;
static constexpr uint64_t PORTS_PER_MC_TARGET = mss::PORTS_PER_MCBIST;
+ static constexpr uint64_t CCS_MAX_DIMM_PER_PORT = mss::MAX_DIMM_PER_PORT;
static constexpr uint64_t CCS_MAX_MRANK_PER_PORT = mss::MAX_MRANK_PER_PORT;
static constexpr uint64_t CCS_MAX_RANK_PER_DIMM = mss::MAX_RANK_PER_DIMM;
static constexpr uint64_t CCS_MAX_RANKS_DIMM1 = mss::MAX_RANKS_DIMM1;
diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/dimm/ddr4/pda.H b/src/import/chips/p9/procedures/hwp/memory/lib/dimm/ddr4/pda.H
index 1eba1a35b..fcad0bf4f 100644
--- a/src/import/chips/p9/procedures/hwp/memory/lib/dimm/ddr4/pda.H
+++ b/src/import/chips/p9/procedures/hwp/memory/lib/dimm/ddr4/pda.H
@@ -317,7 +317,7 @@ class commands
// Check for a valid rank
FAPI_ASSERT(mss::rank::is_rank_on_dimm(i_target, i_rank),
fapi2::MSS_INVALID_RANK().
- set_MCA_TARGET(mss::find_target<fapi2::TARGET_TYPE_MCA>(i_target)).
+ set_PORT_TARGET(mss::find_target<fapi2::TARGET_TYPE_MCA>(i_target)).
set_RANK(i_rank).
set_FUNCTION(mss::ffdc_function_codes::PDA_ADD_COMMAND),
"%s does not have rank %lu", mss::c_str(i_target), i_rank);
diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/dimm/rank.H b/src/import/chips/p9/procedures/hwp/memory/lib/dimm/rank.H
index 86270182e..130697bbb 100644
--- a/src/import/chips/p9/procedures/hwp/memory/lib/dimm/rank.H
+++ b/src/import/chips/p9/procedures/hwp/memory/lib/dimm/rank.H
@@ -1033,7 +1033,7 @@ inline fapi2::ReturnCode set_rank_field( const fapi2::Target<T>& i_target,
FAPI_ASSERT( false,
fapi2::MSS_INVALID_RANK()
.set_RANK(i_rank)
- .set_MCA_TARGET(i_target)
+ .set_PORT_TARGET(i_target)
.set_FUNCTION(SET_RANK_FIELD),
"%s Invalid rank (%d) in set_rank_field",
mss::c_str(i_target),
@@ -1101,7 +1101,7 @@ inline fapi2::ReturnCode get_rank_field( const fapi2::Target<T>& i_target,
FAPI_ASSERT( false,
fapi2::MSS_INVALID_RANK()
.set_RANK(i_rank)
- .set_MCA_TARGET(i_target)
+ .set_PORT_TARGET(i_target)
.set_FUNCTION(GET_RANK_FIELD),
"%s Invalid rank (%d) in get_ranks_in_pair",
mss::c_str(i_target),
@@ -1171,7 +1171,7 @@ inline fapi2::ReturnCode set_pair_valid( const fapi2::Target<T>& i_target,
FAPI_ASSERT( false,
fapi2::MSS_INVALID_RANK()
.set_RANK(i_rank)
- .set_MCA_TARGET(i_target)
+ .set_PORT_TARGET(i_target)
.set_FUNCTION(SET_PAIR_VALID),
"%s Invalid rank (%d) in get_ranks_in_pair",
mss::c_str(i_target),
@@ -1243,7 +1243,7 @@ inline fapi2::ReturnCode get_pair_valid( const fapi2::Target<T> i_target,
FAPI_ASSERT( false,
fapi2::MSS_INVALID_RANK()
.set_RANK(i_rank)
- .set_MCA_TARGET(i_target)
+ .set_PORT_TARGET(i_target)
.set_FUNCTION(GET_PAIR_VALID),
"%s Invalid rank (%d) passed into get get_pair_valid",
mss::c_str(i_target),
@@ -1350,7 +1350,7 @@ fapi2::ReturnCode get_ranks_in_pair( const fapi2::Target<T>& i_target,
FAPI_ASSERT( l_ordinal < MAX_RANK_PER_DIMM,
fapi2::MSS_INVALID_RANK()
.set_RANK(l_ordinal)
- .set_MCA_TARGET(i_target)
+ .set_PORT_TARGET(i_target)
.set_FUNCTION(GET_RANKS_IN_PAIR),
"%s Invalid rank (%d) in set_ranks_in_pair",
mss::c_str(i_target),
diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/phy/ddr_phy.C b/src/import/chips/p9/procedures/hwp/memory/lib/phy/ddr_phy.C
index 40c6ac292..5aba2807e 100644
--- a/src/import/chips/p9/procedures/hwp/memory/lib/phy/ddr_phy.C
+++ b/src/import/chips/p9/procedures/hwp/memory/lib/phy/ddr_phy.C
@@ -1304,7 +1304,7 @@ fapi2::ReturnCode override_odt_wr_config( const fapi2::Target<fapi2::TARGET_TYPE
FAPI_ASSERT( i_rank < MAX_MRANK_PER_PORT,
fapi2::MSS_INVALID_RANK()
.set_RANK(i_rank)
- .set_MCA_TARGET(i_target)
+ .set_PORT_TARGET(i_target)
.set_FUNCTION(OVERRIDE_ODT_WR_CONFIG),
"%s had invalid rank (0x%016lx) passed into override_odt_wr_config",
mss::c_str(i_target),
diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/phy/dp16.C b/src/import/chips/p9/procedures/hwp/memory/lib/phy/dp16.C
index 507f95f86..de647a577 100644
--- a/src/import/chips/p9/procedures/hwp/memory/lib/phy/dp16.C
+++ b/src/import/chips/p9/procedures/hwp/memory/lib/phy/dp16.C
@@ -4626,7 +4626,7 @@ fapi2::ReturnCode check_rp_and_dram( const fapi2::Target<fapi2::TARGET_TYPE_MCA>
// Checks for i_rp in bounds
FAPI_ASSERT(i_rp < MAX_RANK_PAIRS,
fapi2::MSS_INVALID_RANK().
- set_MCA_TARGET(i_target).
+ set_PORT_TARGET(i_target).
set_RANK(i_rp).
set_FUNCTION(i_function),
"%s rank pair is out of bounds %lu", mss::c_str(i_target), i_rp);
diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/phy/mss_training.C b/src/import/chips/p9/procedures/hwp/memory/lib/phy/mss_training.C
index 7501a0884..a7e638093 100644
--- a/src/import/chips/p9/procedures/hwp/memory/lib/phy/mss_training.C
+++ b/src/import/chips/p9/procedures/hwp/memory/lib/phy/mss_training.C
@@ -660,14 +660,14 @@ fapi2::ReturnCode write_ctr::post_workaround( const fapi2::Target<fapi2::TARGET_
// If the rank vector is empty log an error
FAPI_ASSERT(!l_ranks.empty(),
fapi2::MSS_INVALID_RANK().
- set_MCA_TARGET(i_target).
+ set_PORT_TARGET(i_target).
set_RANK(i_rp).
set_FUNCTION(mss::ffdc_function_codes::WR_VREF_TRAINING_WORKAROUND),
"%s rank pair is empty! %lu", mss::c_str(i_target), i_rp);
FAPI_ASSERT(l_ranks[0] != NO_RANK,
fapi2::MSS_INVALID_RANK().
- set_MCA_TARGET(i_target).
+ set_PORT_TARGET(i_target).
set_RANK(NO_RANK).
set_FUNCTION(mss::ffdc_function_codes::WR_VREF_TRAINING_WORKAROUND),
"%s rank pair has no ranks %lu", mss::c_str(i_target), i_rp);
diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/shared/mss_const.H b/src/import/chips/p9/procedures/hwp/memory/lib/shared/mss_const.H
index c36dda47e..4cec1ad77 100644
--- a/src/import/chips/p9/procedures/hwp/memory/lib/shared/mss_const.H
+++ b/src/import/chips/p9/procedures/hwp/memory/lib/shared/mss_const.H
@@ -186,9 +186,6 @@ enum ffdc_function_codes
// LR training function
DWL_CALL_OUT = 130,
MREP_CALL_OUT = 131,
-
-
- CCS_INST_CONFIGURE_RANK = 132,
};
// Static consts describing the bits used in the cal_step_enable attribute
diff --git a/src/import/chips/p9/procedures/hwp/memory/lib/workarounds/ccs_workarounds.C b/src/import/chips/p9/procedures/hwp/memory/lib/workarounds/ccs_workarounds.C
index 9cc041ed6..de136357f 100644
--- a/src/import/chips/p9/procedures/hwp/memory/lib/workarounds/ccs_workarounds.C
+++ b/src/import/chips/p9/procedures/hwp/memory/lib/workarounds/ccs_workarounds.C
@@ -463,7 +463,7 @@ fapi2::ReturnCode execute( const fapi2::Target<fapi2::TARGET_TYPE_MCBIST>& i_tar
// Kick off the CCS engine - per port. No broadcast mode for CCS (per Shelton 9/23/15)
FAPI_INF("executing CCS array for port %d (%s)", mss::relative_pos<fapi2::TARGET_TYPE_MCBIST>(i_port),
mss::c_str(i_port));
- FAPI_TRY( mss::ccs::select_ports( i_target, mss::relative_pos<fapi2::TARGET_TYPE_MCBIST>(i_port)),
+ FAPI_TRY( mss::ccs::select_ports<mss::mc_type::NIMBUS>( i_target, mss::relative_pos<fapi2::TARGET_TYPE_MCBIST>(i_port)),
"Error in ccs execute" );
FAPI_TRY( execute_inst_array(i_target, i_program, i_port), "Error in ccs execute" );
}
diff --git a/src/import/chips/p9/procedures/xml/error_info/p9_memory_mss_draminit_training.xml b/src/import/chips/p9/procedures/xml/error_info/p9_memory_mss_draminit_training.xml
index d7bb833cd..b177f8d18 100644
--- a/src/import/chips/p9/procedures/xml/error_info/p9_memory_mss_draminit_training.xml
+++ b/src/import/chips/p9/procedures/xml/error_info/p9_memory_mss_draminit_training.xml
@@ -658,20 +658,6 @@
</hwpError>
<hwpError>
- <rc>RC_MSS_INVALID_RANK</rc>
- <description>
- Invalid rank passed into function
- </description>
- <ffdc>FUNCTION</ffdc>
- <ffdc>RANK</ffdc>
- <ffdc>MCA_TARGET</ffdc>
- <callout>
- <procedure>CODE</procedure>
- <priority>HIGH</priority>
- </callout>
-</hwpError>
-
-<hwpError>
<rc>RC_MSS_INVALID_RANK_PAIR</rc>
<description>
Invalid rank pair passed into function
diff --git a/src/import/generic/memory/lib/ccs/ccs.H b/src/import/generic/memory/lib/ccs/ccs.H
index aafb0826e..f97c1f885 100644
--- a/src/import/generic/memory/lib/ccs/ccs.H
+++ b/src/import/generic/memory/lib/ccs/ccs.H
@@ -160,9 +160,9 @@ class instruction_t
// First, check rank - we need to make sure that we have a valid rank
FAPI_ASSERT(iv_rank < TT::CCS_MAX_MRANK_PER_PORT,
fapi2::MSS_INVALID_RANK()
- .set_MCA_TARGET(i_target)
+ .set_PORT_TARGET(i_target)
.set_RANK(iv_rank)
- .set_FUNCTION(ffdc_function_codes::CCS_INST_CONFIGURE_RANK),
+ .set_FUNCTION(generic_ffdc_codes::CCS_INST_CONFIGURE_RANK),
"%s rank out of bounds rank%u", mss::c_str(i_target), iv_rank);
// Now the fun happens and we can deal with the actual encoding
@@ -217,9 +217,9 @@ class instruction_t
// So, we pass always if we're DIMM0, or if our DIMM rank is less than the maximum number of DIMM's on rank 1
FAPI_ASSERT(l_dimm_rank < TT::CCS_MAX_RANKS_DIMM1 || l_is_dimm0,
fapi2::MSS_INVALID_RANK()
- .set_MCA_TARGET(i_target)
+ .set_PORT_TARGET(i_target)
.set_RANK(iv_rank)
- .set_FUNCTION(ffdc_function_codes::CCS_INST_CONFIGURE_RANK),
+ .set_FUNCTION(generic_ffdc_codes::CCS_INST_CONFIGURE_RANK),
"%s rank out of bounds rank%u", mss::c_str(i_target), iv_rank);
}
@@ -255,7 +255,7 @@ inline fapi2::ReturnCode get_rank_config(const fapi2::Target<DEFAULT_MEM_PORT_TA
constexpr uint8_t QUAD_RANK_ENABLE = 4;
o_rank_config = rank_configuration::DUAL_DIRECT;
- uint8_t l_num_master_ranks[MAX_DIMM_PER_PORT] = {};
+ uint8_t l_num_master_ranks[TT::CCS_MAX_DIMM_PER_PORT] = {};
FAPI_TRY(TT::get_rank_config_attr(i_target, l_num_master_ranks));
// We only need to check DIMM0
@@ -913,27 +913,14 @@ inline instruction_t refresh_command( const uint64_t i_rank, const uint16_t i_id
///
/// @brief Select the port(s) to be used by the CCS
+/// @tparam MC the memory controller type which executes the CCS instruction
/// @tparam T the target type of the chiplet which executes the CCS instruction
/// @tparam TT the CCS traits of the chiplet which executes the CCS instruction
/// @param[in] i_target the target to effect
/// @param[in] i_ports the buffer representing the ports
///
-template< fapi2::TargetType T, typename TT = ccsTraits<DEFAULT_MC_TYPE> >
-inline fapi2::ReturnCode select_ports( const fapi2::Target<T>& i_target, uint64_t i_ports)
-{
- fapi2::buffer<uint64_t> l_data;
- fapi2::buffer<uint64_t> l_ports;
-
- // Not handling multiple ports here, can't do that for CCS. BRS
- FAPI_TRY( l_ports.setBit(i_ports) );
-
- FAPI_TRY( mss::getScom(i_target, TT::MCB_CNTL_REG, l_data) );
- l_data.insert<TT::MCB_CNTL_PORT_SEL, TT::MCB_CNTL_PORT_SEL_LEN>(l_ports);
- FAPI_TRY( mss::putScom(i_target, TT::MCB_CNTL_REG, l_data) );
-
-fapi_try_exit:
- return fapi2::current_err;
-}
+template< mss::mc_type MC, fapi2::TargetType T, typename TT = ccsTraits<MC> >
+fapi2::ReturnCode select_ports( const fapi2::Target<T>& i_target, uint64_t i_ports);
///
/// @brief User sets to a '1'b to tell the Hdw to stop CCS whenever failure occurs. When a
@@ -1290,7 +1277,7 @@ fapi2::ReturnCode execute( const fapi2::Target<T>& i_target,
FAPI_INF("executing CCS array for port %d (%s)", l_port_index, mss::c_str(p));
- FAPI_TRY( select_ports( i_target, l_port_index), "Error in ccs execute" );
+ FAPI_TRY( select_ports<DEFAULT_MC_TYPE>( i_target, l_port_index), "Error in ccs execute" );
FAPI_TRY( execute_inst_array(i_target, i_program, p), "Error in ccs execute" );
}
}
diff --git a/src/import/generic/memory/lib/utils/shared/mss_generic_consts.H b/src/import/generic/memory/lib/utils/shared/mss_generic_consts.H
index 90c361e94..0599a01c7 100644
--- a/src/import/generic/memory/lib/utils/shared/mss_generic_consts.H
+++ b/src/import/generic/memory/lib/utils/shared/mss_generic_consts.H
@@ -177,6 +177,7 @@ enum generic_ffdc_codes
SET_MRANKS = 0x102A,
SET_HOST_TO_DDR_SPEED_RATIO = 0x102B,
SET_ATTR_HOST_TO_DDR_SPEED_RATIO = 0x102C,
+ CCS_INST_CONFIGURE_RANK = 0x102D,
SET_DIMM_RANKS_CNFG = 0x1039,
DDIMM_RAWCARD_DECODE = 0x103a,
INIT_RANK_INFO = 0x103B,
diff --git a/src/import/generic/procedures/xml/error_info/generic_error.xml b/src/import/generic/procedures/xml/error_info/generic_error.xml
index f09e3de8f..08a7ef84a 100644
--- a/src/import/generic/procedures/xml/error_info/generic_error.xml
+++ b/src/import/generic/procedures/xml/error_info/generic_error.xml
@@ -240,6 +240,20 @@
</hwpError>
<hwpError>
+ <rc>RC_MSS_INVALID_RANK</rc>
+ <description>
+ Invalid rank passed into function
+ </description>
+ <ffdc>FUNCTION</ffdc>
+ <ffdc>RANK</ffdc>
+ <ffdc>PORT_TARGET</ffdc>
+ <callout>
+ <procedure>CODE</procedure>
+ <priority>HIGH</priority>
+ </callout>
+ </hwpError>
+
+ <hwpError>
<rc>RC_MSS_INVALID_TIMING_VALUE</rc>
<description>Invalid value calculated for timing value based on MTB and FTB from SPD.</description>
<ffdc>VALUE</ffdc>
diff --git a/src/import/hwpf/fapi2/tools/parseErrorInfo.pl b/src/import/hwpf/fapi2/tools/parseErrorInfo.pl
index c6044e5b8..782a5a38a 100755
--- a/src/import/hwpf/fapi2/tools/parseErrorInfo.pl
+++ b/src/import/hwpf/fapi2/tools/parseErrorInfo.pl
@@ -513,6 +513,7 @@ print CRFILE "#include <p9_quad_scom_addresses.H>\n";
print CRFILE "#include <p9_xbus_scom_addresses.H>\n";
print CRFILE "#include <cen_gen_scom_addresses.H>\n";
print CRFILE "#include <centaur_misc_constants.H>\n";
+print CRFILE "#include <explorer_scom_addresses.H>\n";
print CRFILE "namespace fapi2\n";
print CRFILE "{\n";
print CRFILE "void getAddressData(const fapi2::HwpFfdcId i_ffdcId,\n";
diff --git a/src/usr/errldisplay/makefile b/src/usr/errldisplay/makefile
index b094bfc63..a2fe4c9e4 100644
--- a/src/usr/errldisplay/makefile
+++ b/src/usr/errldisplay/makefile
@@ -5,7 +5,7 @@
#
# OpenPOWER HostBoot Project
#
-# Contributors Listed Below - COPYRIGHT 2013,2017
+# Contributors Listed Below - COPYRIGHT 2013,2019
# [+] Google Inc.
# [+] International Business Machines Corp.
#
@@ -48,3 +48,4 @@ EXTRAINCDIR += ${GENDIR}/plugins/prdf/
EXTRAINCDIR += ${ROOTPATH}/src/usr/diag/prdf/plugins/
EXTRAINCDIR += ${ROOTPATH}/src/import/chips/p9/common/include/
EXTRAINCDIR += ${ROOTPATH}/src/import/chips/centaur/common/include/
+EXTRAINCDIR += ${ROOTPATH}/src/import/chips/ocmb/explorer/common/include/
diff --git a/src/usr/fapi2/fapi2.mk b/src/usr/fapi2/fapi2.mk
index 5f0d84f07..44220ce07 100755
--- a/src/usr/fapi2/fapi2.mk
+++ b/src/usr/fapi2/fapi2.mk
@@ -59,6 +59,7 @@ EXTRAINCDIR += ${HWP_PATH_2}/hwp/memory/lib/shared/
EXTRAINCDIR += ${HWP_PATH_2}/hwp/memory/lib/utils/
EXTRAINCDIR += ${HWP_PATH_2}/vpd_accessors/
EXTRAINCDIR += ${ROOTPATH}/src/usr/scom/
+EXTRAINCDIR += ${ROOTPATH}/src/import/chips/ocmb/explorer/common/include/
EXTRAINCDIR += ${ROOTPATH}/src/import/chips/common/utils/
include ${ROOTPATH}/src/build/mkrules/verbose.rules.mk
@@ -134,7 +135,6 @@ FAPI2_ERROR_XML += $(wildcard \
FAPI2_ERROR_XML += $(wildcard \
$(ROOTPATH)/src/import/chips/ocmb/common/procedures/xml/error_info/*.xml)
-
# Attribute XML files.
FAPI2_ATTR_XML += $(wildcard \
$(ROOTPATH)/src/import/hwpf/fapi2/xml/attribute_info/*.xml)
diff --git a/src/usr/fapi2/platCreateHwpErrParser.pl b/src/usr/fapi2/platCreateHwpErrParser.pl
index 618459e30..e54f26a13 100755
--- a/src/usr/fapi2/platCreateHwpErrParser.pl
+++ b/src/usr/fapi2/platCreateHwpErrParser.pl
@@ -6,7 +6,7 @@
#
# OpenPOWER HostBoot Project
#
-# Contributors Listed Below - COPYRIGHT 2015,2018
+# Contributors Listed Below - COPYRIGHT 2015,2019
# [+] Google Inc.
# [+] International Business Machines Corp.
#
@@ -225,6 +225,7 @@ print EDISFILE "#include <p9_perv_scom_addresses.H>\n";
print EDISFILE "#include <p9_quad_scom_addresses.H>\n";
print EDISFILE "#include <p9_xbus_scom_addresses.H>\n";
print EDISFILE "#include <cen_gen_scom_addresses.H>\n";
+print EDISFILE "#include <explorer_scom_addresses.H>\n";
print EDISFILE "#include <centaur_misc_constants.H>\n";
print EDISFILE "namespace fapi2\n";
print EDISFILE "{\n\n";
diff --git a/src/usr/isteps/mss/makefile b/src/usr/isteps/mss/makefile
index 854901790..aa5cf933a 100644
--- a/src/usr/isteps/mss/makefile
+++ b/src/usr/isteps/mss/makefile
@@ -85,6 +85,7 @@ MSS_LIB += ${EXPLORER_PROCEDURES_PATH}/hwp/memory/lib/fir/
MSS_LIB += ${EXPLORER_PROCEDURES_PATH}/hwp/memory/lib/mcbist/
MSS_LIB += ${EXPLORER_PROCEDURES_PATH}/hwp/memory/lib/phy/
MSS_LIB += ${EXPLORER_PROCEDURES_PATH}/hwp/memory/lib/ecc/
+MSS_LIB += ${EXPLORER_PROCEDURES_PATH}/hwp/memory/lib/ccs/
MSS_LIB += ${GEMINI_PROCEDURES_PATH}/hwp/memory/
MSS_LIB += ${GEMINI_PROCEDURES_PATH}/hwp/memory/lib/
@@ -186,7 +187,6 @@ endef
$(call BUILD_GENERATED)
-
# Generate pmic_accessors header file
GENERATED = gen_pmic_accessors
COMMAND = gen_accessors.pl
@@ -208,7 +208,6 @@ endef
$(call BUILD_GENERATED)
-
# Add common and generated parts to object list.
MSS_PATH := $(PROCEDURES_PATH)/hwp/memory/lib
OpenPOWER on IntegriCloud