summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/usr/hwpf/hwp/dram_training/dram_training.C5
-rw-r--r--src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_access_delay_reg.C422
-rw-r--r--src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_access_delay_reg.H16
-rw-r--r--src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_draminit_training_advanced.C324
-rwxr-xr-xsrc/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_draminit_training_advanced.H12
-rw-r--r--src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_generic_shmoo.C3749
-rw-r--r--src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_generic_shmoo.H48
-rwxr-xr-xsrc/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist.C905
-rwxr-xr-xsrc/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist.H56
-rw-r--r--src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_address.C33
-rw-r--r--src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_common.C1333
-rw-r--r--src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_shmoo_common.H28
-rw-r--r--src/usr/hwpf/hwp/mc_config/mss_eff_config/mss_eff_config_shmoo.C7
13 files changed, 5893 insertions, 1045 deletions
diff --git a/src/usr/hwpf/hwp/dram_training/dram_training.C b/src/usr/hwpf/hwp/dram_training/dram_training.C
index 3d2e11639..161d0a2c0 100644
--- a/src/usr/hwpf/hwp/dram_training/dram_training.C
+++ b/src/usr/hwpf/hwp/dram_training/dram_training.C
@@ -783,8 +783,6 @@ void* call_mss_draminit_trainadv( void *io_pArgs )
{
errlHndl_t l_err = NULL;
IStepError l_stepError;
- uint8_t l_pattern = 0;
- uint8_t l_test_type = 0;
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
"call_mss_draminit_trainadv entry" );
@@ -815,8 +813,7 @@ void* call_mss_draminit_trainadv( void *io_pArgs )
(const_cast<TARGETING::Target*>(l_mba_target)) );
// call the HWP with each fapi::Target
- FAPI_INVOKE_HWP(l_err, mss_draminit_training_advanced, l_fapi_mba_target,
- l_pattern, l_test_type);
+ FAPI_INVOKE_HWP(l_err, mss_draminit_training_advanced, l_fapi_mba_target);
if (l_err)
{
diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_access_delay_reg.C b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_access_delay_reg.C
index b2e1b001d..df79c60c5 100644
--- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_access_delay_reg.C
+++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_access_delay_reg.C
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: mss_access_delay_reg.C,v 1.14 2013/01/10 14:32:39 sasethur Exp $
+// $Id: mss_access_delay_reg.C,v 1.17 2013/07/18 06:22:49 sauchadh Exp $
//------------------------------------------------------------------------------
// *! (C) Copyright International Business Machines Corp. 2011
// *! All Rights Reserved -- Property of IBM
@@ -49,7 +49,10 @@
// 1.11 | sauchadh |18-Dec-12| Fixed Frimware comments and removed print statements in between
// 1.12 | sauchadh |18-Dec-12| Added support for unused DQS in x8 mode
// 1.13 | sauchadh |7-Jan-12 | Added DQSCLK and RDCLK in phase select register
-// 1.14 | sauchadh |8-Jan-12 | Fixed Firmware comments
+// 1.14 | sauchadh |8-Jan-12 | Fixed Firmware comments
+// 1.15 | sauchadh |20-may-13| Fixed swizzle issue in DQSCLK phase rotators
+// 1.16 | sauchadh |12-jun-13| ADDED CAC registers for read dqs
+// 1.17 | sauchadh |18-Jul-13| Added data bit disable registers
//----------------------------------------------------------------------
@@ -110,10 +113,50 @@ fapi::ReturnCode mss_access_delay_reg(const fapi::Target & i_target_mba, access_
uint8_t l_mbapos=0;
const uint8_t l_ISDIMM_dqmax=71;
const uint8_t l_CDIMM_dqmax=79;
+ uint8_t l_adr=0;
+ const uint8_t addr_max=19;
+ const uint8_t cmd_max=3;
+ const uint8_t cnt_max=20;
+ const uint8_t clk_max=8;
+ const uint8_t addr_lanep0[addr_max]={1,5,3,7,10,6,4,10,13,12,9,9,0,0,6,4,1,4,8};
+ const uint8_t addr_adrp0[addr_max]={2,1,1,3,1,3,1,3,3,3,2,3,2,3,1,0,3,3,3};
+ const uint8_t addr_lanep1[addr_max]={7,10,3,6,8,12,6,1,5,8,2,0,13,4,5,9,6,11,9};
+ const uint8_t addr_adrp1[addr_max]={2,1,2,2,1,3,1,1,1,3,1,3,2,3,3,0,0,1,3};
+ const uint8_t addr_lanep2[addr_max]={8,0,7,1,12,10,1,5,9,5,13,5,4,2,4,9,10,9,0};
+ const uint8_t addr_adrp2[addr_max]={2,2,3,0,3,1,2,0,1,3,2,1,0,2,3,3,3,2,1};
+ const uint8_t addr_lanep3[addr_max]={6,2,9,9,2,3,4,10,0,5,1,5,4,1,8,11,5,12,1};
+ const uint8_t addr_adrp3[addr_max]={3,0,2,3,2,0,3,3,1,2,2,1,0,1,3,3,0,3,0};
+
+ const uint8_t cmd_lanep0[cmd_max]={2,11,5};
+ const uint8_t cmd_adrp0[cmd_max]={3,1,3};
+ const uint8_t cmd_lanep1[cmd_max]={2,10,10};
+ const uint8_t cmd_adrp1[cmd_max]={2,3,2};
+ const uint8_t cmd_lanep2[cmd_max]={3,11,3};
+ const uint8_t cmd_adrp2[cmd_max]={1,3,0};
+ const uint8_t cmd_lanep3[cmd_max]={7,10,7};
+ const uint8_t cmd_adrp3[cmd_max]={1,1,3};
+
+ const uint8_t cnt_lanep0[cnt_max]={0,7,3,1,7,8,8,3,8,6,7,2,2,0,9,1,3,6,9,2};
+ const uint8_t cnt_adrp0[cnt_max]={1,0,3,0,2,2,1,2,0,0,1,2,0,0,1,1,0,2,0,1};
+ const uint8_t cnt_lanep1[cnt_max]={5,4,0,5,11,9,10,7,1,11,0,4,12,3,6,8,1,4,7,7};
+ const uint8_t cnt_adrp1[cnt_max]={2,1,2,0,2,1,0,1,3,0,1,0,2,1,3,0,2,2,3,0};
+ const uint8_t cnt_lanep2[cnt_max]={0,4,7,13,11,5,12,2,3,6,11,6,7,1,10,8,8,2,4,1};
+ const uint8_t cnt_adrp2[cnt_max]={0,1,1,3,1,2,2,0,2,2,0,1,2,1,0,3,1,1,2,3};
+ const uint8_t cnt_lanep3[cnt_max]={0,11,9,8,4,7,0,3,8,6,13,8,7,0,6,6,1,2,9,5};
+ const uint8_t cnt_adrp3[cnt_max]={2,1,0,2,1,0,3,2,0,1,3,1,2,0,0,2,3,1,1,3};
+
+ const uint8_t clk_lanep0[clk_max]={10,11,11,10,4,5,13,12};
+ const uint8_t clk_adrp0[clk_max]={0,0,2,2,2,2,2,2};
+ const uint8_t clk_lanep1[clk_max]={3,2,8,9,1,0,3,2};
+ const uint8_t clk_adrp1[clk_max]={3,3,2,2,0,0,0,0};
+ const uint8_t clk_lanep2[clk_max]={11,10,6,7,2,3,8,9};
+ const uint8_t clk_adrp2[clk_max]={2,2,0,0,3,3,0,0};
+ const uint8_t clk_lanep3[clk_max]={3,2,13,12,10,11,11,10};
+ const uint8_t clk_adrp3[clk_max]={3,3,2,2,0,0,2,2};
+
+
+ rc = mss_getrankpair(i_target_mba,i_port_u8,i_rank_u8,&l_rank_pair,l_rankpair_table); if(rc) return rc;
-
- rc = mss_getrankpair(i_target_mba,i_port_u8,i_rank_u8,&l_rank_pair,l_rankpair_table); if(rc) return rc;
-
rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_TYPE, &i_target_mba, l_dimmtype); if(rc) return rc;
rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_WIDTH, &i_target_mba, l_dram_width); if(rc) return rc;
@@ -197,6 +240,246 @@ fapi::ReturnCode mss_access_delay_reg(const fapi::Target & i_target_mba, access_
l_len=l_out.bit_length;
}
+
+ else if(i_input_type_e==ADDRESS)
+ {
+ if(i_input_index_u8<=18) // 19 delay values for Address
+ {
+ if((i_port_u8==0) && (l_mbapos==0))
+ {
+ l_lane=addr_lanep0[i_input_index_u8];
+ l_adr=addr_adrp0[i_input_index_u8];
+ }
+ else if((i_port_u8==1) && (l_mbapos==0))
+ {
+ l_lane=addr_lanep1[i_input_index_u8];
+ l_adr=addr_adrp1[i_input_index_u8];
+ }
+ else if((i_port_u8==0) && (l_mbapos==1))
+ {
+ l_lane=addr_lanep2[i_input_index_u8];
+ l_adr=addr_adrp2[i_input_index_u8];
+ }
+ else
+ {
+ l_lane=addr_lanep3[i_input_index_u8];
+ l_adr=addr_adrp3[i_input_index_u8];
+ }
+
+ }
+
+ else
+ {
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR);
+ FAPI_ERR("Wrong input index specified rc = 0x%08X ", uint32_t(rc));
+ return rc;
+ }
+
+ ip_type_t l_input=ADDRESS_t;
+ if(i_verbose==1)
+ {
+ FAPI_INF("ADR=%d",l_adr);
+ FAPI_INF("lane=%d",l_lane);
+ }
+ l_block=l_adr;
+ rc=get_address(i_target_mba,i_port_u8,l_rank_pair,l_input,l_block,l_lane,l_scom_add,l_start_bit,l_len8); if(rc) return rc;
+ l_sbit=l_start_bit;
+ l_len=l_len8;
+ if(i_verbose==1)
+ {
+ FAPI_INF("scom_address=%llX",l_scom_add);
+ FAPI_INF("start bit=%d",l_start_bit);
+ FAPI_INF("length=%d",l_len8);
+ }
+ }
+
+ else if(i_input_type_e==DATA_DISABLE)
+ {
+ if(i_input_index_u8<=4) // 5 delay values for data bits disable register
+ {
+ l_block=i_input_index_u8;
+ }
+ else
+ {
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR);
+ FAPI_ERR("Wrong input index specified rc = 0x%08X ", uint32_t(rc));
+ return rc;
+ }
+
+ ip_type_t l_input=DATA_DISABLE_t;
+ if(i_verbose==1)
+ {
+ FAPI_INF("block=%d",l_block);
+ }
+ l_lane=0;
+ rc=get_address(i_target_mba,i_port_u8,l_rank_pair,l_input,l_block,l_lane,l_scom_add,l_start_bit,l_len8); if(rc) return rc;
+ l_sbit=l_start_bit;
+ l_len=l_len8;
+ if(i_verbose==1)
+ {
+ FAPI_INF("scom_address=%llX",l_scom_add);
+ FAPI_INF("start bit=%d",l_start_bit);
+ FAPI_INF("length=%d",l_len8);
+ }
+ }
+
+
+ else if(i_input_type_e==COMMAND)
+ {
+ if(i_input_index_u8<=2) // 3 delay values for Command
+ {
+ if((i_port_u8==0) && (l_mbapos==0))
+ {
+ l_lane=cmd_lanep0[i_input_index_u8];
+ l_adr=cmd_adrp0[i_input_index_u8];
+ }
+ else if((i_port_u8==1) && (l_mbapos==0))
+ {
+ l_lane=cmd_lanep1[i_input_index_u8];
+ l_adr=cmd_adrp1[i_input_index_u8];
+ }
+ else if((i_port_u8==0) && (l_mbapos==1))
+ {
+ l_lane=cmd_lanep2[i_input_index_u8];
+ l_adr=cmd_adrp2[i_input_index_u8];
+ }
+ else
+ {
+ l_lane=cmd_lanep3[i_input_index_u8];
+ l_adr=cmd_adrp3[i_input_index_u8];
+ }
+
+ }
+
+ else
+ {
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR);
+ FAPI_ERR("Wrong input index specified rc = 0x%08X ", uint32_t(rc));
+ return rc;
+ }
+
+ ip_type_t l_input=COMMAND_t;
+ if(i_verbose==1)
+ {
+ FAPI_INF("ADR=%d",l_adr);
+ FAPI_INF("lane=%d",l_lane);
+ }
+ l_block=l_adr;
+ rc=get_address(i_target_mba,i_port_u8,l_rank_pair,l_input,l_block,l_lane,l_scom_add,l_start_bit,l_len8); if(rc) return rc;
+ l_sbit=l_start_bit;
+ l_len=l_len8;
+ if(i_verbose==1)
+ {
+ FAPI_INF("scom_address=%llX",l_scom_add);
+ FAPI_INF("start bit=%d",l_start_bit);
+ FAPI_INF("length=%d",l_len8);
+ }
+ }
+
+ else if(i_input_type_e==CONTROL)
+ {
+ if(i_input_index_u8<=19) // 20 delay values for Control
+ {
+ if((i_port_u8==0) && (l_mbapos==0))
+ {
+ l_lane=cnt_lanep0[i_input_index_u8];
+ l_adr=cnt_adrp0[i_input_index_u8];
+ }
+ else if((i_port_u8==1) && (l_mbapos==0))
+ {
+ l_lane=cnt_lanep1[i_input_index_u8];
+ l_adr=cnt_adrp1[i_input_index_u8];
+ }
+ else if((i_port_u8==0) && (l_mbapos==1))
+ {
+ l_lane=cnt_lanep2[i_input_index_u8];
+ l_adr=cnt_adrp2[i_input_index_u8];
+ }
+ else
+ {
+ l_lane=cnt_lanep3[i_input_index_u8];
+ l_adr=cnt_adrp3[i_input_index_u8];
+ }
+
+ }
+
+ else
+ {
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR);
+ FAPI_ERR("Wrong input index specified rc = 0x%08X ", uint32_t(rc));
+ return rc;
+ }
+
+ ip_type_t l_input=CONTROL_t;
+ if(i_verbose==1)
+ {
+ FAPI_INF("ADR=%d",l_adr);
+ FAPI_INF("lane=%d",l_lane);
+ }
+ l_block=l_adr;
+ rc=get_address(i_target_mba,i_port_u8,l_rank_pair,l_input,l_block,l_lane,l_scom_add,l_start_bit,l_len8); if(rc) return rc;
+ l_sbit=l_start_bit;
+ l_len=l_len8;
+ if(i_verbose==1)
+ {
+ FAPI_INF("scom_address=%llX",l_scom_add);
+ FAPI_INF("start bit=%d",l_start_bit);
+ FAPI_INF("length=%d",l_len8);
+ }
+ }
+
+ else if(i_input_type_e==CLOCK)
+ {
+ if(i_input_index_u8<=7) // 8 delay values for CLK
+ {
+ if((i_port_u8==0) && (l_mbapos==0))
+ {
+ l_lane=clk_lanep0[i_input_index_u8];
+ l_adr=clk_adrp0[i_input_index_u8];
+ }
+ else if((i_port_u8==1) && (l_mbapos==0))
+ {
+ l_lane=clk_lanep1[i_input_index_u8];
+ l_adr=clk_adrp1[i_input_index_u8];
+ }
+ else if((i_port_u8==0) && (l_mbapos==1))
+ {
+ l_lane=clk_lanep2[i_input_index_u8];
+ l_adr=clk_adrp2[i_input_index_u8];
+ }
+ else
+ {
+ l_lane=clk_lanep3[i_input_index_u8];
+ l_adr=clk_adrp3[i_input_index_u8];
+ }
+
+ }
+
+ else
+ {
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR);
+ FAPI_ERR("Wrong input index specified rc = 0x%08X ", uint32_t(rc));
+ return rc;
+ }
+
+ ip_type_t l_input=CLOCK_t;
+ if(i_verbose==1)
+ {
+ FAPI_INF("ADR=%d",l_adr);
+ FAPI_INF("lane=%d",l_lane);
+ }
+ l_block=l_adr;
+ rc=get_address(i_target_mba,i_port_u8,l_rank_pair,l_input,l_block,l_lane,l_scom_add,l_start_bit,l_len8); if(rc) return rc;
+ l_sbit=l_start_bit;
+ l_len=l_len8;
+ if(i_verbose==1)
+ {
+ FAPI_INF("scom_address=%llX",l_scom_add);
+ FAPI_INF("start bit=%d",l_start_bit);
+ FAPI_INF("length=%d",l_len8);
+ }
+ }
+
else if (i_input_type_e==RD_DQS || i_input_type_e==WR_DQS || i_input_type_e==DQS_ALIGN || i_input_type_e==DQS_GATE || i_input_type_e==RDCLK || i_input_type_e==DQSCLK)
{
@@ -832,7 +1115,7 @@ fapi::ReturnCode mss_access_delay_reg(const fapi::Target & i_target_mba, access_
return rc;
}
io_value_u32=l_output;
- FAPI_INF("Delay value=%d",io_value_u32);
+ // FAPI_INF("Delay value=%d",io_value_u32);
}
else if(i_access_type_e==WRITE)
@@ -841,7 +1124,7 @@ fapi::ReturnCode mss_access_delay_reg(const fapi::Target & i_target_mba, access_
if(i_input_type_e==RD_DQ || i_input_type_e==RD_DQS || i_input_type_e==RAW_RD_DQ_0 || i_input_type_e==RAW_RD_DQ_1 || i_input_type_e==RAW_RD_DQ_2 || i_input_type_e==RAW_RD_DQ_3 || i_input_type_e==RAW_RD_DQ_4 || i_input_type_e==RAW_RD_DQS_0 || i_input_type_e==RAW_RD_DQS_1 || i_input_type_e==RAW_RD_DQS_2 || i_input_type_e==RAW_RD_DQS_3 || i_input_type_e==RAW_RD_DQS_4
|| i_input_type_e==RAW_SYS_ADDR_CLK || i_input_type_e==RAW_SYS_CLK_0 || i_input_type_e==RAW_SYS_CLK_1 || i_input_type_e==RAW_SYS_CLK_2 || i_input_type_e==RAW_SYS_CLK_3 || i_input_type_e==RAW_SYS_CLK_4 || i_input_type_e==RAW_WR_CLK_0 || i_input_type_e==RAW_WR_CLK_1 || i_input_type_e==RAW_WR_CLK_2 || i_input_type_e==RAW_WR_CLK_3 || i_input_type_e==RAW_WR_CLK_4
|| i_input_type_e==RAW_ADDR_0 || i_input_type_e==RAW_ADDR_1 || i_input_type_e==RAW_ADDR_2 || i_input_type_e==RAW_ADDR_3 || i_input_type_e==RAW_DQS_ALIGN_0 || i_input_type_e==RAW_DQS_ALIGN_1 || i_input_type_e==RAW_DQS_ALIGN_2 || i_input_type_e==RAW_DQS_ALIGN_3 || i_input_type_e==RAW_DQS_ALIGN_4
- || i_input_type_e==DQS_ALIGN )
+ || i_input_type_e==DQS_ALIGN || i_input_type_e==COMMAND || i_input_type_e==ADDRESS || i_input_type_e==CONTROL || i_input_type_e==CLOCK )
{
l_start=25; // l_start is starting bit of delay value in the register. There are different registers and each register has a different field for delay
}
@@ -860,12 +1143,22 @@ fapi::ReturnCode mss_access_delay_reg(const fapi::Target & i_target_mba, access_
l_start=30;
}
+ else if(i_input_type_e==DATA_DISABLE)
+ {
+ l_start=16;
+ }
+
else
{
FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR);
FAPI_ERR("Wrong input type specified rc = 0x%08X ", uint32_t(rc));
return rc;
}
+ if(i_verbose==1)
+ {
+ FAPI_INF("value given=%d",io_value_u32);
+ }
+
rc=fapiGetScom(i_target_mba,l_scom_add,data_buffer_64);if(rc) return rc;
rc_num=data_buffer_64.insert(io_value_u32,l_sbit,l_len,l_start);
if(rc_num)
@@ -978,9 +1271,8 @@ fapi::ReturnCode cross_coupled(const fapi::Target & i_target_mba,uint8_t i_port,
out.bit_length=l_len;
}
- else if (i_input_type_e==RD_DQS || i_input_type_e==WR_DQS || i_input_type_e==DQS_ALIGN)
+ else if (i_input_type_e==WR_DQS || i_input_type_e==DQS_ALIGN)
{
-
if(i_port==0 && l_mbapos==0)
{
l_dq=dqs_dq_lane_p0[i_input_index];
@@ -1298,11 +1590,7 @@ fapi::ReturnCode cross_coupled(const fapi::Target & i_target_mba,uint8_t i_port,
}
}
- if (i_input_type_e==RD_DQS)
- {
- l_input_type=RD_DQS_t;
- }
- else if(i_input_type_e==WR_DQS)
+ if(i_input_type_e==WR_DQS)
{
l_input_type=WR_DQS_t;
}
@@ -1318,9 +1606,10 @@ fapi::ReturnCode cross_coupled(const fapi::Target & i_target_mba,uint8_t i_port,
}
- else if (i_input_type_e==DQS_GATE || i_input_type_e==RDCLK || i_input_type_e==DQSCLK)
+ else if (i_input_type_e==RD_DQS || i_input_type_e==DQS_GATE || i_input_type_e==RDCLK || i_input_type_e==DQSCLK)
{
-
+
+
if(i_port==0 && l_mbapos==0)
{
l_dq=dqs_dq_lane_p0[i_input_index];
@@ -1366,11 +1655,12 @@ fapi::ReturnCode cross_coupled(const fapi::Target & i_target_mba,uint8_t i_port,
else
{
l_lane=22;
- }
+ }
+ //FAPI_INF("here");
if (i_input_type_e==DQS_GATE)
{
- l_input_type=DQS_GATE_t;
+ l_input_type=DQS_GATE_t;
}
else if(i_input_type_e==RDCLK)
@@ -1378,6 +1668,11 @@ fapi::ReturnCode cross_coupled(const fapi::Target & i_target_mba,uint8_t i_port,
l_input_type=RDCLK_t;
}
+ else if(i_input_type_e==RD_DQS)
+ {
+ l_input_type=RD_DQS_t;
+ }
+
else
{
l_input_type=DQSCLK_t;
@@ -1386,7 +1681,8 @@ fapi::ReturnCode cross_coupled(const fapi::Target & i_target_mba,uint8_t i_port,
if(i_verbose==1)
{
FAPI_INF("lane is=%d",l_lane);
- }
+ }
+
rc=get_address(i_target_mba,i_port,i_rank_pair,l_input_type,l_block,l_lane,l_scom_address_64,l_start_bit,l_len); if(rc) return rc;
out.scom_addr=l_scom_address_64;
out.start_bit=l_start_bit;
@@ -1611,14 +1907,18 @@ fapi::ReturnCode get_address(const fapi::Target & i_target_mba,uint8_t i_port, u
uint8_t l_lane=0;
const uint64_t l_port01_st=0x8000000000000000ull;
const uint64_t l_port23_st=0x8001000000000000ull;
+ const uint64_t l_port01_adr_st=0x8000400000000000ull;
+ const uint64_t l_port23_adr_st=0x8001400000000000ull;
const uint32_t l_port01_en=0x0301143f;
const uint64_t l_rd_port01_en=0x040301143full;
const uint64_t l_sys_clk_en=0x730301143full;
const uint64_t l_wr_clk_en =0x740301143full;
const uint64_t l_adr02_st=0x8000400000000000ull;
const uint64_t l_adr13_st=0x8001400000000000ull;
- const uint64_t l_dqs_gate_en=0x130301143full;
+ const uint64_t l_dqs_gate_en=0x000000130301143full;
const uint64_t l_dqsclk_en=0x090301143full;
+ const uint64_t l_data_ds_en=0x7c0301143full;
+ uint8_t l_tmp=0;
rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, &i_target_mba, l_mbapos); if(rc) return rc;
if(i_input_type_e==WR_DQ_t || i_input_type_e==RAW_WR_DQ)
@@ -1686,6 +1986,38 @@ fapi::ReturnCode get_address(const fapi::Target & i_target_mba,uint8_t i_port, u
o_scom_address_64=l_scom_address_64;
+ }
+
+ else if(i_input_type_e==COMMAND_t || i_input_type_e==CLOCK_t || i_input_type_e==CONTROL_t || i_input_type_e==ADDRESS_t )
+ {
+ l_tmp|=4;
+ l_lane=i_lane/2;
+ l_temp=l_lane+l_tmp;
+ l_temp|=(i_block*4)<<8;
+ l_temp=l_temp<<32;
+ if((i_port==0 && l_mbapos==0) || (i_port==0 && l_mbapos==1))
+ {
+ l_scom_address_64|= l_port01_adr_st | l_temp | l_port01_en;
+ }
+ else
+ {
+ l_scom_address_64|= l_port23_adr_st | l_temp | l_port01_en;
+ }
+
+ if((i_lane % 2) == 0)
+ {
+ o_start_bit=49;
+ o_len=7;
+ }
+ else
+ {
+ o_start_bit=57;
+ o_len=7;
+ }
+
+
+ o_scom_address_64=l_scom_address_64;
+
}
@@ -1746,7 +2078,26 @@ fapi::ReturnCode get_address(const fapi::Target & i_target_mba,uint8_t i_port, u
o_scom_address_64=l_scom_address_64;
}
+
+ else if(i_input_type_e==DATA_DISABLE_t)
+ {
+ l_temp|=(i_block*4)<<8;
+ l_temp|=i_rank_pair<<8;
+ l_temp=l_temp<<32;
+ if((i_port==0 && l_mbapos==0) || (i_port==0 && l_mbapos==1))
+ {
+ l_scom_address_64|= l_port01_st | l_temp | l_data_ds_en;
+ }
+ else
+ {
+ l_scom_address_64|= l_port23_st | l_temp | l_data_ds_en;
+ }
+ o_start_bit=48;
+ o_len=16;
+ o_scom_address_64=l_scom_address_64;
+ }
+
else if(i_input_type_e==RD_CLK_t)
{
l_temp|=(i_block*4)<<8;
@@ -2139,22 +2490,20 @@ fapi::ReturnCode get_address(const fapi::Target & i_target_mba,uint8_t i_port, u
else if(i_input_type_e==RAW_DQS_GATE || i_input_type_e==DQS_GATE_t)
{
- //l_lane=i_lane;
- l_lane=i_lane/4;
- l_temp|=l_lane;
- l_temp|=(i_block*4)<<8;
- l_temp|=i_rank_pair<<8;
- l_temp=l_temp<<32;
-
- if((i_port==0 && l_mbapos==0) || (i_port==0 && l_mbapos==1))
+ if(i_input_type_e==RAW_DQS_GATE)
{
- l_scom_address_64|= l_port01_st | l_temp | l_dqs_gate_en;
+ l_lane=i_lane/4;
+ l_temp|=l_lane;
}
- else
- {
- l_scom_address_64|= l_port23_st | l_temp | l_dqs_gate_en;
+ if(i_input_type_e==DQS_GATE_t)
+ {
+ l_lane=i_lane;
}
+ l_temp|=(i_block*4)<<8;
+ l_temp|=i_rank_pair<<8;
+ l_temp=l_temp<<32;
+
if(i_input_type_e==RAW_DQS_GATE)
{
if((i_lane % 4) == 0)
@@ -2208,6 +2557,15 @@ fapi::ReturnCode get_address(const fapi::Target & i_target_mba,uint8_t i_port, u
}
+ if((i_port==0 && l_mbapos==0) || (i_port==0 && l_mbapos==1))
+ {
+ l_scom_address_64|= l_port01_st | l_temp | l_dqs_gate_en;
+ }
+ else
+ {
+ l_scom_address_64|= l_port23_st | l_temp | l_dqs_gate_en;
+ }
+
o_scom_address_64=l_scom_address_64;
}
diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_access_delay_reg.H b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_access_delay_reg.H
index 54a3c7b04..69c6d0e9d 100644
--- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_access_delay_reg.H
+++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_access_delay_reg.H
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-//$Id: mss_access_delay_reg.H,v 1.7 2013/01/07 17:16:49 sasethur Exp $
+//$Id: mss_access_delay_reg.H,v 1.9 2013/07/18 06:23:03 sauchadh Exp $
//------------------------------------------------------------------------------
// *! (C) Copyright International Business Machines Corp. 2011
// *! All Rights Reserved -- Property of IBM
@@ -128,7 +128,12 @@ enum input_type_t {
RAW_DQSCLK_2,
RAW_DQSCLK_3,
RAW_DQSCLK_4,
- DQSCLK
+ DQSCLK,
+ COMMAND,
+ CONTROL,
+ CLOCK,
+ ADDRESS,
+ DATA_DISABLE
};
enum ip_type_t {
@@ -152,7 +157,12 @@ enum ip_type_t {
RDCLK_t,
RAW_RDCLK,
DQSCLK_t,
- RAW_DQSCLK
+ RAW_DQSCLK,
+ COMMAND_t,
+ CONTROL_t,
+ CLOCK_t,
+ ADDRESS_t,
+ DATA_DISABLE_t
};
diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_draminit_training_advanced.C b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_draminit_training_advanced.C
index bf2740375..ec8a17164 100644
--- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_draminit_training_advanced.C
+++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_draminit_training_advanced.C
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: mss_draminit_training_advanced.C,v 1.30 2013/04/24 13:41:57 sasethur Exp $
+// $Id: mss_draminit_training_advanced.C,v 1.35 2013/08/08 13:07:28 sasethur Exp $
/* File is created by SARAVANAN SETHURAMAN on Thur 29 Sept 2011. */
//------------------------------------------------------------------------------
@@ -31,7 +31,7 @@
// *! TITLE :mss_draminit_training_advanced.C
// *! DESCRIPTION : Tools for centaur procedures
// *! OWNER NAME : Saravanan Sethuraman email ID:saravanans@in.ibm.com
-// *! BACKUP NAME: Mark D Bellows email ID:bellows@us.ibm.com
+// *! BACKUP NAME: Mark D Bellows email ID:bellows@us.ibm.com
// #! ADDITIONAL COMMENTS :
//
// General purpose funcs
@@ -70,6 +70,12 @@
// 1.28 | sasethur |22-Apr-13| Fixed fw comment
// 1.29 | sasethur |23-Apr-13| Fixed fw comment
// 1.30 | sasethur |24-Apr-13| Fixed fw comment
+// 1.31 | sasethur |10-May-13| Added user input for test type, pattern from wrapper
+// 1.32 | sasethur |04-Jun-13| Fixed for PortD cnfg, vref print for min setup, hold, fixed rdvref print, added set/reset mcbist attr
+// 1.33 | sasethur |12-Jun-13| Updated mcbist setup attribute
+// 1.34 | sasethur |20-Jun-13| Fixed read_vref print, setup attribute
+// 1.35 | sasethur |08-Aug-13| Fixed fw comment.
+
// This procedure Schmoo's DRV_IMP, SLEW, VREF (DDR, CEN), RCV_IMP based on attribute from effective config procedure
// DQ & DQS Driver impedance, Slew rate, WR_Vref shmoo would call only write_eye shmoo for margin calculation
@@ -93,10 +99,7 @@
#include <mss_generic_shmoo.H>
#include <mss_draminit_training_advanced.H>
#include <mss_unmask_errors.H>
-//#include <mss_mcbist_common.C>
-const uint8_t PATTERN = 14;
-const uint8_t TESTTYPE = 13;
const uint32_t MASK = 1;
const uint32_t MAX_DIMM =2;
@@ -117,38 +120,37 @@ extern "C"
using namespace fapi;
-fapi::ReturnCode mss_draminit_training_advanced_cloned(const fapi::Target & i_target_mba,
- uint8_t i_pattern, uint8_t i_test_type);
+fapi::ReturnCode mss_draminit_training_advanced_cloned(const fapi::Target & i_target_mba);
fapi::ReturnCode drv_imped_shmoo(const fapi::Target & i_target_mba, uint8_t i_port,
- shmoo_type_t i_shmoo_type_valid,
- uint8_t i_pattern, uint8_t i_test_type);
+ shmoo_type_t i_shmoo_type_valid);
fapi::ReturnCode slew_rate_shmoo(const fapi::Target & i_target_mba, uint8_t i_port,
- shmoo_type_t i_shmoo_type_valid,
- uint8_t i_pattern, uint8_t i_test_type);
+ shmoo_type_t i_shmoo_type_valid);
fapi::ReturnCode wr_vref_shmoo(const fapi::Target & i_target_mba, uint8_t i_port,
- shmoo_type_t i_shmoo_type_valid,
- uint8_t i_pattern, uint8_t i_test_type);
+ shmoo_type_t i_shmoo_type_valid);
fapi::ReturnCode rd_vref_shmoo(const fapi::Target & i_target_mba, uint8_t i_port,
- shmoo_type_t i_shmoo_type_valid,
- uint8_t i_pattern, uint8_t i_test_type);
+ shmoo_type_t i_shmoo_type_valid);
fapi::ReturnCode rcv_imp_shmoo(const fapi::Target & i_target_mba, uint8_t i_port,
- shmoo_type_t i_shmoo_type_valid,
- uint8_t i_pattern, uint8_t i_test_type);
+ shmoo_type_t i_shmoo_type_valid);
fapi::ReturnCode delay_shmoo(const fapi::Target & i_target_mba, uint8_t i_port,
shmoo_type_t i_shmoo_type_valid,
uint32_t *o_left_margin, uint32_t *o_right_margin,
- uint8_t i_pattern, uint8_t i_test_type, uint32_t i_shmoo_param);
+ uint32_t i_shmoo_param);
void find_best_margin(shmoo_param i_shmoo_param_valid,uint32_t i_left[],
- uint32_t i_right[], const uint8_t i_max,
+ uint32_t i_right[], const uint8_t l_max,
uint32_t i_param_nom, uint8_t& o_index);
+fapi::ReturnCode set_attribute(const fapi::Target & i_target_mba);
+
+fapi::ReturnCode reset_attribute(const fapi::Target & i_target_mba);
+
+
//-----------------------------------------------------------------------------------
//Function name: mss_draminit_training_advanced()
//Description: This function varies driver impedance, receiver impedance, slew, wr & rd vref
@@ -159,17 +161,12 @@ void find_best_margin(shmoo_param i_shmoo_param_valid,uint32_t i_left[],
// Default vlaues are Zero
//-----------------------------------------------------------------------------------
-fapi::ReturnCode mss_draminit_training_advanced(const fapi::Target & i_target_mba,
- uint8_t i_pattern,
- uint8_t i_test_type)
+fapi::ReturnCode mss_draminit_training_advanced(const fapi::Target & i_target_mba)
{
// const fapi::Target is centaur.mba
- i_pattern= PATTERN; // MPR - Hard coded will be removed after attribute is assigned in firmware
- i_test_type= TESTTYPE; // SIMPLE RAND - Hard coded will be removed after attribute is assigned in firmware
fapi::ReturnCode rc;
- FAPI_INF(" pattern bit is %d and test_type_bit is %d",i_pattern,i_test_type);
-
- rc = mss_draminit_training_advanced_cloned(i_target_mba,i_pattern,i_test_type);
+ //FAPI_INF(" pattern bit is %d and test_type_bit is %d");
+ rc = mss_draminit_training_advanced_cloned(i_target_mba);
if (rc)
{
FAPI_ERR("Advanced DRAM Init training procedure is Failed rc = 0x%08X (creator = %d)", uint32_t(rc), rc.getCreator());
@@ -199,9 +196,7 @@ fapi::ReturnCode mss_draminit_training_advanced(const fapi::Target & i_target_mb
// Input : const fapi::Target MBA
// i_pattern, i_test_type : Default = 0, mcbist lab function would use this arg
//-----------------------------------------------------------------------------------
-fapi::ReturnCode mss_draminit_training_advanced_cloned(const fapi::Target & i_target_mba,
- uint8_t i_pattern,
- uint8_t i_test_type)
+fapi::ReturnCode mss_draminit_training_advanced_cloned(const fapi::Target & i_target_mba)
{
//const fapi::Target is centaur.mba
fapi::ReturnCode rc;
@@ -277,13 +272,13 @@ fapi::ReturnCode mss_draminit_training_advanced_cloned(const fapi::Target & i_ta
//Check for Shmoo Parameter, if anyof them is enabled then go into the loop else the procedure exit
- if (( l_num_ranks_per_dimm_u8array[l_port][0] > 0 ) || (l_num_ranks_per_dimm_u8array[l_port][1] > 0))
+ if (( l_num_ranks_per_dimm_u8array[0][0] > 0 ) || (l_num_ranks_per_dimm_u8array[0][1] > 0) || ( l_num_ranks_per_dimm_u8array[1][0] > 0 ) || (l_num_ranks_per_dimm_u8array[1][1] > 0))
{
if((l_shmoo_param_valid != PARAM_NONE) || (l_shmoo_type_valid != TEST_NONE))
{
if((l_shmoo_param_valid & DRV_IMP) != 0)
{
- rc = drv_imped_shmoo(i_target_mba, l_port, l_shmoo_type_valid, i_pattern,i_test_type);
+ rc = drv_imped_shmoo(i_target_mba, l_port, l_shmoo_type_valid);
if (rc)
{
FAPI_ERR("Driver Impedance Schmoo function is Failed rc = 0x%08X (creator = %d)", uint32_t(rc), rc.getCreator());
@@ -292,7 +287,7 @@ fapi::ReturnCode mss_draminit_training_advanced_cloned(const fapi::Target & i_ta
}
if((l_shmoo_param_valid & SLEW_RATE) !=0)
{
- rc = slew_rate_shmoo(i_target_mba, l_port, l_shmoo_type_valid, i_pattern,i_test_type);
+ rc = slew_rate_shmoo(i_target_mba, l_port, l_shmoo_type_valid);
if (rc)
{
FAPI_ERR("Slew Rate Schmoo Function is Failed rc = 0x%08X (creator = %d)", uint32_t(rc), rc.getCreator());
@@ -300,17 +295,17 @@ fapi::ReturnCode mss_draminit_training_advanced_cloned(const fapi::Target & i_ta
}
}
if((l_shmoo_param_valid & WR_VREF) != 0)
- {
- rc = wr_vref_shmoo(i_target_mba, l_port, l_shmoo_type_valid, i_pattern,i_test_type);
+ {
+ rc = wr_vref_shmoo(i_target_mba, l_port, l_shmoo_type_valid);
if (rc)
- {
+ {
FAPI_ERR("Write Vref Schmoo Function is Failed rc = 0x%08X (creator = %d)", uint32_t(rc), rc.getCreator());
return rc;
}
}
if((l_shmoo_param_valid & RD_VREF) !=0)
{
- rc = rd_vref_shmoo(i_target_mba, l_port, l_shmoo_type_valid, i_pattern,i_test_type);
+ rc = rd_vref_shmoo(i_target_mba, l_port, l_shmoo_type_valid);
if (rc)
{
FAPI_ERR("Read Vref Schmoo Function is Failed rc = 0x%08X (creator = %d)", uint32_t(rc), rc.getCreator());
@@ -319,16 +314,16 @@ fapi::ReturnCode mss_draminit_training_advanced_cloned(const fapi::Target & i_ta
}
if ((l_shmoo_param_valid & RCV_IMP) !=0)
{
- rc = rcv_imp_shmoo(i_target_mba, l_port, l_shmoo_type_valid, i_pattern,i_test_type);
+ rc = rcv_imp_shmoo(i_target_mba, l_port, l_shmoo_type_valid);
if (rc)
{
FAPI_ERR("Receiver Impedance Schmoo Function is Failed rc = 0x%08X (creator = %d)", uint32_t(rc), rc.getCreator());
return rc;
}
}
- if ((l_shmoo_param_valid & DELAY_REG) != 0)
+ if (((l_shmoo_param_valid & DELAY_REG) != 0) || (l_shmoo_type_valid & TEST_NONE) != 0)
{
- rc = delay_shmoo(i_target_mba, l_port, l_shmoo_type_valid, &l_left_margin, &l_right_margin, i_pattern, i_test_type, l_shmoo_param);
+ rc = delay_shmoo(i_target_mba, l_port, l_shmoo_type_valid, &l_left_margin, &l_right_margin, l_shmoo_param);
if (rc)
{
FAPI_ERR("Delay Schmoo Function is Failed rc = 0x%08X (creator = %d)", uint32_t(rc), rc.getCreator());
@@ -356,14 +351,12 @@ return rc;
fapi::ReturnCode drv_imped_shmoo(const fapi::Target & i_target_mba,
uint8_t i_port,
- shmoo_type_t i_shmoo_type_valid,
- uint8_t i_pattern,
- uint8_t i_test_type)
+ shmoo_type_t i_shmoo_type_valid)
{
fapi::ReturnCode rc;
uint8_t l_drv_imp_dq_dqs[MAX_PORT] = {0};
uint8_t l_drv_imp_dq_dqs_nom[MAX_PORT] = {0};
- uint8_t l_drv_imp_dq_dqs_new[MAX_PORT] = {0};
+ //uint8_t l_drv_imp_dq_dqs_new[MAX_PORT] = {0};
uint8_t index=0;
uint8_t l_slew_rate_dq_dqs[MAX_PORT] = {0};
uint8_t l_slew_rate_dq_dqs_schmoo[MAX_PORT] = {0};
@@ -377,6 +370,7 @@ fapi::ReturnCode drv_imped_shmoo(const fapi::Target & i_target_mba,
uint32_t l_left_margin = 0;
uint32_t l_right_margin = 0;
uint8_t count = 0;
+ uint8_t shmoo_param_count = 0;
uint8_t l_slew_type = 0; // Hard coded since this procedure will touch only DQ_DQS and not address
rc = FAPI_ATTR_GET(ATTR_EFF_CEN_DRV_IMP_DQ_DQS, &i_target_mba, l_drv_imp_dq_dqs_nom);
@@ -403,7 +397,7 @@ fapi::ReturnCode drv_imped_shmoo(const fapi::Target & i_target_mba,
{
for(index = 0; index< MAX_DRV_IMP; index+=1)
{
- if (l_drv_imp_dq_dqs_schmoo[i_port] & MASK)
+ if (l_drv_imp_dq_dqs_schmoo[i_port] & MASK)
{
l_drv_imp_dq_dqs[i_port] = drv_imp_array[index];
FAPI_INF("Current Driver Impedance Value = %d Ohms", drv_imp_array[index]);
@@ -415,11 +409,16 @@ fapi::ReturnCode drv_imped_shmoo(const fapi::Target & i_target_mba,
rc = config_slew_rate(i_target_mba, i_port, l_slew_type, l_drv_imp_dq_dqs[i_port], l_slew_rate_dq_dqs[i_port]);
if (rc) return rc;
FAPI_INF("Calling Shmoo for finding Timing Margin:");
+ if (shmoo_param_count)
+ {
+ rc = set_attribute(i_target_mba); if(rc) return rc;
+ }
rc = delay_shmoo(i_target_mba, i_port, i_shmoo_type_valid,
- &l_left_margin, &l_right_margin, i_pattern, i_test_type, l_drv_imp_dq_dqs_in);
+ &l_left_margin, &l_right_margin, l_drv_imp_dq_dqs_in);
if (rc) return rc;
l_left_margin_drv_imp_array[index]= l_left_margin;
l_right_margin_drv_imp_array[index]= l_right_margin;
+ shmoo_param_count++;
}
else
{
@@ -442,7 +441,7 @@ fapi::ReturnCode drv_imped_shmoo(const fapi::Target & i_target_mba,
else
{
- if(i_port == 0)
+ /* if(i_port == 0)
{
l_drv_imp_dq_dqs_new[0] = drv_imp_array[count];
l_drv_imp_dq_dqs_new[1] = l_drv_imp_dq_dqs_nom[1]; // This can be removed once the get/set attribute takes care of this
@@ -451,29 +450,35 @@ fapi::ReturnCode drv_imped_shmoo(const fapi::Target & i_target_mba,
{
l_drv_imp_dq_dqs_new[1] = drv_imp_array[count];
l_drv_imp_dq_dqs_new[0] = l_drv_imp_dq_dqs_nom[0];
- }
+ }*/
- if (l_drv_imp_dq_dqs_new[i_port] != l_drv_imp_dq_dqs_nom[i_port])
- {
+ // if (l_drv_imp_dq_dqs_new[i_port] != l_drv_imp_dq_dqs_nom[i_port])
+ // {
//FAPI_INF("Better Margin found on %d Ohms on %s", l_drv_imp_dq_dqs_new[i_port], i_target_mba.toEcmdString());
- //rc = FAPI_ATTR_SET(ATTR_EFF_CEN_DRV_IMP_DQ_DQS, &i_target_mba, l_drv_imp_dq_dqs_new);
- //if (rc) return rc;
+ // rc = FAPI_ATTR_SET(ATTR_EFF_CEN_DRV_IMP_DQ_DQS, &i_target_mba, l_drv_imp_dq_dqs_new);
+ // if (rc) return rc;
//FAPI_INF("Configuring New Driver Impedance Value to Registers:");
//rc = config_drv_imp(i_target_mba, i_port, l_drv_imp_dq_dqs_new[i_port]);
//if (rc) return rc;
//rc = config_slew_rate(i_target_mba, i_port, l_slew_type, l_drv_imp_dq_dqs_new[i_port], l_slew_rate_dq_dqs[i_port]);
//if (rc) return rc;
- }
- else
- {
- FAPI_INF("Nominal value will not be changed - Restoring the original values!");
+ // }
+ // else
+ // {
+ //FAPI_INF("Nominal value will not be changed - Restoring the original values!");
+ FAPI_INF("Restoring the nominal values!");
+ rc = FAPI_ATTR_SET(ATTR_EFF_CEN_DRV_IMP_DQ_DQS, &i_target_mba, l_drv_imp_dq_dqs_nom);
+ if (rc) return rc;
rc = config_drv_imp(i_target_mba, i_port, l_drv_imp_dq_dqs_nom[i_port]);
if (rc) return rc;
+ rc = FAPI_ATTR_SET(ATTR_EFF_CEN_SLEW_RATE_DQ_DQS, &i_target_mba, l_slew_rate_dq_dqs);
+ if (rc) return rc;
rc = config_slew_rate(i_target_mba, i_port, l_slew_type, l_drv_imp_dq_dqs_nom[i_port], l_slew_rate_dq_dqs[i_port]);
if (rc) return rc;
- }
+ // }
}
-
+ FAPI_INF("Restoring mcbist setup attribute...");
+ rc = reset_attribute(i_target_mba); if (rc) return rc;
FAPI_INF("++++ Driver impedance shmoo function executed successfully ++++");
}
return rc;
@@ -493,22 +498,21 @@ return rc;
fapi::ReturnCode slew_rate_shmoo(const fapi::Target & i_target_mba,
uint8_t i_port,
- shmoo_type_t i_shmoo_type_valid,
- uint8_t i_pattern,
- uint8_t i_test_type)
+ shmoo_type_t i_shmoo_type_valid)
{
fapi::ReturnCode rc;
uint8_t l_slew_rate_dq_dqs[MAX_PORT] = {0};
uint8_t l_slew_rate_dq_dqs_nom[MAX_PORT] = {0};
uint8_t l_slew_rate_dq_dqs_nom_fc = 0;
uint8_t l_slew_rate_dq_dqs_in = 0;
- uint8_t l_slew_rate_dq_dqs_new[MAX_PORT] = {0};
+ //uint8_t l_slew_rate_dq_dqs_new[MAX_PORT] = {0};
uint32_t l_slew_rate_dq_dqs_schmoo[MAX_PORT] = {0};
uint8_t l_drv_imp_dq_dqs_nom[MAX_PORT] = {0};
i_shmoo_type_valid = WR_EYE; // Hard coded - Other shmoo type is not valid - Temporary
uint8_t index = 0;
uint8_t count = 0;
+ uint8_t shmoo_param_count = 0;
uint32_t l_left_margin_slew_array[MAX_NUM_SLEW_RATES] = {0};
uint32_t l_right_margin_slew_array[MAX_NUM_SLEW_RATES] = {0};
uint32_t l_left_margin = 0;
@@ -546,11 +550,16 @@ fapi::ReturnCode slew_rate_shmoo(const fapi::Target & i_target_mba,
if (rc) return rc;
l_slew_rate_dq_dqs_in = l_slew_rate_dq_dqs[i_port];
FAPI_INF("Calling Shmoo for finding Timing Margin:");
+ if (shmoo_param_count)
+ {
+ rc = set_attribute(i_target_mba); if(rc) return rc;
+ }
rc = delay_shmoo(i_target_mba, i_port, i_shmoo_type_valid,
- &l_left_margin, &l_right_margin, i_pattern, i_test_type, l_slew_rate_dq_dqs_in);
+ &l_left_margin, &l_right_margin, l_slew_rate_dq_dqs_in);
if (rc) return rc;
l_left_margin_slew_array[index]= l_left_margin;
l_right_margin_slew_array[index]= l_right_margin;
+ shmoo_param_count++;
}
else
{
@@ -572,7 +581,7 @@ fapi::ReturnCode slew_rate_shmoo(const fapi::Target & i_target_mba,
else
{
- if(i_port == 0)
+ /* if(i_port == 0)
{
l_slew_rate_dq_dqs_new[0] = slew_rate_array[count];
l_slew_rate_dq_dqs_new[1] = l_slew_rate_dq_dqs_nom[1];
@@ -581,25 +590,36 @@ fapi::ReturnCode slew_rate_shmoo(const fapi::Target & i_target_mba,
{
l_slew_rate_dq_dqs_new[1] = slew_rate_array[count];
l_slew_rate_dq_dqs_new[0] = l_slew_rate_dq_dqs_nom[0];
- }
+ }*/
+ FAPI_INF("Restoring the nominal values!");
+ rc = FAPI_ATTR_SET(ATTR_EFF_CEN_DRV_IMP_DQ_DQS, &i_target_mba, l_drv_imp_dq_dqs_nom);
+ if (rc) return rc;
+ rc = config_drv_imp(i_target_mba, i_port, l_drv_imp_dq_dqs_nom[i_port]);
+ if (rc) return rc;
+ rc = FAPI_ATTR_SET(ATTR_EFF_CEN_SLEW_RATE_DQ_DQS, &i_target_mba, l_slew_rate_dq_dqs_nom);
+ if (rc) return rc;
+ rc = config_slew_rate(i_target_mba, i_port, l_slew_type, l_drv_imp_dq_dqs_nom[i_port], l_slew_rate_dq_dqs_nom[i_port]);
+ if (rc) return rc;
- if (l_slew_rate_dq_dqs_new[i_port] != l_slew_rate_dq_dqs_nom[i_port])
+ /* if (l_slew_rate_dq_dqs_new[i_port] != l_slew_rate_dq_dqs_nom[i_port])
{
- //FAPI_INF("Better Margin found on Slew Rate: %d V/ns on %s", l_slew_rate_dq_dqs_new[i_port], i_target_mba.toEcmdString());
- //rc = FAPI_ATTR_SET(ATTR_EFF_CEN_SLEW_RATE_DQ_DQS, &i_target_mba, l_slew_rate_dq_dqs_new);
+ FAPI_INF("Better Margin found on Slew Rate: %d V/ns on %s", l_slew_rate_dq_dqs_new[i_port], i_target_mba.toEcmdString());
+ rc = FAPI_ATTR_SET(ATTR_EFF_CEN_SLEW_RATE_DQ_DQS, &i_target_mba, l_slew_rate_dq_dqs_new);
if (rc) return rc;
- //FAPI_INF("Configuring New Slew Rate Value to Registers:");
- //rc = config_slew_rate(i_target_mba, i_port, l_slew_type, l_drv_imp_dq_dqs_nom[i_port], l_slew_rate_dq_dqs_new[i_port]);
+ FAPI_INF("Configuring New Slew Rate Value to Registers:");
+ rc = config_slew_rate(i_target_mba, i_port, l_slew_type, l_drv_imp_dq_dqs_nom[i_port], l_slew_rate_dq_dqs_new[i_port]);
if (rc) return rc;
}
else
{
FAPI_INF("Nominal value will not be changed!");
FAPI_INF("Slew Rate: %d V/ns on %s", l_slew_rate_dq_dqs_nom[i_port], i_target_mba.toEcmdString());
- }
+ } */
}
+ FAPI_INF("Restoring mcbist setup attribute...");
+ rc = reset_attribute(i_target_mba); if (rc) return rc;
FAPI_INF("++++ Slew Rate shmoo function executed successfully ++++");
}
return rc;
@@ -619,14 +639,12 @@ return rc;
fapi::ReturnCode wr_vref_shmoo(const fapi::Target & i_target_mba,
uint8_t i_port,
- shmoo_type_t i_shmoo_type_valid,
- uint8_t i_pattern,
- uint8_t i_test_type)
+ shmoo_type_t i_shmoo_type_valid)
{
fapi::ReturnCode rc;
uint32_t l_wr_dram_vref[MAX_PORT] = {0};
uint32_t l_wr_dram_vref_nom[MAX_PORT] = {0};
- uint32_t l_wr_dram_vref_new[MAX_PORT] = {0};
+ //uint32_t l_wr_dram_vref_new[MAX_PORT] = {0};
uint32_t l_wr_dram_vref_schmoo[MAX_PORT] = {0};
uint32_t l_wr_dram_vref_nom_fc = 0;
uint32_t l_wr_dram_vref_in = 0;
@@ -634,6 +652,7 @@ fapi::ReturnCode wr_vref_shmoo(const fapi::Target & i_target_mba,
uint8_t index = 0;
uint8_t count = 0;
+ uint8_t shmoo_param_count = 0;
uint32_t l_left_margin = 0;
uint32_t l_right_margin = 0;
uint32_t l_left_margin_wr_vref_array[MAX_WR_VREF]= {0};
@@ -660,17 +679,24 @@ fapi::ReturnCode wr_vref_shmoo(const fapi::Target & i_target_mba,
{
if (l_wr_dram_vref_schmoo[i_port] & MASK)
{
- FAPI_INF("Current Vref multiplier value is %d", wr_vref_array[index]);
- l_wr_dram_vref[i_port] = wr_vref_array[index];
- rc = config_wr_dram_vref(i_target_mba, i_port, l_wr_dram_vref[i_port]);
- if (rc) return rc;
- l_wr_dram_vref_in = l_wr_dram_vref[i_port];
- //FAPI_INF(" Calling Shmoo for finding Timing Margin:");
- rc = delay_shmoo(i_target_mba, i_port, i_shmoo_type_valid,
- &l_left_margin, &l_right_margin, i_pattern, i_test_type, l_wr_dram_vref_in);
- if (rc) return rc;
- l_left_margin_wr_vref_array[index]= l_left_margin;
- l_right_margin_wr_vref_array[index]= l_right_margin;
+ FAPI_INF("Current Vref multiplier value is %d", wr_vref_array[index]);
+ l_wr_dram_vref[i_port] = wr_vref_array[index];
+ rc = config_wr_dram_vref(i_target_mba, i_port, l_wr_dram_vref[i_port]);
+ if (rc) return rc;
+ l_wr_dram_vref_in = l_wr_dram_vref[i_port];
+ //FAPI_INF(" Calling Shmoo for finding Timing Margin:");
+ if (shmoo_param_count)
+ {
+ rc = set_attribute(i_target_mba);
+ if (rc) return rc;
+ }
+ rc = delay_shmoo(i_target_mba, i_port, i_shmoo_type_valid,
+ &l_left_margin, &l_right_margin, l_wr_dram_vref_in);
+ if (rc) return rc;
+ l_left_margin_wr_vref_array[index]= l_left_margin;
+ l_right_margin_wr_vref_array[index]= l_right_margin;
+ shmoo_param_count++;
+ FAPI_INF("Wr Vref = %d ; Min Setup time = %d; Min Hold time = %d", wr_vref_array[index],l_left_margin_wr_vref_array[index], l_right_margin_wr_vref_array[index]);
}
else
{
@@ -678,7 +704,8 @@ fapi::ReturnCode wr_vref_shmoo(const fapi::Target & i_target_mba,
l_right_margin_wr_vref_array[index]= 0;
}
l_wr_dram_vref_schmoo[i_port] = (l_wr_dram_vref_schmoo[i_port] >> 1);
- FAPI_INF("Configuring Vref registers_2:, index %d , max value %d, schmoo %x mask %d ", index, MAX_WR_VREF, l_wr_dram_vref_schmoo[i_port], MASK);
+ //FAPI_INF("Wr Vref = %d ; Min Setup time = %d; Min Hold time = %d", wr_vref_array[index],l_left_margin_wr_vref_array[index], l_right_margin_wr_vref_array[index]);
+ //FAPI_INF("Configuring Vref registers_2:, index %d , max value %d, schmoo %x mask %d ", index, MAX_WR_VREF, l_wr_dram_vref_schmoo[i_port], MASK);
}
l_wr_dram_vref_nom_fc = l_wr_dram_vref_nom[i_port];
find_best_margin(WR_VREF, l_left_margin_wr_vref_array,
@@ -693,7 +720,7 @@ fapi::ReturnCode wr_vref_shmoo(const fapi::Target & i_target_mba,
else
{
- if(i_port == 0)
+ /* if(i_port == 0)
{
l_wr_dram_vref_new[0] = wr_vref_array_fitness[count];
l_wr_dram_vref_new[1] = l_wr_dram_vref_nom[1];
@@ -714,12 +741,17 @@ fapi::ReturnCode wr_vref_shmoo(const fapi::Target & i_target_mba,
//if (rc) return rc;
}
else
- {
- FAPI_INF("Nominal value will not be changed!- Restoring the original values!");
+ {*/
+ // FAPI_INF("Nominal value will not be changed!- Restoring the original values!");
+ FAPI_INF(" Restoring the nominal values!");
+ rc = FAPI_ATTR_SET(ATTR_EFF_DRAM_WR_VREF, &i_target_mba, l_wr_dram_vref_nom);
+ if (rc) return rc;
rc = config_wr_dram_vref(i_target_mba, i_port, l_wr_dram_vref_nom[i_port]);
if (rc) return rc;
- }
+ // }
}
+ FAPI_INF("Restoring mcbist setup attribute...");
+ rc = reset_attribute(i_target_mba); if (rc) return rc;
FAPI_INF("++++ Write DRAM Vref Shmoo function executed successfully ++++");
}
return rc;
@@ -740,19 +772,18 @@ fapi::ReturnCode wr_vref_shmoo(const fapi::Target & i_target_mba,
fapi::ReturnCode rd_vref_shmoo(const fapi::Target & i_target_mba,
uint8_t i_port,
- shmoo_type_t i_shmoo_type_valid,
- uint8_t i_pattern,
- uint8_t i_test_type)
+ shmoo_type_t i_shmoo_type_valid)
{
fapi::ReturnCode rc;
uint32_t l_rd_cen_vref[MAX_PORT] = {0};
uint32_t l_rd_cen_vref_nom[MAX_PORT] = {0};
uint32_t l_rd_cen_vref_nom_fc = 0;
uint32_t l_rd_cen_vref_in = 0;
- uint32_t l_rd_cen_vref_new[MAX_PORT] ={0};
+ //uint32_t l_rd_cen_vref_new[MAX_PORT] ={0};
uint32_t l_rd_cen_vref_schmoo[MAX_PORT] = {0};
uint8_t index = 0;
uint8_t count = 0;
+ uint8_t shmoo_param_count = 0;
i_shmoo_type_valid = RD_EYE; // Hard coded - Temporary
uint32_t l_left_margin = 0;
@@ -768,7 +799,7 @@ fapi::ReturnCode rd_vref_shmoo(const fapi::Target & i_target_mba,
FAPI_INF("+++++++++++++++++CENTAUR VREF Read Shmoo Attributes values+++++++++++++++");
FAPI_INF("CEN_RD_VREF[0] = %d CEN_RD_VREF[1] = %d on %s", l_rd_cen_vref_nom[0],l_rd_cen_vref_nom[1], i_target_mba.toEcmdString());
- FAPI_INF("CEN_RD_VREF_SCHMOO[0] = [%d], CEN_RD_VREF_SCHMOO[1] = [%d] on %s", l_rd_cen_vref_schmoo[0], l_rd_cen_vref_schmoo[1],i_target_mba.toEcmdString());
+ FAPI_INF("CEN_RD_VREF_SCHMOO[0] = [%x], CEN_RD_VREF_SCHMOO[1] = [%x] on %s", l_rd_cen_vref_schmoo[0], l_rd_cen_vref_schmoo[1],i_target_mba.toEcmdString());
FAPI_INF("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
if(l_rd_cen_vref_schmoo[i_port] == 0)
@@ -787,10 +818,17 @@ fapi::ReturnCode rd_vref_shmoo(const fapi::Target & i_target_mba,
rc = config_rd_cen_vref(i_target_mba, i_port, l_rd_cen_vref[i_port]); if (rc) return rc;
l_rd_cen_vref_in = l_rd_cen_vref[i_port];
//FAPI_INF(" Calling Shmoo function to find out Timing Margin:");
- rc = delay_shmoo(i_target_mba, i_port, i_shmoo_type_valid, &l_left_margin, &l_right_margin,i_pattern,i_test_type, l_rd_cen_vref_in);
+ if (shmoo_param_count)
+ {
+ rc = set_attribute(i_target_mba);
+ if (rc) return rc;
+ }
+ rc = delay_shmoo(i_target_mba, i_port, i_shmoo_type_valid, &l_left_margin, &l_right_margin, l_rd_cen_vref_in);
if (rc) return rc;
l_left_margin_rd_vref_array[index]= l_left_margin;
l_right_margin_rd_vref_array[index]= l_right_margin;
+ shmoo_param_count++;
+ FAPI_INF("Read Vref = %d ; Min Setup time = %d; Min Hold time = %d", rd_cen_vref_array[index],l_left_margin_rd_vref_array[index], l_right_margin_rd_vref_array[index]);
}
else
{
@@ -798,6 +836,7 @@ fapi::ReturnCode rd_vref_shmoo(const fapi::Target & i_target_mba,
l_right_margin_rd_vref_array[index]= 0;
}
l_rd_cen_vref_schmoo[i_port] = (l_rd_cen_vref_schmoo[i_port] >> 1);
+ /* FAPI_INF("Read Vref = %d ; Min Setup time = %d; Min Hold time = %d", rd_cen_vref_array[index],l_left_margin_rd_vref_array[index], l_right_margin_rd_vref_array[index]); */
}
l_rd_cen_vref_nom_fc = l_rd_cen_vref_nom[i_port];
find_best_margin(RD_VREF, l_left_margin_rd_vref_array,
@@ -812,7 +851,7 @@ fapi::ReturnCode rd_vref_shmoo(const fapi::Target & i_target_mba,
else
{
- if(i_port == 0)
+ /* if(i_port == 0)
{
l_rd_cen_vref_new[0] = rd_cen_vref_array_fitness[count];
l_rd_cen_vref_new[1] = l_rd_cen_vref_nom[1];
@@ -833,12 +872,17 @@ fapi::ReturnCode rd_vref_shmoo(const fapi::Target & i_target_mba,
//if (rc) return rc;
}
else
- {
- FAPI_INF("Nominal value will not be changed!- Restoring the original values!");
+ {*/
+ // FAPI_INF("Nominal value will not be changed!- Restoring the original values!");
+ FAPI_INF("Restoring Nominal values!");
+ rc = FAPI_ATTR_SET(ATTR_EFF_CEN_RD_VREF, &i_target_mba, l_rd_cen_vref_nom);
+ if (rc) return rc;
rc = config_rd_cen_vref(i_target_mba, i_port, l_rd_cen_vref_nom[i_port]);
if (rc) return rc;
- }
+ // }
}
+ FAPI_INF("Restoring mcbist setup attribute...");
+ rc = reset_attribute(i_target_mba); if (rc) return rc;
FAPI_INF("++++ Centaur Read Vref Shmoo function executed successfully ++++");
}
return rc;
@@ -855,19 +899,18 @@ return rc;
//------------------------------------------------------------------------------
fapi::ReturnCode rcv_imp_shmoo(const fapi::Target & i_target_mba,
uint8_t i_port,
- shmoo_type_t i_shmoo_type_valid,
- uint8_t i_pattern,
- uint8_t i_test_type)
+ shmoo_type_t i_shmoo_type_valid)
{
fapi::ReturnCode rc;
uint8_t l_rcv_imp_dq_dqs[MAX_PORT] = {0};
uint8_t l_rcv_imp_dq_dqs_nom[MAX_PORT] = {0};
uint8_t l_rcv_imp_dq_dqs_nom_fc = 0;
uint8_t l_rcv_imp_dq_dqs_in = 0;
- uint8_t l_rcv_imp_dq_dqs_new[MAX_PORT] = {0};
+ //uint8_t l_rcv_imp_dq_dqs_new[MAX_PORT] = {0};
uint32_t l_rcv_imp_dq_dqs_schmoo[MAX_PORT] = {0};
uint8_t index = 0;
uint8_t count = 0;
+ uint8_t shmoo_param_count = 0;
i_shmoo_type_valid = RD_EYE; //Hard coded since no other shmoo is applicable - Temporary
uint32_t l_left_margin = 0;
@@ -901,12 +944,18 @@ fapi::ReturnCode rcv_imp_shmoo(const fapi::Target & i_target_mba,
FAPI_INF("Configuring Receiver impedance registers:");
rc = config_rcv_imp(i_target_mba, i_port, l_rcv_imp_dq_dqs[i_port]); if (rc) return rc;
l_rcv_imp_dq_dqs_in = l_rcv_imp_dq_dqs[i_port];
- FAPI_INF("Calling Shmoo function to find out timing margin:");
+ //FAPI_INF("Calling Shmoo function to find out timing margin:");
+ if (shmoo_param_count)
+ {
+ rc = set_attribute(i_target_mba);
+ if (rc) return rc;
+ }
rc = delay_shmoo(i_target_mba, i_port, i_shmoo_type_valid,
- &l_left_margin, &l_right_margin, i_pattern, i_test_type, l_rcv_imp_dq_dqs_in);
+ &l_left_margin, &l_right_margin, l_rcv_imp_dq_dqs_in);
if (rc) return rc;
l_left_margin_rcv_imp_array[index]= l_left_margin;
l_right_margin_rcv_imp_array[index]= l_right_margin;
+ shmoo_param_count++;
}
else
{
@@ -928,7 +977,7 @@ fapi::ReturnCode rcv_imp_shmoo(const fapi::Target & i_target_mba,
else
{
- if(i_port == 0)
+ /* if(i_port == 0)
{
l_rcv_imp_dq_dqs_new[0] = rcv_imp_array[count];
l_rcv_imp_dq_dqs_new[1] = l_rcv_imp_dq_dqs_nom[1]; // This can be removed once the get/set attribute takes care of this
@@ -937,23 +986,27 @@ fapi::ReturnCode rcv_imp_shmoo(const fapi::Target & i_target_mba,
{
l_rcv_imp_dq_dqs_new[1] = rcv_imp_array[count];
l_rcv_imp_dq_dqs_new[0] = l_rcv_imp_dq_dqs_nom[0];
- }
-
- if (l_rcv_imp_dq_dqs_new[i_port] != l_rcv_imp_dq_dqs_nom[i_port])
- {
+ }*/
+ // if (l_rcv_imp_dq_dqs_new[i_port] != l_rcv_imp_dq_dqs_nom[i_port])
+ // {
//FAPI_INF("Better Margin found on %d on %s", l_rcv_imp_dq_dqs_new[i_port], i_target_mba.toEcmdString());
//rc = FAPI_ATTR_SET(ATTR_EFF_CEN_RCV_IMP_DQ_DQS, &i_target_mba, l_rcv_imp_dq_dqs_new);
//if (rc) return rc;
//rc = config_rcv_imp(i_target_mba, i_port, l_rcv_imp_dq_dqs_new[i_port]);
//if (rc) return rc;
- }
- else
- {
- FAPI_INF("Nominal value will not be changed!- Restoring the original values!");
+ // }
+ // else
+ // {
+ // FAPI_INF("Nominal value will not be changed!- Restoring the original values!");
+ FAPI_INF("Restoring the nominal values!");
+ rc = FAPI_ATTR_SET(ATTR_EFF_CEN_RCV_IMP_DQ_DQS, &i_target_mba, l_rcv_imp_dq_dqs_nom);
+ if (rc) return rc;
rc = config_rcv_imp(i_target_mba, i_port, l_rcv_imp_dq_dqs_nom[i_port]);
if (rc) return rc;
- }
+ // }
}
+ FAPI_INF("Restoring mcbist setup attribute...");
+ rc = reset_attribute(i_target_mba); if (rc) return rc;
FAPI_INF("++++ Receiver Impdeance Shmoo function executed successfully ++++");
}
return rc;
@@ -974,16 +1027,14 @@ fapi::ReturnCode delay_shmoo(const fapi::Target & i_target_mba, uint8_t i_port,
shmoo_type_t i_shmoo_type_valid,
uint32_t *o_left_margin,
uint32_t *o_right_margin,
- uint8_t i_pattern,
- uint8_t i_test_type,
uint32_t i_shmoo_param)
{
fapi::ReturnCode rc;
- FAPI_INF(" Inside the delay shmoo " );
+ //FAPI_INF(" Inside the delay shmoo " );
//Constructor CALL: generic_shmoo::generic_shmoo(uint8_t i_port, uint32_t shmoo_mask,shmoo_algorithm_t shmoo_algorithm)
//generic_shmoo mss_shmoo=generic_shmoo(i_port,2,SEQ_LIN);
generic_shmoo mss_shmoo=generic_shmoo(i_port,i_shmoo_type_valid,SEQ_LIN);
- rc = mss_shmoo.run(i_target_mba, o_left_margin, o_right_margin,i_pattern,i_test_type,i_shmoo_param);
+ rc = mss_shmoo.run(i_target_mba, o_left_margin, o_right_margin,i_shmoo_param);
if(rc)
{
FAPI_ERR("Delay Schmoo Function is Failed rc = 0x%08X (creator = %d)", uint32_t(rc), rc.getCreator());
@@ -992,6 +1043,35 @@ fapi::ReturnCode delay_shmoo(const fapi::Target & i_target_mba, uint8_t i_port,
return rc;
}
+
+//------------------------------------------------------------------------------
+//Function name: set_attributes()
+//Description: Sets the attribute used by all functions
+//------------------------------------------------------------------------------
+
+fapi::ReturnCode set_attribute(const fapi::Target & i_target_mba)
+{
+ fapi::ReturnCode rc;
+ uint8_t l_mcbist_setup_multiple_set = 1; //Hard coded it wont change
+ FAPI_ATTR_SET(ATTR_SCHMOO_MULTIPLE_SETUP_CALL, &i_target_mba, l_mcbist_setup_multiple_set);
+ if (rc) return rc;
+ return rc;
+}
+
+//------------------------------------------------------------------------------
+//Function name: reset_attributes()
+//Description: Sets the attribute used by all functions
+//------------------------------------------------------------------------------
+
+fapi::ReturnCode reset_attribute(const fapi::Target & i_target_mba)
+{
+ fapi::ReturnCode rc;
+ uint8_t l_mcbist_setup_multiple_reset = 0; //Hard coded it wont change
+ FAPI_ATTR_SET(ATTR_SCHMOO_MULTIPLE_SETUP_CALL, &i_target_mba, l_mcbist_setup_multiple_reset);
+ if (rc) return rc;
+ return rc;
+}
+
//------------------------------------------------------------------------------
// Function name:find_best_margin()
// Finds better timing margin and returns the index
@@ -1092,7 +1172,7 @@ void find_best_margin(shmoo_param i_shmoo_param_valid,
{
o_index = index2;
//wont break this loop, since the purpose is to find the best parameter value & best timing margin The enum is constructed to do that
- // FAPI_INF("Best Value found on index %d, Setup Margin: %d, Hold Margin: %d", o_index, i_left[index2], i_right[index2]);
+ // FAPI_INF("Index value %d, Min Setup Margin: %d, Min Hold Margin: %d", o_index, i_left[index2], i_right[index2]);
}
}
}
diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_draminit_training_advanced.H b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_draminit_training_advanced.H
index 706672cbd..1cae04c33 100755
--- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_draminit_training_advanced.H
+++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_draminit_training_advanced.H
@@ -5,7 +5,7 @@
/* */
/* IBM CONFIDENTIAL */
/* */
-/* COPYRIGHT International Business Machines Corp. 2012 */
+/* COPYRIGHT International Business Machines Corp. 2012,2013 */
/* */
/* p1 */
/* */
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: mss_draminit_training_advanced.H,v 1.13 2012/12/06 11:13:42 lapietra Exp $
+// $Id: mss_draminit_training_advanced.H,v 1.16 2013/08/08 14:54:08 sasethur Exp $
/* File is created by SARAVANAN SETHURAMAN on Thur Sept 28 2011. */
//------------------------------------------------------------------------------
@@ -51,7 +51,9 @@
// 1.11 | 26-Oct-12 | sasethur | Updated fapi:: and const Target & for HB environment
// 1.12 | 15-Nov-12 | sasethur | Updated fw review comments
// 1.13 | 07-Dec-12 | sasethur | Updated for fw review in comment section
-
+// 1.14 | 10-May-13 | sasethur | Added user input for test type, pattern from wrapper
+// 1.15 | 10-May-13 | sasethur | changed uint8_t to uint32_t for test type, pattern
+// 1.16 | 08-Aug-13 | sasethur | Removed Pattern and testype
#ifndef _MSS_DRAMINIT_TRAINING_ADVANCED_H
#define _MSS_DRAMINIT_TRAINING_ADVANCED_H
@@ -61,7 +63,7 @@
//----------------------------------------------------------------------
#include <fapi.H>
-typedef fapi::ReturnCode (*mss_draminit_training_advanced_FP_t)(const fapi::Target &,uint8_t i_pattern,uint8_t i_test_type);
+typedef fapi::ReturnCode (*mss_draminit_training_advanced_FP_t)(const fapi::Target &);
extern "C"
@@ -75,7 +77,7 @@ extern "C"
* @return ReturnCode
*/
-fapi::ReturnCode mss_draminit_training_advanced(const fapi::Target & i_target_mba,uint8_t i_pattern,uint8_t i_test_type);
+fapi::ReturnCode mss_draminit_training_advanced(const fapi::Target & i_target_mba);
} // extern C
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 83abd1f5a..028486e1c 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.45 2013/04/23 13:57:28 sasethur Exp $
+// $Id: mss_generic_shmoo.C,v 1.66 2013/08/12 10:07:23 sasethur Exp $
// *!***************************************************************************
// *! (C) Copyright International Business Machines Corp. 1997, 1998
// *! All Rights Reserved -- Property of IBM
@@ -33,19 +33,28 @@
// *! CONTEXT : To make all shmoos share a common abstraction layer
// *!
// *! OWNER NAME : Abhijit Saurabh Email: abhijit.saurabh@in.ibm.com
-// *! BACKUP NAME : preetham Email: preeragh@in.ibm.com
+// *! BACKUP NAME : Sidhartha Vijay Email: sidvijay@in.ibm.com
// *!
// *!***************************************************************************
// CHANGE HISTORY:
//------------------------------------------------------------------------------
// Version:|Author: | Date: | Comment:
// --------|--------|---------|--------------------------------------------------
-// 1.44 |bellows |04/22/13 | fixed fw comments
-// 1.43 |bellows |04/11/13 | quick fix for firmware delivery. Uninitialized varialbles: i_mcbtest, i_mcbpatt
-// 1.42 |abhijit |04/09/13 | added shmoo param
-// 1.40 |abhijit |03/22/13 | Fixed boundary checks
-// 1.38 |abhijit |03/19/13 | included spare byte and ECC and fixed printing for RD_EYE
-// 1.36 |abhijit |03/19/13 | changed mcbist call position
+// 1.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
+// 1.61 |abhijit |11-jun-13| added read dqs and removed prints and single mcbist setup
+// 1.59 |abhijit |26-may-13| removed unnecessary prints
+// 1.57 |abhijit |21-may-13| fixed DQS report printing
+// 1.56 |abhijit |14-may-13| Updated call to setup_mcbist
+// 1.55 |abhijit |10-may-13| fixed firmware review comments
+// 1.51 |abhijit |10-may-13| optimized write dqs schmoo
+// 1.49 |abhijit |8-may-13 | Changed Write dqs reporting and optimized schmoo for running faster
+// 1.48 |sauchadh|7-may-13 | Added ping pong for wr_dqs shmoo
+// 1.45 |abhijit |04/25/13 | added test type SIMPLE_FIX_RF and SHMOO_STRESS
+// 1.40 |abhijit |03/22/13 | Fixed boundary checks
+// 1.38 |abhijit |03/19/13 | included spare byte and ECC and fixed printing for RD_EYE
+// 1.36 |abhijit |03/19/13 | changed mcbist call position
// 1.35 |abhijit |03/16/13 | fixed clearing of error map regs for mba23
// 1.32 |abhijit |03/12/13 | new parallel schmoo under dev
// 1.27 |abhijit |01/21/13 | fixed ISDIMM mapping need some workaround
@@ -61,16 +70,19 @@
// 1.12 |abhijit |15-Nov-12| Fixed FW review comments
// 1.11 |abhijit |29-Oct-12| added change for ISDIMM checker DQS.
// 1.9 |abhijit |22-Oct-12| added Write and read DQS.
-// 1.8 |abhijit |15-Oct-12|Updated multiple changes
-// 1.0 |varkeykv|27-Sep-11|Initial check in
+// 1.8 |abhijit |15-Oct-12| Updated multiple changes
+// 1.0 |varkeykv|27-Sep-11| Initial check in
//------------------------------------------------------------------------------
#include <fapi.H>
#include "mss_generic_shmoo.H"
#include "mss_mcbist.H"
+#include <mss_draminit_training.H>
+// #include <mss_funcs.H>
+// #include <mss_unmask_errors.H>
#include <dimmBadDqBitmapFuncs.H>
#include <mss_access_delay_reg.H>
-
+//#define DBG 0
extern "C"
{
@@ -82,7 +94,7 @@ using namespace fapi;
* constructor: generic_shmoo
* Description :Constructor used to initialize variables and do the initial settings
*
- * Parameters: i_target: mba; iv_port: 0, 1
+ * Parameters: i_target: mba; iv_port: 0, 1
* ---------------------------------------------------------------------------*/
generic_shmoo:: generic_shmoo(uint8_t addr,shmoo_type_t shmoo_mask,shmoo_algorithm_t shmoo_algorithm)
{
@@ -97,8 +109,10 @@ generic_shmoo:: generic_shmoo(uint8_t addr,shmoo_type_t shmoo_mask,shmoo_algorit
iv_pattern=0;
iv_test_type=0;
iv_dmm_type=0;
- iv_shmoo_param=0;
-
+ iv_shmoo_param=0;
+ iv_binary_diff=2;
+ iv_vref_mul=0;
+
for(int p=0;p<MAX_PORT;++p)
{
for(int i=0;i<iv_MAX_RANKS[p];++i)
@@ -120,7 +134,7 @@ generic_shmoo:: generic_shmoo(uint8_t addr,shmoo_type_t shmoo_mask,shmoo_algorit
if(shmoo_mask & TEST_NONE)
{
- FAPI_DBG("mss_generic_shmoo : WR_EYE selected %d",shmoo_mask);
+ FAPI_INF("mss_generic_shmoo : NONE selected %d",shmoo_mask);
iv_shmoo_type = 0;
SHMOO[0].static_knob.min_val=0;
SHMOO[0].static_knob.max_val=512;
@@ -128,23 +142,23 @@ generic_shmoo:: generic_shmoo(uint8_t addr,shmoo_type_t shmoo_mask,shmoo_algorit
if(shmoo_mask & WR_EYE)
{
- FAPI_DBG("mss_generic_shmoo : WR_EYE selected %d",shmoo_mask);
- iv_shmoo_type = 0;
+ FAPI_INF("mss_generic_shmoo : WR_EYE selected %d",shmoo_mask);
+ iv_shmoo_type = 2;
SHMOO[0].static_knob.min_val=0;
SHMOO[0].static_knob.max_val=512;
}
if(shmoo_mask & RD_EYE)
{
- FAPI_DBG("mss_generic_shmoo : RD_EYE selected %d",shmoo_mask);
- iv_shmoo_type = 2;
+ FAPI_INF("mss_generic_shmoo : RD_EYE selected %d",shmoo_mask);
+ iv_shmoo_type = 8;
SHMOO[2].static_knob.min_val=2;
SHMOO[2].static_knob.max_val=128;
}
if(shmoo_mask & WRT_DQS) //preet
{
- FAPI_DBG("mss_generic_shmoo : WRT_DQS selected %d",shmoo_mask);
- iv_shmoo_type = 1;
+ FAPI_INF("mss_generic_shmoo : WRT_DQS selected %d",shmoo_mask);
+ iv_shmoo_type = 4;
iv_DQS_ON = 1;
SHMOO[1].static_knob.min_val=0;
SHMOO[1].static_knob.max_val=512;
@@ -152,68 +166,174 @@ generic_shmoo:: generic_shmoo(uint8_t addr,shmoo_type_t shmoo_mask,shmoo_algorit
if(shmoo_mask & RD_GATE) //preet
{
- FAPI_DBG("mss_generic_shmoo : RD_EYE selected %d",shmoo_mask);
+ FAPI_INF("mss_generic_shmoo : RD_GATE selected %d",shmoo_mask);
- iv_shmoo_type = 3;
- iv_DQS_ON = 1;
+ iv_shmoo_type = 16;
+ iv_DQS_ON = 2;
SHMOO[3].static_knob.min_val=2;
SHMOO[3].static_knob.max_val=128;
}
+ if(iv_DQS_ON==1){
for(int i=0;i<MAX_PORT;++i)
{
for(int j=0;j<iv_MAX_RANKS[i];++j)
{
init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.nom_val,0);
+ init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.right_err_cnt,0);
+ init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.left_err_cnt,0);
init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.lb_regval,SHMOO[iv_shmoo_type].static_knob.min_val);
init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.rb_regval,SHMOO[iv_shmoo_type].static_knob.max_val);
+ init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.lb_regval,20);
+ init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.rb_regval,300);
init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.total_margin,0);
init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.right_margin_val,0);
init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.left_margin_val,0);
}
- }
+ }}else{
+ // for(int i=0;i<MAX_PORT;++i)
+ // {
- if(iv_DQS_ON == 1)
- { for(int i=0;i<MAX_PORT;++i)
- {
- for(int j=0;j<iv_MAX_RANKS[i];++j) //initialize values for DQS
- {
- init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.nom_val,0);
- init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.lb_regval,SHMOO[iv_shmoo_type].static_knob.min_val);
- init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.rb_regval,SHMOO[iv_shmoo_type].static_knob.max_val);
- init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.total_margin,0);
- init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.right_margin_val,0);
- init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.left_margin_val,0);
- }
+ // init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[0].K.cmd_nom_val,0);
+ // init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[0].K.offset,0);
+ // init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[0].K.addr_nom_val,0);
+ // init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[0].K.cntrl_nom_val,0);
+
+
+ // init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[0].K.cmd_lb_regval,20);
+ // init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[0].K.cmd_rb_regval,300);
+ // init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[0].K.cmd_total_margin,0);
+ // init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[0].K.cmd_right_margin_val,0);
+ // init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[0].K.cmd_left_margin_val,0);
+ // }
+ }
+ // if(iv_DQS_ON == 1)
+ // { for(int i=0;i<MAX_PORT;++i)
+ // {
+ // for(int j=0;j<iv_MAX_RANKS[i];++j) //initialize values for DQS
+ // {
+ // init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.nom_val,0);
+ // // init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.lb_regval,SHMOO[iv_shmoo_type].static_knob.min_val);
+ // // init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.rb_regval,SHMOO[iv_shmoo_type].static_knob.max_val);
+ // init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.lb_regval,20);
+ // init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.rb_regval,300);
+ // init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.total_margin,0);
+ // init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.right_margin_val,0);
+ // init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.left_margin_val,0);
+ // }
+ // }
+ // }
+}
+
+fapi::ReturnCode generic_shmoo::shmoo_save_rest(const fapi::Target & i_target,uint64_t i_content_array[],uint8_t i_mode)
+{
+ ReturnCode rc;
+ uint32_t rc_num;
+ uint8_t l_index = 0;
+ uint64_t l_value = 0;
+ uint64_t l_val_u64 = 0;
+ ecmdDataBufferBase l_shmoo1ab(64);
+ uint64_t l_Databitdir[10] = {0x800000030301143full,0x800004030301143full,0x800008030301143full,0x80000c030301143full,0x800010030301143full,0x800100030301143full,0x800104030301143full,
+ 0x800108030301143full,0x80010c030301143full,0x800110030301143full};
+ if(i_mode == 0)
+ {
+ FAPI_INF(" Saving DP18 data bit direction register contents");
+ for(l_index = 0;l_index<9;l_index++)
+ {
+ l_value = l_Databitdir[l_index];
+ rc = fapiGetScom(i_target,l_value,l_shmoo1ab); if(rc) return rc;
+ rc_num = l_shmoo1ab.setBit(57);
+ rc = fapiPutScom(i_target,l_value,l_shmoo1ab); if(rc) return rc;
+ i_content_array[l_index] = l_shmoo1ab.getDoubleWord (0);
+
+
}
}
+
+ else if(i_mode == 1)
+ {
+ FAPI_INF(" Restoring DP18 data bit direction register contents");
+ for(l_index = 0;l_index<9;l_index++)
+ {
+ l_val_u64 = i_content_array[l_index];
+ l_value = l_Databitdir[l_index];
+ rc_num = l_shmoo1ab.setDoubleWord(0,l_val_u64);if (rc_num){FAPI_ERR( "Error in function shmoo_save_rest:");rc.setEcmdError(rc_num);return rc;}
+ rc = fapiPutScom(i_target,l_value,l_shmoo1ab); if(rc) return rc;
+ }
+ }
+ else
+ {
+ FAPI_INF("Invalid value of MODE");
+ }
+ return rc;
+
}
+
+
+
+
+
/*------------------------------------------------------------------------------
* Function: run
* Description : ! Delegator function that runs shmoo using other functions
*
* Parameters: i_target: mba; iv_port: 0, 1
* ---------------------------------------------------------------------------*/
-fapi::ReturnCode generic_shmoo::run(const fapi::Target & i_target,uint32_t *o_right_min_margin,uint32_t *o_left_min_margin,uint8_t i_pattern,uint8_t i_test_type,uint32_t i_shmoo_param){
+fapi::ReturnCode generic_shmoo::run(const fapi::Target & i_target,uint32_t *o_right_min_margin,uint32_t *o_left_min_margin,uint32_t i_vref_mul){
fapi::ReturnCode rc;
uint8_t num_ranks_per_dimm[2][2];
uint8_t l_attr_eff_dimm_type_u8=0;
- uint8_t l_attr_schmoo_test_type_u8=0;
+ uint8_t l_attr_schmoo_test_type_u8=0;
+ uint8_t l_attr_schmoo_multiple_setup_call_u8=0;
+ uint8_t l_mcbist_prnt_off = 0;
+
+
+ uint64_t i_content_array[10];
+ uint8_t l_rankpgrp0[2]={0};
+ uint8_t l_rankpgrp1[2]={0};
+ uint8_t l_rankpgrp2[2]={0};
+ uint8_t l_rankpgrp3[2]={0};
+ uint8_t l_totrg_0=0;
+ uint8_t l_totrg_1=0;
+ uint8_t l_pp=0;
+ uint8_t pass=0;
+ uint8_t l_shmoo_param=0;
+
+ rc = FAPI_ATTR_GET(ATTR_EFF_SCHMOO_MODE, &i_target, l_shmoo_param); if(rc) return rc;
//uint8_t l_val=2;
- iv_shmoo_param=i_shmoo_param;
+ iv_shmoo_param=l_shmoo_param;
+ iv_vref_mul=i_vref_mul;
ecmdDataBufferBase l_data_buffer1_64(64);
+ uint8_t l_dram_width=0;
+ rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_WIDTH, &i_target, l_dram_width); if(rc) return rc;
+ rc = FAPI_ATTR_SET(ATTR_MCBIST_PRINTING_DISABLE, &i_target, l_mcbist_prnt_off); if(rc) return rc;
rc = FAPI_ATTR_GET(ATTR_EFF_NUM_RANKS_PER_DIMM, &i_target, num_ranks_per_dimm); if(rc) return rc;
rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_TYPE, &i_target, l_attr_eff_dimm_type_u8); if(rc) return rc;
- rc = FAPI_ATTR_GET(ATTR_EFF_SCHMOO_TEST_VALID, &i_target, l_attr_schmoo_test_type_u8); if(rc) return rc;
-
+ rc = FAPI_ATTR_GET(ATTR_EFF_SCHMOO_TEST_VALID, &i_target, l_attr_schmoo_test_type_u8); if(rc) return rc;
+ rc = FAPI_ATTR_GET(ATTR_SCHMOO_MULTIPLE_SETUP_CALL, &i_target, l_attr_schmoo_multiple_setup_call_u8); if(rc) return rc;
+
+
+ rc = FAPI_ATTR_GET(ATTR_EFF_PRIMARY_RANK_GROUP0, &i_target, l_rankpgrp0);if(rc) return rc;
+
+ rc = FAPI_ATTR_GET(ATTR_EFF_PRIMARY_RANK_GROUP1, &i_target, l_rankpgrp1);if(rc) return rc;
+
+ rc = FAPI_ATTR_GET(ATTR_EFF_PRIMARY_RANK_GROUP2, &i_target, l_rankpgrp2);if(rc) return rc;
+
+ rc = FAPI_ATTR_GET(ATTR_EFF_PRIMARY_RANK_GROUP3, &i_target, l_rankpgrp3);if(rc) return rc;
+
+
+
iv_MAX_RANKS[0]=num_ranks_per_dimm[0][0]+num_ranks_per_dimm[0][1];
- iv_MAX_RANKS[1]=num_ranks_per_dimm[1][0]+num_ranks_per_dimm[1][1];
+ iv_MAX_RANKS[1]=num_ranks_per_dimm[1][0]+num_ranks_per_dimm[1][1];
- iv_pattern=i_pattern;
- iv_test_type=i_test_type;
+ iv_pattern=0;
+ iv_test_type=0;
+
+
+
if ( l_attr_eff_dimm_type_u8 == 0 )
{
@@ -240,7 +360,138 @@ fapi::ReturnCode generic_shmoo::run(const fapi::Target & i_target,uint32_t *o_ri
FAPI_ERR("generic_shmoo::run MSS Generic Shmoo failed initial Sanity Check. Memory not in an all pass Condition");
return rc;
}
+ }else if(l_attr_schmoo_test_type_u8 == 4){
+ if(l_rankpgrp0[0] !=255)
+ {
+ l_totrg_0++;
+ }
+ if(l_rankpgrp1[0] !=255)
+ {
+ l_totrg_0++;
+ }
+ if(l_rankpgrp2[0] !=255)
+ {
+ l_totrg_0++;
+ }
+ if(l_rankpgrp3[0] !=255)
+ {
+ l_totrg_0++;
+ }
+
+ if(l_rankpgrp0[1] !=255)
+ {
+ l_totrg_1++;
+ }
+ if(l_rankpgrp1[1] !=255)
+ {
+ l_totrg_1++;
+ }
+ if(l_rankpgrp2[1] !=255)
+ {
+ l_totrg_1++;
+ }
+ if(l_rankpgrp3[1] !=255)
+ {
+ l_totrg_1++;
+ }
+ if((l_totrg_0==1) || (l_totrg_1 ==1 ))
+ {
+ shmoo_save_rest(i_target,i_content_array,0);
+ l_pp=1;
+ }
+
+ if(l_pp==1)
+ {
+ FAPI_INF("Ping pong is disabled");
+ }
+ else
+ {
+ FAPI_INF("Ping pong is enabled");
+ }
+
+ if((l_pp=1) && ((l_totrg_0==1) || (l_totrg_1 ==1 )))
+ {
+ FAPI_INF("Rank group is not good with ping pong. Hope you have set W2W gap to 10");
+ }
+
+
+ iv_shmoo_type=4;
+ //FAPI_INF("\n ABHIJIT IS HERE 1111 \n");
+ rc=get_all_noms_dqs(i_target);if(rc) return rc;
+ iv_shmoo_type=2;
+ //FAPI_INF("\n ABHIJIT IS HERE 2222 \n");
+ rc=get_all_noms(i_target);if(rc) return rc;
+ rc=schmoo_setup_mcb(i_target);if(rc) return rc;
+ //Find RIGHT BOUND OR SETUP BOUND
+ rc=find_bound(i_target,RIGHT);if(rc) return rc;
+ //FAPI_INF("\n ABHIJIT IS HERE 3333 \n");
+ //Find LEFT BOUND OR HOLD BOUND
+ rc=find_bound(i_target,LEFT);if(rc) return rc;
+ iv_shmoo_type=4;
+
+ if(l_dram_width == 4 ){
+ rc=get_margin_dqs_by4(i_target);if(rc) return rc;
+ }else{
+ //FAPI_INF("\n ABHIJIT IS HERE 222 \n");
+ rc=get_margin_dqs_by8(i_target);if(rc) return rc;
+ }
+ //FAPI_INF("\n before the call \n");
+ rc=print_report_dqs(i_target);if(rc) return rc;
+ rc=get_min_margin_dqs(i_target,o_right_min_margin,o_left_min_margin);if(rc) return rc;
+
+ if((l_totrg_0==1) || (l_totrg_1 ==1 ))
+ {
+ shmoo_save_rest(i_target,i_content_array,1);
+ }
+
+
+
+
+ }else if(l_attr_schmoo_test_type_u8 == 16){
+
+ if(iv_shmoo_param==2){
+ rc=get_all_noms_data_disable(i_target);if(rc) return rc;
+ rc=get_all_noms_gate(i_target);if(rc) return rc;
+
+ rc=knob_update_gate_train(i_target,RIGHT,iv_shmoo_type,pass); if(rc) return rc;
+ }
+ iv_DQS_ON=1;
+ rc=schmoo_setup_mcb(i_target);if(rc) return rc;
+ rc=do_mcbist_test(i_target);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+ iv_DQS_ON=2;
+
+ rc=schmoo_setup_mcb(i_target);if(rc) return rc;
+ rc=do_mcbist_test(i_target);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+ //sanity check
+ rc=mcb_error_map(i_target,mcbist_error_map);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!");
+
+ return rc;
+ }
+
+
+ rc=get_all_noms_gate(i_target);if(rc) return rc;
+ if(iv_shmoo_param==2){
+ rc=find_bound(i_target,LEFT);if(rc) return rc;
+ rc=put_all_noms_data_disable(i_target,0);if(rc) return rc;
}else{
+ rc=find_bound(i_target,RIGHT);if(rc) return rc;
+ }
+ rc=print_report_gate(i_target);if(rc) return rc;
+
+ } else {
// rc=sanity_check(i_target); // Run MCBIST by default before for every schmoo to check if memory is in good condition.
// if(!rc.ok())
// {
@@ -250,10 +501,16 @@ fapi::ReturnCode generic_shmoo::run(const fapi::Target & i_target,uint32_t *o_ri
// If memory is OK then we continue to gather nominals and config values
// Now Read nominal values for all knobs configured
// FAPI_DBG("mss_generic_shmoo : run() :read nominal values ");
+
+
rc=get_all_noms(i_target);if(rc) return rc;
+ if(l_attr_schmoo_multiple_setup_call_u8==0){
rc=schmoo_setup_mcb(i_target);if(rc) return rc;
+ }
+ rc=set_all_binary(i_target,RIGHT);if(rc) return rc;
//Find RIGHT BOUND OR SETUP BOUND
rc=find_bound(i_target,RIGHT);if(rc) return rc;
+ rc=set_all_binary(i_target,LEFT);if(rc) return rc;
//Find LEFT BOUND OR HOLD BOUND
rc=find_bound(i_target,LEFT);if(rc) return rc;
//Find the margins in Ps i.e setup margin ,hold margin,Eye width
@@ -262,7 +519,10 @@ 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;
+ //shmoo_save_rest(i_target,i_content_array,1);
}
+ l_mcbist_prnt_off=0;
+ rc = FAPI_ATTR_SET(ATTR_MCBIST_PRINTING_DISABLE, &i_target, l_mcbist_prnt_off); if(rc) return rc;
return rc;
}
/*------------------------------------------------------------------------------
@@ -274,11 +534,11 @@ fapi::ReturnCode generic_shmoo::run(const fapi::Target & i_target,uint32_t *o_ri
fapi::ReturnCode generic_shmoo::sanity_check(const fapi::Target & i_target){
fapi:: ReturnCode rc;
mcbist_mode=QUARTER_SLOW;
- uint8_t l_mcb_status=0;
- uint64_t l_time = 0x0000000000000000ull;
+ //uint64_t l_time = 0x0000000000000000ull;
uint8_t l_rank_valid = 0;
-
+ uint8_t l_mcb_status=0;
+ struct Subtest_info l_sub_info[30];
FAPI_INF(" entering set_up mcbist now and rank %d",l_rank_valid);
@@ -287,9 +547,15 @@ 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,false,&l_mcb_status,l_time);if(rc) return rc;
+ rc=poll_mcb(i_target,0,&l_mcb_status,l_sub_info,1);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::do_mcbist_test: POLL MCBIST failed !!");
+
+ return rc;
+ }
FAPI_INF(" checking error map ");
- rc=mcb_error_map(i_target,mcbist_error_map,0,l_rank_valid);if(rc) return rc;
+ rc=mcb_error_map(i_target,mcbist_error_map);if(rc) return rc;
if(l_mcb_status)
@@ -302,17 +568,17 @@ fapi::ReturnCode generic_shmoo::sanity_check(const fapi::Target & i_target){
return rc;
}
/*------------------------------------------------------------------------------
- * Function: do_mcbist_test
- * Description : do mcbist check for error on particular nibble
+ * Function: do_mcbist_reset
+ * Description : do mcbist reset
*
* Parameters: i_target: mba,iv_port 0/1 , rank 0-7 , byte 0-7, nibble 0/1, pass;
* ---------------------------------------------------------------------------*/
-fapi::ReturnCode generic_shmoo::do_mcbist_test(const fapi::Target & i_target)
+fapi::ReturnCode generic_shmoo::do_mcbist_reset(const fapi::Target & i_target)
{
fapi::ReturnCode rc;
- uint64_t l_time = 0x0000000000000000ull;
+
uint32_t rc_num =0;
- uint8_t l_mcb_status=0;
+
ecmdDataBufferBase l_data_buffer_64(64);
rc_num = l_data_buffer_64.flushTo0();if (rc_num){FAPI_ERR( "Error in function mcb_reset_trap:");rc.setEcmdError(rc_num);return rc;}
//PORT - A
@@ -335,6 +601,53 @@ fapi::ReturnCode generic_shmoo::do_mcbist_test(const fapi::Target & i_target)
rc = fapiPutScom(i_target,0x0201176e,l_data_buffer_64); if(rc) return(rc);
rc = fapiPutScom(i_target,0x0201176f,l_data_buffer_64); if(rc) return(rc);
+ // rc = fapiPutScom(i_target,MBS_MCBIST01_MCB_ERRCNTA1Q_0x02011664,l_data_buffer_64); if(rc) return(rc);
+ // rc = fapiPutScom(i_target,MBS_MCBIST01_MCB_ERRCNTA2Q_0x02011665,l_data_buffer_64); if(rc) return(rc);
+ // rc = fapiPutScom(i_target,MBS_MCBIST01_MCB_ERRCNTB1Q_0x02011667,l_data_buffer_64); if(rc) return(rc);
+ // rc = fapiPutScom(i_target,MBS_MCBIST01_MCB_ERRCNTB2Q_0x02011668,l_data_buffer_64); if(rc) return(rc);
+
+ return rc;
+}
+/*------------------------------------------------------------------------------
+ * Function: do_mcbist_test
+ * Description : do mcbist check for error on particular nibble
+ *
+ * Parameters: i_target: mba,iv_port 0/1 , rank 0-7 , byte 0-7, nibble 0/1, pass;
+ * ---------------------------------------------------------------------------*/
+fapi::ReturnCode generic_shmoo::do_mcbist_test(const fapi::Target & i_target)
+{
+ fapi::ReturnCode rc;
+
+ //uint32_t rc_num =0;
+ uint8_t l_mcb_status=0;
+ struct Subtest_info l_sub_info[30];
+ //ecmdDataBufferBase l_data_buffer_64(64);
+ //rc_num = l_data_buffer_64.flushTo0();if (rc_num){FAPI_ERR( "Error in function mcb_reset_trap:");rc.setEcmdError(rc_num);return rc;}
+ //PORT - A
+ // rc = fapiPutScom(i_target,MBS_MCBIST01_MCBEMA1Q_0x0201166a,l_data_buffer_64); if(rc) return(rc);
+ // rc = fapiPutScom(i_target,MBS_MCBIST01_MCBEMA2Q_0x0201166b,l_data_buffer_64); if(rc) return(rc);
+ // rc = fapiPutScom(i_target,MBS_MCBIST01_MCBEMA3Q_0x0201166c,l_data_buffer_64); if(rc) return(rc);
+
+ // //PORT - B
+ // rc = fapiPutScom(i_target,MBS_MCBIST01_MCBEMB1Q_0x0201166d,l_data_buffer_64); if(rc) return(rc);
+ // rc = fapiPutScom(i_target,MBS_MCBIST01_MCBEMB2Q_0x0201166e,l_data_buffer_64); if(rc) return(rc);
+ // rc = fapiPutScom(i_target,MBS_MCBIST01_MCBEMB3Q_0x0201166f,l_data_buffer_64); if(rc) return(rc);
+
+ // // MBS 23
+ // rc = fapiPutScom(i_target,0x0201176a,l_data_buffer_64); if(rc) return(rc);
+ // rc = fapiPutScom(i_target,0x0201176b,l_data_buffer_64); if(rc) return(rc);
+ // rc = fapiPutScom(i_target,0x0201176c,l_data_buffer_64); if(rc) return(rc);
+
+ // //PORT - B
+ // rc = fapiPutScom(i_target,0x0201176d,l_data_buffer_64); if(rc) return(rc);
+ // rc = fapiPutScom(i_target,0x0201176e,l_data_buffer_64); if(rc) return(rc);
+ // rc = fapiPutScom(i_target,0x0201176f,l_data_buffer_64); if(rc) return(rc);
+
+ // rc = fapiPutScom(i_target,MBS_MCBIST01_MCB_ERRCNTA1Q_0x02011664,l_data_buffer_64); if(rc) return(rc);
+ // rc = fapiPutScom(i_target,MBS_MCBIST01_MCB_ERRCNTA2Q_0x02011665,l_data_buffer_64); if(rc) return(rc);
+ // rc = fapiPutScom(i_target,MBS_MCBIST01_MCB_ERRCNTB1Q_0x02011667,l_data_buffer_64); if(rc) return(rc);
+ // rc = fapiPutScom(i_target,MBS_MCBIST01_MCB_ERRCNTB2Q_0x02011668,l_data_buffer_64); if(rc) return(rc);
+
rc = start_mcb(i_target);
if(rc)
{
@@ -342,7 +655,8 @@ fapi::ReturnCode generic_shmoo::do_mcbist_test(const fapi::Target & i_target)
return rc;
}
- rc=poll_mcb(i_target,false,&l_mcb_status,l_time);
+ //rc=poll_mcb(i_target,false,&l_mcb_status);
+ rc=poll_mcb(i_target,0,&l_mcb_status,l_sub_info,1);
if(rc)
{
FAPI_ERR("generic_shmoo::do_mcbist_test: POLL MCBIST failed !!");
@@ -392,19 +706,19 @@ fapi::ReturnCode generic_shmoo::check_error_map(const fapi::Target & i_target,ui
// return rc;
// }
-
- for (l_p=0;l_p<MAX_PORT;l_p++){
- for (l_rnk=0;l_rnk<iv_MAX_RANKS[l_p];++l_rnk)
- {// Byte loop
- rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc;
- rank=valid_rank[l_rnk];
- rc=mcb_error_map(i_target,mcbist_error_map,port,rank);
+ rc=mcb_error_map(i_target,mcbist_error_map);
if(rc)
{
FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!");
return rc;
}
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rnk=0;l_rnk<iv_MAX_RANKS[l_p];++l_rnk)
+ {// Byte loop
+ rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rnk];
+
l_n=0;
for(l_byte=0;l_byte<l_max_byte;++l_byte)
{
@@ -439,7 +753,9 @@ fapi::ReturnCode generic_shmoo::check_error_map(const fapi::Target & i_target,ui
}
else
{
- //schmoo_error_map[l_p][rank][l_n]=0;
+ if(iv_shmoo_param==4){
+ schmoo_error_map[l_p][rank][l_n]=0;
+ }
//pass=0;
//FAPI_INF("We are in error2");
}
@@ -454,6 +770,9 @@ fapi::ReturnCode generic_shmoo::check_error_map(const fapi::Target & i_target,ui
}
else
{
+ if(iv_shmoo_param==4){
+ schmoo_error_map[l_p][rank][l_n]=0;
+ }
//schmoo_error_map[l_p][rank][l_n]=0;
//pass=0;
//FAPI_INF("We are in error2");
@@ -480,6 +799,85 @@ fapi::ReturnCode generic_shmoo::check_error_map(const fapi::Target & i_target,ui
}
return rc;
}
+//////////////// will implement later /////////////////////
+/*
+fapi::ReturnCode generic_shmoo::get_error_cnt(const fapi::Target & i_target,uint8_t port,uint8_t rank,uint8_t rank_pair,uint8_t bit,bound_t bound)
+{
+fapi::ReturnCode rc;
+uint8_t l_nibble=0;
+uint8_t l_start_bit=0;
+uint16_t l_err_cnt_C=0;
+uint8_t rc_ecmd=0;
+uint8_t l_length_buffer=7;
+uint8_t l_val=0;
+
+
+input_type l_input_type_e = ISDIMM_DQ;
+ecmdDataBufferBase data_buffer_64(64);
+ecmdDataBufferBase data_buffer_64_1(64);
+
+if(iv_dmm_type==1)
+ {
+
+ //FAPI_INF("\n ISDIMM input byte=%d and nibble=%d and bit returned is %d \n",l_byte,l_nibble,l_val);
+ rc=rosetta_map(i_target,port,l_input_type_e,bit,0,l_val);if(rc) return rc;
+ //FAPI_INF("\n ISDIMM input byte=%d and nibble=%d and bit returned is %d \n",l_byte,l_nibble,l_val);
+ l_nibble=l_val/4;
+
+ }else{
+
+l_nibble=bit/4;
+}
+
+if(port==0)
+ {
+ if(l_nibble<9)
+ {
+ rc = fapiGetScom(i_target,MBS_MCBIST01_MCB_ERRCNTA1Q_0x02011664,data_buffer_64); if(rc) return rc;
+ l_start_bit=l_nibble*7;
+ rc_ecmd=data_buffer_64.extractToRight(&l_err_cnt_C,l_start_bit,l_length_buffer);if (rc_ecmd){ rc.setEcmdError(rc_ecmd); return rc;}
+ }
+ else
+ {
+ rc = fapiGetScom(i_target,MBS_MCBIST01_MCB_ERRCNTA2Q_0x02011665,data_buffer_64); if(rc) return rc;
+ l_nibble=l_nibble-9;
+ l_start_bit=l_nibble*7;
+ rc_ecmd=data_buffer_64.extractToRight(&l_err_cnt_C,l_start_bit,l_length_buffer);if (rc_ecmd){ rc.setEcmdError(rc_ecmd); return rc;}
+ }
+ }else
+ {
+ if(l_nibble<9)
+ {
+ rc = fapiGetScom(i_target,MBS_MCBIST01_MCB_ERRCNTB1Q_0x02011667,data_buffer_64_1); if(rc) return rc;
+ l_start_bit=l_nibble*7;
+ rc_ecmd=data_buffer_64.extractToRight(&l_err_cnt_C,l_start_bit,l_length_buffer);if (rc_ecmd){ rc.setEcmdError(rc_ecmd); return rc;}
+ }
+ else
+ {
+ rc = fapiGetScom(i_target,MBS_MCBIST01_MCB_ERRCNTB2Q_0x02011668,data_buffer_64_1); if(rc) return rc;
+ l_nibble=l_nibble-9;
+ l_start_bit=l_nibble*7;
+ rc_ecmd=data_buffer_64.extractToRight(&l_err_cnt_C,l_start_bit,l_length_buffer);if (rc_ecmd){ rc.setEcmdError(rc_ecmd); return rc;}
+ }
+ }
+ if(bound==RIGHT)
+ {
+ if(l_err_cnt_C){
+ SHMOO[iv_shmoo_type].MBA.P[port].S[rank].K.right_err_cnt[bit][rank_pair]=l_err_cnt_C;
+ }
+ FAPI_INF("\n THE PORT=%d Rank=%d dq=%d and error count=%d \n",port,rank,bit,SHMOO[iv_shmoo_type].MBA.P[port].S[rank].K.right_err_cnt[bit][rank_pair]);
+ }else {
+ if(l_err_cnt_C){
+ SHMOO[iv_shmoo_type].MBA.P[port].S[rank].K.left_err_cnt[bit][rank_pair]=l_err_cnt_C;
+}
+ FAPI_INF("\n THE PORT=%d Rank=%d dq=%d and error count=%d \n",port,rank,bit,SHMOO[iv_shmoo_type].MBA.P[port].S[rank].K.left_err_cnt[bit][rank_pair]);
+ }
+ return rc;
+
+}
+
+*/
+
/*------------------------------------------------------------------------------
* Function: init_multi_array
* Description : This function do the initialization of various schmoo parameters
@@ -560,12 +958,12 @@ fapi::ReturnCode generic_shmoo::get_all_noms(const fapi::Target & i_target)
FAPI_DBG("mss_generic_shmoo : get_all_noms : Reading in all nominal values");
- if(iv_shmoo_type == 1)
+ if(iv_shmoo_type == 4)
{
l_input_type_e = WR_DQS;
}
- else if(iv_shmoo_type == 2)
+ else if(iv_shmoo_type == 8)
{
l_input_type_e = RD_DQ;
@@ -595,8 +993,63 @@ fapi::ReturnCode generic_shmoo::get_all_noms(const fapi::Target & i_target)
rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,i_rnk,l_input_type_e,l_dq,0,val);if(rc) return rc;
SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.nom_val[l_dq][i_rp]=val;
+ #ifdef DBG
FAPI_INF("Nominal Value for port=%d rank=%d and rank pair=%d and dq=%d is %d",l_p,i_rnk,i_rp,l_dq,val);
-
+ #endif
+ }
+ }
+ }
+ }
+}
+ return rc;
+}
+fapi::ReturnCode generic_shmoo::set_all_binary(const fapi::Target & i_target,bound_t bound)
+{
+ fapi::ReturnCode rc;
+
+ uint8_t l_rnk,l_byte,l_nibble,l_bit;
+ uint8_t i_rnk=0;
+ uint8_t i_rp=0;
+
+ uint8_t l_dq=0;
+ uint8_t l_p=0;
+ uint32_t l_max=512;
+
+ if(iv_shmoo_type == 8)
+ {
+
+ l_max=127;
+
+ }
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rnk=0;l_rnk<iv_MAX_RANKS[l_p];++l_rnk)
+ {// Byte loop
+ rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc;
+ i_rnk=valid_rank[l_rnk];
+ rc = mss_getrankpair(i_target,l_p,i_rnk,&i_rp,valid_rank);if(rc) return rc;
+ for(l_byte=0;l_byte<iv_MAX_BYTES;++l_byte)
+ { //Nibble loop
+ for(l_nibble=0;l_nibble< MAX_NIBBLES;++l_nibble)
+ {
+ //Bit loop
+ for(l_bit=0;l_bit<MAX_BITS;++l_bit)
+ {
+ l_dq=8*l_byte+4*l_nibble+l_bit;
+
+ //rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,i_rnk,l_input_type_e,l_dq,0,val);if(rc) return rc;
+ SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.last_pass[l_dq][i_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.nom_val[l_dq][i_rp];
+ 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)
+ {
+ 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]=0;
+ }
+ //SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.nom_val[l_dq][i_rp]=val;
+
+ //FAPI_DBG("Nominal Value for port=%d rank=%d and rank pair=%d and dq=%d is %d",l_p,i_rnk,i_rp,l_dq,val);
+
}
}
}
@@ -605,6 +1058,212 @@ fapi::ReturnCode generic_shmoo::get_all_noms(const fapi::Target & i_target)
return rc;
}
+fapi::ReturnCode generic_shmoo::get_all_noms_data_disable(const fapi::Target & i_target)
+{
+ fapi::ReturnCode rc;
+
+ uint8_t l_rnk,l_block;
+ uint8_t i_rnk=0;
+ uint8_t i_rp=0;
+ uint32_t val=0;
+
+ uint8_t l_p=0;
+
+ input_type_t l_input_type_e = DATA_DISABLE;
+ access_type_t l_access_type_e = READ ;
+ FAPI_DBG("mss_generic_shmoo : get_all_noms : Reading in all nominal values");
+
+
+
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rnk=0;l_rnk<iv_MAX_RANKS[l_p];++l_rnk)
+ {// Byte loop
+ rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc;
+ i_rnk=valid_rank[l_rnk];
+ rc = mss_getrankpair(i_target,l_p,i_rnk,&i_rp,valid_rank);if(rc) return rc;
+ for(l_block=0;l_block<5;++l_block)
+ { //DP 18 Loop
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,i_rnk,l_input_type_e,l_block,0,val);if(rc) return rc;
+ SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.datadis_nom_val[l_block]=val;
+ FAPI_INF("Nominal Value for data bit disable port=%d rank=%d and rank pair=%d and dq=%d is %d",l_p,i_rnk,i_rp,l_block,val);
+
+ }
+ }
+}
+ return rc;
+}
+
+fapi::ReturnCode generic_shmoo::put_all_noms_data_disable(const fapi::Target & i_target,uint8_t flag)
+{
+ fapi::ReturnCode rc;
+
+ uint8_t l_rnk,l_block;
+ uint8_t i_rnk=0;
+ uint8_t i_rp=0;
+ uint32_t val=0;
+
+ uint8_t l_p=0;
+
+ input_type_t l_input_type_e = DATA_DISABLE;
+ access_type_t l_access_type_e = WRITE ;
+ FAPI_DBG("mss_generic_shmoo : get_all_noms : Reading in all nominal values");
+
+
+
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rnk=0;l_rnk<iv_MAX_RANKS[l_p];++l_rnk)
+ {// Byte loop
+ rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc;
+ i_rnk=valid_rank[l_rnk];
+ rc = mss_getrankpair(i_target,l_p,i_rnk,&i_rp,valid_rank);if(rc) return rc;
+ for(l_block=0;l_block<5;++l_block)
+ { //DP 18 Loop
+ val=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.datadis_nom_val[l_block];
+ FAPI_INF("Nominal Value for data bit disable while restoring port=%d rank=%d and rank pair=%d and dq=%d is %d",l_p,i_rnk,i_rp,l_block,val);
+ if(flag==1){
+
+ val=0;
+ FAPI_INF("\n the flushing value=%d \n",val);
+ }
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,i_rnk,l_input_type_e,l_block,0,val);if(rc) return rc;
+
+
+ }
+ }
+}
+ return rc;
+}
+
+
+fapi::ReturnCode generic_shmoo::get_all_noms_dqs(const fapi::Target & i_target)
+{
+ fapi::ReturnCode rc;
+
+ uint8_t l_rnk;
+ //uint8_t i_rnk=0;
+ uint8_t i_rp=0;
+ uint32_t val=0;
+ //uint8_t l_dq=0;
+ uint8_t l_p=0;
+ uint8_t l_max_nibble=20;
+ uint8_t rank=0;
+ uint8_t l_n=0;
+ FAPI_INF("mss_generic_shmoo : get_all_noms_dqs : Reading in all nominal values and schmoo type=%d \n",iv_shmoo_type);
+ if(iv_dmm_type==1)
+ {
+
+ l_max_nibble=18;
+ }
+
+ input_type_t l_input_type_e = WR_DQS;
+ access_type_t l_access_type_e = READ ;
+ FAPI_DBG("mss_generic_shmoo : get_all_noms : Reading in all nominal values");
+
+
+ if(iv_shmoo_type == 4)
+ {
+ l_input_type_e = WR_DQS;
+
+ }
+
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rnk=0;l_rnk<iv_MAX_RANKS[l_p];++l_rnk)
+ {// Byte loop
+ rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rnk];
+ rc = mss_getrankpair(i_target,l_p,rank,&i_rp,valid_rank);if(rc) return rc;
+ for (l_n=0; l_n<l_max_nibble;l_n++){
+
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_n,0,val);if(rc) return rc;
+ SHMOO[iv_shmoo_type].MBA.P[l_p].S[rank].K.nom_val[l_n][i_rp]=val;
+ #ifdef DBG
+ FAPI_INF("Nominal Value for port=%d rank=%d and rank pair=%d and dqs=%d is %d",l_p,rank,i_rp,l_n,SHMOO[iv_shmoo_type].MBA.P[l_p].S[rank].K.nom_val[l_n][i_rp]);
+ #endif
+ }
+ }
+ }
+
+
+
+
+
+ return rc;
+}
+
+fapi::ReturnCode generic_shmoo::get_all_noms_gate(const fapi::Target & i_target)
+{
+ fapi::ReturnCode rc;
+
+
+ uint8_t i_rnk=0;
+
+
+ //uint8_t l_dq=0;
+ uint8_t l_cmd=0;
+ uint8_t l_p=0;
+ uint8_t l_addr=0;
+ uint8_t l_cntrl=0;
+ uint8_t l_clk=0;
+ uint32_t l_delay=0;
+
+ #ifdef DEBUG
+ FAPI_INF("mss_generic_shmoo : get_all_noms_gate : Reading in all nominal values and schmoo type=%d \n",iv_shmoo_type);
+ #endif
+
+ input_type_t l_input_type_e = COMMAND;
+ access_type_t l_access_type_e = READ ;
+ FAPI_DBG("mss_generic_shmoo : get_all_noms : Reading in all nominal values");
+
+
+
+
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ FAPI_INF("\n PORT=%d \n",l_p);
+ for (l_cmd=0;l_cmd<3;l_cmd++)
+ {
+ l_input_type_e = COMMAND;
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cmd,1,l_delay);if(rc) return rc;
+ SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd]=l_delay;
+ FAPI_INF("\n Command = %d and value = %d \n",l_cmd,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd]);
+ FAPI_INF("\n Command = %d and original value = %d \n",l_cmd,l_delay);
+ }
+
+ for (l_addr=0;l_addr<19;l_addr++)
+ {
+ l_input_type_e = ADDRESS;
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_addr,1,l_delay);if(rc) return rc;
+ //FAPI_INF("\n Saurabh is here \n");
+ SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr]=l_delay;
+ //FAPI_INF("\n address = %d and value = %d \n",l_addr,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr]);
+ }
+ for (l_cntrl=0;l_cntrl<20;l_cntrl++)
+ {
+ l_input_type_e = CONTROL;
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cntrl,1,l_delay);if(rc) return rc;
+ SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl]=l_delay;
+ //FAPI_INF("\n CONTROL = %d and value = %d \n",l_cntrl,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl]);
+ }
+
+ for (l_clk=0;l_clk<8;l_clk++)
+ {
+ l_input_type_e = CLOCK;
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,1,l_input_type_e,l_clk,1,l_delay);if(rc) return rc;
+ SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk]=l_delay;
+ FAPI_INF("\n CLOCK = %d and value = %d \n",l_clk,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk]);
+ }
+ }
+
+
+
+ return rc;
+}
+
+
+
/*------------------------------------------------------------------------------
* Function: knob_update
* Description : This is a key function is used to find right and left bound using new algorithm -- there is an option u can chose not to use it by setting a flag
@@ -627,7 +1286,7 @@ fapi::ReturnCode generic_shmoo::knob_update(const fapi::Target & i_target,bound_
uint8_t l_p=0;
uint16_t l_delay=0;
- //uint32_t l_max=0;
+
uint16_t l_max_limit=500;
uint8_t rank=0;
uint8_t l_rank=0;
@@ -638,6 +1297,13 @@ fapi::ReturnCode generic_shmoo::knob_update(const fapi::Target & i_target,bound_
{
l_SCHMOO_NIBBLES=18;
}
+
+ rc=do_mcbist_reset(i_target);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_reset failed");
+ return rc;
+ }
//rc = mss_getrankpair(i_target,iv_port,rank,&l_rp,valid_rank);if(rc) return rc;
for (l_p=0;l_p<MAX_PORT;l_p++){
@@ -650,7 +1316,7 @@ fapi::ReturnCode generic_shmoo::knob_update(const fapi::Target & i_target,bound_
}
}
- if(scenario == 2) {
+ if(scenario == 8) {
l_input_type_e = RD_DQ;
l_max_limit=127;
}
@@ -674,13 +1340,16 @@ fapi::ReturnCode generic_shmoo::knob_update(const fapi::Target & i_target,bound_
rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq,bound);
if(schmoo_error_map[l_p][rank][l_n]==0){
SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
-
+ #ifdef DBG
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]);
+ #endif
rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
-
+ //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq);
+ //get_error_cnt(const fapi::Target & i_target,uint8_t port,uint8_t rank,uint8_t rank_pair,uint8_t bit)
}
if(SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]>l_max_limit){
@@ -701,7 +1370,7 @@ fapi::ReturnCode generic_shmoo::knob_update(const fapi::Target & i_target,bound_
FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
return rc;
}
-
+ //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq);
rc=check_error_map(i_target,l_p,pass);
if(rc)
{
@@ -746,7 +1415,1047 @@ fapi::ReturnCode generic_shmoo::knob_update(const fapi::Target & i_target,bound_
for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
//l_max=SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp];
+ //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq,bound);
+
+ if(schmoo_error_map[l_p][rank][l_n]==0){
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
+ //l_max=SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp];
+ #ifdef DBG
+ 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]);
+ #endif
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+
+ }
+ if(SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp] == 0){
+ schmoo_error_map[l_p][rank][l_n] = 1;
+ }
+
+ l_dq=l_dq+4;
+
+ }
+ }
+
+ }
+ rc=do_mcbist_test(i_target);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+
+rc=check_error_map(i_target,l_p,pass);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+
+
+ }
+
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
+ {
+ l_dq=bit;
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rank];
+ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+4;
+ }
+ }
+ }
+ }
+
+
+ }
+
+ return rc;
+}
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+fapi::ReturnCode generic_shmoo::knob_update_bin(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag)
+{
+ fapi::ReturnCode rc;
+ ecmdDataBufferBase data_buffer_64(64);
+ ecmdDataBufferBase data_buffer_64_1(64);
+
+
+
+ uint8_t l_rp=0;
+ input_type_t l_input_type_e = WR_DQ;
+ uint8_t l_dq=0;
+ access_type_t l_access_type_e = WRITE;
+ uint8_t l_n=0;
+
+ uint8_t l_p=0;
+ //uint16_t l_delay=0;
+
+ //uint16_t l_max_limit=500;
+ uint8_t rank=0;
+ uint8_t l_rank=0;
+ uint8_t l_SCHMOO_NIBBLES=20;
+ uint8_t i_rp=0;
+ uint8_t l_status=1;
+
+ if(iv_dmm_type==1)
+ {
+ l_SCHMOO_NIBBLES=18;
+ }
+
+ rc=do_mcbist_reset(i_target);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_reset failed");
+ return rc;
+ }
+ //rc = mss_getrankpair(i_target,iv_port,rank,&l_rp,valid_rank);if(rc) return rc;
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for(int i=0;i<iv_MAX_RANKS[l_p];i++){
+ rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[i];
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ schmoo_error_map[l_p][rank][l_n]=0;
+ }
+ }
+ }
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for(int i=0;i<iv_MAX_RANKS[l_p];i++){
+ rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[i];
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ binary_done_map[l_p][rank][l_n]=0;
+ }
+ }
+ }
+
+ if(scenario == 8) {
+ l_input_type_e = RD_DQ;
+ //l_max_limit=127;
+ }
+
+
+ if(bound==RIGHT)
+ {
+
+ if(algorithm==SEQ_LIN)
+ {
+
+
+ do{
+
+ ////////////////////////////////////////////
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for(int i=0;i<iv_MAX_RANKS[l_p];i++){
+ rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[i];
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ l_status=0;
+ if(binary_done_map[l_p][rank][l_n]==0){
+ l_status=1;
+ }
+ }
+ }
+ }
+ ////////////////
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
+ {
+ l_dq=bit;
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rank];
+ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+
+ 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]);
+ 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){
+ 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]);
+ }
+ }else{
+
+ 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];
+ 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 2222222 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){
+ 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]);
+ }
+ }
+ // //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq,bound);
+ // if(schmoo_error_map[l_p][rank][l_n]==0){
+
+ // SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
+ // #ifdef DBG
+ // 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]);
+ // #endif
+ // rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+ // //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq);
+ // //get_error_cnt(const fapi::Target & i_target,uint8_t port,uint8_t rank,uint8_t rank_pair,uint8_t bit)
+ // }
+
+ // if(SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]>l_max_limit){
+ // schmoo_error_map[l_p][rank][l_n]=1;
+ // }
+
+ l_dq=l_dq+4;
+
+ }
+
+
+ }
+
+ }
+ rc=do_mcbist_reset(i_target);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_reset failed");
+ return rc;
+ }
+ rc=do_mcbist_test(i_target);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+ //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq);
+ rc=check_error_map(i_target,l_p,pass);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+ //FAPI_INF("\n the status =%d \n",l_status);
+ }while(l_status==1);
+
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
+ {
+ l_dq=bit;
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rank];
+ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+4;
+ }
+ }
+ }
+ }
+
+ }
+
+ if(bound==LEFT)
+ {
+ if(algorithm==SEQ_LIN)
+ {
+
+
+ do{
+
+ ////////////////////////////////////////////
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for(int i=0;i<iv_MAX_RANKS[l_p];i++){
+ rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[i];
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ l_status=0;
+ if(binary_done_map[l_p][rank][l_n]==0){
+ l_status=1;
+ }
+ }
+ }
+ }
+ ////////////////
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
+ {
+ l_dq=bit;
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rank];
+ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+
+ 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]);
+ 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){
+ 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]);
+ }
+ }else{
+
+ 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];
+ 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 2222222 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){
+ 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]);
+ }
+ }
+ // //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq,bound);
+ // if(schmoo_error_map[l_p][rank][l_n]==0){
+
+ // SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
+ // #ifdef DBG
+ // 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]);
+ // #endif
+ // rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+ // //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq);
+ // //get_error_cnt(const fapi::Target & i_target,uint8_t port,uint8_t rank,uint8_t rank_pair,uint8_t bit)
+ // }
+
+ // if(SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]>l_max_limit){
+ // schmoo_error_map[l_p][rank][l_n]=1;
+ // }
+
+ l_dq=l_dq+4;
+
+ }
+
+
+ }
+
+ }
+ rc=do_mcbist_reset(i_target);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_reset failed");
+ return rc;
+ }
+ rc=do_mcbist_test(i_target);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+ //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq);
+ rc=check_error_map(i_target,l_p,pass);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+ FAPI_INF("\n the status =%d \n",l_status);
+ }while(l_status==1);
+
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
+ {
+ l_dq=bit;
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rank];
+ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+4;
+ }
+ }
+ }
+ }
+
+
+ }
+
+ return rc;
+}
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+fapi::ReturnCode generic_shmoo::knob_update_gate(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t pass,bool &flag)
+{
+ fapi::ReturnCode rc;
+ ecmdDataBufferBase data_buffer_64(64);
+ ecmdDataBufferBase data_buffer_64_1(64);
+
+
+
+ uint8_t l_rp=0;
+ input_type_t l_input_type_e = COMMAND;
+
+ access_type_t l_access_type_e = WRITE;
+ uint8_t l_n=0;
+ uint8_t l_cmd=0;
+ uint8_t l_addr=0;
+ uint8_t l_cntrl=0;
+ uint8_t l_clk=0;
+ uint8_t i_rnk=0;
+
+
+ uint8_t l_p=0;
+ uint32_t l_delay=0;
+ //uint32_t l_delay_cac=0;
+ uint32_t l_cmd_delay=0;
+ uint32_t l_addr_delay=0;
+ uint32_t l_cntrl_delay=0;
+ uint32_t l_clk_delay=0;
+
+ //uint16_t l_max_limit=500;
+ uint8_t rank=0;
+ uint8_t l_rank=0;
+ uint8_t l_SCHMOO_NIBBLES=20;
+ uint8_t i_rp=0;
+
+ if(iv_dmm_type==1)
+ {
+ l_SCHMOO_NIBBLES=18;
+ }
+
+ rc=do_mcbist_reset(i_target);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_reset failed");
+ return rc;
+ }
+ //rc = mss_getrankpair(i_target,iv_port,rank,&l_rp,valid_rank);if(rc) return rc;
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for(int i=0;i<iv_MAX_RANKS[l_p];i++){
+ rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[i];
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ schmoo_error_map[l_p][rank][l_n]=0;
+ }
+ }
+ }
+
+
+
+
+ if(bound==RIGHT)
+ {
+
+ if(algorithm==SEQ_LIN)
+ {
+
+
+ for (l_delay=1;((pass==0)&&(l_delay<127));l_delay++){
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
+ {
+
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rank];
+ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+
+
+
+
+
+ if(schmoo_error_map[l_p][rank][l_n]==0){
+
+
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.offset[l_n]=l_delay;
+
+ }
+ }
+
+
+ }
+
+ }
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_cmd=0;l_cmd<3;l_cmd++)
+ {
+
+ l_cmd_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd]+l_delay;
+
+ l_input_type_e = COMMAND;
+ if(l_cmd_delay<127){
+ //l_delay_cac=l_cmd_delay-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd];
+ FAPI_INF("\n port=%d command=%d nominal =%d and write_value=%d \n",l_p,l_cmd,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd],l_cmd_delay);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cmd,0,l_cmd_delay);if(rc) return rc;
+ }
+ }
+ for (l_addr=0;l_addr<19;l_addr++)
+ {
+
+ l_addr_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr]+l_delay;
+ if(l_addr_delay<127){
+ l_input_type_e = ADDRESS;
+ FAPI_INF("\n port=%d address=%d nominal =%d and write_value=%d \n",l_p,l_addr,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr],l_addr_delay);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_addr,0,l_addr_delay);if(rc) return rc;
+ }
+ }
+ for (l_cntrl=0;l_cntrl<20;l_cntrl++)
+ {
+ l_cntrl_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl]+l_delay;
+ if(l_cntrl_delay<127){
+ l_input_type_e = CONTROL;
+ FAPI_INF("\n port=%d control=%d nominal =%d and write_value=%d \n",l_p,l_cntrl,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl],l_cntrl_delay);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cntrl,0,l_cntrl_delay);if(rc) return rc;
+ }
+ }
+
+ for (l_clk=0;l_clk<8;l_clk++)
+ {
+ l_clk_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk]+l_delay;
+
+
+
+
+ l_input_type_e = CLOCK;
+
+ FAPI_INF("\n port=%d clock=%d nominal =%d and write_value=%d \n",l_p,l_clk,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk],l_clk_delay);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_clk,0,l_clk_delay);if(rc) return rc;
+
+ }
+ }
+
+
+ rc=do_mcbist_test(i_target);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+
+
+ rc=check_error_map(i_target,l_p,pass);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+
+
+ }
+
+
+
+ // PUT HERE NOMINAL BACK .
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_cmd=0;l_cmd<3;l_cmd++)
+ {
+
+ l_cmd_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd];
+
+ l_input_type_e = COMMAND;
+ if(l_cmd_delay<127){
+
+ // l_delay_cac=l_cmd_delay-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd];
+
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cmd,0,l_cmd_delay);if(rc) return rc;
+ }
+ }
+ for (l_addr=0;l_addr<19;l_addr++)
+ {
+
+ l_addr_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr];
+ if(l_addr_delay<127){
+ l_input_type_e = ADDRESS;
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_addr,0,l_addr_delay);if(rc) return rc;
+ }
+ }
+ for (l_cntrl=0;l_cntrl<20;l_cntrl++)
+ {
+ l_cntrl_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl];
+ if(l_cntrl_delay<127){
+ l_input_type_e = CONTROL;
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cntrl,0,l_cntrl_delay);if(rc) return rc;
+ }
+ }
+
+ for (l_clk=0;l_clk<8;l_clk++)
+ {
+ l_clk_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk];
+ l_input_type_e = CLOCK;
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_clk,0,l_clk_delay);if(rc) return rc;
+
+ }
+ }
+
+
+ }
+
+ }
+
+ if(bound==LEFT)
+ {
+ if(algorithm==SEQ_LIN)
+ {
+
+
+ for (l_delay=1;((pass==0)&&(l_delay<127));l_delay++){
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
+ {
+
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rank];
+ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+
+
+
+
+
+ if(schmoo_error_map[l_p][rank][l_n]==0){
+
+
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.offset[l_n]=l_delay;
+
+ }
+ }
+
+
+ }
+
+ }
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_cmd=0;l_cmd<3;l_cmd++)
+ {
+
+ l_cmd_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd]-l_delay;
+
+ l_input_type_e = COMMAND;
+ if((l_cmd_delay>0)&&(l_cmd_delay<127)){
+ //l_delay_cac=l_cmd_delay-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd];
+ FAPI_INF("\n port=%d command=%d nominal =%d and write_value=%d \n",l_p,l_cmd,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd],l_cmd_delay);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cmd,0,l_cmd_delay);if(rc) return rc;
+ }
+ }
+ for (l_addr=0;l_addr<19;l_addr++)
+ {
+
+ l_addr_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr]-l_delay;
+ if((l_addr_delay>0)&&(l_addr_delay<127)){
+ l_input_type_e = ADDRESS;
+ FAPI_INF("\n port=%d address=%d nominal =%d and write_value=%d \n",l_p,l_addr,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr],l_addr_delay);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_addr,0,l_addr_delay);if(rc) return rc;
+ }
+ }
+ for (l_cntrl=0;l_cntrl<20;l_cntrl++)
+ {
+ l_cntrl_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl]-l_delay;
+ if((l_cntrl_delay>0)&&(l_cntrl_delay<127)){
+ l_input_type_e = CONTROL;
+ FAPI_INF("\n port=%d control=%d nominal =%d and write_value=%d \n",l_p,l_cntrl,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl],l_cntrl_delay);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cntrl,0,l_cntrl_delay);if(rc) return rc;
+ }
+ }
+
+ for (l_clk=0;l_clk<8;l_clk++)
+ {
+ l_clk_delay = (SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk]+127)-l_delay;
+ l_input_type_e = CLOCK;
+
+ FAPI_INF("\n port=%d clock=%d nominal =%d and write_value=%d \n",l_p,l_clk,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk],l_clk_delay);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_clk,0,l_clk_delay);if(rc) return rc;
+
+ }
+ }
+ // put here loops for changing the delay values of CACc
+
+ rc=do_mcbist_test(i_target);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+
+ rc=check_error_map(i_target,l_p,pass);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+
+
+ }
+
+
+
+ // PUT HERE NOMINAL BACK .
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_cmd=0;l_cmd<3;l_cmd++)
+ {
+
+ l_cmd_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd];
+
+ l_input_type_e = COMMAND;
+ if(l_cmd_delay<127){
+
+ // l_delay_cac=l_cmd_delay-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd];
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cmd,0,l_cmd_delay);if(rc) return rc;
+ }
+ }
+ for (l_addr=0;l_addr<19;l_addr++)
+ {
+
+ l_addr_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr];
+ if(l_addr_delay<127){
+ l_input_type_e = ADDRESS;
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_addr,0,l_addr_delay);if(rc) return rc;
+ }
+ }
+ for (l_cntrl=0;l_cntrl<20;l_cntrl++)
+ {
+ l_cntrl_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl];
+ if(l_cntrl_delay<127){
+ l_input_type_e = CONTROL;
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cntrl,0,l_cntrl_delay);if(rc) return rc;
+ }
+ }
+
+ for (l_clk=0;l_clk<8;l_clk++)
+ {
+ l_clk_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk];
+
+ l_input_type_e = CLOCK;
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_clk,0,l_clk_delay);if(rc) return rc;
+
+ }
+ }
+
+
+ }
+
+
+ }
+
+ return rc;
+}
+fapi::ReturnCode generic_shmoo::knob_update_gate_train(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t pass)
+{
+ fapi::ReturnCode rc;
+
+ ecmdDataBufferBase l_data_buffer_FIR_64(64);
+ ecmdDataBufferBase data_buffer_64(64);
+ ecmdDataBufferBase data_buffer_64_1(64);
+
+
+
+ uint8_t l_rp=0;
+ input_type_t l_input_type_e = COMMAND;
+ uint8_t l_dq=0;
+ access_type_t l_access_type_e = WRITE;
+ uint8_t l_n=0;
+ uint8_t l_cmd=0;
+ uint8_t l_addr=0;
+ uint8_t l_cntrl=0;
+ uint8_t l_clk=0;
+ uint8_t i_rnk=0;
+ uint8_t bit=0;
+ uint8_t l_failed=0;
+
+ uint8_t l_p=0;
+ uint32_t l_delay=0;
+ uint32_t l_delay_failed=0;
+
+ uint32_t l_cmd_delay=0;
+ uint32_t l_addr_delay=0;
+ uint32_t l_cntrl_delay=0;
+ uint32_t l_clk_delay=0;
+
+
+ uint8_t rank=0;
+ uint8_t l_rank=0;
+ uint8_t l_SCHMOO_NIBBLES=20;
+ uint8_t i_rp=0;
+ uint32_t rc_num = 0;
+ uint8_t flag=1;
+
+
+
+
+ if(iv_dmm_type==1)
+ {
+ l_SCHMOO_NIBBLES=18;
+ }
+
+ rc=do_mcbist_reset(i_target);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_reset failed");
+ return rc;
+ }
+
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for(int i=0;i<iv_MAX_RANKS[l_p];i++){
+ rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[i];
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ schmoo_error_map[l_p][rank][l_n]=0;
+ }
+ }
+ }
+
+
+
+
+ if(bound==RIGHT)
+ {
+
+ if(algorithm==SEQ_LIN)
+ {
+
+
+ for (l_delay=1;((pass==0)&&(l_delay<127));l_delay++){
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
+ {
+
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rank];
+ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+
+
+
+
+
+ if(schmoo_error_map[l_p][rank][l_n]==0){
+
+
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.offset[l_n]=l_delay;
+ }
+ }
+
+
+ }
+
+ }
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ l_failed=0;
+ for (l_cmd=0;l_cmd<3;l_cmd++)
+ {
+
+ l_cmd_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd]+l_delay;
+
+ l_input_type_e = COMMAND;
+ if(l_cmd_delay==127){
+ l_failed=1;
+ pass=1;
+ }
+ if((l_cmd_delay<127)&&(l_failed==0)){
+
+ FAPI_INF("\n port=%d command=%d nominal =%d and write_value=%d \n",l_p,l_cmd,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd],l_cmd_delay);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cmd,0,l_cmd_delay);if(rc) return rc;
+ }
+ }
+ for (l_addr=0;l_addr<19;l_addr++)
+ {
+
+ l_addr_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr]+l_delay;
+ if(l_addr_delay==127){
+ l_failed=1;
+ pass=1;
+ }
+ if((l_addr_delay<127)&&(l_failed==0)){
+ l_input_type_e = ADDRESS;
+
+ FAPI_INF("\n port=%d address=%d nominal =%d and write_value=%d \n",l_p,l_addr,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr],l_addr_delay);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_addr,0,l_addr_delay);if(rc) return rc;
+ }
+ }
+ for (l_cntrl=0;l_cntrl<20;l_cntrl++)
+ {
+ l_cntrl_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl]+l_delay;
+ if(l_cntrl_delay==127){
+ l_failed=1;
+ pass=1;
+ }
+ if((l_cntrl_delay<127)&&(l_failed==0)){
+ l_input_type_e = CONTROL;
+
+ FAPI_INF("\n port=%d control=%d nominal =%d and write_value=%d \n",l_p,l_cntrl,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl],l_cntrl_delay);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cntrl,0,l_cntrl_delay);if(rc) return rc;
+ }
+ }
+
+ for (l_clk=0;l_clk<8;l_clk++)
+ {
+ l_clk_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk]+l_delay;
+
+
+ l_input_type_e = CLOCK;
+
+ FAPI_INF("\n port=%d clock=%d nominal =%d and write_value=%d \n",l_p,l_clk,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk],l_clk_delay);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,1,l_input_type_e,l_clk,0,l_clk_delay);if(rc) return rc;
+
+ }
+ }
+ // call dram training here .
+ FAPI_EXEC_HWP(rc, mss_draminit_training, i_target);
+ //rc = mss_draminit_training(i_target);
+ if(rc){
+ l_delay_failed=l_delay-1;
+ pass=1;
+ }
+
+ l_delay_failed=l_delay-1;
+ FAPI_INF("\n the value of pass=%d and delay =%d and failed delay=%d \n",pass,l_delay,l_delay_failed);
+ ///////
+
+
+}
+
+FAPI_INF("\n EFFECTIVE RIGHT CLOCK ADJUST = %d \n",l_delay_failed);
+rc_num = data_buffer_64.flushTo0();if (rc_num){FAPI_ERR( "Error in function mcb_reset_trap:");rc.setEcmdError(rc_num);return rc;}
+
+rc=put_all_noms_data_disable(i_target,flag);if(rc) return rc;
+
+// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP0_P0_0_0x8000007c0301143F,data_buffer_64); if(rc) return rc;
+// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP0_P0_1_0x8000047c0301143F,data_buffer_64); if(rc) return rc;
+// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP0_P0_2_0x8000087c0301143F,data_buffer_64); if(rc) return rc;
+// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP0_P0_3_0x80000c7c0301143F,data_buffer_64); if(rc) return rc;
+// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP0_P0_4_0x8000107c0301143F,data_buffer_64); if(rc) return rc;
+
+// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP0_P1_0_0x8001007c0301143F,data_buffer_64); if(rc) return rc;
+// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP0_P1_1_0x8001047c0301143F,data_buffer_64); if(rc) return rc;
+// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP0_P1_2_0x8001087c0301143F,data_buffer_64); if(rc) return rc;
+// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP0_P1_3_0x80010c7c0301143F,data_buffer_64); if(rc) return rc;
+// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP0_P1_4_0x8001107c0301143F,data_buffer_64); if(rc) return rc;
+
+// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP1_P0_0_0x8000017c0301143F,data_buffer_64); if(rc) return rc;
+// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP1_P0_1_0x8000057c0301143F,data_buffer_64); if(rc) return rc;
+// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP1_P0_2_0x8000097c0301143F,data_buffer_64); if(rc) return rc;
+// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP1_P0_3_0x80000d7c0301143F,data_buffer_64); if(rc) return rc;
+// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP1_P0_4_0x8000117c0301143F,data_buffer_64); if(rc) return rc;
+
+
+// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP1_P1_0_0x8001017c0301143F,data_buffer_64); if(rc) return rc;
+// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP1_P1_1_0x8001057c0301143F,data_buffer_64); if(rc) return rc;
+// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP1_P1_2_0x8001097c0301143F,data_buffer_64); if(rc) return rc;
+// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP1_P1_3_0x80010d7c0301143F,data_buffer_64); if(rc) return rc;
+// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP1_P1_4_0x8001117c0301143F,data_buffer_64); if(rc) return rc;
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_cmd=0;l_cmd<3;l_cmd++)
+ {
+
+ l_cmd_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd]+l_delay_failed;
+
+ l_input_type_e = COMMAND;
+ if(l_cmd_delay<127){
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cmd,0,l_cmd_delay);if(rc) return rc;
+ }
+ }
+ for (l_addr=0;l_addr<19;l_addr++)
+ {
+
+ l_addr_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr]+l_delay_failed;
+ if(l_addr_delay<127){
+ l_input_type_e = ADDRESS;
+
+ //FAPI_INF("\n port=%d address=%d nominal =%d and write_value=%d \n",l_p,l_addr,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr],l_addr_delay);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_addr,0,l_addr_delay);if(rc) return rc;
+ }
+ }
+ for (l_cntrl=0;l_cntrl<20;l_cntrl++)
+ {
+ l_cntrl_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl]+l_delay_failed;
+ if(l_cntrl_delay<127){
+ l_input_type_e = CONTROL;
+
+ //FAPI_INF("\n port=%d control=%d nominal =%d and write_value=%d \n",l_p,l_cntrl,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl],l_cntrl_delay);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cntrl,0,l_cntrl_delay);if(rc) return rc;
+ }
+ }
+
+ for (l_clk=0;l_clk<8;l_clk++)
+ {
+ l_clk_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk]+l_delay_failed;
+
+ //FAPI_INF("\n clock max value reached for port=%d and value =%d \n",l_p,l_clk_delay);
+
+
+ l_input_type_e = CLOCK;
+
+ //FAPI_INF("\n port=%d clock=%d nominal =%d and write_value=%d \n",l_p,l_clk,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk],l_clk_delay);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_clk,0,l_clk_delay);if(rc) return rc;
+
+ }
+ }
+
+
+ //rc = mss_draminit_training(i_target);
+ FAPI_EXEC_HWP(rc, mss_draminit_training, i_target);
+ iv_shmoo_type=4;
+ rc=schmoo_setup_mcb(i_target);if(rc) return rc;
+ iv_shmoo_type=16;
+ // check mcbist for the fail
+ 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) return rc;
+
+
+
+
+ }
+
+ }
+
+ if(bound==LEFT)
+ {
+ if(algorithm==SEQ_LIN)
+ {
+
+ for (l_delay=1;(pass==0);l_delay++){
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
+ {
+
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rank];
+ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ //l_max=SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp];
+ //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq,bound);
if(schmoo_error_map[l_p][rank][l_n]==0){
SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
@@ -808,96 +2517,1196 @@ rc=check_error_map(i_target,l_p,pass);
* Description : This is a key function is used to find right and left bound using new algorithm -- there is an option u can chose not to use it by setting a flag
*
* Parameters: Target:MBA,bound:RIGHT/LEFT,scenario:type of schmoo,iv_port:0/1,rank:0-7,byte:0-7,nibble:0/1,bit:0-3,pass,
- * ---------------------------------------------------------------------------
-fapi::ReturnCode generic_shmoo::knob_update_dqs(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t rank,uint8_t byte,uint8_t nibble,uint8_t bit,uint8_t pass)
-{
+ * --------------------------------------------------------------------------- */
+fapi::ReturnCode generic_shmoo::knob_update_dqs_by4(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag)
+{
fapi::ReturnCode rc;
ecmdDataBufferBase data_buffer_64(64);
ecmdDataBufferBase data_buffer_64_1(64);
- data_buffer_64.flushTo0();
- data_buffer_64_1.flushTo0();
- uint32_t l_current_val=0;
- uint32_t l_max_value=0;
- uint32_t l_min_value=0;
+
+
uint8_t l_rp=0;
- input_type_t l_input_type_e = WR_DQS;
+ input_type_t l_input_type_e = WR_DQ;
+ input_type_t l_input_type_e_dqs = WR_DQS;
uint8_t l_dq=0;
access_type_t l_access_type_e = WRITE;
+ uint8_t l_n=0;
+ uint8_t l_dqs=4;
+
+
+ uint8_t l_p=0;
+ uint16_t l_delay=0;
+ //uint32_t l_max=0;
+ uint16_t l_max_limit=500;
+ uint8_t rank=0;
+ uint8_t l_rank=0;
+ uint8_t l_SCHMOO_NIBBLES=20;
+ uint8_t i_rp=0;
+
+
+ rc=do_mcbist_test(i_target);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+
+ rc=check_error_map(i_target,l_p,pass);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
- if(scenario == 1)
+ if(iv_dmm_type==1)
{
- l_input_type_e = WR_DQS;
- }
- else if(scenario == 3)
+ l_SCHMOO_NIBBLES=18;
+ }
+ //rc = mss_getrankpair(i_target,iv_port,rank,&l_rp,valid_rank);if(rc) return rc;
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for(int i=0;i<iv_MAX_RANKS[l_p];i++){
+ rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[i];
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ schmoo_error_map[l_p][rank][l_n]=0;
+ }
+ }
+ }
+
+
+
+
+ if(bound==RIGHT)
{
- l_input_type_e = RD_DQS;
- }
+
+ if(algorithm==SEQ_LIN)
+ {
+
+
+ for (l_delay=1;((pass==0));l_delay++){
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
+ {
+ l_dq=0;
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rank];
+ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
+ //FAPI_INF("\n abhijit here after port=%d rank=%d \n",l_p,rank);
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ l_dq=4*l_n;
+ if(schmoo_error_map[l_p][rank][l_n]==0){
+ //FAPI_INF("\n value of nominal delay scenario=%d rank=%d for port=%d dqs=%d is %d ",l_dqs,rank,l_p,l_n,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);
+ SHMOO[l_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_n][l_rp]=SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]+l_delay;
+ //FAPI_INF("\n value of delay scenario=%d rank=%d for port=%d dqs=%d is %d ",l_dqs,rank,l_p,l_n,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_n][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_n][l_rp]);if(rc) return rc;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
+ //FAPI_INF("\n value of delay scenario=%d rank=%d for port=%d bit=%d is %d ",scenario,rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
+ //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
+ //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
+ //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+ }
+ //FAPI_INF("\n abhijit here before \n");
+ if(SHMOO[l_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]>l_max_limit){
+ schmoo_error_map[l_p][rank][l_n]=1;
+ }
+
+ }
+
+
+ }
+
+ }
+ rc=do_mcbist_test(i_target);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+
+ rc=check_error_map(i_target,l_p,pass);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+ }
+
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
+ {
+
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rank];
+ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ //FAPI_INF("\n restoring nominal values for dqs=%d port=%d rank=%d is %d \n",l_n,l_p,rank,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);if(rc) return rc;
+
+ }
+ }
+ }
+ for(int l_bit=0;l_bit<4;l_bit++){
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
+ {
+ l_dq=l_bit;
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rank];
+ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+4;
+ }
+ }
+ }
+ }
+
+
+ }
+
+ }
+
if(bound==LEFT)
{
+ if(algorithm==SEQ_LIN)
+ {
+
+ for (l_delay=1;(pass==0);l_delay++){
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
+ {
+ l_dq=0;
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rank];
+ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ l_dq=4*l_n;
+ // l_max=SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp];
+
+
+ if(schmoo_error_map[l_p][rank][l_n]==0){
+ SHMOO[l_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_n][l_rp]=SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]-l_delay;
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_n][l_rp]);if(rc) return rc;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
+ //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
+ //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
+ //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
+ //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ }
+ if(SHMOO[l_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp] == 0){
+ schmoo_error_map[l_p][rank][l_n] = 1;
+ }
+
+
+
+ }
+ }
+
+ }
+ rc=do_mcbist_test(i_target);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+
+rc=check_error_map(i_target,l_p,pass);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+
+
+ }
+
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
+ {
+
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rank];
+ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);if(rc) return rc;
+
+ }
+ }
+ }
+
+ for(int l_bit=0;l_bit<4;l_bit++){
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
+ {
+ l_dq=l_bit;
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rank];
+ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+4;
+ }
+ }
+ }
+ }
+ }
+
+
+ }
+
+ return rc;
+}
+fapi::ReturnCode generic_shmoo::knob_update_dqs_by4_isdimm(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag)
+{
+ fapi::ReturnCode rc;
+ ecmdDataBufferBase data_buffer_64(64);
+ ecmdDataBufferBase data_buffer_64_1(64);
+
+
+
+ uint8_t l_rp=0;
+ input_type_t l_input_type_e = WR_DQ;
+ input_type_t l_input_type_e_dqs = WR_DQS;
+ uint8_t l_dq=0;
+ access_type_t l_access_type_e = WRITE;
+ uint8_t l_n=0;
+ uint8_t l_dqs=4;
+ uint8_t l_my_dqs=0;
+
+
+ uint8_t l_p=0;
+ uint16_t l_delay=0;
+ //uint32_t l_max=0;
+ uint16_t l_max_limit=500;
+ uint8_t rank=0;
+ uint8_t l_rank=0;
+ uint8_t l_SCHMOO_NIBBLES=20;
+ uint8_t i_rp=0;
+
+ rc=do_mcbist_test(i_target);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+
+ rc=check_error_map(i_target,l_p,pass);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+
+
+ if(iv_dmm_type==1)
+ {
+ l_SCHMOO_NIBBLES=18;
+ }
+ uint8_t l_dqs_arr[18]={0,9,1,10,2,11,3,12,4,13,5,14,6,15,7,16,8,17};
+ //rc = mss_getrankpair(i_target,iv_port,rank,&l_rp,valid_rank);if(rc) return rc;
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for(int i=0;i<iv_MAX_RANKS[l_p];i++){
+ rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[i];
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ schmoo_error_map[l_p][rank][l_n]=0;
+ }
+ }
+ }
+
+
+
+ if(bound==RIGHT)
+ {
+ if(algorithm==SEQ_LIN)
+ {
+
+
+ for (l_delay=1;((pass==0));l_delay++){
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
+ {
+ l_dq=0;
+ l_my_dqs=0;
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rank];
+ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
+ //FAPI_INF("\n abhijit here after port=%d rank=%d \n",l_p,rank);
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ l_dq=4*l_n;
+ l_my_dqs=l_dqs_arr[l_n];
+ if(schmoo_error_map[l_p][rank][l_n]==0){
+ //FAPI_INF("\n value of nominal delay scenario=%d rank=%d for port=%d dqs=%d is %d ",l_dqs,rank,l_p,l_my_dqs,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_my_dqs][l_rp]);
+ SHMOO[l_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_my_dqs][l_rp]=SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_my_dqs][l_rp]+l_delay;
+ //FAPI_INF("\n value of delay scenario=%d rank=%d for port=%d dqs=%d is %d ",l_dqs,rank,l_p,l_my_dqs,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_my_dqs][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_my_dqs,0,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_my_dqs][l_rp]);if(rc) return rc;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
+ //FAPI_INF("\n value of delay scenario=%d rank=%d for port=%d bit=%d is %d ",scenario,rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
+ //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
+ //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
+ //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+ }
+ //FAPI_INF("\n abhijit here before \n");
+ if(SHMOO[l_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]>l_max_limit){
+ schmoo_error_map[l_p][rank][l_n]=1;
+ }
+
+ }
+
+
+ }
+
+ }
+ rc=do_mcbist_test(i_target);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+
+ rc=check_error_map(i_target,l_p,pass);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+
+ }
+
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
+ {
+
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rank];
+ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ //FAPI_INF("\n restoring nominal values for dqs=%d port=%d rank=%d is %d \n",l_n,l_p,rank,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);if(rc) return rc;
+
+ }
+ }
+ }
+
+ for(int l_bit=0;l_bit<4;l_bit++){
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
+ {
+ l_dq=l_bit;
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rank];
+ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+4;
+ }
+ }
+ }
+ }
+
+
+
+ }
+
+ }
+
+ if(bound==LEFT)
+ {
if(algorithm==SEQ_LIN)
{
- l_min_value=SHMOO[scenario].static_knob.min_val;
- FAPI_INF(" curr val in left above = %d and pass=%d ",l_current_val,pass);
- for(l_current_val=SHMOO[scenario].MBA.P[iv_port].S[rank].K.nom_val[l_dq][l_rp];((l_current_val >= 20)&&(pass==1));l_current_val-=20)
- {
- //use saurabh function for writing here
- FAPI_INF(" curr val in left = %d and pass=%d ",l_current_val,pass);
- rc=mss_access_delay_reg(i_target,l_access_type_e,iv_port,0,l_input_type_e,l_dq,0,l_current_val);if(rc) return rc;
-
- rc=do_mcbist_test(i_target,rank,byte,nibble,pass);
- if(rc)
- {
- FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
- return rc;
- }
- }
- if(!pass)
- {
- SHMOO[scenario].MBA.P[iv_port].S[rank].K.lb_regval[l_dq][l_rp]=l_current_val;
- }
- FAPI_INF(" left bound = %d ",SHMOO[scenario].MBA.P[iv_port].S[rank].K.rb_regval[l_dq][l_rp]);
- l_current_val=SHMOO[scenario].MBA.P[iv_port].S[rank].K.nom_val[l_dq][l_rp];
- rc=mss_access_delay_reg(i_target,l_access_type_e,iv_port,0,l_input_type_e,l_dq,0,l_current_val);if(rc) return rc;
+
+ for (l_delay=1;(pass==0);l_delay++){
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
+ {
+ l_dq=0;
+ l_my_dqs=0;
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rank];
+ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ l_dq=4*l_n;
+ l_my_dqs=l_dqs_arr[l_n];
+ //l_max=SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp];
+
+
+ if(schmoo_error_map[l_p][rank][l_n]==0){
+ SHMOO[l_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_my_dqs][l_rp]=SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_my_dqs][l_rp]-l_delay;
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_my_dqs,0,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_my_dqs][l_rp]);if(rc) return rc;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
+ //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
+ // FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
+ //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
+ //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ }
+ if(SHMOO[l_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp] == 0){
+ schmoo_error_map[l_p][rank][l_n] = 1;
+ }
+
+
+
+ }
+ }
+
+ }
+ rc=do_mcbist_test(i_target);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+
+rc=check_error_map(i_target,l_p,pass);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+
+
+ }
+
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
+ {
+
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rank];
+ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);if(rc) return rc;
+
+ }
+ }
+ }
+
+ for(int l_bit=0;l_bit<4;l_bit++){
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
+ {
+ l_dq=l_bit;
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rank];
+ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+4;
+ }
+ }
+ }
+ }
+ }
+
}
- }
+
+ return rc;
+}
+fapi::ReturnCode generic_shmoo::knob_update_dqs_by8(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag)
+{
+ fapi::ReturnCode rc;
+ ecmdDataBufferBase data_buffer_64(64);
+ ecmdDataBufferBase data_buffer_64_1(64);
+
+
+
+ uint8_t l_rp=0;
+ input_type_t l_input_type_e = WR_DQ;
+ input_type_t l_input_type_e_dqs = WR_DQS;
+ uint8_t l_dq=0;
+ uint8_t l_dqs=0;
+ access_type_t l_access_type_e = WRITE;
+ uint8_t l_n=0;
+ uint8_t l_scen_dqs=4;
+
+
+ uint8_t l_p=0;
+ uint16_t l_delay=0;
+ //uint32_t l_max=0;
+ uint16_t l_max_limit=500;
+ uint8_t rank=0;
+ uint8_t l_rank=0;
+ //uint8_t l_SCHMOO_BYTES=10;
+ uint8_t l_SCHMOO_NIBBLES=20;
+
+ uint8_t i_rp=0;
+
+
+
+
+ rc=do_mcbist_test(i_target);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+
+ rc=check_error_map(i_target,l_p,pass);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+
+ if(iv_dmm_type==1)
+ {
+ //l_SCHMOO_BYTES=9;
+ l_SCHMOO_NIBBLES=18;
+ }
+ //rc = mss_getrankpair(i_target,iv_port,rank,&l_rp,valid_rank);if(rc) return rc;
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for(int i=0;i<iv_MAX_RANKS[l_p];i++){
+ rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[i];
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ schmoo_error_map[l_p][rank][l_n]=0;
+ }
+ }
+ }
+
+
+
+
+
+
+ if(bound==RIGHT)
+ {
+
+ if(algorithm==SEQ_LIN)
+ {
+
+
+ for (l_delay=1;((pass==0));l_delay++){
+
+ //for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
+ {
+ l_dq=0;
+ l_dqs=0;
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rank];
+ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
+ //FAPI_INF("\n abhijit here after port=%d rank=%d \n",l_p,rank);
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ l_dq=4*l_n;
+ if((schmoo_error_map[l_p][rank][l_n]==0)&&(schmoo_error_map[l_p][rank][l_n+1]==0)){
+ //FAPI_INF("\n value of nominal delay scenario=%d rank=%d for port=%d dqs=%d is %d ",l_scen_dqs,rank,l_p,l_n,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);
+ SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_n][l_rp]=SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]+l_delay;
+ //FAPI_INF("\n value of delay scenario=%d rank=%d for port=%d dqs=%d is %d ",l_scen_dqs,rank,l_p,l_n,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_n][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_n][l_rp]);if(rc) return rc;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
+ //FAPI_INF("\n value of delay scenario=%d rank=%d for port=%d bit=%d is %d ",scenario,rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
+ //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
+ //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
+ //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
+ //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
+ //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
+ //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
+ //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+
+ }
+ //FAPI_INF("\n abhijit here before \n");
+ if(SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]>l_max_limit){
+ schmoo_error_map[l_p][rank][l_n]=1;
+ schmoo_error_map[l_p][rank][l_n+1]=1;
+ }
+ if((schmoo_error_map[l_p][rank][l_n]==1)||(schmoo_error_map[l_p][rank][l_n+1]==1)){
+
+ schmoo_error_map[l_p][rank][l_n]=1;
+ schmoo_error_map[l_p][rank][l_n+1]=1;
+ }
+
+ l_n=l_n+1;
+ l_dqs=l_dqs+1;
+ }
+
+
+ }
+
+ }
+ rc=do_mcbist_test(i_target);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+
+ rc=check_error_map(i_target,l_p,pass);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
- else if(bound==RIGHT)
+ }
+
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
+ {
+
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rank];
+ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ //FAPI_INF("\n restoring nominal values for dqs=%d port=%d rank=%d is %d \n",l_n,l_p,rank,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);if(rc) return rc;
+
+ }
+ }
+ }
+
+ for(int l_bit=0;l_bit<4;l_bit++){
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
+ {
+ l_dq=l_bit;
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rank];
+ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+4;
+ }
+ }
+ }
+ }
+
+
+
+ }
+
+ }
+
+ if(bound==LEFT)
{
-
if(algorithm==SEQ_LIN)
- {
- l_max_value=SHMOO[scenario].static_knob.max_val;
- for(l_current_val=SHMOO[scenario].MBA.P[iv_port].S[rank].K.nom_val[l_dq][l_rp];((l_current_val<l_max_value)&&(pass==1));l_current_val+=100)
- {
- //use saurabh function for writing here
- FAPI_INF(" curr val = %d ",l_current_val);
- rc=mss_access_delay_reg(i_target,l_access_type_e,iv_port,0,l_input_type_e,l_dq,0,l_current_val);if(rc) return rc;
-
- rc=do_mcbist_test(i_target,rank,byte,nibble,pass);
- if(rc)
- {
- FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ {
+
+ for (l_delay=1;(pass==0);l_delay++){
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
+ {
+ l_dq=0;
+ l_dqs=0;
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rank];
+ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ l_dq=4*l_n;
+ //l_max=SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp];
+
+
+ if((schmoo_error_map[l_p][rank][l_n]==0)&&(schmoo_error_map[l_p][rank][l_n+1]==0)){
+ SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_n][l_rp]=SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]-l_delay;
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_n][l_rp]);if(rc) return rc;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
+ //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
+ //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
+ //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
+ //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
+ //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
+ //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
+ //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
+ //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ }
+ if(SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp] == 0){
+ schmoo_error_map[l_p][rank][l_n] = 1;
+ schmoo_error_map[l_p][rank][l_n+1] = 1;
+ }
+
+ if((schmoo_error_map[l_p][rank][l_n]==1)||(schmoo_error_map[l_p][rank][l_n+1]==1)){
+
+ schmoo_error_map[l_p][rank][l_n]=1;
+ schmoo_error_map[l_p][rank][l_n+1]=1;
+ }
+
+ l_n=l_n+1;
+ l_dqs=l_dq+1;
+ }
+ }
+
+ }
+ rc=do_mcbist_test(i_target);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
return rc;
- }
- }
- if(!pass)
- {
- SHMOO[scenario].MBA.P[iv_port].S[rank].K.rb_regval[l_dq][l_rp]=l_current_val;
- }
- l_current_val=SHMOO[scenario].MBA.P[iv_port].S[rank].K.nom_val[l_dq][l_rp];
+ }
+
+rc=check_error_map(i_target,l_p,pass);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
- rc=mss_access_delay_reg(i_target,l_access_type_e,iv_port,0,l_input_type_e,l_dq,0,l_current_val);if(rc) return rc;
- FAPI_INF(" right bound = %d ",SHMOO[scenario].MBA.P[iv_port].S[rank].K.rb_regval[l_dq][l_rp]);
- }
+
+ }
+
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
+ {
+
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rank];
+ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ //FAPI_INF("\n restoring nominal values for dqs=%d port=%d rank=%d is %d \n",l_n,l_p,rank,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);if(rc) return rc;
+
+ }
+ }
+ }
+
+ for(int l_bit=0;l_bit<4;l_bit++){
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
+ {
+ l_dq=l_bit;
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rank];
+ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+4;
+ }
+ }
+ }
+ }
+ }
+
- }
- return rc;
+ }
+
+ return rc;
}
-*/
+fapi::ReturnCode generic_shmoo::knob_update_dqs_by8_isdimm(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag)
+{
+ fapi::ReturnCode rc;
+ ecmdDataBufferBase data_buffer_64(64);
+ ecmdDataBufferBase data_buffer_64_1(64);
+
+
+
+ uint8_t l_rp=0;
+ input_type_t l_input_type_e = WR_DQ;
+ input_type_t l_input_type_e_dqs = WR_DQS;
+ uint8_t l_dq=0;
+ uint8_t l_dqs=0;
+ access_type_t l_access_type_e = WRITE;
+ uint8_t l_n=0;
+ uint8_t l_scen_dqs=4;
+
+
+ uint8_t l_p=0;
+ uint16_t l_delay=0;
+ //uint32_t l_max=0;
+ uint16_t l_max_limit=500;
+ uint8_t rank=0;
+ uint8_t l_rank=0;
+ //uint8_t l_SCHMOO_BYTES=10;
+ uint8_t l_SCHMOO_NIBBLES=20;
+
+ uint8_t i_rp=0;
+
+ rc=do_mcbist_test(i_target);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+
+ rc=check_error_map(i_target,l_p,pass);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+
+ if(iv_dmm_type==1)
+ {
+ //l_SCHMOO_BYTES=9;
+ l_SCHMOO_NIBBLES=18;
+ }
+ //rc = mss_getrankpair(i_target,iv_port,rank,&l_rp,valid_rank);if(rc) return rc;
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for(int i=0;i<iv_MAX_RANKS[l_p];i++){
+ rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[i];
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ schmoo_error_map[l_p][rank][l_n]=0;
+ }
+ }
+ }
+
+
+
+
+ if(bound==RIGHT)
+ {
+
+ if(algorithm==SEQ_LIN)
+ {
+
+
+ for (l_delay=1;((pass==0));l_delay++){
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
+ {
+ l_dq=0;
+ l_dqs=0;
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rank];
+ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
+ //FAPI_INF("\n abhijit here after port=%d rank=%d \n",l_p,rank);
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ l_dq=4*l_n;
+ l_dqs=l_n/2;
+ //FAPI_INF("\n the value of error check is %d \n",schmoo_error_map[l_p][rank][l_n]);
+ if((schmoo_error_map[l_p][rank][l_n]==0)&&(schmoo_error_map[l_p][rank][l_n+1]==0)){
+ //FAPI_INF("\n value of nominal delay scenario=%d rank=%d for port=%d dqs=%d is %d ",l_scen_dqs,rank,l_p,l_dqs,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_dqs][l_rp]);
+ SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_dqs][l_rp]=SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_dqs][l_rp]+l_delay;
+ //FAPI_INF("\n value of delay scenario=%d rank=%d for port=%d dqs=%d is %d ",l_scen_dqs,rank,l_p,l_dqs,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_dqs][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_dqs,0,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_dqs][l_rp]);if(rc) return rc;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
+ //FAPI_INF("\n value of delay scenario=%d rank=%d for port=%d bit=%d is %d ",scenario,rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
+ //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
+ //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
+ //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
+ //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
+ //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
+ //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
+ //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+
+ }
+ //FAPI_INF("\n abhijit here before \n");
+ if(SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_dqs][l_rp]>l_max_limit){
+
+ schmoo_error_map[l_p][rank][l_n]=1;
+ schmoo_error_map[l_p][rank][l_n+1]=1;
+ }
+
+ if((schmoo_error_map[l_p][rank][l_n]==1)||(schmoo_error_map[l_p][rank][l_n+1]==1)){
+
+ schmoo_error_map[l_p][rank][l_n]=1;
+ schmoo_error_map[l_p][rank][l_n+1]=1;
+ }
+
+ l_n=l_n+1;
+
+ }
+
+
+ }
+
+ }
+ rc=do_mcbist_test(i_target);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+
+ rc=check_error_map(i_target,l_p,pass);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+
+ }
+
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
+ {
+
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rank];
+ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ //FAPI_INF("\n restoring nominal values for dqs=%d port=%d rank=%d is %d \n",l_n,l_p,rank,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);if(rc) return rc;
+
+ }
+ }
+ }
+
+ for(int l_bit=0;l_bit<4;l_bit++){
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
+ {
+ l_dq=l_bit;
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rank];
+ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+4;
+ }
+ }
+ }
+ }
+
+
+
+ }
+
+ }
+
+ if(bound==LEFT)
+ {
+ if(algorithm==SEQ_LIN)
+ {
+
+ for (l_delay=1;(pass==0);l_delay++){
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
+ {
+ l_dq=0;
+ l_dqs=0;
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rank];
+ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ l_dq=4*l_n;
+ // l_max=SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp];
+ l_dqs=l_n/2;
+
+ if((schmoo_error_map[l_p][rank][l_n]==0)&&(schmoo_error_map[l_p][rank][l_n+1]==0)){
+ SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_dqs][l_rp]=SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_dqs][l_rp]-l_delay;
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_dqs,0,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_dqs][l_rp]);if(rc) return rc;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
+ //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
+ //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
+ //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
+ //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
+ //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
+ //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
+ //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+1;
+ SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
+ //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ }
+ if(SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_dqs][l_rp] == 0){
+ schmoo_error_map[l_p][rank][l_n] = 1;
+ schmoo_error_map[l_p][rank][l_n+1] = 1;
+ }
+
+ if((schmoo_error_map[l_p][rank][l_n]==1)||(schmoo_error_map[l_p][rank][l_n+1]==1)){
+
+ schmoo_error_map[l_p][rank][l_n]=1;
+ schmoo_error_map[l_p][rank][l_n+1]=1;
+ }
+
+ l_n=l_n+1;
+
+ }
+ }
+
+ }
+ rc=do_mcbist_test(i_target);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+
+rc=check_error_map(i_target,l_p,pass);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ return rc;
+ }
+
+
+ }
+
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
+ {
+
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rank];
+ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);if(rc) return rc;
+
+ }
+ }
+ }
+
+ for(int l_bit=0;l_bit<4;l_bit++){
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
+ {
+ l_dq=l_bit;
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rank];
+ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc;
+ l_dq=l_dq+4;
+ }
+ }
+ }
+ }
+ }
+
+
+ }
+
+ return rc;
+}
+
/*------------------------------------------------------------------------------
* Function: find_bound
* Description : This function calls the knob_update for each DQ which is used to find bound that is left/right according to schmoo type
@@ -905,32 +3714,68 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs(const fapi::Target & i_target,bo
* Parameters: Target:MBA,bound:RIGHT/LEFT,
* ---------------------------------------------------------------------------*/
fapi::ReturnCode generic_shmoo::find_bound(const fapi::Target & i_target,bound_t bound){
- uint8_t l_bit;
+ uint8_t l_bit=0;
fapi::ReturnCode rc;
uint8_t pass=0;
+ uint8_t l_dram_width=0;
bool flag=false;
+ rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_WIDTH, &i_target, l_dram_width); if(rc) return rc;
+ FAPI_INF("\n SCHMOO IS IN PROGRESS ...... \n");
+ // FAPI_INF("generic_shmoo::find_bound running find_bound function ");
- FAPI_INF("generic_shmoo::find_bound running find_bound function ");
-
-
-
-
- //Bit loop
+ //rc=knob_update_dqs_by8_isdimm(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc;
+ if(iv_DQS_ON == 1){
+ rc=do_mcbist_reset(i_target);
+ if(rc)
+ {
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_reset failed");
+ return rc;
+ }
+ pass=0;
+ if(l_dram_width == 4){
+ if(iv_dmm_type==1)
+ {
+ rc=knob_update_dqs_by4_isdimm(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc;
+ }else{
+ rc=knob_update_dqs_by4(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc;
+ }
+ }else{
+ if(iv_dmm_type==1)
+ {
+ rc=knob_update_dqs_by8_isdimm(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc;
+ }else{
+ rc=knob_update_dqs_by8(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc;
+ //rc=knob_update_dqs_by8_isdimm(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc;
+ }
+ }
+ }else if(iv_DQS_ON == 2){
+ pass=0;
+ rc=knob_update_gate(i_target,bound,iv_shmoo_type,pass,flag); if(rc) return rc;
+ }
+ else{
+ //Bit loop
for(l_bit=0;l_bit< MAX_BITS;++l_bit)
{
// preetham function here
pass=0;
- //FAPI_INF("\n abhijit is inside find bound 0 \n");
- rc=knob_update(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc;
-
+ //FAPI_INF("\n abhijit is inside find bound and schmoo type is %d \n",iv_shmoo_type);
+
+ //rc=knob_update(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc;
+ ////////////////////////////////////////////////////////////////////////////////////
+ if(iv_shmoo_param==4){
+ rc=knob_update_bin(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc;
+ }else{
+ rc=knob_update(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc;
+ }
+
}
-
+ }
return rc;
}
@@ -956,6 +3801,7 @@ fapi::ReturnCode generic_shmoo::print_report(const fapi::Target & i_target)
uint8_t l_attr_eff_dimm_type_u8 = 0;
uint8_t l_attr_eff_num_drops_per_port_u8 = 0;
uint8_t l_attr_eff_dram_width_u8 = 0;
+
fapi::Target l_target_centaur;
@@ -967,6 +3813,8 @@ fapi::ReturnCode generic_shmoo::print_report(const fapi::Target & i_target)
rc = FAPI_ATTR_GET(ATTR_EFF_NUM_DROPS_PER_PORT, &i_target, l_attr_eff_num_drops_per_port_u8); if(rc) return rc;
rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_WIDTH, &i_target, l_attr_eff_dram_width_u8); if(rc) return rc;
rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, &i_target, l_mbapos);if(rc) return rc;
+
+
FAPI_INF(" freq = %d on %s.", l_attr_mss_freq_u32, l_target_centaur.toEcmdString());
FAPI_INF("volt = %d on %s.", l_attr_mss_volt_u32, l_target_centaur.toEcmdString());
@@ -979,13 +3827,20 @@ fapi::ReturnCode generic_shmoo::print_report(const fapi::Target & i_target)
{
FAPI_INF("It is an ISDIMM");
}
+ FAPI_INF("\n Number of ranks on port = 0 is %d ",iv_MAX_RANKS[0]);
+ FAPI_INF("\n Number of ranks on port = 1 is %d \n \n",iv_MAX_RANKS[1]);
+
//FAPI_INF("num_drops_per_port = %d on %s.", l_attr_eff_num_drops_per_port_u8, i_target.toEcmdString());
//FAPI_INF("num_ranks = %d on %s.", iv_MAX_RANKS,i_target.toEcmdString());
//FAPI_INF("dram_width = %d on %s. \n\n", l_attr_eff_dram_width_u8, i_target.toEcmdString());
FAPI_INF("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
+ //// Based on schmoo param the print will change eventually
+ if(iv_shmoo_type==2)
+ {
FAPI_INF("Schmoo POS\tPort\tRank\tByte\tnibble\tbit\tNominal\t\tSetup_Limit\tHold_Limit\tWrD_Setup(ps)\tWrD_Hold(ps)\tEye_Width(ps)\tBitRate\tVref_Multiplier ");
-
-
+ }else{
+ FAPI_INF("Schmoo POS\tPort\tRank\tByte\tnibble\tbit\tNominal\t\tSetup_Limit\tHold_Limit\tRdD_Setup(ps)\tRdD_Hold(ps)\tEye_Width(ps)\tBitRate\tVref_Multiplier ");
+ }
for (l_p=0;l_p<MAX_PORT;l_p++){
@@ -1003,13 +3858,13 @@ fapi::ReturnCode generic_shmoo::print_report(const fapi::Target & i_target)
{
l_dq=8*l_byte+4*l_nibble+l_bit;
- if(iv_shmoo_type==0)
+ if(iv_shmoo_type==2)
{
- FAPI_INF("WR_EYE %d\t%d\t%d\t%d\t%d\t%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n ",l_mbapos,l_p,i_rank,l_byte,l_nibble,l_bit,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.total_margin[l_dq][l_rp],l_attr_mss_freq_u32,iv_shmoo_param);
+ FAPI_INF("WR_EYE %d\t%d\t%d\t%d\t%d\t%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n ",l_mbapos,l_p,i_rank,l_byte,l_nibble,l_bit,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.total_margin[l_dq][l_rp],l_attr_mss_freq_u32,iv_vref_mul);
}
- if(iv_shmoo_type==2)
+ if(iv_shmoo_type==8)
{
- FAPI_INF("RD_EYE %d\t%d\t%d\t%d\t%d\t%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n ",l_mbapos,l_p,i_rank,l_byte,l_nibble,l_bit,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.total_margin[l_dq][l_rp],l_attr_mss_freq_u32,iv_shmoo_param);
+ FAPI_INF("RD_EYE %d\t%d\t%d\t%d\t%d\t%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n ",l_mbapos,l_p,i_rank,l_byte,l_nibble,l_bit,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.total_margin[l_dq][l_rp],l_attr_mss_freq_u32,iv_vref_mul);
}
}
@@ -1020,6 +3875,208 @@ fapi::ReturnCode generic_shmoo::print_report(const fapi::Target & i_target)
return rc;
}
+
+
+ fapi::ReturnCode generic_shmoo::print_report_dqs(const fapi::Target & i_target)
+{
+ fapi::ReturnCode rc;
+
+ uint8_t l_rnk,l_nibble;
+ //uint8_t l_dq=0;
+ uint8_t l_rp=0;
+ uint8_t l_p=0;
+ uint8_t i_rank=0;
+ uint8_t l_mbapos = 0;
+ uint32_t l_attr_mss_freq_u32 = 0;
+ uint32_t l_attr_mss_volt_u32 = 0;
+ uint8_t l_attr_eff_dimm_type_u8 = 0;
+ uint8_t l_attr_eff_num_drops_per_port_u8 = 0;
+ uint8_t l_attr_eff_dram_width_u8 = 0;
+ fapi::Target l_target_centaur;
+ uint8_t l_SCHMOO_NIBBLES=20;
+ uint8_t l_by8_dqs=0;
+
+
+ if(iv_dmm_type==1)
+ {
+ l_SCHMOO_NIBBLES=18;
+ }
+
+ rc = fapiGetParentChip(i_target, l_target_centaur); if(rc) return rc;
+
+ rc = FAPI_ATTR_GET(ATTR_MSS_FREQ, &l_target_centaur, l_attr_mss_freq_u32); if(rc) return rc;
+ rc = FAPI_ATTR_GET(ATTR_MSS_VOLT, &l_target_centaur, l_attr_mss_volt_u32); if(rc) return rc;
+ rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_TYPE, &i_target, l_attr_eff_dimm_type_u8); if(rc) return rc;
+ rc = FAPI_ATTR_GET(ATTR_EFF_NUM_DROPS_PER_PORT, &i_target, l_attr_eff_num_drops_per_port_u8); if(rc) return rc;
+ rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_WIDTH, &i_target, l_attr_eff_dram_width_u8); if(rc) return rc;
+ rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, &i_target, l_mbapos);if(rc) return rc;
+
+ if(l_attr_eff_dram_width_u8 == 8){
+ l_SCHMOO_NIBBLES=10;
+ if(iv_dmm_type==1)
+ {
+ l_SCHMOO_NIBBLES=9;
+ }
+ }
+
+ //FAPI_INF("Shmoonibbles val is=%d",l_SCHMOO_NIBBLES);
+
+ FAPI_INF(" freq = %d on %s.", l_attr_mss_freq_u32, l_target_centaur.toEcmdString());
+ FAPI_INF("volt = %d on %s.", l_attr_mss_volt_u32, l_target_centaur.toEcmdString());
+ FAPI_INF("dimm_type = %d on %s.", l_attr_eff_dimm_type_u8, i_target.toEcmdString());
+ FAPI_INF("\n Number of ranks on port=0 is %d ",iv_MAX_RANKS[0]);
+ FAPI_INF("\n Number of ranks on port=1 is %d ",iv_MAX_RANKS[1]);
+
+
+ if ( l_attr_eff_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_CDIMM )
+ {
+ FAPI_INF("It is a CDIMM");
+ }
+ else
+ {
+ FAPI_INF("It is an ISDIMM");
+ }
+
+ FAPI_INF("\n Number of ranks on port=0 is %d ",iv_MAX_RANKS[0]);
+ FAPI_INF("\n Number of ranks on port=1 is %d \n \n",iv_MAX_RANKS[1]);
+ //FAPI_INF("num_drops_per_port = %d on %s.", l_attr_eff_num_drops_per_port_u8, i_target.toEcmdString());
+ //FAPI_INF("num_ranks = %d on %s.", iv_MAX_RANKS,i_target.toEcmdString());
+ //FAPI_INF("dram_width = %d on %s. \n\n", l_attr_eff_dram_width_u8, i_target.toEcmdString());
+ //fprintf(fp, "Schmoo POS\tPort\tRank\tDQS\tNominal\t\tSetup_Limit\tHold_Limit\tWrD_Setup(ps)\tWrD_Hold(ps)\tEye_Width(ps)\tBitRate \n");
+ FAPI_INF("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
+ FAPI_INF("Schmoo POS\tPort\tRank\tDQS\tNominal\t\ttDQSSmin_PR_limit\ttDQSSmax_PR_limit\ttDQSSmin(ps)\ttDQSSmax(ps)\ttDQSS_Window(ps)\tBitRate ");
+
+ iv_shmoo_type=4;
+
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rnk=0;l_rnk<iv_MAX_RANKS[l_p];++l_rnk)
+ { rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ i_rank=valid_rank[l_rnk];
+ rc = mss_getrankpair(i_target,l_p,i_rank,&l_rp,valid_rank);if(rc) return rc;
+
+ for(l_nibble=0;l_nibble< l_SCHMOO_NIBBLES;++l_nibble)
+ {
+
+ l_by8_dqs=l_nibble;
+ if(iv_dmm_type==0)
+ {
+ if(l_attr_eff_dram_width_u8 == 8)
+ {
+ l_nibble=l_nibble*2;
+ }
+ }
+ /*if(l_attr_eff_dram_width_u8 == 8){
+ l_by8_dqs=l_nibble*2;
+
+ } */
+ //fprintf(fp,"WR_DQS %d\t%d\t%d\t%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n ",l_mbapos,l_p,i_rank,l_nibble,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.total_margin[l_by8_dqs][l_rp],l_attr_mss_freq_u32);
+ FAPI_INF("WR_DQS %d\t%d\t%d\t%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n ",l_mbapos,l_p,i_rank,l_nibble,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_nibble][l_rp],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.rb_regval[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.total_margin[l_by8_dqs][l_rp],l_attr_mss_freq_u32);
+
+
+
+
+ }
+ }
+ }
+
+ //fclose(fp);
+ return rc;
+ }
+ fapi::ReturnCode generic_shmoo::print_report_gate(const fapi::Target & i_target)
+{
+ fapi::ReturnCode rc;
+
+ uint8_t l_rank,l_n;
+ //uint8_t l_dq=0;
+ uint8_t l_rp=0;
+ uint8_t l_p=0;
+ uint8_t rank=0;
+ uint8_t l_mbapos = 0;
+ uint32_t l_attr_mss_freq_u32 = 0;
+ uint32_t l_attr_mss_volt_u32 = 0;
+ uint8_t l_attr_eff_dimm_type_u8 = 0;
+ uint8_t l_attr_eff_num_drops_per_port_u8 = 0;
+ uint8_t l_attr_eff_dram_width_u8 = 0;
+ fapi::Target l_target_centaur;
+ uint8_t l_SCHMOO_NIBBLES=20;
+
+
+
+ if(iv_dmm_type==1)
+ {
+ l_SCHMOO_NIBBLES=18;
+ }
+
+ rc = fapiGetParentChip(i_target, l_target_centaur); if(rc) return rc;
+
+ rc = FAPI_ATTR_GET(ATTR_MSS_FREQ, &l_target_centaur, l_attr_mss_freq_u32); if(rc) return rc;
+ rc = FAPI_ATTR_GET(ATTR_MSS_VOLT, &l_target_centaur, l_attr_mss_volt_u32); if(rc) return rc;
+ rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_TYPE, &i_target, l_attr_eff_dimm_type_u8); if(rc) return rc;
+ rc = FAPI_ATTR_GET(ATTR_EFF_NUM_DROPS_PER_PORT, &i_target, l_attr_eff_num_drops_per_port_u8); if(rc) return rc;
+ rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_WIDTH, &i_target, l_attr_eff_dram_width_u8); if(rc) return rc;
+ rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, &i_target, l_mbapos);if(rc) return rc;
+
+ if(l_attr_eff_dram_width_u8 == 8){
+ l_SCHMOO_NIBBLES=20;
+ if(iv_dmm_type==1)
+ {
+ l_SCHMOO_NIBBLES=18;
+ }
+ }
+
+ //FAPI_INF("Shmoonibbles val is=%d",l_SCHMOO_NIBBLES);
+
+ FAPI_INF(" freq = %d on %s.", l_attr_mss_freq_u32, l_target_centaur.toEcmdString());
+ FAPI_INF("volt = %d on %s.", l_attr_mss_volt_u32, l_target_centaur.toEcmdString());
+ FAPI_INF("dimm_type = %d on %s.", l_attr_eff_dimm_type_u8, i_target.toEcmdString());
+ FAPI_INF("\n Number of ranks on port=0 is %d ",iv_MAX_RANKS[0]);
+ FAPI_INF("\n Number of ranks on port=1 is %d ",iv_MAX_RANKS[1]);
+
+
+ if ( l_attr_eff_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_CDIMM )
+ {
+ FAPI_INF("It is a CDIMM");
+ }
+ else
+ {
+ FAPI_INF("It is an ISDIMM");
+ }
+
+ FAPI_INF("\n Number of ranks on port=0 is %d ",iv_MAX_RANKS[0]);
+ FAPI_INF("\n Number of ranks on port=1 is %d \n \n",iv_MAX_RANKS[1]);
+ //FAPI_INF("num_drops_per_port = %d on %s.", l_attr_eff_num_drops_per_port_u8, i_target.toEcmdString());
+ //FAPI_INF("num_ranks = %d on %s.", iv_MAX_RANKS,i_target.toEcmdString());
+ //FAPI_INF("dram_width = %d on %s. \n\n", l_attr_eff_dram_width_u8, i_target.toEcmdString());
+ //fprintf(fp, "Schmoo POS\tPort\tRank\tDQS\tNominal\t\tSetup_Limit\tHold_Limit\tWrD_Setup(ps)\tWrD_Hold(ps)\tEye_Width(ps)\tBitRate \n");
+ FAPI_INF("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
+ FAPI_INF("Schmoo POS\tPort\tRank\tNIBBLE\tOFFSET\tBitRate ");
+
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
+ {
+
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ rank=valid_rank[l_rank];
+ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
+ for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+
+
+ //FAPI_INF("\n schmoo=%d port=%d rank=%d and nibble=%d and value=%d ",iv_shmoo_type,l_p,rank,l_n,SHMOO[iv_shmoo_type].MBA.P[l_p].S[rank].K.offset[l_n]);
+ FAPI_INF("RD_DQS %d\t%d\t%d\t%d\t%d\t\t%d\n ",l_mbapos,l_p,rank,l_n,SHMOO[iv_shmoo_type].MBA.P[l_p].S[rank].K.offset[l_n],l_attr_mss_freq_u32);
+ //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq,bound);
+
+ }
+
+
+ }
+
+ }
+
+ return rc;
+ }
+
//#endif
/*------------------------------------------------------------------------------
* Function: get_margin
@@ -1070,7 +4127,7 @@ fapi::ReturnCode generic_shmoo::get_margin(const fapi::Target & i_target)
{
l_dq=8*l_byte+4*l_nibble+l_bit;
//FAPI_INF(" the right bound = %d and nominal = %d",SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_dq][l_rp]);
- if(iv_shmoo_type==2)
+ if(iv_shmoo_type==8)
{
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);
@@ -1078,9 +4135,11 @@ fapi::ReturnCode generic_shmoo::get_margin(const fapi::Target & i_target)
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;
//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]);
}
- }
+ }
+
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);
SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.total_margin[l_dq][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_dq][l_rp]+SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_dq][l_rp];
@@ -1093,6 +4152,146 @@ fapi::ReturnCode generic_shmoo::get_margin(const fapi::Target & i_target)
return rc;
}
+ fapi::ReturnCode generic_shmoo::get_margin_dqs_by4(const fapi::Target & i_target)
+{
+ fapi::ReturnCode rc;
+ uint8_t l_rnk;
+ uint32_t l_attr_mss_freq_margin_u32 = 0;
+ uint32_t l_freq=0;
+ uint64_t l_cyc = 1000000000000000ULL;
+ // uint8_t l_dq=0;
+ uint8_t l_nibble=0;
+ uint8_t l_rp=0;
+ uint8_t l_p=0;
+ uint8_t i_rank=0;
+ uint64_t l_factor=0;
+ uint64_t l_factor_ps=1000000000;
+ uint8_t l_SCHMOO_NIBBLES=20;
+
+ if(iv_dmm_type==1)
+ {
+ l_SCHMOO_NIBBLES=18;
+ }
+
+ //FAPI_INF(" the factor is % llu ",l_cyc);
+
+ fapi::Target l_target_centaur;
+ rc = fapiGetParentChip(i_target, l_target_centaur); if(rc) return rc;
+ rc = FAPI_ATTR_GET(ATTR_MSS_FREQ, &l_target_centaur, l_attr_mss_freq_margin_u32); if(rc) return rc;
+ l_freq=l_attr_mss_freq_margin_u32/2;
+ l_cyc=l_cyc/l_freq;// converting to zepto to get more accurate data
+ l_factor=l_cyc/128;
+ //FAPI_INF("l_factor is % llu ",l_factor);
+
+
+
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ //FAPI_INF("\n Abhijit is here before %d \n",l_p);
+ for (l_rnk=0;l_rnk<iv_MAX_RANKS[l_p];++l_rnk)
+ {
+
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ i_rank=valid_rank[l_rnk];
+ rc = mss_getrankpair(i_target,l_p,i_rank,&l_rp,valid_rank);if(rc) return rc;
+
+ //Nibble loop
+ // FAPI_INF("\n Abhijit is outside %d \n",l_p);
+ for(l_nibble=0;l_nibble<l_SCHMOO_NIBBLES;l_nibble++)
+ {
+ //FAPI_INF("\n Abhijit 11111 is here after schmoo type=%d and port=%d \n",iv_shmoo_type,l_p);
+ //FAPI_INF(" the right bound = %d and nominal = %d",SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_nibble][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_nibble][l_rp]);
+ SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_nibble][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_nibble][l_rp]-1;
+ SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_nibble][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_nibble][l_rp]+1;
+ SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_nibble][l_rp]=((SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_nibble][l_rp]-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_nibble][l_rp])*l_factor)/l_factor_ps;
+ SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_nibble][l_rp]= ((SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_nibble][l_rp]-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_nibble][l_rp])*l_factor)/l_factor_ps;//((1/uint32_t_freq*1000000)/128);
+ SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.total_margin[l_nibble][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_nibble][l_rp]+SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_nibble][l_rp];
+ //FAPI_INF("\n Abhijit is here after %d and port=%d \n",l_nibble,l_p);
+ //FAPI_INF("\n Abhijit is here after 2 %d \n",l_rnk);
+ }
+
+
+ }
+
+ }
+
+
+ return rc;
+ }
+
+ fapi::ReturnCode generic_shmoo::get_margin_dqs_by8(const fapi::Target & i_target)
+{
+ fapi::ReturnCode rc;
+ uint8_t l_rnk;
+ uint32_t l_attr_mss_freq_margin_u32 = 0;
+ uint32_t l_freq=0;
+ uint64_t l_cyc = 1000000000000000ULL;
+ //uint8_t l_dq=0;
+ uint8_t l_nibble=0;
+ uint8_t l_rp=0;
+ uint8_t l_p=0;
+ uint8_t i_rank=0;
+ uint64_t l_factor=0;
+ uint64_t l_factor_ps=1000000000;
+ uint8_t l_SCHMOO_NIBBLES=20;
+
+ if(iv_dmm_type==1)
+ {
+ l_SCHMOO_NIBBLES=9;
+ }
+
+ //FAPI_INF(" the factor is % llu ",l_cyc);
+
+ fapi::Target l_target_centaur;
+ rc = fapiGetParentChip(i_target, l_target_centaur); if(rc) return rc;
+ rc = FAPI_ATTR_GET(ATTR_MSS_FREQ, &l_target_centaur, l_attr_mss_freq_margin_u32); if(rc) return rc;
+ l_freq=l_attr_mss_freq_margin_u32/2;
+ l_cyc=l_cyc/l_freq;// converting to zepto to get more accurate data
+ l_factor=l_cyc/128;
+ //FAPI_INF("l_factor is % llu ",l_factor);
+
+
+
+
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ //FAPI_INF("\n Abhijit is here before %d \n",l_p);
+ for (l_rnk=0;l_rnk<iv_MAX_RANKS[l_p];++l_rnk)
+ {
+
+ rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ i_rank=valid_rank[l_rnk];
+ rc = mss_getrankpair(i_target,l_p,i_rank,&l_rp,valid_rank);if(rc) return rc;
+
+ //Nibble loop
+ //FAPI_INF("\n Abhijit is outside %d \n",l_p);
+ for(l_nibble=0;l_nibble<l_SCHMOO_NIBBLES;l_nibble++)
+ {
+ if(iv_dmm_type==0)
+ {
+ if((l_nibble%2)){
+ continue ;
+ }
+ }
+ //FAPI_INF("\n Abhijit 11111 is here after schmoo type=%d and port=%d \n",iv_shmoo_type,l_p);
+ FAPI_INF(" the port=%d rank=%d 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;
+ SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_nibble][l_rp]= ((SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_nibble][l_rp]-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_nibble][l_rp])*l_factor)/l_factor_ps;//((1/uint32_t_freq*1000000)/128);
+ SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.total_margin[l_nibble][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_nibble][l_rp]+SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_nibble][l_rp];
+ //FAPI_INF("\n Abhijit is here after %d and port=%d \n",l_nibble,l_p);
+ //FAPI_INF("\n Abhijit is here after 2 %d \n",l_rnk);
+ }
+
+
+ }
+
+ }
+
+
+ return rc;
+ }
/*------------------------------------------------------------------------------
* Function: get_min_margin
* Description : This function is used to get the minimum margin of all the schmoo margins
@@ -1105,10 +4304,13 @@ fapi::ReturnCode generic_shmoo::get_min_margin(const fapi::Target & i_target,uin
uint8_t l_rnk,l_byte,l_nibble,l_bit,i_rank;
uint16_t l_temp_right=4800;
uint16_t l_temp_left=4800;
+ //uint16_t l_temp_right_nibble=4800;
+ //uint16_t l_temp_left_nibble=4800;
uint8_t l_dq=0;
uint8_t l_rp=0;
uint8_t l_p=0;
-
+ //uint32_t min_margin_nibble_right[MAX_PORT][MAX_RANK][MAX_BYTE][MAX_NIBBLES];
+ //uint32_t min_margin_nibble_left[MAX_PORT][MAX_RANK][MAX_BYTE][MAX_NIBBLES];
@@ -1124,6 +4326,8 @@ fapi::ReturnCode generic_shmoo::get_min_margin(const fapi::Target & i_target,uin
//Nibble loop
for(l_nibble=0;l_nibble< MAX_NIBBLES;++l_nibble)
{
+ //l_temp_right_nibble=4800;
+ //l_temp_left_nibble=4800;
for(l_bit=0;l_bit< MAX_BITS;++l_bit)
{
l_dq=8*l_byte+4*l_nibble+l_bit;
@@ -1135,7 +4339,26 @@ fapi::ReturnCode generic_shmoo::get_min_margin(const fapi::Target & i_target,uin
{
l_temp_left=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_dq][l_rp];
}
+
+
+ // if(SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_dq][l_rp]<l_temp_right_nibble)
+ // {
+ // l_temp_right_nibble=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_dq][l_rp];
+ // }
+ // if(SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_dq][l_rp]<l_temp_left_nibble)
+ // {
+ // l_temp_left_nibble=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_dq][l_rp];
+ // }
+
+ // min_margin_nibble_right[l_p][i_rank][l_byte][l_nibble]=l_temp_right_nibble;
+ // min_margin_nibble_left[l_p][i_rank][l_byte][l_nibble]=l_temp_left_nibble;
+
+ //FAPI_INF("\n the minimum right margin for port=%d rank=%d byte=%d nibble=%d is %d \n",l_p,i_rank,l_byte,l_nibble,l_temp_right_nibble);
+ //FAPI_INF("\n the minimum left margin for port=%d rank=%d byte=%d nibble=%d is %d \n",l_p,i_rank,l_byte,l_nibble,l_temp_left_nibble);
+
}
+
+
}
}
}
@@ -1143,125 +4366,135 @@ fapi::ReturnCode generic_shmoo::get_min_margin(const fapi::Target & i_target,uin
// hacked for now till schmoo is running
+ if(iv_shmoo_type==8)
+ {
+ *o_right_min_margin=l_temp_left;
+ *o_left_min_margin=l_temp_right;
+ }else{
*o_right_min_margin=l_temp_right;
*o_left_min_margin=l_temp_left;
+ }
return rc;
}
- fapi::ReturnCode generic_shmoo:: schmoo_setup_mcb( const fapi::Target & i_target)
+
+ fapi::ReturnCode generic_shmoo::get_min_margin_dqs(const fapi::Target & i_target,uint32_t *o_right_min_margin,uint32_t *o_left_min_margin)
{
+ fapi::ReturnCode rc;
+ uint8_t l_rnk,l_nibble,i_rank;
+ uint16_t l_temp_right=4800;
+ uint16_t l_temp_left=4800;
+
+ uint8_t l_rp=0;
+ uint8_t l_p=0;
+ uint8_t l_attr_eff_dram_width_u8=0;
-
+
+
+
+
- //uint32_t rc_num =0;
- uint8_t l_pattern=0;
- uint8_t l_testtype=0;
- //uint8_t l_rank=0;
- fapi::ReturnCode rc;
+ uint8_t l_SCHMOO_NIBBLES=20;
+ uint8_t l_by8_dqs=0;
+
+ rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_WIDTH, &i_target, l_attr_eff_dram_width_u8); if(rc) return rc;
- uint64_t l_start =0x0000000000000000ull;
- uint64_t l_end = 0x0000000000000000ull;
+ if(iv_dmm_type==1)
+ {
+ l_SCHMOO_NIBBLES=18;
+ }
+ if(l_attr_eff_dram_width_u8 == 8){
+ l_SCHMOO_NIBBLES=10;
+ if(iv_dmm_type==1)
+ {
+ l_SCHMOO_NIBBLES=9;
+ }
+ }
+ iv_shmoo_type=4;
- mcbist_test_mem i_mcbtest = CENSHMOO; // bellows: initialize to this type
- mcbist_data_gen i_mcbpatt = ABLE_FIVE; // bellows: initialize to this data type
+ for (l_p=0;l_p<MAX_PORT;l_p++){
+ for (l_rnk=0;l_rnk<iv_MAX_RANKS[l_p];++l_rnk)
+ { rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
+ i_rank=valid_rank[l_rnk];
+ rc = mss_getrankpair(i_target,l_p,i_rank,&l_rp,valid_rank);if(rc) return rc;
+
+ for(l_nibble=0;l_nibble< l_SCHMOO_NIBBLES;++l_nibble)
+ {
+
+ l_by8_dqs=l_nibble;
+ if(iv_dmm_type==0)
+ {
+ if(l_attr_eff_dram_width_u8 == 8)
+ {
+ l_nibble=l_nibble*2;
+ }
+ }
+
+ if(SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_by8_dqs][l_rp]<l_temp_right)
+ {
+ l_temp_right=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_by8_dqs][l_rp];
+ }
+ if(SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_by8_dqs][l_rp]<l_temp_left)
+ {
+ l_temp_left=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_by8_dqs][l_rp];
+ }
+ }
+ }
+ }
+
+ // hacked for now till schmoo is running
+ if(iv_shmoo_type==8)
+ {
+ *o_right_min_margin=l_temp_left;
+ *o_left_min_margin=l_temp_right;
+ }else{
+ *o_right_min_margin=l_temp_right;
+ *o_left_min_margin=l_temp_left;
+ }
+ return rc;
+ }
+ fapi::ReturnCode generic_shmoo:: schmoo_setup_mcb( const fapi::Target & i_target)
+{
+
+struct Subtest_info l_sub_info[30];
+ uint32_t l_pattern=0;
+ uint32_t l_testtype=0;
+ //uint32_t rc_num =0;
+ mcbist_byte_mask i_mcbbytemask1;
+
+ i_mcbbytemask1 = UNMASK_ALL;
+
+ fapi::ReturnCode rc;
-
- //send shmoo mode to vary the address range
-
+
+
l_pattern=iv_pattern;
-FAPI_INF("value of pattern is %d",l_pattern);
-switch(l_pattern)
-{
-case 0 : i_mcbpatt = ABLE_FIVE;break;
-case 1 : i_mcbpatt = USR_MODE;break;
-case 2 : i_mcbpatt = ONEHOT;break;
-case 3 : i_mcbpatt = DQ0_00011111_RESTALLONE;break;
-case 4 : i_mcbpatt = DQ0_11100000_RESTALLZERO;break;
-case 5 : i_mcbpatt = ALLZERO;break;
-case 6 : i_mcbpatt = ALLONE;break;
-case 7 : i_mcbpatt = BYTE_BURST_SIGNATURE;break;
-case 8 : i_mcbpatt = BYTE_BURST_SIGNATURE_V1;break;
-case 9 : i_mcbpatt = BYTE_BURST_SIGNATURE_V2;break;
-case 10 : i_mcbpatt = BYTE_BURST_SIGNATURE_V3;break;
-case 11 : i_mcbpatt = DATA_GEN_DELTA_I;break;
-case 12 : i_mcbpatt = MCBIST_2D_CUP_PAT0;break;
-case 13 : i_mcbpatt = MPR;break;
-case 14 : i_mcbpatt = MPR03;break;
-case 15 : i_mcbpatt = MPR25;break;
-case 16 : i_mcbpatt = MPR47;break;
-case 17 : i_mcbpatt = DELTA_I1;break;
-case 18 : i_mcbpatt = MCBIST_2D_CUP_PAT1;break;
-case 19 : i_mcbpatt = MHC_55;break;
-case 20 : i_mcbpatt = MHC_DQ_SIM;break;
-case 21 : i_mcbpatt = MCBIST_2D_CUP_PAT2;break;
-case 22 : i_mcbpatt = MCBIST_2D_CUP_PAT3;break;
-case 23 : i_mcbpatt = MCBIST_2D_CUP_PAT4;break;
-case 24 : i_mcbpatt = MCBIST_2D_CUP_PAT5;break;
-case 25 : i_mcbpatt = MCBIST_2D_CUP_PAT6;break;
-case 26 : i_mcbpatt = MCBIST_2D_CUP_PAT7;break;
-case 27 : i_mcbpatt = MCBIST_2D_CUP_PAT8;break;
-case 28 : i_mcbpatt = MCBIST_2D_CUP_PAT9;break;
-case 29 : i_mcbpatt = CWLPATTERN;break;
-case 30 : i_mcbpatt = GREY1;break;
-case 31 : i_mcbpatt = DC_ONECHANGE;break;
-case 32 : i_mcbpatt = DC_ONECHANGEDIAG;break;
-case 33 : i_mcbpatt = GREY2;break;
-case 34 : i_mcbpatt = FIRST_XFER;break;
-case 35 : i_mcbpatt = MCBIST_222_XFER;break;
-case 36 : i_mcbpatt = MCBIST_333_XFER;break;
-case 37 : i_mcbpatt = MCBIST_444_XFER;break;
-case 38 : i_mcbpatt = MCBIST_555_XFER;break;
-case 39 : i_mcbpatt = MCBIST_666_XFER;break;
-case 40 : i_mcbpatt = MCBIST_777_XFER;break;
-case 41 : i_mcbpatt = MCBIST_888_XFER;break;
-case 42 : i_mcbpatt = FIRST_XFER_X4MODE;break;
-case 43 : i_mcbpatt = MCBIST_LONG;break;
-case 44 : i_mcbpatt = PSEUDORANDOM;break;
-case 45 : i_mcbpatt = CASTLE;break;
-
-default : FAPI_INF("Wrong Data Pattern,so using default pattern");
-}
l_testtype=iv_test_type;
-switch(l_testtype)
-{
-case 0 : i_mcbtest = USER_MODE;break;
-case 1 : i_mcbtest = CENSHMOO;break;
-case 2 : i_mcbtest = SUREFAIL;break;
-case 3 : i_mcbtest = MEMWRITE;break;
-case 4 : i_mcbtest = MEMREAD;break;
-case 5 : i_mcbtest = CBR_REFRESH;break;
-case 6 : i_mcbtest = MCBIST_SHORT;break;
-case 7 : i_mcbtest = SHORT_SEQ;break;
-case 8 : i_mcbtest = DELTA_I;break;
-case 9 : i_mcbtest = DELTA_I_LOOP;break;
-case 10 : i_mcbtest = SHORT_RAND;break;
-case 11 : i_mcbtest = LONG1;break;
-case 12 : i_mcbtest = BUS_TAT;break;
-case 13 : i_mcbtest = SIMPLE_FIX;break;
-case 14 : i_mcbtest = SIMPLE_RAND;break;
-case 15 : i_mcbtest = SIMPLE_RAND_2W;break;
-case 16 : i_mcbtest = SIMPLE_RAND_FIXD;break;
-case 17 : i_mcbtest = SIMPLE_RA_RD_WR;break;
-case 18 : i_mcbtest = SIMPLE_RA_RD_R;break;
-case 19 : i_mcbtest = SIMPLE_RA_FD_R;break;
-case 20 : i_mcbtest = SIMPLE_RA_FD_R_INF;break;
-case 21 : i_mcbtest = SIMPLE_SA_FD_R;break;
-case 22 : i_mcbtest = SIMPLE_RA_FD_W;break;
-case 23 : i_mcbtest = INFINITE;break;
-case 24 : i_mcbtest = WR_ONLY;break;
-case 25 : i_mcbtest = W_ONLY;break;
-case 26 : i_mcbtest = R_ONLY;break;
-case 27 : i_mcbtest = W_ONLY_RAND;break;
-case 28 : i_mcbtest = R_ONLY_RAND;break;
-case 29 : i_mcbtest = R_ONLY_MULTI;break;
-default : FAPI_INF("Wrong Test_type,so using default test_type");
-}
-rc = setup_mcbist(i_target, 0, i_mcbpatt, i_mcbtest, UNMASK_ALL, 0,iv_pattern,iv_test_type,0,0,l_start,l_end,iv_addr);if(rc) return rc;
+if(iv_shmoo_type==16){
+FAPI_INF("\n Read DQS is running \n");
+if(iv_DQS_ON==1){
+ l_testtype=3;
+ }
+ if(iv_DQS_ON==2){
+ l_testtype=4;
+ }
+ }
+ //send shmoo mode to vary the address range
+ if(iv_shmoo_type==16){
+ rc = FAPI_ATTR_SET(ATTR_MCBIST_PATTERN, &i_target,l_pattern); if(rc) return rc;//-----------i_mcbpatt------->run
+ rc = FAPI_ATTR_SET(ATTR_MCBIST_TEST_TYPE, &i_target, l_testtype); if(rc) return rc;//---------i_mcbtest------->run
+ }
+//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;
+
+
return rc;
}
diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_generic_shmoo.H b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_generic_shmoo.H
index df73008ee..009f7d5f1 100644
--- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_generic_shmoo.H
+++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_generic_shmoo.H
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: mss_generic_shmoo.H,v 1.13 2013/04/09 12:18:47 lapietra Exp $
+// $Id: mss_generic_shmoo.H,v 1.22 2013/08/08 11:08:58 sasethur Exp $
// *!***************************************************************************
// *! (C) Copyright International Business Machines Corp. 1997, 1998
// *! All Rights Reserved -- Property of IBM
@@ -31,14 +31,16 @@
// *! DESCRIPTION : Memory Subsystem Generic Shmoo -- abstraction for HB
// *! CONTEXT : To make all shmoos share a common abstraction layer
// *!
-// *! OWNER NAME : Varkey Varghese Email: varkey.kv@in.ibm.com
-// *! BACKUP NAME : Abhijit Saurabh Email: abhijit.saurabh@in.ibm.com
+// *! OWNER NAME : Abhijit Saurabh Email: abhijit.saurabh@in.ibm.com
+// *! BACKUP NAME :
// *!
// *!***************************************************************************
// CHANGE HISTORY:
//------------------------------------------------------------------------------
// Version:|Author: | Date: | Comment:
// --------|--------|--------|--------------------------------------------------
+// 1.22 |abhijit |8/08/13 |added binary schmoo functions
+// 1.20 |abhijit |7/17/13 |added functions for read dqs
// 1.11 |abhijit |1/21/13 |fixed constructor definition
// 1.9 |abhijit |06/12/12|fixed fw review comments
// 1.4 |abhijit |09/27/11|made changes according to new design
@@ -57,6 +59,9 @@ using namespace fapi;
#define SHMOO_DEBUG2 0
#include "mss_shmoo_common.H"
#include "mss_mcbist.H"
+//#include "mss_draminit_training.H"
+// #include <cen_scom_addresses.H>
+// #include "mss_funcs.H"
@@ -85,16 +90,19 @@ class generic_shmoo
shmoo_mode mcbist_mode;
uint8_t mcbist_error_map[MAX_PORT][MAX_RANK][MAX_BYTE][MAX_NIBBLES];
uint8_t schmoo_error_map[MAX_PORT][MAX_RANK][20];
+ uint8_t binary_done_map[MAX_PORT][MAX_RANK][20];
shmoo_type_t shmoo_mask;
uint8_t iv_addr;
uint8_t iv_MAX_RANKS[MAX_PORT];
uint8_t iv_MAX_BYTES;
- uint8_t iv_pattern;
- uint8_t iv_test_type;
+ uint32_t iv_pattern;
+ uint32_t iv_test_type;
uint8_t iv_dmm_type;
uint8_t iv_DQS_ON;
uint8_t iv_shmoo_type;
uint32_t iv_shmoo_param;
+ uint32_t iv_binary_diff;
+ uint32_t iv_vref_mul;
uint8_t valid_rank[MAX_RANK];
@@ -111,17 +119,39 @@ class generic_shmoo
void init_multi_array(uint32_t (&array)[MAX_DQ][MAX_RPS],uint32_t init_val); //initialize multi dim arrays to known value
fapi::ReturnCode init_multi_array_dqs(uint32_t (&array)[MAX_DQ][MAX_RPS],uint32_t init_val);
fapi::ReturnCode get_all_noms(const fapi::Target & i_target); //! Read in all the Nominal values of the relevant knobs
+ fapi::ReturnCode set_all_binary(const fapi::Target & i_target,bound_t bound);
+ fapi::ReturnCode get_all_noms_dqs(const fapi::Target & i_target); //! Read in all the Nominal values of the relevant knobs
+ fapi::ReturnCode get_all_noms_gate(const fapi::Target & i_target); //! Read in all the Nominal values of the relevant knobs
+ fapi::ReturnCode get_all_noms_data_disable(const fapi::Target & i_target);
+ fapi::ReturnCode put_all_noms_data_disable(const fapi::Target & i_target,uint8_t flag);
+ //fapi::ReturnCode put_all_zero_data_disable(const fapi::Target & i_target);
fapi::ReturnCode find_bound(const fapi::Target & i_target,bound_t); // generic Right bound
fapi::ReturnCode knob_update(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag); // Increment or decrement the knob
- fapi::ReturnCode knob_update_dqs(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t rank,uint8_t byte,uint8_t nibble,uint8_t bit,uint8_t pass);
- fapi::ReturnCode print_report(const fapi::Target & i_target); // Print Shmoo report to file or STDOUT
- fapi::ReturnCode print_shmoo_parms();
+ fapi::ReturnCode knob_update_bin(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag);
+ fapi::ReturnCode knob_update_gate(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t pass,bool &flag); // Increment or decrement the knob
+ //fapi::ReturnCode knob_update_gate(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag);
+ fapi::ReturnCode knob_update_gate_train(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t pass);
+ fapi::ReturnCode knob_update_dqs_by8(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag);
+ fapi::ReturnCode knob_update_dqs_by4(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag);
+ fapi::ReturnCode print_report(const fapi::Target & i_target); // Print Shmoo report to STDOUT
+ fapi::ReturnCode print_report_dqs(const fapi::Target & i_target);
+ fapi::ReturnCode print_report_gate(const fapi::Target & i_target);
+ //fapi::ReturnCode print_shmoo_parms();
fapi::ReturnCode get_margin(const fapi::Target & i_target);
+ fapi::ReturnCode get_margin_dqs_by8(const fapi::Target & i_target);
+ fapi::ReturnCode get_margin_dqs_by4(const fapi::Target & i_target);
fapi::ReturnCode get_min_margin(const fapi::Target & i_target,uint32_t *o_right_min_margin,uint32_t *o_left_min_margin);
+ fapi::ReturnCode get_min_margin_dqs(const fapi::Target & i_target,uint32_t *o_right_min_margin,uint32_t *o_left_min_margin);
fapi::ReturnCode do_mcbist_test(const fapi::Target & i_target);
+ fapi::ReturnCode do_mcbist_reset(const fapi::Target & i_target);
fapi::ReturnCode check_error_map(const fapi::Target & i_target,uint8_t port,uint8_t &pass);
fapi::ReturnCode sanity_check(const fapi::Target & i_target);
fapi::ReturnCode schmoo_setup_mcb( const fapi::Target & i_target);
- fapi::ReturnCode run(const fapi::Target & i_target,uint32_t *right_min_margin,uint32_t *left_min_margin,uint8_t i_pattern,uint8_t i_test_type,uint32_t i_shmoo_param);
+ fapi::ReturnCode get_error_cnt(const fapi::Target & i_target,uint8_t port,uint8_t rank,uint8_t rank_pair,uint8_t bit,bound_t bound);
+ fapi::ReturnCode knob_update_dqs_by8_isdimm(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag);
+ fapi::ReturnCode knob_update_dqs_by4_isdimm(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag);
+ fapi::ReturnCode run(const fapi::Target & i_target,uint32_t *right_min_margin,uint32_t *left_min_margin,uint32_t i_vref_mul);
+ fapi::ReturnCode shmoo_save_rest(const fapi::Target & i_target,uint64_t i_content_array[],uint8_t i_mode);
+
};
#endif
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 ffc4f3d69..395f446fe 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.37 2013/02/19 12:14:03 sasethur Exp $
+// $Id: mss_mcbist.C,v 1.41 2013/08/12 10:07:57 sasethur Exp $
// *!***************************************************************************
// *! (C) Copyright International Business Machines Corp. 1997, 1998
// *! All Rights Reserved -- Property of IBM
@@ -38,6 +38,10 @@
//------------------------------------------------------------------------------
// Version:|Author: | Date: | Comment:
// --------|--------|--------|--------------------------------------------------
+// 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
+// 1.38 |aditya |05/14/13|updated parameters for cfg_mcb_dgen
// 1.37 |aditya |02/19/13|updated testtypes
// 1.34 |aditya |02/13/13|updated testtypes
// 1.33 |aditya |02/12/13|updated testtypes
@@ -88,72 +92,123 @@ using namespace fapi;
// mcbist_test_mem i_test_type Subtest Type
//****************************************************************/
-fapi::ReturnCode cfg_mcb_test_mem(const fapi::Target & i_target_mba,mcbist_test_mem i_test_type)
+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 rc;
- FAPI_INF("Function - cfg_mcb_test_mem");
+ fapi::ReturnCode rc;
+ uint8_t l_print = 0;
+ uint32_t l_mcbtest;
+ uint8_t l_index,l_data_flag,l_random_flag,l_count,l_data_attr;
+ l_index = 0;
+ l_data_flag = 0;
+ l_random_flag = 0;
+ l_data_attr = 0;
+ 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,2,1,1,1,1,10,0,5,3,3,3,3,9,4,30,1,2,2,3,3};
+ rc = FAPI_ATTR_GET(ATTR_MCBIST_PRINTING_DISABLE, &i_target_mba,l_print); if(rc) return rc;
+ if(l_print == 0){FAPI_INF("Function Name: cfg_mcb_test_mem");
+ FAPI_INF("Start Time");}
+ rc = FAPI_ATTR_GET(ATTR_MCBIST_TEST_TYPE, &i_target_mba, l_mcbtest);
+
+
+
+
+
+
+ if(l_print == 0)FAPI_INF("Function - cfg_mcb_test_mem");
-
+ uint8_t l_done_bit = 0;
+ rc = FAPI_ATTR_SET(ATTR_MCBIST_ADDR_BANK, &i_target_mba, l_done_bit); if(rc) return rc;
if(i_test_type == CENSHMOO)
- {
- rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,W,0,SF,FIX,0,DEFAULT,FIX_ADDR,0); if(rc) return rc;
- rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,R,0,SF,FIX,1,DEFAULT,FIX_ADDR,1); if(rc) return rc;
+ {
+ if(l_print == 0)FAPI_INF("Current MCBIST TESTTYPE : CENSHMOO ");
+ rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,W,0,SF,FIX,0,DEFAULT,FIX_ADDR,0,0,1,l_sub_info); if(rc) return rc;
+ rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,R,0,SF,FIX,1,DEFAULT,FIX_ADDR,1,1,1,l_sub_info); if(rc) return rc;
}
else if(i_test_type == MEMWRITE)
{
- rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,W,0,SF,FIX,1,DEFAULT,FIX_ADDR,0); if(rc) return rc;
+ if(l_print == 0)FAPI_INF("Current MCBIST TESTTYPE : MEMWRITE ");
+ rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,W,0,SF,FIX,1,DEFAULT,FIX_ADDR,0,0,0,l_sub_info); if(rc) return rc;
}
else if(i_test_type == MEMREAD)
{
- rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,R,0,SF,FIX,1,DEFAULT,FIX_ADDR,0); if(rc) return rc;
+ if(l_print == 0)FAPI_INF("Current MCBIST TESTTYPE : MEMREAD ");
+ rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,R,0,SF,FIX,1,DEFAULT,FIX_ADDR,0,0,0,l_sub_info); if(rc) return rc;
}
-
+
else if (i_test_type == SIMPLE_FIX)
{
- rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,W, 0,SF,FIX, 0,DEFAULT,FIX_ADDR,0); if(rc) return rc;
- rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,R, 0,SF,FIX, 1,DEFAULT,FIX_ADDR,1); if(rc) return rc;
- rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,R, 0,SF,FIX, 1,DEFAULT,FIX_ADDR,2); if(rc) return rc;
- rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,OPER_RAND,0,RF,FIX, 1,DEFAULT,FIX_ADDR,3); if(rc) return rc;
+ if(l_print == 0)FAPI_INF("Current MCBIST TESTTYPE : SIMPLE_FIX ");
+ rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,W, 0,SF,FIX, 0,DEFAULT,FIX_ADDR,0,0,4,l_sub_info); if(rc) return rc;
+ rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,R, 0,SF,FIX, 1,DEFAULT,FIX_ADDR,1,1,4,l_sub_info); if(rc) return rc;
- rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR1Q_0x030106a9,RW, 0,RF,DATA_RF,0,DEFAULT,FIX_ADDR,0); if(rc) return rc;
+ l_done_bit = 1;
+ rc = FAPI_ATTR_SET(ATTR_MCBIST_ADDR_BANK, &i_target_mba, l_done_bit); if(rc) return rc;
+
+ rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,R, 0,SF,FIX, 1,DEFAULT,FIX_ADDR,2,2,4,l_sub_info); if(rc) return rc;
+ rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,OPER_RAND,0,RF,FIX, 1,DEFAULT,FIX_ADDR,3,3,4,l_sub_info); if(rc) return rc;
+
+ rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR1Q_0x030106a9,RW, 4,RF,DATA_RF,0,DEFAULT,FIX_ADDR,0,4,4,l_sub_info); if(rc) return rc;
}
- else if (i_test_type == SIMPLE_RAND)
+ else if (i_test_type == SIMPLE_RAND)
{
- rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,W, 0,SF,DATA_RF,0,DEFAULT,FIX_ADDR,0); if(rc) return rc;
- rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,R, 0,SF,DATA_RF,0,DEFAULT,FIX_ADDR,1); if(rc) return rc;
- rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,W, 0,RF,DATA_RF,0,DEFAULT,FIX_ADDR,2); if(rc) return rc;
- rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,R, 0,RF,DATA_RF,1,DEFAULT,FIX_ADDR,3); if(rc) return rc;
+ if(l_print == 0)FAPI_INF("Current MCBIST TESTTYPE : SIMPLE_RAND ");
+ rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,WR, 0,SF,DATA_RF,1,DEFAULT,FIX_ADDR,0,0,4,l_sub_info); if(rc) return rc;
+
+ l_done_bit = 1;
+ rc = FAPI_ATTR_SET(ATTR_MCBIST_ADDR_BANK, &i_target_mba, l_done_bit); if(rc) return rc;
+
+ rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,R, 1,SF,DATA_RF,0,DEFAULT,FIX_ADDR,1,1,4,l_sub_info); if(rc) return rc;
+ rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,W, 0,RF,DATA_RF,0,DEFAULT,FIX_ADDR,2,2,4,l_sub_info); if(rc) return rc;
+ rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,R, 0,RF,DATA_RF,1,DEFAULT,FIX_ADDR,3,3,4,l_sub_info); if(rc) return rc;
- rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR1Q_0x030106a9,RW, 4,RF,DATA_RF,0,DEFAULT,FIX_ADDR,0); if(rc) return rc;
+ rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR1Q_0x030106a9,RW, 4,RF,DATA_RF,0,DEFAULT,FIX_ADDR,0,4,4,l_sub_info); if(rc) return rc;
}
- else if (i_test_type == WR_ONLY)
+ else if (i_test_type == WR_ONLY)
{
- rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,W, 0,SF,DATA_RF,0,DEFAULT,FIX_ADDR,0); if(rc) return rc;
- rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,R, 0,SF,DATA_RF,1,DEFAULT,FIX_ADDR,1); if(rc) return rc;
- rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,W, 0,RF,FIX,0,DEFAULT,FIX_ADDR,2); if(rc) return rc;
- rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,OPER_RAND,0,RF,FIX,1,DEFAULT,FIX_ADDR,3); if(rc) return rc;
+ if(l_print == 0)FAPI_INF("Current MCBIST TESTTYPE : WR_ONLY ");
+ rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,W, 0,SF,DATA_RF,0,DEFAULT,FIX_ADDR,0,0,4,l_sub_info); if(rc) return rc;
+ rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,R, 0,SF,DATA_RF,1,DEFAULT,FIX_ADDR,1,1,4,l_sub_info); if(rc) return rc;
- rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR1Q_0x030106a9,RW, 4,RF,DATA_RF,0,DEFAULT,FIX_ADDR,0); if(rc) return rc;
- }
+ l_done_bit = 1;
+ rc = FAPI_ATTR_SET(ATTR_MCBIST_ADDR_BANK, &i_target_mba, l_done_bit); if(rc) return rc;
+
+
+ rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,W, 0,RF,FIX,0,DEFAULT,FIX_ADDR,2,2,4,l_sub_info); if(rc) return rc;
+ rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,OPER_RAND,0,RF,FIX,1,DEFAULT,FIX_ADDR,3,3,4,l_sub_info); if(rc) return rc;
+
+ rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR1Q_0x030106a9,RW, 4,RF,DATA_RF,0,DEFAULT,FIX_ADDR,0,4,4,l_sub_info); if(rc) return rc;
+ }
else if (i_test_type == W_ONLY)
{
- rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,W, 0,SF,DATA_RF,1,DEFAULT,FIX_ADDR,0); if(rc) return rc;
- rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,R, 0,SF,FIX, 1,DEFAULT,FIX_ADDR,1); if(rc) return rc;
- rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,W, 0,RF,FIX, 0,DEFAULT,FIX_ADDR,2); if(rc) return rc;
- rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,OPER_RAND,0,RF,FIX, 1,DEFAULT,FIX_ADDR,3); if(rc) return rc;
+ if(l_print == 0)FAPI_INF("Current MCBIST TESTTYPE : W_ONLY ");
+ rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,W, 0,SF,DATA_RF,1,DEFAULT,FIX_ADDR,0,0,4,l_sub_info); if(rc) return rc;
+
+ l_done_bit = 1;
+ rc = FAPI_ATTR_SET(ATTR_MCBIST_ADDR_BANK, &i_target_mba, l_done_bit); if(rc) return rc;
+
+
+ rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,R, 0,SF,FIX, 1,DEFAULT,FIX_ADDR,1,1,4,l_sub_info); if(rc) return rc;
+ rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,W, 0,RF,FIX, 0,DEFAULT,FIX_ADDR,2,2,4,l_sub_info); if(rc) return rc;
+ rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,OPER_RAND,0,RF,FIX, 1,DEFAULT,FIX_ADDR,3,3,4,l_sub_info); if(rc) return rc;
- rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR1Q_0x030106a9,RW, 4,RF,DATA_RF,0,DEFAULT,FIX_ADDR,0); if(rc) return rc;
+ rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR1Q_0x030106a9,RW, 4,RF,DATA_RF,0,DEFAULT,FIX_ADDR,0,4,4,l_sub_info); if(rc) return rc;
}
else if (i_test_type == R_ONLY)
{
- rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,R, 0,SF,DATA_RF,1,DEFAULT,FIX_ADDR,0); if(rc) return rc;
- rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,W, 0,RF,FIX, 0,DEFAULT,FIX_ADDR,2); if(rc) return rc;
- rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,OPER_RAND,0,RF,FIX, 1,DEFAULT,FIX_ADDR,3); if(rc) return rc;
+ if(l_print == 0)FAPI_INF("Current MCBIST TESTTYPE : R_ONLY ");
+ rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,R, 0,SF,DATA_RF,1,DEFAULT,FIX_ADDR,0,0,4,l_sub_info); if(rc) return rc;
- rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR1Q_0x030106a9,RW, 4,RF,DATA_RF,0,DEFAULT,FIX_ADDR,0); if(rc) return rc;
+ l_done_bit = 1;
+ rc = FAPI_ATTR_SET(ATTR_MCBIST_ADDR_BANK, &i_target_mba, l_done_bit); if(rc) return rc;
+
+
+ rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,GOTO,0,SF,FIX,0,DEFAULT,FIX_ADDR,1,1,4,l_sub_info); if(rc) return rc;
+ rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,W, 0,RF,FIX, 0,DEFAULT,FIX_ADDR,2,2,4,l_sub_info); if(rc) return rc;
+ rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,OPER_RAND,0,RF,FIX, 1,DEFAULT,FIX_ADDR,3,3,4,l_sub_info); if(rc) return rc;
+
+ rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR1Q_0x030106a9,RW, 4,RF,DATA_RF,0,DEFAULT,FIX_ADDR,0,4,4,l_sub_info); if(rc) return rc;
}
else
@@ -164,7 +219,44 @@ fapi::ReturnCode cfg_mcb_test_mem(const fapi::Target & i_target_mba,mcbist_test
return rc;
}
+ if(l_print == 0){FAPI_INF("Function Name: cfg_mcb_test_mem");
+ FAPI_INF("Stop Time");}
+
+
+ l_count = test_array_count[l_mcbtest];
+ for(l_index = 0;l_index < l_count;l_index++)
+ {
+ if(l_sub_info[l_index].l_fixed_data_enable == 1)
+ {
+ l_data_flag = 1;
+ }
+ if(l_sub_info[l_index].l_random_data_enable == 1)
+ {
+ l_random_flag = 1;
+ }
+
+ }
+ if((l_data_flag == 0) && (l_random_flag == 1))
+ {
+ l_data_attr = 1;
+ }
+ else if((l_data_flag == 1) && (l_random_flag == 0))
+ {
+ l_data_attr = 2;
+ }
+ else if((l_data_flag == 1) && (l_random_flag == 1))
+ {
+ l_data_attr = 3;
+ }
+ else
+ {
+ l_data_attr = 3;
+ }
+ rc = FAPI_ATTR_SET(ATTR_MCBIST_DATA_ENABLE, &i_target_mba,l_data_attr); if(rc) return rc;
+
return rc;
+
+
}
@@ -179,8 +271,15 @@ 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)
+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)
{
+ uint8_t l_print = 0;
+
+
+ uint8_t l_data_attr,l_random_flag,l_data_flag;
+ l_data_flag =1; l_random_flag = 1;
+ l_data_attr = 3;
+
ecmdDataBufferBase l_data_buffer_64(64);
ecmdDataBufferBase l_var_data_buffer_64(64);
ecmdDataBufferBase l_var1_data_buffer_64(64);
@@ -196,381 +295,427 @@ fapi::ReturnCode cfg_mcb_dgen(const fapi::Target & i_target_mba,mcbist_data_gen
uint8_t l_rotnum = 0;
uint32_t l_mba01_mcb_pseudo_random[MAX_BYTE] = { MBA01_MCBIST_MCBFD0Q_0x030106be,MBA01_MCBIST_MCBFD1Q_0x030106bf,MBA01_MCBIST_MCBFD2Q_0x030106c0,MBA01_MCBIST_MCBFD3Q_0x030106c1,MBA01_MCBIST_MCBFD4Q_0x030106c2, MBA01_MCBIST_MCBFD5Q_0x030106c3,MBA01_MCBIST_MCBFD6Q_0x030106c4,MBA01_MCBIST_MCBFD7Q_0x030106c5,MBA01_MCBIST_MCBFDQ_0x030106c6,MBA01_MCBIST_MCBFDSPQ_0x030106c7};
uint32_t l_mba01_mcb_random[MAX_BYTE] = {MBA01_MCBIST_MCBRDS0Q_0x030106b2,MBA01_MCBIST_MCBRDS1Q_0x030106b3,MBA01_MCBIST_MCBRDS2Q_0x030106b4,MBA01_MCBIST_MCBRDS3Q_0x030106b5,MBA01_MCBIST_MCBRDS4Q_0x030106b6,MBA01_MCBIST_MCBRDS5Q_0x030106b7,MBA01_MCBIST_MCBRDS6Q_0x030106b8,MBA01_MCBIST_MCBRDS7Q_0x030106b9,MBA01_MCBIST_MCBRDS8Q_0x030106ba,0x030106bb};
- uint8_t l_index,l_index1 = 0;
+
+ uint32_t l_mbs01_mcb_random[MAX_BYTE] = {0x02011675,0x02011676,0x02011677,0x02011678,0x02011679,0x0201167a,0x0201167b,0x0201167c,0x0201167d,0x0201167e};
+ uint32_t l_mbs23_mcb_random[MAX_BYTE] = {0x02011775,0x02011776,0x02011777,0x02011778,0x02011779,0x0201177a,0x0201177b,0x0201177c,0x0201177d,0x0201177e};
+
+
+ uint8_t l_index,l_index1 = 0;
uint32_t l_rand_32 = 0;
uint32_t l_rand_8 = 0;
fapi::ReturnCode rc;
uint32_t rc_num = 0;
- FAPI_INF(" Data mode is %d ",i_datamode);
+ if(l_print == 0){FAPI_INF("Function Name: cfg_mcb_dgen");
+
+ FAPI_INF(" Data mode is %d ",i_datamode);}
uint8_t l_mbaPosition =0;
- FAPI_INF("Function cfg_mcb_dgen");
+ if(l_print == 0)FAPI_INF("Function cfg_mcb_dgen");
//Read MBA position attribute 0 - MBA01 1 - MBA23
rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, &i_target_mba, l_mbaPosition);
if(rc)
{
FAPI_ERR("Error getting MBA position"); return rc;
}
-
+ rc = FAPI_ATTR_GET(ATTR_MCBIST_PRINTING_DISABLE, &i_target_mba,l_print); if(rc) return rc;
/*if ((l_mbaPosition != 0)||(l_mbaPosition != 1))
{
return rc;
} */
-
-
-
- if(i_datamode == MCBIST_2D_CUP_PAT5)
- {
- l_var = 0xFFFF0000FFFF0000ull;
- l_var1 =0x0000FFFF0000FFFFull;
- l_spare = 0xFF00FF00FF00FF00ull;
-
- rc_num = l_var_data_buffer_64.setDoubleWord(0,l_var);if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
- rc_num = l_var1_data_buffer_64.setDoubleWord(0,l_var1); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
- rc_num = l_spare_data_buffer_64.setDoubleWord(0,l_spare); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
-
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD0Q_0x030106be, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD1Q_0x030106bf, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD2Q_0x030106c0, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD3Q_0x030106c1, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD4Q_0x030106c2, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD5Q_0x030106c3, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD6Q_0x030106c4, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD7Q_0x030106c5, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFDQ_0x030106c6 , l_spare_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFDSPQ_0x030106c7 , l_spare_data_buffer_64); if(rc) return rc;
-
-
+ rc = FAPI_ATTR_GET(ATTR_MCBIST_DATA_ENABLE, &i_target_mba,l_data_attr); if(rc) return rc;
-
-
-
-
+ if(l_data_attr == 1)
+ {
+ l_data_flag =0; l_random_flag = 1;
}
-
-
-
- else if(i_datamode == MCBIST_2D_CUP_PAT8)
- {
- l_var = 0xFFFFFFFFFFFFFFFFull;
- l_var1 =0x0000000000000000ull;
- l_spare = 0xFFFF0000FFFF0000ull;
-rc_num = l_var_data_buffer_64.setDoubleWord(0,l_var); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
- rc_num = l_var1_data_buffer_64.setDoubleWord(0,l_var1); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
- rc_num = l_spare_data_buffer_64.setDoubleWord(0,l_spare); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD0Q_0x030106be, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD1Q_0x030106bf, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD2Q_0x030106c0, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD3Q_0x030106c1, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD4Q_0x030106c2, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD5Q_0x030106c3, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD6Q_0x030106c4, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD7Q_0x030106c5, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFDQ_0x030106c6 , l_spare_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFDSPQ_0x030106c7 , l_spare_data_buffer_64); if(rc) return rc;
-
-
- }
- else if(i_datamode == ABLE_FIVE)
- {
-
- // l_var = 0x4B4B4B4B4B4B4B4Bull;
- //l_var1 = 0x9696969696969696ull;
- l_var = 0xA5A5A5A5A5A5A5A5ull;
- l_var1 =0x5A5A5A5A5A5A5A5Aull;
- l_spare = 0xA55AA55AA55AA55Aull;
-
- rc_num = l_spare_data_buffer_64.setDoubleWord(0,l_spare); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
- rc_num = l_var_data_buffer_64.setDoubleWord(0,l_var); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
- rc_num = l_var1_data_buffer_64.setDoubleWord(0,l_var1); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
-
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD0Q_0x030106be, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD1Q_0x030106bf, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD2Q_0x030106c0, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD3Q_0x030106c1, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD4Q_0x030106c2, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD5Q_0x030106c3, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD6Q_0x030106c4, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD7Q_0x030106c5, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFDQ_0x030106c6 , l_spare_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFDSPQ_0x030106c7 , l_spare_data_buffer_64); if(rc) return rc;
-
- }
-
- else if((i_datamode == DATA_GEN_DELTA_I) || (i_datamode == MCBIST_2D_CUP_PAT0))
- {
-
-
- l_var = 0xFFFFFFFFFFFFFFFFull;
- l_var1 =0x0000000000000000ull;
- l_spare = 0xFF00FF00FF00FF00ull;
- rc_num = l_spare_data_buffer_64.setDoubleWord(0,l_spare); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
- rc_num = l_var_data_buffer_64.setDoubleWord(0,l_var); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
- rc_num = l_var1_data_buffer_64.setDoubleWord(0,l_var1); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
-
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD0Q_0x030106be, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD1Q_0x030106bf, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD2Q_0x030106c0, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD3Q_0x030106c1, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD4Q_0x030106c2, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD5Q_0x030106c3, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD6Q_0x030106c4, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD7Q_0x030106c5, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFDQ_0x030106c6 , l_spare_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFDSPQ_0x030106c7 , l_spare_data_buffer_64); if(rc) return rc;
-
- }
-
- else if(i_datamode == PSEUDORANDOM)
- {
- // srand(2);
- FAPI_INF("Need to check the value of RAND_MAX for this compiler -- assuming 32bit of data is returned");
- for (l_index = 0; l_index< (MAX_BYTE) ; l_index++)
- {
- //l_rand_32 = rand();
- l_rand_32 = 0xFFFFFFFF;//Hard Coded Temporary Fix till random function is fixed
- rc_num = rc_num| l_data_buffer_32.insertFromRight(l_rand_32,0,32);
- rc_num = rc_num| l_data_buffer_64.insert(l_data_buffer_32,0,32,0);
- //l_rand_32 = rand();
- l_rand_32 = 0xFFFFFFFF;
- rc_num = rc_num| l_data_buffer_32.insertFromRight(l_rand_32,0,32);
- rc_num = rc_num| l_data_buffer_64.insert(l_data_buffer_32,32,32,0);
- if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
- rc = fapiPutScom(i_target_mba, l_mba01_mcb_pseudo_random[l_index] , l_data_buffer_64); if(rc) return rc;
- }
- }
- else
- {
- FAPI_ERR("Data generation configuration mcbist_data_gen enum : %d does not exist for centaur printPosData(i_target_mba)",(int)i_datamode);
-
- FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR);
- return rc;
- }
-
- fapi::Target i_target_centaur ;
- rc = fapiGetParentChip(i_target_mba, i_target_centaur);
- if (rc)
- {
- FAPI_INF("Error in getting parent chip!"); return rc;
- }
-
- if(i_datamode == MCBIST_2D_CUP_PAT5)
- {
- l_var = 0xFFFF0000FFFF0000ull;
- l_var1 =0x0000FFFF0000FFFFull;
- l_spare = 0xFF00FF00FF00FF00ull;
-
- rc_num = l_var_data_buffer_64.setDoubleWord(0,l_var); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
- rc_num = l_var1_data_buffer_64.setDoubleWord(0,l_var1); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
- rc_num = l_spare_data_buffer_64.setDoubleWord(0,l_spare);if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
-
-
- if (l_mbaPosition == 0)
+ else if(l_data_attr == 2)
{
- //Writing MBS 01 pattern registers for comparison mode
-
-
-
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD0Q_0x02011681, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD1Q_0x02011682, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD2Q_0x02011683, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD3Q_0x02011684, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD4Q_0x02011685, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD5Q_0x02011686, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD6Q_0x02011687, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD7Q_0x02011688, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFDQ_0x02011689, l_spare_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFDSPQ_0x0201168A,l_spare_data_buffer_64); if(rc) return rc;
-
+ l_data_flag =1; l_random_flag = 0;
}
- else if (l_mbaPosition == 1)
+ else if(l_data_attr == 3)
{
- //Writing MBS 23 pattern registers for comparison mode
-
-
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD0Q_0x02011781, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD1Q_0x02011782, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD2Q_0x02011783, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD3Q_0x02011784, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD4Q_0x02011785, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD5Q_0x02011786, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD6Q_0x02011787, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD7Q_0x02011788, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFDQ_0x02011789, l_spare_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFDSPQ_0x0201178A,l_spare_data_buffer_64); if(rc) return rc;
-
+ l_data_flag =1; l_random_flag = 1;
}
- }
- else if(i_datamode == MCBIST_2D_CUP_PAT8)
- {
- l_var = 0xFFFFFFFFFFFFFFFFull;
- l_var1 =0x0000000000000000ull;
- l_spare = 0xFFFF0000FFFF0000ull;
-
- rc_num = l_var_data_buffer_64.setDoubleWord(0,l_var); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
- rc_num = l_var1_data_buffer_64.setDoubleWord(0,l_var1); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
- rc_num = l_spare_data_buffer_64.setDoubleWord(0,l_spare);if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
-
- if (l_mbaPosition == 0)
+ else
{
- //Writing MBS 01 pattern registers for comparison mod
-
-
+ l_data_flag =1; l_random_flag = 1;
+ }
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD0Q_0x02011681, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD1Q_0x02011682, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD2Q_0x02011683, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD3Q_0x02011684, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD4Q_0x02011685, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD5Q_0x02011686, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD6Q_0x02011687, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD7Q_0x02011688, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFDQ_0x02011689, l_spare_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFDSPQ_0x0201168A,l_spare_data_buffer_64); if(rc) return rc;
+ if(l_data_flag == 1)
+ {
+ if(i_datamode == MCBIST_2D_CUP_PAT5)
+ {
+ l_var = 0xFFFF0000FFFF0000ull;
+ l_var1 =0x0000FFFF0000FFFFull;
+ l_spare = 0xFF00FF00FF00FF00ull;
+
+ rc_num = l_var_data_buffer_64.setDoubleWord(0,l_var);if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
+ rc_num = l_var1_data_buffer_64.setDoubleWord(0,l_var1); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
+ rc_num = l_spare_data_buffer_64.setDoubleWord(0,l_spare); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
+
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD0Q_0x030106be, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD1Q_0x030106bf, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD2Q_0x030106c0, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD3Q_0x030106c1, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD4Q_0x030106c2, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD5Q_0x030106c3, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD6Q_0x030106c4, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD7Q_0x030106c5, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFDQ_0x030106c6 , l_spare_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFDSPQ_0x030106c7 , l_spare_data_buffer_64); if(rc) return rc;
- }
- else if (l_mbaPosition == 1)
- {
- //Writing MBS 23 pattern registers for comparison mod
-
+ }
+
+
+
+ else if(i_datamode == MCBIST_2D_CUP_PAT8)
+ {
+ l_var = 0xFFFFFFFFFFFFFFFFull;
+ l_var1 =0x0000000000000000ull;
+ l_spare = 0xFFFF0000FFFF0000ull;
+ rc_num = l_var_data_buffer_64.setDoubleWord(0,l_var); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
+ rc_num = l_var1_data_buffer_64.setDoubleWord(0,l_var1); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
+ rc_num = l_spare_data_buffer_64.setDoubleWord(0,l_spare); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD0Q_0x030106be, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD1Q_0x030106bf, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD2Q_0x030106c0, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD3Q_0x030106c1, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD4Q_0x030106c2, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD5Q_0x030106c3, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD6Q_0x030106c4, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD7Q_0x030106c5, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFDQ_0x030106c6 , l_spare_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFDSPQ_0x030106c7 , l_spare_data_buffer_64); if(rc) return rc;
+
+
+ }
+ else if(i_datamode == ABLE_FIVE)
+ {
+
+ // l_var = 0x4B4B4B4B4B4B4B4Bull;
+ //l_var1 = 0x9696969696969696ull;
+ l_var = 0xA5A5A5A5A5A5A5A5ull;
+ l_var1 =0x5A5A5A5A5A5A5A5Aull;
+ l_spare = 0xA55AA55AA55AA55Aull;
+
+ rc_num = l_spare_data_buffer_64.setDoubleWord(0,l_spare); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
+ rc_num = l_var_data_buffer_64.setDoubleWord(0,l_var); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
+ rc_num = l_var1_data_buffer_64.setDoubleWord(0,l_var1); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
+
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD0Q_0x030106be, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD1Q_0x030106bf, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD2Q_0x030106c0, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD3Q_0x030106c1, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD4Q_0x030106c2, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD5Q_0x030106c3, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD6Q_0x030106c4, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD7Q_0x030106c5, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFDQ_0x030106c6 , l_spare_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFDSPQ_0x030106c7 , l_spare_data_buffer_64); if(rc) return rc;
+ }
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD0Q_0x02011781, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD1Q_0x02011782, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD2Q_0x02011783, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD3Q_0x02011784, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD4Q_0x02011785, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD5Q_0x02011786, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD6Q_0x02011787, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD7Q_0x02011788, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFDQ_0x02011789, l_spare_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFDSPQ_0x0201178A,l_spare_data_buffer_64); if(rc) return rc;
-
+ else if((i_datamode == DATA_GEN_DELTA_I) || (i_datamode == MCBIST_2D_CUP_PAT0))
+ {
+
+
+ l_var = 0xFFFFFFFFFFFFFFFFull;
+ l_var1 =0x0000000000000000ull;
+ l_spare = 0xFF00FF00FF00FF00ull;
+ rc_num = l_spare_data_buffer_64.setDoubleWord(0,l_spare); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
+ rc_num = l_var_data_buffer_64.setDoubleWord(0,l_var); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
+ rc_num = l_var1_data_buffer_64.setDoubleWord(0,l_var1); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
+
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD0Q_0x030106be, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD1Q_0x030106bf, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD2Q_0x030106c0, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD3Q_0x030106c1, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD4Q_0x030106c2, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD5Q_0x030106c3, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD6Q_0x030106c4, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD7Q_0x030106c5, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFDQ_0x030106c6 , l_spare_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFDSPQ_0x030106c7 , l_spare_data_buffer_64); if(rc) return rc;
+
+ }
-
- }
- }
- else if(i_datamode == ABLE_FIVE)
- {
- l_var = 0xA5A5A5A5A5A5A5A5ull;
- l_var1 =0x5A5A5A5A5A5A5A5Aull;
- l_spare = 0xA55AA55AA55AA55Aull;
+ else if(i_datamode == PSEUDORANDOM)
+ {
+ l_rand_32 = 0xFFFFFFFF;//Hard Coded Temporary Fix till random function is fixed
+ // srand(2);
+ if(i_seed_choice == 1)
+ {
+ if(i_seed == 0)
+ {
+ i_seed = 0xFFFFFFFF;
+ }
+ l_rand_32 = i_seed;
+ }
+
+
+ for (l_index = 0; l_index< (MAX_BYTE) ; l_index++)
+ {
+ //l_rand_32 = rand();
+
+ rc_num = rc_num| l_data_buffer_32.insertFromRight(l_rand_32,0,32);
+ rc_num = rc_num| l_data_buffer_64.insert(l_data_buffer_32,0,32,0);
+ //l_rand_32 = rand();
+
+ rc_num = rc_num| l_data_buffer_32.insertFromRight(l_rand_32,0,32);
+ rc_num = rc_num| l_data_buffer_64.insert(l_data_buffer_32,32,32,0);
+ if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
+ rc = fapiPutScom(i_target_mba, l_mba01_mcb_pseudo_random[l_index] , l_data_buffer_64); if(rc) return rc;
+ }
+ }
+ else
+ {
+ FAPI_ERR("Data generation configuration mcbist_data_gen enum : %d does not exist for centaur printPosData(i_target_mba)",(int)i_datamode);
+
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR);
+ return rc;
+ }
- rc_num = l_var_data_buffer_64.setDoubleWord(0,l_var); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
- rc_num = l_var1_data_buffer_64.setDoubleWord(0,l_var1); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
- rc_num = l_spare_data_buffer_64.setDoubleWord(0,l_spare);if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
+ fapi::Target i_target_centaur ;
+ rc = fapiGetParentChip(i_target_mba, i_target_centaur);
+ if (rc)
+ {
+ if(l_print == 0)FAPI_INF("Error in getting parent chip!"); return rc;
+ }
+
+ if(i_datamode == MCBIST_2D_CUP_PAT5)
+ {
+ l_var = 0xFFFF0000FFFF0000ull;
+ l_var1 =0x0000FFFF0000FFFFull;
+ l_spare = 0xFF00FF00FF00FF00ull;
+
+ rc_num = l_var_data_buffer_64.setDoubleWord(0,l_var); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
+ rc_num = l_var1_data_buffer_64.setDoubleWord(0,l_var1); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
+ rc_num = l_spare_data_buffer_64.setDoubleWord(0,l_spare);if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
+
+
+ if (l_mbaPosition == 0)
+ {
+ //Writing MBS 01 pattern registers for comparison mode
+
+
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD0Q_0x02011681, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD1Q_0x02011682, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD2Q_0x02011683, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD3Q_0x02011684, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD4Q_0x02011685, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD5Q_0x02011686, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD6Q_0x02011687, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD7Q_0x02011688, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFDQ_0x02011689, l_spare_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFDSPQ_0x0201168A,l_spare_data_buffer_64); if(rc) return rc;
+
+ }
+ else if (l_mbaPosition == 1)
+ {
+ //Writing MBS 23 pattern registers for comparison mode
+
+
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD0Q_0x02011781, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD1Q_0x02011782, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD2Q_0x02011783, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD3Q_0x02011784, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD4Q_0x02011785, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD5Q_0x02011786, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD6Q_0x02011787, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD7Q_0x02011788, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFDQ_0x02011789, l_spare_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFDSPQ_0x0201178A,l_spare_data_buffer_64); if(rc) return rc;
+
+ }
+ }
+ else if(i_datamode == MCBIST_2D_CUP_PAT8)
+ {
+ l_var = 0xFFFFFFFFFFFFFFFFull;
+ l_var1 =0x0000000000000000ull;
+ l_spare = 0xFFFF0000FFFF0000ull;
- if (l_mbaPosition == 0)
- {
- //Writing MBS 01 pattern registers for comparison mod
-
-
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD0Q_0x02011681, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD1Q_0x02011682, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD2Q_0x02011683, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD3Q_0x02011684, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD4Q_0x02011685, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD5Q_0x02011686, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD6Q_0x02011687, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD7Q_0x02011688, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFDQ_0x02011689, l_spare_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFDSPQ_0x0201168A,l_spare_data_buffer_64); if(rc) return rc;
- }
- else if (l_mbaPosition == 1)
- {
- //Writing MBS 23 pattern registers for comparison mod
-
-
-
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD0Q_0x02011781, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD1Q_0x02011782, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD2Q_0x02011783, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD3Q_0x02011784, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD4Q_0x02011785, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD5Q_0x02011786, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD6Q_0x02011787, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD7Q_0x02011788, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFDQ_0x02011789, l_spare_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFDSPQ_0x0201178A,l_spare_data_buffer_64); if(rc) return rc;
-
- }
- }
- else if((i_datamode == DATA_GEN_DELTA_I) || (i_datamode == MCBIST_2D_CUP_PAT0))
- {
-
- l_var = 0xFFFFFFFFFFFFFFFFull;
- l_var1 =0x0000000000000000ull;
- l_spare = 0xFF00FF00FF00FF00ull;
-
- rc_num = l_var_data_buffer_64.setDoubleWord(0,l_var); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
- rc_num = l_var1_data_buffer_64.setDoubleWord(0,l_var1); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
- rc_num = l_spare_data_buffer_64.setDoubleWord(0,l_spare);if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
-
+ rc_num = l_var_data_buffer_64.setDoubleWord(0,l_var); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
+ rc_num = l_var1_data_buffer_64.setDoubleWord(0,l_var1); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
+ rc_num = l_spare_data_buffer_64.setDoubleWord(0,l_spare);if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
if (l_mbaPosition == 0)
{
- //Writing MBS 01 pattern registers for comparison mod
-
-
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD0Q_0x02011681, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD1Q_0x02011682, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD2Q_0x02011683, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD3Q_0x02011684, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD4Q_0x02011685, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD5Q_0x02011686, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD6Q_0x02011687, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD7Q_0x02011688, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFDQ_0x02011689, l_spare_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFDSPQ_0x0201168A,l_spare_data_buffer_64); if(rc) return rc;
-
-
-
- }
- else if (l_mbaPosition == 1)
- {
- //Writing MBS 23 pattern registers for comparison mod
-
-
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD0Q_0x02011781, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD1Q_0x02011782, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD2Q_0x02011783, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD3Q_0x02011784, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD4Q_0x02011785, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD5Q_0x02011786, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD6Q_0x02011787, l_var_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD7Q_0x02011788, l_var1_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFDQ_0x02011789, l_spare_data_buffer_64); if(rc) return rc;
- rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFDSPQ_0x0201178A,l_spare_data_buffer_64); if(rc) return rc;
-
-
- }
- }
-
-
- else
- {
- FAPI_ERR("Data generation configuration mcbist_data_gen enum : %d does not exist for centaur printPosData(i_target_mba)",(int)i_datamode);
-
- FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR);
- return rc;
- }
- for(l_index = 0; l_index<MAX_BYTE ;l_index ++)
- {
-
- for(l_index1 = 0; l_index1 < 8; l_index1++)
- {
- //l_rand_8 = rand();
- l_rand_8 = 0xFF;
- rc_num = l_data_buffer_64.insert(l_rand_8,8*l_index1,8,24);if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;} // Source start in sn is given as 24 -- need to ask
- }
- rc = fapiPutScom(i_target_mba, l_mba01_mcb_random[l_index] , l_data_buffer_64); if(rc) return rc;
- }
+ //Writing MBS 01 pattern registers for comparison mod
+
+
+
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD0Q_0x02011681, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD1Q_0x02011682, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD2Q_0x02011683, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD3Q_0x02011684, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD4Q_0x02011685, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD5Q_0x02011686, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD6Q_0x02011687, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD7Q_0x02011688, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFDQ_0x02011689, l_spare_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFDSPQ_0x0201168A,l_spare_data_buffer_64); if(rc) return rc;
+
+ }
+ else if (l_mbaPosition == 1)
+ {
+ //Writing MBS 23 pattern registers for comparison mod
+
+
+
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD0Q_0x02011781, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD1Q_0x02011782, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD2Q_0x02011783, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD3Q_0x02011784, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD4Q_0x02011785, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD5Q_0x02011786, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD6Q_0x02011787, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD7Q_0x02011788, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFDQ_0x02011789, l_spare_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFDSPQ_0x0201178A,l_spare_data_buffer_64); if(rc) return rc;
+
+
+ }
+ }
+ else if(i_datamode == ABLE_FIVE)
+ {
+ l_var = 0xA5A5A5A5A5A5A5A5ull;
+ l_var1 =0x5A5A5A5A5A5A5A5Aull;
+ l_spare = 0xA55AA55AA55AA55Aull;
+
+ rc_num = l_var_data_buffer_64.setDoubleWord(0,l_var); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
+ rc_num = l_var1_data_buffer_64.setDoubleWord(0,l_var1); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
+ rc_num = l_spare_data_buffer_64.setDoubleWord(0,l_spare);if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
+
+
+ if (l_mbaPosition == 0)
+ {
+ //Writing MBS 01 pattern registers for comparison mod
+
+
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD0Q_0x02011681, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD1Q_0x02011682, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD2Q_0x02011683, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD3Q_0x02011684, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD4Q_0x02011685, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD5Q_0x02011686, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD6Q_0x02011687, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD7Q_0x02011688, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFDQ_0x02011689, l_spare_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFDSPQ_0x0201168A,l_spare_data_buffer_64); if(rc) return rc;
+ }
+ else if (l_mbaPosition == 1)
+ {
+ //Writing MBS 23 pattern registers for comparison mod
+
+
+
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD0Q_0x02011781, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD1Q_0x02011782, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD2Q_0x02011783, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD3Q_0x02011784, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD4Q_0x02011785, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD5Q_0x02011786, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD6Q_0x02011787, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD7Q_0x02011788, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFDQ_0x02011789, l_spare_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFDSPQ_0x0201178A,l_spare_data_buffer_64); if(rc) return rc;
+
+ }
+ }
+ else if((i_datamode == DATA_GEN_DELTA_I) || (i_datamode == MCBIST_2D_CUP_PAT0))
+ {
+
+ l_var = 0xFFFFFFFFFFFFFFFFull;
+ l_var1 =0x0000000000000000ull;
+ l_spare = 0xFF00FF00FF00FF00ull;
+
+ rc_num = l_var_data_buffer_64.setDoubleWord(0,l_var); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
+ rc_num = l_var1_data_buffer_64.setDoubleWord(0,l_var1); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
+ rc_num = l_spare_data_buffer_64.setDoubleWord(0,l_spare);if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
+
+
+ if (l_mbaPosition == 0)
+ {
+ //Writing MBS 01 pattern registers for comparison mod
+
+
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD0Q_0x02011681, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD1Q_0x02011682, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD2Q_0x02011683, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD3Q_0x02011684, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD4Q_0x02011685, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD5Q_0x02011686, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD6Q_0x02011687, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD7Q_0x02011688, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFDQ_0x02011689, l_spare_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFDSPQ_0x0201168A,l_spare_data_buffer_64); if(rc) return rc;
+
+
+
+ }
+ else if (l_mbaPosition == 1)
+ {
+ //Writing MBS 23 pattern registers for comparison mod
+
+
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD0Q_0x02011781, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD1Q_0x02011782, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD2Q_0x02011783, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD3Q_0x02011784, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD4Q_0x02011785, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD5Q_0x02011786, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD6Q_0x02011787, l_var_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD7Q_0x02011788, l_var1_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFDQ_0x02011789, l_spare_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFDSPQ_0x0201178A,l_spare_data_buffer_64); if(rc) return rc;
+
+
+ }
+ }
+
+
+ else
+ {
+ FAPI_ERR("Data generation configuration mcbist_data_gen enum : %d does not exist for centaur printPosData(i_target_mba)",(int)i_datamode);
+
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR);
+ return rc;
+ }
+ }
+
+ if(l_random_flag == 1)
+ {
+ for(l_index = 0; l_index<MAX_BYTE ;l_index ++)
+ {
+
+ for(l_index1 = 0; l_index1 < 8; l_index1++)
+ {
+ //l_rand_8 = rand();
+ l_rand_8 = 0xFF;
+ rc_num = l_data_buffer_64.insert(l_rand_8,8*l_index1,8,24);if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;} // Source start in sn is given as 24 -- need to ask
+ }
+ rc = fapiPutScom(i_target_mba, l_mba01_mcb_random[l_index] , l_data_buffer_64); if(rc) return rc;
+
+ if(l_mbaPosition == 0)
+ {
+
+ rc = fapiPutScom(i_target_mba, l_mbs01_mcb_random[l_index] , l_data_buffer_64); if(rc) return rc;//added
+
+ }
+ else
+ {
+
+ rc = fapiPutScom(i_target_mba, l_mbs23_mcb_random[l_index] , l_data_buffer_64); if(rc) return rc;//added
+
+ }
+ }
+ }
// rc = print_pattern(i_target_mba);if(rc)return rc;
@@ -580,7 +725,7 @@ rc_num = l_var_data_buffer_64.setDoubleWord(0,l_var); if (rc_num){ FAPI_ERR( "c
if(i_mcbrotate == 0)
{
- FAPI_INF("i_mcbrotate == 0 , the l_rotnum is set to 13");
+ //if(l_print == 0)FAPI_INF("i_mcbrotate == 0 , the l_rotnum is set to 13");
l_rotnum = 13; // for random data generation - basic setup
}
else
@@ -602,12 +747,18 @@ rc_num = l_var_data_buffer_64.setDoubleWord(0,l_var); if (rc_num){ FAPI_ERR( "c
rc_num = rc_num| l_data_buffer_64.insert(l_data_buffer_16,4,16,0);
- FAPI_INF("Clearing bit 20 of MBA01_MCBIST_MCBDRCRQ_0x030106bd to avoid inversion of data to the write data flow");
+ if(l_print == 0)FAPI_INF("Clearing bit 20 of MBA01_MCBIST_MCBDRCRQ_0x030106bd to avoid inversion of data to the write data flow");
rc_num = rc_num|l_data_buffer_64.clearBit(20);
if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,MBA01_MCBIST_MCBDRCRQ_0x030106bd,l_data_buffer_64); if(rc) return rc;
+ //if(l_print == 0)FAPI_INF("Function Name: cfg_mcb_dgen");
+ //if(l_print == 0)FAPI_INF("Stop Time");
+
+
return rc;
}
+
+
}
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 b917f4a20..4edf56fa0 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.30 2013/04/22 13:01:27 lapietra Exp $
+// $Id: mss_mcbist.H,v 1.37 2013/08/02 09:00:44 sasethur Exp $
// *!***************************************************************************
// *! (C) Copyright International Business Machines Corp. 1997, 1998
// *! All Rights Reserved -- Property of IBM
@@ -38,6 +38,13 @@
//-------------------------------------------------------------------------------
// Version:|Author: | Date: | Comment:
// --------|--------|---------|--------------------------------------------------
+// 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
+// 1.34 |aditya |05/23/13 |Added TEST_RR and TEST_RF testtypes
+// 1.33 |aditya |05/22/13 |updated parameters for Subtest Printing
+// 1.32 |aditya |05/14/13 |updated parameters for cfg_mcb_dgen and random seed details
+// 1.31 |aditya |05/07/13 |Changed Parameter Passing in Functions
// 1.30 |aditya |04/22/13 |updated testtypes
// 1.27 |aditya |02/13/13 |updated testtypes
// 1.25 |aditya |02/12/13 |updated testtypes
@@ -77,10 +84,6 @@ extern "C"
using namespace fapi;
//############### Global variables ################
-/*const uint8_t MAX_PORT = 2;
-const uint8_t MAX_BYTE = 10;
-const uint8_t MAX_RANK = 8;
-const uint8_t MAX_NIBBLE = 1;;;*/
enum mcbist_test_mem
{
@@ -122,7 +125,12 @@ enum mcbist_test_mem
R_INFINITE_RF,
MARCH,
SIMPLE_FIX_RF,
- SHMOO_STRESS
+ SHMOO_STRESS,
+ SIMPLE_RAND_RA,
+ SIMPLE_FIX_RA,
+ SIMPLE_FIX_RF_RA,
+ TEST_RR,
+ TEST_RF
};
enum mcbist_data_gen
@@ -172,7 +180,7 @@ enum mcbist_data_gen
FIRST_XFER_X4MODE,
MCBIST_LONG,
PSEUDORANDOM,
- CASTLE
+ CASTLE
};
enum mcbist_oper_type
@@ -261,21 +269,33 @@ enum shmoo_addr_mode
FULL_ADDR = 3
};
+struct Subtest_info
+{
+uint8_t l_operation_type;
+uint8_t l_data_mode;
+uint8_t l_addr_mode;
+uint8_t l_random_data_enable;
+uint8_t l_fixed_data_enable;
+uint8_t l_random_addr_enable;
+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,uint64_t i_time);
-fapi::ReturnCode mcb_error_map(const fapi::Target & i_target_mba,uint8_t o_error_map[][8][10][2],uint8_t i_port,uint8_t i_rank);
-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);
-fapi::ReturnCode cfg_mcb_test_mem(const fapi::Target & i_target_mba,mcbist_test_mem i_test_type);
+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 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);
-fapi::ReturnCode cfg_byte_mask(const fapi::Target & i_target_mba,uint8_t i_rank,uint8_t i_port);
+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_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, 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);
+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 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 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);
+
+
-fapi::ReturnCode mcb_error_map_print(const fapi::Target & i_target_mba,uint8_t i_port,uint8_t i_rank,ecmdDataBufferBase & i_mcb_fail_320);
}
#endif
diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_address.C b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_address.C
index 21f435758..f36b459b8 100644
--- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_address.C
+++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_address.C
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: mss_mcbist_address.C,v 1.10 2013/04/30 08:56:00 ppcaelab Exp $
+// $Id: mss_mcbist_address.C,v 1.11 2013/05/16 22:00:24 sasethur Exp $
// *!***************************************************************************
// *! (C) Copyright International Business Machines Corp. 1997, 1998, 2013
// *! All Rights Reserved -- Property of IBM
@@ -38,6 +38,8 @@
//-------------------------------------------------------------------------------
// Version:|Author: | Date: | Comment:
// --------|--------|---------|--------------------------------------------------
+// 1.11 |preeragh|17-May-13| Fixed FW Review Comments
+// 1.10 |preeragh|30-Apr-13| Fixed FW Review Comment
// 1.9 |bellows |04-Apr-13| Changed program to be Hostboot compliant
// 1.2 |bellows |03-Apr-13| Added Id and cleaned up a warning msg.
// 1.1 | |xx-Apr-13| Copied from original which is now known as mss_mcbist_address_default/_lab.C
@@ -49,15 +51,17 @@ extern "C"
{
using namespace fapi;
-#define MAX_STRING_LEN 80
+#define MAX_ADDR_BITS 37
+#define MAX_VALUE_TWO 2
+
#define DELIMITERS ","
fapi::ReturnCode address_generation(const fapi:: Target & i_target_mba,uint8_t i_port,mcbist_addr_mode i_addr_type,interleave_type i_add_inter_type,uint8_t i_rank,uint64_t &io_start_address, uint64_t &io_end_address)
{
fapi::ReturnCode rc;
-uint8_t l_num_ranks_per_dimm[2][2];
-uint8_t l_num_master_ranks[2][2];
+uint8_t l_num_ranks_per_dimm[MAX_VALUE_TWO][MAX_VALUE_TWO];
+uint8_t l_num_master_ranks[MAX_VALUE_TWO][MAX_VALUE_TWO];
uint8_t l_dram_gen=0;
uint8_t l_dram_banks=0;
uint8_t l_dram_rows=0;
@@ -104,7 +108,7 @@ FAPI_INF("ATTR_EFF_NUM_RANKS_PER_DIMM is %d ",l_num_ranks_per_dimm[1][1]);
FAPI_INF("ATTR_EFF_NUM_MASTER_RANKS_PER_DIMM l_num_master_p0_dim0 is %d ",l_num_master_ranks[0][0]);
FAPI_INF("ATTR_EFF_NUM_MASTER_RANKS_PER_DIMM l_num_master_p0_dim1 is %d ",l_num_master_ranks[0][1]);
FAPI_INF("ATTR_EFF_NUM_MASTER_RANKS_PER_DIMM l_num_master_p1_dim0 is %d ",l_num_master_ranks[1][0]);
-FAPI_INF("ATTR_EFF_NUM_MASTER_RANKS_PER_DIMM is l_num_master_p1_dim1 %d ",l_num_master_ranks[1][1]);
+FAPI_INF("ATTR_EFF_NUM_MASTER_RANKS_PER_DIMM l_num_master_p1_dim1 is %d ",l_num_master_ranks[1][1]);
//-------------------------------------------------------------------------------
@@ -184,14 +188,14 @@ return rc;
fapi::ReturnCode parse_addr(const fapi:: Target & i_target_mba, char addr_string[],uint8_t mr3_valid,uint8_t mr2_valid,uint8_t mr1_valid,uint8_t l_dram_rows,uint8_t l_dram_cols,uint8_t l_addr_inter)
{
fapi::ReturnCode rc;
-uint8_t i=37;
+uint8_t i=MAX_ADDR_BITS;
uint8_t l_slave_rank = 0;
uint8_t l_value;
uint32_t l_value32 = 0;
uint32_t l_sbit,rc_num;
uint32_t l_start=0;
-uint32_t l_len = 6;
+uint32_t l_len = 0;
uint64_t l_readscom_value = 0;
uint64_t l_end = 0;
uint64_t l_start_addr = 0;
@@ -199,7 +203,7 @@ uint8_t l_value_zero = 0;
uint8_t l_user_end_addr = 0;
ecmdDataBufferBase l_data_buffer_64(64);
ecmdDataBufferBase l_data_buffer_rd64(64);
-uint8_t l_attr_addr_mode = 3;
+uint8_t l_attr_addr_mode = 3; //default Value - FULL Address Mode
uint8_t l_num_cols = 0;
uint8_t l_num_rows = 0;
@@ -225,17 +229,18 @@ if(l_num_rows == 0 )
rc_num = l_data_buffer_64.flushTo0();
- l_sbit = 0;l_value =i;
- rc = fapiGetScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc;
- rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
- rc = fapiPutScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc;
- i--;
+ l_sbit = 0;l_value =i;
+ rc = fapiGetScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc;
+ rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
+ rc = fapiPutScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc;
+ i--;
l_sbit = 54;l_value =i;
rc = fapiGetScom(i_target_mba,0x030106c8,l_data_buffer_64);
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value,l_sbit ,6);
rc = fapiPutScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc;
i--;
+
//FAPI_INF("Inside strcmp ba2");
l_sbit = 48;l_value =i;
rc = fapiGetScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc;
@@ -942,7 +947,7 @@ rc = fapiPutScom(i_target_mba,0x030106d3,l_data_buffer_rd64); if(rc) return rc;
else
{
-l_attr_addr_mode = 3;
+l_attr_addr_mode = 3; //Default it for FW with Full Address Range
if(l_attr_addr_mode == 0)
{
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 f7de7db2a..614b9a336 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.38 2013/04/30 08:53:46 ppcaelab Exp $
+// $Id: mss_mcbist_common.C,v 1.50 2013/08/08 07:14:25 sasethur Exp $
// *!***************************************************************************
// *! (C) Copyright International Business Machines Corp. 1997, 1998
// *! All Rights Reserved -- Property of IBM
@@ -38,7 +38,18 @@
//------------------------------------------------------------------------------
// Version:|Author: | Date: | Comment:
// --------|--------|--------|--------------------------------------------------
-// 1.38 |aditya |05/30/13|Minor fix for firmware
+// 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
+// 1.47 |aditya |06/11/13|Replaced FAPI_INF to FAPI_DBG,Added target details for Prints
+// 1.46 |aditya |06/11/13|Enabled pattern and testtype prints
+// 1.45 |aditya |06/11/13|Added attributes ATTR_MCBIST_PRINTING_DISABLE
+// 1.44 |aditya |05/23/13|Added TEST_RR and TEST_RF testtypes
+// 1.43 |aditya |05/22/13|updated parameters for Subtest Printing
+// 1.41 |aditya |05/14/13|updated parameters for random seed details
+// 1.40 |aditya |05/07/13|Small Fix
+// 1.39 |aditya |05/07/13|Moved some parameters to attributes.
+// 1.38 |aditya |04/30/13|Minor fix for firmware
// 1.37 |aditya |04/22/13|Minor Fix
// 1.36 |aditya |04/09/13|Updated cfg_byte_mask and setup_mcbist functions
// 1.35 |aditya |03/18/13|Updated cfg_byte_mask and error map functions
@@ -128,37 +139,59 @@ 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, 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)
+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, 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)
{
fapi::ReturnCode rc;
uint32_t rc_num = 0;
- FAPI_INF("Function Setup_MCBIST");
- ecmdDataBufferBase l_data_buffer_64(64);
+ uint8_t l_bit32 = 0;
+ //uint8_t l_print = 0;
+ //rc = FAPI_ATTR_GET(ATTR_MCBIST_PRINTING_DISABLE, &i_target_mba,l_print); if(rc) return rc;
+
+ FAPI_DBG("%s:Function Setup_MCBIST",i_target_mba.toEcmdString());
+
+
+
+ ecmdDataBufferBase l_data_buffer_64(64);
ecmdDataBufferBase l_data_bufferx1_64(64);
ecmdDataBufferBase l_data_bufferx2_64(64);
ecmdDataBufferBase l_data_bufferx3_64(64);
ecmdDataBufferBase l_data_bufferx4_64(64);
uint64_t io_start_address = 0;
uint64_t io_end_address = 0;
+ uint8_t l_new_addr = 1;
+ uint32_t i_mcbpatt,i_mcbtest ;
+
+ mcbist_test_mem i_mcbtest1;
+ mcbist_data_gen i_mcbpatt1;
+ i_mcbtest1 = CENSHMOO;
+ i_mcbpatt1 = ABLE_FIVE;
+
+
//uint8_t l_addr_inter=0;
//ecmdDataBufferBase l_data_buffer_64_1(64);
- // FAPI_INF("Value of Start is %016llX and end %016llX ",i_start,i_end);
+ // FAPI_DBG("%s:Value of Start is %016llX and end %016llX ",i_start,i_end);
uint8_t l_index = 0;
- uint8_t l_index1 = 0;
+ //uint8_t l_index1 = 0;
uint8_t l_flag = 0;
- uint8_t l_new_addr = 1;
- 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] = {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 } ;
+ 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 = 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;
rc = mcb_reset_trap(i_target_mba);
if(rc) return rc;
-
- if(i_bit32 == 1)
+//shd set attr for this 1st 8 or last 8
+rc = FAPI_ATTR_GET(ATTR_MCBIST_ERROR_CAPTURE, &i_target_mba,l_bit32); if(rc) return rc;
+ if(l_bit32 == 1)
{
-
+ FAPI_DBG("%s: error capture set to last 8 Bits",i_target_mba.toEcmdString());
rc = fapiGetScom(i_target_mba,0x02011674,l_data_buffer_64);if(rc) return rc;
rc_num = l_data_buffer_64.setBit(32);if (rc_num){FAPI_ERR( "Error in function setup_mcbist:");rc.setEcmdError(rc_num);return rc;}
@@ -231,7 +264,7 @@ fapi::ReturnCode setup_mcbist(const fapi::Target & i_target_mba, uint8_t i_port
*/
- for(l_index = 0;l_index < 24;l_index++)
+ /*for(l_index = 0;l_index < 24;l_index++)
{
rc = fapiGetScom(i_target_mba,scom_array[l_index],l_data_buffer_64); if(rc) return rc;
@@ -246,47 +279,59 @@ fapi::ReturnCode setup_mcbist(const fapi::Target & i_target_mba, uint8_t i_port
}
}
- }
+ } */
+
+
+ for(l_index = 0;l_index < 24;l_index++)
+ {
+ rc = fapiGetScom(i_target_mba,scom_array[l_index],l_data_buffer_64); if(rc) return rc;
+ l_flag = (l_data_buffer_64.getDoubleWord(0)) ? 1 : 0;
+ if(l_flag == 1)
+ {
+ break;
+ }
+
+ }
+
+
if(l_flag == 1)
{
- FAPI_INF("WARNING: Bit Steering is enabled !!!");
+ FAPI_DBG("%s:WARNING: Bit Steering is enabled !!!",i_target_mba.toEcmdString());
}
else
{
- FAPI_INF("steer mode is not enabled");
+ FAPI_DBG("%s:steer mode is not enabled",i_target_mba.toEcmdString());
}
- rc = cfg_mcb_dgen(i_target_mba,i_mcbpatt,i_mcbrotate); if(rc) return rc;
-
-
- rc = cfg_mcb_test_mem(i_target_mba,i_mcbtest); if(rc) return rc;
+
+ //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;
+ uint8_t i_port = 0;
+ uint8_t i_rank = 0;
//preet
- //FAPI_INF("DEBUG-----Print----Address Gen ");
+ //FAPI_DBG("%s:DEBUG-----Print----Address Gen ",i_target_mba.toEcmdString());
rc = FAPI_ATTR_GET(ATTR_MCBIST_ADDR_MODES, &i_target_mba, l_new_addr); if(rc) return rc;
if (l_new_addr != 0)
{
rc = address_generation(i_target_mba,i_port,SF,BANK_RANK,i_rank,io_start_address,io_end_address);
- if(rc) {FAPI_INF("BAD - RC ADDR Generation\n");return rc;}
+ if(rc) {FAPI_DBG("%s:BAD - RC ADDR Generation\n",i_target_mba.toEcmdString());return rc;}
}
-
-
-
if(i_mcbbytemask != NONE)
{
- rc = cfg_byte_mask(i_target_mba,0,i_port); if(rc) return rc;
+ rc = cfg_byte_mask(i_target_mba); if(rc) return rc;
}
-
return rc;
}
@@ -303,58 +348,69 @@ fapi::ReturnCode mcb_reset_trap(const fapi::Target & i_target_mba)
ecmdDataBufferBase l_data_buffer_64(64);
fapi::ReturnCode rc;
uint32_t rc_num = 0;
+ uint8_t l_mbaPosition = 0;
+ //uint8_t l_print = 0;
+ //rc = FAPI_ATTR_GET(ATTR_MCBIST_PRINTING_DISABLE, &i_target_mba,l_print); if(rc) return rc;
+ rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, &i_target_mba, l_mbaPosition);
- FAPI_INF("Function - mcb_reset_trap");
- FAPI_INF("Using MCB Reset Trap Function -- This automatically resets error log RA, error counters, Status Reg and error map");
+ FAPI_DBG("%s:Function - mcb_reset_trap",i_target_mba.toEcmdString());
+ //FAPI_DBG("%s:Using MCB Reset Trap Function -- This automatically resets error log RA, error counters, Status Reg and error map",i_target_mba.toEcmdString());
//Reset MCB Maintanence register
- FAPI_INF("Clearing the MCBIST Maintenance ");
- rc_num = l_data_buffer_64.flushTo0();if (rc_num){FAPI_ERR( "Error in function mcb_reset_trap:");rc.setEcmdError(rc_num);return rc;}
- rc = fapiGetScom(i_target_mba,MBA01_MCBIST_MCB_CNTLSTATQ_0x030106dc,l_data_buffer_64);if(rc) return rc;
- rc_num = l_data_buffer_64.clearBit(0,3);if (rc_num){FAPI_ERR( "Error in function mcb_reset_trap:");rc.setEcmdError(rc_num);return rc;}
- rc = fapiPutScom(i_target_mba,MBA01_MCBIST_MCB_CNTLSTATQ_0x030106dc,l_data_buffer_64);if(rc) return rc;
+ //FAPI_DBG("%s:Clearing the MCBIST Maintenance ",i_target_mba.toEcmdString());
+ //rc_num = l_data_buffer_64.flushTo0();if (rc_num){FAPI_ERR( "Error in function mcb_reset_trap:");rc.setEcmdError(rc_num);return rc;}
+
+ //rc = fapiGetScom(i_target_mba,MBA01_MCBIST_MCB_CNTLSTATQ_0x030106dc,l_data_buffer_64);if(rc) return rc;//comment this later
+
+ //rc_num = l_data_buffer_64.clearBit(0,3);if (rc_num){FAPI_ERR( "Error in function mcb_reset_trap:");rc.setEcmdError(rc_num);return rc;}
+ //rc = fapiPutScom(i_target_mba,MBA01_MCBIST_MCB_CNTLSTATQ_0x030106dc,l_data_buffer_64);if(rc) return rc;
//Reset the MCBIST runtime counter
- FAPI_INF("Clearing the MCBIST Runtime Counter ");
+ FAPI_DBG("%s:Clearing the MCBIST Runtime Counter ",i_target_mba.toEcmdString());
rc_num = l_data_buffer_64.flushTo0();if (rc_num){FAPI_ERR( "Error in function mcb_reset_trap:");rc.setEcmdError(rc_num);return rc;}
rc = fapiGetScom(i_target_mba,MBA01_MCBIST_RUNTIMECTRQ_0x030106b0,l_data_buffer_64);if(rc) return rc;
rc_num = l_data_buffer_64.clearBit(0,37);if (rc_num){FAPI_ERR( "Error in function mcb_reset_trap:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,MBA01_MCBIST_RUNTIMECTRQ_0x030106b0,l_data_buffer_64);if(rc) return rc;
- FAPI_INF("To clear Port error map registers ");
+ //FAPI_DBG("%s:To clear Port error map registers ",i_target_mba.toEcmdString());
rc_num = l_data_buffer_64.flushTo0();if (rc_num){FAPI_ERR( "Error in function mcb_reset_trap:");rc.setEcmdError(rc_num);return rc;}
- //PORT - A
- rc = fapiPutScom(i_target_mba,MBS_MCBIST01_MCBEMA1Q_0x0201166a,l_data_buffer_64); if(rc) return(rc);
- rc = fapiPutScom(i_target_mba,MBS_MCBIST01_MCBEMA2Q_0x0201166b,l_data_buffer_64); if(rc) return(rc);
- rc = fapiPutScom(i_target_mba,MBS_MCBIST01_MCBEMA3Q_0x0201166c,l_data_buffer_64); if(rc) return(rc);
-
- //PORT - B
- rc = fapiPutScom(i_target_mba,MBS_MCBIST01_MCBEMB1Q_0x0201166d,l_data_buffer_64); if(rc) return(rc);
- rc = fapiPutScom(i_target_mba,MBS_MCBIST01_MCBEMB2Q_0x0201166e,l_data_buffer_64); if(rc) return(rc);
- rc = fapiPutScom(i_target_mba,MBS_MCBIST01_MCBEMB3Q_0x0201166f,l_data_buffer_64); if(rc) return(rc);
-
- //MBS23
- //PORT - A
- rc = fapiPutScom(i_target_mba,0x0201176a,l_data_buffer_64); if(rc) return(rc);
- rc = fapiPutScom(i_target_mba,0x0201176b,l_data_buffer_64); if(rc) return(rc);
- rc = fapiPutScom(i_target_mba,0x0201176c,l_data_buffer_64); if(rc) return(rc);
-
- //PORT - B
- rc = fapiPutScom(i_target_mba,0x0201176d,l_data_buffer_64); if(rc) return(rc);
- rc = fapiPutScom(i_target_mba,0x0201176e,l_data_buffer_64); if(rc) return(rc);
- rc = fapiPutScom(i_target_mba,0x0201176f,l_data_buffer_64); if(rc) return(rc);
-
- rc = fapiPutScom(i_target_mba,0x02011672,l_data_buffer_64); if(rc) return(rc);
- rc = fapiPutScom(i_target_mba,0x02011673,l_data_buffer_64); if(rc) return(rc);
- rc = fapiPutScom(i_target_mba,0x02011674,l_data_buffer_64); if(rc) return(rc);
-
- rc = fapiPutScom(i_target_mba,0x02011772,l_data_buffer_64); if(rc) return(rc);
- rc = fapiPutScom(i_target_mba,0x02011773,l_data_buffer_64); if(rc) return(rc);
- rc = fapiPutScom(i_target_mba,0x02011774,l_data_buffer_64); if(rc) return(rc);
-
+ /*if(l_mbaPosition == 0)
+ {
+ //PORT - A
+ rc = fapiGetScom(i_target_mba,MBS_MCBIST01_MCBEMA1Q_0x0201166a,l_data_buffer_64); if(rc) return(rc);//comment this later
+ rc = fapiGetScom(i_target_mba,MBS_MCBIST01_MCBEMA2Q_0x0201166b,l_data_buffer_64); if(rc) return(rc);//comment this later
+ rc = fapiGetScom(i_target_mba,MBS_MCBIST01_MCBEMA3Q_0x0201166c,l_data_buffer_64); if(rc) return(rc);//comment this later
+
+ //PORT - B
+ rc = fapiGetScom(i_target_mba,MBS_MCBIST01_MCBEMB1Q_0x0201166d,l_data_buffer_64); if(rc) return(rc);//comment this later
+ rc = fapiGetScom(i_target_mba,MBS_MCBIST01_MCBEMB2Q_0x0201166e,l_data_buffer_64); if(rc) return(rc);//comment this later
+ rc = fapiGetScom(i_target_mba,MBS_MCBIST01_MCBEMB3Q_0x0201166f,l_data_buffer_64); if(rc) return(rc);//comment this later
+ }
+ else
+ {
+ //MBS23
+ //PORT - A
+ rc = fapiGetScom(i_target_mba,0x0201176a,l_data_buffer_64); if(rc) return(rc);//comment this later
+ rc = fapiGetScom(i_target_mba,0x0201176b,l_data_buffer_64); if(rc) return(rc);//comment this later
+ rc = fapiGetScom(i_target_mba,0x0201176c,l_data_buffer_64); if(rc) return(rc);//comment this later
+
+ //PORT - B
+ rc = fapiGetScom(i_target_mba,0x0201176d,l_data_buffer_64); if(rc) return(rc);//comment this later
+ rc = fapiGetScom(i_target_mba,0x0201176e,l_data_buffer_64); if(rc) return(rc);//comment this later
+ rc = fapiGetScom(i_target_mba,0x0201176f,l_data_buffer_64); if(rc) return(rc);//comment this later
+
+ } */
+ rc = fapiPutScom(i_target_mba,0x02011672,l_data_buffer_64); if(rc) return(rc);
+ rc = fapiPutScom(i_target_mba,0x02011673,l_data_buffer_64); if(rc) return(rc);
+ rc = fapiPutScom(i_target_mba,0x02011674,l_data_buffer_64); if(rc) return(rc);
+
+ rc = fapiPutScom(i_target_mba,0x02011772,l_data_buffer_64); if(rc) return(rc);
+ rc = fapiPutScom(i_target_mba,0x02011773,l_data_buffer_64); if(rc) return(rc);
+ rc = fapiPutScom(i_target_mba,0x02011774,l_data_buffer_64); if(rc) return(rc);
+
@@ -375,8 +431,10 @@ fapi::ReturnCode start_mcb(const fapi::Target & i_target_mba)
ecmdDataBufferBase l_data_buffer_trap_64(64);
uint8_t l_num_ranks_per_dimm[2][2];
fapi::ReturnCode rc;
- uint32_t rc_num = 0;
- FAPI_INF("Function - start_mcb");
+ //uint8_t l_print = 0;
+ //rc = FAPI_ATTR_GET(ATTR_MCBIST_PRINTING_DISABLE, &i_target_mba,l_print); if(rc) return rc;
+ uint32_t rc_num = 0;
+ FAPI_DBG("%s:Function - start_mcb",i_target_mba.toEcmdString());
rc = fapiGetScom(i_target_mba,MBA01_MCBIST_MCBAGRAQ_0x030106d6,l_data_buffer_64); if(rc) return rc;
@@ -385,25 +443,25 @@ fapi::ReturnCode start_mcb(const fapi::Target & i_target_mba)
if(l_num_ranks_per_dimm[0][0] > 0)
{
- FAPI_INF(" Socket 0 Configured");
+ FAPI_DBG("%s: Socket 0 Configured",i_target_mba.toEcmdString());
rc_num = l_data_buffer_64.setBit(24);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;}
rc_num = l_data_buffer_64.clearBit(25);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;}
}
else if(l_num_ranks_per_dimm[0][1] > 0)
{
- FAPI_INF(" Socket 1 Configured");
+ FAPI_DBG("%s: Socket 1 Configured",i_target_mba.toEcmdString());
rc_num = l_data_buffer_64.clearBit(24);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;}
rc_num = l_data_buffer_64.setBit(25);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;}
}
else if((l_num_ranks_per_dimm[0][0] > 0) && (l_num_ranks_per_dimm[0][1] > 0))
{
- FAPI_INF(" Socket 0, 1 Configured");
+ FAPI_DBG("%s: Socket 0, 1 Configured",i_target_mba.toEcmdString());
rc_num = l_data_buffer_64.setBit(24);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;}
rc_num = l_data_buffer_64.setBit(25);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;}
}
else
{
- FAPI_INF("No Socket found");
+ FAPI_DBG("%s:No Socket found",i_target_mba.toEcmdString());
}
@@ -411,12 +469,12 @@ fapi::ReturnCode start_mcb(const fapi::Target & i_target_mba)
//rc = fapiDelay(DELAY_100US, DELAY_2000SIMCYCLES);if(rc) return rc; // wait 2000 simcycles (in sim mode) OR 100 uS (in hw mode)
rc = fapiPutScom(i_target_mba,MBA01_MCBIST_MCBAGRAQ_0x030106d6,l_data_buffer_64); if(rc) return rc;
- FAPI_INF("STARTING MCBIST for Centaur Target");
+ FAPI_DBG("%s:STARTING MCBIST for Centaur Target",i_target_mba.toEcmdString());
rc = fapiGetScom(i_target_mba,MBA01_MCBIST_MCB_CNTLSTATQ_0x030106dc,l_data_buffer_64); if(rc) return rc;
if(l_data_buffer_64.isBitSet(0))
{
- FAPI_INF("MCBIST already in progess, wait till MCBIST completes");
+ FAPI_DBG("%s:MCBIST already in progess, wait till MCBIST completes",i_target_mba.toEcmdString());
return rc;
@@ -451,7 +509,8 @@ fapi::ReturnCode start_mcb(const fapi::Target & i_target_mba)
// 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,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 rc; // return value after each SCOM access/buffer modification
uint32_t rc_num = 0;
@@ -466,34 +525,123 @@ fapi::ReturnCode poll_mcb(const fapi::Target & i_target_mba,bool i_mcb_stop_on_
//Time out variables
uint64_t l_mcb_timeout = 0;
uint32_t l_count = 0;
-
+ uint64_t l_time = 0;
+ uint32_t l_time_count = 0;
+ //uint64_t l_reg = 0;
+ uint8_t l_index = 0;
+ uint8_t l_Subtest_no = 0;
+ uint32_t i_mcbtest = 0;
+ uint32_t l_st_ln = 0;
+ uint32_t l_len = 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;
+Target i_target_centaur;
+ rc = fapiGetParentChip(i_target_mba, i_target_centaur); if(rc) return rc;
// Clear to register to zero;
+//Should get the attributes l_time
+ // 0,1,2,3,4,5,6,7,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,
+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,2,1,1,1,1,10,0,5,3,3,3,3,9,4,30,1,2,2,3,3};
+ 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 = fapiGetScom(i_target_mba,0x02011670,l_data_buffer_64); if(rc) return rc;
+ l_reg = l_data_buffer_64.getDoubleWord (0);
+ FAPI_DBG("%s:Value of register is %016llX",l_reg);//Extract 3-7 .
+ //l_Subtest_no = Extracted value from 3 to 7
+ l_index = test_array_count[l_Subtest_no];*/
- FAPI_INF("Function Poll_MCBIST");
-
- if(i_time == 0x0000000000000000)
+
+
+ if(l_time == 0x0000000000000000)
{
- i_time = MCB_MAX_TIMEOUT;
+ l_time = MCB_MAX_TIMEOUT;
}
- //FAPI_INF("Value of max time %016llX",i_time);
+ FAPI_DBG("%s:Value of max time %016llX",i_target_mba.toEcmdString(),l_time);
- while ((l_mcb_done == 0) && (l_mcb_timeout <= i_time))
+ while ((l_mcb_done == 0) && (l_mcb_timeout <= l_time))
{
rc = fapiDelay(DELAY_100US, DELAY_2000SIMCYCLES);if(rc) return rc; // wait 2000 simcycles (in sim mode) OR 100 uS (in hw mode)
rc = fapiGetScom(i_target_mba,MBA01_MCBIST_MCB_CNTLSTATQ_0x030106dc,l_data_buffer_64); if(rc) return rc;
if(l_data_buffer_64.isBitSet(0))
{
-
+ l_time_count++;
+ if(l_time_count == 5000)
+ {
+ l_time_count = 0;
+ FAPI_DBG("%s:POLLING STATUS:POLLING IN PROGRESS...........",i_target_mba.toEcmdString());
+ //if((i_flag == 0) &&(l_print == 0))
+ if(i_flag == 0)
+ {
+ rc = fapiGetScom(i_target_centaur,0x02011670,l_data_buffer_64); if(rc) return rc;
+ l_st_ln = 3;
+ l_len = 4;
+ rc_num = l_data_buffer_64.extract(&l_Subtest_no,l_st_ln,l_len);if(rc_num)return rc;
+
+
+ FAPI_DBG("%s:SUBTEST No %d ",i_target_mba.toEcmdString(),l_Subtest_no);
+ rc = FAPI_ATTR_GET(ATTR_MCBIST_TEST_TYPE, &i_target_mba, i_mcbtest); if(rc) return rc;//---------i_mcbtest------->run
+ rc = mss_conversion_testtype(i_target_mba,i_mcbtest, i_mcbtest1);if(rc) return rc;
+
+ //l_Subtest_no = Extracted value from 3 to 7
+ l_index = test_array_count[i_mcbtest];
+ //FAPI_DBG("%s:INDEX No %d ",l_index);
+
+
+ if(l_Subtest_no < l_index)
+ {
+ switch(l_sub_info[l_Subtest_no].l_operation_type)
+ {
+ case 0 : FAPI_DBG("%s:SUBTEST :WRITE",i_target_mba.toEcmdString());break;
+ case 1 : FAPI_DBG("%s:SUBTEST :READ",i_target_mba.toEcmdString());break;
+ case 2 : FAPI_DBG("%s:SUBTEST :READ - WRITE",i_target_mba.toEcmdString());break;
+ case 3 : FAPI_DBG("%s:SUBTEST :WRITE - READ",i_target_mba.toEcmdString());break;
+ case 4 : FAPI_DBG("%s:SUBTEST :READ - WRITE - READ",i_target_mba.toEcmdString());break;
+ case 5 : FAPI_DBG("%s:SUBTEST :READ - WRITE - WRITE",i_target_mba.toEcmdString());break;
+ case 6 : FAPI_DBG("%s:SUBTEST :RANDOM COMMAND SEQUENCE",i_target_mba.toEcmdString());break;
+ case 7 : FAPI_DBG("%s:SUBTEST :GOTO SUBTEST N OR REFRESH ONLY",i_target_mba.toEcmdString());break;
+ default : FAPI_DBG("%s:Wrong Operation selected for Subtest",i_target_mba.toEcmdString());
+ }
+
+ switch(l_sub_info[l_Subtest_no].l_data_mode)
+ {
+ case 0 : FAPI_DBG("%s:DATA MODE :FIXED DATA",i_target_mba.toEcmdString());break;
+ case 1 : FAPI_DBG("%s:DATA MODE :DATA_RANDOM_FORWARD",i_target_mba.toEcmdString());break;
+ case 2 : FAPI_DBG("%s:DATA MODE :DATA_RANDOM_REVERSE",i_target_mba.toEcmdString());break;
+ case 3 : FAPI_DBG("%s:DATA MODE :RANDOM w/ECC FORWARD",i_target_mba.toEcmdString());break;
+ case 4 : FAPI_DBG("%s:DATA MODE :RANDOM w/ECC REVERSE",i_target_mba.toEcmdString());break;
+ case 5 : FAPI_DBG("%s:DATA MODE :DATA EQUAL ADDRESS",i_target_mba.toEcmdString());break;
+ case 6 : FAPI_DBG("%s:DATA MODE :DATA ROTATE LEFT",i_target_mba.toEcmdString());break;
+ case 7 : FAPI_DBG("%s:DATA MODE :DATA ROTATE RIGHT",i_target_mba.toEcmdString());break;
+ default : FAPI_DBG("%s:Wrong Data Mode selected for Subtest",i_target_mba.toEcmdString());
+ }
+
+
+
+ switch(l_sub_info[l_Subtest_no].l_addr_mode)
+ {
+ case 0 : FAPI_DBG("%s:ADDRESS MODE :SEQUENTIAL FORWARD",i_target_mba.toEcmdString());break;
+ case 1 : FAPI_DBG("%s:ADDRESS MODE :SEQUENTIAL REVERSE",i_target_mba.toEcmdString());break;
+ case 2 : FAPI_DBG("%s:ADDRESS MODE :RANDOM FORWARD",i_target_mba.toEcmdString());break;
+ case 3 : FAPI_DBG("%s:ADDRESS MODE :RANDOM REVERSE",i_target_mba.toEcmdString());break;
+ default : FAPI_DBG("%s:Wrong Address Mode selected for Subtest",i_target_mba.toEcmdString());
+ }
+ }
+
+ }
+
+
+ }
l_mcb_ip = 1;
}
if(l_data_buffer_64.isBitSet(1))
{
- FAPI_INF("MCBIST is done");
+ {FAPI_DBG("%s:POLLING STATUS:MCBIST POLLING DONE",i_target_mba.toEcmdString());
+ FAPI_DBG("%s:MCBIST is done",i_target_mba.toEcmdString());}
l_mcb_ip = 0;
l_mcb_done = 1;
@@ -505,12 +653,14 @@ fapi::ReturnCode poll_mcb(const fapi::Target & i_target_mba,bool i_mcb_stop_on_
if(l_data_buffer_64.isBitSet(2))
{
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
{
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
rc = fapiPutScom(i_target_mba,MBA01_MCBIST_MCBCFGQ_0x030106e0,l_stop_on_fail_buffer_64); if(rc) return rc;
- FAPI_INF("MCBIST will break after Current Subtest");
+ FAPI_DBG("%s:MCBIST will break after Current Subtest",i_target_mba.toEcmdString());
while(l_mcb_done == 0) // Poll till MCBIST is done
{
@@ -526,7 +676,7 @@ fapi::ReturnCode poll_mcb(const fapi::Target & i_target_mba,bool i_mcb_stop_on_
- FAPI_INF("MCBIST Done");
+ FAPI_DBG("%s:MCBIST Done",i_target_mba.toEcmdString());
rc_num = l_stop_on_fail_buffer_64.clearBit(62);if (rc_num){FAPI_ERR( "Error in function poll_mcb:");rc.setEcmdError(rc_num);return rc;} // Clearing bit 61 to avoid breaking after current subtest
rc = fapiPutScom(i_target_mba,MBA01_MCBIST_MCBCFGQ_0x030106e0,l_stop_on_fail_buffer_64); if(rc) return rc;
}
@@ -534,7 +684,7 @@ fapi::ReturnCode poll_mcb(const fapi::Target & i_target_mba,bool i_mcb_stop_on_
}
}
l_mcb_timeout++;
- if (l_mcb_timeout >= i_time)
+ if (l_mcb_timeout >= l_time)
{
FAPI_ERR( "poll_mcb:Maximun time out");
FAPI_SET_HWP_ERROR(rc,RC_MSS_MCBIST_TIMEOUT_ERROR);
@@ -542,47 +692,48 @@ fapi::ReturnCode poll_mcb(const fapi::Target & i_target_mba,bool i_mcb_stop_on_
}
#ifdef MCB_DEBUG_1
- if(l_count%100 == 0)//Can be changed later
- {
- FAPI_INF("MCB done bit : l_mcb_done");
- FAPI_INF("MCB fail bit : l_mcb_fail");
- FAPI_INF("MCB IP bit : l_mcb_ip");
+ //if((l_count%100 == 0)&&(l_print == 0))//Can be changed later
+ if(l_count%100 == 0)
+ {
+ FAPI_DBG("%s:MCB done bit : l_mcb_done",i_target_mba.toEcmdString());
+ FAPI_DBG("%s:MCB fail bit : l_mcb_fail",i_target_mba.toEcmdString());
+ FAPI_DBG("%s:MCB IP bit : l_mcb_ip",i_target_mba.toEcmdString());
}
#endif
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) && (i_mcb_stop_on_fail == true) )
{
*o_mcb_status = 1; /// MCB fail
#ifdef MCB_DEBUG_2
- FAPI_INF("*************************************************");
- FAPI_INF("MCB done bit : %d",l_mcb_done);
- FAPI_INF("MCB fail bit : %d",l_mcb_fail);
- FAPI_INF("MCB IP bit : %d",l_mcb_ip);
- FAPI_INF("*************************************************");
+ FAPI_DBG("%s:*************************************************",i_target_mba.toEcmdString());
+ FAPI_DBG("%s:MCB done bit : %d",i_target_mba.toEcmdString(),l_mcb_done);
+ FAPI_DBG("%s:MCB fail bit : %d",i_target_mba.toEcmdString(),l_mcb_fail);
+ FAPI_DBG("%s:MCB IP bit : %d",i_target_mba.toEcmdString(),l_mcb_ip);
+ FAPI_DBG("%s:*************************************************",i_target_mba.toEcmdString());
#endif
}
else if((l_mcb_done == 1) && (l_mcb_fail == 0))
{
*o_mcb_status = 0;//pass;
#ifdef MCB_DEBUG2
- FAPI_INF("*************************************************");
- FAPI_INF("MCB done bit : %d",l_mcb_done);
- FAPI_INF("MCB fail bit : %d",l_mcb_fail);
- FAPI_INF("MCB IP bit : %d",l_mcb_ip);
- FAPI_INF("*************************************************");
+ FAPI_DBG("%s:*************************************************",i_target_mba.toEcmdString());
+ FAPI_DBG("%s:MCB done bit : %d",i_target_mba.toEcmdString(),l_mcb_done);
+ FAPI_DBG("%s:MCB fail bit : %d",i_target_mba.toEcmdString(),l_mcb_fail);
+ FAPI_DBG("%s:MCB IP bit : %d",i_target_mba.toEcmdString(),l_mcb_ip);
+ FAPI_DBG("%s:*************************************************",i_target_mba.toEcmdString());
#endif
}
- else if((l_mcb_done == 0) && (l_mcb_ip == 1) && (l_mcb_timeout == i_time))
+ else if((l_mcb_done == 0) && (l_mcb_ip == 1) && (l_mcb_timeout == l_time) )
{
*o_mcb_status = 1;//fail;
#ifdef MCB_DEBUG2
- FAPI_INF("****************************************");
- FAPI_INF("MCB done bit : %d",l_mcb_done);
- FAPI_INF("MCB fail bit : %d",l_mcb_fail);
- FAPI_INF("MCB IP bit : %d",l_mcb_ip);
- FAPI_INF("****************************************");
+ FAPI_DBG("%s:****************************************",i_target_mba.toEcmdString());
+ FAPI_DBG("%s:MCB done bit : %d",i_target_mba.toEcmdString(),l_mcb_done);
+ FAPI_DBG("%s:MCB fail bit : %d",i_target_mba.toEcmdString(),l_mcb_fail);
+ FAPI_DBG("%s:MCB IP bit : %d",i_target_mba.toEcmdString(),l_mcb_ip);
+ FAPI_DBG("%s:****************************************",i_target_mba.toEcmdString());
#endif
}
@@ -599,46 +750,33 @@ fapi::ReturnCode poll_mcb(const fapi::Target & i_target_mba,bool i_mcb_stop_on_
return rc;
}
-
-
-
-/****************************************************************/
-// Funtion name : mcb_error_map_print
-// Description : Prints the error Map of a Rank
-// Input Parameters :
-// const fapi::Target & Centaur.mba
-// uint8_t i_port Port in use
-// uint8_t i_rank Rank in use
-// ecmdDataBufferBase & l_mcb_fail_320 Ecmd Buffer
-// Output Parameter :
-// uint8_t o_error_map[][8][10][2] Contains the error map
-//****************************************************************/
-
-fapi::ReturnCode mcb_error_map_print(const fapi::Target & i_target_mba,uint8_t i_port,uint8_t i_rank,ecmdDataBufferBase & l_mcb_fail_160)
+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)
{
ReturnCode rc;
uint8_t l_num_ranks_per_dimm[MAX_PORT][MAX_PORT];
uint8_t l_rankpair_table[MAX_RANK] ;
uint8_t l_cur_rank =0;
uint16_t l_index0,l_index1,l_byte,l_nibble;
+ //ecmdDataBufferBase l_data_buffer1_64(64),l_data_buffer2_64(64),l_data_buffer3_64(64),l_data_buffer4_64(64);
uint8_t l_max_rank = 0;
uint8_t l_rank_pair = 0;
char l_str1[200] = "";
ecmdDataBufferBase l_mcb(64);
- i_rank = 0;
+ uint8_t i_rank = 0;
//uint64_t start;
//uint32_t rc_num;
uint8_t l_mbaPosition = 0;
//uint8_t l_attr_eff_dimm_type_u8 = 0;
-
+ //uint8_t l_print = 0;
+ //rc = FAPI_ATTR_GET(ATTR_MCBIST_PRINTING_DISABLE, &i_target_mba,l_print); if(rc) return rc;
rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, &i_target_mba, l_mbaPosition);
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];
-
+ rc = mss_getrankpair(i_target_mba,i_port,0,&l_rank_pair,l_rankpair_table); if(rc) return rc;
if(l_max_rank == 0)
{
- FAPI_INF(" NO RANK FOUND ON PORT %d ",i_port);
+ FAPI_DBG("%s: NO RANK FOUND ON PORT %d ",i_target_mba.toEcmdString(),i_port);
return rc;
}
else
@@ -646,6 +784,7 @@ fapi::ReturnCode mcb_error_map_print(const fapi::Target & i_target_mba,uint8_t
for(l_cur_rank = 0;l_cur_rank < l_max_rank;l_cur_rank++)
{
i_rank = l_rankpair_table[l_cur_rank];
+ //FAPI_DBG("%s:i am rank %d cur_index %d",i_target_mba.toEcmdString(),i_rank,l_cur_rank);
if(i_rank>MAX_RANK)
{
break;
@@ -654,66 +793,297 @@ fapi::ReturnCode mcb_error_map_print(const fapi::Target & i_target_mba,uint8_t
}
}
+
if(i_port == 0)
{
if(l_mbaPosition == 0)
{
- FAPI_INF("################# MBA01 ###########################\n");
- FAPI_INF("################# PORT0 ERROR MAP #################\n");
+ FAPI_DBG("%s:################# MBA01 ###########################\n",i_target_mba.toEcmdString());
+ FAPI_DBG("%s:################# PORT0 ERROR MAP #################\n",i_target_mba.toEcmdString());
}
else
{
- FAPI_INF("################# MBA23 ###########################\n");
- FAPI_INF("################# PORT0 ERROR MAP #################\n");
+ FAPI_DBG("%s:################# MBA23 ###########################\n",i_target_mba.toEcmdString());
+ FAPI_DBG("%s:################# PORT0 ERROR MAP #################\n",i_target_mba.toEcmdString());
}
}
- else if(i_port == 1)
+ //else if(i_port == 1)
+ else
{
if(l_mbaPosition ==0)
{
- FAPI_INF("################# MBA01 ###########################\n");
- FAPI_INF("################# PORT1 ERROR MAP #################\n");
+ FAPI_DBG("%s:################# MBA01 ###########################\n",i_target_mba.toEcmdString());
+ FAPI_DBG("%s:################# PORT1 ERROR MAP #################\n",i_target_mba.toEcmdString());
}
else
{
- FAPI_INF("################# MBA23 ###########################\n");
- FAPI_INF("################# PORT1 ERROR MAP #################\n");
+ FAPI_DBG("%s:################# MBA23 ###########################\n",i_target_mba.toEcmdString());
+ FAPI_DBG("%s:################# PORT1 ERROR MAP #################\n",i_target_mba.toEcmdString());
}
}
- //FAPI_INF(" --------------------");
- FAPI_INF("Byte 00112233445566778899");
- FAPI_INF("Nibble 01010101010101010101");
+
+
+
+
+ //Modified New Code
+
+
+//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_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) {
+ 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;
+ 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++)
+ {
+
+ //l_value = l_array0[l_index];
+ l_value = l_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_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;
+
+//To be in error map print function
+
+//Debug Prints
+/*
+FAPI_INF("________________________________________________________________________________________________________");
+ for(l_i = 0;l_i < l_number;l_i++)
+ {
+ FAPI_INF("%s:INITIAL ARRAY:%d",i_target_mba.toEcmdString(),l_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("________________________________________________________________________________________________________");
+ */
+
+
+l_cur_rank = 0;
+i_rank = 0;
+l_num = 0;
+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];
- sprintf(l_str1,"%-4s%d%5s","RANK",i_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++)
{
for(l_nibble = 0; l_nibble < MAX_NIBBLES; l_nibble++)
{
-
+ l_value = l_marray0[l_num] ;
+ //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_index1 = l_index0;
- if(l_mcb_fail_160.isBitSet(l_index1))
- {
- strcat(l_str1,"X");
- }
- else
- {
- strcat(l_str1,".");
- }
+ if((l_value == l_index1) &&(l_num < io_num))
+ {
+ strcat(l_str1,"M");
+
+ //FAPI_DBG("%s:l_value %d l_num %d",i_target_mba.toEcmdString(),l_value,l_num);
+ l_num++;
+ }
+ else
+ {
+ if(l_mcb_fail_160.isBitSet(l_index1))
+ {
+ strcat(l_str1,"X");
+ }
+ else
+ {
+ strcat(l_str1,".");
+ }
+ }
}
}
- FAPI_INF("%s",l_str1);
+ FAPI_DBG("%s",l_str1);
}
@@ -721,10 +1091,6 @@ return rc;
}
-
-
-
-
/*****************************************************************/
// Funtion name : mcb_error_map
// Description : Reads the nibblewise Error map registers into o_error_map
@@ -735,7 +1101,7 @@ return rc;
// Output Parameter :
// uint8_t o_error_map[][8][10][2] Contains the error map
//****************************************************************/
-fapi::ReturnCode mcb_error_map(const fapi::Target & i_target_mba, uint8_t o_error_map[][8][10][2],uint8_t i_port,uint8_t i_rank)
+fapi::ReturnCode mcb_error_map(const fapi::Target & i_target_mba, uint8_t o_error_map[][8][10][2])
{
ecmdDataBufferBase l_mcbem1ab(64);
ecmdDataBufferBase l_mcbem2ab(64);
@@ -749,7 +1115,7 @@ fapi::ReturnCode mcb_error_map(const fapi::Target & i_target_mba, uint8_t o_er
uint8_t l_max_rank0,l_max_rank1;
-
+ uint8_t i_rank,i_port;
//####################
fapi::Target i_target_centaur ;
//####################
@@ -764,6 +1130,8 @@ fapi::ReturnCode mcb_error_map(const fapi::Target & i_target_mba, uint8_t o_er
uint8_t l_num_ranks_per_dimm[MAX_PORT][MAX_PORT];
//uint64_t start;
uint8_t l_mbaPosition = 0;
+ //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;
input_type l_input_type_e = ISDIMM_DQ;
uint8_t valid_rank[MAX_RANK] ;
@@ -771,7 +1139,7 @@ fapi::ReturnCode mcb_error_map(const fapi::Target & i_target_mba, uint8_t o_er
uint8_t l_max_bytes=9;
uint8_t l_max_rank;
uint8_t l_attr_eff_dimm_type_u8;
- FAPI_INF("Function MCB_ERROR_MAP");
+ FAPI_DBG("%s:Function MCB_ERROR_MAP",i_target_mba.toEcmdString());
rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, &i_target_mba, l_mbaPosition);
if(rc)
@@ -894,51 +1262,340 @@ 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;
//ISDIMM error map
- //uint8_t l_max_ranks =8;
-
+ //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;
+
+
+/*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.flushTo0();
+i_port = 0;
+while(i_port < 2)
+{
+rc_num = l_data_buffer1_64.flushTo0();
+rc_num = l_data_buffer3_64.flushTo0();
+ if(l_mbaPosition == 0)
+ {
+ if(i_port == 0)
+ {
+ //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;
+ 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);
+ }
+ }
+ l_number1 = l_i;
+ }
+
+ else
+ {
+ //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;
+ for(l_index=0;l_index<64;l_index++)
+ {
+ if(l_data_buffer1_64.isBitSet(l_index))
+ {
+ l_array1[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_array1[l_i] = l_index+64-16;
+ l_i++;//FAPI_INF("l_array:%d",l_i);
+ }
+
+
+ }
+ l_number = 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);
+ }
+ }
+ l_number1 = 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_array1[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_array1[l_i] = l_index+64-16;
+ l_i++;//FAPI_INF("l_array:%d",l_i);
+ }
+ }
+ l_number = l_i;
+ }
+
+ }
+ i_port++;
+}
+
+uint8_t l_num,io_num,io_num0,io_num1,l_inter,l_flag,l_n;
+l_n=0; //HB
+io_num0=0;
+ //FAPI_INF("%s:l_max_rank%d",i_target_mba.toEcmdString(),l_max_rank);
+ l_port = 0;
+ while(l_port<2)
+ {
+ l_num =0;
+ if(l_port == 0)
+ {
+
+ for(l_index=0;l_index<l_number1;l_index++)
+ {
+ l_array[l_index] = l_array0[l_index];
+ }
+ l_n = l_number1;
+ rc = mss_getrankpair(i_target_mba,l_port,0,&rank_pair,l_rankpair_table);if(rc) return rc;
+ }
+ else
+ {
+ for(l_index=0;l_index<l_number;l_index++)
+ {
+ l_array[l_index] = l_array1[l_index];
+ l_n = l_number;
+ }
+ rc = mss_getrankpair(i_target_mba,l_port,0,&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];
+
+ //FAPI_INF("%s:rank:%d",i_target_mba.toEcmdString(),i_rank);
+
+ for(l_index=0;l_index<l_n;l_index++)
+ {
+
+ 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);
+ }
+ }
+ //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)
+ {
+ io_num0 = l_num;
+ if(io_num0 >= 21)
+ {
+ io_num0 = 21;
+ }
+ for(l_index=0;l_index<io_num0;l_index++)
+ {
+ l_marray0[l_index] = l_marray[l_index];
+ }
+ }
+ else
+ {
+ io_num1 = l_num;
+ if(io_num1 >= 21)
+ {
+ io_num1 = 21;
+ }
+ for(l_index=0;l_index<io_num1;l_index++)
+ {
+ l_marray1[l_index] = l_marray[l_index];
+ }
+
+
+ }
+ l_port++;
+ }
+//DEBUG PRINTS
+/*
+FAPI_INF("________________________________________________________________________________________________________");
+
+ for(l_i = 0;l_i < l_number1;l_i++)
+ {
+ FAPI_INF("%s:Port 0 INITIAL ARRAY:%d and index %d",i_target_mba.toEcmdString(),l_array0[l_i],l_i );
+ }
+
+FAPI_INF("________________________________________________________________________________________________________");
+
+ for(l_i = 0;l_i < io_num0;l_i++)
+ {
+ FAPI_INF("%s:Port 0 FINAL ARRAY:%d and index %d",i_target_mba.toEcmdString(),l_marray0[l_i],l_i );
+ }
+
+FAPI_INF("________________________________________________________________________________________________________");
+ for(l_i = 0;l_i < l_number;l_i++)
+ {
+ FAPI_INF("%s:Port 1 INITIAL ARRAY:%d and index %d",i_target_mba.toEcmdString(),l_array1[l_i],l_i );
+ }
+
+
+FAPI_INF("________________________________________________________________________________________________________");
+ for(l_i = 0;l_i < io_num1;l_i++)
+ {
+ FAPI_INF("%s:Port 1 FINAL ARRAY:%d and index %d",i_target_mba.toEcmdString(),l_marray1[l_i],l_i );
+ }
+
+FAPI_INF("________________________________________________________________________________________________________");*/
+//To be in error map print function
+
if((l_attr_eff_dimm_type_u8 == 1) || (l_attr_eff_dimm_type_u8 == 3)) //Calling ISDIMM error mAP and LRDIMM
{
- FAPI_INF("################# Error MAP for ISDIMM #################");
+ FAPI_DBG("%s:################# Error MAP for ISDIMM #################",i_target_mba.toEcmdString());
for(l_port = 0; l_port < 2; l_port++)
{
if(l_port == 0)
{
l_max_rank = l_max_rank0;
+
+ io_num = io_num0;
+ for(l_index=0;l_index<io_num;l_index++)
+ {
+ l_marray[l_index] = l_marray0[l_index];
+ }
+
}
else
{
l_max_rank = l_max_rank1;
+
+ io_num = io_num1;
+ for(l_index=0;l_index<io_num;l_index++)
+ {
+ l_marray[l_index] = l_marray1[l_index];
+ }
+
}
if(l_max_rank == 0)
{
- FAPI_INF(" NO RANKS FOUND ON PORT %d",l_port);
+ FAPI_DBG("%s: NO RANKS FOUND ON PORT %d",i_target_mba.toEcmdString(),l_port);
}
else
{
if(l_mbaPosition ==0)
{
- FAPI_INF("################# MBA01 ###########################\n");
- FAPI_INF("################# PORT%d ERROR MAP #################\n",l_port);
+ {FAPI_DBG("%s:################# MBA01 ###########################\n",i_target_mba.toEcmdString());
+ FAPI_DBG("%s:################# PORT%d ERROR MAP #################\n",i_target_mba.toEcmdString(),l_port);}
}
else
{
- FAPI_INF("################# MBA23 ###########################\n");
- FAPI_INF("################# PORT%d ERROR MAP #################\n",l_port);
+ {FAPI_DBG("%s:################# MBA23 ###########################\n",i_target_mba.toEcmdString());
+ FAPI_DBG("%s:################# PORT%d ERROR MAP #################\n",i_target_mba.toEcmdString(),l_port);}
}
- //FAPI_INF(" ------------------");
- FAPI_INF("Byte 001122334455667788");
- FAPI_INF("Nibble 010101010101010101");
+ //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_INF("Rank %d",i_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];
- sprintf(l_str,"%-4s%d%5s","RANK",i_rank,"");
+ sprintf(l_str,"%s:%-4s%d%5s",i_target_mba.toEcmdString(),"RANK",i_rank,"");
+ l_flag = 0;
for( i_byte = 0;i_byte < l_max_bytes ;i_byte++)
{
for (i_nibble = 0;i_nibble < 2;i_nibble++)
{
+ l_flag = 0;
+ l_inter = l_marray[l_num] ;
+
i_input_index_u8=(8*i_byte)+(4*i_nibble);
+
+ if((l_inter == i_input_index_u8) &&(l_num < io_num))
+ {
+ //FAPI_INF("l_flag %d,l_inter %d,i_input_index_u8 %d",l_flag,l_inter,i_input_index_u8);
+ l_num++;
+ l_flag = 1;
+ }
+
+
+
+
+ //FAPI_INF("l_flag %d,l_inter %d,i_input_index_u8 %d",l_flag,l_inter,i_input_index_u8);
rc=rosetta_map(i_target_mba,l_port,l_input_type_e,i_input_index_u8,0,o_val);if(rc) return rc;
i_byte1=o_val/8;
i_nibble1=o_val%8;
@@ -947,18 +1604,26 @@ fapi::ReturnCode mcb_error_map(const fapi::Target & i_target_mba, uint8_t o_er
}else{
i_nibble1=0;
}
- if( o_error_map[l_port][l_rank][i_byte1][i_nibble1] == 1){
-
- strcat(l_str,"X");
+ if(l_flag == 1)
+ {
+ strcat(l_str,"M");
+
}
else
- {
-
- strcat(l_str,".");
+ {
+ if( o_error_map[l_port][l_rank][i_byte1][i_nibble1] == 1){
+
+ strcat(l_str,"X");
+ }
+ else
+ {
+
+ strcat(l_str,".");
+ }
}
}
}
- FAPI_INF("%s",l_str);
+ FAPI_DBG("%s",l_str);
}
}
}
@@ -967,15 +1632,16 @@ fapi::ReturnCode mcb_error_map(const fapi::Target & i_target_mba, uint8_t o_er
else //Calling CDIMM error Map print
{
i_port = 0;
- mcb_error_map_print( i_target_mba ,i_port, i_rank, l_mcb_fail_160);
+ mcb_error_map_print( i_target_mba , l_mcb_fail_160, i_port,l_array0,l_number1);
i_port = 1;
- mcb_error_map_print(i_target_mba, i_port, i_rank, l_mcb_fail1_160);
+ mcb_error_map_print(i_target_mba, l_mcb_fail1_160, i_port,l_array1,l_number);
}
//End
return rc;
}
+
/*****************************************************************/
// Funtion name : mcb_write_test_mem
// Description : : Based on parameters passed we write data into Register being passed
@@ -992,7 +1658,7 @@ fapi::ReturnCode mcb_error_map(const fapi::Target & i_target_mba, uint8_t o_er
// uint8_t i_cfg_test_123_cmd Integer value
//****************************************************************/
-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)
+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 total_subtest_no,struct Subtest_info l_sub_info[30])
{
fapi::ReturnCode rc;
uint32_t rc_num = 0;
@@ -1003,15 +1669,29 @@ fapi::ReturnCode mcb_write_test_mem(const fapi::Target & i_target_mba,const uin
uint8_t l_data_mode = i_data_mode;
uint8_t l_data_select_mode = i_data_select_mode;
uint8_t l_addr_select_mode = i_addr_select_mode;
-
+ //uint8_t l_print = 0;
+ //rc = FAPI_ATTR_GET(ATTR_MCBIST_PRINTING_DISABLE, &i_target_mba,l_print); if(rc) return rc;
ecmdDataBufferBase l_data_buffer_64(64);
- FAPI_INF("Function mcb_write_test_mem");
+ FAPI_DBG("%s:Function mcb_write_test_mem",i_target_mba.toEcmdString());
rc = fapiGetScom(i_target_mba,i_reg_addr,l_data_buffer_64);if(rc) return rc;
l_index = i_testnumber * (MCB_TEST_NUM) ;
- // Operation type
+ uint8_t l_done_bit ;
+ rc = FAPI_ATTR_GET(ATTR_MCBIST_ADDR_BANK, &i_target_mba, l_done_bit); if(rc) return rc;
+ if(l_done_bit == 1)
+ {
+ return rc;
+ }
+
+
+ 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
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_operation_type,l_index ,3);
@@ -1042,9 +1722,83 @@ fapi::ReturnCode mcb_write_test_mem(const fapi::Target & i_target_mba,const uin
rc = fapiPutScom(i_target_mba,i_reg_addr,l_data_buffer_64); if(rc) return rc;
rc = fapiGetScom(i_target_mba,i_reg_addr,l_data_buffer_64); if(rc) return rc;
-
- return rc;
+
+ FAPI_DBG("%s:SUBTEST %d of %d in Progress.................... ",i_target_mba.toEcmdString(),i_testnumber1,total_subtest_no);
+ //FAPI_DBG("%s:SUBTEST %d in Progress.................... ",i_testnumber);
+ FAPI_DBG("%s:SUBTEST DETAILS",i_target_mba.toEcmdString());
+
+ switch(l_operation_type)
+ {
+ case 0 : FAPI_DBG("%s:SUBTEST :WRITE",i_target_mba.toEcmdString());break;
+ case 1 : FAPI_DBG("%s:SUBTEST :READ",i_target_mba.toEcmdString());break;
+ case 2 : FAPI_DBG("%s:SUBTEST :READ - WRITE",i_target_mba.toEcmdString());break;
+ case 3 : FAPI_DBG("%s:SUBTEST :WRITE - READ",i_target_mba.toEcmdString());break;
+ case 4 : FAPI_DBG("%s:SUBTEST :READ - WRITE - READ",i_target_mba.toEcmdString());break;
+ case 5 : FAPI_DBG("%s:SUBTEST :READ - WRITE - WRITE",i_target_mba.toEcmdString());break;
+ case 6 : FAPI_DBG("%s:SUBTEST :RANDOM COMMAND SEQUENCE",i_target_mba.toEcmdString());break;
+ case 7 : FAPI_DBG("%s:SUBTEST :GOTO SUBTEST N OR REFRESH ONLY",i_target_mba.toEcmdString());break;
+ default : FAPI_DBG("%s:Wrong Operation selected for Subtest",i_target_mba.toEcmdString());
+ }
+
+ switch(l_data_mode)
+ {
+ case 0 : FAPI_DBG("%s:DATA MODE :FIXED DATA",i_target_mba.toEcmdString());break;
+ case 1 : FAPI_DBG("%s:DATA MODE :DATA_RANDOM_FORWARD",i_target_mba.toEcmdString());break;
+ case 2 : FAPI_DBG("%s:DATA MODE :DATA_RANDOM_REVERSE",i_target_mba.toEcmdString());break;
+ case 3 : FAPI_DBG("%s:DATA MODE :RANDOM w/ECC FORWARD",i_target_mba.toEcmdString());break;
+ case 4 : FAPI_DBG("%s:DATA MODE :RANDOM w/ECC REVERSE",i_target_mba.toEcmdString());break;
+ case 5 : FAPI_DBG("%s:DATA MODE :DATA EQUAL ADDRESS",i_target_mba.toEcmdString());break;
+ case 6 : FAPI_DBG("%s:DATA MODE :DATA ROTATE LEFT",i_target_mba.toEcmdString());break;
+ case 7 : FAPI_DBG("%s:DATA MODE :DATA ROTATE RIGHT",i_target_mba.toEcmdString());break;
+ default : FAPI_DBG("%s:Wrong Data Mode selected for Subtest",i_target_mba.toEcmdString());
+ }
+
+
+
+ switch(l_addr_mode)
+ {
+ case 0 : FAPI_DBG("%s:ADDRESS MODE :SEQUENTIAL FORWARD",i_target_mba.toEcmdString());break;
+ case 1 : FAPI_DBG("%s:ADDRESS MODE :SEQUENTIAL REVERSE",i_target_mba.toEcmdString());break;
+ case 2 : FAPI_DBG("%s:ADDRESS MODE :RANDOM FORWARD",i_target_mba.toEcmdString());break;
+ case 3 : FAPI_DBG("%s:ADDRESS MODE :RANDOM REVERSE",i_target_mba.toEcmdString());break;
+ default :FAPI_DBG("%s:Wrong Address Mode selected for Subtest",i_target_mba.toEcmdString());
+ }
+
+ FAPI_DBG("%s:SUBTEST %d of %d done ",i_target_mba.toEcmdString(),i_testnumber1,total_subtest_no);
+
+
+
+ //FAPI_DBG("%s:SUBTEST %d done ",i_testnumber);
+ if(i_done == 1)
+ {
+ FAPI_DBG("%s:DONE BIT IS SET FOR CURRENT SUBTEST %d",i_target_mba.toEcmdString(),i_testnumber1);
+ //FAPI_DBG("%s:DONE BIT IS SET FOR CURRENT SUBTEST %d",i_testnumber);
+ }
+ if((l_data_mode == 0)||(l_data_mode == 6)||(l_data_mode == 7)||(l_data_mode == 5))
+ {
+ //FAPI_DBG("%s:fixed set and value of datamode is %d",l_data_mode);
+ l_sub_info[i_testnumber1].l_fixed_data_enable = 1;
+ }
+ else if((l_data_mode == 1)||(l_data_mode == 2)||(l_data_mode == 3)||(l_data_mode == 4))
+ {
+ l_sub_info[i_testnumber1].l_random_data_enable = 1;
+ //FAPI_DBG("%s:random set and value of datamode is %d",l_data_mode);
+ }
+
+
+ if((l_addr_mode == 0)||(l_addr_mode == 1))
+ {
+ //FAPI_DBG("fixed addr and value of addrmode is %d",l_addr_mode);
+ l_sub_info[i_testnumber1].l_fixed_addr_enable = 1;
+ }
+ else if((l_addr_mode == 2)||(l_addr_mode == 3))
+ {
+ l_sub_info[i_testnumber1].l_random_addr_enable = 1;
+ //FAPI_DBG("random addr and value of addrmode is %d",l_addr_mode);
+ }
+ return rc;
}
+
/*****************************************************************/
// Funtion name : cfg_byte_mask
// Description :
@@ -1055,8 +1809,7 @@ fapi::ReturnCode mcb_write_test_mem(const fapi::Target & i_target_mba,const uin
//****************************************************************/
-
-fapi::ReturnCode cfg_byte_mask(const fapi::Target & i_target_mba,uint8_t i_rank,uint8_t i_port)
+fapi::ReturnCode cfg_byte_mask(const fapi::Target & i_target_mba)
{
uint32_t rc_num;
uint8_t l_port=0;
@@ -1079,7 +1832,8 @@ fapi::ReturnCode cfg_byte_mask(const fapi::Target & i_target_mba,uint8_t i_rank
uint8_t l_attr_eff_dimm_type_u8 = 0;
rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_TYPE, &i_target_mba, l_attr_eff_dimm_type_u8); if(rc) return rc;
rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, &i_target_mba, l_mbaPosition);
-
+ //uint8_t l_print = 0;
+ //rc = FAPI_ATTR_GET(ATTR_MCBIST_PRINTING_DISABLE, &i_target_mba,l_print); if(rc) return rc;
//l_attr_eff_dimm_type_u8=1;
for(l_port=0;l_port<2;l_port++){
@@ -1094,12 +1848,14 @@ fapi::ReturnCode cfg_byte_mask(const fapi::Target & i_target_mba,uint8_t i_rank
ecmdDataBufferBase l_data_buffer2_64(64);
ecmdDataBufferBase l_data_buffer3_64(64);
+ ecmdDataBufferBase l_data_buffer4_64(64);
+ ecmdDataBufferBase l_data_buffer5_64(64);
l_max_0 = num_ranks_per_dimm[0][0]+num_ranks_per_dimm[0][1];
l_max_1 = num_ranks_per_dimm[1][0]+num_ranks_per_dimm[1][1];
- // uint32_t rc_num = 0;
+ //uint32_t rc_num = 0;
rc_num = l_data_buffer3_64.flushTo0();if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
@@ -1113,7 +1869,7 @@ fapi::ReturnCode cfg_byte_mask(const fapi::Target & i_target_mba,uint8_t i_rank
uint16_t l_sp_isdimm=0xff;
- FAPI_INF("Function cfg_byte_mask");
+ FAPI_DBG("%s:Function cfg_byte_mask",i_target_mba.toEcmdString());
if(l_rnk>3)
{
l_dimm=1;
@@ -1131,22 +1887,23 @@ fapi::ReturnCode cfg_byte_mask(const fapi::Target & i_target_mba,uint8_t i_rank
{
l_dq[l_index0]=l_dqBitmap[l_index0];
if(l_dqBitmap[l_index0]){
- FAPI_INF("\n the port=%d bad dq=%x on dq=%d",l_port,l_dqBitmap[l_index0],l_index0);
+ FAPI_DBG("%s:\n the port=%d bad dq=%x on dq=%d",i_target_mba.toEcmdString(),l_port,l_dqBitmap[l_index0],l_index0);
}
}
else
{
if(l_dqBitmap[l_index0]){
- FAPI_INF("\n the port=%d bad dq=%x on dq=%d",l_port,l_dqBitmap[l_index0],l_index0);
+ FAPI_DBG("%s:\n the port=%d bad dq=%x on dq=%d",i_target_mba.toEcmdString(),l_port,l_dqBitmap[l_index0],l_index0);
}
l_sp[l_index_sp]=l_dqBitmap[l_index0];
l_index_sp++;
}
}
-
+ // rc_num = l_data_buffer1_64.flushTo0();if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
rc_num = l_data_buffer1_64.insertFromRight(l_dq,0,64);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
+
//rc_num = l_data_buffer2_64.insertFromRight(l_sp,0,16);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
if(l_mbaPosition == 0)
@@ -1159,8 +1916,12 @@ fapi::ReturnCode cfg_byte_mask(const fapi::Target & i_target_mba,uint8_t i_rank
}else{
rc_num = l_data_buffer2_64.insertFromRight(l_sp,0,16);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
}
+ rc = fapiGetScom(i_target_mba,MBS_MCBIST01_MCBCMA1Q_0x02011672,l_data_buffer4_64); if(rc) return rc;
+ rc_num = l_data_buffer1_64.setOr(l_data_buffer4_64,0,64);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
//rc_num = l_data_buffer2_64.insertFromRight(l_sp_mask,16,16);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(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_buffer5_64); if(rc) return rc;
+ rc_num = l_data_buffer2_64.setOr(l_data_buffer5_64,0,64);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,MBS_MCBIST01_MCBCMABQ_0x02011674,l_data_buffer2_64); if(rc) return rc;
//rc = fapiPutScom(i_target_mba,MBS_MCBIST01_MCBCMB1Q_0x02011673,l_data_buffer3_64); if(rc) return rc;
}
@@ -1174,9 +1935,12 @@ fapi::ReturnCode cfg_byte_mask(const fapi::Target & i_target_mba,uint8_t i_rank
}else{
rc_num = l_data_buffer2_64.insertFromRight(l_sp,16,16);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
}
-
+ rc = fapiGetScom(i_target_mba,MBS_MCBIST01_MCBCMB1Q_0x02011673,l_data_buffer4_64); if(rc) return rc;
+ rc_num = l_data_buffer1_64.setOr(l_data_buffer4_64,0,64);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
//rc_num = l_data_buffer2_64.insertFromRight(l_sp_mask,0,16);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
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_buffer5_64); if(rc) return rc;
+ rc_num = l_data_buffer2_64.setOr(l_data_buffer5_64,0,64);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,MBS_MCBIST01_MCBCMABQ_0x02011674,l_data_buffer2_64); if(rc) return rc;
//rc = fapiPutScom(i_target_mba,MBS_MCBIST01_MCBCMA1Q_0x02011672,l_data_buffer3_64); if(rc) return rc;
}
@@ -1191,7 +1955,11 @@ fapi::ReturnCode cfg_byte_mask(const fapi::Target & i_target_mba,uint8_t i_rank
rc_num = l_data_buffer2_64.insertFromRight(l_sp,0,16);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
}
//rc_num = l_data_buffer2_64.insertFromRight(l_sp_mask,16,16);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
+ rc = fapiGetScom(i_target_mba,0x02011772,l_data_buffer4_64); if(rc) return rc;
+ rc_num = l_data_buffer1_64.setOr(l_data_buffer4_64,0,64);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,0x02011772,l_data_buffer1_64); if(rc) return rc;
+ rc = fapiGetScom(i_target_mba,0x02011774,l_data_buffer5_64); if(rc) return rc;
+ rc_num = l_data_buffer2_64.setOr(l_data_buffer5_64,0,64);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,0x02011774,l_data_buffer2_64); if(rc) return rc;
//rc = fapiPutScom(i_target_mba,0x02011773,l_data_buffer3_64); if(rc) return rc;
}
@@ -1206,7 +1974,11 @@ fapi::ReturnCode cfg_byte_mask(const fapi::Target & i_target_mba,uint8_t i_rank
}
//rc_num = l_data_buffer2_64.insertFromRight(l_sp_mask,0,16);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
+ rc = fapiGetScom(i_target_mba,0x02011773,l_data_buffer4_64); if(rc) return rc;
+ rc_num = l_data_buffer1_64.setOr(l_data_buffer4_64,0,64);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,0x02011773,l_data_buffer1_64); if(rc) return rc;
+ rc = fapiGetScom(i_target_mba,0x02011774,l_data_buffer5_64); if(rc) return rc;
+ rc_num = l_data_buffer2_64.setOr(l_data_buffer5_64,0,64);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,0x02011774,l_data_buffer2_64); if(rc) return rc;
//rc = fapiPutScom(i_target_mba,0x02011772,l_data_buffer3_64); if(rc) return rc;
}
@@ -1276,9 +2048,176 @@ fapi::ReturnCode cfg_byte_mask(const fapi::Target & i_target_mba,uint8_t i_rank
return rc;
}
+/*fapi::ReturnCode mss_conversion_testtype( uint8_t l_pattern,mcbist_test_mem &i_mcbtest )
+{
+ ReturnCode rc;
+ FAPI_DBG("%s:value of testtype is %d",l_pattern);
+ switch(l_pattern)
+ {
+case 0 : i_mcbtest = USER_MODE;break;
+case 1 : i_mcbtest = CENSHMOO;break;
+case 2 : i_mcbtest = SUREFAIL;break;
+case 3 : i_mcbtest = MEMWRITE;break;
+case 4 : i_mcbtest = MEMREAD;break;
+case 5 : i_mcbtest = CBR_REFRESH;break;
+case 6 : i_mcbtest = MCBIST_SHORT;break;
+case 7 : i_mcbtest = SHORT_SEQ;break;
+case 8 : i_mcbtest = DELTA_I;break;
+case 9 : i_mcbtest = DELTA_I_LOOP;break;
+case 10 : i_mcbtest = SHORT_RAND;break;
+case 11 : i_mcbtest = LONG1;break;
+case 12 : i_mcbtest = BUS_TAT;break;
+case 13 : i_mcbtest = SIMPLE_FIX;break;
+case 14 : i_mcbtest = SIMPLE_RAND;break;
+case 15 : i_mcbtest = SIMPLE_RAND_2W;break;
+case 16 : i_mcbtest = SIMPLE_RAND_FIXD;break;
+case 17 : i_mcbtest = SIMPLE_RA_RD_WR;break;
+case 18 : i_mcbtest = SIMPLE_RA_RD_R;break;
+case 19 : i_mcbtest = SIMPLE_RA_FD_R;break;
+case 20 : i_mcbtest = SIMPLE_RA_FD_R_INF;break;
+case 21 : i_mcbtest = SIMPLE_SA_FD_R;break;
+case 22 : i_mcbtest = SIMPLE_RA_FD_W;break;
+case 23 : i_mcbtest = INFINITE;break;
+case 24 : i_mcbtest = WR_ONLY;break;
+case 25 : i_mcbtest = W_ONLY;break;
+case 26 : i_mcbtest = R_ONLY;break;
+case 27 : i_mcbtest = W_ONLY_RAND;break;
+case 28 : i_mcbtest = R_ONLY_RAND;break;
+case 29 : i_mcbtest = R_ONLY_MULTI;break;
+case 30 : i_mcbtest = SHORT;break;
+case 31 : i_mcbtest = SIMPLE_RAND_BARI;break;
+case 32 : i_mcbtest = W_R_INFINITE;break;
+case 33 : i_mcbtest = W_R_RAND_INFINITE;break;
+case 34 : i_mcbtest = R_INFINITE1;break;
+case 35 : i_mcbtest = R_INFINITE_RF;break;
+case 36 : i_mcbtest = MARCH;break;
+case 37 : i_mcbtest = SIMPLE_FIX_RF;break;
+case 38 : i_mcbtest = SHMOO_STRESS;break;
+ default : FAPI_DBG("%s:Wrong Test_type,so using default test_type",i_target_mba.toEcmdString());
+ }
+ return rc;
+}*/
+fapi::ReturnCode mss_conversion_testtype( const fapi::Target & i_target_mba,uint8_t l_pattern,mcbist_test_mem &i_mcbtest )
+{
+ ReturnCode rc;
+ //uint8_t l_print = 0;
+ //rc = FAPI_ATTR_GET(ATTR_MCBIST_PRINTING_DISABLE, &i_target_mba,l_print); if(rc) return rc;
+ FAPI_INF("%s:value of testtype is %d",i_target_mba.toEcmdString(),l_pattern);
+ switch(l_pattern)
+ {
+case 0 : i_mcbtest = USER_MODE;FAPI_INF("%s:TESTTYPE :USER_MODE",i_target_mba.toEcmdString());break;
+case 1 : i_mcbtest = CENSHMOO;FAPI_INF("%s:TESTTYPE :CENSHMOO",i_target_mba.toEcmdString());break;
+case 2 : i_mcbtest = SUREFAIL;FAPI_INF("%s:TESTTYPE :SUREFAIL",i_target_mba.toEcmdString());break;
+case 3 : i_mcbtest = MEMWRITE;FAPI_INF("%s:TESTTYPE :MEMWRITE",i_target_mba.toEcmdString());break;
+case 4 : i_mcbtest = MEMREAD;FAPI_INF("%s:TESTTYPE :MEMREAD",i_target_mba.toEcmdString());break;
+case 5 : i_mcbtest = CBR_REFRESH;FAPI_INF("%s:TESTTYPE :CBR_REFRESH",i_target_mba.toEcmdString());break;
+case 6 : i_mcbtest = MCBIST_SHORT;FAPI_INF("%s:TESTTYPE :MCBIST_SHORT",i_target_mba.toEcmdString());break;
+case 7 : i_mcbtest = SHORT_SEQ;FAPI_INF("%s:TESTTYPE :SHORT_SEQ",i_target_mba.toEcmdString());break;
+case 8 : i_mcbtest = DELTA_I;FAPI_INF("%s:TESTTYPE :DELTA_I",i_target_mba.toEcmdString());break;
+case 9 : i_mcbtest = DELTA_I_LOOP;FAPI_INF("%s:TESTTYPE :DELTA_I_LOOP",i_target_mba.toEcmdString());break;
+case 10 : i_mcbtest = SHORT_RAND;FAPI_INF("%s:TESTTYPE :SHORT_RAND",i_target_mba.toEcmdString());break;
+case 11 : i_mcbtest = LONG1;FAPI_INF("%s:TESTTYPE :LONG1",i_target_mba.toEcmdString());break;
+case 12 : i_mcbtest = BUS_TAT;FAPI_INF("%s:TESTTYPE :BUS_TAT",i_target_mba.toEcmdString());break;
+case 13 : i_mcbtest = SIMPLE_FIX;FAPI_INF("%s:TESTTYPE :SIMPLE_FIX",i_target_mba.toEcmdString());break;
+case 14 : i_mcbtest = SIMPLE_RAND;FAPI_INF("%s:TESTTYPE :SIMPLE_RAND",i_target_mba.toEcmdString());break;
+case 15 : i_mcbtest = SIMPLE_RAND_2W;FAPI_INF("%s:TESTTYPE :SIMPLE_RAND_2W",i_target_mba.toEcmdString());break;
+case 16 : i_mcbtest = SIMPLE_RAND_FIXD;FAPI_INF("%s:TESTTYPE :SIMPLE_RAND_FIXD",i_target_mba.toEcmdString());break;
+case 17 : i_mcbtest = SIMPLE_RA_RD_WR;FAPI_INF("%s:TESTTYPE :SIMPLE_RA_RD_WR",i_target_mba.toEcmdString());break;
+case 18 : i_mcbtest = SIMPLE_RA_RD_R;FAPI_INF("%s:TESTTYPE :SIMPLE_RA_RD_R",i_target_mba.toEcmdString());break;
+case 19 : i_mcbtest = SIMPLE_RA_FD_R;FAPI_INF("%s:TESTTYPE :SIMPLE_RA_FD_R",i_target_mba.toEcmdString());break;
+case 20 : i_mcbtest = SIMPLE_RA_FD_R_INF;FAPI_INF("%s:TESTTYPE :SIMPLE_RA_FD_R_INF",i_target_mba.toEcmdString());break;
+case 21 : i_mcbtest = SIMPLE_SA_FD_R;FAPI_INF("%s:TESTTYPE :SIMPLE_SA_FD_R",i_target_mba.toEcmdString());break;
+case 22 : i_mcbtest = SIMPLE_RA_FD_W;FAPI_INF("%s:TESTTYPE :SIMPLE_RA_FD_W",i_target_mba.toEcmdString());break;
+case 23 : i_mcbtest = INFINITE;FAPI_INF("%s:TESTTYPE :INFINITE",i_target_mba.toEcmdString());break;
+case 24 : i_mcbtest = WR_ONLY;FAPI_INF("%s:TESTTYPE :WR_ONLY",i_target_mba.toEcmdString());break;
+case 25 : i_mcbtest = W_ONLY;FAPI_INF("%s:TESTTYPE :W_ONLY",i_target_mba.toEcmdString());break;
+case 26 : i_mcbtest = R_ONLY;FAPI_INF("%s:TESTTYPE :R_ONLY",i_target_mba.toEcmdString());break;
+case 27 : i_mcbtest = W_ONLY_RAND;FAPI_INF("%s:TESTTYPE :W_ONLY_RAND",i_target_mba.toEcmdString());break;
+case 28 : i_mcbtest = R_ONLY_RAND;FAPI_INF("%s:TESTTYPE :R_ONLY_RAND",i_target_mba.toEcmdString());break;
+case 29 : i_mcbtest = R_ONLY_MULTI;FAPI_INF("%s:TESTTYPE :R_ONLY_MULTI",i_target_mba.toEcmdString());break;
+case 30 : i_mcbtest = SHORT;FAPI_INF("%s:TESTTYPE :SHORT",i_target_mba.toEcmdString());break;
+case 31 : i_mcbtest = SIMPLE_RAND_BARI;FAPI_INF("%s:TESTTYPE :SIMPLE_RAND_BARI",i_target_mba.toEcmdString());break;
+case 32 : i_mcbtest = W_R_INFINITE;FAPI_INF("%s:TESTTYPE :W_R_INFINITE",i_target_mba.toEcmdString());break;
+case 33 : i_mcbtest = W_R_RAND_INFINITE;FAPI_INF("%s:TESTTYPE :W_R_RAND_INFINITE",i_target_mba.toEcmdString());break;
+case 34 : i_mcbtest = R_INFINITE1;FAPI_INF("%s:TESTTYPE :R_INFINITE1",i_target_mba.toEcmdString());break;
+case 35 : i_mcbtest = R_INFINITE_RF;FAPI_INF("%s:TESTTYPE :R_INFINITE_RF",i_target_mba.toEcmdString());break;
+case 36 : i_mcbtest = MARCH;FAPI_INF("%s:TESTTYPE :MARCH",i_target_mba.toEcmdString());break;
+case 37 : i_mcbtest = SIMPLE_FIX_RF;FAPI_INF("%s:TESTTYPE :SIMPLE_FIX_RF",i_target_mba.toEcmdString());break;
+case 38 : i_mcbtest = SHMOO_STRESS;FAPI_INF("%s:TESTTYPE :SHMOO_STRESS",i_target_mba.toEcmdString());break;
+case 39 : i_mcbtest = SIMPLE_RAND_RA;FAPI_INF("%s:TESTTYPE :SIMPLE_RAND_RA",i_target_mba.toEcmdString());break;
+case 40 : i_mcbtest = SIMPLE_FIX_RA;FAPI_INF("%s:TESTTYPE :SIMPLE_FIX_RA",i_target_mba.toEcmdString());break;
+case 41 : i_mcbtest = SIMPLE_FIX_RF_RA;FAPI_INF("%s:TESTTYPE :SIMPLE_FIX_RF_RA",i_target_mba.toEcmdString());break;
+case 42 : i_mcbtest = TEST_RR;FAPI_INF("%s:TESTTYPE :TEST_RR",i_target_mba.toEcmdString());break;
+case 43 : i_mcbtest = TEST_RF;FAPI_INF("%s:TESTTYPE :TEST_RF",i_target_mba.toEcmdString());break;
+
+default : FAPI_INF("%s:Wrong Test_type,so using default test_type",i_target_mba.toEcmdString());
+ }
-
+ return rc;
}
+fapi::ReturnCode mss_conversion_data(const fapi::Target & i_target_mba, uint8_t l_pattern,mcbist_data_gen &i_mcbpatt)
+{
+ ReturnCode rc;
+ //uint8_t l_print = 0;
+ //rc = FAPI_ATTR_GET(ATTR_MCBIST_PRINTING_DISABLE, &i_target_mba,l_print); if(rc) return rc;
+ FAPI_INF("%s:value of pattern is %d",i_target_mba.toEcmdString(),l_pattern);
+ switch(l_pattern)
+ {
+ case 0 : i_mcbpatt = ABLE_FIVE;FAPI_INF("%s:PATTERN :ABLE_FIVE",i_target_mba.toEcmdString());break;
+ case 1 : i_mcbpatt = USR_MODE;FAPI_INF("%s:PATTERN :USER_MODE",i_target_mba.toEcmdString());break;
+ case 2 : i_mcbpatt = ONEHOT;FAPI_INF("%s:PATTERN :ONEHOT",i_target_mba.toEcmdString());break;
+ case 3 : i_mcbpatt = DQ0_00011111_RESTALLONE;FAPI_INF("%s:PATTERN :DQ0_00011111_RESTALLONE",i_target_mba.toEcmdString());break;
+ case 4 : i_mcbpatt = DQ0_11100000_RESTALLZERO;FAPI_INF("%s:PATTERN :DQ0_11100000_RESTALLZERO",i_target_mba.toEcmdString());break;
+ case 5 : i_mcbpatt = ALLZERO;FAPI_INF("%s:PATTERN :ALLZERO",i_target_mba.toEcmdString());break;
+ case 6 : i_mcbpatt = ALLONE;FAPI_INF("%s:PATTERN :ALLONE",i_target_mba.toEcmdString());break;
+ case 7 : i_mcbpatt = BYTE_BURST_SIGNATURE;FAPI_INF("%s:PATTERN :BYTE_BURST_SIGNATURE",i_target_mba.toEcmdString());break;
+ case 8 : i_mcbpatt = BYTE_BURST_SIGNATURE_V1;FAPI_INF("%s:PATTERN :BYTE_BURST_SIGNATURE_V1",i_target_mba.toEcmdString());break;
+ case 9 : i_mcbpatt = BYTE_BURST_SIGNATURE_V2;FAPI_INF("%s:PATTERN :BYTE_BURST_SIGNATURE_V2",i_target_mba.toEcmdString());break;
+ case 10 : i_mcbpatt = BYTE_BURST_SIGNATURE_V3;FAPI_INF("%s:PATTERN :BYTE_BURST_SIGNATURE_V3",i_target_mba.toEcmdString());break;
+ case 11 : i_mcbpatt = DATA_GEN_DELTA_I;FAPI_INF("%s:PATTERN :DATA_GEN_DELTA_I",i_target_mba.toEcmdString());break;
+ case 12 : i_mcbpatt = MCBIST_2D_CUP_PAT0;FAPI_INF("%s:PATTERN :MCBIST_2D_CUP_PAT0",i_target_mba.toEcmdString());break;
+ case 13 : i_mcbpatt = MPR;FAPI_INF("%s:PATTERN :MPR",i_target_mba.toEcmdString());break;
+ case 14 : i_mcbpatt = MPR03;FAPI_INF("%s:PATTERN :MPR03",i_target_mba.toEcmdString());break;
+ case 15 : i_mcbpatt = MPR25;FAPI_INF("%s:PATTERN :MPR25",i_target_mba.toEcmdString());break;
+ case 16 : i_mcbpatt = MPR47;FAPI_INF("%s:PATTERN :MPR47",i_target_mba.toEcmdString());break;
+ case 17 : i_mcbpatt = DELTA_I1;FAPI_INF("%s:PATTERN :DELTA_I1",i_target_mba.toEcmdString());break;
+ case 18 : i_mcbpatt = MCBIST_2D_CUP_PAT1;FAPI_INF("%s:PATTERN :MCBIST_2D_CUP_PAT1",i_target_mba.toEcmdString());break;
+ case 19 : i_mcbpatt = MHC_55;FAPI_INF("%s:PATTERN :MHC_55",i_target_mba.toEcmdString());break;
+ case 20 : i_mcbpatt = MHC_DQ_SIM;FAPI_INF("%s:PATTERN :MHC_DQ_SIM",i_target_mba.toEcmdString());break;
+ case 21 : i_mcbpatt = MCBIST_2D_CUP_PAT2;FAPI_INF("%s:PATTERN :MCBIST_2D_CUP_PAT2",i_target_mba.toEcmdString());break;
+ case 22 : i_mcbpatt = MCBIST_2D_CUP_PAT3;FAPI_INF("%s:PATTERN :MCBIST_2D_CUP_PAT3",i_target_mba.toEcmdString());break;
+ case 23 : i_mcbpatt = MCBIST_2D_CUP_PAT4;FAPI_INF("%s:PATTERN :MCBIST_2D_CUP_PAT4",i_target_mba.toEcmdString());break;
+ case 24 : i_mcbpatt = MCBIST_2D_CUP_PAT5;FAPI_INF("%s:PATTERN :MCBIST_2D_CUP_PAT5",i_target_mba.toEcmdString());break;
+ case 25 : i_mcbpatt = MCBIST_2D_CUP_PAT6;FAPI_INF("%s:PATTERN :MCBIST_2D_CUP_PAT6",i_target_mba.toEcmdString());break;
+ case 26 : i_mcbpatt = MCBIST_2D_CUP_PAT7;FAPI_INF("%s:PATTERN :MCBIST_2D_CUP_PAT7",i_target_mba.toEcmdString());break;
+ case 27 : i_mcbpatt = MCBIST_2D_CUP_PAT8;FAPI_INF("%s:PATTERN :MCBIST_2D_CUP_PAT8",i_target_mba.toEcmdString());break;
+ case 28 : i_mcbpatt = MCBIST_2D_CUP_PAT9;FAPI_INF("%s:PATTERN :MCBIST_2D_CUP_PAT9",i_target_mba.toEcmdString());break;
+ case 29 : i_mcbpatt = CWLPATTERN;FAPI_INF("%s:PATTERN :CWLPATTERN",i_target_mba.toEcmdString());break;
+ case 30 : i_mcbpatt = GREY1;FAPI_INF("%s:PATTERN :GREY1",i_target_mba.toEcmdString());break;
+ case 31 : i_mcbpatt = DC_ONECHANGE;FAPI_INF("%s:PATTERN :DC_ONECHANGE",i_target_mba.toEcmdString());break;
+ case 32 : i_mcbpatt = DC_ONECHANGEDIAG;FAPI_INF("%s:PATTERN :DC_ONECHANGEDIAG",i_target_mba.toEcmdString());break;
+ case 33 : i_mcbpatt = GREY2;FAPI_INF("%s:PATTERN :GREY2",i_target_mba.toEcmdString());break;
+ case 34 : i_mcbpatt = FIRST_XFER;FAPI_INF("%s:PATTERN :FIRST_XFER",i_target_mba.toEcmdString());break;
+ case 35 : i_mcbpatt = MCBIST_222_XFER;FAPI_INF("%s:PATTERN :MCBIST_222_XFER",i_target_mba.toEcmdString());break;
+ case 36 : i_mcbpatt = MCBIST_333_XFER;FAPI_INF("%s:PATTERN :MCBIST_333_XFER",i_target_mba.toEcmdString());break;
+ case 37 : i_mcbpatt = MCBIST_444_XFER;FAPI_INF("%s:PATTERN :MCBIST_444_XFER",i_target_mba.toEcmdString());break;
+ case 38 : i_mcbpatt = MCBIST_555_XFER;FAPI_INF("%s:PATTERN :MCBIST_555_XFER",i_target_mba.toEcmdString());break;
+ case 39 : i_mcbpatt = MCBIST_666_XFER;FAPI_INF("%s:PATTERN :MCBIST_666_XFER",i_target_mba.toEcmdString());break;
+ case 40 : i_mcbpatt = MCBIST_777_XFER;FAPI_INF("%s:PATTERN :MCBIST_777_XFER",i_target_mba.toEcmdString());break;
+ case 41 : i_mcbpatt = MCBIST_888_XFER;FAPI_INF("%s:PATTERN :MCBIST_888_XFER",i_target_mba.toEcmdString());break;
+ case 42 : i_mcbpatt = FIRST_XFER_X4MODE;FAPI_INF("%s:PATTERN :FIRST_XFER_X4MODE",i_target_mba.toEcmdString());break;
+ case 43 : i_mcbpatt = MCBIST_LONG;FAPI_INF("%s:PATTERN :MCBIST_LONG",i_target_mba.toEcmdString());break;
+ case 44 : i_mcbpatt = PSEUDORANDOM;FAPI_INF("%s:PATTERN :PSEUDORANDOM",i_target_mba.toEcmdString());break;
+ case 45 : i_mcbpatt = CASTLE;FAPI_INF("%s:PATTERN :CASTLE",i_target_mba.toEcmdString());break;
+
+ default : FAPI_INF("%s:Wrong Data Pattern,so using default pattern",i_target_mba.toEcmdString());
+ }
+
+ return rc;
+}
+
+
+}
diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_shmoo_common.H b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_shmoo_common.H
index d6438580e..37e7c9b91 100644
--- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_shmoo_common.H
+++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_shmoo_common.H
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: mss_shmoo_common.H,v 1.12 2013/03/20 17:18:38 sasethur Exp $
+// $Id: mss_shmoo_common.H,v 1.16 2013/08/08 11:09:15 sasethur Exp $
// *!***************************************************************************
// *! (C) Copyright International Business Machines Corp. 1997, 1998
// *! All Rights Reserved -- Property of IBM
@@ -38,6 +38,7 @@
// CHANGE HISTORY:
//------------------------------------------------------------------------------
// Version:|Author: | Date: | Comment:
+// 1.15 |abhijit |8/8/12 | Updated Review Comments
// 1.9 |aditya |12/6/12 | Updated Review Comments
// 1.8 | abhijit| 15/11/12| made changes fw review comments
// 1.7 | abhijit| 22/10/12| made changes to variables
@@ -52,7 +53,7 @@ enum shmoo_type_t { TEST_NONE=0,MCBIST=1,WR_EYE=2, WRT_DQS=4,RD_EYE=8,RD_GATE=16
enum shmoo_algorithm_t { SEQ_LIN}; // Parallel bytes/ranks here .. no parallel targets in HB
const uint8_t NINE = 9;
const uint8_t MAX_RPS=4;// 4 Rank pairs in this design
-const uint8_t MAX_SHMOO=4;
+const uint8_t MAX_SHMOO=18;
const uint8_t MAX_RANK_DIMM=4;
const uint8_t MAX_NIBBLES=2;
const uint8_t MAX_BITS=4;
@@ -64,6 +65,11 @@ const uint16_t error_threshold_count=400;
const uint8_t MAX_PORT = 2;
const uint8_t MAX_BYTE = 10;
const uint8_t MAX_RANK = 8;
+const uint8_t MAX_CMDS = 3;
+const uint8_t MAX_ADDR = 20;
+const uint8_t MAX_CNTRL = 20;
+const uint8_t MAX_CLK = 8;
+
//const uint8_t MAX_NIBBLE = 1;
//! Defines the structure of a knob ..Holds static info regarding a knob
@@ -85,7 +91,25 @@ struct shmoo_knob_data_t{
uint32_t rb_regval[MAX_DQ][MAX_RPS];// Right Bound register/Hex value
uint32_t total_margin[MAX_DQ][MAX_RPS]; //Left bound+ right bound value
uint32_t nom_val[MAX_DQ][MAX_RPS]; // nominal value of this instance of the knob
+ uint32_t last_pass[MAX_DQ][MAX_RPS];
+ uint32_t last_fail[MAX_DQ][MAX_RPS];
+ uint32_t curr_val[MAX_DQ][MAX_RPS];
+ uint32_t curr_diff[MAX_DQ][MAX_RPS];
uint32_t right_margin_val[MAX_DQ][MAX_RPS];
uint32_t left_margin_val[MAX_DQ][MAX_RPS];
+ uint32_t right_err_cnt[MAX_DQ][MAX_RPS];
+ uint32_t left_err_cnt[MAX_DQ][MAX_RPS];
+ uint32_t cmd_lb_regval[MAX_PORT][MAX_CMDS][SCHMOO_NIBBLES]; // Left Bound register/Hex value
+ uint32_t cmd_rb_regval[MAX_PORT][MAX_CMDS][SCHMOO_NIBBLES];// Right Bound register/Hex value
+ uint32_t cmd_total_margin[MAX_PORT][MAX_CMDS][SCHMOO_NIBBLES]; //Left bound+ right bound value
+ uint32_t cmd_nom_val[MAX_CMDS]; // nominal value of this instance of the knob
+ uint32_t cmd_right_margin_val[MAX_PORT][MAX_CMDS][SCHMOO_NIBBLES];
+ uint32_t cmd_left_margin_val[MAX_PORT][MAX_CMDS][SCHMOO_NIBBLES];
+ uint32_t addr_nom_val[MAX_ADDR];
+ uint32_t cntrl_nom_val[MAX_CNTRL];
+ uint32_t clk_nom_val[MAX_CLK];
+ uint32_t datadis_nom_val[MAX_CLK];
+ uint32_t offset[SCHMOO_NIBBLES];
+
};
#endif
diff --git a/src/usr/hwpf/hwp/mc_config/mss_eff_config/mss_eff_config_shmoo.C b/src/usr/hwpf/hwp/mc_config/mss_eff_config/mss_eff_config_shmoo.C
index 86037b676..9584518d2 100644
--- a/src/usr/hwpf/hwp/mc_config/mss_eff_config/mss_eff_config_shmoo.C
+++ b/src/usr/hwpf/hwp/mc_config/mss_eff_config/mss_eff_config_shmoo.C
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: mss_eff_config_shmoo.C,v 1.6 2013/06/06 05:45:16 sauchadh Exp $
+// $Id: mss_eff_config_shmoo.C,v 1.7 2013/08/09 17:54:08 bellows Exp $
// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/centaur/working/procedures/ipl/fapi/mss_eff_config_shmoo.C,v $
//------------------------------------------------------------------------------
// *! (C) Copyright International Business Machines Corp. 2011
@@ -46,13 +46,12 @@
// 1.4 | sauchadh |10-May-13| Fixed FW comments
// 1.5 | sauchadh |15-May-13| Fixed FW comments
// 1.6 | sauchadh |6-Jun-13 | Added some more attributes
+// 1.7 | bellows |09-Aug-13| Set default pattern to 0, per Sarvanan Req
//----------------------------------------------------------------------
// My Includes
//----------------------------------------------------------------------
-
-
//----------------------------------------------------------------------
// Includes
//----------------------------------------------------------------------
@@ -71,7 +70,7 @@ fapi::ReturnCode mss_eff_config_shmoo(const fapi::Target & i_target_mba) {
const char * const PROCEDURE_NAME = "mss_eff_config_shmoo";
FAPI_INF("*** Running %s on %s ... ***", PROCEDURE_NAME, i_target_mba.toEcmdString());
- uint32_t datapattern=8;
+ uint32_t datapattern=0; // mdb - type 8 is not valid per Saravanan's Sametime
uint32_t testtype=1;
uint8_t addr_modes=1;
uint8_t rank=0;
OpenPOWER on IntegriCloud