summaryrefslogtreecommitdiffstats
path: root/src/usr/hwpf/hwp/dram_training
diff options
context:
space:
mode:
authorThi Tran <thi@us.ibm.com>2013-10-07 10:28:20 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2013-10-07 12:36:43 -0500
commit9b977e98c99a4334836c2b83e910b25678faa05f (patch)
treed9e47d9a9904b6c09f20bebdef0c29ed1cfe0d9c /src/usr/hwpf/hwp/dram_training
parent564e43c29dc1f64baaa6d01cfdd34cf7319f0b40 (diff)
downloadtalos-hostboot-9b977e98c99a4334836c2b83e910b25678faa05f.tar.gz
talos-hostboot-9b977e98c99a4334836c2b83e910b25678faa05f.zip
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 <thi@us.ibm.com> Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/hwpf/hwp/dram_training')
-rw-r--r--src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_generic_shmoo.C288
-rwxr-xr-xsrc/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist.C13
-rwxr-xr-xsrc/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist.H12
-rw-r--r--src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_common.C812
4 files changed, 787 insertions, 338 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;
}
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<l_number;l_index++)
+ for(l_index=0;l_index<i_number;l_index++)
{
//l_value = l_array0[l_index];
- l_value = l_array[l_index];
+ l_value = i_array[l_index];
l_inter = (l_value/4);
l_num2 = l_num-1;
if(l_inter == l_marray0[l_num2] &&(l_num != 0))
continue;
- l_value1=(i_rank*20)+l_inter;
+ //l_value1=(i_rank*20)+l_inter;
+ l_value1=l_inter;
l_marray0[l_num] = l_value1;
l_num++;
//FAPI_INF("%s:l_value,l_value1,l_num:%d,%d,%d",i_target_mba.toEcmdString(),l_value,l_value1,l_num);
}
- }
+
//FAPI_INF("%s:l_value,l_value1,l_num:%d,%d,%d",i_target_mba.toEcmdString(),l_value,l_value1,l_num);
io_num = l_num;
@@ -1023,18 +939,22 @@ uint8_t l_num,io_num,l_inter,l_num2;
//Debug Prints
/*
+uint8_t l_i;
+ l_i = 0;
+
+
FAPI_INF("________________________________________________________________________________________________________");
- for(l_i = 0;l_i < l_number;l_i++)
+ for(l_i = 0;l_i < i_number;l_i++)
{
- FAPI_INF("%s:INITIAL ARRAY:%d",i_target_mba.toEcmdString(),l_array[l_i] );
+ FAPI_INF("%s:INITIAL ARRAY:%d",i_target_mba.toEcmdString(),i_array[l_i] );
}
FAPI_INF("________________________________________________________________________________________________________");
for(l_i = 0;l_i < io_num;l_i++)
{
FAPI_INF("%s:FINAL ARRAY:%d",i_target_mba.toEcmdString(),l_marray0[l_i] );
}
- FAPI_INF("________________________________________________________________________________________________________");
- */
+ FAPI_INF("________________________________________________________________________________________________________");*/
+
l_cur_rank = 0;
@@ -1046,13 +966,15 @@ l_value = 0;
//FAPI_DBG("%s: --------------------",i_target_mba.toEcmdString());
- FAPI_DBG("%s:Byte 00112233445566778899",i_target_mba.toEcmdString());
- FAPI_DBG("%s:Nibble 01010101010101010101",i_target_mba.toEcmdString());
+
+
rc = mss_getrankpair(i_target_mba,i_port,0,&l_rank_pair,l_rankpair_table); if(rc) return rc;
for(l_cur_rank = 0;l_cur_rank < l_max_rank;l_cur_rank++)
{
- i_rank = l_rankpair_table[l_cur_rank];
+ l_index2 = 0;
+ l_num = 0;
+ i_rank = l_rankpair_table[l_cur_rank];
sprintf(l_str1,"%s:%-4s%d%5s",i_target_mba.toEcmdString(),"RANK",i_rank,"");
for(l_byte = 0; l_byte < MAX_BYTE; l_byte++)
{
@@ -1062,8 +984,9 @@ l_value = 0;
//FAPI_DBG("%s:l_value %d l_num %d",i_target_mba.toEcmdString(),l_value,l_num);
l_index0 = (i_rank*20) + (l_byte*2) + l_nibble;
// l_index1 = l_index0 + 160*(i_port);
+ l_index2 = (l_byte*2) + l_nibble;
l_index1 = l_index0;
- if((l_value == l_index1) &&(l_num < io_num))
+ if((l_value == l_index2) &&(l_num < io_num))
{
strcat(l_str1,"M");
@@ -1072,7 +995,7 @@ l_value = 0;
}
else
{
- if(l_mcb_fail_160.isBitSet(l_index1))
+ if(i_mcb_fail_160.isBitSet(l_index1))
{
strcat(l_str1,"X");
}
@@ -1112,7 +1035,8 @@ fapi::ReturnCode mcb_error_map(const fapi::Target & i_target_mba, uint8_t o_er
ecmdDataBufferBase l_mcb_fail_160(160);
ecmdDataBufferBase l_mcb_fail1_160(160);
ecmdDataBufferBase l_mcb(64);
-
+ ecmdDataBufferBase l_ISDIMM_BUF1(64),l_ISDIMM_BUF0(64);
+ ecmdDataBufferBase l_ISDIMM_spare1(8),l_ISDIMM_spare0(8);
uint8_t l_max_rank0,l_max_rank1;
uint8_t i_rank,i_port;
@@ -1133,6 +1057,19 @@ fapi::ReturnCode mcb_error_map(const fapi::Target & i_target_mba, uint8_t o_er
//uint8_t l_print = 0;
//rc = FAPI_ATTR_GET(ATTR_MCBIST_PRINTING_DISABLE, &i_target_mba,l_print); if(rc) return rc;
uint8_t rank_pair,i_byte,i_nibble,i_input_index_u8,o_val,i_byte1,i_nibble1;
+
+
+ uint8_t l_index,l_i,l_number,l_value,l_value1,l_number1;//l_cur_rank,
+ l_number1=0; //HB
+ uint8_t l_array[200],l_marray11[200],l_array0[200],l_marray0[200],l_array1[200],l_marray1[200],l_marray[200],cdimm_dq0[72],cdimm_dq1[72],cdimm_dq[72],l_ISarray1[200],l_ISarray0[200],l_ISarray[200];//,isdimm_dq[72]
+ //uint8_t isdimm_dq0[72],isdimm_dq1[72];
+ uint8_t l_rankpair_table[MAX_RANK] ;
+ 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);
+ uint64_t l_generic_buffer0,l_generic_buffer1,l_generic_buffer;
+ uint32_t l_sbit,l_len;
+ uint8_t l_output0,l_output1,l_output,l_j;
+
+
input_type l_input_type_e = ISDIMM_DQ;
uint8_t valid_rank[MAX_RANK] ;
char l_str[200] = "";
@@ -1166,18 +1103,18 @@ fapi::ReturnCode mcb_error_map(const fapi::Target & i_target_mba, uint8_t o_er
{
- rc = fapiGetScom(i_target_centaur,MBS_MCBIST01_MCBEMA1Q_0x0201166a,l_mcbem1ab); if(rc) return rc;
- rc_num = l_mcb_fail_160.insert(l_mcbem1ab,0,60,0);if (rc_num){FAPI_ERR( "Error in function mcb_error_map:");rc.setEcmdError(rc_num);return rc;}
- rc = fapiGetScom(i_target_centaur,MBS_MCBIST01_MCBEMA2Q_0x0201166b,l_mcbem2ab); if(rc) return rc;
- rc_num = l_mcb_fail_160.insert(l_mcbem2ab,60,60,0);if (rc_num){FAPI_ERR( "Error in function mcb_error_map:");rc.setEcmdError(rc_num);return rc;}
- rc = fapiGetScom(i_target_centaur,MBS_MCBIST01_MCBEMA3Q_0x0201166c,l_mcbem3ab); if(rc) return rc;
- rc_num = l_mcb_fail_160.insert(l_mcbem3ab,120,40,0);if (rc_num){FAPI_ERR( "Error in function mcb_error_map:");rc.setEcmdError(rc_num);return rc;}
- rc = fapiGetScom(i_target_centaur,MBS_MCBIST01_MCBEMB1Q_0x0201166d,l_mcbem1ab); if(rc) return rc;
- rc_num = l_mcb_fail1_160.insert(l_mcbem1ab,0,60,0);if (rc_num){FAPI_ERR( "Error in function mcb_error_map:");rc.setEcmdError(rc_num);return rc;}
- rc = fapiGetScom(i_target_centaur,MBS_MCBIST01_MCBEMB2Q_0x0201166e,l_mcbem2ab); if(rc) return rc;
- rc_num = l_mcb_fail1_160.insert(l_mcbem2ab,60,60,0);if (rc_num){FAPI_ERR( "Error in function mcb_error_map:");rc.setEcmdError(rc_num);return rc;}
- rc = fapiGetScom(i_target_centaur,MBS_MCBIST01_MCBEMB3Q_0x0201166f,l_mcbem3ab); if(rc) return rc;
- rc_num = l_mcb_fail1_160.insert(l_mcbem3ab,120,40,0);if (rc_num){FAPI_ERR( "Error in function mcb_error_map:");rc.setEcmdError(rc_num);return rc;}
+ rc = fapiGetScom(i_target_centaur,MBS_MCBIST01_MCBEMA1Q_0x0201166a,l_mcbem1ab); if(rc) return rc;
+ rc_num = l_mcb_fail_160.insert(l_mcbem1ab,0,60,0);if (rc_num){FAPI_ERR( "Error in function mcb_error_map:");rc.setEcmdError(rc_num);return rc;}
+ rc = fapiGetScom(i_target_centaur,MBS_MCBIST01_MCBEMA2Q_0x0201166b,l_mcbem2ab); if(rc) return rc;
+ rc_num = l_mcb_fail_160.insert(l_mcbem2ab,60,60,0);if (rc_num){FAPI_ERR( "Error in function mcb_error_map:");rc.setEcmdError(rc_num);return rc;}
+ rc = fapiGetScom(i_target_centaur,MBS_MCBIST01_MCBEMA3Q_0x0201166c,l_mcbem3ab); if(rc) return rc;
+ rc_num = l_mcb_fail_160.insert(l_mcbem3ab,120,40,0);if (rc_num){FAPI_ERR( "Error in function mcb_error_map:");rc.setEcmdError(rc_num);return rc;}
+ rc = fapiGetScom(i_target_centaur,MBS_MCBIST01_MCBEMB1Q_0x0201166d,l_mcbem1ab); if(rc) return rc;
+ rc_num = l_mcb_fail1_160.insert(l_mcbem1ab,0,60,0);if (rc_num){FAPI_ERR( "Error in function mcb_error_map:");rc.setEcmdError(rc_num);return rc;}
+ rc = fapiGetScom(i_target_centaur,MBS_MCBIST01_MCBEMB2Q_0x0201166e,l_mcbem2ab); if(rc) return rc;
+ rc_num = l_mcb_fail1_160.insert(l_mcbem2ab,60,60,0);if (rc_num){FAPI_ERR( "Error in function mcb_error_map:");rc.setEcmdError(rc_num);return rc;}
+ rc = fapiGetScom(i_target_centaur,MBS_MCBIST01_MCBEMB3Q_0x0201166f,l_mcbem3ab); if(rc) return rc;
+ rc_num = l_mcb_fail1_160.insert(l_mcbem3ab,120,40,0);if (rc_num){FAPI_ERR( "Error in function mcb_error_map:");rc.setEcmdError(rc_num);return rc;}
}
else if(l_mbaPosition==1)
@@ -1261,26 +1198,37 @@ fapi::ReturnCode mcb_error_map(const fapi::Target & i_target_mba, uint8_t o_er
}
rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_TYPE, &i_target_mba, l_attr_eff_dimm_type_u8); if(rc) return rc;
+
+ //Adi
+ //l_attr_eff_dimm_type_u8 = 0;
+
//ISDIMM error map
//uint8_t l_max_ranks =8;
//Modified New Code
//ReturnCode rc;
-uint8_t l_index,l_i,l_number,l_value,l_value1,l_cur_rank,l_number1;
-l_number1=0; //HB
-uint8_t l_array[200],l_array0[200],l_marray0[200],l_array1[200],l_marray1[200],l_marray[200];
-uint8_t l_rankpair_table[MAX_RANK] ;
-ecmdDataBufferBase l_data_buffer1_64(64),l_data_buffer3_64(64);
-l_i = 0;
+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(61);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 = fapiPutScom(i_target_mba,0x02011773,l_data_buffer1_64); if(rc) return rc;
+/*
+rc_num = l_data_buffer1_64.clearBit(12);if (rc_num){FAPI_ERR( "Error in function setup_mcbist:");rc.setEcmdError(rc_num);return rc;}
+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(31);if (rc_num){FAPI_ERR( "Error in function setup_mcbist:");rc.setEcmdError(rc_num);return rc;}
+rc_num = l_data_buffer1_64.setBit(2);if (rc_num){FAPI_ERR( "Error in function setup_mcbist:");rc.setEcmdError(rc_num);return rc;}
+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(9);if (rc_num){FAPI_ERR( "Error in function setup_mcbist:");rc.setEcmdError(rc_num);return rc;}
+rc_num = l_data_buffer1_64.setBit(7);if (rc_num){FAPI_ERR( "Error in function setup_mcbist:");rc.setEcmdError(rc_num);return rc;}
+rc = fapiPutScom(i_target_mba,0x02011674,l_data_buffer1_64); if(rc) return rc;
+rc = fapiPutScom(i_target_mba,0x02011672,l_data_buffer1_64); if(rc) return rc;*/
rc_num = l_data_buffer1_64.flushTo0();
i_port = 0;
+
+
+
+
+
+
+
+
while(i_port < 2)
{
rc_num = l_data_buffer1_64.flushTo0();
@@ -1291,12 +1239,12 @@ rc_num = l_data_buffer3_64.flushTo0();
{
//FAPI_INF("l_array:%d",l_i);
l_i = 0;
- rc = fapiGetScom(i_target_mba,0x02011672,l_data_buffer1_64); if(rc) return rc;
- rc = fapiGetScom(i_target_mba,0x02011674,l_data_buffer3_64); if(rc) return rc;
+ rc = fapiGetScom(i_target_mba,0x02011672,l_data_buf_port0); if(rc) return rc;
+ rc = fapiGetScom(i_target_mba,0x02011674,l_data_buf_spare); if(rc) return rc;
for(l_index=0;l_index<64;l_index++)
{
- if(l_data_buffer1_64.isBitSet(l_index))
+ if(l_data_buf_port0.isBitSet(l_index))
{
l_array0[l_i] = l_index;
l_i++;
@@ -1306,7 +1254,7 @@ rc_num = l_data_buffer3_64.flushTo0();
for(l_index=0;l_index<16;l_index++)
{
- if(l_data_buffer3_64.isBitSet(l_index))
+ if(l_data_buf_spare.isBitSet(l_index))
{
l_array0[l_i] = l_index+64;
l_i++;
@@ -1320,11 +1268,11 @@ rc_num = l_data_buffer3_64.flushTo0();
{
//FAPI_INF("l_array:%d",l_i);
l_i = 0;
- rc = fapiGetScom(i_target_mba,0x02011673,l_data_buffer1_64); if(rc) return rc;
- rc = fapiGetScom(i_target_mba,0x02011674,l_data_buffer3_64); if(rc) return rc;
+ rc = fapiGetScom(i_target_mba,0x02011673,l_data_buf_port1); if(rc) return rc;
+ rc = fapiGetScom(i_target_mba,0x02011674,l_data_buf_spare); if(rc) return rc;
for(l_index=0;l_index<64;l_index++)
{
- if(l_data_buffer1_64.isBitSet(l_index))
+ if(l_data_buf_port1.isBitSet(l_index))
{
l_array1[l_i] = l_index;
l_i++;//FAPI_INF("l_array:%d",l_i);
@@ -1337,7 +1285,7 @@ rc_num = l_data_buffer3_64.flushTo0();
for(l_index=16;l_index<32;l_index++)
{
- if(l_data_buffer3_64.isBitSet(l_index))
+ if(l_data_buf_spare.isBitSet(l_index))
{
l_array1[l_i] = l_index+64-16;
l_i++;//FAPI_INF("l_array:%d",l_i);
@@ -1355,13 +1303,13 @@ rc_num = l_data_buffer3_64.flushTo0();
{
//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;
+ rc = fapiGetScom(i_target_mba,0x02011774,l_data_buf_spare); if(rc) return rc;
+ rc = fapiGetScom(i_target_mba,0x02011772,l_data_buf_port0); if(rc) return rc;
for(l_index=0;l_index<64;l_index++)
{
- if(l_data_buffer1_64.isBitSet(l_index))
+ if(l_data_buf_port0.isBitSet(l_index))
{
l_array0[l_i] = l_index;
l_i++;//FAPI_INF("l_array:%d",l_i);
@@ -1372,7 +1320,7 @@ rc_num = l_data_buffer3_64.flushTo0();
}
for(l_index=0;l_index<16;l_index++)
{
- if(l_data_buffer3_64.isBitSet(l_index))
+ if(l_data_buf_spare.isBitSet(l_index))
{
l_array0[l_i] = l_index+64;
l_i++;//FAPI_INF("l_array:%d",l_i);
@@ -1385,12 +1333,12 @@ rc_num = l_data_buffer3_64.flushTo0();
{
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;
+ rc = fapiGetScom(i_target_mba,0x02011774,l_data_buf_spare); if(rc) return rc;
+ rc = fapiGetScom(i_target_mba,0x02011773,l_data_buf_port1); if(rc) return rc;
for(l_index=0;l_index<64;l_index++)
{
- if(l_data_buffer1_64.isBitSet(l_index))
+ if(l_data_buf_port1.isBitSet(l_index))
{
l_array1[l_i] = l_index;
l_i++;//FAPI_INF("l_array:%d",l_i);
@@ -1399,7 +1347,7 @@ rc_num = l_data_buffer3_64.flushTo0();
}
for(l_index=16;l_index<32;l_index++)
{
- if(l_data_buffer3_64.isBitSet(l_index))
+ if(l_data_buf_spare.isBitSet(l_index))
{
l_array1[l_i] = l_index+64-16;
l_i++;//FAPI_INF("l_array:%d",l_i);
@@ -1412,9 +1360,35 @@ rc_num = l_data_buffer3_64.flushTo0();
i_port++;
}
+
+//Conversion from CDIMM larray to ISDIMM larray
+//port 0
+
+ for( l_i = 0;l_i < MAX_ISDIMM_DQ;l_i++)
+ {
+ rc=rosetta_map(i_target_mba,0,l_input_type_e,l_i,0,o_val);if(rc) return rc;
+ //isdimm_dq0[l_i] = o_val;
+ cdimm_dq0[o_val] = l_i;
+
+ }
+
+ //port 1
+
+ for( l_i = 0;l_i < MAX_ISDIMM_DQ;l_i++)
+ {
+ rc=rosetta_map(i_target_mba,1,l_input_type_e,l_i,0,o_val);if(rc) return rc;
+ //isdimm_dq1[l_i] = o_val;
+ cdimm_dq1[o_val] = l_i;
+ }
+
+
+
+
+
+
uint8_t l_num,io_num,io_num0,io_num1,l_inter,l_flag,l_n;
-l_n=0; //HB
-io_num0=0;
+l_n=0;io_num0= 0;io_num1=0;
+
//FAPI_INF("%s:l_max_rank%d",i_target_mba.toEcmdString(),l_max_rank);
l_port = 0;
while(l_port<2)
@@ -1429,6 +1403,15 @@ io_num0=0;
}
l_n = l_number1;
rc = mss_getrankpair(i_target_mba,l_port,0,&rank_pair,l_rankpair_table);if(rc) return rc;
+
+ for( l_i = 0;l_i < MAX_ISDIMM_DQ;l_i++)
+ {
+
+ cdimm_dq[l_i] = cdimm_dq0[l_i];
+ }
+
+
+
}
else
{
@@ -1438,28 +1421,123 @@ io_num0=0;
l_n = l_number;
}
rc = mss_getrankpair(i_target_mba,l_port,0,&rank_pair,l_rankpair_table);if(rc) return rc;
+
+
+ for( l_i = 0;l_i < MAX_ISDIMM_DQ;l_i++)
+ {
+
+ cdimm_dq[l_i] = cdimm_dq1[l_i];
+ }
+
+
}
- for(l_cur_rank = 0;l_cur_rank < l_max_rank;l_cur_rank++)
+ //Getting array for converting CDIMM values as index and ISDIMM values as value of array for that index
+ for(l_index=0;l_index<l_n;l_index++)
{
+ l_value = l_array[l_index] ;
+
+ l_value1 = cdimm_dq[l_value];
+ if(l_value>=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_index<l_n;l_index++)
+
+
+ if((l_attr_eff_dimm_type_u8 == 1) || (l_attr_eff_dimm_type_u8 == 3))
{
- l_value = l_array[l_index];
- l_inter = (l_value/4);
- //l_value1=(i_rank*20)+l_inter;
- l_value1 = l_num-1;
- if((l_inter*4 == l_marray[l_value1])&&(l_num != 0))
- continue;
- l_marray[l_num] = l_inter*4;
- l_num++;
- //FAPI_INF("%s:l_value,l_value1,l_num:%d,%d,%d",i_target_mba.toEcmdString(),l_value,l_value1,l_num);
+ //For ISDIMM marray
+ for(l_index=0;l_index<l_n;l_index++)
+ {
+
+ l_value = l_ISarray[l_index];
+ l_inter = (l_value/4);
+
+
+ l_value1 = l_num-1;
+
+ l_marray[l_num] = l_inter*4;
+ l_num++;
+ //FAPI_INF("%s:l_value,l_value1,l_num:%d,%d,%d",i_target_mba.toEcmdString(),l_value,l_value1,l_num);
+ }
+
+
}
+ else
+ {
+ //For CDIMM marray
+ for(l_index=0;l_index<l_n;l_index++)
+ {
+
+ l_value = l_array[l_index];
+ l_inter = (l_value/4);
+
+ l_value1 = l_num-1;
+
+ l_marray[l_num] = l_inter*4;
+ l_num++;
+ //FAPI_INF("%s:l_value,l_value1,l_num:%d,%d,%d",i_target_mba.toEcmdString(),l_value,l_value1,l_num);
+ }
+
+ }
+
+ //Loop to sort Masked ISDIMM array
+ for(l_i=0; l_i<l_num-1; l_i++)
+ {
+ for(l_j=l_i+1;l_j<l_num;l_j++)
+ {
+ if(l_marray[l_i]>l_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<l_num;l_i++)
+ {
+ l_flag = 0;
+
+ if((l_marray[l_i] == l_marray[l_i+1])&&(l_num != 0))
+ {
+ l_flag = 1;
+ }
+
+ if(l_flag == 0)
+ {
+ l_marray11[l_j] = l_marray[l_i];
+ l_j++;
+ }
}
+ l_num = l_j;
+
+
+
+ //}
//FAPI_INF("%s:l_value,l_value1,l_num:%d,%d,%d",i_target_mba.toEcmdString(),l_value,l_value1,l_num);
//io_num = l_num;
if(l_port == 0)
@@ -1471,8 +1549,17 @@ io_num0=0;
}
for(l_index=0;l_index<io_num0;l_index++)
{
- l_marray0[l_index] = l_marray[l_index];
+ l_marray0[l_index] = l_marray11[l_index];
}
+
+ for(l_index=0;l_index<l_number1;l_index++)
+ {
+
+ l_ISarray0[l_index] =l_ISarray[l_index];
+ }
+
+
+
}
else
{
@@ -1483,15 +1570,37 @@ io_num0=0;
}
for(l_index=0;l_index<io_num1;l_index++)
{
- l_marray1[l_index] = l_marray[l_index];
+ l_marray1[l_index] = l_marray11[l_index];
+ }
+ for(l_index=0;l_index<l_number;l_index++)
+ {
+
+ l_ISarray1[l_index] =l_ISarray[l_index];
}
-
}
l_port++;
}
+
+
+
+
+
+
//DEBUG PRINTS
/*
+for(l_i = 0;l_i < l_number1;l_i++)
+ {
+ FAPI_INF("%s:Port 0 FINAL ISDIMM ARRAY:%d and index %d",i_target_mba.toEcmdString(),l_ISarray0[l_i],l_i );
+ }
+
+FAPI_INF("________________________________________________________________________________________________________");
+
+ for(l_i = 0;l_i < l_number;l_i++)
+ {
+ FAPI_INF("%s:Port 1 FINAL ISDIMM ARRAY:%d and index %d",i_target_mba.toEcmdString(),l_ISarray1[l_i],l_i );
+ }
+
FAPI_INF("________________________________________________________________________________________________________");
for(l_i = 0;l_i < l_number1;l_i++)
@@ -1536,7 +1645,19 @@ FAPI_INF("______________________________________________________________________
{
l_marray[l_index] = l_marray0[l_index];
}
+ /*for(l_index=0;l_index<l_number1;l_index++)
+ {
+ l_ISarray[l_index] = l_ISarray0[l_index];
+ }*/
+
+ //l_sbit = 0;
+ //l_len = 8;
+ //l_generic_buffer = l_data_buf_port0.getDoubleWord (0);
+ //l_generic_buffer_spare = l_data_buf_spare.getDoubleWord (0);
+ //rc_num= rc_num | l_data_buf_spare.extractToRight(&l_output,l_sbit,l_len);
+ //l_n = l_number;
+ //l_generic_buffer = l_generic_buffer0;
}
else
{
@@ -1548,29 +1669,181 @@ FAPI_INF("______________________________________________________________________
l_marray[l_index] = l_marray1[l_index];
}
+ //l_sbit = 16;
+ //l_len = 8;
+ //l_generic_buffer = l_data_buf_port1.getDoubleWord (0);
+ //l_generic_buffer_spare = l_data_buf_spare.getDoubleWord (0);
+ //rc_num= rc_num | l_data_buf_spare.extractToRight(&l_output,l_sbit,l_len);
+ /*for(l_index=0;l_index<l_number;l_index++)
+ {
+ l_ISarray[l_index] = l_ISarray1[l_index];
+ }*/
+ //l_n = l_number;
}
+
+
+
+
if(l_max_rank == 0)
{
FAPI_DBG("%s: NO RANKS FOUND ON PORT %d",i_target_mba.toEcmdString(),l_port);
}
else
{
- if(l_mbaPosition ==0)
+
+
+
+
+
+
+
+
+
+ //To set the mask print in error map
+
+ l_value =0;
+
+
+ if(l_port == 0)
+ {
+ //For Port 0
+ //rc_num = l_ISDIMM_spare0.flushTo0();if (rc_num){FAPI_ERR( "Error in function error_map:");rc.setEcmdError(rc_num);return rc;}
+ //rc_num = l_ISDIMM_BUF0.flushTo0();if (rc_num){FAPI_ERR( "Error in function error_map:");rc.setEcmdError(rc_num);return rc;}
+
+ /*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("\n%s:BEFORE MASK %016llX%02X \n",i_target_mba.toEcmdString(),l_generic_buffer0,l_output0);*/
+ for(l_index=0;l_index<l_number1;l_index++)
+ {
+ l_flag = 0;
+ l_value =l_ISarray0[l_index];
+ //FAPI_INF("Value is %d for index %d", l_value,l_index);
+ if(l_value>=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<l_number;l_index++)
{
- {FAPI_DBG("%s:################# MBA01 ###########################\n",i_target_mba.toEcmdString());
- FAPI_DBG("%s:################# PORT%d ERROR MAP #################\n",i_target_mba.toEcmdString(),l_port);}
+ l_flag = 0;
+ l_value =l_ISarray1[l_index];
+ //FAPI_INF("Value is %d for index %d", l_value,l_index);
+ if(l_value>=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
}
+
OpenPOWER on IntegriCloud