summaryrefslogtreecommitdiffstats
path: root/src/usr/hwpf
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/hwpf')
-rw-r--r--src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_generic_shmoo.C1733
-rw-r--r--src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_generic_shmoo.H20
-rw-r--r--src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_address.C33
-rw-r--r--src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_shmoo_common.H6
-rw-r--r--src/usr/hwpf/hwp/dram_training/mss_termination_control.C90
5 files changed, 221 insertions, 1661 deletions
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 4e1a00b51..83abd1f5a 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.47 2013/04/25 12:14:00 sasethur Exp $
+// $Id: mss_generic_shmoo.C,v 1.45 2013/04/23 13:57:28 sasethur Exp $
// *!***************************************************************************
// *! (C) Copyright International Business Machines Corp. 1997, 1998
// *! All Rights Reserved -- Property of IBM
@@ -40,15 +40,17 @@
//------------------------------------------------------------------------------
// Version:|Author: | Date: | Comment:
// --------|--------|---------|--------------------------------------------------
-// 1.45 |abhijit |04/25/13 | added test type SIMPLE_FIX_RF and SHMOO_STRESS
-// 1.40 |abhijit |03/22/13 | Fixed boundary checks
-// 1.38 |abhijit |03/19/13 | included spare byte and ECC and fixed printing for RD_EYE
-// 1.36 |abhijit |03/19/13 | changed mcbist call position
-// 1.35 |abhijit |03/16/13 | fixed clearing of error map regs for mba23
-// 1.32 |abhijit |03/12/13 | new parallel schmoo under dev
-// 1.27 |abhijit |01/21/13 | fixed ISDIMM mapping need some workaround
-// 1.26 |abhijit |01/21/13 | fixed fw comments
-// 1.25 |abhijit |01/21/13 | fixed the constructor definition
+// 1.44 |bellows |04/22/13 | fixed fw comments
+// 1.43 |bellows |04/11/13 | quick fix for firmware delivery. Uninitialized varialbles: i_mcbtest, i_mcbpatt
+// 1.42 |abhijit |04/09/13 | added shmoo param
+// 1.40 |abhijit |03/22/13 | Fixed boundary checks
+// 1.38 |abhijit |03/19/13 | included spare byte and ECC and fixed printing for RD_EYE
+// 1.36 |abhijit |03/19/13 | changed mcbist call position
+// 1.35 |abhijit |03/16/13 | fixed clearing of error map regs for mba23
+// 1.32 |abhijit |03/12/13 | new parallel schmoo under dev
+// 1.27 |abhijit |01/21/13 | fixed ISDIMM mapping need some workaround
+// 1.26 |abhijit |01/21/13 | fixed fw comments
+// 1.25 |abhijit |01/21/13 | fixed the constructor definition
// 1.21 |sasethur|01/17/13 | Updated for sanity mcbist function
// 1.20 |abhijit |01/11/13 | Updated for change in setup_mcbist function
// 1.19 |aditya |01/07/13 | Updated for change in setup_mcbist function
@@ -59,8 +61,8 @@
// 1.12 |abhijit |15-Nov-12| Fixed FW review comments
// 1.11 |abhijit |29-Oct-12| added change for ISDIMM checker DQS.
// 1.9 |abhijit |22-Oct-12| added Write and read DQS.
-// 1.8 |abhijit |15-Oct-12| Updated multiple changes
-// 1.0 |varkeykv|27-Sep-11| Initial check in
+// 1.8 |abhijit |15-Oct-12|Updated multiple changes
+// 1.0 |varkeykv|27-Sep-11|Initial check in
//------------------------------------------------------------------------------
#include <fapi.H>
#include "mss_generic_shmoo.H"
@@ -80,7 +82,7 @@ using namespace fapi;
* constructor: generic_shmoo
* Description :Constructor used to initialize variables and do the initial settings
*
- * Parameters: i_target: mba; iv_port: 0, 1
+ * Parameters: i_target: mba; iv_port: 0, 1
* ---------------------------------------------------------------------------*/
generic_shmoo:: generic_shmoo(uint8_t addr,shmoo_type_t shmoo_mask,shmoo_algorithm_t shmoo_algorithm)
{
@@ -95,8 +97,8 @@ generic_shmoo:: generic_shmoo(uint8_t addr,shmoo_type_t shmoo_mask,shmoo_algorit
iv_pattern=0;
iv_test_type=0;
iv_dmm_type=0;
- iv_shmoo_param=0;
-
+ iv_shmoo_param=0;
+
for(int p=0;p<MAX_PORT;++p)
{
for(int i=0;i<iv_MAX_RANKS[p];++i)
@@ -127,22 +129,22 @@ generic_shmoo:: generic_shmoo(uint8_t addr,shmoo_type_t shmoo_mask,shmoo_algorit
if(shmoo_mask & WR_EYE)
{
FAPI_DBG("mss_generic_shmoo : WR_EYE selected %d",shmoo_mask);
- iv_shmoo_type = 2;
+ iv_shmoo_type = 0;
SHMOO[0].static_knob.min_val=0;
SHMOO[0].static_knob.max_val=512;
}
if(shmoo_mask & RD_EYE)
{
FAPI_DBG("mss_generic_shmoo : RD_EYE selected %d",shmoo_mask);
- iv_shmoo_type = 8;
+ iv_shmoo_type = 2;
SHMOO[2].static_knob.min_val=2;
SHMOO[2].static_knob.max_val=128;
}
if(shmoo_mask & WRT_DQS) //preet
{
- FAPI_INF("mss_generic_shmoo : WRT_DQS selected %d",shmoo_mask);
- iv_shmoo_type = 4;
+ FAPI_DBG("mss_generic_shmoo : WRT_DQS selected %d",shmoo_mask);
+ iv_shmoo_type = 1;
iv_DQS_ON = 1;
SHMOO[1].static_knob.min_val=0;
SHMOO[1].static_knob.max_val=512;
@@ -162,34 +164,28 @@ 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[iv_shmoo_type].MBA.P[i].S[j].K.nom_val,0);
- init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.right_err_cnt,0);
- init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.left_err_cnt,0);
init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.lb_regval,SHMOO[iv_shmoo_type].static_knob.min_val);
init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.rb_regval,SHMOO[iv_shmoo_type].static_knob.max_val);
- init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.lb_regval,20);
- init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.rb_regval,300);
init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.total_margin,0);
init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.right_margin_val,0);
init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.left_margin_val,0);
}
}
- // if(iv_DQS_ON == 1)
- // { for(int i=0;i<MAX_PORT;++i)
- // {
- // for(int j=0;j<iv_MAX_RANKS[i];++j) //initialize values for DQS
- // {
- // init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.nom_val,0);
- // // init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.lb_regval,SHMOO[iv_shmoo_type].static_knob.min_val);
- // // init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.rb_regval,SHMOO[iv_shmoo_type].static_knob.max_val);
- // init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.lb_regval,20);
- // init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.rb_regval,300);
- // init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.total_margin,0);
- // init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.right_margin_val,0);
- // init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.left_margin_val,0);
- // }
- // }
- // }
+ if(iv_DQS_ON == 1)
+ { for(int i=0;i<MAX_PORT;++i)
+ {
+ for(int j=0;j<iv_MAX_RANKS[i];++j) //initialize values for DQS
+ {
+ init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.nom_val,0);
+ init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.lb_regval,SHMOO[iv_shmoo_type].static_knob.min_val);
+ init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.rb_regval,SHMOO[iv_shmoo_type].static_knob.max_val);
+ init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.total_margin,0);
+ init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.right_margin_val,0);
+ init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.left_margin_val,0);
+ }
+ }
+ }
}
/*------------------------------------------------------------------------------
@@ -207,17 +203,12 @@ fapi::ReturnCode generic_shmoo::run(const fapi::Target & i_target,uint32_t *o_ri
iv_shmoo_param=i_shmoo_param;
ecmdDataBufferBase l_data_buffer1_64(64);
- uint8_t l_dram_width=0;
-
- rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_WIDTH, &i_target, l_dram_width); 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_SCHMOO_TEST_VALID, &i_target, l_attr_schmoo_test_type_u8); if(rc) return rc;
-
-
iv_MAX_RANKS[0]=num_ranks_per_dimm[0][0]+num_ranks_per_dimm[0][1];
iv_MAX_RANKS[1]=num_ranks_per_dimm[1][0]+num_ranks_per_dimm[1][1];
@@ -249,34 +240,7 @@ fapi::ReturnCode generic_shmoo::run(const fapi::Target & i_target,uint32_t *o_ri
FAPI_ERR("generic_shmoo::run MSS Generic Shmoo failed initial Sanity Check. Memory not in an all pass Condition");
return rc;
}
- }else if(l_attr_schmoo_test_type_u8 == 4){
-
- iv_shmoo_type=4;
- //FAPI_INF("\n ABHIJIT IS HERE 1111 \n");
- rc=get_all_noms_dqs(i_target);if(rc) return rc;
- iv_shmoo_type=2;
- //FAPI_INF("\n ABHIJIT IS HERE 2222 \n");
- rc=get_all_noms(i_target);if(rc) return rc;
- rc=schmoo_setup_mcb(i_target);if(rc) return rc;
- //Find RIGHT BOUND OR SETUP BOUND
- rc=find_bound(i_target,RIGHT);if(rc) return rc;
- //FAPI_INF("\n ABHIJIT IS HERE 3333 \n");
- //Find LEFT BOUND OR HOLD BOUND
- rc=find_bound(i_target,LEFT);if(rc) return rc;
- iv_shmoo_type=4;
-
- if(l_dram_width == 4 ){
- rc=get_margin_dqs_by4(i_target);if(rc) return rc;
}else{
- //FAPI_INF("\n ABHIJIT IS HERE 222 \n");
- rc=get_margin_dqs_by8(i_target);if(rc) return rc;
- }
- //FAPI_INF("\n before the call \n");
- rc=print_report_dqs(i_target);if(rc) return rc;
-
-
-
- } else {
// rc=sanity_check(i_target); // Run MCBIST by default before for every schmoo to check if memory is in good condition.
// if(!rc.ok())
// {
@@ -286,7 +250,6 @@ fapi::ReturnCode generic_shmoo::run(const fapi::Target & i_target,uint32_t *o_ri
// If memory is OK then we continue to gather nominals and config values
// Now Read nominal values for all knobs configured
// FAPI_DBG("mss_generic_shmoo : run() :read nominal values ");
-
rc=get_all_noms(i_target);if(rc) return rc;
rc=schmoo_setup_mcb(i_target);if(rc) return rc;
//Find RIGHT BOUND OR SETUP BOUND
@@ -372,11 +335,6 @@ fapi::ReturnCode generic_shmoo::do_mcbist_test(const fapi::Target & i_target)
rc = fapiPutScom(i_target,0x0201176e,l_data_buffer_64); if(rc) return(rc);
rc = fapiPutScom(i_target,0x0201176f,l_data_buffer_64); if(rc) return(rc);
- rc = fapiPutScom(i_target,MBS_MCBIST01_MCB_ERRCNTA1Q_0x02011664,l_data_buffer_64); if(rc) return(rc);
- rc = fapiPutScom(i_target,MBS_MCBIST01_MCB_ERRCNTA2Q_0x02011665,l_data_buffer_64); if(rc) return(rc);
- rc = fapiPutScom(i_target,MBS_MCBIST01_MCB_ERRCNTB1Q_0x02011667,l_data_buffer_64); if(rc) return(rc);
- rc = fapiPutScom(i_target,MBS_MCBIST01_MCB_ERRCNTB2Q_0x02011668,l_data_buffer_64); if(rc) return(rc);
-
rc = start_mcb(i_target);
if(rc)
{
@@ -522,83 +480,6 @@ fapi::ReturnCode generic_shmoo::check_error_map(const fapi::Target & i_target,ui
}
return rc;
}
-
-fapi::ReturnCode generic_shmoo::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 rc;
-uint8_t l_nibble=0;
-uint8_t l_start_bit=0;
-uint16_t l_err_cnt_C=0;
-uint8_t rc_ecmd=0;
-uint8_t l_length_buffer=7;
-uint8_t l_val=0;
-
-
-input_type l_input_type_e = ISDIMM_DQ;
-ecmdDataBufferBase data_buffer_64(64);
-ecmdDataBufferBase data_buffer_64_1(64);
-
-if(iv_dmm_type==1)
- {
-
- //FAPI_INF("\n ISDIMM input byte=%d and nibble=%d and bit returned is %d \n",l_byte,l_nibble,l_val);
- rc=rosetta_map(i_target,port,l_input_type_e,bit,0,l_val);if(rc) return rc;
- //FAPI_INF("\n ISDIMM input byte=%d and nibble=%d and bit returned is %d \n",l_byte,l_nibble,l_val);
- l_nibble=l_val/4;
-
- }else{
-
-l_nibble=bit/4;
-}
-
-if(port==0)
- {
- if(l_nibble<9)
- {
- rc = fapiGetScom(i_target,MBS_MCBIST01_MCB_ERRCNTA1Q_0x02011664,data_buffer_64); if(rc) return rc;
- l_start_bit=l_nibble*7;
- rc_ecmd=data_buffer_64.extractToRight(&l_err_cnt_C,l_start_bit,l_length_buffer);if (rc_ecmd){ rc.setEcmdError(rc_ecmd); return rc;}
- }
- else
- {
- rc = fapiGetScom(i_target,MBS_MCBIST01_MCB_ERRCNTA2Q_0x02011665,data_buffer_64); if(rc) return rc;
- l_nibble=l_nibble-9;
- l_start_bit=l_nibble*7;
- rc_ecmd=data_buffer_64.extractToRight(&l_err_cnt_C,l_start_bit,l_length_buffer);if (rc_ecmd){ rc.setEcmdError(rc_ecmd); return rc;}
- }
- }else
- {
- if(l_nibble<9)
- {
- rc = fapiGetScom(i_target,MBS_MCBIST01_MCB_ERRCNTB1Q_0x02011667,data_buffer_64_1); if(rc) return rc;
- l_start_bit=l_nibble*7;
- rc_ecmd=data_buffer_64.extractToRight(&l_err_cnt_C,l_start_bit,l_length_buffer);if (rc_ecmd){ rc.setEcmdError(rc_ecmd); return rc;}
- }
- else
- {
- rc = fapiGetScom(i_target,MBS_MCBIST01_MCB_ERRCNTB2Q_0x02011668,data_buffer_64_1); if(rc) return rc;
- l_nibble=l_nibble-9;
- l_start_bit=l_nibble*7;
- rc_ecmd=data_buffer_64.extractToRight(&l_err_cnt_C,l_start_bit,l_length_buffer);if (rc_ecmd){ rc.setEcmdError(rc_ecmd); return rc;}
- }
- }
- if(bound==RIGHT)
- {
- if(l_err_cnt_C){
- SHMOO[iv_shmoo_type].MBA.P[port].S[rank].K.right_err_cnt[bit][rank_pair]=l_err_cnt_C;
- }
- FAPI_INF("\n THE PORT=%d Rank=%d dq=%d and error count=%d \n",port,rank,bit,SHMOO[iv_shmoo_type].MBA.P[port].S[rank].K.right_err_cnt[bit][rank_pair]);
- }else {
- if(l_err_cnt_C){
- SHMOO[iv_shmoo_type].MBA.P[port].S[rank].K.left_err_cnt[bit][rank_pair]=l_err_cnt_C;
-}
- FAPI_INF("\n THE PORT=%d Rank=%d dq=%d and error count=%d \n",port,rank,bit,SHMOO[iv_shmoo_type].MBA.P[port].S[rank].K.left_err_cnt[bit][rank_pair]);
- }
- return rc;
-
-}
-
-
/*------------------------------------------------------------------------------
* Function: init_multi_array
* Description : This function do the initialization of various schmoo parameters
@@ -679,12 +560,12 @@ fapi::ReturnCode generic_shmoo::get_all_noms(const fapi::Target & i_target)
FAPI_DBG("mss_generic_shmoo : get_all_noms : Reading in all nominal values");
- if(iv_shmoo_type == 4)
+ if(iv_shmoo_type == 1)
{
l_input_type_e = WR_DQS;
}
- else if(iv_shmoo_type == 8)
+ else if(iv_shmoo_type == 2)
{
l_input_type_e = RD_DQ;
@@ -724,61 +605,6 @@ fapi::ReturnCode generic_shmoo::get_all_noms(const fapi::Target & i_target)
return rc;
}
-fapi::ReturnCode generic_shmoo::get_all_noms_dqs(const fapi::Target & i_target)
-{
- fapi::ReturnCode rc;
-
- uint8_t l_rnk;
- //uint8_t i_rnk=0;
- uint8_t i_rp=0;
- uint32_t val=0;
- //uint8_t l_dq=0;
- uint8_t l_p=0;
- uint8_t l_max_nibble=20;
- uint8_t rank=0;
- uint8_t l_n=0;
- FAPI_INF("mss_generic_shmoo : get_all_noms_dqs : Reading in all nominal values and schmoo type=%d \n",iv_shmoo_type);
- if(iv_dmm_type==1)
- {
-
- l_max_nibble=18;
- }
-
- input_type_t l_input_type_e = WR_DQS;
- access_type_t l_access_type_e = READ ;
- FAPI_DBG("mss_generic_shmoo : get_all_noms : Reading in all nominal values");
-
-
- if(iv_shmoo_type == 4)
- {
- l_input_type_e = WR_DQS;
-
- }
-
-
- for (l_p=0;l_p<MAX_PORT;l_p++){
- for (l_rnk=0;l_rnk<iv_MAX_RANKS[l_p];++l_rnk)
- {// Byte loop
- rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc;
- rank=valid_rank[l_rnk];
- rc = mss_getrankpair(i_target,l_p,rank,&i_rp,valid_rank);if(rc) return rc;
- for (l_n=0; l_n<l_max_nibble;l_n++){
-
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_n,0,val);if(rc) return rc;
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[rank].K.nom_val[l_n][i_rp]=val;
- FAPI_INF("Nominal Value for port=%d rank=%d and rank pair=%d and dqs=%d is %d",l_p,rank,i_rp,l_n,SHMOO[iv_shmoo_type].MBA.P[l_p].S[rank].K.nom_val[l_n][i_rp]);
- }
- }
- }
-
-
-
-
-
- return rc;
-}
-
-
/*------------------------------------------------------------------------------
* Function: knob_update
* Description : This is a key function is used to find right and left bound using new algorithm -- there is an option u can chose not to use it by setting a flag
@@ -801,7 +627,7 @@ fapi::ReturnCode generic_shmoo::knob_update(const fapi::Target & i_target,bound_
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;
@@ -824,7 +650,7 @@ fapi::ReturnCode generic_shmoo::knob_update(const fapi::Target & i_target,bound_
}
}
- if(scenario == 8) {
+ if(scenario == 2) {
l_input_type_e = RD_DQ;
l_max_limit=127;
}
@@ -848,15 +674,13 @@ fapi::ReturnCode generic_shmoo::knob_update(const fapi::Target & i_target,bound_
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=get_error_cnt(i_target,l_p,rank,l_rp,l_dq,bound);
if(schmoo_error_map[l_p][rank][l_n]==0){
SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
- //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq);
- //get_error_cnt(const fapi::Target & i_target,uint8_t port,uint8_t rank,uint8_t rank_pair,uint8_t bit)
+
}
if(SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]>l_max_limit){
@@ -877,7 +701,7 @@ fapi::ReturnCode generic_shmoo::knob_update(const fapi::Target & i_target,bound_
FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
return rc;
}
- //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq);
+
rc=check_error_map(i_target,l_p,pass);
if(rc)
{
@@ -922,7 +746,7 @@ fapi::ReturnCode generic_shmoo::knob_update(const fapi::Target & i_target,bound_
for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
//l_max=SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp];
- //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq,bound);
+
if(schmoo_error_map[l_p][rank][l_n]==0){
SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
@@ -984,1146 +808,96 @@ rc=check_error_map(i_target,l_p,pass);
* Description : This is a key function is used to find right and left bound using new algorithm -- there is an option u can chose not to use it by setting a flag
*
* Parameters: Target:MBA,bound:RIGHT/LEFT,scenario:type of schmoo,iv_port:0/1,rank:0-7,byte:0-7,nibble:0/1,bit:0-3,pass,
- * --------------------------------------------------------------------------- */
-fapi::ReturnCode generic_shmoo::knob_update_dqs_by4(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag)
-{
+ * ---------------------------------------------------------------------------
+fapi::ReturnCode generic_shmoo::knob_update_dqs(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t rank,uint8_t byte,uint8_t nibble,uint8_t bit,uint8_t pass)
+{
fapi::ReturnCode rc;
ecmdDataBufferBase data_buffer_64(64);
ecmdDataBufferBase data_buffer_64_1(64);
-
-
+ data_buffer_64.flushTo0();
+ data_buffer_64_1.flushTo0();
+ uint32_t l_current_val=0;
+ uint32_t l_max_value=0;
+ uint32_t l_min_value=0;
uint8_t l_rp=0;
- input_type_t l_input_type_e = WR_DQ;
- input_type_t l_input_type_e_dqs = WR_DQS;
+ input_type_t l_input_type_e = WR_DQS;
uint8_t l_dq=0;
access_type_t l_access_type_e = WRITE;
- uint8_t l_n=0;
- uint8_t l_dqs=4;
-
- uint8_t l_p=0;
- uint16_t l_delay=0;
- uint32_t __attribute__((unused)) l_max=0; //SW198827
- uint16_t l_max_limit=500;
- uint8_t rank=0;
- uint8_t l_rank=0;
- uint8_t l_SCHMOO_NIBBLES=20;
- uint8_t i_rp=0;
-
-
-
- if(iv_dmm_type==1)
+ if(scenario == 1)
{
- 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,&i_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_input_type_e = WR_DQS;
+ }
+ else if(scenario == 3)
{
- l_dq=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;
- //FAPI_INF("\n abhijit here after port=%d rank=%d \n",l_p,rank);
- for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
- l_dq=4*l_n;
- if(schmoo_error_map[l_p][rank][l_n]==0){
- FAPI_INF("\n value of nominal delay scenario=%d rank=%d for port=%d dqs=%d is %d ",l_dqs,rank,l_p,l_n,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);
- SHMOO[l_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_n][l_rp]=SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]+l_delay;
- FAPI_INF("\n value of delay scenario=%d rank=%d for port=%d dqs=%d is %d ",l_dqs,rank,l_p,l_n,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_n][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,1,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_n][l_rp]);if(rc) return rc;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- FAPI_INF("\n value of delay scenario=%d rank=%d for port=%d bit=%d is %d ",scenario,rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,1,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,1,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,1,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,1,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
- }
- //FAPI_INF("\n abhijit here before \n");
- if(SHMOO[l_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]>l_max_limit){
- schmoo_error_map[l_p][rank][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;
- }
+ l_input_type_e = RD_DQS;
+ }
- }
-
-
- 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++){
- FAPI_INF("\n restoring nominal values for dqs=%d port=%d rank=%d is %d \n",l_n,l_p,rank,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,1,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);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(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,1,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+4;
- }
- }
- }
- }
-
-
- }
-
- }
-
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;
- 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_max=SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp];
-
-
- if(schmoo_error_map[l_p][rank][l_n]==0){
- SHMOO[l_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_n][l_rp]=SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]-l_delay;
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,1,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_n][l_rp]);if(rc) return rc;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,1,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,1,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,1,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,1,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
- }
- if(SHMOO[l_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp] == 0){
- schmoo_error_map[l_p][rank][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(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,1,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);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(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,1,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+4;
- }
- }
- }
- }
- }
-
-
- }
-
- return rc;
-}
-fapi::ReturnCode generic_shmoo::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 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;
- access_type_t l_access_type_e = WRITE;
- uint8_t l_n=0;
- uint8_t l_dqs=4;
- uint8_t l_my_dqs=0;
-
-
- uint8_t l_p=0;
- uint16_t l_delay=0;
- uint32_t __attribute__((unused)) l_max=0; //SW198827
- uint16_t l_max_limit=500;
- uint8_t rank=0;
- uint8_t l_rank=0;
- uint8_t l_SCHMOO_NIBBLES=20;
- uint8_t i_rp=0;
-
-
-
- if(iv_dmm_type==1)
- {
- l_SCHMOO_NIBBLES=18;
- }
- uint8_t l_dqs_arr[18]={0,9,1,10,2,11,3,12,4,13,5,14,6,15,7,16,8,17};
- //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,&i_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_my_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;
- //FAPI_INF("\n abhijit here after port=%d rank=%d \n",l_p,rank);
- for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
- l_dq=4*l_n;
- l_my_dqs=l_dqs_arr[l_n];
- if(schmoo_error_map[l_p][rank][l_n]==0){
- FAPI_INF("\n value of nominal delay scenario=%d rank=%d for port=%d dqs=%d is %d ",l_dqs,rank,l_p,l_my_dqs,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_my_dqs][l_rp]);
- SHMOO[l_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_my_dqs][l_rp]=SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_my_dqs][l_rp]+l_delay;
- FAPI_INF("\n value of delay scenario=%d rank=%d for port=%d dqs=%d is %d ",l_dqs,rank,l_p,l_my_dqs,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_my_dqs][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_my_dqs,0,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_my_dqs][l_rp]);if(rc) return rc;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- FAPI_INF("\n value of delay scenario=%d rank=%d for port=%d bit=%d is %d ",scenario,rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
- }
- //FAPI_INF("\n abhijit here before \n");
- if(SHMOO[l_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]>l_max_limit){
- schmoo_error_map[l_p][rank][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++){
- FAPI_INF("\n restoring nominal values for dqs=%d port=%d rank=%d is %d \n",l_n,l_p,rank,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);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(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,1,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+4;
- }
- }
- }
- }
-
-
-
- }
-
- }
-
- 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_my_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_my_dqs=l_dqs_arr[l_n];
- l_max=SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp];
-
-
- if(schmoo_error_map[l_p][rank][l_n]==0){
- SHMOO[l_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_my_dqs][l_rp]=SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_my_dqs][l_rp]-l_delay;
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_my_dqs,0,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_my_dqs][l_rp]);if(rc) return rc;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
- }
- if(SHMOO[l_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp] == 0){
- schmoo_error_map[l_p][rank][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(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);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(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,1,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+4;
- }
- }
- }
- }
- }
-
-
- }
-
- return rc;
-}
-fapi::ReturnCode generic_shmoo::knob_update_dqs_by8(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_p=0;
- uint16_t l_delay=0;
- uint32_t __attribute__((unused)) l_max=0; //SW198827
- uint16_t l_max_limit=500;
- uint8_t rank=0;
- uint8_t l_rank=0;
- uint8_t __attribute__((unused))l_SCHMOO_BYTES=10; //SW198827
- uint8_t l_SCHMOO_NIBBLES=20;
-
- uint8_t i_rp=0;
-
-
-
-
-
-
- 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,&i_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_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;
- //FAPI_INF("\n abhijit here after port=%d rank=%d \n",l_p,rank);
- for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
- l_dq=4*l_n;
- if((schmoo_error_map[l_p][rank][l_n]==0)&&(schmoo_error_map[l_p][rank][l_n+1]==0)){
- FAPI_INF("\n value of nominal delay scenario=%d rank=%d for port=%d dqs=%d is %d ",l_scen_dqs,rank,l_p,l_n,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);
- SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_n][l_rp]=SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]+l_delay;
- FAPI_INF("\n value of delay scenario=%d rank=%d for port=%d dqs=%d is %d ",l_scen_dqs,rank,l_p,l_n,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_n][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_n][l_rp]);if(rc) return rc;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- FAPI_INF("\n value of delay scenario=%d rank=%d for port=%d bit=%d is %d ",scenario,rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
-
- }
- //FAPI_INF("\n abhijit here before \n");
- if(SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]>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;
- l_dqs=l_dqs+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++){
- FAPI_INF("\n restoring nominal values for dqs=%d port=%d rank=%d is %d \n",l_n,l_p,rank,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);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(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,1,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+4;
- }
- }
- }
- }
-
-
-
- }
-
- }
-
- 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_max=SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp];
-
-
- if((schmoo_error_map[l_p][rank][l_n]==0)&&(schmoo_error_map[l_p][rank][l_n+1]==0)){
- SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_n][l_rp]=SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]-l_delay;
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_n][l_rp]);if(rc) return rc;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
- }
- if(SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp] == 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;
- l_dqs=l_dq+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++){
- FAPI_INF("\n restoring nominal values for dqs=%d port=%d rank=%d is %d \n",l_n,l_p,rank,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);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(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,1,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+4;
- }
- }
- }
- }
- }
-
+ l_min_value=SHMOO[scenario].static_knob.min_val;
+ FAPI_INF(" curr val in left above = %d and pass=%d ",l_current_val,pass);
+ for(l_current_val=SHMOO[scenario].MBA.P[iv_port].S[rank].K.nom_val[l_dq][l_rp];((l_current_val >= 20)&&(pass==1));l_current_val-=20)
+ {
+ //use saurabh function for writing here
+ FAPI_INF(" curr val in left = %d and pass=%d ",l_current_val,pass);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,iv_port,0,l_input_type_e,l_dq,0,l_current_val);if(rc) return rc;
+
+ rc=do_mcbist_test(i_target,rank,byte,nibble,pass);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+ }
+ if(!pass)
+ {
+ SHMOO[scenario].MBA.P[iv_port].S[rank].K.lb_regval[l_dq][l_rp]=l_current_val;
+ }
+ FAPI_INF(" left bound = %d ",SHMOO[scenario].MBA.P[iv_port].S[rank].K.rb_regval[l_dq][l_rp]);
+ l_current_val=SHMOO[scenario].MBA.P[iv_port].S[rank].K.nom_val[l_dq][l_rp];
+ rc=mss_access_delay_reg(i_target,l_access_type_e,iv_port,0,l_input_type_e,l_dq,0,l_current_val);if(rc) return rc;
}
-
- 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_p=0;
- uint16_t l_delay=0;
- uint32_t __attribute__((unused)) l_max=0; //SW198827
- uint16_t l_max_limit=500;
- uint8_t rank=0;
- uint8_t l_rank=0;
- uint8_t __attribute__((unused)) l_SCHMOO_BYTES=10; //SW198827
- uint8_t l_SCHMOO_NIBBLES=20;
-
- uint8_t i_rp=0;
-
-
-
- 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,&i_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;
- //FAPI_INF("\n abhijit here after port=%d rank=%d \n",l_p,rank);
- for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
- l_dq=4*l_n;
- l_dqs=l_n/2;
- FAPI_INF("\n the value of error check is %d \n",schmoo_error_map[l_p][rank][l_n]);
- if((schmoo_error_map[l_p][rank][l_n]==0)&&(schmoo_error_map[l_p][rank][l_n+1]==0)){
- FAPI_INF("\n value of nominal delay scenario=%d rank=%d for port=%d dqs=%d is %d ",l_scen_dqs,rank,l_p,l_dqs,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_dqs][l_rp]);
- SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_dqs][l_rp]=SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_dqs][l_rp]+l_delay;
- FAPI_INF("\n value of delay scenario=%d rank=%d for port=%d dqs=%d is %d ",l_scen_dqs,rank,l_p,l_dqs,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_dqs][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_dqs,1,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_dqs][l_rp]);if(rc) return rc;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- FAPI_INF("\n value of delay scenario=%d rank=%d for port=%d bit=%d is %d ",scenario,rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,1,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,1,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,1,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,1,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,1,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,1,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,1,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,1,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
-
- }
- //FAPI_INF("\n abhijit here before \n");
- if(SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_dqs][l_rp]>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++){
- FAPI_INF("\n restoring nominal values for dqs=%d port=%d rank=%d is %d \n",l_n,l_p,rank,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,1,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);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(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,1,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+4;
- }
- }
- }
- }
-
-
-
- }
-
- }
-
- if(bound==LEFT)
+ else 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_max=SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp];
- 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[l_scen_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_dqs][l_rp]=SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_dqs][l_rp]-l_delay;
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_dqs,1,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_dqs][l_rp]);if(rc) return rc;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,1,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,1,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,1,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,1,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,1,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,1,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,1,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,1,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
- }
- if(SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_dqs][l_rp] == 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");
+ {
+ l_max_value=SHMOO[scenario].static_knob.max_val;
+ for(l_current_val=SHMOO[scenario].MBA.P[iv_port].S[rank].K.nom_val[l_dq][l_rp];((l_current_val<l_max_value)&&(pass==1));l_current_val+=100)
+ {
+ //use saurabh function for writing here
+ FAPI_INF(" curr val = %d ",l_current_val);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,iv_port,0,l_input_type_e,l_dq,0,l_current_val);if(rc) return rc;
+
+ rc=do_mcbist_test(i_target,rank,byte,nibble,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(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,1,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);if(rc) return rc;
-
- }
- }
- }
+ }
+ }
+ if(!pass)
+ {
+ SHMOO[scenario].MBA.P[iv_port].S[rank].K.rb_regval[l_dq][l_rp]=l_current_val;
+ }
+ l_current_val=SHMOO[scenario].MBA.P[iv_port].S[rank].K.nom_val[l_dq][l_rp];
- 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(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,1,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+4;
- }
- }
- }
- }
- }
-
+ rc=mss_access_delay_reg(i_target,l_access_type_e,iv_port,0,l_input_type_e,l_dq,0,l_current_val);if(rc) return rc;
+ FAPI_INF(" right bound = %d ",SHMOO[scenario].MBA.P[iv_port].S[rank].K.rb_regval[l_dq][l_rp]);
+ }
- }
-
- return rc;
+ }
+ return rc;
}
-
+*/
/*------------------------------------------------------------------------------
* Function: find_bound
* Description : This function calls the knob_update for each DQ which is used to find bound that is left/right according to schmoo type
@@ -2131,50 +905,32 @@ rc=check_error_map(i_target,l_p,pass);
* Parameters: Target:MBA,bound:RIGHT/LEFT,
* ---------------------------------------------------------------------------*/
fapi::ReturnCode generic_shmoo::find_bound(const fapi::Target & i_target,bound_t bound){
- uint8_t l_bit=0;
+ uint8_t l_bit;
fapi::ReturnCode rc;
uint8_t pass=0;
- uint8_t l_dram_width=0;
bool flag=false;
- rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_WIDTH, &i_target, l_dram_width); if(rc) return rc;
+
FAPI_INF("generic_shmoo::find_bound running find_bound function ");
- //rc=knob_update_dqs_by8_isdimm(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc;
- if(iv_DQS_ON == 1){
- pass=0;
- if(l_dram_width == 4){
- if(iv_dmm_type==1)
- {
- rc=knob_update_dqs_by4_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_type,l_bit,pass,flag); if(rc) return rc;
- }
- }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;
- }else{
- rc=knob_update_dqs_by8(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{
- //Bit loop
+
+
+
+ //Bit loop
for(l_bit=0;l_bit< MAX_BITS;++l_bit)
{
// preetham function here
pass=0;
- FAPI_INF("\n abhijit is inside find bound and schmoo type is %d \n",iv_shmoo_type);
+ //FAPI_INF("\n abhijit is inside find bound 0 \n");
rc=knob_update(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc;
}
- }
+
return rc;
}
@@ -2247,11 +1003,11 @@ fapi::ReturnCode generic_shmoo::print_report(const fapi::Target & i_target)
{
l_dq=8*l_byte+4*l_nibble+l_bit;
- if(iv_shmoo_type==2)
+ if(iv_shmoo_type==0)
{
FAPI_INF("WR_EYE %d\t%d\t%d\t%d\t%d\t%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n ",l_mbapos,l_p,i_rank,l_byte,l_nibble,l_bit,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.total_margin[l_dq][l_rp],l_attr_mss_freq_u32,iv_shmoo_param);
}
- if(iv_shmoo_type==8)
+ if(iv_shmoo_type==2)
{
FAPI_INF("RD_EYE %d\t%d\t%d\t%d\t%d\t%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n ",l_mbapos,l_p,i_rank,l_byte,l_nibble,l_bit,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.total_margin[l_dq][l_rp],l_attr_mss_freq_u32,iv_shmoo_param);
}
@@ -2264,99 +1020,6 @@ fapi::ReturnCode generic_shmoo::print_report(const fapi::Target & i_target)
return rc;
}
-
- fapi::ReturnCode generic_shmoo::print_report_dqs(const fapi::Target & i_target)
-{
- fapi::ReturnCode rc;
-
- uint8_t l_rnk,l_nibble;
- //uint8_t l_dq=0;
- uint8_t l_rp=0;
- uint8_t l_p=0;
- uint8_t i_rank=0;
- uint8_t l_mbapos = 0;
- uint32_t l_attr_mss_freq_u32 = 0;
- uint32_t l_attr_mss_volt_u32 = 0;
- uint8_t l_attr_eff_dimm_type_u8 = 0;
- uint8_t l_attr_eff_num_drops_per_port_u8 = 0;
- uint8_t l_attr_eff_dram_width_u8 = 0;
- fapi::Target l_target_centaur;
- uint8_t l_SCHMOO_NIBBLES=20;
- uint8_t l_by8_dqs=0;
-
-
- if(iv_dmm_type==1)
- {
- l_SCHMOO_NIBBLES=18;
- }
-
- rc = fapiGetParentChip(i_target, l_target_centaur); if(rc) return rc;
-
- 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_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;
-
- if(l_attr_eff_dram_width_u8 == 8){
- l_SCHMOO_NIBBLES=10;
- if(iv_dmm_type==1)
- {
- l_SCHMOO_NIBBLES=9;
- }
- }
-
-
-
- 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_attr_eff_dimm_type_u8, i_target.toEcmdString());
- if ( l_attr_eff_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_CDIMM )
- {
- FAPI_INF("It is a CDIMM");
- }
- else
- {
- FAPI_INF("It is an ISDIMM");
- }
- //FAPI_INF("num_drops_per_port = %d on %s.", l_attr_eff_num_drops_per_port_u8, i_target.toEcmdString());
- //FAPI_INF("num_ranks = %d on %s.", iv_MAX_RANKS,i_target.toEcmdString());
- //FAPI_INF("dram_width = %d on %s. \n\n", l_attr_eff_dram_width_u8, i_target.toEcmdString());
- //fprintf(fp, "Schmoo POS\tPort\tRank\tDQS\tNominal\t\tSetup_Limit\tHold_Limit\tWrD_Setup(ps)\tWrD_Hold(ps)\tEye_Width(ps)\tBitRate \n");
- FAPI_INF("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
- FAPI_INF("Schmoo POS\tPort\tRank\tDQS\tNominal\t\tSetup_Limit\tHold_Limit\tWrD_Setup(ps)\tWrD_Hold(ps)\tEye_Width(ps)\tBitRate ");
-
- iv_shmoo_type=4;
-
-
- for (l_p=0;l_p<MAX_PORT;l_p++){
- for (l_rnk=0;l_rnk<iv_MAX_RANKS[l_p];++l_rnk)
- { rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
- i_rank=valid_rank[l_rnk];
- rc = mss_getrankpair(i_target,l_p,i_rank,&l_rp,valid_rank);if(rc) return rc;
-
- for(l_nibble=0;l_nibble< l_SCHMOO_NIBBLES;++l_nibble)
- {
-
- l_by8_dqs=l_nibble;
- if(l_attr_eff_dram_width_u8 == 8){
- l_by8_dqs=l_nibble*2;
-
- }
- //fprintf(fp,"WR_DQS %d\t%d\t%d\t%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n ",l_mbapos,l_p,i_rank,l_nibble,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.total_margin[l_by8_dqs][l_rp],l_attr_mss_freq_u32);
- FAPI_INF("WR_DQS %d\t%d\t%d\t%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n ",l_mbapos,l_p,i_rank,l_nibble,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.total_margin[l_by8_dqs][l_rp],l_attr_mss_freq_u32);
-
-
-
-
- }
- }
- }
-
- //fclose(fp);
- return rc;
- }
//#endif
/*------------------------------------------------------------------------------
* Function: get_margin
@@ -2407,7 +1070,7 @@ fapi::ReturnCode generic_shmoo::get_margin(const fapi::Target & i_target)
{
l_dq=8*l_byte+4*l_nibble+l_bit;
//FAPI_INF(" the right bound = %d and nominal = %d",SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_dq][l_rp]);
- if(iv_shmoo_type==8)
+ if(iv_shmoo_type==2)
{
if(SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp] == 0){
//FAPI_INF("\n abhijit saurabh is here and dq=%d \n",l_dq);
@@ -2430,145 +1093,6 @@ fapi::ReturnCode generic_shmoo::get_margin(const fapi::Target & i_target)
return rc;
}
- fapi::ReturnCode generic_shmoo::get_margin_dqs_by4(const fapi::Target & i_target)
-{
- fapi::ReturnCode rc;
- uint8_t l_rnk;
- uint32_t l_attr_mss_freq_margin_u32 = 0;
- uint32_t l_freq=0;
- uint64_t l_cyc = 1000000000000000ULL;
- // uint8_t l_dq=0;
- uint8_t l_nibble=0;
- uint8_t l_rp=0;
- uint8_t l_p=0;
- uint8_t i_rank=0;
- uint64_t l_factor=0;
- uint64_t l_factor_ps=1000000000;
- uint8_t l_SCHMOO_NIBBLES=20;
-
- if(iv_dmm_type==1)
- {
- l_SCHMOO_NIBBLES=18;
- }
-
- //FAPI_INF(" the factor is % llu ",l_cyc);
-
- fapi::Target l_target_centaur;
- rc = fapiGetParentChip(i_target, l_target_centaur); if(rc) return rc;
- rc = FAPI_ATTR_GET(ATTR_MSS_FREQ, &l_target_centaur, l_attr_mss_freq_margin_u32); if(rc) return rc;
- l_freq=l_attr_mss_freq_margin_u32/2;
- l_cyc=l_cyc/l_freq;// converting to zepto to get more accurate data
- l_factor=l_cyc/128;
- //FAPI_INF("l_factor is % llu ",l_factor);
-
-
-
-
- for (l_p=0;l_p<MAX_PORT;l_p++){
- //FAPI_INF("\n Abhijit is here before %d \n",l_p);
- for (l_rnk=0;l_rnk<iv_MAX_RANKS[l_p];++l_rnk)
- {
-
- rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
- i_rank=valid_rank[l_rnk];
- rc = mss_getrankpair(i_target,l_p,i_rank,&l_rp,valid_rank);if(rc) return rc;
-
- //Nibble loop
- // FAPI_INF("\n Abhijit is outside %d \n",l_p);
- for(l_nibble=0;l_nibble<l_SCHMOO_NIBBLES;l_nibble++)
- {
- //FAPI_INF("\n Abhijit 11111 is here after schmoo type=%d and port=%d \n",iv_shmoo_type,l_p);
- //FAPI_INF(" the right bound = %d and nominal = %d",SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_nibble][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_nibble][l_rp]);
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_nibble][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_nibble][l_rp]-1;
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_nibble][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_nibble][l_rp]+1;
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_nibble][l_rp]=((SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_nibble][l_rp]-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_nibble][l_rp])*l_factor)/l_factor_ps;
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_nibble][l_rp]= ((SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_nibble][l_rp]-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_nibble][l_rp])*l_factor)/l_factor_ps;//((1/uint32_t_freq*1000000)/128);
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.total_margin[l_nibble][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_nibble][l_rp]+SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_nibble][l_rp];
- //FAPI_INF("\n Abhijit is here after %d and port=%d \n",l_nibble,l_p);
- //FAPI_INF("\n Abhijit is here after 2 %d \n",l_rnk);
- }
-
-
- }
-
- }
-
-
- return rc;
- }
-
- fapi::ReturnCode generic_shmoo::get_margin_dqs_by8(const fapi::Target & i_target)
-{
- fapi::ReturnCode rc;
- uint8_t l_rnk;
- uint32_t l_attr_mss_freq_margin_u32 = 0;
- uint32_t l_freq=0;
- uint64_t l_cyc = 1000000000000000ULL;
- //uint8_t l_dq=0;
- uint8_t l_nibble=0;
- uint8_t l_rp=0;
- uint8_t l_p=0;
- uint8_t i_rank=0;
- uint64_t l_factor=0;
- uint64_t l_factor_ps=1000000000;
- uint8_t l_SCHMOO_NIBBLES=20;
-
- if(iv_dmm_type==1)
- {
- l_SCHMOO_NIBBLES=9;
- }
-
- //FAPI_INF(" the factor is % llu ",l_cyc);
-
- fapi::Target l_target_centaur;
- rc = fapiGetParentChip(i_target, l_target_centaur); if(rc) return rc;
- rc = FAPI_ATTR_GET(ATTR_MSS_FREQ, &l_target_centaur, l_attr_mss_freq_margin_u32); if(rc) return rc;
- l_freq=l_attr_mss_freq_margin_u32/2;
- l_cyc=l_cyc/l_freq;// converting to zepto to get more accurate data
- l_factor=l_cyc/128;
- //FAPI_INF("l_factor is % llu ",l_factor);
-
-
-
-
- for (l_p=0;l_p<MAX_PORT;l_p++){
- //FAPI_INF("\n Abhijit is here before %d \n",l_p);
- for (l_rnk=0;l_rnk<iv_MAX_RANKS[l_p];++l_rnk)
- {
-
- rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
- i_rank=valid_rank[l_rnk];
- rc = mss_getrankpair(i_target,l_p,i_rank,&l_rp,valid_rank);if(rc) return rc;
-
- //Nibble loop
- //FAPI_INF("\n Abhijit is outside %d \n",l_p);
- for(l_nibble=0;l_nibble<l_SCHMOO_NIBBLES;l_nibble++)
- {
- if(iv_dmm_type==0)
- {
- if((l_nibble%2)){
- continue ;
- }
- }
- //FAPI_INF("\n Abhijit 11111 is here after schmoo type=%d and port=%d \n",iv_shmoo_type,l_p);
- FAPI_INF(" the port=%d rank=%d nibble=%d right bound = %d and nominal = %d",l_p,i_rank,l_nibble,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_nibble][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_nibble][l_rp]);
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_nibble][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_nibble][l_rp]-1;
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_nibble][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_nibble][l_rp]+1;
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_nibble][l_rp]=((SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_nibble][l_rp]-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_nibble][l_rp])*l_factor)/l_factor_ps;
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_nibble][l_rp]= ((SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_nibble][l_rp]-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_nibble][l_rp])*l_factor)/l_factor_ps;//((1/uint32_t_freq*1000000)/128);
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.total_margin[l_nibble][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_nibble][l_rp]+SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_nibble][l_rp];
- //FAPI_INF("\n Abhijit is here after %d and port=%d \n",l_nibble,l_p);
- //FAPI_INF("\n Abhijit is here after 2 %d \n",l_rnk);
- }
-
-
- }
-
- }
-
-
- return rc;
- }
/*------------------------------------------------------------------------------
* Function: get_min_margin
* Description : This function is used to get the minimum margin of all the schmoo margins
@@ -2632,20 +1156,16 @@ fapi::ReturnCode generic_shmoo::get_min_margin(const fapi::Target & i_target,uin
//uint32_t rc_num =0;
uint8_t l_pattern=0;
uint8_t l_testtype=0;
-
+ //uint8_t l_rank=0;
fapi::ReturnCode rc;
uint64_t l_start =0x0000000000000000ull;
uint64_t l_end = 0x0000000000000000ull;
- mcbist_test_mem i_mcbtest= CENSHMOO;
- mcbist_data_gen i_mcbpatt= ABLE_FIVE;
-
-
-
-
-
+ mcbist_test_mem i_mcbtest = CENSHMOO; // bellows: initialize to this type
+ mcbist_data_gen i_mcbpatt = ABLE_FIVE; // bellows: initialize to this data type
+
@@ -2738,15 +1258,6 @@ case 26 : i_mcbtest = R_ONLY;break;
case 27 : i_mcbtest = W_ONLY_RAND;break;
case 28 : i_mcbtest = R_ONLY_RAND;break;
case 29 : i_mcbtest = R_ONLY_MULTI;break;
-case 30 : i_mcbtest = SHORT;break;
-case 31 : i_mcbtest = SIMPLE_RAND_BARI;break;
-case 32 : i_mcbtest = W_R_INFINITE;break;
-case 33 : i_mcbtest = W_R_RAND_INFINITE;break;
-case 34 : i_mcbtest = R_INFINITE1;break;
-case 35 : i_mcbtest = R_INFINITE_RF;break;
-case 36 : i_mcbtest = MARCH;break;
-case 37 : i_mcbtest = SIMPLE_FIX_RF;break;
-case 38 : i_mcbtest = SHMOO_STRESS;break;
default : FAPI_INF("Wrong Test_type,so using default test_type");
}
rc = setup_mcbist(i_target, 0, i_mcbpatt, i_mcbtest, UNMASK_ALL, 0,iv_pattern,iv_test_type,0,0,l_start,l_end,iv_addr);if(rc) return rc;
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 440b44774..df73008ee 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.14 2013/04/25 08:23:52 sasethur Exp $
+// $Id: mss_generic_shmoo.H,v 1.13 2013/04/09 12:18:47 lapietra Exp $
// *!***************************************************************************
// *! (C) Copyright International Business Machines Corp. 1997, 1998
// *! All Rights Reserved -- Property of IBM
@@ -31,8 +31,8 @@
// *! DESCRIPTION : Memory Subsystem Generic Shmoo -- abstraction for HB
// *! CONTEXT : To make all shmoos share a common abstraction layer
// *!
-// *! OWNER NAME : Abhijit Saurabh Email: abhijit.saurabh@in.ibm.com
-// *! BACKUP NAME :
+// *! OWNER NAME : Varkey Varghese Email: varkey.kv@in.ibm.com
+// *! BACKUP NAME : Abhijit Saurabh Email: abhijit.saurabh@in.ibm.com
// *!
// *!***************************************************************************
// CHANGE HISTORY:
@@ -111,25 +111,17 @@ class generic_shmoo
void init_multi_array(uint32_t (&array)[MAX_DQ][MAX_RPS],uint32_t init_val); //initialize multi dim arrays to known value
fapi::ReturnCode init_multi_array_dqs(uint32_t (&array)[MAX_DQ][MAX_RPS],uint32_t init_val);
fapi::ReturnCode get_all_noms(const fapi::Target & i_target); //! Read in all the Nominal values of the relevant knobs
- fapi::ReturnCode get_all_noms_dqs(const fapi::Target & i_target); //! Read in all the Nominal values of the relevant knobs
fapi::ReturnCode find_bound(const fapi::Target & i_target,bound_t); // generic Right bound
fapi::ReturnCode knob_update(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag); // Increment or decrement the knob
- fapi::ReturnCode knob_update_dqs_by8(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(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag);
- fapi::ReturnCode print_report(const fapi::Target & i_target); // Print Shmoo report to STDOUT
- fapi::ReturnCode print_report_dqs(const fapi::Target & i_target);
- fapi::ReturnCode print_shmoo_parms();
+ fapi::ReturnCode knob_update_dqs(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t rank,uint8_t byte,uint8_t nibble,uint8_t bit,uint8_t pass);
+ fapi::ReturnCode print_report(const fapi::Target & i_target); // Print Shmoo report to file or STDOUT
+ fapi::ReturnCode print_shmoo_parms();
fapi::ReturnCode get_margin(const fapi::Target & i_target);
- fapi::ReturnCode get_margin_dqs_by8(const fapi::Target & i_target);
- fapi::ReturnCode get_margin_dqs_by4(const fapi::Target & i_target);
fapi::ReturnCode get_min_margin(const fapi::Target & i_target,uint32_t *o_right_min_margin,uint32_t *o_left_min_margin);
fapi::ReturnCode do_mcbist_test(const fapi::Target & i_target);
fapi::ReturnCode check_error_map(const fapi::Target & i_target,uint8_t port,uint8_t &pass);
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_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,uint8_t i_pattern,uint8_t i_test_type,uint32_t i_shmoo_param);
};
#endif
diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_address.C b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_address.C
index f36b459b8..21f435758 100644
--- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_address.C
+++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_address.C
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: mss_mcbist_address.C,v 1.11 2013/05/16 22:00:24 sasethur Exp $
+// $Id: mss_mcbist_address.C,v 1.10 2013/04/30 08:56:00 ppcaelab Exp $
// *!***************************************************************************
// *! (C) Copyright International Business Machines Corp. 1997, 1998, 2013
// *! All Rights Reserved -- Property of IBM
@@ -38,8 +38,6 @@
//-------------------------------------------------------------------------------
// Version:|Author: | Date: | Comment:
// --------|--------|---------|--------------------------------------------------
-// 1.11 |preeragh|17-May-13| Fixed FW Review Comments
-// 1.10 |preeragh|30-Apr-13| Fixed FW Review Comment
// 1.9 |bellows |04-Apr-13| Changed program to be Hostboot compliant
// 1.2 |bellows |03-Apr-13| Added Id and cleaned up a warning msg.
// 1.1 | |xx-Apr-13| Copied from original which is now known as mss_mcbist_address_default/_lab.C
@@ -51,17 +49,15 @@ extern "C"
{
using namespace fapi;
-#define MAX_ADDR_BITS 37
-#define MAX_VALUE_TWO 2
-
+#define MAX_STRING_LEN 80
#define DELIMITERS ","
fapi::ReturnCode address_generation(const fapi:: Target & i_target_mba,uint8_t i_port,mcbist_addr_mode i_addr_type,interleave_type i_add_inter_type,uint8_t i_rank,uint64_t &io_start_address, uint64_t &io_end_address)
{
fapi::ReturnCode rc;
-uint8_t l_num_ranks_per_dimm[MAX_VALUE_TWO][MAX_VALUE_TWO];
-uint8_t l_num_master_ranks[MAX_VALUE_TWO][MAX_VALUE_TWO];
+uint8_t l_num_ranks_per_dimm[2][2];
+uint8_t l_num_master_ranks[2][2];
uint8_t l_dram_gen=0;
uint8_t l_dram_banks=0;
uint8_t l_dram_rows=0;
@@ -108,7 +104,7 @@ FAPI_INF("ATTR_EFF_NUM_RANKS_PER_DIMM is %d ",l_num_ranks_per_dimm[1][1]);
FAPI_INF("ATTR_EFF_NUM_MASTER_RANKS_PER_DIMM l_num_master_p0_dim0 is %d ",l_num_master_ranks[0][0]);
FAPI_INF("ATTR_EFF_NUM_MASTER_RANKS_PER_DIMM l_num_master_p0_dim1 is %d ",l_num_master_ranks[0][1]);
FAPI_INF("ATTR_EFF_NUM_MASTER_RANKS_PER_DIMM l_num_master_p1_dim0 is %d ",l_num_master_ranks[1][0]);
-FAPI_INF("ATTR_EFF_NUM_MASTER_RANKS_PER_DIMM l_num_master_p1_dim1 is %d ",l_num_master_ranks[1][1]);
+FAPI_INF("ATTR_EFF_NUM_MASTER_RANKS_PER_DIMM is l_num_master_p1_dim1 %d ",l_num_master_ranks[1][1]);
//-------------------------------------------------------------------------------
@@ -188,14 +184,14 @@ return rc;
fapi::ReturnCode parse_addr(const fapi:: Target & i_target_mba, char addr_string[],uint8_t mr3_valid,uint8_t mr2_valid,uint8_t mr1_valid,uint8_t l_dram_rows,uint8_t l_dram_cols,uint8_t l_addr_inter)
{
fapi::ReturnCode rc;
-uint8_t i=MAX_ADDR_BITS;
+uint8_t i=37;
uint8_t l_slave_rank = 0;
uint8_t l_value;
uint32_t l_value32 = 0;
uint32_t l_sbit,rc_num;
uint32_t l_start=0;
-uint32_t l_len = 0;
+uint32_t l_len = 6;
uint64_t l_readscom_value = 0;
uint64_t l_end = 0;
uint64_t l_start_addr = 0;
@@ -203,7 +199,7 @@ uint8_t l_value_zero = 0;
uint8_t l_user_end_addr = 0;
ecmdDataBufferBase l_data_buffer_64(64);
ecmdDataBufferBase l_data_buffer_rd64(64);
-uint8_t l_attr_addr_mode = 3; //default Value - FULL Address Mode
+uint8_t l_attr_addr_mode = 3;
uint8_t l_num_cols = 0;
uint8_t l_num_rows = 0;
@@ -229,18 +225,17 @@ if(l_num_rows == 0 )
rc_num = l_data_buffer_64.flushTo0();
- l_sbit = 0;l_value =i;
- rc = fapiGetScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc;
- rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
- rc = fapiPutScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc;
- i--;
+ l_sbit = 0;l_value =i;
+ rc = fapiGetScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc;
+ rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
+ rc = fapiPutScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc;
+ i--;
l_sbit = 54;l_value =i;
rc = fapiGetScom(i_target_mba,0x030106c8,l_data_buffer_64);
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value,l_sbit ,6);
rc = fapiPutScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc;
i--;
-
//FAPI_INF("Inside strcmp ba2");
l_sbit = 48;l_value =i;
rc = fapiGetScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc;
@@ -947,7 +942,7 @@ rc = fapiPutScom(i_target_mba,0x030106d3,l_data_buffer_rd64); if(rc) return rc;
else
{
-l_attr_addr_mode = 3; //Default it for FW with Full Address Range
+l_attr_addr_mode = 3;
if(l_attr_addr_mode == 0)
{
diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_shmoo_common.H b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_shmoo_common.H
index f2a387a67..d6438580e 100644
--- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_shmoo_common.H
+++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_shmoo_common.H
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: mss_shmoo_common.H,v 1.13 2013/04/25 08:23:54 sasethur Exp $
+// $Id: mss_shmoo_common.H,v 1.12 2013/03/20 17:18:38 sasethur Exp $
// *!***************************************************************************
// *! (C) Copyright International Business Machines Corp. 1997, 1998
// *! All Rights Reserved -- Property of IBM
@@ -52,7 +52,7 @@ enum shmoo_type_t { TEST_NONE=0,MCBIST=1,WR_EYE=2, WRT_DQS=4,RD_EYE=8,RD_GATE=16
enum shmoo_algorithm_t { SEQ_LIN}; // Parallel bytes/ranks here .. no parallel targets in HB
const uint8_t NINE = 9;
const uint8_t MAX_RPS=4;// 4 Rank pairs in this design
-const uint8_t MAX_SHMOO=16;
+const uint8_t MAX_SHMOO=4;
const uint8_t MAX_RANK_DIMM=4;
const uint8_t MAX_NIBBLES=2;
const uint8_t MAX_BITS=4;
@@ -87,7 +87,5 @@ struct shmoo_knob_data_t{
uint32_t nom_val[MAX_DQ][MAX_RPS]; // nominal value of this instance of the knob
uint32_t right_margin_val[MAX_DQ][MAX_RPS];
uint32_t left_margin_val[MAX_DQ][MAX_RPS];
- uint32_t right_err_cnt[MAX_DQ][MAX_RPS];
- uint32_t left_err_cnt[MAX_DQ][MAX_RPS];
};
#endif
diff --git a/src/usr/hwpf/hwp/dram_training/mss_termination_control.C b/src/usr/hwpf/hwp/dram_training/mss_termination_control.C
index 376ed2724..148210bdb 100644
--- a/src/usr/hwpf/hwp/dram_training/mss_termination_control.C
+++ b/src/usr/hwpf/hwp/dram_training/mss_termination_control.C
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: mss_termination_control.C,v 1.20 2013/04/09 11:04:34 lapietra Exp $
+// $Id: mss_termination_control.C,v 1.21 2013/04/22 16:36:34 sasethur Exp $
/* File is created by SARAVANAN SETHURAMAN on Thur 29 Sept 2011. */
//------------------------------------------------------------------------------
@@ -43,6 +43,7 @@
//------------------------------------------------------------------------------
// Version:| Author: | Date: | Comment:
//---------|----------|---------|-----------------------------------------------
+// 1.21 | sasethur |16-Apr-13| Added DDR4 settings for rd_vref
// 1.20 | sasethur |09-Apr-13| Changed wr_vref register settings as per ddr3spec
// 1.19 | sasethur |05-Apr-13| Updated for port in parallel
// 1.18 | mwuu |25-Feb-13| Added return code per port for config slew FN
@@ -145,7 +146,7 @@ fapi::ReturnCode config_drv_imp(const fapi::Target & i_target_mba, uint8_t i_por
rc_num = rc_num | data_buffer.insertFromRight(enslice_ffedrv,56,4);
if (rc_num)
{
- FAPI_ERR( "config_rd_vref: Error in setting up buffer ");
+ FAPI_ERR( "config_drv_imp: Error in setting up buffer ");
rc.setEcmdError(rc_num);
return rc;
}
@@ -187,7 +188,7 @@ fapi::ReturnCode config_drv_imp(const fapi::Target & i_target_mba, uint8_t i_por
rc_num = rc_num | data_buffer.insertFromRight(enslice_ffedrv,56,4);
if (rc_num)
{
- FAPI_ERR( "config_rd_vref: Error in setting up buffer ");
+ FAPI_ERR( "config_drv_imp: Error in setting up buffer ");
rc.setEcmdError(rc_num);
return rc;
}
@@ -307,7 +308,7 @@ fapi::ReturnCode config_rcv_imp(const fapi::Target & i_target_mba, uint8_t i_por
rc_num = rc_num | data_buffer.insertFromRight(enslicepffeterm,56,4);
if (rc_num)
{
- FAPI_ERR( "config_drv_imp: Error in setting up buffer ");
+ FAPI_ERR( "config_rcv_imp: Error in setting up buffer ");
rc.setEcmdError(rc_num);
return rc;
}
@@ -349,7 +350,7 @@ fapi::ReturnCode config_rcv_imp(const fapi::Target & i_target_mba, uint8_t i_por
rc_num = rc_num | data_buffer.insertFromRight(enslicepffeterm,56,4);
if (rc_num)
{
- FAPI_ERR( "config_drv_imp: Error in setting up buffer ");
+ FAPI_ERR( "config_rcv_imp: Error in setting up buffer ");
rc.setEcmdError(rc_num);
return rc;
}
@@ -819,7 +820,7 @@ fapi::ReturnCode config_wr_dram_vref(const fapi::Target & i_target_mba, uint8_t
* VDD64500 = 64500, VDD65875 = 65875, VDD67250 = 67250, VDD68625 = 68625, VDD70000 = 70000,
* VDD71375 = 71375, VDD72750 = 72750, VDD74125 = 74125, VDD75500 = 75500, VDD76875 = 76875,
* VDD78250 = 78250, VDD79625 = 79625, VDD81000 = 81000
- * DDR3 supports upto 61000
+ * DDR3 supports upto 61000, DDR4 - full range
* ---------------------------------------------------------------------------*/
fapi::ReturnCode config_rd_cen_vref (const fapi::Target & i_target_mba, uint8_t i_port, uint32_t i_rd_cen_vref)
@@ -836,17 +837,80 @@ fapi::ReturnCode config_rd_cen_vref (const fapi::Target & i_target_mba, uint8_t
FAPI_SET_HWP_ERROR(rc, RC_MSS_INVALID_FN_INPUT_ERROR);
return rc;
}
- for(uint8_t i=0; i< MAX_RD_VREF; i++)
+
+ //if (rd_cen_vref == DDR3 rd_vref ) || (rd_cen_vref == DDR4)
+
+ if((i_rd_cen_vref == 61000) || (i_rd_cen_vref == 81000))
{
- if (rd_cen_vref_array[i] == i_rd_cen_vref)
- {
- rd_vref = i;
- break;
- }
+ rd_vref = 0xF;
+ }
+ else if((i_rd_cen_vref == 59625) || (i_rd_cen_vref == 79625))
+ {
+ rd_vref = 0xE;
+ }
+ else if((i_rd_cen_vref == 58250) || (i_rd_cen_vref == 78250))
+ {
+ rd_vref = 0xD;
+ }
+ else if((i_rd_cen_vref == 56875) || (i_rd_cen_vref == 76875))
+ {
+ rd_vref = 0xC;
+ }
+ else if((i_rd_cen_vref == 55500) || (i_rd_cen_vref == 75500))
+ {
+ rd_vref = 0xB;
+ }
+ else if((i_rd_cen_vref == 54125) || (i_rd_cen_vref == 74125))
+ {
+ rd_vref = 0xA;
+ }
+ else if((i_rd_cen_vref == 52750) || (i_rd_cen_vref == 72750))
+ {
+ rd_vref = 0x9;
+ }
+ else if((i_rd_cen_vref == 51375) || (i_rd_cen_vref == 71375))
+ {
+ rd_vref = 0x8;
+ }
+ else if((i_rd_cen_vref == 50000) || (i_rd_cen_vref == 70000))
+ {
+ rd_vref = 0x0;
+ }
+ else if((i_rd_cen_vref == 48625) || (i_rd_cen_vref == 68625))
+ {
+ rd_vref = 0x1;
+ }
+ else if((i_rd_cen_vref == 47250) || (i_rd_cen_vref == 67250))
+ {
+ rd_vref = 0x2;
+ }
+ else if((i_rd_cen_vref == 45875) || (i_rd_cen_vref == 65875))
+ {
+ rd_vref = 0x3;
+ }
+ else if((i_rd_cen_vref == 44500) || (i_rd_cen_vref == 64500))
+ {
+ rd_vref = 0x4;
+ }
+ else if((i_rd_cen_vref == 43125) || (i_rd_cen_vref == 63125))
+ {
+ rd_vref = 0x5;
+ }
+ else if((i_rd_cen_vref == 41750) || (i_rd_cen_vref == 61750))
+ {
+ rd_vref = 0x6;
+ }
+ else if((i_rd_cen_vref == 40375) || (i_rd_cen_vref == 60375))
+ {
+ rd_vref = 0x7;
+ }
+ else
+ {
+ rd_vref = 0x0;
}
rc = fapiGetScom(i_target_mba,
- DPHY01_DDRPHY_DP18_RX_PEAK_AMP_P0_0_0x800000060301143F,
+ DPHY01_DDRPHY_DP18_RX_PEAK_AMP_P0_0_0x800000060301143F,
data_buffer); if(rc) return rc;
rc_num = rc_num | data_buffer.insertFromRight(rd_vref,56,4);
if (rc_num)
OpenPOWER on IntegriCloud