From 9b977e98c99a4334836c2b83e910b25678faa05f Mon Sep 17 00:00:00 2001 From: Thi Tran Date: Mon, 7 Oct 2013 10:28:20 -0500 Subject: INITPROC: Hostboot - from defect SW227298 mcbist Change-Id: I6b8c8d2b625fb9594e0d252ca923ed77fa2f9091 CQ:SW227298 Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/6532 Tested-by: Jenkins Server Reviewed-by: Thi N. Tran Reviewed-by: A. Patrick Williams III --- .../mss_draminit_trainadv/mss_generic_shmoo.C | 288 ++++++-- .../mss_draminit_trainadv/mss_mcbist.C | 13 +- .../mss_draminit_trainadv/mss_mcbist.H | 12 +- .../mss_draminit_trainadv/mss_mcbist_common.C | 812 ++++++++++++++------- 4 files changed, 787 insertions(+), 338 deletions(-) (limited to 'src/usr/hwpf/hwp/dram_training') 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_indexl_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_nSHMOO[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]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; } diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist.C b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist.C index 395f446fe..17f95b6c7 100755 --- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist.C +++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist.C @@ -20,7 +20,7 @@ /* Origin: 30 */ /* */ /* IBM_PROLOG_END_TAG */ -// $Id: mss_mcbist.C,v 1.41 2013/08/12 10:07:57 sasethur Exp $ +// $Id: mss_mcbist.C,v 1.43 2013/10/04 06:32:21 sasethur Exp $ // *!*************************************************************************** // *! (C) Copyright International Business Machines Corp. 1997, 1998 // *! All Rights Reserved -- Property of IBM @@ -38,6 +38,8 @@ //------------------------------------------------------------------------------ // Version:|Author: | Date: | Comment: // --------|--------|--------|-------------------------------------------------- +// 1.43 |aditya |10/05/13|Updated fw comments +// 1.42 |aditya |09/18/13|Updated Call for functions // 1.41 |aditya |08/10/13|Minor Fix for Hostboot compile // 1.40 |aditya |06/11/13|Added attributes ATTR_MCBIST_PRINTING_DISABLE and ATTR_MCBIST_DATA_ENABLE // 1.39 |aditya |05/22/13|updated parameters for Subtest Printing @@ -271,7 +273,7 @@ fapi::ReturnCode cfg_mcb_test_mem(const fapi::Target & i_target_mba,mcbist_test // mcbist_data_gen i_datamode MCBIST Data mode // uint8_t i_mcbrotate Provides the number of bit to shift per burst //****************************************************************/ -fapi::ReturnCode cfg_mcb_dgen(const fapi::Target & i_target_mba,mcbist_data_gen i_datamode,uint8_t i_mcbrotate,uint8_t i_seed_choice,uint32_t i_seed) +fapi::ReturnCode cfg_mcb_dgen(const fapi::Target & i_target_mba,mcbist_data_gen i_datamode,uint8_t i_mcbrotate) { uint8_t l_print = 0; @@ -279,7 +281,10 @@ fapi::ReturnCode cfg_mcb_dgen(const fapi::Target & i_target_mba,mcbist_data_gen uint8_t l_data_attr,l_random_flag,l_data_flag; l_data_flag =1; l_random_flag = 1; l_data_attr = 3; - + uint8_t l_seed_choice; + uint32_t i_seed; + i_seed = 0x20; + l_seed_choice = 1; ecmdDataBufferBase l_data_buffer_64(64); ecmdDataBufferBase l_var_data_buffer_64(64); ecmdDataBufferBase l_var1_data_buffer_64(64); @@ -447,7 +452,7 @@ fapi::ReturnCode cfg_mcb_dgen(const fapi::Target & i_target_mba,mcbist_data_gen { l_rand_32 = 0xFFFFFFFF;//Hard Coded Temporary Fix till random function is fixed // srand(2); - if(i_seed_choice == 1) + if(l_seed_choice == 1) { if(i_seed == 0) { diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist.H b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist.H index 4edf56fa0..54abd43ce 100755 --- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist.H +++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist.H @@ -20,7 +20,7 @@ /* Origin: 30 */ /* */ /* IBM_PROLOG_END_TAG */ -// $Id: mss_mcbist.H,v 1.37 2013/08/02 09:00:44 sasethur Exp $ +// $Id: mss_mcbist.H,v 1.38 2013/09/18 10:10:47 lapietra Exp $ // *!*************************************************************************** // *! (C) Copyright International Business Machines Corp. 1997, 1998 // *! All Rights Reserved -- Property of IBM @@ -38,6 +38,7 @@ //------------------------------------------------------------------------------- // Version:|Author: | Date: | Comment: // --------|--------|---------|-------------------------------------------------- +// 1.38 |aditya |09/18/13 |Updated parameters for random seed attribute // 1.37 |aditya |08/02/13 |Updated parameters in mcb_error_map_print function // 1.36 |aditya |07/09/13 |Added l_random_addr_enable and l_fixed_addr_enable for struct Subtest_info // 1.35 |aditya |06/11/13 |Added l_random_data_enable and l_fixed_data_enable for struct Subtest_info @@ -281,17 +282,18 @@ uint8_t l_fixed_addr_enable; }; -fapi::ReturnCode poll_mcb(const fapi::Target & i_target_mba,bool i_mcb_stop_on_fail,uint8_t *o_mcb_status,struct Subtest_info l_sub_info[30],uint8_t i_flag); +fapi::ReturnCode poll_mcb(const fapi::Target & i_target_mba,uint8_t *o_mcb_status,struct Subtest_info l_sub_info[30],uint8_t i_flag); fapi::ReturnCode mcb_error_map(const fapi::Target & i_target_mba,uint8_t o_error_map[][8][10][2]); fapi::ReturnCode mcb_write_test_mem(const fapi::Target & i_target_mba,const uint64_t i_reg_addr,mcbist_oper_type i_operation_type,uint8_t i_cfg_test_123_cmd,mcbist_addr_mode i_addr_mode,mcbist_data_mode i_data_mode,uint8_t i_done,mcbist_data_select_mode i_data_select_mode, mcbist_add_select_mode i_addr_select_mode,uint8_t i_testnumber,uint8_t i_testnumber1,uint8_t i_total_no,struct Subtest_info l_sub_info[30]); fapi::ReturnCode cfg_mcb_test_mem(const fapi::Target & i_target_mba,mcbist_test_mem i_test_type,struct Subtest_info l_sub_info[30]); fapi::ReturnCode mcb_reset_trap(const fapi::Target & i_target_mba); -fapi::ReturnCode cfg_mcb_dgen(const fapi::Target & i_target_mba,mcbist_data_gen i_datamode,uint8_t i_mcbrotate,uint8_t i_seed_choice,uint32_t i_seed); +fapi::ReturnCode cfg_mcb_dgen(const fapi::Target & i_target_mba,mcbist_data_gen i_datamode,uint8_t i_mcbrotate); fapi::ReturnCode cfg_byte_mask(const fapi::Target & i_target_mba); fapi::ReturnCode start_mcb(const fapi::Target & i_target_mba); -fapi::ReturnCode setup_mcbist(const fapi::Target & i_target_mba,mcbist_byte_mask i_mcbbytemask,uint8_t i_mcbrotate,uint8_t i_seed_choice,uint32_t i_seed,struct Subtest_info l_sub_info[30]); +fapi::ReturnCode setup_mcbist(const fapi::Target & i_target_mba,mcbist_byte_mask i_mcbbytemask,uint8_t i_mcbrotate,struct Subtest_info l_sub_info[30]); //fapi::ReturnCode mcb_error_map_print(const fapi::Target & i_target_mba,ecmdDataBufferBase & i_mcb_fail_320,uint8_t i_port); -fapi::ReturnCode mcb_error_map_print(const fapi::Target & i_target_mba,ecmdDataBufferBase & l_mcb_fail_160,uint8_t i_port,uint8_t l_array[200],uint8_t l_number); +//fapi::ReturnCode mcb_error_map_print(const fapi::Target & i_target_mba,ecmdDataBufferBase & l_mcb_fail_160,uint8_t i_port,uint8_t l_array[200],uint8_t l_number); +fapi::ReturnCode mcb_error_map_print(const fapi::Target & i_target_mba,ecmdDataBufferBase & l_mcb_fail_160,uint8_t i_port,uint8_t l_array[200],uint8_t l_number,ecmdDataBufferBase l_data_buf_port,ecmdDataBufferBase l_data_buf_spare); fapi::ReturnCode mss_conversion_testtype(const fapi::Target & i_target_mba,uint8_t l_pattern,mcbist_test_mem &i_mcbtest ); fapi::ReturnCode mss_conversion_data(const fapi::Target & i_target_mba,uint8_t l_pattern,mcbist_data_gen &i_mcbpatt); diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_common.C b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_common.C index 614b9a336..da2f6784e 100644 --- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_common.C +++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_common.C @@ -20,7 +20,7 @@ /* Origin: 30 */ /* */ /* IBM_PROLOG_END_TAG */ -// $Id: mss_mcbist_common.C,v 1.50 2013/08/08 07:14:25 sasethur Exp $ +// $Id: mss_mcbist_common.C,v 1.53 2013/10/04 06:32:33 sasethur Exp $ // *!*************************************************************************** // *! (C) Copyright International Business Machines Corp. 1997, 1998 // *! All Rights Reserved -- Property of IBM @@ -38,6 +38,9 @@ //------------------------------------------------------------------------------ // Version:|Author: | Date: | Comment: // --------|--------|--------|-------------------------------------------------- +// 1.53 |aditya |10/05/13|Updated fw comments +// 1.52 |aditya |09/27/13|Updated for Host Boot Compile +// 1.51 |aditya |09/18/13|Updated parameters for random seed attribute and Error map masking // 1.50 |aditya |08/08/13|Updated for Host Boot Compile // 1.49 |aditya |08/02/13|Updated Error Map function // 1.48 |aditya |07/09/13|Added l_random_addr_enable and l_fixed_addr_enable for struct Subtest_info @@ -100,7 +103,7 @@ using namespace fapi; //const uint8_t MAX_PORT = 2; const uint8_t MAX_DRAM = 20; - +const uint8_t MAX_ISDIMM_DQ = 72; //const uint8_t MAX_BYTE = 10; //const uint8_t MAX_RANK = 8; //const uint8_t MAX_NIBBLE = 1; @@ -139,7 +142,7 @@ const uint64_t FOUR = 0x0000000000000004ull; //uint8_t new_address_map Flag to Enable Custom Address Map //****************************************************************/ -fapi::ReturnCode setup_mcbist(const fapi::Target & i_target_mba,mcbist_byte_mask i_mcbbytemask,uint8_t i_mcbrotate,uint8_t i_seed_choice,uint32_t i_seed,struct Subtest_info l_sub_info[30]) +fapi::ReturnCode setup_mcbist(const fapi::Target & i_target_mba,mcbist_byte_mask i_mcbbytemask,uint8_t i_mcbrotate,struct Subtest_info l_sub_info[30]) //fapi::ReturnCode setup_mcbist(const fapi::Target & i_target_mba, uint8_t i_port,mcbist_data_gen i_mcbpatt,mcbist_test_mem i_mcbtest,mcbist_byte_mask i_mcbbytemask,uint8_t i_mcbrotate,uint8_t i_pattern,uint8_t i_test_type,uint8_t i_rank,uint8_t i_bit32,uint64_t i_start,uint64_t i_end,uint8_t new_address_map) { @@ -178,9 +181,14 @@ fapi::ReturnCode setup_mcbist(const fapi::Target & i_target_mba,mcbist_byte_mask //uint64_t scom_array[24] = {0x03010440,0x03010441,0x03010442,0x03010443,0x03010444,0x03010445,0x03010446,0x03010447,0x0201145E,0x0201145F,0x02011460,0x02011461,0x02011462,0x02011463,0x02011464,0x02011465,0x0201149E,0x0201149F,0x020114A0,0x020114A1,0x020114A2,0x020114A3,0x020114A4,0x020114A5}; uint64_t scom_array[24] = {MBA01_MBABS0_0x03010440,MBA01_MBABS1_0x03010441,MBA01_MBABS2_0x03010442,MBA01_MBABS3_0x03010443,MBA01_MBABS4_0x03010444,MBA01_MBABS5_0x03010445,MBA01_MBABS6_0x03010446 ,MBA01_MBABS7_0x03010447,MBS_ECC0_MBSBS0_0x0201145E ,MBS_ECC0_MBSBS1_0x0201145F ,MBS_ECC0_MBSBS2_0x02011460 ,MBS_ECC0_MBSBS3_0x02011461 ,MBS_ECC0_MBSBS4_0x02011462 ,MBS_ECC0_MBSBS5_0x02011463 ,MBS_ECC0_MBSBS6_0x02011464 ,MBS_ECC0_MBSBS7_0x02011465 ,MBS_ECC1_MBSBS0_0x0201149E ,MBS_ECC1_MBSBS1_0x0201149F ,MBS_ECC1_MBSBS2_0x020114A0 ,MBS_ECC1_MBSBS3_0x020114A1 ,MBS_ECC1_MBSBS4_0x020114A2 ,MBS_ECC1_MBSBS5_0x020114A3 ,MBS_ECC1_MBSBS6_0x020114A4 ,MBS_ECC1_MBSBS7_0x020114A5 } ; + + Target i_target_centaur; + uint8_t l_attr_centaur_ec_mcbist_random_data_gen = 0; + rc = fapiGetParentChip(i_target_mba, i_target_centaur); if(rc) return rc; + rc = FAPI_ATTR_GET(ATTR_MCBIST_PATTERN, &i_target_mba,i_mcbpatt); if(rc) return rc;//-----------i_mcbpatt------->run rc = FAPI_ATTR_GET(ATTR_MCBIST_TEST_TYPE, &i_target_mba, i_mcbtest); if(rc) return rc;//---------i_mcbtest------->run - + rc = FAPI_ATTR_GET(ATTR_CENTAUR_EC_MCBIST_RANDOM_DATA_GEN, &i_target_centaur, l_attr_centaur_ec_mcbist_random_data_gen); if(rc) return rc;//---------i_mcbtest------->run rc = mss_conversion_testtype(i_target_mba,i_mcbtest, i_mcbtest1);if(rc) return rc; rc = mss_conversion_data(i_target_mba,i_mcbpatt,i_mcbpatt1);if(rc) return rc; @@ -204,30 +212,31 @@ rc = FAPI_ATTR_GET(ATTR_MCBIST_ERROR_CAPTURE, &i_target_mba,l_bit32); if(rc) ret } - -//FIFO work around for random data -//################################### -//# WRQ and RRQ set to FIFO mode OFF -//################################### -//#WRQ FIFO mode OFF - rc = fapiGetScom(i_target_mba,0x0301040d,l_data_buffer_64); if(rc) return rc; - rc_num = l_data_buffer_64.clearBit(5);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;} - - rc = fapiPutScom(i_target_mba,0x0301040d,l_data_buffer_64); if(rc) return rc; - -//#RRQ FIFO Mode OFF - rc = fapiGetScom(i_target_mba,0x0301040e,l_data_buffer_64); if(rc) return rc; - rc_num = l_data_buffer_64.setBit(6);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;} - - rc_num = l_data_buffer_64.setBit(7);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;} - - rc_num = l_data_buffer_64.setBit(8);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;} - - rc_num = l_data_buffer_64.setBit(9);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;} - - rc_num = l_data_buffer_64.setBit(10);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;} - - rc = fapiPutScom(i_target_mba,0x0301040e,l_data_buffer_64); if(rc) return rc; + if(l_attr_centaur_ec_mcbist_random_data_gen == 0) + { + //FIFO work around for random data + //################################### + //# WRQ and RRQ set to FIFO mode OFF + //################################### + //#WRQ FIFO mode OFF + rc = fapiGetScom(i_target_mba,0x0301040d,l_data_buffer_64); if(rc) return rc; + rc_num = l_data_buffer_64.clearBit(5);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;} + + rc = fapiPutScom(i_target_mba,0x0301040d,l_data_buffer_64); if(rc) return rc; + + //#RRQ FIFO Mode OFF + rc = fapiGetScom(i_target_mba,0x0301040e,l_data_buffer_64); if(rc) return rc; + rc_num = l_data_buffer_64.setBit(6);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;} + + rc_num = l_data_buffer_64.setBit(7);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;} + + rc_num = l_data_buffer_64.setBit(8);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;} + + rc_num = l_data_buffer_64.setBit(9);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;} + + rc_num = l_data_buffer_64.setBit(10);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;} + + rc = fapiPutScom(i_target_mba,0x0301040e,l_data_buffer_64); if(rc) return rc; //End //power bus ECC setting for random data @@ -249,8 +258,8 @@ rc = FAPI_ATTR_GET(ATTR_MCBIST_ERROR_CAPTURE, &i_target_mba,l_bit32); if(rc) ret rc_num = l_data_buffer_64.setBit(1);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;} rc = fapiPutScom(i_target_mba,0x0201148a,l_data_buffer_64); if(rc) return rc; -//end of power bus ECC setting for random data - + //end of power bus ECC setting for random data + } rc = fapiGetScom(i_target_mba,MBA01_CCS_MODEQ_0x030106a7, l_data_buffer_64); if(rc) return rc; rc_num = l_data_buffer_64.clearBit(29); if (rc_num){FAPI_ERR( "Error in function setup_mcb:");rc.setEcmdError(rc_num);return rc;} @@ -311,7 +320,7 @@ rc = FAPI_ATTR_GET(ATTR_MCBIST_ERROR_CAPTURE, &i_target_mba,l_bit32); if(rc) ret //rc = cfg_mcb_test_mem(i_target_mba,i_mcbtest1); if(rc) return rc; rc = cfg_mcb_test_mem(i_target_mba,i_mcbtest1,l_sub_info); if(rc) return rc; - rc = cfg_mcb_dgen(i_target_mba,i_mcbpatt1,i_mcbrotate,i_seed_choice,i_seed); if(rc) return rc; + rc = cfg_mcb_dgen(i_target_mba,i_mcbpatt1,i_mcbrotate); if(rc) return rc; uint8_t i_port = 0; uint8_t i_rank = 0; @@ -503,14 +512,14 @@ fapi::ReturnCode start_mcb(const fapi::Target & i_target_mba) // been completed, in progress or failed. // Input Parameters : // const fapi::Target & Centaur.mba -// bool i_mcb_stop_on_fail Whether MCBIST should stop on fail or not +// bool l_mcb_stop_on_fail Whether MCBIST should stop on fail or not // uint64_t i_time Sets the max Time out value // Output Parameter : // uint32 status = 1 MCBIST done with fail or MCBIST not complete (default value) // = 0 MCBIST Done without fail //****************************************************************/ -//fapi::ReturnCode poll_mcb(const fapi::Target & i_target_mba,bool i_mcb_stop_on_fail,uint8_t *o_mcb_status,uint64_t i_time) -fapi::ReturnCode poll_mcb(const fapi::Target & i_target_mba,bool i_mcb_stop_on_fail,uint8_t *o_mcb_status,struct Subtest_info l_sub_info[30],uint8_t i_flag) +//fapi::ReturnCode poll_mcb(const fapi::Target & i_target_mba,bool l_mcb_stop_on_fail,uint8_t *o_mcb_status,uint64_t i_time) +fapi::ReturnCode poll_mcb(const fapi::Target & i_target_mba,uint8_t *o_mcb_status,struct Subtest_info l_sub_info[30],uint8_t i_flag) { fapi::ReturnCode rc; // return value after each SCOM access/buffer modification uint32_t rc_num = 0; @@ -533,6 +542,7 @@ fapi::ReturnCode poll_mcb(const fapi::Target & i_target_mba,bool i_mcb_stop_on_ uint32_t i_mcbtest = 0; uint32_t l_st_ln = 0; uint32_t l_len = 0; + uint8_t l_mcb_stop_on_fail= 0; mcbist_test_mem i_mcbtest1; //uint8_t l_print = 0; //rc = FAPI_ATTR_GET(ATTR_MCBIST_PRINTING_DISABLE, &i_target_mba,l_print); if(rc) return rc; @@ -546,6 +556,7 @@ uint8_t test_array_count[44] ={0,2,2,1,1,1,6,6,30,30,2,7,4,2,1,5,4,2,1,1,3,1,1,4 FAPI_DBG("%s:Function Poll_MCBIST",i_target_mba.toEcmdString()); rc = FAPI_ATTR_GET(ATTR_MCBIST_MAX_TIMEOUT, &i_target_mba, l_time); if(rc) return rc; + rc = FAPI_ATTR_GET(ATTR_MCBIST_STOP_ON_ERROR, &i_target_mba, l_mcb_stop_on_fail); if(rc) return rc; /*rc = fapiGetScom(i_target_mba,0x02011670,l_data_buffer_64); if(rc) return rc; l_reg = l_data_buffer_64.getDoubleWord (0); @@ -655,7 +666,7 @@ uint8_t test_array_count[44] ={0,2,2,1,1,1,6,6,30,30,2,7,4,2,1,5,4,2,1,1,3,1,1,4 l_mcb_fail = 1; FAPI_DBG("%s:POLLING STATUS:MCBIST FAILED",i_target_mba.toEcmdString()); - if(i_mcb_stop_on_fail == true) //if stop on error is 1, break after the current subtest completes + if(l_mcb_stop_on_fail == 1) //if stop on error is 1, break after the current subtest completes { rc = fapiGetScom(i_target_mba,MBA01_MCBIST_MCBCFGQ_0x030106e0,l_stop_on_fail_buffer_64); if(rc) return rc; rc_num = l_stop_on_fail_buffer_64.setBit(62);if (rc_num){FAPI_ERR( "Error in function poll_mcb:");rc.setEcmdError(rc_num);return rc;} // Set bit 61 to break after current subtest @@ -703,7 +714,7 @@ uint8_t test_array_count[44] ={0,2,2,1,1,1,6,6,30,30,2,7,4,2,1,5,4,2,1,1,3,1,1,4 l_count++; } - if((l_mcb_done == 1) && (l_mcb_fail == 1) && (i_mcb_stop_on_fail == true) ) + if((l_mcb_done == 1) && (l_mcb_fail == 1) && (l_mcb_stop_on_fail == true) ) { *o_mcb_status = 1; /// MCB fail #ifdef MCB_DEBUG_2 @@ -750,9 +761,10 @@ uint8_t test_array_count[44] ={0,2,2,1,1,1,6,6,30,30,2,7,4,2,1,5,4,2,1,1,3,1,1,4 return rc; } -fapi::ReturnCode mcb_error_map_print(const fapi::Target & i_target_mba,ecmdDataBufferBase & l_mcb_fail_160,uint8_t i_port,uint8_t l_array[200],uint8_t l_number) +fapi::ReturnCode mcb_error_map_print(const fapi::Target & i_target_mba,ecmdDataBufferBase & i_mcb_fail_160,uint8_t i_port,uint8_t i_array[200],uint8_t i_number,ecmdDataBufferBase i_data_buf_port,ecmdDataBufferBase i_data_buf_spare) { ReturnCode rc; + uint32_t rc_num; uint8_t l_num_ranks_per_dimm[MAX_PORT][MAX_PORT]; uint8_t l_rankpair_table[MAX_RANK] ; uint8_t l_cur_rank =0; @@ -773,6 +785,14 @@ fapi::ReturnCode mcb_error_map_print(const fapi::Target & i_target_mba,ecmdData rc = FAPI_ATTR_GET(ATTR_EFF_NUM_RANKS_PER_DIMM, &i_target_mba, l_num_ranks_per_dimm); if(rc) return rc; l_max_rank=l_num_ranks_per_dimm[i_port][0]+l_num_ranks_per_dimm[i_port][1]; + + + //New code + uint64_t l_generic_buffer; + uint32_t l_sbit,l_len; + uint16_t l_output; + + rc = mss_getrankpair(i_target_mba,i_port,0,&l_rank_pair,l_rankpair_table); if(rc) return rc; if(l_max_rank == 0) { @@ -798,13 +818,32 @@ fapi::ReturnCode mcb_error_map_print(const fapi::Target & i_target_mba,ecmdData { if(l_mbaPosition == 0) { + + l_sbit = 0; + l_len = 16; + l_generic_buffer = i_data_buf_port.getDoubleWord (0); + //l_generic_buffer_spare = i_data_buf_spare.getDoubleWord (0); + rc_num= rc_num | i_data_buf_spare.extractToRight(&l_output,l_sbit,l_len); + FAPI_DBG("%s:################# MBA01 ###########################\n",i_target_mba.toEcmdString()); FAPI_DBG("%s:################# PORT0 ERROR MAP #################\n",i_target_mba.toEcmdString()); + FAPI_DBG("%s:Byte 00112233445566778899",i_target_mba.toEcmdString()); + FAPI_DBG("%s:Nibble 01010101010101010101",i_target_mba.toEcmdString()); + FAPI_DBG("%s:MASK %016llX%04X\n",i_target_mba.toEcmdString(),l_generic_buffer,l_output); } else { + l_sbit = 0; + l_len = 16; + l_generic_buffer = i_data_buf_port.getDoubleWord (0); + //l_generic_buffer_spare = i_data_buf_spare.getDoubleWord (0); + rc_num= rc_num | i_data_buf_spare.extractToRight(&l_output,l_sbit,l_len); FAPI_DBG("%s:################# MBA23 ###########################\n",i_target_mba.toEcmdString()); FAPI_DBG("%s:################# PORT0 ERROR MAP #################\n",i_target_mba.toEcmdString()); + FAPI_DBG("%s:Byte 00112233445566778899",i_target_mba.toEcmdString()); + FAPI_DBG("%s:Nibble 01010101010101010101",i_target_mba.toEcmdString()); + + FAPI_DBG("%s:MASK %016llX%04X\n",i_target_mba.toEcmdString(),l_generic_buffer,l_output); } } @@ -814,13 +853,29 @@ fapi::ReturnCode mcb_error_map_print(const fapi::Target & i_target_mba,ecmdData if(l_mbaPosition ==0) { + l_sbit = 16; + l_len = 16; + l_generic_buffer = i_data_buf_port.getDoubleWord (0); + //l_generic_buffer_spare = i_data_buf_spare.getDoubleWord (0); + rc_num= rc_num | i_data_buf_spare.extractToRight(&l_output,l_sbit,l_len); FAPI_DBG("%s:################# MBA01 ###########################\n",i_target_mba.toEcmdString()); FAPI_DBG("%s:################# PORT1 ERROR MAP #################\n",i_target_mba.toEcmdString()); + FAPI_DBG("%s:Byte 00112233445566778899",i_target_mba.toEcmdString()); + FAPI_DBG("%s:Nibble 01010101010101010101",i_target_mba.toEcmdString()); + FAPI_DBG("%s:MASK %016llX%04X\n",i_target_mba.toEcmdString(),l_generic_buffer,l_output); } else { + l_sbit = 16; + l_len = 16; + l_generic_buffer = i_data_buf_port.getDoubleWord (0); + //l_generic_buffer_spare = i_data_buf_spare.getDoubleWord (0); + rc_num= rc_num | i_data_buf_spare.extractToRight(&l_output,l_sbit,l_len); FAPI_DBG("%s:################# MBA23 ###########################\n",i_target_mba.toEcmdString()); - FAPI_DBG("%s:################# PORT1 ERROR MAP #################\n",i_target_mba.toEcmdString()); + FAPI_DBG("%s:################# PORT1 ERROR MAP #################\n",i_target_mba.toEcmdString()); + FAPI_DBG("%s:Byte 00112233445566778899",i_target_mba.toEcmdString()); + FAPI_DBG("%s:Nibble 01010101010101010101",i_target_mba.toEcmdString()); + FAPI_DBG("%s:MASK %016llX%04X\n",i_target_mba.toEcmdString(),l_generic_buffer,l_output); } @@ -835,187 +890,48 @@ fapi::ReturnCode mcb_error_map_print(const fapi::Target & i_target_mba,ecmdData //uint8_t l_index,l_i,l_number,l_value,l_value1; -//HB uint8_t l_index,l_i,l_value,l_value1; -uint8_t l_index,l_value,l_value1; -uint32_t rc_num; + uint8_t l_index,l_value,l_value1; +//uint8_t l_index,l_value,l_value1; +//uint32_t rc_num; //uint8_t l_array0[200],l_marray0[200]; uint8_t l_marray0[200]; ecmdDataBufferBase l_data_buffer1_64(64),l_data_buffer3_64(64); -//HB l_i = 0; - -/* -rc_num = l_data_buffer1_64.setBit(12);if (rc_num){FAPI_ERR( "Error in function setup_mcbist:");rc.setEcmdError(rc_num);return rc;} -rc_num = l_data_buffer1_64.setBit(32);if (rc_num){FAPI_ERR( "Error in function setup_mcbist:");rc.setEcmdError(rc_num);return rc;} -rc_num = l_data_buffer1_64.setBit(35);if (rc_num){FAPI_ERR( "Error in function setup_mcbist:");rc.setEcmdError(rc_num);return rc;} -rc_num = l_data_buffer1_64.setBit(63);if (rc_num){FAPI_ERR( "Error in function setup_mcbist:");rc.setEcmdError(rc_num);return rc;} -rc = fapiPutScom(i_target_mba,MBS_MCBIST01_MCBCMA1Q_0x02011672,l_data_buffer1_64); if(rc) return rc; + -rc_num = l_data_buffer1_64.flushTo0(); -rc_num = l_data_buffer1_64.setBit(13);if (rc_num){FAPI_ERR( "Error in function setup_mcbist:");rc.setEcmdError(rc_num);return rc;} -rc_num = l_data_buffer1_64.setBit(45);if (rc_num){FAPI_ERR( "Error in function setup_mcbist:");rc.setEcmdError(rc_num);return rc;} -rc_num = l_data_buffer1_64.setBit(39);if (rc_num){FAPI_ERR( "Error in function setup_mcbist:");rc.setEcmdError(rc_num);return rc;} -rc_num = l_data_buffer1_64.setBit(56);if (rc_num){FAPI_ERR( "Error in function setup_mcbist:");rc.setEcmdError(rc_num);return rc;} -rc = fapiPutScom(i_target_mba,0x02011673,l_data_buffer1_64); if(rc) return rc; -rc_num = l_data_buffer1_64.flushTo0(); -rc_num = l_data_buffer1_64.setBit(5);if (rc_num){FAPI_ERR( "Error in function setup_mcbist:");rc.setEcmdError(rc_num);return rc;} -rc_num = l_data_buffer1_64.setBit(34);if (rc_num){FAPI_ERR( "Error in function setup_mcbist:");rc.setEcmdError(rc_num);return rc;} -rc_num = l_data_buffer1_64.setBit(23);if (rc_num){FAPI_ERR( "Error in function setup_mcbist:");rc.setEcmdError(rc_num);return rc;} -rc_num = l_data_buffer1_64.setBit(55);if (rc_num){FAPI_ERR( "Error in function setup_mcbist:");rc.setEcmdError(rc_num);return rc;} -rc = fapiPutScom(i_target_mba,0x02011772,l_data_buffer1_64); if(rc) return rc;*/ rc_num = l_data_buffer1_64.flushTo0(); // for HB -if(rc_num) { +/*if(rc_num) { rc.setEcmdError(rc_num); return rc; -} -/*if(l_mbaPosition == 0) -{ - if(i_port == 0) - { - //FAPI_INF("l_array:%d",l_i); - l_i = 0; - rc = fapiGetScom(i_target_mba,MBS_MCBIST01_MCBCMA1Q_0x02011672,l_data_buffer1_64); if(rc) return rc; - rc = fapiGetScom(i_target_mba,MBS_MCBIST01_MCBCMABQ_0x02011674,l_data_buffer3_64); if(rc) return rc; - for(l_index=0;l_index<64;l_index++) - { - - if(l_data_buffer1_64.isBitSet(l_index)) - { - l_array0[l_i] = l_index; - l_i++; - //FAPI_INF("l_array:%d",l_i); - } - } - for(l_index=0;l_index<16;l_index++) - { - - if(l_data_buffer3_64.isBitSet(l_index)) - { - l_array0[l_i] = l_index+64; - l_i++; - //FAPI_INF("l_array:%d",l_i); - } - } - - } - else - { - //FAPI_INF("l_array:%d",l_i); - l_i = 0; - rc = fapiPutScom(i_target_mba,MBS_MCBIST01_MCBCMB1Q_0x02011673,l_data_buffer1_64); if(rc) return rc; - rc = fapiGetScom(i_target_mba,MBS_MCBIST01_MCBCMABQ_0x02011674,l_data_buffer3_64); if(rc) return rc; - for(l_index=0;l_index<64;l_index++) - { - if(l_data_buffer1_64.isBitSet(l_index)) - { - l_array0[l_i] = l_index; - l_i++;//FAPI_INF("l_array:%d",l_i); - } - - - - - } - for(l_index=16;l_index<32;l_index++) - { - - if(l_data_buffer3_64.isBitSet(l_index)) - { - l_array0[l_i] = l_index+64-16; - l_i++;//FAPI_INF("l_array:%d",l_i); - } - - - } - } -} -else -{ - if(i_port == 0) - { - //FAPI_INF("l_array:%d",l_i); - l_i = 0; - rc = fapiGetScom(i_target_mba,0x02011774,l_data_buffer3_64); if(rc) return rc; - rc = fapiGetScom(i_target_mba,0x02011772,l_data_buffer1_64); if(rc) return rc; - for(l_index=0;l_index<64;l_index++) - { - - - if(l_data_buffer1_64.isBitSet(l_index)) - { - l_array0[l_i] = l_index; - l_i++;//FAPI_INF("l_array:%d",l_i); - } - - - - } - for(l_index=0;l_index<16;l_index++) - { - if(l_data_buffer3_64.isBitSet(l_index)) - { - l_array0[l_i] = l_index+64; - l_i++;//FAPI_INF("l_array:%d",l_i); - } - } - } - else - { - l_i = 0; - //FAPI_INF("l_array:%d",l_i); - rc = fapiGetScom(i_target_mba,0x02011774,l_data_buffer3_64); if(rc) return rc; - rc = fapiGetScom(i_target_mba,0x02011773,l_data_buffer1_64); if(rc) return rc; - for(l_index=0;l_index<64;l_index++) - { - - if(l_data_buffer1_64.isBitSet(l_index)) - { - l_array0[l_i] = l_index; - l_i++;//FAPI_INF("l_array:%d",l_i); - } - - } - for(l_index=16;l_index<32;l_index++) - { - if(l_data_buffer3_64.isBitSet(l_index)) - { - l_array0[l_i] = l_index+64-16; - l_i++;//FAPI_INF("l_array:%d",l_i); - } - } - } -} - -l_number = l_i;*/ +}*/ -uint8_t l_num,io_num,l_inter,l_num2; +uint8_t l_num,io_num,l_inter,l_num2,l_index2; l_num =0; //FAPI_INF("%s:l_max_rank%d",i_target_mba.toEcmdString(),l_max_rank); - for(l_cur_rank = 0;l_cur_rank < l_max_rank;l_cur_rank++) - { - i_rank = l_rankpair_table[l_cur_rank]; + //FAPI_INF("%s:rank:%d",i_target_mba.toEcmdString(),i_rank); - for(l_index=0;l_index=72) + { + l_value1 = 255; + } + + l_ISarray[l_index] =l_value1; + + //FAPI_INF("L_ISARRAY port %d index %d value %d ",l_port,l_index,l_ISarray[l_index]); + + } - i_rank = l_rankpair_table[l_cur_rank]; + + + + + //for(l_cur_rank = 0;l_cur_rank < l_max_rank;l_cur_rank++) + //{ + + //i_rank = l_rankpair_table[l_cur_rank]; + + //FAPI_INF("%s:rank:%d",i_target_mba.toEcmdString(),i_rank); - for(l_index=0;l_indexl_marray[l_j]) + { + l_value = l_marray[l_j]; + l_marray[l_j]=l_marray[l_i]; + l_marray[l_i]=l_value; + //FAPI_INF("port %d value %d index %d",l_port,l_marray[l_i],l_i); + } + } + } + + //loop to remove repetition elements + l_j = 0; + for(l_i = 0;l_i=72) + { + l_flag = 1; + //FAPI_INF("Value (72)is here for index %d",l_index); + } + if((l_value >= 64)&&(l_value<72)) + { + l_value1 = l_value-64; + l_flag =2; + //FAPI_INF("Value (64)is here for index %d,l_value1 %d",l_index,l_value1); + rc_num = l_ISDIMM_spare0.setBit(l_value1);if (rc_num){FAPI_ERR( "Error in function Error Map:");rc.setEcmdError(rc_num);return rc;} + } + if(l_flag == 0) + { + rc_num = l_ISDIMM_BUF0.setBit(l_value);if (rc_num){FAPI_ERR( "Error in function Error Map:");rc.setEcmdError(rc_num);return rc;} + } + //FAPI_INF("VALUE OF FLAG %d",l_flag); + } + + l_generic_buffer0 = 0; + l_output0 = 0; + l_generic_buffer0 = l_ISDIMM_BUF0.getDoubleWord (0); + l_sbit =0; + l_len=8; + rc_num= rc_num | l_ISDIMM_spare0.extractToRight(&l_output0,l_sbit,l_len); + //FAPI_DBG("%s:MASK %016llX%02X\n",i_target_mba.toEcmdString(),l_generic_buffer0,l_output0); + l_generic_buffer = l_generic_buffer0; + l_output = l_output0; + } + else + { + + //For Port 1 + //rc_num = l_ISDIMM_spare1.flushTo0();if (rc_num){FAPI_ERR( "Error in function error_map:");rc.setEcmdError(rc_num);return rc;} + //rc_num = l_ISDIMM_BUF1.flushTo0();if (rc_num){FAPI_ERR( "Error in function error_map:");rc.setEcmdError(rc_num);return rc;} + + /*l_generic_buffer1 = 0; + l_output1 = 0; + l_generic_buffer1 = l_ISDIMM_BUF1.getDoubleWord (0); + l_sbit =0; + l_len=8; + rc_num= rc_num | l_ISDIMM_spare1.extractToRight(&l_output1,l_sbit,l_len); + + + FAPI_DBG("\n%s:BEFORE MASK %016llX%02X \n",i_target_mba.toEcmdString(),l_generic_buffer1,l_output1);*/ + for(l_index=0;l_index=72) + { + l_flag = 1; + //FAPI_INF("Value (72)is here for index %d",l_index); + } + if((l_value >= 64)&&(l_value<72)) + { + l_value1 = l_value-64; + l_flag =2; + //FAPI_INF("Value (64)is here for index %d,l_value1 %d",l_index,l_value1); + rc_num = l_ISDIMM_spare1.setBit(l_value1);if (rc_num){FAPI_ERR( "Error in function Error Map:");rc.setEcmdError(rc_num);return rc;} + } + if(l_flag == 0) + { + rc_num = l_ISDIMM_BUF1.setBit(l_value);if (rc_num){FAPI_ERR( "Error in function Error Map:");rc.setEcmdError(rc_num);return rc;} + } + //FAPI_INF("VALUE OF FLAG %d",l_flag); + } + + l_generic_buffer1 = 0; + l_output1 = 0; + l_generic_buffer1 = l_ISDIMM_BUF1.getDoubleWord (0); + l_sbit =0; + l_len=8; + rc_num= rc_num | l_ISDIMM_spare1.extractToRight(&l_output1,l_sbit,l_len); + //FAPI_DBG("%s:MASK %016llX%02X\n",i_target_mba.toEcmdString(),l_generic_buffer1,l_output1); + l_generic_buffer = l_generic_buffer1; + l_output = l_output1; + + } + + //Mask calculation Ends + + + //l_generic_buffer(64),l_generic_buffer_spare(64),l_data_buf_port0(64),l_data_buf_port1(64),l_data_buf_spare(64); + //rc=fapiGetScom(i_target_mba,l_scom_add,data_buffer_64);if(rc) return rc; + //rc_num= rc_num | data_buffer_64.extractToRight(&l_output,l_sbit,l_len); + if(l_mbaPosition == 0) + { + + + + //FAPI_DBG("%s:MASK %016llX%02X\n",i_target_mba.toEcmdString(),l_generic_buffer0,l_output0); + FAPI_DBG("%s:################# MBA01 ###########################\n",i_target_mba.toEcmdString()); + FAPI_DBG("%s:################# PORT%d ERROR MAP #################\n",i_target_mba.toEcmdString(),l_port); + FAPI_DBG("%s:Byte 001122334455667788",i_target_mba.toEcmdString()); + FAPI_DBG("%s:Nibble 010101010101010101",i_target_mba.toEcmdString()); + + FAPI_DBG("%s:MASK %016llX%02X\n",i_target_mba.toEcmdString(),l_generic_buffer,l_output); + + } else { - {FAPI_DBG("%s:################# MBA23 ###########################\n",i_target_mba.toEcmdString()); - FAPI_DBG("%s:################# PORT%d ERROR MAP #################\n",i_target_mba.toEcmdString(),l_port);} + + + //FAPI_DBG("%s:MASK %016llX%02X\n",i_target_mba.toEcmdString(),l_generic_buffer1,l_output1); + FAPI_DBG("%s:################# MBA23 ###########################\n",i_target_mba.toEcmdString()); + FAPI_DBG("%s:################# PORT%d ERROR MAP #################\n",i_target_mba.toEcmdString(),l_port); + FAPI_DBG("%s:Byte 001122334455667788",i_target_mba.toEcmdString()); + FAPI_DBG("%s:Nibble 010101010101010101",i_target_mba.toEcmdString()); + + FAPI_DBG("%s:MASK %016llX%02X\n",i_target_mba.toEcmdString(),l_generic_buffer,l_output); + } - //FAPI_DBG("%s: ------------------",i_target_mba.toEcmdString()); - {FAPI_DBG("%s:Byte 001122334455667788",i_target_mba.toEcmdString()); - FAPI_DBG("%s:Nibble 010101010101010101",i_target_mba.toEcmdString()); } + + for(l_rank = 0; l_rank < l_max_rank; l_rank++) { - //FAPI_DBG("%s:Rank %d",i_rank); + l_num = 0; rc = mss_getrankpair(i_target_mba,l_port,0,&rank_pair,valid_rank);if(rc) return rc; i_rank=valid_rank[l_rank]; @@ -1631,11 +1904,12 @@ FAPI_INF("______________________________________________________________________ else //Calling CDIMM error Map print { + FAPI_DBG("%s:################# CDIMM ERROR MAP ###########################\n",i_target_mba.toEcmdString()); i_port = 0; - mcb_error_map_print( i_target_mba , l_mcb_fail_160, i_port,l_array0,l_number1); + mcb_error_map_print( i_target_mba , l_mcb_fail_160, i_port,l_array0,l_number1,l_data_buf_port0,l_data_buf_spare);//ecmdDataBufferBase l_data_buffer1_64(64),l_data_buffer3_64(64),l_data_buf_port0(64),l_data_buf_port1(64),l_data_buf_spare(64); i_port = 1; - mcb_error_map_print(i_target_mba, l_mcb_fail1_160, i_port,l_array1,l_number); + mcb_error_map_print(i_target_mba, l_mcb_fail1_160, i_port,l_array1,l_number,l_data_buf_port1,l_data_buf_spare); } //End @@ -1689,7 +1963,6 @@ fapi::ReturnCode mcb_write_test_mem(const fapi::Target & i_target_mba,const uin l_sub_info[i_testnumber1].l_operation_type = l_operation_type; l_sub_info[i_testnumber1].l_data_mode = l_data_mode; l_sub_info[i_testnumber1].l_addr_mode = l_addr_mode; - // Operation type @@ -2221,3 +2494,4 @@ fapi::ReturnCode mss_conversion_data(const fapi::Target & i_target_mba, uint8_t } + -- cgit v1.2.1