summaryrefslogtreecommitdiffstats
path: root/src/usr/hwpf/hwp/dram_training
diff options
context:
space:
mode:
authorMatt Ploetz <maploetz@us.ibm.com>2014-01-23 15:10:43 -0600
committerA. Patrick Williams III <iawillia@us.ibm.com>2014-01-24 22:31:34 -0600
commitcd661b2da361937ffa8e6cc1b2904116df78bd75 (patch)
treef07d16bbb55a13be082167eef5a764052c0fe36f /src/usr/hwpf/hwp/dram_training
parent87f89f151885654e56a6d04fd4861fcd68d6d88b (diff)
downloadtalos-hostboot-cd661b2da361937ffa8e6cc1b2904116df78bd75.tar.gz
talos-hostboot-cd661b2da361937ffa8e6cc1b2904116df78bd75.zip
INITPROC: Hostboot - SW242006 Adv Training procedure updates
Change-Id: I492fc9c48d0124454a67ab48a56487448109cd57 CQ: SW242006 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/8282 Tested-by: Jenkins Server Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/hwpf/hwp/dram_training')
-rw-r--r--src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_access_delay_reg.C51
-rw-r--r--src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_draminit_training_advanced.C17
-rw-r--r--src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_generic_shmoo.C425
-rw-r--r--src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_generic_shmoo.H5
-rw-r--r--src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_common.C22
5 files changed, 469 insertions, 51 deletions
diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_access_delay_reg.C b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_access_delay_reg.C
index 0029662f7..615934908 100644
--- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_access_delay_reg.C
+++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_access_delay_reg.C
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: mss_access_delay_reg.C,v 1.21 2013/12/16 10:15:21 sasethur Exp $
+// $Id: mss_access_delay_reg.C,v 1.22 2014/01/15 16:22:54 sasethur Exp $
//------------------------------------------------------------------------------
// *! (C) Copyright International Business Machines Corp. 2011
// *! All Rights Reserved -- Property of IBM
@@ -54,7 +54,8 @@
// 1.16 | sauchadh |12-jun-13| ADDED CAC registers for read dqs
// 1.17 | sauchadh |18-Jul-13| Added data bit disable registers
// 1.19 | abhijsau |9-Oct-13 | Added mss_c4_phy() function
-// 1.21 | abhijsau |16-Dec-13| Added function for fw
+// 1.21 | abhijsau |16-Dec-13| Added function for fw
+// 1.22 |sauchadh |10-Jan-14| changed dimmtype attribute to ATTR_EFF_CUSTOM_DIMM
//----------------------------------------------------------------------
// My Includes
@@ -155,10 +156,13 @@ fapi::ReturnCode mss_access_delay_reg(const fapi::Target & i_target_mba, access_
const uint8_t clk_lanep3[clk_max]={3,2,13,12,10,11,11,10};
const uint8_t clk_adrp3[clk_max]={3,3,2,2,0,0,2,2};
+ //i_verbose=1;
rc = mss_getrankpair(i_target_mba,i_port_u8,i_rank_u8,&l_rank_pair,l_rankpair_table); if(rc) return rc;
- rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_TYPE, &i_target_mba, l_dimmtype); if(rc) return rc;
+ rc = FAPI_ATTR_GET(ATTR_EFF_CUSTOM_DIMM, &i_target_mba, l_dimmtype); if(rc) return rc;
+
+
rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_WIDTH, &i_target_mba, l_dram_width); if(rc) return rc;
rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, &i_target_mba, l_mbapos); if(rc) return rc;
@@ -193,10 +197,12 @@ fapi::ReturnCode mss_access_delay_reg(const fapi::Target & i_target_mba, access_
if(i_input_type_e==RD_DQ || i_input_type_e==WR_DQ)
{
- if(l_dimmtype==fapi::ENUM_ATTR_EFF_DIMM_TYPE_CDIMM)
+
+
+ if(l_dimmtype==fapi::ENUM_ATTR_EFF_CUSTOM_DIMM_YES)
{
l_type=CDIMM_DQ;
-
+
if(i_input_index_u8>l_CDIMM_dqmax)
{
FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR);
@@ -205,7 +211,7 @@ fapi::ReturnCode mss_access_delay_reg(const fapi::Target & i_target_mba, access_
}
}
- else if((l_dimmtype==fapi::ENUM_ATTR_EFF_DIMM_TYPE_RDIMM) || (l_dimmtype==fapi::ENUM_ATTR_EFF_DIMM_TYPE_UDIMM) || (l_dimmtype==fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM))
+ else if(l_dimmtype==fapi::ENUM_ATTR_EFF_CUSTOM_DIMM_NO)
{
l_type=ISDIMM_DQ;
if(i_input_index_u8>l_ISDIMM_dqmax)
@@ -485,11 +491,11 @@ fapi::ReturnCode mss_access_delay_reg(const fapi::Target & i_target_mba, access_
else if (i_input_type_e==RD_DQS || i_input_type_e==WR_DQS || i_input_type_e==DQS_ALIGN || i_input_type_e==DQS_GATE || i_input_type_e==RDCLK || i_input_type_e==DQSCLK)
{
- if(l_dimmtype==fapi::ENUM_ATTR_EFF_DIMM_TYPE_CDIMM)
+ if(l_dimmtype==fapi::ENUM_ATTR_EFF_CUSTOM_DIMM_YES)
{
l_type=CDIMM_DQS;
}
- else if((l_dimmtype==fapi::ENUM_ATTR_EFF_DIMM_TYPE_RDIMM) || (l_dimmtype==fapi::ENUM_ATTR_EFF_DIMM_TYPE_UDIMM) || (l_dimmtype==fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM))
+ else if(l_dimmtype==fapi::ENUM_ATTR_EFF_CUSTOM_DIMM_NO)
{
l_type=ISDIMM_DQS;
}
@@ -1223,7 +1229,7 @@ fapi::ReturnCode cross_coupled(const fapi::Target & i_target_mba,uint8_t i_port,
rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, &i_target_mba, l_mbapos); if(rc) return rc;
- rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_TYPE, &i_target_mba, l_dimmtype); if(rc) return rc;
+ rc = FAPI_ATTR_GET(ATTR_EFF_CUSTOM_DIMM, &i_target_mba, l_dimmtype); if(rc) return rc;
rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_WIDTH, &i_target_mba, l_dram_width); if(rc) return rc;
@@ -1419,7 +1425,7 @@ fapi::ReturnCode cross_coupled(const fapi::Target & i_target_mba,uint8_t i_port,
l_lane=lane_dqs[1];
}
- if(l_dimmtype==fapi::ENUM_ATTR_EFF_DIMM_TYPE_CDIMM)
+ if(l_dimmtype==fapi::ENUM_ATTR_EFF_CUSTOM_DIMM_YES)
{
if((i_input_index==1) || (i_input_index==3) || (i_input_index==5) || (i_input_index==7) || (i_input_index==9) || (i_input_index==11) || (i_input_index==13) || (i_input_index==15) || (i_input_index==17) || (i_input_index==19))
{
@@ -1735,7 +1741,7 @@ fapi::ReturnCode rosetta_map(const fapi::Target & i_target_mba,uint8_t i_port,in
const uint8_t GL_DQS_p3[l_maxdqs]={0,2,4,16,8,10,12,14,6,1,3,5,17,9,11,13,15,7};
rc = FAPI_ATTR_GET(ATTR_MSS_DQS_SWIZZLE_TYPE, &i_target_mba, l_swizzle); if(rc) return rc;
-
+ //FAPI_INF("input index in rosetta map=%d",i_input_index);
if(l_swizzle ==0 || l_swizzle ==1)
{
@@ -1761,9 +1767,9 @@ fapi::ReturnCode rosetta_map(const fapi::Target & i_target_mba,uint8_t i_port,in
return rc;
}
- rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_TYPE, &i_target_mba, l_dimmtype); if(rc) return rc;
+ rc = FAPI_ATTR_GET(ATTR_EFF_CUSTOM_DIMM, &i_target_mba, l_dimmtype); if(rc) return rc;
- if(l_dimmtype==fapi::ENUM_ATTR_EFF_DIMM_TYPE_CDIMM)
+ if(l_dimmtype==fapi::ENUM_ATTR_EFF_CUSTOM_DIMM_YES)
{
if(i_input_index>l_CDIMM_dqmax)
{
@@ -1773,7 +1779,7 @@ fapi::ReturnCode rosetta_map(const fapi::Target & i_target_mba,uint8_t i_port,in
}
}
- else if((l_dimmtype==fapi::ENUM_ATTR_EFF_DIMM_TYPE_RDIMM) || (l_dimmtype==fapi::ENUM_ATTR_EFF_DIMM_TYPE_UDIMM) || (l_dimmtype==fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM))
+ else if(l_dimmtype==fapi::ENUM_ATTR_EFF_CUSTOM_DIMM_NO)
{
if(i_input_index>l_ISDIMM_dqmax)
{
@@ -2736,7 +2742,7 @@ fapi::ReturnCode mss_c4_phy(const fapi::Target & i_target_mba,uint8_t i_port, ui
rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, &i_target_mba, l_mbapos); if(rc) return rc;
- rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_TYPE, &i_target_mba, l_dimmtype); if(rc) return rc;
+ rc = FAPI_ATTR_GET(ATTR_EFF_CUSTOM_DIMM, &i_target_mba, l_dimmtype); if(rc) return rc;
rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_WIDTH, &i_target_mba, l_dram_width); if(rc) return rc;
@@ -2981,7 +2987,7 @@ fapi::ReturnCode mss_c4_phy(const fapi::Target & i_target_mba,uint8_t i_port, ui
l_lane=lane_dqs[1];
}
- if(l_dimmtype==fapi::ENUM_ATTR_EFF_DIMM_TYPE_CDIMM)
+ if(l_dimmtype==fapi::ENUM_ATTR_EFF_CUSTOM_DIMM_YES)
{
if((i_input_index==1) || (i_input_index==3) || (i_input_index==5) || (i_input_index==7) || (i_input_index==9) || (i_input_index==11) || (i_input_index==13) || (i_input_index==15) || (i_input_index==17) || (i_input_index==19))
{
@@ -3339,10 +3345,13 @@ fapi::ReturnCode mss_access_delay_reg_schmoo(const fapi::Target & i_target_mba,
const uint8_t clk_lanep3[clk_max]={3,2,13,12,10,11,11,10};
const uint8_t clk_adrp3[clk_max]={3,3,2,2,0,0,2,2};
+ //FAPI_INF("input index in access delay=%d",i_input_index_u8);
+
+ //i_verbose=1;
rc = mss_getrankpair(i_target_mba,i_port_u8,i_rank_u8,&l_rank_pair,l_rankpair_table); if(rc) return rc;
- rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_TYPE, &i_target_mba, l_dimmtype); if(rc) return rc;
+ rc = FAPI_ATTR_GET(ATTR_EFF_CUSTOM_DIMM, &i_target_mba, l_dimmtype); if(rc) return rc;
rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_WIDTH, &i_target_mba, l_dram_width); if(rc) return rc;
rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, &i_target_mba, l_mbapos); if(rc) return rc;
@@ -3377,7 +3386,7 @@ fapi::ReturnCode mss_access_delay_reg_schmoo(const fapi::Target & i_target_mba,
if(i_input_type_e==RD_DQ || i_input_type_e==WR_DQ)
{
- if(l_dimmtype==fapi::ENUM_ATTR_EFF_DIMM_TYPE_CDIMM)
+ if(l_dimmtype==fapi::ENUM_ATTR_EFF_CUSTOM_DIMM_YES)
{
l_type=CDIMM_DQ;
@@ -3389,7 +3398,7 @@ fapi::ReturnCode mss_access_delay_reg_schmoo(const fapi::Target & i_target_mba,
}
}
- else if((l_dimmtype==fapi::ENUM_ATTR_EFF_DIMM_TYPE_RDIMM) || (l_dimmtype==fapi::ENUM_ATTR_EFF_DIMM_TYPE_UDIMM) || (l_dimmtype==fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM))
+ else if(l_dimmtype==fapi::ENUM_ATTR_EFF_CUSTOM_DIMM_NO)
{
l_type=ISDIMM_DQ;
if(i_input_index_u8>l_ISDIMM_dqmax)
@@ -3669,11 +3678,11 @@ fapi::ReturnCode mss_access_delay_reg_schmoo(const fapi::Target & i_target_mba,
else if (i_input_type_e==RD_DQS || i_input_type_e==WR_DQS || i_input_type_e==DQS_ALIGN || i_input_type_e==DQS_GATE || i_input_type_e==RDCLK || i_input_type_e==DQSCLK)
{
- if(l_dimmtype==fapi::ENUM_ATTR_EFF_DIMM_TYPE_CDIMM)
+ if(l_dimmtype==fapi:: ENUM_ATTR_EFF_CUSTOM_DIMM_YES)
{
l_type=CDIMM_DQS;
}
- else if((l_dimmtype==fapi::ENUM_ATTR_EFF_DIMM_TYPE_RDIMM) || (l_dimmtype==fapi::ENUM_ATTR_EFF_DIMM_TYPE_UDIMM) || (l_dimmtype==fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM))
+ else if(l_dimmtype==fapi:: ENUM_ATTR_EFF_CUSTOM_DIMM_NO)
{
l_type=ISDIMM_DQS;
}
diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_draminit_training_advanced.C b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_draminit_training_advanced.C
index d110e4982..8ceeba238 100644
--- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_draminit_training_advanced.C
+++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_draminit_training_advanced.C
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: mss_draminit_training_advanced.C,v 1.40 2013/12/17 18:47:27 sasethur Exp $
+// $Id: mss_draminit_training_advanced.C,v 1.41 2014/01/16 17:22:58 sasethur Exp $
/* File is created by SARAVANAN SETHURAMAN on Thur 29 Sept 2011. */
//------------------------------------------------------------------------------
@@ -80,6 +80,7 @@
// 1.38 | bellows |19-SEP-13| fixed possible buffer overrun found by stradale
// 1.39 | abhijsau |17-OCT-13| fixed a logical bug
// 1.40 | abhijsau |17-DEC-13| added creation and deletion of schmoo object
+// 1.41 | abhijsau |16-JAN-14| removed EFF_DIMM_TYPE attribute
// This procedure Schmoo's DRV_IMP, SLEW, VREF (DDR, CEN), RCV_IMP based on attribute from effective config procedure
// DQ & DQS Driver impedance, Slew rate, WR_Vref shmoo would call only write_eye shmoo for margin calculation
@@ -216,7 +217,7 @@ fapi::ReturnCode mss_draminit_training_advanced_cloned(const fapi::Target & i_ta
uint8_t l_num_ranks_per_dimm_u8array[MAX_PORT][MAX_DIMM] = {{0}};
//nuint8_t l_actual_dimm_size_u8 = 0;
uint8_t l_port = 0;
- uint8_t l_dimm_type_u8 = 0; //default is set to CDIMM
+ // uint8_t l_dimm_type_u8 = 0; //default is set to CDIMM
uint32_t l_left_margin=0;
uint32_t l_right_margin=0;
uint32_t l_shmoo_param=0;
@@ -235,8 +236,8 @@ fapi::ReturnCode mss_draminit_training_advanced_cloned(const fapi::Target & i_ta
if(rc) return rc;
//const fapi::Target is centaur.mba
- rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_TYPE, &i_target_mba, l_dimm_type_u8);
- if(rc) return rc;
+ //rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_TYPE, &i_target_mba, l_dimm_type_u8);
+ //if(rc) return rc;
rc = FAPI_ATTR_GET(ATTR_EFF_NUM_DROPS_PER_PORT, &i_target_mba, l_num_drops_per_port_u8);
if(rc) return rc;
rc = FAPI_ATTR_GET(ATTR_EFF_NUM_RANKS_PER_DIMM, &i_target_mba, l_num_ranks_per_dimm_u8array);
@@ -245,7 +246,7 @@ fapi::ReturnCode mss_draminit_training_advanced_cloned(const fapi::Target & i_ta
FAPI_INF("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
FAPI_INF("freq = %d on %s.", l_attr_mss_freq_u32, l_target_centaur.toEcmdString());
FAPI_INF("volt = %d on %s.", l_attr_mss_volt_u32, l_target_centaur.toEcmdString());
- FAPI_INF("dimm_type = %d on %s.", l_dimm_type_u8, i_target_mba.toEcmdString());
+ //FAPI_INF("dimm_type = %d on %s.", l_dimm_type_u8, i_target_mba.toEcmdString());
FAPI_INF("num_drops_per_port = %d on %s.", l_num_drops_per_port_u8, i_target_mba.toEcmdString());
FAPI_INF("num_ranks_per_dimm = [%02d][%02d][%02d][%02d] on %s.", l_num_ranks_per_dimm_u8array[0][0],l_num_ranks_per_dimm_u8array[0][1], l_num_ranks_per_dimm_u8array[1][0],l_num_ranks_per_dimm_u8array[1][1], i_target_mba.toEcmdString());
FAPI_INF("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
@@ -269,12 +270,12 @@ fapi::ReturnCode mss_draminit_training_advanced_cloned(const fapi::Target & i_ta
l_shmoo_type_valid=(shmoo_type_t)l_shmoo_type_valid_t;
l_shmoo_param_valid=(shmoo_param)l_shmoo_param_valid_t;
- FAPI_INF("running in simics before attr");
+ //FAPI_INF("running in simics before attr");
FAPI_INF("+++++++++++++++++++++++++ Read Schmoo Attributes ++++++++++++++++++++++++++");
FAPI_INF("Schmoo param valid = 0x%x on %s", l_shmoo_param_valid, i_target_mba.toEcmdString());
FAPI_INF("Schmoo test valid = 0x%x on %s", l_shmoo_type_valid, i_target_mba.toEcmdString());
FAPI_INF("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
- FAPI_INF("running in simics after attr");
+ //FAPI_INF("running in simics after attr");
//Check for Shmoo Parameter, if anyof them is enabled then go into the loop else the procedure exit
if (( l_num_ranks_per_dimm_u8array[0][0] > 0 ) || (l_num_ranks_per_dimm_u8array[0][1] > 0) || ( l_num_ranks_per_dimm_u8array[1][0] > 0 ) || (l_num_ranks_per_dimm_u8array[1][1] > 0))
@@ -1035,7 +1036,7 @@ fapi::ReturnCode delay_shmoo(const fapi::Target & i_target_mba, uint8_t i_port,
uint32_t i_shmoo_param)
{
fapi::ReturnCode rc;
- FAPI_INF(" Inside before the delay shmoo " );
+ //FAPI_INF(" Inside before the delay shmoo " );
//Constructor CALL: generic_shmoo::generic_shmoo(uint8_t i_port, uint32_t shmoo_mask,shmoo_algorithm_t shmoo_algorithm)
//generic_shmoo mss_shmoo=generic_shmoo(i_port,2,SEQ_LIN);
generic_shmoo * l_pShmoo = new generic_shmoo(i_port,i_shmoo_type_valid,SEQ_LIN);
diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_generic_shmoo.C b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_generic_shmoo.C
index 86d1a2262..845d29c90 100644
--- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_generic_shmoo.C
+++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_generic_shmoo.C
@@ -21,7 +21,7 @@
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: mss_generic_shmoo.C,v 1.83 2013/12/17 18:42:08 sasethur Exp $
+// $Id: mss_generic_shmoo.C,v 1.84 2014/01/16 17:39:18 sasethur Exp $
// *!***************************************************************************
// *! (C) Copyright International Business Machines Corp. 1997, 1998
// *! All Rights Reserved -- Property of IBM
@@ -40,6 +40,7 @@
//------------------------------------------------------------------------------
// Version:|Author: | Date: | Comment:
// --------|--------|---------|--------------------------------------------------
+// 1.84 |abhijit |16-JAN-14| Changed EFF_DIMM_TYPE attribute to ATTR_EFF_CUSTOM_DIMM
// 1.83 |abhijit |17-DEC-13| Changed the whole code structure to enable run from firmware
// 1.81 |abhijit |07-nov-13| Fixed memory release as per fw suggestion
// 1.80 |abhijit |07-nov-13| Fixed array initialization of bad bit array as per fw suggestion
@@ -186,7 +187,7 @@ generic_shmoo:: generic_shmoo(uint8_t addr,shmoo_type_t shmoo_mask,shmoo_algorit
{
for(int j=0;j<iv_MAX_RANKS[i];++j)
{
- init_multi_array(SHMOO[k].MBA.P[i].S[j].K.nom_val,0);
+ init_multi_array(SHMOO[k].MBA.P[i].S[j].K.nom_val,250);
init_multi_array(SHMOO[k].MBA.P[i].S[j].K.lb_regval,0);
init_multi_array(SHMOO[k].MBA.P[i].S[j].K.rb_regval,512);
init_multi_array(SHMOO[k].MBA.P[i].S[j].K.last_pass,0);
@@ -241,7 +242,7 @@ fapi::ReturnCode generic_shmoo::run(const fapi::Target & i_target,uint32_t *o_ri
rc = FAPI_ATTR_SET(ATTR_MCBIST_PRINTING_DISABLE, &i_target, l_mcbist_prnt_off); if(rc) return rc;
rc = FAPI_ATTR_GET(ATTR_EFF_NUM_RANKS_PER_DIMM, &i_target, num_ranks_per_dimm); if(rc) return rc;
- rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_TYPE, &i_target, l_attr_eff_dimm_type_u8); if(rc) return rc;
+ rc = FAPI_ATTR_GET(ATTR_EFF_CUSTOM_DIMM, &i_target, l_attr_eff_dimm_type_u8); if(rc) return rc;
rc = FAPI_ATTR_GET(ATTR_EFF_SCHMOO_TEST_VALID, &i_target, l_attr_schmoo_test_type_u8); if(rc) return rc;
rc = FAPI_ATTR_GET(ATTR_SCHMOO_MULTIPLE_SETUP_CALL, &i_target, l_attr_schmoo_multiple_setup_call_u8); if(rc) return rc;
@@ -265,7 +266,7 @@ fapi::ReturnCode generic_shmoo::run(const fapi::Target & i_target,uint32_t *o_ri
- if ( l_attr_eff_dimm_type_u8 == 0 )
+ if ( l_attr_eff_dimm_type_u8 == fapi::ENUM_ATTR_EFF_CUSTOM_DIMM_YES )
{
iv_MAX_BYTES=10;
}
@@ -275,6 +276,8 @@ fapi::ReturnCode generic_shmoo::run(const fapi::Target & i_target,uint32_t *o_ri
iv_dmm_type=1;
iv_MAX_BYTES=9;
}
+
+ //FAPI_INF(" Abhijit iv_dimm_type=%d and attribute=%d ",iv_dmm_type,l_attr_eff_dimm_type_u8);
//rc = mss_getrankpair(i_target,iv_port,0,&rank_pair,valid_rank);if(rc) return rc;
FAPI_DBG("mss_generic_shmoo : run() for shmoo type %d",shmoo_mask);
// Check if all bytes/bits are in a pass condition initially .Otherwise quit
@@ -404,7 +407,7 @@ fapi::ReturnCode generic_shmoo::run(const fapi::Target & i_target,uint32_t *o_ri
FAPI_INF("%s:Minimum hold margin=%d ps and setup margin=%d ps",i_target.toEcmdString(), *o_left_min_margin,*o_right_min_margin);
- shmoo_save_rest(i_target,i_content_array,1);
+
}
l_mcbist_prnt_off=0;
rc = FAPI_ATTR_SET(ATTR_MCBIST_PRINTING_DISABLE, &i_target, l_mcbist_prnt_off); if(rc) return rc;
@@ -1550,6 +1553,8 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4(const fapi::Target & i_targe
uint8_t l_rp=0;
+ uint8_t l_i=0;
+
input_type_t l_input_type_e = WR_DQ;
input_type_t l_input_type_e_dqs = WR_DQS;
uint8_t l_dq=0;
@@ -1626,6 +1631,25 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4(const fapi::Target & i_targe
for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
l_dq=4*l_n;
+
+ if(l_p == 0){
+
+ for(l_i=0;l_i<count_bad_dq[0];l_i++){
+
+ if(l_CDarray0[l_i]==l_dq){
+
+ schmoo_error_map[l_p][rank][l_n]=1;
+ }
+ }
+ }else{
+ for(l_i=0;l_i<count_bad_dq[1];l_i++){
+
+ if(l_CDarray1[l_i]==l_dq){
+
+ schmoo_error_map[l_p][rank][l_n]=1;
+ }
+ }
+ }
if(schmoo_error_map[l_p][rank][l_n]==0){
@@ -1744,7 +1768,24 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4(const fapi::Target & i_targe
rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
l_dq=4*l_n;
+ if(l_p == 0){
+ for(l_i=0;l_i<count_bad_dq[0];l_i++){
+
+ if(l_CDarray0[l_i]==l_dq){
+
+ schmoo_error_map[l_p][rank][l_n]=1;
+ }
+ }
+ }else{
+ for(l_i=0;l_i<count_bad_dq[1];l_i++){
+
+ if(l_CDarray1[l_i]==l_dq){
+
+ schmoo_error_map[l_p][rank][l_n]=1;
+ }
+ }
+ }
if(schmoo_error_map[l_p][rank][l_n]==0){
SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_n]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_n]-l_delay;
rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_n]);if(rc) return rc;
@@ -2510,6 +2551,370 @@ rc=check_error_map(i_target,l_p,pass);
return rc;
}
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+fapi::ReturnCode generic_shmoo::knob_update_dqs_by8_isdimm(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag)
+{
+ fapi::ReturnCode rc;
+ ecmdDataBufferBase data_buffer_64(64);
+ ecmdDataBufferBase data_buffer_64_1(64);
+
+
+
+ uint8_t l_rp=0;
+ input_type_t l_input_type_e = WR_DQ;
+ input_type_t l_input_type_e_dqs = WR_DQS;
+ uint8_t l_dq=0;
+ uint8_t l_dqs=0;
+ access_type_t l_access_type_e = WRITE;
+ uint8_t l_n=0;
+ //uint8_t l_scen_dqs=4;
+ uint8_t l_CDarray0[80]={0};
+ uint8_t l_CDarray1[80]={0};
+
+
+
+ uint8_t l_p=0;
+ uint16_t l_delay=0;
+ //uint32_t l_max=0;
+ uint16_t l_max_limit=500;
+ uint8_t rank=0;
+ uint8_t l_rank=0;
+ //uint8_t l_SCHMOO_BYTES=10;
+ uint8_t l_SCHMOO_NIBBLES=20;
+
+ //uint8_t i_rp=0;
+
+ rc=do_mcbist_test(i_target);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+
+ rc=mcb_error_map(i_target,mcbist_error_map,l_CDarray0,l_CDarray1,count_bad_dq);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!");
+
+ return rc;
+ }
+
+ if(iv_dmm_type==1)
+ {
+ //l_SCHMOO_BYTES=9;
+ l_SCHMOO_NIBBLES=18;
+ }
+ //rc = mss_getrankpair(i_target,iv_port,rank,&l_rp,valid_rank);if(rc) return rc;
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for(int i=0;i<iv_MAX_RANKS[l_p];i++){
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[i];
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ schmoo_error_map[l_p][rank][l_n]=0;
+ }
+ }
+ }
+
+
+
+
+ if(bound==RIGHT)
+ {
+
+ if(algorithm==SEQ_LIN)
+ {
+
+
+ for (l_delay=1;((pass==0));l_delay++){
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
+ {
+ l_dq=0;
+ l_dqs=0;
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rank];
+ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
+
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ l_dq=4*l_n;
+ l_dqs=l_n/2;
+
+ if((schmoo_error_map[l_p][rank][l_n]==0)&&(schmoo_error_map[l_p][rank][l_n+1]==0)){
+
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_dqs]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dqs]+l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_dqs,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_dqs]);if(rc) return rc;
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_dq]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_dq]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_dq]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_dq]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_dq]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_dq]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_dq]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_dq]);if(rc) return rc;
+
+ }
+
+ if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_dqs]>l_max_limit){
+
+ schmoo_error_map[l_p][rank][l_n]=1;
+ schmoo_error_map[l_p][rank][l_n+1]=1;
+ }
+
+ if((schmoo_error_map[l_p][rank][l_n]==1)||(schmoo_error_map[l_p][rank][l_n+1]==1)){
+
+ schmoo_error_map[l_p][rank][l_n]=1;
+ schmoo_error_map[l_p][rank][l_n+1]=1;
+ }
+
+ l_n=l_n+1;
+
+ }
+
+
+ }
+
+ }
+ rc=do_mcbist_test(i_target);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+
+ rc=check_error_map(i_target,l_p,pass);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+
+ }
+
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
+ {
+
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rank];
+ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_n]);if(rc) return rc;
+
+ }
+ }
+ }
+
+ for(int l_bit=0;l_bit<4;l_bit++){
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
+ {
+ l_dq=l_bit;
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rank];
+ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]);if(rc) return rc;
+ l_dq=l_dq+4;
+ }
+ }
+ }
+ }
+
+ rc=do_mcbist_test(i_target);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+
+ rc=mcb_error_map(i_target,mcbist_error_map,l_CDarray0,l_CDarray1,count_bad_dq);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!");
+
+ return rc;
+ }
+
+
+
+ }
+
+ }
+
+ if(bound==LEFT)
+ {
+ if(algorithm==SEQ_LIN)
+ {
+
+ for (l_delay=1;(pass==0);l_delay++){
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
+ {
+ l_dq=0;
+ l_dqs=0;
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rank];
+ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ l_dq=4*l_n;
+
+ l_dqs=l_n/2;
+
+ if((schmoo_error_map[l_p][rank][l_n]==0)&&(schmoo_error_map[l_p][rank][l_n+1]==0)){
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_dqs]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dqs]-l_delay;
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_dqs,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_dqs]);if(rc) return rc;
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_dq]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_dq]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_dq]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_dq]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_dq]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_dq]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_dq]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_dq]);if(rc) return rc;
+ }
+ if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_dqs] == 0){
+ schmoo_error_map[l_p][rank][l_n] = 1;
+ schmoo_error_map[l_p][rank][l_n+1] = 1;
+ }
+
+ if((schmoo_error_map[l_p][rank][l_n]==1)||(schmoo_error_map[l_p][rank][l_n+1]==1)){
+
+ schmoo_error_map[l_p][rank][l_n]=1;
+ schmoo_error_map[l_p][rank][l_n+1]=1;
+ }
+
+ l_n=l_n+1;
+
+ }
+ }
+
+ }
+ rc=do_mcbist_test(i_target);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+
+rc=check_error_map(i_target,l_p,pass);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+
+
+ }
+
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
+ {
+
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rank];
+ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_n]);if(rc) return rc;
+
+ }
+ }
+ }
+
+ for(int l_bit=0;l_bit<4;l_bit++){
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
+ {
+ l_dq=l_bit;
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rank];
+ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]);if(rc) return rc;
+ l_dq=l_dq+4;
+ }
+ }
+ }
+ }
+ rc=do_mcbist_test(i_target);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+
+ rc=mcb_error_map(i_target,mcbist_error_map,l_CDarray0,l_CDarray1,count_bad_dq);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!");
+
+ return rc;
+ }
+
+ }
+
+
+ }
+
+
+
+
+ return rc;
+}
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*------------------------------------------------------------------------------
@@ -2552,7 +2957,7 @@ fapi::ReturnCode generic_shmoo::find_bound(const fapi::Target & i_target,bound_t
}else{
if(iv_dmm_type==1)
{
- //rc=knob_update_dqs_by8_isdimm(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc;
+ rc=knob_update_dqs_by8_isdimm(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc;
}else{
rc=knob_update_dqs_by4(i_target,bound,iv_SHMOO_ON,l_bit,pass,flag); if(rc) return rc;
@@ -2617,7 +3022,7 @@ fapi::ReturnCode generic_shmoo::print_report(const fapi::Target & i_target)
rc = FAPI_ATTR_GET(ATTR_MSS_FREQ, &l_target_centaur, l_attr_mss_freq_u32); if(rc) return rc;
rc = FAPI_ATTR_GET(ATTR_MSS_VOLT, &l_target_centaur, l_attr_mss_volt_u32); if(rc) return rc;
- rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_TYPE, &i_target, l_attr_eff_dimm_type_u8); if(rc) return rc;
+ rc = FAPI_ATTR_GET(ATTR_EFF_CUSTOM_DIMM, &i_target, l_attr_eff_dimm_type_u8); if(rc) return rc;
rc = FAPI_ATTR_GET(ATTR_EFF_NUM_DROPS_PER_PORT, &i_target, l_attr_eff_num_drops_per_port_u8); if(rc) return rc;
rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_WIDTH, &i_target, l_attr_eff_dram_width_u8); if(rc) return rc;
rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, &i_target, l_mbapos);if(rc) return rc;
@@ -2627,7 +3032,7 @@ fapi::ReturnCode generic_shmoo::print_report(const fapi::Target & i_target)
FAPI_INF("%s: freq = %d on %s.",i_target.toEcmdString(),l_attr_mss_freq_u32, l_target_centaur.toEcmdString());
FAPI_INF("%s: volt = %d on %s.",i_target.toEcmdString(), l_attr_mss_volt_u32, l_target_centaur.toEcmdString());
FAPI_INF("%s: dimm_type = %d on %s.",i_target.toEcmdString(), l_attr_eff_dimm_type_u8, i_target.toEcmdString());
- if ( l_attr_eff_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_CDIMM )
+ if ( l_attr_eff_dimm_type_u8 == fapi::ENUM_ATTR_EFF_CUSTOM_DIMM_YES )
{
FAPI_INF("%s: It is a CDIMM",i_target.toEcmdString());
}
@@ -2724,7 +3129,7 @@ fapi::ReturnCode generic_shmoo::print_report(const fapi::Target & i_target)
rc = FAPI_ATTR_GET(ATTR_MSS_FREQ, &l_target_centaur, l_attr_mss_freq_u32); if(rc) return rc;
rc = FAPI_ATTR_GET(ATTR_MSS_VOLT, &l_target_centaur, l_attr_mss_volt_u32); if(rc) return rc;
- rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_TYPE, &i_target, l_attr_eff_dimm_type_u8); if(rc) return rc;
+ rc = FAPI_ATTR_GET(ATTR_EFF_CUSTOM_DIMM, &i_target, l_attr_eff_dimm_type_u8); if(rc) return rc;
rc = FAPI_ATTR_GET(ATTR_EFF_NUM_DROPS_PER_PORT, &i_target, l_attr_eff_num_drops_per_port_u8); if(rc) return rc;
rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_WIDTH, &i_target, l_attr_eff_dram_width_u8); if(rc) return rc;
rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, &i_target, l_mbapos);if(rc) return rc;
@@ -2746,7 +3151,7 @@ fapi::ReturnCode generic_shmoo::print_report(const fapi::Target & i_target)
FAPI_INF("%s:\n Number of ranks on port=1 is %d ",i_target.toEcmdString(),iv_MAX_RANKS[1]);
- if ( l_attr_eff_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_CDIMM )
+ if ( l_attr_eff_dimm_type_u8 == fapi::ENUM_ATTR_EFF_CUSTOM_DIMM_YES )
{
FAPI_INF("%s:It is a CDIMM",i_target.toEcmdString());
}
diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_generic_shmoo.H b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_generic_shmoo.H
index c0c53414d..79076b783 100644
--- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_generic_shmoo.H
+++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_generic_shmoo.H
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: mss_generic_shmoo.H,v 1.24 2013/12/17 18:45:02 sasethur Exp $
+// $Id: mss_generic_shmoo.H,v 1.26 2014/01/17 06:11:27 sasethur Exp $
// *!***************************************************************************
// *! (C) Copyright International Business Machines Corp. 1997, 1998
// *! All Rights Reserved -- Property of IBM
@@ -39,6 +39,7 @@
//------------------------------------------------------------------------------
// Version:|Author: | Date: | Comment:
// --------|--------|--------|--------------------------------------------------
+// 1.26 |abhijit |01/17/14|enabled one more function
// 1.24 |abhijit |12/17/13|modified as per to support firmware
// 1.22 |abhijit |8/08/13 |added binary schmoo functions
// 1.20 |abhijit |7/17/13 |added functions for read dqs
@@ -151,7 +152,7 @@ class generic_shmoo
fapi::ReturnCode sanity_check(const fapi::Target & i_target);
fapi::ReturnCode schmoo_setup_mcb( const fapi::Target & i_target);
//fapi::ReturnCode get_error_cnt(const fapi::Target & i_target,uint8_t port,uint8_t rank,uint8_t rank_pair,uint8_t bit,bound_t bound);
- //fapi::ReturnCode knob_update_dqs_by8_isdimm(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag);
+ fapi::ReturnCode knob_update_dqs_by8_isdimm(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag);
fapi::ReturnCode knob_update_dqs_by4_isdimm(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag);
fapi::ReturnCode run(const fapi::Target & i_target,uint32_t *right_min_margin,uint32_t *left_min_margin,uint32_t i_vref_mul);
fapi::ReturnCode shmoo_save_rest(const fapi::Target & i_target,uint64_t i_content_array[],uint8_t i_mode);
diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_common.C b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_common.C
index 409c413e1..e8888c818 100644
--- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_common.C
+++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_common.C
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: mss_mcbist_common.C,v 1.59 2013/12/17 18:37:58 sasethur Exp $
+// $Id: mss_mcbist_common.C,v 1.61 2014/01/16 15:56:09 sasethur Exp $
// *!***************************************************************************
// *! (C) Copyright International Business Machines Corp. 1997, 1998
// *! All Rights Reserved -- Property of IBM
@@ -38,6 +38,8 @@
//------------------------------------------------------------------------------
// Version:|Author: | Date: | Comment:
// --------|--------|--------|--------------------------------------------------
+// 1.61 |aditya |01/15/14|Updated attr ATTR_EFF_CUSTOM_DIMM
+// 1.60 |aditya |12/20/13|Updated max timeout for Mcbist Polling
// 1.59 |aditya |12/17/13|Updated mcb_error_map function parameters
// 1.58 |aditya |12/10/13|Updated Target for MBS registers
// 1.57 |rwheeler|10/29/13 |added W_ONLY_INFINITE_RAND test
@@ -115,7 +117,7 @@ const uint8_t MAX_RANK = 8;
const uint8_t MAX_NIBBLES = 2;
//const uint8_t MAX_NIBBLE = 1;
const uint8_t MCB_TEST_NUM = 16;
-const uint64_t MCB_MAX_TIMEOUT = 0000000000000600ull;
+const uint64_t MCB_MAX_TIMEOUT = 0000000000060000ull;
const uint64_t DELAY_100US = 100000; // general purpose 100 usec delay for HW mode (2000000 sim cycles if simclk = 20ghz)
const uint64_t DELAY_2000SIMCYCLES = 2000; // general purpose 2000 sim cycle delay for sim mode (100 ns if simclk = 20Ghz)
//const uint64_t END_ADDRESS = 0x0000000004; //Will be fixed later, once the address generation function is ready
@@ -1235,7 +1237,7 @@ fapi::ReturnCode mcb_error_map(const fapi::Target & i_target_mba, uint8_t o_er
}
}
- rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_TYPE, &i_target_mba, l_attr_eff_dimm_type_u8); if(rc) return rc;
+ rc = FAPI_ATTR_GET(ATTR_EFF_CUSTOM_DIMM, &i_target_mba, l_attr_eff_dimm_type_u8); if(rc) return rc;
//Adi
//l_attr_eff_dimm_type_u8 = 0;
@@ -1501,7 +1503,7 @@ l_n=0;io_num0= 0;io_num1=0;
- if((l_attr_eff_dimm_type_u8 == 1) || (l_attr_eff_dimm_type_u8 == 3))
+ if(l_attr_eff_dimm_type_u8 != fapi::ENUM_ATTR_EFF_CUSTOM_DIMM_YES)
{
//For ISDIMM marray
@@ -1680,7 +1682,7 @@ FAPI_INF("______________________________________________________________________
FAPI_INF("________________________________________________________________________________________________________");*/
//To be in error map print function
- if((l_attr_eff_dimm_type_u8 == 1) || (l_attr_eff_dimm_type_u8 == 3)) //Calling ISDIMM error mAP and LRDIMM
+ if(l_attr_eff_dimm_type_u8 != fapi::ENUM_ATTR_EFF_CUSTOM_DIMM_YES) //Calling ISDIMM error mAP and LRDIMM
{
FAPI_DBG("%s:################# Error MAP for ISDIMM #################",i_target_mba.toEcmdString());
for(l_port = 0; l_port < 2; l_port++)
@@ -2155,7 +2157,7 @@ fapi::ReturnCode cfg_byte_mask(const fapi::Target & i_target_mba)
rc = FAPI_ATTR_GET(ATTR_EFF_NUM_RANKS_PER_DIMM, &i_target_mba, num_ranks_per_dimm); if(rc) return rc;
uint8_t l_mbaPosition = 0;
uint8_t l_attr_eff_dimm_type_u8 = 0;
- rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_TYPE, &i_target_mba, l_attr_eff_dimm_type_u8); if(rc) return rc;
+ rc = FAPI_ATTR_GET(ATTR_EFF_CUSTOM_DIMM, &i_target_mba, l_attr_eff_dimm_type_u8); if(rc) return rc;
rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, &i_target_mba, l_mbaPosition);
//uint8_t l_print = 0;
//rc = FAPI_ATTR_GET(ATTR_MCBIST_PRINTING_DISABLE, &i_target_mba,l_print); if(rc) return rc;
@@ -2235,7 +2237,7 @@ fapi::ReturnCode cfg_byte_mask(const fapi::Target & i_target_mba)
{
if(l_port == 0)
{
- if((l_attr_eff_dimm_type_u8 == 1) || (l_attr_eff_dimm_type_u8 == 3)){
+ if(l_attr_eff_dimm_type_u8 != fapi::ENUM_ATTR_EFF_CUSTOM_DIMM_YES){
rc_num = l_data_buffer2_64.insertFromRight(l_sp_isdimm,8,8);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
rc_num = l_data_buffer2_64.insertFromRight(l_sp,0,8);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
}else{
@@ -2254,7 +2256,7 @@ fapi::ReturnCode cfg_byte_mask(const fapi::Target & i_target_mba)
{
rc = fapiGetScom(i_target_centaur,MBS_MCBIST01_MCBCMABQ_0x02011674,l_data_buffer2_64); if(rc) return rc;
//rc = fapiGetScom(i_target_mba,MBS_MCBIST01_MCBCMA1Q_0x02011672,l_data_buffer3_64); if(rc) return rc;
- if((l_attr_eff_dimm_type_u8 == 1) || (l_attr_eff_dimm_type_u8 == 3)){
+ if(l_attr_eff_dimm_type_u8 != fapi::ENUM_ATTR_EFF_CUSTOM_DIMM_YES){
rc_num = l_data_buffer2_64.insertFromRight(l_sp_isdimm,24,8);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
rc_num = l_data_buffer2_64.insertFromRight(l_sp,16,8);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
}else{
@@ -2273,7 +2275,7 @@ fapi::ReturnCode cfg_byte_mask(const fapi::Target & i_target_mba)
{
if(l_port == 0)
{
- if((l_attr_eff_dimm_type_u8 == 1) || (l_attr_eff_dimm_type_u8 == 3)){
+ if(l_attr_eff_dimm_type_u8 != fapi::ENUM_ATTR_EFF_CUSTOM_DIMM_YES){
rc_num = l_data_buffer2_64.insertFromRight(l_sp_isdimm,8,8);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
rc_num = l_data_buffer2_64.insertFromRight(l_sp,0,8);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
}else{
@@ -2291,7 +2293,7 @@ fapi::ReturnCode cfg_byte_mask(const fapi::Target & i_target_mba)
else
{
rc = fapiGetScom(i_target_centaur,0x02011774,l_data_buffer2_64); if(rc) return rc;
- if((l_attr_eff_dimm_type_u8 == 1) || (l_attr_eff_dimm_type_u8 == 3)){
+ if(l_attr_eff_dimm_type_u8 != fapi::ENUM_ATTR_EFF_CUSTOM_DIMM_YES){
rc_num = l_data_buffer2_64.insertFromRight(l_sp_isdimm,24,8);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
rc_num = l_data_buffer2_64.insertFromRight(l_sp,16,8);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
}else{
OpenPOWER on IntegriCloud