diff options
author | Matt Ploetz <maploetz@us.ibm.com> | 2014-01-23 15:10:43 -0600 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2014-01-24 22:31:34 -0600 |
commit | cd661b2da361937ffa8e6cc1b2904116df78bd75 (patch) | |
tree | f07d16bbb55a13be082167eef5a764052c0fe36f /src/usr/hwpf/hwp/dram_training | |
parent | 87f89f151885654e56a6d04fd4861fcd68d6d88b (diff) | |
download | talos-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')
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{ |