summaryrefslogtreecommitdiffstats
path: root/src/usr/hwpf/hwp/dram_training/mss_draminit/mss_draminit.C
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/hwpf/hwp/dram_training/mss_draminit/mss_draminit.C')
-rwxr-xr-xsrc/usr/hwpf/hwp/dram_training/mss_draminit/mss_draminit.C131
1 files changed, 107 insertions, 24 deletions
diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit/mss_draminit.C b/src/usr/hwpf/hwp/dram_training/mss_draminit/mss_draminit.C
index 3d3ae22d1..08ae5dd40 100755
--- a/src/usr/hwpf/hwp/dram_training/mss_draminit/mss_draminit.C
+++ b/src/usr/hwpf/hwp/dram_training/mss_draminit/mss_draminit.C
@@ -5,7 +5,7 @@
/* */
/* IBM CONFIDENTIAL */
/* */
-/* COPYRIGHT International Business Machines Corp. 2012,2013 */
+/* COPYRIGHT International Business Machines Corp. 2012,2014 */
/* */
/* p1 */
/* */
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: mss_draminit.C,v 1.59 2013/11/11 20:50:06 jdsloat Exp $
+// $Id: mss_draminit.C,v 1.65 2014/04/09 22:47:08 jdsloat Exp $
//------------------------------------------------------------------------------
// Don't forget to create CVS comments when you check in your changes!
//------------------------------------------------------------------------------
@@ -28,6 +28,12 @@
//------------------------------------------------------------------------------
// Version:| Author: | Date: | Comment:
//---------|----------|---------|-----------------------------------------------
+// 1.65 | jdsloat |09-APL-14| Fixed ifdef around #include mss_lrdimm_ddr4_funcs.H
+// 1.64 | jdsloat |01-APL-14| RAS review edits/changes
+// 1.63 | jdsloat |01-APL-14| RAS review edits/changes
+// 1.62 | jdsloat |28-MAR-14| RAS review edits/changes
+// 1.61 | kcook | 03/18/13| Added include mss_lrdimm_ddr4_funcs.H
+// 1.60 | kcook | 03/14/13| Added calls to DDR4 ISDIMM functions.
// 1.59 | jdsloat | 11/11/13| Changed EFF attributes to VPD named attributes
// 1.58 | jdsloat | 10/15/13| Added rc checks in ddr4 shadow regs check per review request
// 1.57 | jdsloat | 10/09/13| Added mrs_load_ddr4 with defines for ddr4 usage, added shadow regs, removed complicated flow
@@ -114,7 +120,9 @@
#include <mss_lrdimm_funcs.H>
#include <mss_ddr4_funcs.H>
-
+#ifdef FAPI_LRDIMM
+#include <mss_lrdimm_ddr4_funcs.H>
+#endif
#ifndef FAPI_LRDIMM
using namespace fapi;
@@ -122,7 +130,7 @@ fapi::ReturnCode mss_lrdimm_rcd_load(Target& i_target, uint32_t port_number, uin
{
ReturnCode rc;
- FAPI_ERR("Invalid exec of LRDIMM function on %s!", i_target.toEcmdString());
+ FAPI_ERR("Invalid exec of mss_lrdimm_rcd_load on %s!", i_target.toEcmdString());
FAPI_SET_HWP_ERROR(rc, RC_MSS_PLACE_HOLDER_ERROR);
return rc;
@@ -131,14 +139,14 @@ ReturnCode mss_lrdimm_mrs_load(Target& i_target, uint32_t i_port_number, uint32_
{
ReturnCode rc;
- FAPI_ERR("Invalid exec of LRDIMM function on %s!", i_target.toEcmdString());
+ FAPI_ERR("Invalid exec of mss_lrdimm_mrs_load function on %s!", i_target.toEcmdString());
FAPI_SET_HWP_ERROR(rc, RC_MSS_PLACE_HOLDER_ERROR);
return rc;
}
#endif
- #ifndef FAPI_DDR4
+#ifndef FAPI_DDR4
using namespace fapi;
fapi::ReturnCode mss_mrs_load_ddr4(Target& i_target, uint32_t port_number, uint32_t& ccs_inst_cnt)
{
@@ -149,6 +157,33 @@ fapi::ReturnCode mss_mrs_load_ddr4(Target& i_target, uint32_t port_number, uint3
return rc;
}
+fapi::ReturnCode mss_rcd_load_ddr4(Target& i_target, uint32_t i_port_number, uint32_t& io_ccs_inst_cnt)
+{
+ ReturnCode rc;
+
+ FAPI_ERR("Invalid exec of rcd_load_ddr4 %s!", i_target.toEcmdString());
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_PLACE_HOLDER_ERROR);
+ return rc;
+
+}
+fapi::ReturnCode mss_lrdimm_ddr4_db_load(Target& i_target, uint32_t i_port_number, uint32_t& io_ccs_inst_cnt)
+{
+ ReturnCode rc;
+
+ FAPI_ERR("Invalid exec of lrdimm_ddr4_db_load %s!", i_target.toEcmdString());
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_PLACE_HOLDER_ERROR);
+ return rc;
+
+}
+fapi::ReturnCode mss_ddr4_invert_mpr_write(Target& i_target)
+{
+ ReturnCode rc;
+
+ FAPI_ERR("Invalid exec of ddr4_invert_mpr_write %s!", i_target.toEcmdString());
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_PLACE_HOLDER_ERROR);
+ return rc;
+
+}
#endif
@@ -339,7 +374,7 @@ ReturnCode mss_draminit_cloned(Target& i_target)
rc_num = rc_num | data_buffer_64.setBit(61);
rc_num = rc_num | data_buffer_64.setBit(62);
rc_num = rc_num | data_buffer_64.setBit(63);
- rc = fapiPutScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_P0_0x8000C0110301143F, data_buffer_64);
+ rc = fapiPutScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_P0_0x8000C0110301143F, data_buffer_64);
if(rc) return rc;
rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_P1_0x8001C0110301143F, data_buffer_64);
@@ -489,7 +524,9 @@ ReturnCode mss_draminit_cloned(Target& i_target)
FAPI_ERR(" assert_resetn Failed rc = 0x%08X (creator = %d)", uint32_t(rc), rc.getCreator());
return rc;
}
+
rc = fapiDelay(DELAY_100US, DELAY_2000SIMCYCLES); // wait 2000 simcycles (in sim mode) OR 100 uS (in hw mode)
+ if(rc) return rc;
rc = mss_assert_resetn(i_target, 1 ); // de-assert a reset
if(rc)
@@ -504,24 +541,46 @@ ReturnCode mss_draminit_cloned(Target& i_target)
if (!((dimm_type == ENUM_ATTR_EFF_DIMM_TYPE_UDIMM)||(dimm_type == ENUM_ATTR_EFF_DIMM_TYPE_CDIMM)))
{
// Step three: Load RCD Control Words
- rc = mss_rcd_load(i_target, port_number, ccs_inst_cnt);
- if(rc)
+ if (dram_gen == ENUM_ATTR_EFF_DRAM_GEN_DDR4)
{
- FAPI_ERR(" rcd_load Failed rc = 0x%08X (creator = %d)", uint32_t(rc), rc.getCreator());
- return rc;
- }
+ rc = mss_rcd_load_ddr4(i_target, port_number, ccs_inst_cnt);
+ if(rc)
+ {
+ FAPI_ERR(" rcd_load Failed rc = 0x%08X (creator = %d)", uint32_t(rc), rc.getCreator());
+ return rc;
+ }
+ if ( dimm_type == ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM )
+ {
+ // Set Data Buffer Function words
+ rc = mss_lrdimm_ddr4_db_load(i_target, port_number, ccs_inst_cnt);
+ if(rc)
+ {
+ FAPI_ERR(" LRDIMM rcd_load Failed rc = 0x%08X (creator = %d)", uint32_t(rc), rc.getCreator());
+ return rc;
+ }
+ }
- if ( dimm_type == ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM )
+ }
+ else
{
- // Set Function 1-13 rcd words
- rc = mss_lrdimm_rcd_load(i_target, port_number, ccs_inst_cnt);
+ rc = mss_rcd_load(i_target, port_number, ccs_inst_cnt);
if(rc)
{
- FAPI_ERR(" LRDIMM rcd_load Failed rc = 0x%08X (creator = %d)", uint32_t(rc), rc.getCreator());
+ FAPI_ERR(" rcd_load Failed rc = 0x%08X (creator = %d)", uint32_t(rc), rc.getCreator());
return rc;
}
- }
-
+
+ if ( dimm_type == ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM )
+ {
+ // Set Function 1-13 rcd words
+ rc = mss_lrdimm_rcd_load(i_target, port_number, ccs_inst_cnt);
+ if(rc)
+ {
+ FAPI_ERR(" LRDIMM rcd_load Failed rc = 0x%08X (creator = %d)", uint32_t(rc), rc.getCreator());
+ return rc;
+ }
+ }
+ }
}
}
@@ -1041,6 +1100,14 @@ ReturnCode mss_draminit_cloned(Target& i_target)
}
}
+ if ( (dram_gen == ENUM_ATTR_EFF_DRAM_GEN_DDR4) && (dimm_type == fapi::ENUM_ATTR_EFF_DIMM_TYPE_RDIMM || dimm_type == fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM) )
+ {
+ FAPI_INF("Performing B-side address inversion MPR write pattern");
+
+ rc = mss_ddr4_invert_mpr_write(i_target);
+ if (rc) return rc;
+ }
+
if (rc_num)
{
FAPI_ERR( "mss_draminit: Error setting up buffers");
@@ -1144,7 +1211,7 @@ ReturnCode mss_rcd_load(
ecmdDataBufferBase csn_8(8);
rc_num = rc_num | csn_8.setBit(0,8);
ecmdDataBufferBase odt_4(4);
- rc_num = rc_num | odt_4.setBit(0,4);
+ rc_num = rc_num | odt_4.clearBit(0,4);
ecmdDataBufferBase ddr_cal_type_4(4);
ecmdDataBufferBase num_idles_16(16);
@@ -1343,7 +1410,7 @@ ReturnCode mss_mrs_load(
ecmdDataBufferBase csn_8(8);
rc_num = rc_num | csn_8.setBit(0,8);
ecmdDataBufferBase odt_4(4);
- rc_num = rc_num | odt_4.setBit(0,4);
+ rc_num = rc_num | odt_4.clearBit(0,4);
ecmdDataBufferBase ddr_cal_type_4(4);
ecmdDataBufferBase csn_setup_8(8);
@@ -1777,8 +1844,15 @@ ReturnCode mss_mrs_load(
}
else
{
+ //DECONFIG and FFDC INFO
+ const fapi::Target & TARGET_MBA_ERROR = i_target;
+ const uint8_t & IMP = dram_rtt_nom[i_port_number][dimm_number][rank_number];
+ const uint32_t & PORT = i_port_number;
+ const uint32_t & DIMM = dimm_number;
+ const uint32_t & RANK = rank_number;
+
FAPI_ERR( "mss_mrs_load: Error determining ATTR_VPD_DRAM_RTT_NOM value: %d from attribute", dram_rtt_nom[i_port_number][dimm_number][rank_number]);
- FAPI_SET_HWP_ERROR(rc, RC_MSS_IMP_INPUT_ERROR);
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_DRAMINIT_RTT_NOM_IMP_INPUT_ERROR);
return rc;
}
@@ -1826,8 +1900,16 @@ ReturnCode mss_mrs_load(
}
else
{
+
+ //DECONFIG and FFDC INFO
+ const fapi::Target & TARGET_MBA_ERROR = i_target;
+ const uint8_t & IMP = dram_rtt_nom[i_port_number][dimm_number][rank_number];
+ const uint32_t & PORT = i_port_number;
+ const uint32_t & DIMM = dimm_number;
+ const uint32_t & RANK = rank_number;
+
FAPI_ERR( "mss_mrs_load: Error determining ATTR_VPD_DRAM_RTT_WR value: %d from attribute", dram_rtt_wr[i_port_number][dimm_number][rank_number]);
- FAPI_SET_HWP_ERROR(rc, RC_MSS_IMP_INPUT_ERROR);
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_DRAMINIT_RTT_WR_IMP_INPUT_ERROR);
return rc;
}
@@ -1976,7 +2058,8 @@ ReturnCode mss_mrs_load(
// For LRDIMM Set Rtt_nom, rtt_wr, driver impedance for R0 and R1
if ( (dimm_type == fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM) && lrdimm_rank_mult_mode != 0 )
{
- mss_lrdimm_mrs_load(i_target, i_port_number, dimm_number, io_ccs_inst_cnt);
+ rc = mss_lrdimm_mrs_load(i_target, i_port_number, dimm_number, io_ccs_inst_cnt);
+ if(rc) return rc;
} // end LRDIMM 8R dir MRS 1
} // end if has ranks
@@ -2007,7 +2090,7 @@ ReturnCode mss_assert_resetn (
if (rc_num)
{
- FAPI_ERR( "mss_ccs_mode: Error setting up buffers");
+ FAPI_ERR( "mss_assert_resetn: Error setting up buffers");
rc_buff.setEcmdError(rc_num);
return rc_buff;
}
OpenPOWER on IntegriCloud