summaryrefslogtreecommitdiffstats
path: root/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_generic_shmoo.C
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_generic_shmoo.C')
-rw-r--r--src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_generic_shmoo.C288
1 files changed, 228 insertions, 60 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 182452a34..9c0587787 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.67 2013/09/04 09:21:33 sasethur Exp $
+// $Id: mss_generic_shmoo.C,v 1.74 2013/10/04 10:58:13 sasethur Exp $
// *!***************************************************************************
// *! (C) Copyright International Business Machines Corp. 1997, 1998
// *! All Rights Reserved -- Property of IBM
@@ -33,14 +33,21 @@
// *! CONTEXT : To make all shmoos share a common abstraction layer
// *!
// *! OWNER NAME : Abhijit Saurabh Email: abhijit.saurabh@in.ibm.com
-// *! BACKUP NAME : Sidhartha Vijay Email: sidvijay@in.ibm.com
+// *! BACKUP NAME : Siddharth Vijay Email: sidvijay@in.ibm.com
// *!
// *!***************************************************************************
// CHANGE HISTORY:
//------------------------------------------------------------------------------
// Version:|Author: | Date: | Comment:
// --------|--------|---------|--------------------------------------------------
-// 1.67 |abhijit |4-sep-13 | fixed fw comments for the host boot
+// 1.74 |abhijit |4-oct-13 | fixed fw comments
+// 1.73 |abhijit |1-oct-13 | fixed write dqs by 8 for isdimm
+// 1.72 |abhijit |20-sep-13| fixed printing of rd eye report as -1 for not finding left bound
+// 1.71 |abhijit |18-sep-13| changed for mcbist call
+// 1.70 |abhijit |12-sep-13| Fixed binary debug prints
+// 1.69 |abhijit |12-sep-13| Fixed binary debug prints
+// 1.68 |abhijit |11-sep-13| Added Binary Schmoo algorithm
+// 1.67 |abhijit |4-sep-13 | fixed fw comment
// 1.65 |abhijit |8-aug-13 | added binary schmoo first phase and modified training call
// 1.64 |abhijit |17-jul-13| added rd dqs phase 2
// 1.63 |abhijit |19-jun-13| fixed warnings in schmoo
@@ -238,7 +245,7 @@ fapi::ReturnCode generic_shmoo::shmoo_save_rest(const fapi::Target & i_target,ui
if(i_mode == 0)
{
FAPI_INF(" Saving DP18 data bit direction register contents");
- for(l_index = 0;l_index<10;l_index++)
+ for(l_index = 0;l_index<MAX_BYTE;l_index++)
{
l_value = l_Databitdir[l_index];
rc = fapiGetScom(i_target,l_value,l_shmoo1ab); if(rc) return rc;
@@ -253,7 +260,7 @@ fapi::ReturnCode generic_shmoo::shmoo_save_rest(const fapi::Target & i_target,ui
else if(i_mode == 1)
{
FAPI_INF(" Restoring DP18 data bit direction register contents");
- for(l_index = 0;l_index<10;l_index++)
+ for(l_index = 0;l_index<MAX_BYTE;l_index++)
{
l_val_u64 = i_content_array[l_index];
l_value = l_Databitdir[l_index];
@@ -520,6 +527,14 @@ fapi::ReturnCode generic_shmoo::run(const fapi::Target & i_target,uint32_t *o_ri
rc=get_min_margin(i_target,o_right_min_margin,o_left_min_margin);if(rc) return rc;
// It is used to print the schmoo report
rc=print_report(i_target);if(rc) return rc;
+
+ if(l_attr_schmoo_test_type_u8==4){
+ FAPI_INF(" Least tDQSSmin(ps)=%d ps and Least tDQSSmax=%d ps", *o_left_min_margin,*o_right_min_margin);
+ }else if(l_attr_schmoo_test_type_u8==16){
+
+ }else{
+ FAPI_INF(" Minimum hold margin=%d ps and setup margin=%d ps", *o_left_min_margin,*o_right_min_margin);
+ }
//shmoo_save_rest(i_target,i_content_array,1);
}
l_mcbist_prnt_off=0;
@@ -548,7 +563,8 @@ fapi::ReturnCode generic_shmoo::sanity_check(const fapi::Target & i_target){
FAPI_INF(" starting mcbist now");
rc=start_mcb(i_target);if(rc) return rc;
FAPI_INF(" polling mcbist now");
- rc=poll_mcb(i_target,0,&l_mcb_status,l_sub_info,1);
+ //rc=poll_mcb(i_target_mba,&mcb_status,l_sub_info1,0);if(rc) return rc;
+ rc=poll_mcb(i_target,&l_mcb_status,l_sub_info,1);
if(rc)
{
FAPI_ERR("generic_shmoo::do_mcbist_test: POLL MCBIST failed !!");
@@ -657,7 +673,7 @@ fapi::ReturnCode generic_shmoo::do_mcbist_test(const fapi::Target & i_target)
return rc;
}
//rc=poll_mcb(i_target,false,&l_mcb_status);
- rc=poll_mcb(i_target,0,&l_mcb_status,l_sub_info,1);
+ rc=poll_mcb(i_target,&l_mcb_status,l_sub_info,1);
if(rc)
{
FAPI_ERR("generic_shmoo::do_mcbist_test: POLL MCBIST failed !!");
@@ -1015,6 +1031,8 @@ fapi::ReturnCode generic_shmoo::set_all_binary(const fapi::Target & i_target,bou
uint8_t l_dq=0;
uint8_t l_p=0;
uint32_t l_max=512;
+ uint32_t l_max_offset=64;
+
if(iv_shmoo_type == 8)
{
@@ -1043,9 +1061,21 @@ fapi::ReturnCode generic_shmoo::set_all_binary(const fapi::Target & i_target,bou
SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.curr_val[l_dq][i_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.nom_val[l_dq][i_rp];
if(bound==RIGHT)
{
+ if((SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.nom_val[l_dq][i_rp]+l_max_offset)>l_max){
SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.last_fail[l_dq][i_rp]=l_max;
+ }else{
+ SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.last_fail[l_dq][i_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.nom_val[l_dq][i_rp]+l_max_offset;
+ //FAPI_INF("\n the last failure for right %d ",SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.last_fail[l_dq][i_rp]);
+ }
+
+ }else{
+ if(SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.nom_val[l_dq][i_rp]>64){
+ SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.last_fail[l_dq][i_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.nom_val[l_dq][i_rp]-l_max_offset;
+ //FAPI_INF("\n the last failure for left %d ",SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.last_fail[l_dq][i_rp]);
}else{
SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.last_fail[l_dq][i_rp]=0;
+ //FAPI_INF("\n the last failure for left %d ",SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.last_fail[l_dq][i_rp]);
+ }
}
//SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.nom_val[l_dq][i_rp]=val;
@@ -1574,17 +1604,17 @@ fapi::ReturnCode generic_shmoo::knob_update_bin(const fapi::Target & i_target,bo
if(schmoo_error_map[l_p][rank][l_n]==0){
SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp];
SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]=(SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]+SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp])/2;
- //FAPI_INF("\n 111111 port=%d nibble=%d rank=%d and bit=%d the last pass value %d the last fail value %d and current value %d\n",l_p,l_n,rank,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp],SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp],SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]);
+ // FAPI_INF("\n 111111 port=%d nibble=%d rank=%d and bit=%d the last pass value %d the last fail value %d and current value %d\n",l_p,l_n,rank,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp],SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp],SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[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.curr_val[l_dq][l_rp]);if(rc) return rc;
if(SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]>SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]){
SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]-SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp];
}else{
SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]-SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp];
}
- if(SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]<=2){
+ if(SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]<=1){
binary_done_map[l_p][rank][l_n]=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.curr_val[l_dq][l_rp];
- FAPI_INF("\n the right bound for port=%d rank=%d dq=%d is %d \n",l_p,rank,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]);
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp];
+ //FAPI_INF("\n the right bound for port=%d rank=%d dq=%d is %d \n",l_p,rank,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]);
}
}else{
@@ -1597,10 +1627,10 @@ fapi::ReturnCode generic_shmoo::knob_update_bin(const fapi::Target & i_target,bo
}else{
SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]-SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp];
}
- if(SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]<=2){
+ if(SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]<=1){
binary_done_map[l_p][rank][l_n]=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.curr_val[l_dq][l_rp];
- FAPI_INF("\n the right bound for port=%d rank=%d dq=%d is %d \n",l_p,rank,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]);
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp];
+ //FAPI_INF("\n the right bound for port=%d rank=%d dq=%d is %d \n",l_p,rank,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]);
}
}
// //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq,bound);
@@ -1709,10 +1739,10 @@ fapi::ReturnCode generic_shmoo::knob_update_bin(const fapi::Target & i_target,bo
}else{
SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]-SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp];
}
- if(SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]<=2){
+ if(SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]<=1){
binary_done_map[l_p][rank][l_n]=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.curr_val[l_dq][l_rp];
- FAPI_INF("\n the left bound for port=%d rank=%d dq=%d is %d \n",l_p,rank,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]);
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp];
+ //FAPI_INF("\n the left bound for port=%d rank=%d dq=%d is %d \n",l_p,rank,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]);
}
}else{
@@ -1725,10 +1755,10 @@ fapi::ReturnCode generic_shmoo::knob_update_bin(const fapi::Target & i_target,bo
}else{
SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]-SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp];
}
- if(SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]<=2){
+ if(SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]<=1){
binary_done_map[l_p][rank][l_n]=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.curr_val[l_dq][l_rp];
- FAPI_INF("\n the left bound for port=%d rank=%d dq=%d is %d \n",l_p,rank,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]);
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp];
+ //FAPI_INF("\n the left bound for port=%d rank=%d dq=%d is %d \n",l_p,rank,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]);
}
}
// //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq,bound);
@@ -1774,7 +1804,7 @@ fapi::ReturnCode generic_shmoo::knob_update_bin(const fapi::Target & i_target,bo
FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
return rc;
}
- FAPI_INF("\n the status =%d \n",l_status);
+ //FAPI_INF("\n the status =%d \n",l_status);
}while(l_status==1);
@@ -2553,12 +2583,13 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4(const fapi::Target & i_targe
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;
- }
+ rc=mcb_error_map(i_target,mcbist_error_map);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!");
+
+ return rc;
+ }
if(iv_dmm_type==1)
{
@@ -2676,7 +2707,20 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4(const fapi::Target & i_targe
}
}
}
+ rc=do_mcbist_test(i_target);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+ rc=mcb_error_map(i_target,mcbist_error_map);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!");
+
+ return rc;
+ }
}
@@ -2777,6 +2821,22 @@ rc=check_error_map(i_target,l_p,pass);
}
}
}
+
+ rc=do_mcbist_test(i_target);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+
+ rc=mcb_error_map(i_target,mcbist_error_map);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!");
+
+ return rc;
+ }
+
}
@@ -2818,13 +2878,13 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4_isdimm(const fapi::Target &
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;
- }
-
+ rc=mcb_error_map(i_target,mcbist_error_map);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!");
+
+ return rc;
+ }
if(iv_dmm_type==1)
{
@@ -2867,24 +2927,24 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4_isdimm(const fapi::Target &
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]);
+ 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]);
+ 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]);
+ 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]);
+ 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]);
+ 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]);
+ 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");
@@ -2923,7 +2983,7 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4_isdimm(const fapi::Target &
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]);
+ 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;
}
@@ -2945,6 +3005,20 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4_isdimm(const fapi::Target &
}
}
}
+ rc=do_mcbist_test(i_target);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+
+ rc=mcb_error_map(i_target,mcbist_error_map);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!");
+
+ return rc;
+ }
@@ -2977,19 +3051,19 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4_isdimm(const fapi::Target &
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]);
+ 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]);
+ 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]);
+ 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]);
+ 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){
@@ -3049,6 +3123,22 @@ rc=check_error_map(i_target,l_p,pass);
}
}
}
+
+ rc=do_mcbist_test(i_target);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+
+ rc=mcb_error_map(i_target,mcbist_error_map);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!");
+
+ return rc;
+ }
+
}
@@ -3095,12 +3185,14 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by8(const fapi::Target & i_targe
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;
- }
+ rc=mcb_error_map(i_target,mcbist_error_map);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!");
+
+ return rc;
+ }
+
if(iv_dmm_type==1)
{
@@ -3250,7 +3342,21 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by8(const fapi::Target & i_targe
}
}
+ rc=do_mcbist_test(i_target);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+ rc=mcb_error_map(i_target,mcbist_error_map);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!");
+
+ return rc;
+ }
+
}
@@ -3376,6 +3482,22 @@ rc=check_error_map(i_target,l_p,pass);
}
}
}
+
+ rc=do_mcbist_test(i_target);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+
+ rc=mcb_error_map(i_target,mcbist_error_map);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!");
+
+ return rc;
+ }
+
}
@@ -3419,12 +3541,13 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by8_isdimm(const fapi::Target &
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;
- }
+ rc=mcb_error_map(i_target,mcbist_error_map);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!");
+
+ return rc;
+ }
if(iv_dmm_type==1)
{
@@ -3574,6 +3697,21 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by8_isdimm(const fapi::Target &
}
}
}
+
+ rc=do_mcbist_test(i_target);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+
+ rc=mcb_error_map(i_target,mcbist_error_map);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!");
+
+ return rc;
+ }
@@ -3679,6 +3817,7 @@ rc=check_error_map(i_target,l_p,pass);
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;
}
@@ -3700,6 +3839,21 @@ rc=check_error_map(i_target,l_p,pass);
}
}
}
+ rc=do_mcbist_test(i_target);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+
+ rc=mcb_error_map(i_target,mcbist_error_map);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!");
+
+ return rc;
+ }
+
}
@@ -4133,13 +4287,26 @@ fapi::ReturnCode generic_shmoo::get_margin(const fapi::Target & i_target)
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);
SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp]=0;
+ if(iv_shmoo_param!=4){
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.lb_regval[l_dq][l_rp]-2;
+ }else{
+ 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.lb_regval[l_dq][l_rp]-1;
+ }
//FAPI_INF("\n the value of left bound after is %d \n",SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp]);
}
}
+ if(iv_shmoo_param==4){
+ if(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]){
+ 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.rb_regval[l_dq][l_rp]-1;
+ }
+ if(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.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.lb_regval[l_dq][l_rp]+1;
+ }
+ }else{
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.rb_regval[l_dq][l_rp]-1;
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.lb_regval[l_dq][l_rp]+1;
+ }
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.rb_regval[l_dq][l_rp]-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_dq][l_rp])*l_factor)/l_factor_ps;
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.nom_val[l_dq][l_rp]-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp])*l_factor)/l_factor_ps;//((1/uint32_t_freq*1000000)/128);
@@ -4274,8 +4441,8 @@ fapi::ReturnCode generic_shmoo::get_margin(const fapi::Target & i_target)
}
}
//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 byte=%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]);
- FAPI_INF(" the port=%d rank=%d byte=%d left bound = %d and nominal = %d",l_p,i_rank,l_nibble,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.nom_val[l_nibble][l_rp]);
+ //FAPI_INF(" the port=%d rank=%d byte=%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]);
+ //FAPI_INF(" the port=%d rank=%d byte=%d left bound = %d and nominal = %d",l_p,i_rank,l_nibble,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.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;
@@ -4493,8 +4660,9 @@ if(iv_DQS_ON==1){
//rc = FAPI_ATTR_SET(ATTR_MCBIST_PATTERN, &i_target,iv_pattern); if(rc) return rc;//-----------i_mcbpatt------->run
//rc = FAPI_ATTR_SET(ATTR_MCBIST_TEST_TYPE, &i_target, iv_test_type); if(rc) return rc;//---------i_mcbtest------->run
-rc = setup_mcbist(i_target,i_mcbbytemask1,0,1,0,l_sub_info);if(rc) return rc;
+rc = setup_mcbist(i_target,i_mcbbytemask1,0,l_sub_info);if(rc) return rc;
+
return rc;
}
OpenPOWER on IntegriCloud