From a816a9a252dbac72cc3a574f16f0cda0efaa38b4 Mon Sep 17 00:00:00 2001 From: Thi Tran Date: Thu, 29 Aug 2013 08:50:45 -0500 Subject: Hostboot - Updated HWPs from defect SW221626 (DIMM 2.0 support) CQ: SW221626 Change-Id: Iab65ce796154aaad5b409c3d1adc0819f026f9bf Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/5966 Tested-by: Jenkins Server Reviewed-by: A. Patrick Williams III --- src/usr/hwpf/hwp/dram_training/dram_training.C | 5 +- .../mss_draminit_trainadv/mss_access_delay_reg.C | 422 ++- .../mss_draminit_trainadv/mss_access_delay_reg.H | 16 +- .../mss_draminit_training_advanced.C | 324 +- .../mss_draminit_training_advanced.H | 12 +- .../mss_draminit_trainadv/mss_generic_shmoo.C | 3961 ++++++++++++++++++-- .../mss_draminit_trainadv/mss_generic_shmoo.H | 48 +- .../mss_draminit_trainadv/mss_mcbist.C | 905 +++-- .../mss_draminit_trainadv/mss_mcbist.H | 56 +- .../mss_draminit_trainadv/mss_mcbist_address.C | 33 +- .../mss_draminit_trainadv/mss_mcbist_common.C | 1333 ++++++- .../mss_draminit_trainadv/mss_shmoo_common.H | 28 +- .../mss_eff_config/mss_eff_config_shmoo.C | 7 +- 13 files changed, 5999 insertions(+), 1151 deletions(-) (limited to 'src') 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(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) @@ -1684,6 +1984,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 #include #include -//#include -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 -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 #include "mss_generic_shmoo.H" #include "mss_mcbist.H" +#include +// #include +// #include #include #include - +//#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;pl_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,12 +1415,14 @@ fapi::ReturnCode generic_shmoo::knob_update(const fapi::Target & i_target,bound_ for (l_n=0; l_nSHMOO[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_pSHMOO[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_p0)&&(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_pl_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_pl_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_pl_max_limit){ + schmoo_error_map[l_p][rank][l_n]=1; + schmoo_error_map[l_p][rank][l_n+1]=1; + } + if((schmoo_error_map[l_p][rank][l_n]==1)||(schmoo_error_map[l_p][rank][l_n+1]==1)){ + + schmoo_error_map[l_p][rank][l_n]=1; + schmoo_error_map[l_p][rank][l_n+1]=1; + } + + l_n=l_n+1; + l_dqs=l_dqs+1; + } + + + } + + } + rc=do_mcbist_test(i_target); + if(rc) + { + FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); + return rc; + } + + rc=check_error_map(i_target,l_p,pass); + if(rc) + { + FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); + return rc; + } + + } + + + for (l_p=0;l_pl_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= 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; - - } - } + } + } + + } + 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_prun + 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 +// #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_indexrun + 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= 21) + { + io_num0 = 21; + } + for(l_index=0;l_index= 21) + { + io_num1 = 21; + } + for(l_index=0;l_index3) { 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; -- cgit v1.2.1