diff options
author | Thi Tran <thi@us.ibm.com> | 2013-12-23 14:43:51 -0600 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2014-01-09 15:22:40 -0600 |
commit | 39cb3971365041306ccbefc54717b588f74a4208 (patch) | |
tree | f0e4fd2ac58e525eba26b1b78a0107c160053f17 /src/usr/hwpf/hwp/dram_training | |
parent | 56278b56e0d258db65ac8bbc59c5819d70c06abc (diff) | |
download | talos-hostboot-39cb3971365041306ccbefc54717b588f74a4208.tar.gz talos-hostboot-39cb3971365041306ccbefc54717b588f74a4208.zip |
INITPROC: Hostboot SW238941 Adv training for Qualification/MFG testing
Change-Id: Ia9765917f7534b3da45d1a7a7ee0b1d50ae1e438
CQ:SW238941
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/7854
Tested-by: Jenkins Server
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/hwpf/hwp/dram_training')
11 files changed, 2513 insertions, 2745 deletions
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 01b24dcee..0029662f7 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 @@ -5,7 +5,7 @@ /* */ /* IBM CONFIDENTIAL */ /* */ -/* COPYRIGHT International Business Machines Corp. 2012,2013 */ +/* COPYRIGHT International Business Machines Corp. 2012,2014 */ /* */ /* p1 */ /* */ @@ -20,7 +20,7 @@ /* Origin: 30 */ /* */ /* IBM_PROLOG_END_TAG */ -// $Id: mss_access_delay_reg.C,v 1.20 2013/10/22 06:17:40 sasethur Exp $ +// $Id: mss_access_delay_reg.C,v 1.21 2013/12/16 10:15:21 sasethur Exp $ //------------------------------------------------------------------------------ // *! (C) Copyright International Business Machines Corp. 2011 // *! All Rights Reserved -- Property of IBM @@ -54,7 +54,7 @@ // 1.16 | sauchadh |12-jun-13| ADDED CAC registers for read dqs // 1.17 | sauchadh |18-Jul-13| Added data bit disable registers // 1.19 | abhijsau |9-Oct-13 | Added mss_c4_phy() function - +// 1.21 | abhijsau |16-Dec-13| Added function for fw //---------------------------------------------------------------------- // My Includes @@ -3269,7 +3269,1101 @@ fapi::ReturnCode mss_c4_phy(const fapi::Target & i_target_mba,uint8_t i_port, ui return rc; } +fapi::ReturnCode mss_access_delay_reg_schmoo(const fapi::Target & i_target_mba, access_type_t i_access_type_e, uint8_t i_port_u8, uint8_t i_rank_u8, input_type_t i_input_type_e, uint8_t i_input_index_u8,uint8_t i_verbose,uint16_t &io_value_u16) +{ + fapi::ReturnCode rc; + + const uint8_t max_rp=8; + uint8_t l_val=0; + uint8_t l_dram_width=0; + scom_location l_out; + uint64_t l_scom_add=0x0ull; + uint32_t l_sbit=0; + uint32_t l_len=0; + uint32_t l_value_u32=0; + uint32_t rc_num=0; + ecmdDataBufferBase data_buffer_64(64); + ecmdDataBufferBase data_buffer_32(32); + ecmdDataBufferBase out(16); + uint32_t l_output=0; + uint32_t l_start=0; + uint8_t l_rank_pair=9; + uint8_t l_rankpair_table[max_rp]={255}; + uint8_t l_dimmtype=0; + uint8_t l_block=0; + uint8_t l_lane=0; + uint8_t l_start_bit=0; + uint8_t l_len8=0; + input_type l_type; + 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 = 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; + rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, &i_target_mba, l_mbapos); if(rc) return rc; + + if(i_verbose==1) + { + FAPI_INF("dimm type=%d",l_dimmtype); + FAPI_INF("rank pair=%d",l_rank_pair); + } + if((i_port_u8 >1) || (l_mbapos>1)) + { + FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR); + FAPI_ERR("Wrong target or port specified rc = 0x%08X", uint32_t(rc)); + return rc; + } + + if((l_dram_width ==fapi::ENUM_ATTR_EFF_DRAM_WIDTH_X4) || (l_dram_width ==fapi::ENUM_ATTR_EFF_DRAM_WIDTH_X8)) // Checking for dram width here so that checking can be skipped in called function + { + if(i_verbose==1) + { + FAPI_INF("dram width=%d",l_dram_width); + } + } + + else + { + FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR); + FAPI_ERR("Wrong dram width specified rc = 0x%08X", uint32_t(rc)); + return rc; + } + + if(i_input_type_e==RD_DQ || i_input_type_e==WR_DQ) + { + + if(l_dimmtype==fapi::ENUM_ATTR_EFF_DIMM_TYPE_CDIMM) + { + l_type=CDIMM_DQ; + + if(i_input_index_u8>l_CDIMM_dqmax) + { + FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR); + FAPI_ERR("Wrong input index specified rc = 0x%08X" ,uint32_t(rc)); + return rc; + } + + } + else if((l_dimmtype==fapi::ENUM_ATTR_EFF_DIMM_TYPE_RDIMM) || (l_dimmtype==fapi::ENUM_ATTR_EFF_DIMM_TYPE_UDIMM) || (l_dimmtype==fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM)) + { + l_type=ISDIMM_DQ; + if(i_input_index_u8>l_ISDIMM_dqmax) + { + FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR); + FAPI_ERR("Wrong input index specified rc = 0x%08X", uint32_t(rc)); + return rc; + } + } + else + { + FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR); + FAPI_ERR("Wrong dimm type specified rc = 0x%08X", uint32_t(rc)); + return rc; + } + + + rc=rosetta_map(i_target_mba,i_port_u8,l_type,i_input_index_u8,i_verbose,l_val); if(rc) return rc; + + if(i_verbose==1) + { + FAPI_INF("C4 value is=%d",l_val); + } + rc=cross_coupled(i_target_mba,i_port_u8,l_rank_pair,i_input_type_e,l_val,i_verbose,l_out); if(rc) return rc; + if(i_verbose==1) + { + FAPI_INF("scom_address=%llX",l_out.scom_addr); + FAPI_INF("start bit=%d",l_out.start_bit); + FAPI_INF("length=%d",l_out.bit_length); + } + l_scom_add=l_out.scom_addr; + l_sbit=l_out.start_bit; + 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) + { + + if(l_dimmtype==fapi::ENUM_ATTR_EFF_DIMM_TYPE_CDIMM) + { + l_type=CDIMM_DQS; + } + else if((l_dimmtype==fapi::ENUM_ATTR_EFF_DIMM_TYPE_RDIMM) || (l_dimmtype==fapi::ENUM_ATTR_EFF_DIMM_TYPE_UDIMM) || (l_dimmtype==fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM)) + { + l_type=ISDIMM_DQS; + } + else + { + FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR); + FAPI_ERR("Wrong dimm type specified rc = 0x%08X", uint32_t(rc)); + return rc; + } + + + rc=rosetta_map(i_target_mba,i_port_u8,l_type,i_input_index_u8,i_verbose,l_val); if(rc) return rc; + if(i_verbose==1) + { + FAPI_INF("C4 value is=%d",l_val); + } + rc=cross_coupled(i_target_mba,i_port_u8,l_rank_pair,i_input_type_e,l_val,i_verbose,l_out); if(rc) return rc; + if(i_verbose==1) + { + FAPI_INF("scom_address=%llX",l_out.scom_addr); + FAPI_INF("start bit=%d",l_out.start_bit); + FAPI_INF("length=%d",l_out.bit_length); + } + l_scom_add=l_out.scom_addr; + l_sbit=l_out.start_bit; + l_len=l_out.bit_length; + + } + + + else if(i_input_type_e==RAW_RDCLK_0 || i_input_type_e==RAW_RDCLK_1 || i_input_type_e==RAW_RDCLK_2 || i_input_type_e==RAW_RDCLK_3 || i_input_type_e==RAW_RDCLK_4) + { + if(i_input_type_e==RAW_RDCLK_0) + { + l_block=0; + } + + else if(i_input_type_e==RAW_RDCLK_1) + { + l_block=1; + } + + else if(i_input_type_e==RAW_RDCLK_2) + { + l_block=2; + } + + else if(i_input_type_e==RAW_RDCLK_3) + { + l_block=3; + } + + else + { + l_block=4; + } + if(i_input_index_u8<=3) // 4 delay values for RDCLK + { + l_lane=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=RAW_RDCLK; + if(i_verbose==1) + { + FAPI_INF("block=%d",l_block); + } + 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==RAW_DQSCLK_0 || i_input_type_e==RAW_DQSCLK_1 || i_input_type_e==RAW_DQSCLK_2 || i_input_type_e==RAW_DQSCLK_3 || i_input_type_e==RAW_DQSCLK_4) + { + if(i_input_type_e==RAW_DQSCLK_0) + { + l_block=0; + } + + else if(i_input_type_e==RAW_DQSCLK_1) + { + l_block=1; + } + + else if(i_input_type_e==RAW_DQSCLK_2) + { + l_block=2; + } + + else if(i_input_type_e==RAW_DQSCLK_3) + { + l_block=3; + } + + else + { + l_block=4; + } + if(i_input_index_u8<=3) // 4 delay values for DQSCLK + { + l_lane=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=RAW_DQSCLK; + if(i_verbose==1) + { + FAPI_INF("block=%d",l_block); + } + 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==RAW_WR_DQ_0 || i_input_type_e==RAW_WR_DQ_1 || i_input_type_e==RAW_WR_DQ_2 || i_input_type_e==RAW_WR_DQ_3 || i_input_type_e==RAW_WR_DQ_4) + { + if(i_input_type_e==RAW_WR_DQ_0) + { + l_block=0; + } + else if(i_input_type_e==RAW_WR_DQ_1) + { + l_block=1; + } + else if(i_input_type_e==RAW_WR_DQ_2) + { + l_block=2; + } + else if(i_input_type_e==RAW_WR_DQ_3) + { + l_block=3; + } + else + { + l_block=4; + } + if(i_input_index_u8<=15) // 16 Write delay values for DQ bits + { + l_lane=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=RAW_WR_DQ; + if(i_verbose==1) + { + FAPI_INF("block=%d",l_block); + FAPI_INF("lane=%d",l_lane); + } + 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==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) + { + if(i_input_type_e==RAW_RD_DQ_0) + { + l_block=0; + } + else if(i_input_type_e==RAW_RD_DQ_1) + { + l_block=1; + } + else if(i_input_type_e==RAW_RD_DQ_2) + { + l_block=2; + } + else if(i_input_type_e==RAW_RD_DQ_3) + { + l_block=3; + } + else + { + l_block=4; + } + if(i_input_index_u8<=15) // 16 read delay values for DQ bits + { + l_lane=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=RAW_RD_DQ; + if(i_verbose==1) + { + FAPI_INF("block=%d",l_block); + FAPI_INF("lane=%d",l_lane); + } + 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==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) + { + if(i_input_type_e==RAW_RD_DQS_0) + { + l_block=0; + } + else if(i_input_type_e==RAW_RD_DQS_1) + { + l_block=1; + } + else if(i_input_type_e==RAW_RD_DQS_2) + { + l_block=2; + } + else if(i_input_type_e==RAW_RD_DQS_3) + { + l_block=3; + } + else + { + l_block=4; + } + if(i_input_index_u8<=3) // 4 Read DQS delay values + { + l_lane=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=RAW_RD_DQS; + if(i_verbose==1) + { + FAPI_INF("block=%d",l_block); + FAPI_INF("lane=%d",l_lane); + } + 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==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) + { + if(i_input_type_e==RAW_DQS_ALIGN_0) + { + l_block=0; + } + else if(i_input_type_e==RAW_DQS_ALIGN_1) + { + l_block=1; + } + else if(i_input_type_e==RAW_DQS_ALIGN_2) + { + l_block=2; + } + else if(i_input_type_e==RAW_DQS_ALIGN_3) + { + l_block=3; + } + else + { + l_block=4; + } + if(i_input_index_u8<=3) // 4 DQS alignment delay values + { + l_lane=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=RAW_DQS_ALIGN; + if(i_verbose==1) + { + FAPI_INF("block=%d",l_block); + FAPI_INF("lane=%d",l_lane); + } + 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==RAW_WR_DQS_0 || i_input_type_e==RAW_WR_DQS_1 || i_input_type_e==RAW_WR_DQS_2 || i_input_type_e==RAW_WR_DQS_3 || i_input_type_e==RAW_WR_DQS_4) + { + if(i_input_type_e==RAW_WR_DQS_0) + { + l_block=0; + } + else if(i_input_type_e==RAW_WR_DQS_1) + { + l_block=1; + } + else if(i_input_type_e==RAW_WR_DQS_2) + { + l_block=2; + } + else if(i_input_type_e==RAW_WR_DQS_3) + { + l_block=3; + } + else + { + l_block=4; + } + if(i_input_index_u8<=3) // 4 Write DQS delay values + { + l_lane=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=RAW_WR_DQS; + if(i_verbose==1) + { + FAPI_INF("block=%d",l_block); + FAPI_INF("lane=%d",l_lane); + } + 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==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) + { + if(i_input_type_e==RAW_SYS_CLK_0) + { + l_block=0; + } + else if(i_input_type_e==RAW_SYS_CLK_1) + { + l_block=1; + } + else if(i_input_type_e==RAW_SYS_CLK_2) + { + l_block=2; + } + else if(i_input_type_e==RAW_SYS_CLK_3) + { + l_block=3; + } + else + { + l_block=4; + } + if(i_input_index_u8==0) // 1 system clock delay value + { + l_lane=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=RAW_SYS_CLK; + if(i_verbose==1) + { + FAPI_INF("block=%d",l_block); + FAPI_INF("lane=%d",l_lane); + } + 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==RAW_SYS_ADDR_CLK) + { + if(i_input_index_u8<=1) // 1 system address clock delay value + { + l_lane=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=RAW_SYS_ADDR_CLKS0S1; + if(i_verbose==1) + { + FAPI_INF("lane=%d",l_lane); + } + 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==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) + { + if(i_input_type_e==RAW_WR_CLK_0) + { + l_block=0; + } + else if(i_input_type_e==RAW_WR_CLK_1) + { + l_block=1; + } + else if(i_input_type_e==RAW_WR_CLK_2) + { + l_block=2; + } + else if(i_input_type_e==RAW_WR_CLK_3) + { + l_block=3; + } + else + { + l_block=4; + } + if(i_input_index_u8==0) // 1 Write clock delay value + { + l_lane=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=RAW_WR_CLK; + if(i_verbose==1) + { + FAPI_INF("block=%d",l_block); + FAPI_INF("lane=%d",l_lane); + } + 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==RAW_ADDR_0 || i_input_type_e==RAW_ADDR_1 || i_input_type_e==RAW_ADDR_2 || i_input_type_e==RAW_ADDR_3) + { + if(i_input_type_e==RAW_ADDR_0) + { + l_block=0; + } + else if(i_input_type_e==RAW_ADDR_1) + { + l_block=1; + } + else if(i_input_type_e==RAW_ADDR_2) + { + l_block=2; + } + else + { + l_block=3; + } + if(i_input_index_u8<=15) // 16 Addr delay values + { + l_lane=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=RAW_ADDR; + if(i_verbose==1) + { + FAPI_INF("block=%d",l_block); + FAPI_INF("lane=%d",l_lane); + } + 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==RAW_DQS_GATE_0 || i_input_type_e==RAW_DQS_GATE_1 || i_input_type_e==RAW_DQS_GATE_2 || i_input_type_e==RAW_DQS_GATE_3 || i_input_type_e==RAW_DQS_GATE_4) + { + if(i_input_type_e==RAW_DQS_GATE_0) + { + l_block=0; + } + else if(i_input_type_e==RAW_DQS_GATE_1) + { + l_block=1; + } + else if(i_input_type_e==RAW_DQS_GATE_2) + { + l_block=2; + } + else if(i_input_type_e==RAW_DQS_GATE_3) + { + l_block=3; + } + else + { + l_block=4; + } + + if(i_input_index_u8<=3) // 4 Gate Delay values + { + l_lane=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=RAW_DQS_GATE; + if(i_verbose==1) + { + FAPI_INF("block=%d",l_block); + FAPI_INF("lane=%d",l_lane); + } + 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 + { + 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_access_type_e==READ) + { + rc=fapiGetScom(i_target_mba,l_scom_add,data_buffer_64);if(rc) return rc; + rc_num= rc_num | data_buffer_64.extractToRight(&l_output,l_sbit,l_len); + if(rc_num) + { + FAPI_ERR( "ecmd error on l_scom_add extract"); + rc.setEcmdError(rc_num); + return rc; + } + rc_num = data_buffer_32.setWord(0,l_output);if(rc_num) return rc; +io_value_u16=data_buffer_32.getHalfWord(1); + //io_value_u32=l_output; + + //FAPI_INF(" Abhijit Delay value=%d and original=%d",io_value_u16,l_output); + } + + else if(i_access_type_e==WRITE) + { + + 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==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 + } + else if(i_input_type_e==WR_DQ || i_input_type_e==WR_DQS || i_input_type_e==RAW_WR_DQ_0 || i_input_type_e==RAW_WR_DQ_1 || i_input_type_e==RAW_WR_DQ_2 || i_input_type_e==RAW_WR_DQ_3 || i_input_type_e==RAW_WR_DQ_4 || i_input_type_e==RAW_WR_DQS_0 || i_input_type_e==RAW_WR_DQS_1 || i_input_type_e==RAW_WR_DQS_2 || i_input_type_e==RAW_WR_DQS_3 || i_input_type_e==RAW_WR_DQS_4 ) + { + l_start=22; + } + + else if(i_input_type_e==RAW_DQS_GATE_0 || i_input_type_e==RAW_DQS_GATE_1 || i_input_type_e==RAW_DQS_GATE_2 || i_input_type_e==RAW_DQS_GATE_3 || i_input_type_e==RAW_DQS_GATE_4 || i_input_type_e==DQS_GATE) + { + l_start=29; + } + + else if(i_input_type_e==RAW_RDCLK_0 || i_input_type_e==RAW_RDCLK_1 || i_input_type_e==RAW_RDCLK_2 || i_input_type_e==RAW_RDCLK_3 || i_input_type_e==RAW_RDCLK_4 || i_input_type_e==RDCLK || i_input_type_e==RAW_DQSCLK_0 || i_input_type_e==RAW_DQSCLK_1 || i_input_type_e==RAW_DQSCLK_2 || i_input_type_e==RAW_DQSCLK_3 || i_input_type_e==RAW_DQSCLK_4 || i_input_type_e==DQSCLK) + { + 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_u16); + } + rc_num = data_buffer_32.setHalfWord(1,io_value_u16);if(rc_num) return rc; + l_value_u32 = data_buffer_32.getWord(0); + + // FAPI_INF("\n Abhijit the original passed=%d and the changed=%d ",io_value_u16,l_value_u32); + rc=fapiGetScom(i_target_mba,l_scom_add,data_buffer_64);if(rc) return rc; + rc_num=data_buffer_64.insert(l_value_u32,l_sbit,l_len,l_start); + if(rc_num) + { + FAPI_ERR( "ecmd error on l_scom_add extract"); + rc.setEcmdError(rc_num); + return rc; + } + rc=fapiPutScom(i_target_mba,l_scom_add,data_buffer_64); if(rc) return rc; + } + return rc; +} + } // extern "C" 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 885c27688..c74e4dbfe 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 @@ -5,7 +5,7 @@ /* */ /* IBM CONFIDENTIAL */ /* */ -/* COPYRIGHT International Business Machines Corp. 2012,2013 */ +/* COPYRIGHT International Business Machines Corp. 2012,2014 */ /* */ /* p1 */ /* */ @@ -20,7 +20,7 @@ /* Origin: 30 */ /* */ /* IBM_PROLOG_END_TAG */ -//$Id: mss_access_delay_reg.H,v 1.10 2013/10/09 11:28:54 sasethur Exp $ +//$Id: mss_access_delay_reg.H,v 1.11 2013/12/16 10:15:30 sasethur Exp $ //------------------------------------------------------------------------------ // *! (C) Copyright International Business Machines Corp. 2011 // *! All Rights Reserved -- Property of IBM @@ -189,6 +189,8 @@ typedef fapi::ReturnCode (*mss_access_delay_reg_FP_t)(const fapi::Target & i_tar extern "C" { //------------------------------------------------------------------------------ +fapi::ReturnCode mss_access_delay_reg_schmoo(const fapi::Target & i_target_mba, access_type_t i_access_type_e, uint8_t i_port_u8, uint8_t i_rank_u8, input_type_t i_input_type_e, uint8_t i_input_index_u8,uint8_t i_verbose, uint16_t &io_value_u32); + fapi::ReturnCode mss_access_delay_reg(const fapi::Target & i_target_mba, access_type_t i_access_type_e, uint8_t i_port_u8, uint8_t i_rank_u8, input_type_t i_input_type_e, uint8_t i_input_index_u8,uint8_t i_verbose, uint32_t &io_value_u32); fapi::ReturnCode cross_coupled(const fapi::Target & i_target_mba,uint8_t i_port, uint8_t i_rank_pair,input_type_t i_input_type_e,uint8_t i_input_index,uint8_t i_verbose,scom_location& out); 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 93038ede5..d110e4982 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 @@ -5,7 +5,7 @@ /* */ /* IBM CONFIDENTIAL */ /* */ -/* COPYRIGHT International Business Machines Corp. 2012,2013 */ +/* COPYRIGHT International Business Machines Corp. 2012,2014 */ /* */ /* p1 */ /* */ @@ -20,7 +20,7 @@ /* Origin: 30 */ /* */ /* IBM_PROLOG_END_TAG */ -// $Id: mss_draminit_training_advanced.C,v 1.39 2013/10/17 12:59:04 sasethur Exp $ +// $Id: mss_draminit_training_advanced.C,v 1.40 2013/12/17 18:47:27 sasethur Exp $ /* File is created by SARAVANAN SETHURAMAN on Thur 29 Sept 2011. */ //------------------------------------------------------------------------------ @@ -79,6 +79,7 @@ // 1.37 | sasethur |04-Sep-13| Fixed fw review comment // 1.38 | bellows |19-SEP-13| fixed possible buffer overrun found by stradale // 1.39 | abhijsau |17-OCT-13| fixed a logical bug +// 1.40 | abhijsau |17-DEC-13| added creation and deletion of schmoo object // 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 @@ -268,12 +269,12 @@ fapi::ReturnCode mss_draminit_training_advanced_cloned(const fapi::Target & i_ta l_shmoo_type_valid=(shmoo_type_t)l_shmoo_type_valid_t; l_shmoo_param_valid=(shmoo_param)l_shmoo_param_valid_t; - + FAPI_INF("running in simics before attr"); FAPI_INF("+++++++++++++++++++++++++ Read Schmoo Attributes ++++++++++++++++++++++++++"); FAPI_INF("Schmoo param valid = 0x%x on %s", l_shmoo_param_valid, i_target_mba.toEcmdString()); FAPI_INF("Schmoo test valid = 0x%x on %s", l_shmoo_type_valid, i_target_mba.toEcmdString()); FAPI_INF("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); - + FAPI_INF("running in simics after attr"); //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[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)) @@ -1034,16 +1035,26 @@ fapi::ReturnCode delay_shmoo(const fapi::Target & i_target_mba, uint8_t i_port, uint32_t i_shmoo_param) { fapi::ReturnCode rc; - //FAPI_INF(" Inside the delay shmoo " ); + FAPI_INF(" Inside before 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_shmoo_param); + generic_shmoo * l_pShmoo = new generic_shmoo(i_port,i_shmoo_type_valid,SEQ_LIN); + //generic_shmoo mss_shmoo=generic_shmoo(i_port,i_shmoo_type_valid,SEQ_LIN); + rc = l_pShmoo->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()); - return rc; } + //FAPI_INF("Abhijit Saurabh sizeof generic_shmoo is %d", sizeof(l_pShmoo)); + + delete l_pShmoo; + + // 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()); + // return rc; + // } return rc; } 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 0c72a60ae..86d1a2262 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 @@ -5,7 +5,7 @@ /* */ /* IBM CONFIDENTIAL */ /* */ -/* COPYRIGHT International Business Machines Corp. 2012,2013 */ +/* COPYRIGHT International Business Machines Corp. 2012,2014 */ /* */ /* p1 */ /* */ @@ -21,7 +21,7 @@ /* */ /* IBM_PROLOG_END_TAG */ -// $Id: mss_generic_shmoo.C,v 1.77 2013/10/21 06:05:32 sasethur Exp $ +// $Id: mss_generic_shmoo.C,v 1.83 2013/12/17 18:42:08 sasethur Exp $ // *!*************************************************************************** // *! (C) Copyright International Business Machines Corp. 1997, 1998 // *! All Rights Reserved -- Property of IBM @@ -40,6 +40,11 @@ //------------------------------------------------------------------------------ // Version:|Author: | Date: | Comment: // --------|--------|---------|-------------------------------------------------- +// 1.83 |abhijit |17-DEC-13| Changed the whole code structure to enable run from firmware +// 1.81 |abhijit |07-nov-13| Fixed memory release as per fw suggestion +// 1.80 |abhijit |07-nov-13| Fixed array initialization of bad bit array as per fw suggestion +// 1.79 |abhijit |07-nov-13| Fixed array initialization of valid_ranks[] in schmoo constructor & modified prints in report function to support 2D script +// 1.78 |abhijit |29-oct-13| added feature of not schmooing on bad dq and also added the target prints // 1.77 |abhijit |21-oct-13| fixed the printing for tdqss min and tdqss max // 1.76 |abhijit |17-oct-13| fixed the printing for dqs by 4 // 1.74 |abhijit |4-oct-13 | fixed fw comments @@ -108,14 +113,14 @@ using namespace fapi; * ---------------------------------------------------------------------------*/ generic_shmoo:: generic_shmoo(uint8_t addr,shmoo_type_t shmoo_mask,shmoo_algorithm_t shmoo_algorithm) { - //this->shmoo_mask=shmoo_mask; //! Sets what Shmoos the caller wants to run + this->shmoo_mask=shmoo_mask; //! Sets what Shmoos the caller wants to run this->algorithm=shmoo_algorithm ; this->iv_addr=addr ; //iv_MAX_RANKS=8; iv_MAX_BYTES=10; - iv_DQS_ON=0; + iv_SHMOO_ON=0; iv_pattern=0; iv_test_type=0; iv_dmm_type=0; @@ -123,166 +128,76 @@ generic_shmoo:: generic_shmoo(uint8_t addr,shmoo_type_t shmoo_mask,shmoo_algorit iv_binary_diff=2; iv_vref_mul=0; - for(int p=0;p<MAX_PORT;++p) - { - for(int i=0;i<iv_MAX_RANKS[p];++i) + + + + for(int i=0;i<MAX_RANK;++i) { valid_rank[i]=0; } - } + for(int p=0;p<MAX_PORT;++p) { iv_MAX_RANKS[p]=4; } + FAPI_DBG("mss_generic_shmoo : constructor running for shmoo type %d",shmoo_mask); iv_shmoo_type = 0; - SHMOO[iv_shmoo_type].static_knob.min_val=0; - SHMOO[iv_shmoo_type].static_knob.max_val=512; + //SHMOO[iv_shmoo_type].static_knob.min_val=0; + //SHMOO[iv_shmoo_type].static_knob.max_val=512; - if(shmoo_mask & TEST_NONE) + if(shmoo_mask == TEST_NONE) { FAPI_INF("mss_generic_shmoo : NONE selected %d",shmoo_mask); - iv_shmoo_type = 0; - SHMOO[0].static_knob.min_val=0; - SHMOO[0].static_knob.max_val=512; + //iv_shmoo_type = 0; + //SHMOO[0].static_knob.min_val=0; + //SHMOO[0].static_knob.max_val=512; } - if(shmoo_mask & WR_EYE) + if(shmoo_mask == WR_EYE) { FAPI_INF("mss_generic_shmoo : WR_EYE selected %d",shmoo_mask); - iv_shmoo_type = 2; - SHMOO[0].static_knob.min_val=0; - SHMOO[0].static_knob.max_val=512; + iv_shmoo_type = 0; + //SHMOO[0].static_knob.min_val=0; + //SHMOO[0].static_knob.max_val=512; } - if(shmoo_mask & RD_EYE) + if(shmoo_mask == RD_EYE) { FAPI_INF("mss_generic_shmoo : RD_EYE selected %d",shmoo_mask); - iv_shmoo_type = 8; - SHMOO[2].static_knob.min_val=2; - SHMOO[2].static_knob.max_val=128; + iv_shmoo_type = 1; + //SHMOO[1].static_knob.min_val=2; + //SHMOO[1].static_knob.max_val=128; } - - if(shmoo_mask & WRT_DQS) //preet + if(shmoo_mask == WRT_DQS) { FAPI_INF("mss_generic_shmoo : WRT_DQS selected %d",shmoo_mask); - iv_shmoo_type = 4; - iv_DQS_ON = 1; - SHMOO[1].static_knob.min_val=0; - SHMOO[1].static_knob.max_val=512; + iv_shmoo_type = 3; + //SHMOO[1].static_knob.min_val=2; + //SHMOO[1].static_knob.max_val=128; } - if(shmoo_mask & RD_GATE) //preet + + for(int k=0;k<MAX_SHMOO;++k) { - FAPI_INF("mss_generic_shmoo : RD_GATE selected %d",shmoo_mask); - - iv_shmoo_type = 16; - iv_DQS_ON = 2; - SHMOO[3].static_knob.min_val=2; - SHMOO[3].static_knob.max_val=128; - } - if(iv_DQS_ON==1){ for(int i=0;i<MAX_PORT;++i) { for(int j=0;j<iv_MAX_RANKS[i];++j) { - init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.nom_val,0); - init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.right_err_cnt,0); - init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.left_err_cnt,0); - init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.lb_regval,SHMOO[iv_shmoo_type].static_knob.min_val); - init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.rb_regval,SHMOO[iv_shmoo_type].static_knob.max_val); - init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.lb_regval,20); - init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.rb_regval,300); - init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.total_margin,0); - init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.right_margin_val,0); - init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.left_margin_val,0); - } - }}else{ - // for(int i=0;i<MAX_PORT;++i) - // { - - // init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[0].K.cmd_nom_val,0); - // init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[0].K.offset,0); - // init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[0].K.addr_nom_val,0); - // init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[0].K.cntrl_nom_val,0); + init_multi_array(SHMOO[k].MBA.P[i].S[j].K.nom_val,0); + init_multi_array(SHMOO[k].MBA.P[i].S[j].K.lb_regval,0); + init_multi_array(SHMOO[k].MBA.P[i].S[j].K.rb_regval,512); + init_multi_array(SHMOO[k].MBA.P[i].S[j].K.last_pass,0); + init_multi_array(SHMOO[k].MBA.P[i].S[j].K.last_fail,0); + init_multi_array(SHMOO[k].MBA.P[i].S[j].K.curr_val,0); - - // init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[0].K.cmd_lb_regval,20); - // init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[0].K.cmd_rb_regval,300); - // init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[0].K.cmd_total_margin,0); - // init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[0].K.cmd_right_margin_val,0); - // init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[0].K.cmd_left_margin_val,0); - // } - } - // if(iv_DQS_ON == 1) - // { for(int i=0;i<MAX_PORT;++i) - // { - // for(int j=0;j<iv_MAX_RANKS[i];++j) //initialize values for DQS - // { - // init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.nom_val,0); - // // init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.lb_regval,SHMOO[iv_shmoo_type].static_knob.min_val); - // // init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.rb_regval,SHMOO[iv_shmoo_type].static_knob.max_val); - // init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.lb_regval,20); - // init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.rb_regval,300); - // init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.total_margin,0); - // init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.right_margin_val,0); - // init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.left_margin_val,0); - // } - // } - // } -} - -fapi::ReturnCode generic_shmoo::shmoo_save_rest(const fapi::Target & i_target,uint64_t i_content_array[],uint8_t i_mode) -{ - ReturnCode rc; - uint32_t rc_num; - uint8_t l_index = 0; - uint64_t l_value = 0; - uint64_t l_val_u64 = 0; - ecmdDataBufferBase l_shmoo1ab(64); - uint64_t l_Databitdir[10] = {0x800000030301143full,0x800004030301143full,0x800008030301143full,0x80000c030301143full,0x800010030301143full,0x800100030301143full,0x800104030301143full, - 0x800108030301143full,0x80010c030301143full,0x800110030301143full}; - if(i_mode == 0) - { - FAPI_INF(" Saving DP18 data bit direction register contents"); - for(l_index = 0;l_index<MAX_BYTE;l_index++) - { - l_value = l_Databitdir[l_index]; - rc = fapiGetScom(i_target,l_value,l_shmoo1ab); if(rc) return rc; - rc_num = l_shmoo1ab.setBit(57); - rc = fapiPutScom(i_target,l_value,l_shmoo1ab); if(rc) return rc; - i_content_array[l_index] = l_shmoo1ab.getDoubleWord (0); - - - } - } - - else if(i_mode == 1) - { - FAPI_INF(" Restoring DP18 data bit direction register contents"); - for(l_index = 0;l_index<MAX_BYTE;l_index++) - { - l_val_u64 = i_content_array[l_index]; - l_value = l_Databitdir[l_index]; - rc_num = l_shmoo1ab.setDoubleWord(0,l_val_u64);if (rc_num){FAPI_ERR( "Error in function shmoo_save_rest:");rc.setEcmdError(rc_num);return rc;} - rc = fapiPutScom(i_target,l_value,l_shmoo1ab); if(rc) return rc; - } + } } - else - { - FAPI_INF("Invalid value of MODE"); } - return rc; - } - - - - - /*------------------------------------------------------------------------------ * Function: run * Description : ! Delegator function that runs shmoo using other functions @@ -306,8 +221,13 @@ fapi::ReturnCode generic_shmoo::run(const fapi::Target & i_target,uint32_t *o_ri uint8_t l_totrg_0=0; uint8_t l_totrg_1=0; uint8_t l_pp=0; - uint8_t pass=0; + //uint8_t pass=0; uint8_t l_shmoo_param=0; + + + + + rc = FAPI_ATTR_GET(ATTR_EFF_SCHMOO_MODE, &i_target, l_shmoo_param); if(rc) return rc; //uint8_t l_val=2; @@ -359,7 +279,7 @@ fapi::ReturnCode generic_shmoo::run(const fapi::Target & i_target,uint32_t *o_ri FAPI_DBG("mss_generic_shmoo : run() for shmoo type %d",shmoo_mask); // Check if all bytes/bits are in a pass condition initially .Otherwise quit if(l_attr_schmoo_test_type_u8 == 0){ - FAPI_INF("This procedure wont change any delay settings"); + FAPI_INF("%s:This procedure wont change any delay settings",i_target.toEcmdString()); return rc; } if(l_attr_schmoo_test_type_u8 == 1){ @@ -371,7 +291,8 @@ fapi::ReturnCode generic_shmoo::run(const fapi::Target & i_target,uint32_t *o_ri return rc; } }else if(l_attr_schmoo_test_type_u8 == 8){ - if(l_rankpgrp0[0] !=255) + + if(l_rankpgrp0[0] !=255) { l_totrg_0++; } @@ -412,105 +333,53 @@ fapi::ReturnCode generic_shmoo::run(const fapi::Target & i_target,uint32_t *o_ri if(l_pp==1) { - FAPI_INF("Ping pong is disabled"); + FAPI_INF("%s:Ping pong is disabled",i_target.toEcmdString()); } else { - FAPI_INF("Ping pong is enabled"); + FAPI_INF("%s:Ping pong is enabled",i_target.toEcmdString()); } if((l_pp=1) && ((l_totrg_0==1) || (l_totrg_1 ==1 ))) { - FAPI_INF("Rank group is not good with ping pong. Hope you have set W2W gap to 10"); + FAPI_INF("%s:Rank group is not good with ping pong. Hope you have set W2W gap to 10",i_target.toEcmdString()); } - iv_shmoo_type=4; - //FAPI_INF("\n ABHIJIT IS HERE 1111 \n"); + rc=get_all_noms_dqs(i_target);if(rc) return rc; - iv_shmoo_type=2; - //FAPI_INF("\n ABHIJIT IS HERE 2222 \n"); + rc=get_all_noms(i_target);if(rc) return rc; rc=schmoo_setup_mcb(i_target);if(rc) return rc; //Find RIGHT BOUND OR SETUP BOUND rc=find_bound(i_target,RIGHT);if(rc) return rc; - //FAPI_INF("\n ABHIJIT IS HERE 3333 \n"); + //Find LEFT BOUND OR HOLD BOUND rc=find_bound(i_target,LEFT);if(rc) return rc; - iv_shmoo_type=4; - - if(l_dram_width == 4 ){ - rc=get_margin_dqs_by4(i_target);if(rc) return rc; - }else{ - //FAPI_INF("\n ABHIJIT IS HERE 222 \n"); - rc=get_margin_dqs_by8(i_target);if(rc) return rc; - } - //FAPI_INF("\n before the call \n"); - rc=print_report_dqs(i_target);if(rc) return rc; - rc=get_min_margin_dqs(i_target,o_right_min_margin,o_left_min_margin);if(rc) return rc; - - if((l_totrg_0==1) || (l_totrg_1 ==1 )) - { - shmoo_save_rest(i_target,i_content_array,1); - } + if(l_dram_width == 4 ){ + + rc=get_margin_dqs_by4(i_target);if(rc) return rc; + }else{ + rc=get_margin_dqs_by8(i_target);if(rc) return rc; + } - }else if(l_attr_schmoo_test_type_u8 == 16){ - if(iv_shmoo_param==2){ - rc=get_all_noms_data_disable(i_target);if(rc) return rc; - rc=get_all_noms_gate(i_target);if(rc) return rc; + rc=print_report_dqs(i_target);if(rc) return rc; - rc=knob_update_gate_train(i_target,RIGHT,iv_shmoo_type,pass); if(rc) return rc; - } - iv_DQS_ON=1; - rc=schmoo_setup_mcb(i_target);if(rc) return rc; - rc=do_mcbist_test(i_target); - if(rc) - { - FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); - return rc; - } - iv_DQS_ON=2; + rc=get_min_margin_dqs(i_target,o_right_min_margin,o_left_min_margin);if(rc) return rc; - rc=schmoo_setup_mcb(i_target);if(rc) return rc; - rc=do_mcbist_test(i_target); - if(rc) - { - FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); - return rc; - } - //sanity check - rc=mcb_error_map(i_target,mcbist_error_map); - if(rc) + if((l_totrg_0==1) || (l_totrg_1 ==1 )) { - FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!"); - - return rc; - } + shmoo_save_rest(i_target,i_content_array,1); + } - - rc=get_all_noms_gate(i_target);if(rc) return rc; - if(iv_shmoo_param==2){ - rc=find_bound(i_target,LEFT);if(rc) return rc; - rc=put_all_noms_data_disable(i_target,0);if(rc) return rc; - }else{ - rc=find_bound(i_target,RIGHT);if(rc) return rc; - } - rc=print_report_gate(i_target);if(rc) return rc; + FAPI_INF("%s: Least tDQSSmin(ps)=%d ps and Least tDQSSmax=%d ps",i_target.toEcmdString(),*o_left_min_margin,*o_right_min_margin); } else { - // rc=sanity_check(i_target); // Run MCBIST by default before for every schmoo to check if memory is in good condition. - // if(!rc.ok()) - // { - // FAPI_ERR("generic_shmoo::run MSS Generic Shmoo failed initial Sanity Check. Memory not in an all pass Condition"); - // return rc; - // } - // If memory is OK then we continue to gather nominals and config values - // Now Read nominal values for all knobs configured - // FAPI_DBG("mss_generic_shmoo : run() :read nominal values "); + rc=get_all_noms(i_target);if(rc) return rc; @@ -519,7 +388,9 @@ fapi::ReturnCode generic_shmoo::run(const fapi::Target & i_target,uint32_t *o_ri } rc=set_all_binary(i_target,RIGHT);if(rc) return rc; //Find RIGHT BOUND OR SETUP BOUND + rc=find_bound(i_target,RIGHT);if(rc) return rc; + rc=set_all_binary(i_target,LEFT);if(rc) return rc; //Find LEFT BOUND OR HOLD BOUND rc=find_bound(i_target,LEFT);if(rc) return rc; @@ -530,19 +401,62 @@ fapi::ReturnCode generic_shmoo::run(const fapi::Target & i_target,uint32_t *o_ri // It is used to print the schmoo report rc=print_report(i_target);if(rc) return rc; - if(l_attr_schmoo_test_type_u8==8){ - FAPI_INF(" Least tDQSSmin(ps)=%d ps and Least tDQSSmax=%d ps", *o_left_min_margin,*o_right_min_margin); - }else if(l_attr_schmoo_test_type_u8==16){ - - }else{ - FAPI_INF(" Minimum hold margin=%d ps and setup margin=%d ps", *o_left_min_margin,*o_right_min_margin); - } - //shmoo_save_rest(i_target,i_content_array,1); + + FAPI_INF("%s:Minimum hold margin=%d ps and setup margin=%d ps",i_target.toEcmdString(), *o_left_min_margin,*o_right_min_margin); + + shmoo_save_rest(i_target,i_content_array,1); } l_mcbist_prnt_off=0; rc = FAPI_ATTR_SET(ATTR_MCBIST_PRINTING_DISABLE, &i_target, l_mcbist_prnt_off); if(rc) return rc; + + return rc; } + +fapi::ReturnCode generic_shmoo::shmoo_save_rest(const fapi::Target & i_target,uint64_t i_content_array[],uint8_t i_mode) +{ + ReturnCode rc; + uint32_t rc_num; + uint8_t l_index = 0; + uint64_t l_value = 0; + uint64_t l_val_u64 = 0; + ecmdDataBufferBase l_shmoo1ab(64); + uint64_t l_Databitdir[10] = {0x800000030301143full,0x800004030301143full,0x800008030301143full,0x80000c030301143full,0x800010030301143full,0x800100030301143full,0x800104030301143full, + 0x800108030301143full,0x80010c030301143full,0x800110030301143full}; + if(i_mode == 0) + { + FAPI_INF("%s: Saving DP18 data bit direction register contents",i_target.toEcmdString()); + for(l_index = 0;l_index<MAX_BYTE;l_index++) + { + l_value = l_Databitdir[l_index]; + rc = fapiGetScom(i_target,l_value,l_shmoo1ab); if(rc) return rc; + rc_num = l_shmoo1ab.setBit(57); + rc = fapiPutScom(i_target,l_value,l_shmoo1ab); if(rc) return rc; + i_content_array[l_index] = l_shmoo1ab.getDoubleWord (0); + + + } + } + + else if(i_mode == 1) + { + FAPI_INF("%s: Restoring DP18 data bit direction register contents",i_target.toEcmdString()); + for(l_index = 0;l_index<MAX_BYTE;l_index++) + { + l_val_u64 = i_content_array[l_index]; + l_value = l_Databitdir[l_index]; + rc_num = l_shmoo1ab.setDoubleWord(0,l_val_u64);if (rc_num){FAPI_ERR( "Error in function shmoo_save_rest:");rc.setEcmdError(rc_num);return rc;} + rc = fapiPutScom(i_target,l_value,l_shmoo1ab); if(rc) return rc; + } + } + else + { + FAPI_INF("%s:Invalid value of MODE",i_target.toEcmdString()); + } + return rc; + +} + /*------------------------------------------------------------------------------ * Function: sanity_check * Description : do intial mcbist check in nominal and report spd if any bad bit found @@ -552,19 +466,22 @@ fapi::ReturnCode generic_shmoo::run(const fapi::Target & i_target,uint32_t *o_ri fapi::ReturnCode generic_shmoo::sanity_check(const fapi::Target & i_target){ fapi:: ReturnCode rc; mcbist_mode=QUARTER_SLOW; - //uint64_t l_time = 0x0000000000000000ull; - uint8_t l_rank_valid = 0; + uint8_t l_mcb_status=0; + uint8_t l_CDarray0[80]={0}; + uint8_t l_CDarray1[80]={0}; + + struct Subtest_info l_sub_info[30]; - FAPI_INF(" entering set_up mcbist now and rank %d",l_rank_valid); + //FAPI_INF("%s:entering set_up mcbist now and rank %d",i_target.toEcmdString(),l_rank_valid); + - //rc = setup_mcbist(i_target, 0, MCBIST_2D_CUP_PAT8, CENSHMOO, UNMASK_ALL, 0,iv_pattern,iv_test_type,l_rank_valid,0,l_start,l_end,0);if(rc) return rc; //send shmoo mode to vary the address range rc=schmoo_setup_mcb(i_target);if(rc) return rc; - FAPI_INF(" starting mcbist now"); + //FAPI_INF("%s: starting mcbist now",i_target.toEcmdString()); rc=start_mcb(i_target);if(rc) return rc; - FAPI_INF(" polling mcbist now"); + //FAPI_INF("%s: polling mcbist now",i_target.toEcmdString()); //rc=poll_mcb(i_target_mba,&mcb_status,l_sub_info1,0);if(rc) return rc; rc=poll_mcb(i_target,&l_mcb_status,l_sub_info,1); if(rc) @@ -573,8 +490,8 @@ fapi::ReturnCode generic_shmoo::sanity_check(const fapi::Target & i_target){ return rc; } - FAPI_INF(" checking error map "); - rc=mcb_error_map(i_target,mcbist_error_map);if(rc) return rc; + //FAPI_INF("%s: checking error map ",i_target.toEcmdString()); + rc=mcb_error_map(i_target,mcbist_error_map,l_CDarray0,l_CDarray1,count_bad_dq);if(rc) return rc; if(l_mcb_status) @@ -584,6 +501,7 @@ fapi::ReturnCode generic_shmoo::sanity_check(const fapi::Target & i_target){ return rc; } + return rc; } /*------------------------------------------------------------------------------ @@ -598,32 +516,33 @@ fapi::ReturnCode generic_shmoo::do_mcbist_reset(const fapi::Target & i_target) uint32_t rc_num =0; + Target i_target_centaur; + //uint8_t l_attr_centaur_ec_mcbist_random_data_gen = 0; + rc = fapiGetParentChip(i_target, i_target_centaur); if(rc) return rc; + ecmdDataBufferBase l_data_buffer_64(64); rc_num = l_data_buffer_64.flushTo0();if (rc_num){FAPI_ERR( "Error in function mcb_reset_trap:");rc.setEcmdError(rc_num);return rc;} //PORT - A - rc = fapiPutScom(i_target,MBS_MCBIST01_MCBEMA1Q_0x0201166a,l_data_buffer_64); if(rc) return(rc); - rc = fapiPutScom(i_target,MBS_MCBIST01_MCBEMA2Q_0x0201166b,l_data_buffer_64); if(rc) return(rc); - rc = fapiPutScom(i_target,MBS_MCBIST01_MCBEMA3Q_0x0201166c,l_data_buffer_64); if(rc) return(rc); + rc = fapiPutScom(i_target_centaur,MBS_MCBIST01_MCBEMA1Q_0x0201166a,l_data_buffer_64); if(rc) return(rc); + rc = fapiPutScom(i_target_centaur,MBS_MCBIST01_MCBEMA2Q_0x0201166b,l_data_buffer_64); if(rc) return(rc); + rc = fapiPutScom(i_target_centaur,MBS_MCBIST01_MCBEMA3Q_0x0201166c,l_data_buffer_64); if(rc) return(rc); //PORT - B - rc = fapiPutScom(i_target,MBS_MCBIST01_MCBEMB1Q_0x0201166d,l_data_buffer_64); if(rc) return(rc); - rc = fapiPutScom(i_target,MBS_MCBIST01_MCBEMB2Q_0x0201166e,l_data_buffer_64); if(rc) return(rc); - rc = fapiPutScom(i_target,MBS_MCBIST01_MCBEMB3Q_0x0201166f,l_data_buffer_64); if(rc) return(rc); + rc = fapiPutScom(i_target_centaur,MBS_MCBIST01_MCBEMB1Q_0x0201166d,l_data_buffer_64); if(rc) return(rc); + rc = fapiPutScom(i_target_centaur,MBS_MCBIST01_MCBEMB2Q_0x0201166e,l_data_buffer_64); if(rc) return(rc); + rc = fapiPutScom(i_target_centaur,MBS_MCBIST01_MCBEMB3Q_0x0201166f,l_data_buffer_64); if(rc) return(rc); // MBS 23 - rc = fapiPutScom(i_target,0x0201176a,l_data_buffer_64); if(rc) return(rc); - rc = fapiPutScom(i_target,0x0201176b,l_data_buffer_64); if(rc) return(rc); - rc = fapiPutScom(i_target,0x0201176c,l_data_buffer_64); if(rc) return(rc); + rc = fapiPutScom(i_target_centaur,0x0201176a,l_data_buffer_64); if(rc) return(rc); + rc = fapiPutScom(i_target_centaur,0x0201176b,l_data_buffer_64); if(rc) return(rc); + rc = fapiPutScom(i_target_centaur,0x0201176c,l_data_buffer_64); if(rc) return(rc); //PORT - B - rc = fapiPutScom(i_target,0x0201176d,l_data_buffer_64); if(rc) return(rc); - rc = fapiPutScom(i_target,0x0201176e,l_data_buffer_64); if(rc) return(rc); - rc = fapiPutScom(i_target,0x0201176f,l_data_buffer_64); if(rc) return(rc); + rc = fapiPutScom(i_target_centaur,0x0201176d,l_data_buffer_64); if(rc) return(rc); + rc = fapiPutScom(i_target_centaur,0x0201176e,l_data_buffer_64); if(rc) return(rc); + rc = fapiPutScom(i_target_centaur,0x0201176f,l_data_buffer_64); if(rc) return(rc); + - // rc = fapiPutScom(i_target,MBS_MCBIST01_MCB_ERRCNTA1Q_0x02011664,l_data_buffer_64); if(rc) return(rc); - // rc = fapiPutScom(i_target,MBS_MCBIST01_MCB_ERRCNTA2Q_0x02011665,l_data_buffer_64); if(rc) return(rc); - // rc = fapiPutScom(i_target,MBS_MCBIST01_MCB_ERRCNTB1Q_0x02011667,l_data_buffer_64); if(rc) return(rc); - // rc = fapiPutScom(i_target,MBS_MCBIST01_MCB_ERRCNTB2Q_0x02011668,l_data_buffer_64); if(rc) return(rc); return rc; } @@ -640,32 +559,6 @@ fapi::ReturnCode generic_shmoo::do_mcbist_test(const fapi::Target & i_target) //uint32_t rc_num =0; uint8_t l_mcb_status=0; struct Subtest_info l_sub_info[30]; - //ecmdDataBufferBase l_data_buffer_64(64); - //rc_num = l_data_buffer_64.flushTo0();if (rc_num){FAPI_ERR( "Error in function mcb_reset_trap:");rc.setEcmdError(rc_num);return rc;} - //PORT - A - // rc = fapiPutScom(i_target,MBS_MCBIST01_MCBEMA1Q_0x0201166a,l_data_buffer_64); if(rc) return(rc); - // rc = fapiPutScom(i_target,MBS_MCBIST01_MCBEMA2Q_0x0201166b,l_data_buffer_64); if(rc) return(rc); - // rc = fapiPutScom(i_target,MBS_MCBIST01_MCBEMA3Q_0x0201166c,l_data_buffer_64); if(rc) return(rc); - - // //PORT - B - // rc = fapiPutScom(i_target,MBS_MCBIST01_MCBEMB1Q_0x0201166d,l_data_buffer_64); if(rc) return(rc); - // rc = fapiPutScom(i_target,MBS_MCBIST01_MCBEMB2Q_0x0201166e,l_data_buffer_64); if(rc) return(rc); - // rc = fapiPutScom(i_target,MBS_MCBIST01_MCBEMB3Q_0x0201166f,l_data_buffer_64); if(rc) return(rc); - - // // MBS 23 - // rc = fapiPutScom(i_target,0x0201176a,l_data_buffer_64); if(rc) return(rc); - // rc = fapiPutScom(i_target,0x0201176b,l_data_buffer_64); if(rc) return(rc); - // rc = fapiPutScom(i_target,0x0201176c,l_data_buffer_64); if(rc) return(rc); - - // //PORT - B - // rc = fapiPutScom(i_target,0x0201176d,l_data_buffer_64); if(rc) return(rc); - // rc = fapiPutScom(i_target,0x0201176e,l_data_buffer_64); if(rc) return(rc); - // rc = fapiPutScom(i_target,0x0201176f,l_data_buffer_64); if(rc) return(rc); - - // rc = fapiPutScom(i_target,MBS_MCBIST01_MCB_ERRCNTA1Q_0x02011664,l_data_buffer_64); if(rc) return(rc); - // rc = fapiPutScom(i_target,MBS_MCBIST01_MCB_ERRCNTA2Q_0x02011665,l_data_buffer_64); if(rc) return(rc); - // rc = fapiPutScom(i_target,MBS_MCBIST01_MCB_ERRCNTB1Q_0x02011667,l_data_buffer_64); if(rc) return(rc); - // rc = fapiPutScom(i_target,MBS_MCBIST01_MCB_ERRCNTB2Q_0x02011668,l_data_buffer_64); if(rc) return(rc); rc = start_mcb(i_target); if(rc) @@ -682,7 +575,7 @@ fapi::ReturnCode generic_shmoo::do_mcbist_test(const fapi::Target & i_target) return rc; } - //FAPI_INF("\n abhijit is here 1 \n"); + return rc; } @@ -710,6 +603,10 @@ fapi::ReturnCode generic_shmoo::check_error_map(const fapi::Target & i_target,ui uint8_t rank=0; uint8_t l_max_byte=10; uint8_t l_max_nibble=20; + uint8_t l_CDarray0[80]={0}; + uint8_t l_CDarray1[80]={0}; + + if(iv_dmm_type==1) { @@ -717,15 +614,9 @@ fapi::ReturnCode generic_shmoo::check_error_map(const fapi::Target & i_target,ui l_max_nibble=18; } - // rc=mcb_error_map(i_target,mcbist_error_map,port,i_rank); - // if(rc) - // { - // FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!"); - - // return rc; - // } - rc=mcb_error_map(i_target,mcbist_error_map); + + rc=mcb_error_map(i_target,mcbist_error_map,l_CDarray0,l_CDarray1,count_bad_dq); if(rc) { FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!"); @@ -741,12 +632,7 @@ fapi::ReturnCode generic_shmoo::check_error_map(const fapi::Target & i_target,ui l_n=0; for(l_byte=0;l_byte<l_max_byte;++l_byte) { - // if(l_byte==9){ - // if(iv_dmm_type==1) - // { - // continue; - // } - // } + //Nibble loop for(l_nibble=0;l_nibble< MAX_NIBBLES;++l_nibble) { @@ -764,19 +650,18 @@ fapi::ReturnCode generic_shmoo::check_error_map(const fapi::Target & i_target,ui }else{ l_nibble_is=0; } - //FAPI_INF("\n the final byte and nibble is %d and %d for rank=%d \n",l_byte_is,l_nibble_is,i_rank); + if( mcbist_error_map [l_p][l_rnk][l_byte_is][l_nibble_is] == 1){ //pass=0; schmoo_error_map[l_p][rank][l_n]=1; - //FAPI_INF("We are in error and nibble is %d and rank is %d and port is %d \n",l_n,rank,l_p); + } else { if(iv_shmoo_param==4){ schmoo_error_map[l_p][rank][l_n]=0; } - //pass=0; - //FAPI_INF("We are in error2"); + } } else { @@ -785,16 +670,14 @@ fapi::ReturnCode generic_shmoo::check_error_map(const fapi::Target & i_target,ui if( mcbist_error_map [l_p][l_rnk][l_byte][l_nibble] == 1){ //pass=0; schmoo_error_map[l_p][rank][l_n]=1; - //FAPI_INF("We are in error and nibble is %d and rank is %d and port is %d \n",l_n,rank,l_p); + } else { if(iv_shmoo_param==4){ schmoo_error_map[l_p][rank][l_n]=0; } - //schmoo_error_map[l_p][rank][l_n]=0; - //pass=0; - //FAPI_INF("We are in error2"); + } } l_n++; @@ -816,86 +699,10 @@ fapi::ReturnCode generic_shmoo::check_error_map(const fapi::Target & i_target,ui } } } + + return rc; } -//////////////// will implement later ///////////////////// -/* -fapi::ReturnCode generic_shmoo::get_error_cnt(const fapi::Target & i_target,uint8_t port,uint8_t rank,uint8_t rank_pair,uint8_t bit,bound_t bound) -{ -fapi::ReturnCode rc; -uint8_t l_nibble=0; -uint8_t l_start_bit=0; -uint16_t l_err_cnt_C=0; -uint8_t rc_ecmd=0; -uint8_t l_length_buffer=7; -uint8_t l_val=0; - - -input_type l_input_type_e = ISDIMM_DQ; -ecmdDataBufferBase data_buffer_64(64); -ecmdDataBufferBase data_buffer_64_1(64); - -if(iv_dmm_type==1) - { - - //FAPI_INF("\n ISDIMM input byte=%d and nibble=%d and bit returned is %d \n",l_byte,l_nibble,l_val); - rc=rosetta_map(i_target,port,l_input_type_e,bit,0,l_val);if(rc) return rc; - //FAPI_INF("\n ISDIMM input byte=%d and nibble=%d and bit returned is %d \n",l_byte,l_nibble,l_val); - l_nibble=l_val/4; - - }else{ - -l_nibble=bit/4; -} - -if(port==0) - { - if(l_nibble<9) - { - rc = fapiGetScom(i_target,MBS_MCBIST01_MCB_ERRCNTA1Q_0x02011664,data_buffer_64); if(rc) return rc; - l_start_bit=l_nibble*7; - rc_ecmd=data_buffer_64.extractToRight(&l_err_cnt_C,l_start_bit,l_length_buffer);if (rc_ecmd){ rc.setEcmdError(rc_ecmd); return rc;} - } - else - { - rc = fapiGetScom(i_target,MBS_MCBIST01_MCB_ERRCNTA2Q_0x02011665,data_buffer_64); if(rc) return rc; - l_nibble=l_nibble-9; - l_start_bit=l_nibble*7; - rc_ecmd=data_buffer_64.extractToRight(&l_err_cnt_C,l_start_bit,l_length_buffer);if (rc_ecmd){ rc.setEcmdError(rc_ecmd); return rc;} - } - }else - { - if(l_nibble<9) - { - rc = fapiGetScom(i_target,MBS_MCBIST01_MCB_ERRCNTB1Q_0x02011667,data_buffer_64_1); if(rc) return rc; - l_start_bit=l_nibble*7; - rc_ecmd=data_buffer_64.extractToRight(&l_err_cnt_C,l_start_bit,l_length_buffer);if (rc_ecmd){ rc.setEcmdError(rc_ecmd); return rc;} - } - else - { - rc = fapiGetScom(i_target,MBS_MCBIST01_MCB_ERRCNTB2Q_0x02011668,data_buffer_64_1); if(rc) return rc; - l_nibble=l_nibble-9; - l_start_bit=l_nibble*7; - rc_ecmd=data_buffer_64.extractToRight(&l_err_cnt_C,l_start_bit,l_length_buffer);if (rc_ecmd){ rc.setEcmdError(rc_ecmd); return rc;} - } - } - if(bound==RIGHT) - { - if(l_err_cnt_C){ - SHMOO[iv_shmoo_type].MBA.P[port].S[rank].K.right_err_cnt[bit][rank_pair]=l_err_cnt_C; - } - FAPI_INF("\n THE PORT=%d Rank=%d dq=%d and error count=%d \n",port,rank,bit,SHMOO[iv_shmoo_type].MBA.P[port].S[rank].K.right_err_cnt[bit][rank_pair]); - }else { - if(l_err_cnt_C){ - SHMOO[iv_shmoo_type].MBA.P[port].S[rank].K.left_err_cnt[bit][rank_pair]=l_err_cnt_C; -} - FAPI_INF("\n THE PORT=%d Rank=%d dq=%d and error count=%d \n",port,rank,bit,SHMOO[iv_shmoo_type].MBA.P[port].S[rank].K.left_err_cnt[bit][rank_pair]); - } - return rc; - -} - -*/ /*------------------------------------------------------------------------------ * Function: init_multi_array @@ -903,13 +710,12 @@ if(port==0) * * Parameters: the array address and the initial value * ---------------------------------------------------------------------------*/ -void generic_shmoo::init_multi_array(uint32_t (&array)[MAX_DQ][MAX_RPS],uint32_t init_val) +void generic_shmoo::init_multi_array(uint16_t (&array)[MAX_DQ],uint16_t init_val) { - uint8_t l_byte,l_nibble,l_bit,l_rp; + uint8_t l_byte,l_nibble,l_bit; uint8_t l_dq=0; - for (l_rp=0;l_rp<MAX_RPS;++l_rp) - {// Byte loop + // Byte loop for(l_byte=0;l_byte<iv_MAX_BYTES;++l_byte) { //Nibble loop @@ -919,116 +725,21 @@ void generic_shmoo::init_multi_array(uint32_t (&array)[MAX_DQ][MAX_RPS],uint32_ for(l_bit=0;l_bit<MAX_BITS;++l_bit) { l_dq=8*l_byte+4*l_nibble+l_bit; - array[l_dq][l_rp]=init_val; + array[l_dq]=init_val; } } } - } - -} -/*------------------------------------------------------------------------------ - * Function: init_multi_array_dqs - * Description : This function do the initialization of various schmoo parameters - * - * Parameters: the array address and the initial value - * ---------------------------------------------------------------------------*/ -fapi::ReturnCode generic_shmoo::init_multi_array_dqs(uint32_t (&array)[MAX_DQ][MAX_RPS],uint32_t init_val) -{ - fapi::ReturnCode rc; - uint8_t l_byte,l_nibble,l_bit,l_rp; - uint8_t l_dq=0; - for (l_rp=0;l_rp<MAX_RPS;++l_rp) - {// Byte loop - - for(l_byte=0;l_byte<iv_MAX_BYTES;++l_byte) - { //Nibble loop - for(l_nibble=0;l_nibble< MAX_NIBBLES;++l_nibble) - { - //Bit loop - for(l_bit=0;l_bit<MAX_BITS;++l_bit) - { - l_dq=8*l_byte+4*l_nibble+l_bit; - array[l_dq][l_rp]=init_val; - } - } - } - } -return rc; -} -/*------------------------------------------------------------------------------ - * Function: get_all_noms - * Description : This function gets the nominal values for each DQ - * - * Parameters: Target:MBA - * ---------------------------------------------------------------------------*/ -fapi::ReturnCode generic_shmoo::get_all_noms(const fapi::Target & i_target) -{ - fapi::ReturnCode rc; - uint8_t l_rnk,l_byte,l_nibble,l_bit; - uint8_t i_rnk=0; - uint8_t i_rp=0; - uint32_t val=0; - uint8_t l_dq=0; - uint8_t l_p=0; - - input_type_t l_input_type_e = WR_DQ; - access_type_t l_access_type_e = READ ; - FAPI_DBG("mss_generic_shmoo : get_all_noms : Reading in all nominal values"); - - - if(iv_shmoo_type == 4) - { - l_input_type_e = WR_DQS; - - } - else if(iv_shmoo_type == 8) - { - - l_input_type_e = RD_DQ; - - } - else if(iv_shmoo_type == 3) - { - - l_input_type_e = RD_DQS; - - } - - for (l_p=0;l_p<MAX_PORT;l_p++){ - for (l_rnk=0;l_rnk<iv_MAX_RANKS[l_p];++l_rnk) - {// Byte loop - rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc; - i_rnk=valid_rank[l_rnk]; - rc = mss_getrankpair(i_target,l_p,i_rnk,&i_rp,valid_rank);if(rc) return rc; - for(l_byte=0;l_byte<iv_MAX_BYTES;++l_byte) - { //Nibble loop - for(l_nibble=0;l_nibble< MAX_NIBBLES;++l_nibble) - { - //Bit loop - for(l_bit=0;l_bit<MAX_BITS;++l_bit) - { - l_dq=8*l_byte+4*l_nibble+l_bit; - - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,i_rnk,l_input_type_e,l_dq,0,val);if(rc) return rc; - SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.nom_val[l_dq][i_rp]=val; - #ifdef DBG - FAPI_INF("Nominal Value for port=%d rank=%d and rank pair=%d and dq=%d is %d",l_p,i_rnk,i_rp,l_dq,val); - #endif - } - } - } - } -} - return rc; + } + fapi::ReturnCode generic_shmoo::set_all_binary(const fapi::Target & i_target,bound_t bound) { fapi::ReturnCode rc; uint8_t l_rnk,l_byte,l_nibble,l_bit; - uint8_t i_rnk=0; - uint8_t i_rp=0; + //uint8_t i_rnk=0; + //uint8_t i_rp=0; uint8_t l_dq=0; uint8_t l_p=0; @@ -1036,7 +747,7 @@ fapi::ReturnCode generic_shmoo::set_all_binary(const fapi::Target & i_target,bou uint32_t l_max_offset=64; - if(iv_shmoo_type == 8) + if(iv_shmoo_type == 1) { l_max=127; @@ -1046,9 +757,7 @@ fapi::ReturnCode generic_shmoo::set_all_binary(const fapi::Target & i_target,bou for (l_p=0;l_p<MAX_PORT;l_p++){ for (l_rnk=0;l_rnk<iv_MAX_RANKS[l_p];++l_rnk) {// Byte loop - rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc; - i_rnk=valid_rank[l_rnk]; - rc = mss_getrankpair(i_target,l_p,i_rnk,&i_rp,valid_rank);if(rc) return rc; + for(l_byte=0;l_byte<iv_MAX_BYTES;++l_byte) { //Nibble loop for(l_nibble=0;l_nibble< MAX_NIBBLES;++l_nibble) @@ -1058,30 +767,28 @@ fapi::ReturnCode generic_shmoo::set_all_binary(const fapi::Target & i_target,bou { l_dq=8*l_byte+4*l_nibble+l_bit; - //rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,i_rnk,l_input_type_e,l_dq,0,val);if(rc) return rc; - SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.last_pass[l_dq][i_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.nom_val[l_dq][i_rp]; - SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.curr_val[l_dq][i_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.nom_val[l_dq][i_rp]; + + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.last_pass[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.nom_val[l_dq]; + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.curr_val[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.nom_val[l_dq]; if(bound==RIGHT) { - if((SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.nom_val[l_dq][i_rp]+l_max_offset)>l_max){ - SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.last_fail[l_dq][i_rp]=l_max; + if((SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.nom_val[l_dq]+l_max_offset)>l_max){ + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.last_fail[l_dq]=l_max; }else{ - SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.last_fail[l_dq][i_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.nom_val[l_dq][i_rp]+l_max_offset; - //FAPI_INF("\n the last failure for right %d ",SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.last_fail[l_dq][i_rp]); + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.last_fail[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.nom_val[l_dq]+l_max_offset; + //FAPI_INF("\n the last failure for right %d ",SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.last_fail[l_dq][i_rp]); } }else{ - if(SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.nom_val[l_dq][i_rp]>64){ - SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.last_fail[l_dq][i_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.nom_val[l_dq][i_rp]-l_max_offset; - //FAPI_INF("\n the last failure for left %d ",SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.last_fail[l_dq][i_rp]); + if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.nom_val[l_dq]>64){ + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.last_fail[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.nom_val[l_dq]-l_max_offset; + //FAPI_INF("\n the last failure for left %d ",SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.last_fail[l_dq][i_rp]); }else{ - SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.last_fail[l_dq][i_rp]=0; - //FAPI_INF("\n the last failure for left %d ",SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.last_fail[l_dq][i_rp]); + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.last_fail[l_dq]=0; + //FAPI_INF("\n the last failure for left %d ",SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.last_fail[l_dq][i_rp]); } } - //SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.nom_val[l_dq][i_rp]=val; - - //FAPI_DBG("Nominal Value for port=%d rank=%d and rank pair=%d and dq=%d is %d",l_p,i_rnk,i_rp,l_dq,val); + } } @@ -1090,60 +797,34 @@ fapi::ReturnCode generic_shmoo::set_all_binary(const fapi::Target & i_target,bou } return rc; } - -fapi::ReturnCode generic_shmoo::get_all_noms_data_disable(const fapi::Target & i_target) +/*------------------------------------------------------------------------------ + * Function: get_all_noms + * Description : This function gets the nominal values for each DQ + * + * Parameters: Target:MBA + * ---------------------------------------------------------------------------*/ +fapi::ReturnCode generic_shmoo::get_all_noms(const fapi::Target & i_target) { fapi::ReturnCode rc; - uint8_t l_rnk,l_block; + uint8_t l_rnk,l_byte,l_nibble,l_bit; uint8_t i_rnk=0; uint8_t i_rp=0; - uint32_t val=0; - + uint16_t val=0; + uint8_t l_dq=0; uint8_t l_p=0; - input_type_t l_input_type_e = DATA_DISABLE; + input_type_t l_input_type_e = WR_DQ; access_type_t l_access_type_e = READ ; FAPI_DBG("mss_generic_shmoo : get_all_noms : Reading in all nominal values"); - - - for (l_p=0;l_p<MAX_PORT;l_p++){ - for (l_rnk=0;l_rnk<iv_MAX_RANKS[l_p];++l_rnk) - {// Byte loop - rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc; - i_rnk=valid_rank[l_rnk]; - rc = mss_getrankpair(i_target,l_p,i_rnk,&i_rp,valid_rank);if(rc) return rc; - for(l_block=0;l_block<5;++l_block) - { //DP 18 Loop - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,i_rnk,l_input_type_e,l_block,0,val);if(rc) return rc; - SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.datadis_nom_val[l_block]=val; - FAPI_INF("Nominal Value for data bit disable port=%d rank=%d and rank pair=%d and dq=%d is %d",l_p,i_rnk,i_rp,l_block,val); + if(iv_shmoo_type == 1) + { + l_input_type_e = RD_DQ; + + } - } - } -} - return rc; -} - -fapi::ReturnCode generic_shmoo::put_all_noms_data_disable(const fapi::Target & i_target,uint8_t flag) -{ - fapi::ReturnCode rc; - - uint8_t l_rnk,l_block; - uint8_t i_rnk=0; - uint8_t i_rp=0; - uint32_t val=0; - - uint8_t l_p=0; - - input_type_t l_input_type_e = DATA_DISABLE; - access_type_t l_access_type_e = WRITE ; - FAPI_DBG("mss_generic_shmoo : get_all_noms : Reading in all nominal values"); - - - for (l_p=0;l_p<MAX_PORT;l_p++){ for (l_rnk=0;l_rnk<iv_MAX_RANKS[l_p];++l_rnk) @@ -1151,25 +832,31 @@ fapi::ReturnCode generic_shmoo::put_all_noms_data_disable(const fapi::Target & i rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc; i_rnk=valid_rank[l_rnk]; rc = mss_getrankpair(i_target,l_p,i_rnk,&i_rp,valid_rank);if(rc) return rc; - for(l_block=0;l_block<5;++l_block) - { //DP 18 Loop - val=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.datadis_nom_val[l_block]; - FAPI_INF("Nominal Value for data bit disable while restoring port=%d rank=%d and rank pair=%d and dq=%d is %d",l_p,i_rnk,i_rp,l_block,val); - if(flag==1){ - - val=0; - FAPI_INF("\n the flushing value=%d \n",val); - } - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,i_rnk,l_input_type_e,l_block,0,val);if(rc) return rc; + for(l_byte=0;l_byte<iv_MAX_BYTES;++l_byte) + { //Nibble loop + for(l_nibble=0;l_nibble< MAX_NIBBLES;++l_nibble) + { + //Bit loop + for(l_bit=0;l_bit<MAX_BITS;++l_bit) + { + l_dq=8*l_byte+4*l_nibble+l_bit; - + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,i_rnk,l_input_type_e,l_dq,0,val);if(rc) return rc; + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.nom_val[l_dq]=val; + + // FAPI_INF("%s:Nominal Value for port=%d rank=%d and rank pair=%d and dq=%d is %d",i_target.toEcmdString(),l_p,i_rnk,i_rp,l_dq,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.nom_val[l_dq]); } + } + } } } + return rc; } +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + fapi::ReturnCode generic_shmoo::get_all_noms_dqs(const fapi::Target & i_target) { fapi::ReturnCode rc; @@ -1177,13 +864,13 @@ fapi::ReturnCode generic_shmoo::get_all_noms_dqs(const fapi::Target & i_target) uint8_t l_rnk; //uint8_t i_rnk=0; uint8_t i_rp=0; - uint32_t val=0; + uint16_t val=0; //uint8_t l_dq=0; uint8_t l_p=0; uint8_t l_max_nibble=20; uint8_t rank=0; uint8_t l_n=0; - FAPI_INF("mss_generic_shmoo : get_all_noms_dqs : Reading in all nominal values and schmoo type=%d \n",iv_shmoo_type); + FAPI_INF("%s:mss_generic_shmoo : get_all_noms_dqs : Reading in all nominal values and schmoo type=%d \n",i_target.toEcmdString(),iv_shmoo_type); if(iv_dmm_type==1) { @@ -1195,11 +882,7 @@ fapi::ReturnCode generic_shmoo::get_all_noms_dqs(const fapi::Target & i_target) FAPI_DBG("mss_generic_shmoo : get_all_noms : Reading in all nominal values"); - if(iv_shmoo_type == 4) - { - l_input_type_e = WR_DQS; - - } + for (l_p=0;l_p<MAX_PORT;l_p++){ @@ -1210,11 +893,11 @@ fapi::ReturnCode generic_shmoo::get_all_noms_dqs(const fapi::Target & i_target) rc = mss_getrankpair(i_target,l_p,rank,&i_rp,valid_rank);if(rc) return rc; for (l_n=0; l_n<l_max_nibble;l_n++){ - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_n,0,val);if(rc) return rc; - SHMOO[iv_shmoo_type].MBA.P[l_p].S[rank].K.nom_val[l_n][i_rp]=val; - #ifdef DBG - FAPI_INF("Nominal Value for port=%d rank=%d and rank pair=%d and dqs=%d is %d",l_p,rank,i_rp,l_n,SHMOO[iv_shmoo_type].MBA.P[l_p].S[rank].K.nom_val[l_n][i_rp]); - #endif + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_n,0,val);if(rc) return rc; + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.curr_val[l_n]=val; + + //FAPI_INF("%s:Nominal Value for port=%d rank=%d and rank pair=%d and dqs=%d is %d",i_target.toEcmdString(),l_p,rank,i_rp,l_n,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.curr_val[l_n]); + } } } @@ -1226,76 +909,6 @@ fapi::ReturnCode generic_shmoo::get_all_noms_dqs(const fapi::Target & i_target) return rc; } -fapi::ReturnCode generic_shmoo::get_all_noms_gate(const fapi::Target & i_target) -{ - fapi::ReturnCode rc; - - - uint8_t i_rnk=0; - - - //uint8_t l_dq=0; - uint8_t l_cmd=0; - uint8_t l_p=0; - uint8_t l_addr=0; - uint8_t l_cntrl=0; - uint8_t l_clk=0; - uint32_t l_delay=0; - - #ifdef DEBUG - FAPI_INF("mss_generic_shmoo : get_all_noms_gate : Reading in all nominal values and schmoo type=%d \n",iv_shmoo_type); - #endif - - input_type_t l_input_type_e = COMMAND; - access_type_t l_access_type_e = READ ; - FAPI_DBG("mss_generic_shmoo : get_all_noms : Reading in all nominal values"); - - - - - - for (l_p=0;l_p<MAX_PORT;l_p++){ - FAPI_INF("\n PORT=%d \n",l_p); - for (l_cmd=0;l_cmd<3;l_cmd++) - { - l_input_type_e = COMMAND; - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cmd,1,l_delay);if(rc) return rc; - SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd]=l_delay; - FAPI_INF("\n Command = %d and value = %d \n",l_cmd,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd]); - FAPI_INF("\n Command = %d and original value = %d \n",l_cmd,l_delay); - } - - for (l_addr=0;l_addr<19;l_addr++) - { - l_input_type_e = ADDRESS; - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_addr,1,l_delay);if(rc) return rc; - //FAPI_INF("\n Saurabh is here \n"); - SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr]=l_delay; - //FAPI_INF("\n address = %d and value = %d \n",l_addr,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr]); - } - for (l_cntrl=0;l_cntrl<20;l_cntrl++) - { - l_input_type_e = CONTROL; - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cntrl,1,l_delay);if(rc) return rc; - SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl]=l_delay; - //FAPI_INF("\n CONTROL = %d and value = %d \n",l_cntrl,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl]); - } - - for (l_clk=0;l_clk<8;l_clk++) - { - l_input_type_e = CLOCK; - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,1,l_input_type_e,l_clk,1,l_delay);if(rc) return rc; - SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk]=l_delay; - FAPI_INF("\n CLOCK = %d and value = %d \n",l_clk,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk]); - } - } - - - - return rc; -} - - /*------------------------------------------------------------------------------ * Function: knob_update @@ -1316,6 +929,7 @@ fapi::ReturnCode generic_shmoo::knob_update(const fapi::Target & i_target,bound_ uint8_t l_dq=0; access_type_t l_access_type_e = WRITE; uint8_t l_n=0; + uint8_t l_i=0; uint8_t l_p=0; uint16_t l_delay=0; @@ -1326,6 +940,13 @@ fapi::ReturnCode generic_shmoo::knob_update(const fapi::Target & i_target,bound_ uint8_t l_SCHMOO_NIBBLES=20; uint8_t i_rp=0; + uint8_t l_CDarray0[80]={0}; + uint8_t l_CDarray1[80]={0}; + + + + + if(iv_dmm_type==1) { l_SCHMOO_NIBBLES=18; @@ -1349,7 +970,7 @@ fapi::ReturnCode generic_shmoo::knob_update(const fapi::Target & i_target,bound_ } } - if(scenario == 8) { + if(scenario == 1) { l_input_type_e = RD_DQ; l_max_limit=127; } @@ -1357,9 +978,8 @@ fapi::ReturnCode generic_shmoo::knob_update(const fapi::Target & i_target,bound_ if(bound==RIGHT) { - - if(algorithm==SEQ_LIN) - { + + for (l_delay=1;((pass==0));l_delay++){ @@ -1368,27 +988,47 @@ fapi::ReturnCode generic_shmoo::knob_update(const fapi::Target & i_target,bound_ for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) { l_dq=bit; + rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; rank=valid_rank[l_rank]; rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ - //rc=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) + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay; + + + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_dq]);if(rc) return rc; + } + rc=mcb_error_map(i_target,mcbist_error_map,l_CDarray0,l_CDarray1,count_bad_dq);if(rc) return rc; - if(SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]>l_max_limit){ + + if(l_p == 0){ + + for(l_i=0;l_i<count_bad_dq[0];l_i++){ + + if(l_CDarray0[l_i]==l_dq){ + + schmoo_error_map[l_p][rank][l_n]=1; + } + } + }else{ + for(l_i=0;l_i<count_bad_dq[1];l_i++){ + + if(l_CDarray1[l_i]==l_dq){ + + schmoo_error_map[l_p][rank][l_n]=1; + } + } + } + if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_dq]>l_max_limit){ schmoo_error_map[l_p][rank][l_n]=1; } + l_dq=l_dq+4; } @@ -1403,7 +1043,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) { @@ -1422,19 +1062,19 @@ fapi::ReturnCode generic_shmoo::knob_update(const fapi::Target & i_target,bound_ rank=valid_rank[l_rank]; rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]);if(rc) return rc; l_dq=l_dq+4; } } } - } - + + } if(bound==LEFT) { - if(algorithm==SEQ_LIN) - { + for (l_delay=1;(pass==0);l_delay++){ @@ -1447,19 +1087,32 @@ fapi::ReturnCode generic_shmoo::knob_update(const fapi::Target & i_target,bound_ rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ - //l_max=SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]; - //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq,bound); + if(schmoo_error_map[l_p][rank][l_n]==0){ - SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; - //l_max=SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]; - #ifdef DBG - FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); - #endif - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_dq]);if(rc) return rc; } - if(SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp] == 0){ + + rc=mcb_error_map(i_target,mcbist_error_map,l_CDarray0,l_CDarray1,count_bad_dq);if(rc) return rc; + + if(l_p==0){ + for(l_i=0;l_i<count_bad_dq[0];l_i++){ + if(l_CDarray0[l_i]==l_dq){ + schmoo_error_map[l_p][rank][l_n]=1; + } + } + }else{ + for(l_i=0;l_i<count_bad_dq[1];l_i++){ + if(l_CDarray1[l_i]==l_dq){ + schmoo_error_map[l_p][rank][l_n]=1; + } + } + } + + if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_dq] == 0){ schmoo_error_map[l_p][rank][l_n] = 1; } @@ -1495,19 +1148,21 @@ rc=check_error_map(i_target,l_p,pass); rank=valid_rank[l_rank]; rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc; + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]);if(rc) return rc; l_dq=l_dq+4; } } } - } + } + + return rc; } -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// fapi::ReturnCode generic_shmoo::knob_update_bin(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag) { fapi::ReturnCode rc; @@ -1521,6 +1176,10 @@ fapi::ReturnCode generic_shmoo::knob_update_bin(const fapi::Target & i_target,bo uint8_t l_dq=0; access_type_t l_access_type_e = WRITE; uint8_t l_n=0; + uint8_t l_i=0; + uint8_t l_flag_p0=0; + uint8_t l_flag_p1=0; + uint8_t l_p=0; //uint16_t l_delay=0; @@ -1528,9 +1187,12 @@ fapi::ReturnCode generic_shmoo::knob_update_bin(const fapi::Target & i_target,bo //uint16_t l_max_limit=500; uint8_t rank=0; uint8_t l_rank=0; + uint16_t l_curr_diff=0; uint8_t l_SCHMOO_NIBBLES=20; uint8_t i_rp=0; uint8_t l_status=1; + uint8_t l_CDarray0[80]; + uint8_t l_CDarray1[80]; if(iv_dmm_type==1) { @@ -1564,11 +1226,11 @@ fapi::ReturnCode generic_shmoo::knob_update_bin(const fapi::Target & i_target,bo } } - if(scenario == 8) { + if(scenario == 1) { l_input_type_e = RD_DQ; //l_max_limit=127; } - + rc=mcb_error_map(i_target,mcbist_error_map,l_CDarray0,l_CDarray1,count_bad_dq);if(rc) return rc; if(bound==RIGHT) { @@ -1603,53 +1265,76 @@ fapi::ReturnCode generic_shmoo::knob_update_bin(const fapi::Target & i_target,bo rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ + l_flag_p0=0; + l_flag_p1=0; + if(l_p == 0){ + for(l_i=0;l_i<count_bad_dq[0];l_i++){ + if(l_CDarray0[l_i]==l_dq){ + schmoo_error_map[l_p][rank][l_n]=1; + l_flag_p0=1; + + + } + } + }else{ + for(l_i=0;l_i<count_bad_dq[1];l_i++){ + + if(l_CDarray1[l_i]==l_dq){ + schmoo_error_map[l_p][rank][l_n]=1; + l_flag_p1=1; + + } + } + } + + + + if(schmoo_error_map[l_p][rank][l_n]==0){ - SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]; - SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]=(SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]+SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp])/2; - // FAPI_INF("\n 111111 port=%d nibble=%d rank=%d and bit=%d the last pass value %d the last fail value %d and current value %d\n",l_p,l_n,rank,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp],SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp],SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]);if(rc) return rc; - if(SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]>SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]){ - SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]-SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]; + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_pass[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_dq]; + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_dq]=(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_pass[l_dq]+SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq])/2; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_dq]);if(rc) return rc; + if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_pass[l_dq]>SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq]){ + l_curr_diff=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_pass[l_dq]-SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq]; }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]; + l_curr_diff=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq]-SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_pass[l_dq]; } - if(SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]<=1){ + + + + if(l_curr_diff<=1){ binary_done_map[l_p][rank][l_n]=1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]; - //FAPI_INF("\n the right bound for port=%d rank=%d dq=%d is %d \n",l_p,rank,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]); + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq]; + } }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]; + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_dq]; + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_dq]=(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_pass[l_dq]+SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq])/2; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_dq]);if(rc) return rc; + if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_pass[l_dq]>SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq]){ + l_curr_diff=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_pass[l_dq]-SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq]; }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]; + l_curr_diff=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq]-SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_pass[l_dq]; + } + if(l_p==0){ + if(l_flag_p0==1){ + l_curr_diff=1; + }}else{ + if(l_flag_p1==1){ + l_curr_diff=1; + } } - if(SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]<=1){ + + if(l_curr_diff<=1){ binary_done_map[l_p][rank][l_n]=1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]; - //FAPI_INF("\n the right bound for port=%d rank=%d dq=%d is %d \n",l_p,rank,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]); + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq]; + } } - // //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; @@ -1671,14 +1356,14 @@ fapi::ReturnCode generic_shmoo::knob_update_bin(const fapi::Target & i_target,bo FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); return rc; } - //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); @@ -1690,7 +1375,7 @@ fapi::ReturnCode generic_shmoo::knob_update_bin(const fapi::Target & i_target,bo rank=valid_rank[l_rank]; rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc; + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]);if(rc) return rc; l_dq=l_dq+4; } } @@ -1731,798 +1416,102 @@ fapi::ReturnCode generic_shmoo::knob_update_bin(const fapi::Target & i_target,bo rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ - if(schmoo_error_map[l_p][rank][l_n]==0){ - SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]; - SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]=(SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]+SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp])/2; - //FAPI_INF("\n 111111 port=%d nibble=%d rank=%d and bit=%d the last pass value %d the last fail value %d and current value %d\n",l_p,l_n,rank,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp],SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp],SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]);if(rc) return rc; - if(SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]>SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]){ - SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]-SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]; - }else{ - SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]-SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]; - } - if(SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]<=1){ - binary_done_map[l_p][rank][l_n]=1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]; - //FAPI_INF("\n the left bound for port=%d rank=%d dq=%d is %d \n",l_p,rank,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]); - } - }else{ - - 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]<=1){ - binary_done_map[l_p][rank][l_n]=1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]; - //FAPI_INF("\n the left bound for port=%d rank=%d dq=%d is %d \n",l_p,rank,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]); - } - } - // //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq,bound); - // if(schmoo_error_map[l_p][rank][l_n]==0){ - - // SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; - // #ifdef DBG - // FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); - // #endif - // rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; - // //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq); - // //get_error_cnt(const fapi::Target & i_target,uint8_t port,uint8_t rank,uint8_t rank_pair,uint8_t bit) - // } - - // if(SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]>l_max_limit){ - // schmoo_error_map[l_p][rank][l_n]=1; - // } - - l_dq=l_dq+4; - - } - - - } - - } - rc=do_mcbist_reset(i_target); - if(rc) - { - FAPI_ERR("generic_shmoo::find_bound do_mcbist_reset failed"); - return rc; - } - rc=do_mcbist_test(i_target); - if(rc) - { - FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); - return rc; - } - //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq); - rc=check_error_map(i_target,l_p,pass); - if(rc) - { - FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); - return rc; - } - //FAPI_INF("\n the status =%d \n",l_status); - }while(l_status==1); - - - for (l_p=0;l_p<MAX_PORT;l_p++){ - for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) - { - l_dq=bit; - rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; - rank=valid_rank[l_rank]; - rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; - for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc; - l_dq=l_dq+4; - } - } - } - } - - - } - - return rc; -} -///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -fapi::ReturnCode generic_shmoo::knob_update_gate(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t pass,bool &flag) -{ - fapi::ReturnCode rc; - ecmdDataBufferBase data_buffer_64(64); - ecmdDataBufferBase data_buffer_64_1(64); - - - - uint8_t l_rp=0; - input_type_t l_input_type_e = COMMAND; - - access_type_t l_access_type_e = WRITE; - uint8_t l_n=0; - uint8_t l_cmd=0; - uint8_t l_addr=0; - uint8_t l_cntrl=0; - uint8_t l_clk=0; - uint8_t i_rnk=0; - - - uint8_t l_p=0; - uint32_t l_delay=0; - //uint32_t l_delay_cac=0; - uint32_t l_cmd_delay=0; - uint32_t l_addr_delay=0; - uint32_t l_cntrl_delay=0; - uint32_t l_clk_delay=0; - - //uint16_t l_max_limit=500; - uint8_t rank=0; - uint8_t l_rank=0; - uint8_t l_SCHMOO_NIBBLES=20; - uint8_t i_rp=0; - - if(iv_dmm_type==1) - { - l_SCHMOO_NIBBLES=18; - } - - rc=do_mcbist_reset(i_target); - if(rc) - { - FAPI_ERR("generic_shmoo::find_bound do_mcbist_reset failed"); - return rc; - } - //rc = mss_getrankpair(i_target,iv_port,rank,&l_rp,valid_rank);if(rc) return rc; - - for (l_p=0;l_p<MAX_PORT;l_p++){ - for(int i=0;i<iv_MAX_RANKS[l_p];i++){ - rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc; - rank=valid_rank[i]; - for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ - schmoo_error_map[l_p][rank][l_n]=0; - } - } - } - - - - - if(bound==RIGHT) - { - - if(algorithm==SEQ_LIN) - { - - - for (l_delay=1;((pass==0)&&(l_delay<127));l_delay++){ - - for (l_p=0;l_p<MAX_PORT;l_p++){ - for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) - { - - rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; - rank=valid_rank[l_rank]; - rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; - for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ - - - - - - if(schmoo_error_map[l_p][rank][l_n]==0){ - - - SHMOO[scenario].MBA.P[l_p].S[rank].K.offset[l_n]=l_delay; - - } - } - - - } - - } - - for (l_p=0;l_p<MAX_PORT;l_p++){ - for (l_cmd=0;l_cmd<3;l_cmd++) - { - - l_cmd_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd]+l_delay; - - l_input_type_e = COMMAND; - if(l_cmd_delay<127){ - //l_delay_cac=l_cmd_delay-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd]; - FAPI_INF("\n port=%d command=%d nominal =%d and write_value=%d \n",l_p,l_cmd,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd],l_cmd_delay); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cmd,0,l_cmd_delay);if(rc) return rc; - } - } - for (l_addr=0;l_addr<19;l_addr++) - { - - l_addr_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr]+l_delay; - if(l_addr_delay<127){ - l_input_type_e = ADDRESS; - FAPI_INF("\n port=%d address=%d nominal =%d and write_value=%d \n",l_p,l_addr,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr],l_addr_delay); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_addr,0,l_addr_delay);if(rc) return rc; - } - } - for (l_cntrl=0;l_cntrl<20;l_cntrl++) - { - l_cntrl_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl]+l_delay; - if(l_cntrl_delay<127){ - l_input_type_e = CONTROL; - FAPI_INF("\n port=%d control=%d nominal =%d and write_value=%d \n",l_p,l_cntrl,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl],l_cntrl_delay); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cntrl,0,l_cntrl_delay);if(rc) return rc; - } - } - - for (l_clk=0;l_clk<8;l_clk++) - { - l_clk_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk]+l_delay; - - - - - l_input_type_e = CLOCK; + l_flag_p0=0; + l_flag_p1=0; + if(l_p == 0){ + for(l_i=0;l_i<count_bad_dq[0];l_i++){ + if(l_CDarray0[l_i]==l_dq){ + schmoo_error_map[l_p][rank][l_n]=1; + l_flag_p0=1; - FAPI_INF("\n port=%d clock=%d nominal =%d and write_value=%d \n",l_p,l_clk,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk],l_clk_delay); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_clk,0,l_clk_delay);if(rc) return rc; } - } - - - rc=do_mcbist_test(i_target); - if(rc) - { - FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); - return rc; - } - - - rc=check_error_map(i_target,l_p,pass); - if(rc) - { - FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); - return rc; } - - - } - - + }else{ + for(l_i=0;l_i<count_bad_dq[1];l_i++){ - // PUT HERE NOMINAL BACK . - - for (l_p=0;l_p<MAX_PORT;l_p++){ - for (l_cmd=0;l_cmd<3;l_cmd++) - { - - l_cmd_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd]; - - l_input_type_e = COMMAND; - if(l_cmd_delay<127){ - - // l_delay_cac=l_cmd_delay-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd]; + if(l_CDarray1[l_i]==l_dq){ + schmoo_error_map[l_p][rank][l_n]=1; + l_flag_p1=1; - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cmd,0,l_cmd_delay);if(rc) return rc; } - } - for (l_addr=0;l_addr<19;l_addr++) - { - - l_addr_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr]; - if(l_addr_delay<127){ - l_input_type_e = ADDRESS; - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_addr,0,l_addr_delay);if(rc) return rc; - } - } - for (l_cntrl=0;l_cntrl<20;l_cntrl++) - { - l_cntrl_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl]; - if(l_cntrl_delay<127){ - l_input_type_e = CONTROL; - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cntrl,0,l_cntrl_delay);if(rc) return rc; - } - } - - for (l_clk=0;l_clk<8;l_clk++) - { - l_clk_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk]; - l_input_type_e = CLOCK; - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_clk,0,l_clk_delay);if(rc) return rc; - - } - } - - - } - + } } - - if(bound==LEFT) - { - if(algorithm==SEQ_LIN) - { - - - for (l_delay=1;((pass==0)&&(l_delay<127));l_delay++){ - - for (l_p=0;l_p<MAX_PORT;l_p++){ - for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) - { - rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; - rank=valid_rank[l_rank]; - rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; - for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ - - - - - if(schmoo_error_map[l_p][rank][l_n]==0){ + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_pass[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_dq]; + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_dq]=(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_pass[l_dq]+SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq])/2; - - SHMOO[scenario].MBA.P[l_p].S[rank].K.offset[l_n]=l_delay; - - } - } - - + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_dq]);if(rc) return rc; + if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_pass[l_dq]>SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq]){ + l_curr_diff=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_pass[l_dq]-SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq]; + }else{ + l_curr_diff=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq]-SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_pass[l_dq]; } - - } - - for (l_p=0;l_p<MAX_PORT;l_p++){ - for (l_cmd=0;l_cmd<3;l_cmd++) - { - - l_cmd_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd]-l_delay; - - l_input_type_e = COMMAND; - if((l_cmd_delay>0)&&(l_cmd_delay<127)){ - //l_delay_cac=l_cmd_delay-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd]; - FAPI_INF("\n port=%d command=%d nominal =%d and write_value=%d \n",l_p,l_cmd,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd],l_cmd_delay); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cmd,0,l_cmd_delay);if(rc) return rc; - } - } - for (l_addr=0;l_addr<19;l_addr++) - { - - l_addr_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr]-l_delay; - if((l_addr_delay>0)&&(l_addr_delay<127)){ - l_input_type_e = ADDRESS; - FAPI_INF("\n port=%d address=%d nominal =%d and write_value=%d \n",l_p,l_addr,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr],l_addr_delay); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_addr,0,l_addr_delay);if(rc) return rc; - } - } - for (l_cntrl=0;l_cntrl<20;l_cntrl++) - { - l_cntrl_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl]-l_delay; - if((l_cntrl_delay>0)&&(l_cntrl_delay<127)){ - l_input_type_e = CONTROL; - FAPI_INF("\n port=%d control=%d nominal =%d and write_value=%d \n",l_p,l_cntrl,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl],l_cntrl_delay); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cntrl,0,l_cntrl_delay);if(rc) return rc; - } - } - - for (l_clk=0;l_clk<8;l_clk++) - { - l_clk_delay = (SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk]+127)-l_delay; - l_input_type_e = CLOCK; - - FAPI_INF("\n port=%d clock=%d nominal =%d and write_value=%d \n",l_p,l_clk,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk],l_clk_delay); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_clk,0,l_clk_delay);if(rc) return rc; - - } - } - // put here loops for changing the delay values of CACc - - rc=do_mcbist_test(i_target); - if(rc) - { - FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); - return rc; - } - - rc=check_error_map(i_target,l_p,pass); - if(rc) - { - FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); - return rc; - } - - - } - - - - // PUT HERE NOMINAL BACK . - - for (l_p=0;l_p<MAX_PORT;l_p++){ - for (l_cmd=0;l_cmd<3;l_cmd++) - { - - l_cmd_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd]; - - l_input_type_e = COMMAND; - if(l_cmd_delay<127){ - - // l_delay_cac=l_cmd_delay-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd]; - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cmd,0,l_cmd_delay);if(rc) return rc; - } - } - for (l_addr=0;l_addr<19;l_addr++) - { - - l_addr_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr]; - if(l_addr_delay<127){ - l_input_type_e = ADDRESS; - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_addr,0,l_addr_delay);if(rc) return rc; - } - } - for (l_cntrl=0;l_cntrl<20;l_cntrl++) - { - l_cntrl_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl]; - if(l_cntrl_delay<127){ - l_input_type_e = CONTROL; - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cntrl,0,l_cntrl_delay);if(rc) return rc; - } - } - - for (l_clk=0;l_clk<8;l_clk++) - { - l_clk_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk]; - - l_input_type_e = CLOCK; - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_clk,0,l_clk_delay);if(rc) return rc; - - } - } - + if(l_curr_diff<=1){ + binary_done_map[l_p][rank][l_n]=1; + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq]; - } - - } - - return rc; -} -fapi::ReturnCode generic_shmoo::knob_update_gate_train(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t pass) -{ - fapi::ReturnCode rc; - - ecmdDataBufferBase l_data_buffer_FIR_64(64); - ecmdDataBufferBase data_buffer_64(64); - ecmdDataBufferBase data_buffer_64_1(64); - - - - uint8_t l_rp=0; - input_type_t l_input_type_e = COMMAND; - uint8_t l_dq=0; - access_type_t l_access_type_e = WRITE; - uint8_t l_n=0; - uint8_t l_cmd=0; - uint8_t l_addr=0; - uint8_t l_cntrl=0; - uint8_t l_clk=0; - uint8_t i_rnk=0; - uint8_t bit=0; - uint8_t l_failed=0; - - uint8_t l_p=0; - uint32_t l_delay=0; - uint32_t l_delay_failed=0; - - uint32_t l_cmd_delay=0; - uint32_t l_addr_delay=0; - uint32_t l_cntrl_delay=0; - uint32_t l_clk_delay=0; - - - uint8_t rank=0; - uint8_t l_rank=0; - uint8_t l_SCHMOO_NIBBLES=20; - uint8_t i_rp=0; - uint32_t rc_num = 0; - uint8_t flag=1; - - + }else{ + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_dq]; + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_dq]=(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_pass[l_dq]+SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq])/2; - if(iv_dmm_type==1) - { - l_SCHMOO_NIBBLES=18; + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_dq]);if(rc) return rc; + if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_pass[l_dq]>SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq]){ + l_curr_diff=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_pass[l_dq]-SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq]; + }else{ + l_curr_diff=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq]-SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_pass[l_dq]; } - rc=do_mcbist_reset(i_target); - if(rc) - { - FAPI_ERR("generic_shmoo::find_bound do_mcbist_reset failed"); - return rc; - } - - - for (l_p=0;l_p<MAX_PORT;l_p++){ - for(int i=0;i<iv_MAX_RANKS[l_p];i++){ - rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc; - rank=valid_rank[i]; - for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ - schmoo_error_map[l_p][rank][l_n]=0; - } - } - } - - - - if(bound==RIGHT) - { - - if(algorithm==SEQ_LIN) - { - + if(l_p==0){ + if(l_flag_p0==1){ + l_curr_diff=1; + }}else{ + if(l_flag_p1==1){ + l_curr_diff=1; + } + } - for (l_delay=1;((pass==0)&&(l_delay<127));l_delay++){ - - for (l_p=0;l_p<MAX_PORT;l_p++){ - for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) - { + if(l_curr_diff<=1){ + binary_done_map[l_p][rank][l_n]=1; + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq]; - rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; - rank=valid_rank[l_rank]; - rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; - for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ - - - - - - if(schmoo_error_map[l_p][rank][l_n]==0){ + } + } - SHMOO[scenario].MBA.P[l_p].S[rank].K.offset[l_n]=l_delay; - } + l_dq=l_dq+4; + } } } - - for (l_p=0;l_p<MAX_PORT;l_p++){ - l_failed=0; - for (l_cmd=0;l_cmd<3;l_cmd++) - { - - l_cmd_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd]+l_delay; - - l_input_type_e = COMMAND; - if(l_cmd_delay==127){ - l_failed=1; - pass=1; - } - if((l_cmd_delay<127)&&(l_failed==0)){ - - FAPI_INF("\n port=%d command=%d nominal =%d and write_value=%d \n",l_p,l_cmd,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd],l_cmd_delay); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cmd,0,l_cmd_delay);if(rc) return rc; - } - } - for (l_addr=0;l_addr<19;l_addr++) - { - - l_addr_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr]+l_delay; - if(l_addr_delay==127){ - l_failed=1; - pass=1; - } - if((l_addr_delay<127)&&(l_failed==0)){ - l_input_type_e = ADDRESS; - - FAPI_INF("\n port=%d address=%d nominal =%d and write_value=%d \n",l_p,l_addr,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr],l_addr_delay); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_addr,0,l_addr_delay);if(rc) return rc; - } - } - for (l_cntrl=0;l_cntrl<20;l_cntrl++) - { - l_cntrl_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl]+l_delay; - if(l_cntrl_delay==127){ - l_failed=1; - pass=1; - } - if((l_cntrl_delay<127)&&(l_failed==0)){ - l_input_type_e = CONTROL; - - FAPI_INF("\n port=%d control=%d nominal =%d and write_value=%d \n",l_p,l_cntrl,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl],l_cntrl_delay); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cntrl,0,l_cntrl_delay);if(rc) return rc; - } - } - - for (l_clk=0;l_clk<8;l_clk++) - { - l_clk_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk]+l_delay; - - - l_input_type_e = CLOCK; - - FAPI_INF("\n port=%d clock=%d nominal =%d and write_value=%d \n",l_p,l_clk,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk],l_clk_delay); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,1,l_input_type_e,l_clk,0,l_clk_delay);if(rc) return rc; - - } - } - // call dram training here . - FAPI_EXEC_HWP(rc, mss_draminit_training, i_target); - //rc = mss_draminit_training(i_target); - if(rc){ - l_delay_failed=l_delay-1; - pass=1; - } - - l_delay_failed=l_delay-1; - FAPI_INF("\n the value of pass=%d and delay =%d and failed delay=%d \n",pass,l_delay,l_delay_failed); - /////// - - -} - -FAPI_INF("\n EFFECTIVE RIGHT CLOCK ADJUST = %d \n",l_delay_failed); -rc_num = data_buffer_64.flushTo0();if (rc_num){FAPI_ERR( "Error in function mcb_reset_trap:");rc.setEcmdError(rc_num);return rc;} - -rc=put_all_noms_data_disable(i_target,flag);if(rc) return rc; - -// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP0_P0_0_0x8000007c0301143F,data_buffer_64); if(rc) return rc; -// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP0_P0_1_0x8000047c0301143F,data_buffer_64); if(rc) return rc; -// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP0_P0_2_0x8000087c0301143F,data_buffer_64); if(rc) return rc; -// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP0_P0_3_0x80000c7c0301143F,data_buffer_64); if(rc) return rc; -// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP0_P0_4_0x8000107c0301143F,data_buffer_64); if(rc) return rc; - -// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP0_P1_0_0x8001007c0301143F,data_buffer_64); if(rc) return rc; -// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP0_P1_1_0x8001047c0301143F,data_buffer_64); if(rc) return rc; -// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP0_P1_2_0x8001087c0301143F,data_buffer_64); if(rc) return rc; -// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP0_P1_3_0x80010c7c0301143F,data_buffer_64); if(rc) return rc; -// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP0_P1_4_0x8001107c0301143F,data_buffer_64); if(rc) return rc; - -// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP1_P0_0_0x8000017c0301143F,data_buffer_64); if(rc) return rc; -// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP1_P0_1_0x8000057c0301143F,data_buffer_64); if(rc) return rc; -// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP1_P0_2_0x8000097c0301143F,data_buffer_64); if(rc) return rc; -// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP1_P0_3_0x80000d7c0301143F,data_buffer_64); if(rc) return rc; -// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP1_P0_4_0x8000117c0301143F,data_buffer_64); if(rc) return rc; - - -// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP1_P1_0_0x8001017c0301143F,data_buffer_64); if(rc) return rc; -// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP1_P1_1_0x8001057c0301143F,data_buffer_64); if(rc) return rc; -// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP1_P1_2_0x8001097c0301143F,data_buffer_64); if(rc) return rc; -// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP1_P1_3_0x80010d7c0301143F,data_buffer_64); if(rc) return rc; -// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP1_P1_4_0x8001117c0301143F,data_buffer_64); if(rc) return rc; - - for (l_p=0;l_p<MAX_PORT;l_p++){ - for (l_cmd=0;l_cmd<3;l_cmd++) - { - - l_cmd_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd]+l_delay_failed; - - l_input_type_e = COMMAND; - if(l_cmd_delay<127){ - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cmd,0,l_cmd_delay);if(rc) return rc; - } - } - for (l_addr=0;l_addr<19;l_addr++) - { - - l_addr_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr]+l_delay_failed; - if(l_addr_delay<127){ - l_input_type_e = ADDRESS; - - //FAPI_INF("\n port=%d address=%d nominal =%d and write_value=%d \n",l_p,l_addr,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr],l_addr_delay); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_addr,0,l_addr_delay);if(rc) return rc; - } - } - for (l_cntrl=0;l_cntrl<20;l_cntrl++) - { - l_cntrl_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl]+l_delay_failed; - if(l_cntrl_delay<127){ - l_input_type_e = CONTROL; - - //FAPI_INF("\n port=%d control=%d nominal =%d and write_value=%d \n",l_p,l_cntrl,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl],l_cntrl_delay); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cntrl,0,l_cntrl_delay);if(rc) return rc; - } - } - - for (l_clk=0;l_clk<8;l_clk++) - { - l_clk_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk]+l_delay_failed; - - //FAPI_INF("\n clock max value reached for port=%d and value =%d \n",l_p,l_clk_delay); - - - l_input_type_e = CLOCK; - - //FAPI_INF("\n port=%d clock=%d nominal =%d and write_value=%d \n",l_p,l_clk,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk],l_clk_delay); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_clk,0,l_clk_delay);if(rc) return rc; - - } - } - - - //rc = mss_draminit_training(i_target); - FAPI_EXEC_HWP(rc, mss_draminit_training, i_target); - iv_shmoo_type=4; - rc=schmoo_setup_mcb(i_target);if(rc) return rc; - iv_shmoo_type=16; - // check mcbist for the fail - rc=do_mcbist_test(i_target); + rc=do_mcbist_reset(i_target); if(rc) { - FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); + FAPI_ERR("generic_shmoo::find_bound do_mcbist_reset failed"); return rc; } - - rc=mcb_error_map(i_target,mcbist_error_map);if(rc) return rc; - - - - - } - - } - - if(bound==LEFT) - { - if(algorithm==SEQ_LIN) - { - - for (l_delay=1;(pass==0);l_delay++){ - - for (l_p=0;l_p<MAX_PORT;l_p++){ - for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) - { - - rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; - rank=valid_rank[l_rank]; - rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; - for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ - - //l_max=SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]; - //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq,bound); - - if(schmoo_error_map[l_p][rank][l_n]==0){ - SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; - //l_max=SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]; - FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; - - } - if(SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp] == 0){ - schmoo_error_map[l_p][rank][l_n] = 1; - } - - l_dq=l_dq+4; - - } - } - - } rc=do_mcbist_test(i_target); if(rc) { FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); return rc; } - -rc=check_error_map(i_target,l_p,pass); + + rc=check_error_map(i_target,l_p,pass); if(rc) { FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); return rc; } - - } + }while(l_status==1); for (l_p=0;l_p<MAX_PORT;l_p++){ @@ -2533,11 +1522,11 @@ rc=check_error_map(i_target,l_p,pass); rank=valid_rank[l_rank]; rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc; + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]);if(rc) return rc; l_dq=l_dq+4; } } - } + } } @@ -2545,13 +1534,14 @@ rc=check_error_map(i_target,l_p,pass); return rc; } + /*------------------------------------------------------------------------------ * Function: knob_update_dqs * Description : This is a key function is used to find right and left bound using new algorithm -- there is an option u can chose not to use it by setting a flag * - * Parameters: Target:MBA,bound:RIGHT/LEFT,scenario:type of schmoo,iv_port:0/1,rank:0-7,byte:0-7,nibble:0/1,bit:0-3,pass, + * Parameters: Target:MBA,bound:RIGHT/LEFT,iv_SHMOO_ON:type of schmoo,iv_port:0/1,rank:0-7,byte:0-7,nibble:0/1,bit:0-3,pass, * --------------------------------------------------------------------------- */ -fapi::ReturnCode generic_shmoo::knob_update_dqs_by4(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag) +fapi::ReturnCode generic_shmoo::knob_update_dqs_by4(const fapi::Target & i_target,bound_t bound,uint8_t iv_SHMOO_ON,uint8_t bit,uint8_t pass,bool &flag) { fapi::ReturnCode rc; ecmdDataBufferBase data_buffer_64(64); @@ -2565,17 +1555,22 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4(const fapi::Target & i_targe uint8_t l_dq=0; access_type_t l_access_type_e = WRITE; uint8_t l_n=0; - uint8_t l_dqs=4; + //uint8_t iv_SHMOO_ON=4; uint8_t l_p=0; uint16_t l_delay=0; + uint16_t l_delay_dq=0; //uint32_t l_max=0; uint16_t l_max_limit=500; uint8_t rank=0; uint8_t l_rank=0; uint8_t l_SCHMOO_NIBBLES=20; uint8_t i_rp=0; + uint8_t l_CDarray0[80]; + uint8_t l_CDarray1[80]; + + rc=do_mcbist_test(i_target); @@ -2585,7 +1580,7 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4(const fapi::Target & i_targe return rc; } - rc=mcb_error_map(i_target,mcbist_error_map); + rc=mcb_error_map(i_target,mcbist_error_map,l_CDarray0,l_CDarray1,count_bad_dq); if(rc) { FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!"); @@ -2597,7 +1592,7 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4(const fapi::Target & i_targe { l_SCHMOO_NIBBLES=18; } - //rc = mss_getrankpair(i_target,iv_port,rank,&l_rp,valid_rank);if(rc) return rc; + for (l_p=0;l_p<MAX_PORT;l_p++){ for(int i=0;i<iv_MAX_RANKS[l_p];i++){ @@ -2628,32 +1623,34 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4(const fapi::Target & i_targe rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; rank=valid_rank[l_rank]; rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; - //FAPI_INF("\n abhijit here after port=%d rank=%d \n",l_p,rank); + for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ l_dq=4*l_n; if(schmoo_error_map[l_p][rank][l_n]==0){ - //FAPI_INF("\n value of nominal delay scenario=%d rank=%d for port=%d dqs=%d is %d ",l_dqs,rank,l_p,l_n,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]); - SHMOO[l_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_n][l_rp]=SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]+l_delay; - //FAPI_INF("\n value of delay scenario=%d rank=%d for port=%d dqs=%d is %d ",l_dqs,rank,l_p,l_n,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_n][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_n][l_rp]);if(rc) return rc; - SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; - //FAPI_INF("\n value of delay scenario=%d rank=%d for port=%d bit=%d is %d ",scenario,rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; + + + + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_n]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_n]+l_delay; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_n]);if(rc) return rc; + l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc; l_dq=l_dq+1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; - //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; + l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc; l_dq=l_dq+1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; - //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; + l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc; l_dq=l_dq+1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; - //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; + l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc; } - //FAPI_INF("\n abhijit here before \n"); - if(SHMOO[l_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]>l_max_limit){ + + if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_n]>l_max_limit){ schmoo_error_map[l_p][rank][l_n]=1; } @@ -2663,6 +1660,7 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4(const fapi::Target & i_targe } } + rc=do_mcbist_test(i_target); if(rc) { @@ -2688,8 +1686,8 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4(const fapi::Target & i_targe rank=valid_rank[l_rank]; rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ - //FAPI_INF("\n restoring nominal values for dqs=%d port=%d rank=%d is %d \n",l_n,l_p,rank,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);if(rc) return rc; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_n]);if(rc) return rc; } } @@ -2703,7 +1701,7 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4(const fapi::Target & i_targe rank=valid_rank[l_rank]; rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc; + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]);if(rc) return rc; l_dq=l_dq+4; } } @@ -2716,7 +1714,7 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4(const fapi::Target & i_targe return rc; } - rc=mcb_error_map(i_target,mcbist_error_map); + rc=mcb_error_map(i_target,mcbist_error_map,l_CDarray0,l_CDarray1,count_bad_dq); if(rc) { FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!"); @@ -2725,7 +1723,9 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4(const fapi::Target & i_targe } } - + + //FAPI_INF("\n ######################### The Right Bound is over ################################ "); + } if(bound==LEFT) @@ -2744,29 +1744,27 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4(const fapi::Target & i_targe rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ l_dq=4*l_n; - // l_max=SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]; - - + if(schmoo_error_map[l_p][rank][l_n]==0){ - SHMOO[l_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_n][l_rp]=SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]-l_delay; - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_n][l_rp]);if(rc) return rc; - SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; - //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_n]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_n]-l_delay; + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_n]);if(rc) return rc; + l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc; l_dq=l_dq+1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; - //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; + l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc; l_dq=l_dq+1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; - //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; + l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc; l_dq=l_dq+1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; - //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; + l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc; } - if(SHMOO[l_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp] == 0){ + if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_n] == 0){ schmoo_error_map[l_p][rank][l_n] = 1; } @@ -2802,7 +1800,7 @@ rc=check_error_map(i_target,l_p,pass); rank=valid_rank[l_rank]; rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);if(rc) return rc; + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_n]);if(rc) return rc; } } @@ -2817,7 +1815,7 @@ rc=check_error_map(i_target,l_p,pass); rank=valid_rank[l_rank]; rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc; + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]);if(rc) return rc; l_dq=l_dq+4; } } @@ -2831,7 +1829,7 @@ rc=check_error_map(i_target,l_p,pass); return rc; } - rc=mcb_error_map(i_target,mcbist_error_map); + rc=mcb_error_map(i_target,mcbist_error_map,l_CDarray0,l_CDarray1,count_bad_dq); if(rc) { FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!"); @@ -2840,12 +1838,13 @@ rc=check_error_map(i_target,l_p,pass); } } - + //FAPI_INF("\n ######################### The Left Bound is over ################################ "); } return rc; } + fapi::ReturnCode generic_shmoo::knob_update_dqs_by4_isdimm(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag) { fapi::ReturnCode rc; @@ -2860,12 +1859,16 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4_isdimm(const fapi::Target & uint8_t l_dq=0; access_type_t l_access_type_e = WRITE; uint8_t l_n=0; - uint8_t l_dqs=4; + uint8_t l_my_dqs=0; + uint8_t l_CDarray0[80]; + uint8_t l_CDarray1[80]; + uint8_t l_p=0; uint16_t l_delay=0; + uint16_t l_delay_dq=0; //uint32_t l_max=0; uint16_t l_max_limit=500; uint8_t rank=0; @@ -2880,7 +1883,7 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4_isdimm(const fapi::Target & return rc; } - rc=mcb_error_map(i_target,mcbist_error_map); + rc=mcb_error_map(i_target,mcbist_error_map,l_CDarray0,l_CDarray1,count_bad_dq); if(rc) { FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!"); @@ -2893,7 +1896,7 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4_isdimm(const fapi::Target & l_SCHMOO_NIBBLES=18; } uint8_t l_dqs_arr[18]={0,9,1,10,2,11,3,12,4,13,5,14,6,15,7,16,8,17}; - //rc = mss_getrankpair(i_target,iv_port,rank,&l_rp,valid_rank);if(rc) return rc; + for (l_p=0;l_p<MAX_PORT;l_p++){ for(int i=0;i<iv_MAX_RANKS[l_p];i++){ @@ -2924,33 +1927,32 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4_isdimm(const fapi::Target & rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; rank=valid_rank[l_rank]; rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; - //FAPI_INF("\n abhijit here after port=%d rank=%d \n",l_p,rank); + for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ l_dq=4*l_n; l_my_dqs=l_dqs_arr[l_n]; if(schmoo_error_map[l_p][rank][l_n]==0){ - // FAPI_INF("\n value of nominal delay scenario=%d rank=%d for port=%d dqs=%d is %d ",l_dqs,rank,l_p,l_my_dqs,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_my_dqs][l_rp]); - SHMOO[l_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_my_dqs][l_rp]=SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_my_dqs][l_rp]+l_delay; - // FAPI_INF("\n value of delay scenario=%d rank=%d for port=%d dqs=%d is %d ",l_dqs,rank,l_p,l_my_dqs,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_my_dqs][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_my_dqs,0,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_my_dqs][l_rp]);if(rc) return rc; - SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; - //FAPI_INF("\n value of delay scenario=%d rank=%d for port=%d bit=%d is %d ",scenario,rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; + + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_my_dqs]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_my_dqs]+l_delay; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_my_dqs,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[rank].K.rb_regval[l_my_dqs]);if(rc) return rc; + l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc; l_dq=l_dq+1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; - //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; + l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay; + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc; l_dq=l_dq+1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; - //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; + l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc; l_dq=l_dq+1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; - //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; + l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc; } - //FAPI_INF("\n abhijit here before \n"); - if(SHMOO[l_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]>l_max_limit){ + + if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[rank].K.rb_regval[l_my_dqs]>l_max_limit){ schmoo_error_map[l_p][rank][l_n]=1; } @@ -2985,8 +1987,8 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4_isdimm(const fapi::Target & rank=valid_rank[l_rank]; rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ - //FAPI_INF("\n restoring nominal values for dqs=%d port=%d rank=%d is %d \n",l_n,l_p,rank,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);if(rc) return rc; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_n]);if(rc) return rc; } } @@ -3001,7 +2003,7 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4_isdimm(const fapi::Target & rank=valid_rank[l_rank]; rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc; + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]);if(rc) return rc; l_dq=l_dq+4; } } @@ -3014,7 +2016,7 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4_isdimm(const fapi::Target & return rc; } - rc=mcb_error_map(i_target,mcbist_error_map); + rc=mcb_error_map(i_target,mcbist_error_map,l_CDarray0,l_CDarray1,count_bad_dq); if(rc) { FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!"); @@ -3046,29 +2048,27 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4_isdimm(const fapi::Target & for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ l_dq=4*l_n; l_my_dqs=l_dqs_arr[l_n]; - //l_max=SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]; - if(schmoo_error_map[l_p][rank][l_n]==0){ - SHMOO[l_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_my_dqs][l_rp]=SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_my_dqs][l_rp]-l_delay; - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_my_dqs,0,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_my_dqs][l_rp]);if(rc) return rc; - SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; - //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_my_dqs]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_my_dqs]-l_delay; + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_my_dqs,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_my_dqs]);if(rc) return rc; + l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc; l_dq=l_dq+1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; - //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; + l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc; l_dq=l_dq+1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; - //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; + l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc; l_dq=l_dq+1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; - //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; + l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc; } - if(SHMOO[l_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp] == 0){ + if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[rank].K.lb_regval[l_my_dqs] == 0){ schmoo_error_map[l_p][rank][l_n] = 1; } @@ -3104,7 +2104,7 @@ rc=check_error_map(i_target,l_p,pass); rank=valid_rank[l_rank]; rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);if(rc) return rc; + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_n]);if(rc) return rc; } } @@ -3119,7 +2119,7 @@ rc=check_error_map(i_target,l_p,pass); rank=valid_rank[l_rank]; rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc; + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[rank].K.nom_val[l_dq]);if(rc) return rc; l_dq=l_dq+4; } } @@ -3133,7 +2133,7 @@ rc=check_error_map(i_target,l_p,pass); return rc; } - rc=mcb_error_map(i_target,mcbist_error_map); + rc=mcb_error_map(i_target,mcbist_error_map,l_CDarray0,l_CDarray1,count_bad_dq); if(rc) { FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!"); @@ -3148,7 +2148,8 @@ rc=check_error_map(i_target,l_p,pass); return rc; } -fapi::ReturnCode generic_shmoo::knob_update_dqs_by8(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag) + +fapi::ReturnCode generic_shmoo::knob_update_dqs_by8(const fapi::Target & i_target,bound_t bound,uint8_t iv_SHMOO_ON,uint8_t bit,uint8_t pass,bool &flag) { fapi::ReturnCode rc; ecmdDataBufferBase data_buffer_64(64); @@ -3163,7 +2164,10 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by8(const fapi::Target & i_targe uint8_t l_dqs=0; access_type_t l_access_type_e = WRITE; uint8_t l_n=0; - uint8_t l_scen_dqs=4; + uint8_t l_CDarray0[80]; + uint8_t l_CDarray1[80]; + uint16_t l_delay_dq=0; + uint8_t l_p=0; @@ -3187,7 +2191,7 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by8(const fapi::Target & i_targe return rc; } - rc=mcb_error_map(i_target,mcbist_error_map); + rc=mcb_error_map(i_target,mcbist_error_map,l_CDarray0,l_CDarray1,count_bad_dq); if(rc) { FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!"); @@ -3201,7 +2205,7 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by8(const fapi::Target & i_targe //l_SCHMOO_BYTES=9; l_SCHMOO_NIBBLES=18; } - //rc = mss_getrankpair(i_target,iv_port,rank,&l_rp,valid_rank);if(rc) return rc; + for (l_p=0;l_p<MAX_PORT;l_p++){ for(int i=0;i<iv_MAX_RANKS[l_p];i++){ @@ -3236,49 +2240,48 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by8(const fapi::Target & i_targe rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; rank=valid_rank[l_rank]; rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; - //FAPI_INF("\n abhijit here after port=%d rank=%d \n",l_p,rank); + for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ l_dq=4*l_n; if((schmoo_error_map[l_p][rank][l_n]==0)&&(schmoo_error_map[l_p][rank][l_n+1]==0)){ - //FAPI_INF("\n value of nominal delay scenario=%d rank=%d for port=%d dqs=%d is %d ",l_scen_dqs,rank,l_p,l_n,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]); - SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_n][l_rp]=SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]+l_delay; - //FAPI_INF("\n value of delay scenario=%d rank=%d for port=%d dqs=%d is %d ",l_scen_dqs,rank,l_p,l_n,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_n][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_n][l_rp]);if(rc) return rc; - SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; - //FAPI_INF("\n value of delay scenario=%d rank=%d for port=%d bit=%d is %d ",scenario,rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; + + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_n]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_n]+l_delay; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_n]);if(rc) return rc; + l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc; l_dq=l_dq+1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; - //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; + l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc; l_dq=l_dq+1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; - //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; + l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc; l_dq=l_dq+1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; - //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; + l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc; l_dq=l_dq+1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; - //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; + l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc; l_dq=l_dq+1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; - //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; + l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc; l_dq=l_dq+1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; - //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; + l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc; l_dq=l_dq+1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; - //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; - + l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc; } - //FAPI_INF("\n abhijit here before \n"); - if(SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]>l_max_limit){ + + if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_n]>l_max_limit){ schmoo_error_map[l_p][rank][l_n]=1; schmoo_error_map[l_p][rank][l_n+1]=1; } @@ -3321,8 +2324,8 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by8(const fapi::Target & i_targe rank=valid_rank[l_rank]; rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ - //FAPI_INF("\n restoring nominal values for dqs=%d port=%d rank=%d is %d \n",l_n,l_p,rank,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);if(rc) return rc; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_n]);if(rc) return rc; } } @@ -3337,7 +2340,7 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by8(const fapi::Target & i_targe rank=valid_rank[l_rank]; rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc; + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]);if(rc) return rc; l_dq=l_dq+4; } } @@ -3351,7 +2354,7 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by8(const fapi::Target & i_targe return rc; } - rc=mcb_error_map(i_target,mcbist_error_map); + rc=mcb_error_map(i_target,mcbist_error_map,l_CDarray0,l_CDarray1,count_bad_dq); if(rc) { FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!"); @@ -3361,7 +2364,7 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by8(const fapi::Target & i_targe } - + //FAPI_INF("\n ######################### The Right Bound is over ################################ "); } if(bound==LEFT) @@ -3381,45 +2384,45 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by8(const fapi::Target & i_targe rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ l_dq=4*l_n; - //l_max=SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]; + //l_max=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[rank].K.lb_regval[l_dq]; if((schmoo_error_map[l_p][rank][l_n]==0)&&(schmoo_error_map[l_p][rank][l_n+1]==0)){ - SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_n][l_rp]=SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]-l_delay; - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_n][l_rp]);if(rc) return rc; - SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; - //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_n]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_n]-l_delay; + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_n]);if(rc) return rc; + l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc; l_dq=l_dq+1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; - //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; + l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc; l_dq=l_dq+1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; - //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; + l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc; l_dq=l_dq+1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; - //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; + l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc; l_dq=l_dq+1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; - //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; + l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc; l_dq=l_dq+1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; - //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; + l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc; l_dq=l_dq+1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; - //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; + l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc; l_dq=l_dq+1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; - //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; + l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay; + + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc; } - if(SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp] == 0){ + if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_n] == 0){ schmoo_error_map[l_p][rank][l_n] = 1; schmoo_error_map[l_p][rank][l_n+1] = 1; } @@ -3462,223 +2465,8 @@ rc=check_error_map(i_target,l_p,pass); rank=valid_rank[l_rank]; rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ - //FAPI_INF("\n restoring nominal values for dqs=%d port=%d rank=%d is %d \n",l_n,l_p,rank,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);if(rc) return rc; - - } - } - } - - for(int l_bit=0;l_bit<4;l_bit++){ - for (l_p=0;l_p<MAX_PORT;l_p++){ - for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) - { - l_dq=l_bit; - rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; - rank=valid_rank[l_rank]; - rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; - for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc; - l_dq=l_dq+4; - } - } - } - } - - rc=do_mcbist_test(i_target); - if(rc) - { - FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); - return rc; - } - - rc=mcb_error_map(i_target,mcbist_error_map); - if(rc) - { - FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!"); - - return rc; - } - - } - - - } - - return rc; -} -fapi::ReturnCode generic_shmoo::knob_update_dqs_by8_isdimm(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag) -{ - fapi::ReturnCode rc; - ecmdDataBufferBase data_buffer_64(64); - ecmdDataBufferBase data_buffer_64_1(64); - - - - uint8_t l_rp=0; - input_type_t l_input_type_e = WR_DQ; - input_type_t l_input_type_e_dqs = WR_DQS; - uint8_t l_dq=0; - uint8_t l_dqs=0; - access_type_t l_access_type_e = WRITE; - uint8_t l_n=0; - uint8_t l_scen_dqs=4; - - - uint8_t l_p=0; - uint16_t l_delay=0; - //uint32_t l_max=0; - uint16_t l_max_limit=500; - uint8_t rank=0; - uint8_t l_rank=0; - //uint8_t l_SCHMOO_BYTES=10; - uint8_t l_SCHMOO_NIBBLES=20; - - uint8_t i_rp=0; - - rc=do_mcbist_test(i_target); - if(rc) - { - FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); - return rc; - } - - rc=mcb_error_map(i_target,mcbist_error_map); - if(rc) - { - FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!"); - - return rc; - } - - if(iv_dmm_type==1) - { - //l_SCHMOO_BYTES=9; - l_SCHMOO_NIBBLES=18; - } - //rc = mss_getrankpair(i_target,iv_port,rank,&l_rp,valid_rank);if(rc) return rc; - - for (l_p=0;l_p<MAX_PORT;l_p++){ - for(int i=0;i<iv_MAX_RANKS[l_p];i++){ - rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc; - rank=valid_rank[i]; - for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ - schmoo_error_map[l_p][rank][l_n]=0; - } - } - } - - - - - if(bound==RIGHT) - { - - if(algorithm==SEQ_LIN) - { - - - for (l_delay=1;((pass==0));l_delay++){ - - for (l_p=0;l_p<MAX_PORT;l_p++){ - for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) - { - l_dq=0; - l_dqs=0; - rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; - rank=valid_rank[l_rank]; - rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; - //FAPI_INF("\n abhijit here after port=%d rank=%d \n",l_p,rank); - for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ - l_dq=4*l_n; - l_dqs=l_n/2; - //FAPI_INF("\n the value of error check is %d \n",schmoo_error_map[l_p][rank][l_n]); - if((schmoo_error_map[l_p][rank][l_n]==0)&&(schmoo_error_map[l_p][rank][l_n+1]==0)){ - //FAPI_INF("\n value of nominal delay scenario=%d rank=%d for port=%d dqs=%d is %d ",l_scen_dqs,rank,l_p,l_dqs,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_dqs][l_rp]); - SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_dqs][l_rp]=SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_dqs][l_rp]+l_delay; - //FAPI_INF("\n value of delay scenario=%d rank=%d for port=%d dqs=%d is %d ",l_scen_dqs,rank,l_p,l_dqs,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_dqs][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_dqs,0,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_dqs][l_rp]);if(rc) return rc; - SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; - //FAPI_INF("\n value of delay scenario=%d rank=%d for port=%d bit=%d is %d ",scenario,rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; - l_dq=l_dq+1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; - //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; - l_dq=l_dq+1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; - //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; - l_dq=l_dq+1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; - //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; - l_dq=l_dq+1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; - //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; - l_dq=l_dq+1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; - //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; - l_dq=l_dq+1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; - //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; - l_dq=l_dq+1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; - //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; - - } - //FAPI_INF("\n abhijit here before \n"); - if(SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_dqs][l_rp]>l_max_limit){ - - schmoo_error_map[l_p][rank][l_n]=1; - schmoo_error_map[l_p][rank][l_n+1]=1; - } - if((schmoo_error_map[l_p][rank][l_n]==1)||(schmoo_error_map[l_p][rank][l_n+1]==1)){ - - schmoo_error_map[l_p][rank][l_n]=1; - schmoo_error_map[l_p][rank][l_n+1]=1; - } - - l_n=l_n+1; - - } - - - } - - } - rc=do_mcbist_test(i_target); - if(rc) - { - FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); - return rc; - } - - rc=check_error_map(i_target,l_p,pass); - if(rc) - { - FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); - return rc; - } - - } - - - for (l_p=0;l_p<MAX_PORT;l_p++){ - for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) - { - - rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; - rank=valid_rank[l_rank]; - rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; - for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ - //FAPI_INF("\n restoring nominal values for dqs=%d port=%d rank=%d is %d \n",l_n,l_p,rank,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);if(rc) return rc; + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_n]);if(rc) return rc; } } @@ -3693,7 +2481,7 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by8_isdimm(const fapi::Target & rank=valid_rank[l_rank]; rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc; + rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]);if(rc) return rc; l_dq=l_dq+4; } } @@ -3707,148 +2495,7 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by8_isdimm(const fapi::Target & return rc; } - rc=mcb_error_map(i_target,mcbist_error_map); - if(rc) - { - FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!"); - - return rc; - } - - - - } - - } - - if(bound==LEFT) - { - if(algorithm==SEQ_LIN) - { - - for (l_delay=1;(pass==0);l_delay++){ - - for (l_p=0;l_p<MAX_PORT;l_p++){ - for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) - { - l_dq=0; - l_dqs=0; - rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; - rank=valid_rank[l_rank]; - rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; - for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ - l_dq=4*l_n; - // l_max=SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]; - l_dqs=l_n/2; - - if((schmoo_error_map[l_p][rank][l_n]==0)&&(schmoo_error_map[l_p][rank][l_n+1]==0)){ - SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_dqs][l_rp]=SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_dqs][l_rp]-l_delay; - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_dqs,0,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_dqs][l_rp]);if(rc) return rc; - SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; - //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; - l_dq=l_dq+1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; - //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; - l_dq=l_dq+1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; - //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; - l_dq=l_dq+1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; - //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; - l_dq=l_dq+1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; - //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; - l_dq=l_dq+1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; - //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; - l_dq=l_dq+1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; - //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; - l_dq=l_dq+1; - SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; - //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; - } - if(SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_dqs][l_rp] == 0){ - schmoo_error_map[l_p][rank][l_n] = 1; - schmoo_error_map[l_p][rank][l_n+1] = 1; - } - - if((schmoo_error_map[l_p][rank][l_n]==1)||(schmoo_error_map[l_p][rank][l_n+1]==1)){ - - schmoo_error_map[l_p][rank][l_n]=1; - schmoo_error_map[l_p][rank][l_n+1]=1; - } - - l_n=l_n+1; - - } - } - - } - rc=do_mcbist_test(i_target); - if(rc) - { - FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); - return rc; - } - -rc=check_error_map(i_target,l_p,pass); - if(rc) - { - FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); - return rc; - } - - - } - - - for (l_p=0;l_p<MAX_PORT;l_p++){ - for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) - { - - rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; - rank=valid_rank[l_rank]; - rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; - for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ - //FAPI_INF("\n restoring nominal values for dqs=%d port=%d rank=%d is %d \n",l_n,l_p,rank,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);if(rc) return rc; - - } - } - } - - for(int l_bit=0;l_bit<4;l_bit++){ - for (l_p=0;l_p<MAX_PORT;l_p++){ - for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) - { - l_dq=l_bit; - rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; - rank=valid_rank[l_rank]; - rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; - for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc; - l_dq=l_dq+4; - } - } - } - } - rc=do_mcbist_test(i_target); - if(rc) - { - FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); - return rc; - } - - rc=mcb_error_map(i_target,mcbist_error_map); + rc=mcb_error_map(i_target,mcbist_error_map,l_CDarray0,l_CDarray1,count_bad_dq); if(rc) { FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!"); @@ -3858,12 +2505,13 @@ rc=check_error_map(i_target,l_p,pass); } - + //FAPI_INF("\n ######################### The Left Bound is over ################################ "); } return rc; } +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /*------------------------------------------------------------------------------ * Function: find_bound * Description : This function calls the knob_update for each DQ which is used to find bound that is left/right according to schmoo type @@ -3881,12 +2529,9 @@ fapi::ReturnCode generic_shmoo::find_bound(const fapi::Target & i_target,bound_t rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_WIDTH, &i_target, l_dram_width); if(rc) return rc; - FAPI_INF("\n SCHMOO IS IN PROGRESS ...... \n"); - // FAPI_INF("generic_shmoo::find_bound running find_bound function "); - - - //rc=knob_update_dqs_by8_isdimm(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc; - if(iv_DQS_ON == 1){ + FAPI_INF("%s:\n SCHMOO IS IN PROGRESS ...... \n",i_target.toEcmdString()); + + if(iv_shmoo_type == 3){ rc=do_mcbist_reset(i_target); if(rc) { @@ -3897,22 +2542,24 @@ fapi::ReturnCode generic_shmoo::find_bound(const fapi::Target & i_target,bound_t if(l_dram_width == 4){ if(iv_dmm_type==1) { - rc=knob_update_dqs_by4_isdimm(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc; + rc=knob_update_dqs_by4_isdimm(i_target,bound,iv_SHMOO_ON,l_bit,pass,flag); if(rc) return rc; }else{ - rc=knob_update_dqs_by4(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc; + + pass=0; + + rc=knob_update_dqs_by4(i_target,bound,iv_SHMOO_ON,l_bit,pass,flag); if(rc) return rc; } }else{ if(iv_dmm_type==1) { - rc=knob_update_dqs_by8_isdimm(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc; + //rc=knob_update_dqs_by8_isdimm(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc; }else{ - rc=knob_update_dqs_by8(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc; + + rc=knob_update_dqs_by4(i_target,bound,iv_SHMOO_ON,l_bit,pass,flag); if(rc) return rc; + //rc=knob_update_dqs_by8(i_target,bound,iv_SHMOO_ON,l_bit,pass,flag); if(rc) return rc; //rc=knob_update_dqs_by8_isdimm(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc; } } - }else if(iv_DQS_ON == 2){ - pass=0; - rc=knob_update_gate(i_target,bound,iv_shmoo_type,pass,flag); if(rc) return rc; } else{ //Bit loop @@ -3921,13 +2568,13 @@ fapi::ReturnCode generic_shmoo::find_bound(const fapi::Target & i_target,bound_t // preetham function here pass=0; - //FAPI_INF("\n abhijit is inside find bound and schmoo type is %d \n",iv_shmoo_type); - - //rc=knob_update(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc; + //////////////////////////////////////////////////////////////////////////////////// if(iv_shmoo_param==4){ rc=knob_update_bin(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc; }else{ + + //rc=knob_update_rd_eye_pwrfix(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc; rc=knob_update(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc; } @@ -3936,7 +2583,6 @@ fapi::ReturnCode generic_shmoo::find_bound(const fapi::Target & i_target,bound_t return rc; } -//#ifdef char /*------------------------------------------------------------------------------ * Function: print_report * Description : This function is used to print the information needed such as freq,voltage etc, and also the right,left and total margin @@ -3958,6 +2604,11 @@ fapi::ReturnCode generic_shmoo::print_report(const fapi::Target & i_target) uint8_t l_attr_eff_dimm_type_u8 = 0; uint8_t l_attr_eff_num_drops_per_port_u8 = 0; uint8_t l_attr_eff_dram_width_u8 = 0; + uint16_t l_total_margin=0; + //char l_str[60] = ""; + + char * l_pMike = new char[128]; + char * l_str = new char[128]; fapi::Target l_target_centaur; @@ -3973,31 +2624,36 @@ fapi::ReturnCode generic_shmoo::print_report(const fapi::Target & i_target) - FAPI_INF(" freq = %d on %s.", l_attr_mss_freq_u32, l_target_centaur.toEcmdString()); - FAPI_INF("volt = %d on %s.", l_attr_mss_volt_u32, l_target_centaur.toEcmdString()); - FAPI_INF("dimm_type = %d on %s.", l_attr_eff_dimm_type_u8, i_target.toEcmdString()); + FAPI_INF("%s: freq = %d on %s.",i_target.toEcmdString(),l_attr_mss_freq_u32, l_target_centaur.toEcmdString()); + FAPI_INF("%s: volt = %d on %s.",i_target.toEcmdString(), l_attr_mss_volt_u32, l_target_centaur.toEcmdString()); + FAPI_INF("%s: dimm_type = %d on %s.",i_target.toEcmdString(), l_attr_eff_dimm_type_u8, i_target.toEcmdString()); if ( l_attr_eff_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_CDIMM ) { - FAPI_INF("It is a CDIMM"); + FAPI_INF("%s: It is a CDIMM",i_target.toEcmdString()); } else { - FAPI_INF("It is an ISDIMM"); + FAPI_INF("%s: It is an ISDIMM",i_target.toEcmdString()); } - FAPI_INF("\n Number of ranks on port = 0 is %d ",iv_MAX_RANKS[0]); - FAPI_INF("\n Number of ranks on port = 1 is %d \n \n",iv_MAX_RANKS[1]); + FAPI_INF("%s: \n Number of ranks on port = 0 is %d ",i_target.toEcmdString(),iv_MAX_RANKS[0]); + FAPI_INF("%s: \n Number of ranks on port = 1 is %d \n \n",i_target.toEcmdString(),iv_MAX_RANKS[1]); - //FAPI_INF("num_drops_per_port = %d on %s.", l_attr_eff_num_drops_per_port_u8, i_target.toEcmdString()); - //FAPI_INF("num_ranks = %d on %s.", iv_MAX_RANKS,i_target.toEcmdString()); - //FAPI_INF("dram_width = %d on %s. \n\n", l_attr_eff_dram_width_u8, i_target.toEcmdString()); - FAPI_INF("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); + //FAPI_INF("%s:num_drops_per_port = %d on %s.", l_attr_eff_num_drops_per_port_u8, i_target.toEcmdString()); + //FAPI_INF("%s:num_ranks = %d on %s.", iv_MAX_RANKS,i_target.toEcmdString()); + //FAPI_INF("%s:dram_width = %d on %s. \n\n", l_attr_eff_dram_width_u8, i_target.toEcmdString()); + FAPI_INF("%s:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",i_target.toEcmdString()); //// Based on schmoo param the print will change eventually - if(iv_shmoo_type==2) + + if(iv_shmoo_type==0) { - FAPI_INF("Schmoo POS\tPort\tRank\tByte\tnibble\tbit\tNominal\t\tSetup_Limit\tHold_Limit\tWrD_Setup(ps)\tWrD_Hold(ps)\tEye_Width(ps)\tBitRate\tVref_Multiplier "); + sprintf(l_pMike,"Schmoo POS\tPort\tRank\tByte\tnibble\t\tSetup_Limit\tHold_Limit\tWrD_Setup(ps)\tWrD_Hold(ps)\tEye_Width(ps)\tBitRate\tVref_Multiplier "); }else{ - FAPI_INF("Schmoo POS\tPort\tRank\tByte\tnibble\tbit\tNominal\t\tSetup_Limit\tHold_Limit\tRdD_Setup(ps)\tRdD_Hold(ps)\tEye_Width(ps)\tBitRate\tVref_Multiplier "); - } + sprintf (l_pMike,"Schmoo POS\tPort\tRank\tByte\tnibble\t\tSetup_Limit\tHold_Limit\tRdD_Setup(ps)\tRdD_Hold(ps)\tEye_Width(ps)\tBitRate\tVref_Multiplier "); + } + //sprintf (l_pMike, "MIKE\tJONES + //FAPI_INF("Schmoo POS\tPort\tRank\tByte\tnibble\tbit\tNominal\t\tSetup_Limit\tHold_Limit \n"); + FAPI_INF("%s",l_pMike); + delete [] l_pMike; for (l_p=0;l_p<MAX_PORT;l_p++){ @@ -4014,14 +2670,17 @@ fapi::ReturnCode generic_shmoo::print_report(const fapi::Target & i_target) for(l_bit=0;l_bit< MAX_BITS;++l_bit) { l_dq=8*l_byte+4*l_nibble+l_bit; - - if(iv_shmoo_type==2) + l_total_margin=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.left_margin_val[l_dq]+SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.right_margin_val[l_dq]; + sprintf(l_str,"%d\t%d\t%d\t%d\t%d\t%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d",l_mbapos,l_p,i_rank,l_byte,l_nibble,l_bit,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.nom_val[l_dq],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.rb_regval[l_dq],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_dq],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.left_margin_val[l_dq],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.right_margin_val[l_dq],l_total_margin,l_attr_mss_freq_u32,iv_vref_mul); + if(iv_shmoo_type==0) { - FAPI_INF("WR_EYE %d\t%d\t%d\t%d\t%d\t%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n ",l_mbapos,l_p,i_rank,l_byte,l_nibble,l_bit,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.total_margin[l_dq][l_rp],l_attr_mss_freq_u32,iv_vref_mul); + FAPI_INF("WR_EYE %s ",l_str); + //FAPI_INF("WR_EYE %s %4d%4d%4d%4d%4d%4d ",l_str,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.nom_val[l_dq],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.rb_regval[l_dq],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_dq],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.left_margin_val[l_dq],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.right_margin_val[l_dq],l_total_margin); } - if(iv_shmoo_type==8) + if(iv_shmoo_type==1) { - FAPI_INF("RD_EYE %d\t%d\t%d\t%d\t%d\t%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n ",l_mbapos,l_p,i_rank,l_byte,l_nibble,l_bit,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.total_margin[l_dq][l_rp],l_attr_mss_freq_u32,iv_vref_mul); + FAPI_INF("RD_EYE %s ",l_str); + //FAPI_INF("RD_EYE %s %4d%4d%4d%4d%4d%4d ",l_str,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.nom_val[l_dq],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.rb_regval[l_dq],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_dq],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.left_margin_val[l_dq],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.right_margin_val[l_dq],l_total_margin); } } @@ -4030,11 +2689,11 @@ fapi::ReturnCode generic_shmoo::print_report(const fapi::Target & i_target) } } + delete [] l_str; return rc; } - - fapi::ReturnCode generic_shmoo::print_report_dqs(const fapi::Target & i_target) + fapi::ReturnCode generic_shmoo::print_report_dqs(const fapi::Target & i_target) { fapi::ReturnCode rc; @@ -4044,6 +2703,7 @@ fapi::ReturnCode generic_shmoo::print_report(const fapi::Target & i_target) uint8_t l_p=0; uint8_t i_rank=0; uint8_t l_mbapos = 0; + uint16_t l_total_margin = 0; uint32_t l_attr_mss_freq_u32 = 0; uint32_t l_attr_mss_volt_u32 = 0; uint8_t l_attr_eff_dimm_type_u8 = 0; @@ -4052,7 +2712,8 @@ fapi::ReturnCode generic_shmoo::print_report(const fapi::Target & i_target) fapi::Target l_target_centaur; uint8_t l_SCHMOO_NIBBLES=20; uint8_t l_by8_dqs=0; - + char * l_pMike = new char[128]; + char * l_str = new char[128]; if(iv_dmm_type==1) { @@ -4076,34 +2737,35 @@ fapi::ReturnCode generic_shmoo::print_report(const fapi::Target & i_target) } } - //FAPI_INF("Shmoonibbles val is=%d",l_SCHMOO_NIBBLES); + //FAPI_INF("%s:Shmoonibbles val is=%d",l_SCHMOO_NIBBLES); - FAPI_INF(" freq = %d on %s.", l_attr_mss_freq_u32, l_target_centaur.toEcmdString()); - FAPI_INF("volt = %d on %s.", l_attr_mss_volt_u32, l_target_centaur.toEcmdString()); - FAPI_INF("dimm_type = %d on %s.", l_attr_eff_dimm_type_u8, i_target.toEcmdString()); - FAPI_INF("\n Number of ranks on port=0 is %d ",iv_MAX_RANKS[0]); - FAPI_INF("\n Number of ranks on port=1 is %d ",iv_MAX_RANKS[1]); + FAPI_INF("%s: freq = %d on %s.",i_target.toEcmdString(), l_attr_mss_freq_u32, l_target_centaur.toEcmdString()); + FAPI_INF("%s:volt = %d on %s.",i_target.toEcmdString(), l_attr_mss_volt_u32, l_target_centaur.toEcmdString()); + FAPI_INF("%s:dimm_type = %d on %s.",i_target.toEcmdString(), l_attr_eff_dimm_type_u8, i_target.toEcmdString()); + FAPI_INF("%s:\n Number of ranks on port=0 is %d ",i_target.toEcmdString(),iv_MAX_RANKS[0]); + FAPI_INF("%s:\n Number of ranks on port=1 is %d ",i_target.toEcmdString(),iv_MAX_RANKS[1]); if ( l_attr_eff_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_CDIMM ) { - FAPI_INF("It is a CDIMM"); + FAPI_INF("%s:It is a CDIMM",i_target.toEcmdString()); } else { - FAPI_INF("It is an ISDIMM"); + FAPI_INF("%s:It is an ISDIMM",i_target.toEcmdString()); } - FAPI_INF("\n Number of ranks on port=0 is %d ",iv_MAX_RANKS[0]); - FAPI_INF("\n Number of ranks on port=1 is %d \n \n",iv_MAX_RANKS[1]); - //FAPI_INF("num_drops_per_port = %d on %s.", l_attr_eff_num_drops_per_port_u8, i_target.toEcmdString()); - //FAPI_INF("num_ranks = %d on %s.", iv_MAX_RANKS,i_target.toEcmdString()); - //FAPI_INF("dram_width = %d on %s. \n\n", l_attr_eff_dram_width_u8, i_target.toEcmdString()); + FAPI_INF("%s:\n Number of ranks on port=0 is %d ",i_target.toEcmdString(),iv_MAX_RANKS[0]); + FAPI_INF("%s:\n Number of ranks on port=1 is %d \n \n",i_target.toEcmdString(),iv_MAX_RANKS[1]); + //FAPI_INF("%s:num_drops_per_port = %d on %s.", l_attr_eff_num_drops_per_port_u8, i_target.toEcmdString()); + //FAPI_INF("%s:num_ranks = %d on %s.", iv_MAX_RANKS,i_target.toEcmdString()); + //FAPI_INF("%s:dram_width = %d on %s. \n\n", l_attr_eff_dram_width_u8, i_target.toEcmdString()); //fprintf(fp, "Schmoo POS\tPort\tRank\tDQS\tNominal\t\tSetup_Limit\tHold_Limit\tWrD_Setup(ps)\tWrD_Hold(ps)\tEye_Width(ps)\tBitRate \n"); FAPI_INF("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); - FAPI_INF("Schmoo POS\tPort\tRank\tDQS\tNominal\t\ttDQSSmin_PR_limit\ttDQSSmax_PR_limit\ttDQSSmin(ps)\ttDQSSmax(ps)\ttDQSS_Window(ps)\tBitRate "); - - iv_shmoo_type=4; + sprintf(l_pMike,"Schmoo POS\tPort\tRank\tDQS\tNominal\t\ttDQSSmin_PR_limit\ttDQSSmax_PR_limit\ttDQSSmin(ps)\ttDQSSmax(ps)\ttDQSS_Window(ps)\tBitRate "); + FAPI_INF("%s",l_pMike); + delete [] l_pMike; + //iv_shmoo_type=4; for (l_p=0;l_p<MAX_PORT;l_p++){ @@ -4127,113 +2789,30 @@ fapi::ReturnCode generic_shmoo::print_report(const fapi::Target & i_target) l_by8_dqs=l_nibble*2; } */ + l_total_margin=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.left_margin_val[l_nibble]+SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.right_margin_val[l_nibble]; + sprintf(l_str,"%d\t%d\t%d\t%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d",l_mbapos,l_p,i_rank,l_nibble,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.curr_val[l_nibble],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_nibble],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.rb_regval[l_nibble],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.left_margin_val[l_nibble],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.right_margin_val[l_nibble],l_total_margin,l_attr_mss_freq_u32); + //FAPI_INF("abhijit %s %d %d %d ",l_str,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.curr_val[l_nibble],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_nibble],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.rb_regval[l_by8_dqs]); //fprintf(fp,"WR_DQS %d\t%d\t%d\t%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n ",l_mbapos,l_p,i_rank,l_nibble,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.total_margin[l_by8_dqs][l_rp],l_attr_mss_freq_u32); - FAPI_INF("WR_DQS %d\t%d\t%d\t%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n ",l_mbapos,l_p,i_rank,l_nibble,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_nibble][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_nibble][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.total_margin[l_by8_dqs][l_rp],l_attr_mss_freq_u32); - - + //FAPI_INF("WR_DQS %s %4d%4d%4d ",l_mbapos,l_p,i_rank,l_nibble,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.curr_val[l_nibble],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_nibble],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.rb_regval[l_nibble],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.left_margin_val[l_nibble],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.right_margin_val[l_nibble],); + FAPI_INF("WR_DQS %s",l_str); + if(iv_dmm_type==0) + { + if(l_attr_eff_dram_width_u8 == 8) + { + l_nibble=l_by8_dqs; + } + } - } + + } } } - + delete [] l_str; //fclose(fp); return rc; } - fapi::ReturnCode generic_shmoo::print_report_gate(const fapi::Target & i_target) -{ - fapi::ReturnCode rc; - - uint8_t l_rank,l_n; - //uint8_t l_dq=0; - uint8_t l_rp=0; - uint8_t l_p=0; - uint8_t rank=0; - uint8_t l_mbapos = 0; - uint32_t l_attr_mss_freq_u32 = 0; - uint32_t l_attr_mss_volt_u32 = 0; - uint8_t l_attr_eff_dimm_type_u8 = 0; - uint8_t l_attr_eff_num_drops_per_port_u8 = 0; - uint8_t l_attr_eff_dram_width_u8 = 0; - fapi::Target l_target_centaur; - uint8_t l_SCHMOO_NIBBLES=20; - - - - if(iv_dmm_type==1) - { - l_SCHMOO_NIBBLES=18; - } - - rc = fapiGetParentChip(i_target, l_target_centaur); if(rc) return rc; - - rc = FAPI_ATTR_GET(ATTR_MSS_FREQ, &l_target_centaur, l_attr_mss_freq_u32); if(rc) return rc; - rc = FAPI_ATTR_GET(ATTR_MSS_VOLT, &l_target_centaur, l_attr_mss_volt_u32); if(rc) return rc; - rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_TYPE, &i_target, l_attr_eff_dimm_type_u8); if(rc) return rc; - rc = FAPI_ATTR_GET(ATTR_EFF_NUM_DROPS_PER_PORT, &i_target, l_attr_eff_num_drops_per_port_u8); if(rc) return rc; - rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_WIDTH, &i_target, l_attr_eff_dram_width_u8); if(rc) return rc; - rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, &i_target, l_mbapos);if(rc) return rc; - - if(l_attr_eff_dram_width_u8 == 8){ - l_SCHMOO_NIBBLES=20; - if(iv_dmm_type==1) - { - l_SCHMOO_NIBBLES=18; - } - } - - //FAPI_INF("Shmoonibbles val is=%d",l_SCHMOO_NIBBLES); - - FAPI_INF(" freq = %d on %s.", l_attr_mss_freq_u32, l_target_centaur.toEcmdString()); - FAPI_INF("volt = %d on %s.", l_attr_mss_volt_u32, l_target_centaur.toEcmdString()); - FAPI_INF("dimm_type = %d on %s.", l_attr_eff_dimm_type_u8, i_target.toEcmdString()); - FAPI_INF("\n Number of ranks on port=0 is %d ",iv_MAX_RANKS[0]); - FAPI_INF("\n Number of ranks on port=1 is %d ",iv_MAX_RANKS[1]); - - - if ( l_attr_eff_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_CDIMM ) - { - FAPI_INF("It is a CDIMM"); - } - else - { - FAPI_INF("It is an ISDIMM"); - } - - FAPI_INF("\n Number of ranks on port=0 is %d ",iv_MAX_RANKS[0]); - FAPI_INF("\n Number of ranks on port=1 is %d \n \n",iv_MAX_RANKS[1]); - //FAPI_INF("num_drops_per_port = %d on %s.", l_attr_eff_num_drops_per_port_u8, i_target.toEcmdString()); - //FAPI_INF("num_ranks = %d on %s.", iv_MAX_RANKS,i_target.toEcmdString()); - //FAPI_INF("dram_width = %d on %s. \n\n", l_attr_eff_dram_width_u8, i_target.toEcmdString()); - //fprintf(fp, "Schmoo POS\tPort\tRank\tDQS\tNominal\t\tSetup_Limit\tHold_Limit\tWrD_Setup(ps)\tWrD_Hold(ps)\tEye_Width(ps)\tBitRate \n"); - FAPI_INF("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); - FAPI_INF("Schmoo POS\tPort\tRank\tNIBBLE\tOFFSET\tBitRate "); - - - for (l_p=0;l_p<MAX_PORT;l_p++){ - for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) - { - - rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; - rank=valid_rank[l_rank]; - rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; - for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ - - - //FAPI_INF("\n schmoo=%d port=%d rank=%d and nibble=%d and value=%d ",iv_shmoo_type,l_p,rank,l_n,SHMOO[iv_shmoo_type].MBA.P[l_p].S[rank].K.offset[l_n]); - FAPI_INF("RD_DQS %d\t%d\t%d\t%d\t%d\t\t%d\n ",l_mbapos,l_p,rank,l_n,SHMOO[iv_shmoo_type].MBA.P[l_p].S[rank].K.offset[l_n],l_attr_mss_freq_u32); - //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq,bound); - - } - - - } - - } - - return rc; - } - + //#endif /*------------------------------------------------------------------------------ * Function: get_margin @@ -4284,35 +2863,35 @@ fapi::ReturnCode generic_shmoo::get_margin(const fapi::Target & i_target) { l_dq=8*l_byte+4*l_nibble+l_bit; //FAPI_INF(" the right bound = %d and nominal = %d",SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_dq][l_rp]); - if(iv_shmoo_type==8) + if(iv_shmoo_type==1) { - if(SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp] == 0){ + if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_dq] == 0){ //FAPI_INF("\n abhijit saurabh is here and dq=%d \n",l_dq); - SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp]=0; + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_dq]=0; if(iv_shmoo_param!=4){ - SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp]-2; + //SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_dq]-1; }else{ - SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp]-1; + //SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_dq]-1; } - //FAPI_INF("\n the value of left bound after is %d \n",SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp]); + //FAPI_INF("\n the value of left bound after is %d \n",SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_dq][l_rp]); } } if(iv_shmoo_param==4){ - if(SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_dq][l_rp]>SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_dq][l_rp]){ - SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_dq][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_dq][l_rp]-1; + if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.rb_regval[l_dq]>SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.nom_val[l_dq]){ + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.rb_regval[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.rb_regval[l_dq]-1; } - if(SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp]<SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_dq][l_rp]){ - SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp]+1; + if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_dq]<SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.nom_val[l_dq]){ + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_dq]+1; } }else{ - SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_dq][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_dq][l_rp]-1; - SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp]+1; + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.rb_regval[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.rb_regval[l_dq]-1; + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_dq]+1; } - SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_dq][l_rp]=((SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_dq][l_rp]-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_dq][l_rp])*l_factor)/l_factor_ps; - SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_dq][l_rp]= ((SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_dq][l_rp]-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp])*l_factor)/l_factor_ps;//((1/uint32_t_freq*1000000)/128); - SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.total_margin[l_dq][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_dq][l_rp]+SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_dq][l_rp]; + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.right_margin_val[l_dq]=((SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.rb_regval[l_dq]-SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.nom_val[l_dq])*l_factor)/l_factor_ps; + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.left_margin_val[l_dq]= ((SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.nom_val[l_dq]-SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_dq])*l_factor)/l_factor_ps;//((1/uint32_t_freq*1000000)/128); + // SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[i_rank].K.total_margin[l_dq][l_rp]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[i_rank].K.right_margin_val[l_dq][l_rp]+SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[i_rank].K.left_margin_val[l_dq][l_rp]; } } } @@ -4371,11 +2950,11 @@ fapi::ReturnCode generic_shmoo::get_margin(const fapi::Target & i_target) { //FAPI_INF("\n Abhijit 11111 is here after schmoo type=%d and port=%d \n",iv_shmoo_type,l_p); //FAPI_INF(" the right bound = %d and nominal = %d",SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_nibble][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_nibble][l_rp]); - SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_nibble][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_nibble][l_rp]-1; - SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_nibble][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_nibble][l_rp]+1; - SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_nibble][l_rp]=((SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_nibble][l_rp]-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_nibble][l_rp])*l_factor)/l_factor_ps; - SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_nibble][l_rp]= ((SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_nibble][l_rp]-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_nibble][l_rp])*l_factor)/l_factor_ps;//((1/uint32_t_freq*1000000)/128); - SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.total_margin[l_nibble][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_nibble][l_rp]+SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_nibble][l_rp]; + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.rb_regval[l_nibble]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.rb_regval[l_nibble]-1; + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_nibble]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_nibble]+1; + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.right_margin_val[l_nibble]=((SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.rb_regval[l_nibble]-SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.curr_val[l_nibble])*l_factor)/l_factor_ps; + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.left_margin_val[l_nibble]= ((SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.curr_val[l_nibble]-SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_nibble])*l_factor)/l_factor_ps;//((1/uint32_t_freq*1000000)/128); + //SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.total_margin[l_nibble]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.right_margin_val[l_nibble]+SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.left_margin_val[l_nibble]; //FAPI_INF("\n Abhijit is here after %d and port=%d \n",l_nibble,l_p); //FAPI_INF("\n Abhijit is here after 2 %d \n",l_rnk); } @@ -4445,11 +3024,12 @@ fapi::ReturnCode generic_shmoo::get_margin(const fapi::Target & i_target) //FAPI_INF("\n Abhijit 11111 is here after schmoo type=%d and port=%d \n",iv_shmoo_type,l_p); //FAPI_INF(" the port=%d rank=%d byte=%d right bound = %d and nominal = %d",l_p,i_rank,l_nibble,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_nibble][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_nibble][l_rp]); //FAPI_INF(" the port=%d rank=%d byte=%d left bound = %d and nominal = %d",l_p,i_rank,l_nibble,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_nibble][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_nibble][l_rp]); - SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_nibble][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_nibble][l_rp]-1; - SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_nibble][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_nibble][l_rp]+1; - SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_nibble][l_rp]=((SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_nibble][l_rp]-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_nibble][l_rp])*l_factor)/l_factor_ps; - SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_nibble][l_rp]= ((SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_nibble][l_rp]-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_nibble][l_rp])*l_factor)/l_factor_ps;//((1/uint32_t_freq*1000000)/128); - SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.total_margin[l_nibble][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_nibble][l_rp]+SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_nibble][l_rp]; + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.rb_regval[l_nibble]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.rb_regval[l_nibble]-1; + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_nibble]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_nibble]+1; + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.right_margin_val[l_nibble]=((SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.rb_regval[l_nibble]-SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.curr_val[l_nibble])*l_factor)/l_factor_ps; + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.left_margin_val[l_nibble]= ((SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.curr_val[l_nibble]-SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_nibble])*l_factor)/l_factor_ps;//((1/uint32_t_freq*1000000)/128); + //SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.total_margin[l_nibble]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.right_margin_val[l_nibble]+SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.left_margin_val[l_nibble]; + // SHMOO[iv_shmoo_type].MBA.P[l_p].S[l_rnk].K.total_margin[l_nibble]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[l_rnk].K.right_margin_val[l_nibble]+SHMOO[iv_shmoo_type].MBA.P[l_p].S[l_rnk].K.left_margin_val[l_nibble]; //FAPI_INF("\n Abhijit is here after %d and port=%d \n",l_nibble,l_p); //FAPI_INF("\n Abhijit is here after 2 %d \n",l_rnk); } @@ -4462,6 +3042,7 @@ fapi::ReturnCode generic_shmoo::get_margin(const fapi::Target & i_target) return rc; } + /*------------------------------------------------------------------------------ * Function: get_min_margin * Description : This function is used to get the minimum margin of all the schmoo margins @@ -4501,19 +3082,19 @@ fapi::ReturnCode generic_shmoo::get_min_margin(const fapi::Target & i_target,uin for(l_bit=0;l_bit< MAX_BITS;++l_bit) { l_dq=8*l_byte+4*l_nibble+l_bit; - if(SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_dq][l_rp]<l_temp_right) + if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.right_margin_val[l_dq]<l_temp_right) { - l_temp_right=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_dq][l_rp]; + l_temp_right=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.right_margin_val[l_dq]; } - if(SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_dq][l_rp]<l_temp_left) + if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.left_margin_val[l_dq]<l_temp_left) { - l_temp_left=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_dq][l_rp]; + l_temp_left=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.left_margin_val[l_dq]; } - // if(SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_dq][l_rp]<l_temp_right_nibble) + // if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[i_rank].K.right_margin_val[l_dq][l_rp]<l_temp_right_nibble) // { - // l_temp_right_nibble=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_dq][l_rp]; + // l_temp_right_nibble=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[i_rank].K.right_margin_val[l_dq][l_rp]; // } // if(SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_dq][l_rp]<l_temp_left_nibble) // { @@ -4536,7 +3117,7 @@ fapi::ReturnCode generic_shmoo::get_min_margin(const fapi::Target & i_target,uin // hacked for now till schmoo is running - if(iv_shmoo_type==8) + if(iv_shmoo_type==1) { *o_right_min_margin=l_temp_left; *o_left_min_margin=l_temp_right; @@ -4547,7 +3128,7 @@ fapi::ReturnCode generic_shmoo::get_min_margin(const fapi::Target & i_target,uin return rc; } - fapi::ReturnCode generic_shmoo::get_min_margin_dqs(const fapi::Target & i_target,uint32_t *o_right_min_margin,uint32_t *o_left_min_margin) +fapi::ReturnCode generic_shmoo::get_min_margin_dqs(const fapi::Target & i_target,uint32_t *o_right_min_margin,uint32_t *o_left_min_margin) { fapi::ReturnCode rc; uint8_t l_rnk,l_nibble,i_rank; @@ -4581,7 +3162,6 @@ fapi::ReturnCode generic_shmoo::get_min_margin(const fapi::Target & i_target,uin l_SCHMOO_NIBBLES=9; } } - iv_shmoo_type=4; for (l_p=0;l_p<MAX_PORT;l_p++){ for (l_rnk=0;l_rnk<iv_MAX_RANKS[l_p];++l_rnk) @@ -4601,30 +3181,36 @@ fapi::ReturnCode generic_shmoo::get_min_margin(const fapi::Target & i_target,uin } } - if(SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_by8_dqs][l_rp]<l_temp_right) + if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.right_margin_val[l_nibble]<l_temp_right) { - l_temp_right=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_by8_dqs][l_rp]; + l_temp_right=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.right_margin_val[l_nibble]; } - if(SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_by8_dqs][l_rp]<l_temp_left) + if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.left_margin_val[l_nibble]<l_temp_left) + { + l_temp_left=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.left_margin_val[l_nibble]; + } + + if(iv_dmm_type==0) + { + if(l_attr_eff_dram_width_u8 == 8) { - l_temp_left=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_by8_dqs][l_rp]; + l_nibble=l_by8_dqs; } + } + } } } // hacked for now till schmoo is running - if(iv_shmoo_type==8) - { + *o_right_min_margin=l_temp_left; *o_left_min_margin=l_temp_right; - }else{ - *o_right_min_margin=l_temp_right; - *o_left_min_margin=l_temp_left; - } + return rc; } + fapi::ReturnCode generic_shmoo:: schmoo_setup_mcb( const fapi::Target & i_target) { @@ -4646,11 +3232,11 @@ l_pattern=iv_pattern; l_testtype=iv_test_type; if(iv_shmoo_type==16){ -FAPI_INF("\n Read DQS is running \n"); -if(iv_DQS_ON==1){ +FAPI_INF("%s:\n Read DQS is running \n",i_target.toEcmdString()); +if(iv_SHMOO_ON==1){ l_testtype=3; } - if(iv_DQS_ON==2){ + if(iv_SHMOO_ON==2){ l_testtype=4; } } @@ -4659,13 +3245,9 @@ if(iv_DQS_ON==1){ rc = FAPI_ATTR_SET(ATTR_MCBIST_PATTERN, &i_target,l_pattern); if(rc) return rc;//-----------i_mcbpatt------->run rc = FAPI_ATTR_SET(ATTR_MCBIST_TEST_TYPE, &i_target, l_testtype); if(rc) return rc;//---------i_mcbtest------->run } -//rc = FAPI_ATTR_SET(ATTR_MCBIST_PATTERN, &i_target,iv_pattern); if(rc) return rc;//-----------i_mcbpatt------->run -//rc = FAPI_ATTR_SET(ATTR_MCBIST_TEST_TYPE, &i_target, iv_test_type); if(rc) return rc;//---------i_mcbtest------->run rc = setup_mcbist(i_target,i_mcbbytemask1,0,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 009f7d5f1..c0c53414d 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 @@ -5,7 +5,7 @@ /* */ /* IBM CONFIDENTIAL */ /* */ -/* COPYRIGHT International Business Machines Corp. 2012,2013 */ +/* COPYRIGHT International Business Machines Corp. 2012,2014 */ /* */ /* p1 */ /* */ @@ -20,7 +20,7 @@ /* Origin: 30 */ /* */ /* IBM_PROLOG_END_TAG */ -// $Id: mss_generic_shmoo.H,v 1.22 2013/08/08 11:08:58 sasethur Exp $ +// $Id: mss_generic_shmoo.H,v 1.24 2013/12/17 18:45:02 sasethur Exp $ // *!*************************************************************************** // *! (C) Copyright International Business Machines Corp. 1997, 1998 // *! All Rights Reserved -- Property of IBM @@ -39,6 +39,7 @@ //------------------------------------------------------------------------------ // Version:|Author: | Date: | Comment: // --------|--------|--------|-------------------------------------------------- +// 1.24 |abhijit |12/17/13|modified as per to support firmware // 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 @@ -77,7 +78,7 @@ class generic_shmoo struct PORT{ struct RANK{ shmoo_knob_data_t K; // Set of knobs used by this shmoo - }S[MAX_RANK]; + }S[MAX_RANK_DIMM]; } P[MAX_PORT]; }MBA; shmoo_knob_config_t static_knob; // Static info regarding the knob @@ -89,6 +90,7 @@ class generic_shmoo shmoo_algorithm_t algorithm; shmoo_mode mcbist_mode; uint8_t mcbist_error_map[MAX_PORT][MAX_RANK][MAX_BYTE][MAX_NIBBLES]; + uint8_t count_bad_dq[MAX_PORT]; 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; @@ -98,11 +100,11 @@ class generic_shmoo uint32_t iv_pattern; uint32_t iv_test_type; uint8_t iv_dmm_type; - uint8_t iv_DQS_ON; + uint8_t iv_SHMOO_ON; uint8_t iv_shmoo_type; - uint32_t iv_shmoo_param; - uint32_t iv_binary_diff; - uint32_t iv_vref_mul; + uint16_t iv_shmoo_param; + uint16_t iv_binary_diff; + uint16_t iv_vref_mul; uint8_t valid_rank[MAX_RANK]; @@ -116,26 +118,27 @@ class generic_shmoo generic_shmoo(uint8_t iv_addr,shmoo_type_t shmoo_mask,shmoo_algorithm_t shmoo_algorithm);// Constructor generic_shmoo(){}; ~generic_shmoo(){}; // Destructor - 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); + void init_multi_array(uint16_t (&array)[MAX_DQ],uint16_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 get_all_bad_dq(const fapi::Target & i_target); 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 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_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 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_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(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_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); @@ -147,8 +150,8 @@ class generic_shmoo 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 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 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); 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 17f95b6c7..c64790325 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 @@ -5,7 +5,7 @@ /* */ /* IBM CONFIDENTIAL */ /* */ -/* COPYRIGHT International Business Machines Corp. 2012,2013 */ +/* COPYRIGHT International Business Machines Corp. 2012,2014 */ /* */ /* p1 */ /* */ @@ -20,7 +20,7 @@ /* Origin: 30 */ /* */ /* IBM_PROLOG_END_TAG */ -// $Id: mss_mcbist.C,v 1.43 2013/10/04 06:32:21 sasethur Exp $ +// $Id: mss_mcbist.C,v 1.45 2013/12/17 18:36:53 sasethur Exp $ // *!*************************************************************************** // *! (C) Copyright International Business Machines Corp. 1997, 1998 // *! All Rights Reserved -- Property of IBM @@ -38,6 +38,7 @@ //------------------------------------------------------------------------------ // Version:|Author: | Date: | Comment: // --------|--------|--------|-------------------------------------------------- +// 1.45 |aditya |12/17/13|Added Simple_fix_rf // 1.43 |aditya |10/05/13|Updated fw comments // 1.42 |aditya |09/18/13|Updated Call for functions // 1.41 |aditya |08/10/13|Minor Fix for Hostboot compile @@ -85,7 +86,7 @@ extern "C" { using namespace fapi; - +const uint8_t MAX_BYTE = 10; //*****************************************************************/ // Funtion name : cfg_mcb_test_mem // Description : This function executes different MCBIST subtests @@ -213,6 +214,18 @@ fapi::ReturnCode cfg_mcb_test_mem(const fapi::Target & i_target_mba,mcbist_test 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_FIX_RF) + { + FAPI_DBG("%s:Current MCBIST TESTTYPE : SIMPLE_FIX_RF ",i_target_mba.toEcmdString()); + 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; + 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,DATA_RF, 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,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,4,4,l_sub_info); if(rc) return rc; + } else { @@ -305,6 +318,7 @@ fapi::ReturnCode cfg_mcb_dgen(const fapi::Target & i_target_mba,mcbist_data_gen 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; @@ -317,6 +331,16 @@ fapi::ReturnCode cfg_mcb_dgen(const fapi::Target & i_target_mba,mcbist_data_gen FAPI_INF(" Data mode is %d ",i_datamode);} uint8_t l_mbaPosition =0; + + 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(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); @@ -484,12 +508,6 @@ fapi::ReturnCode cfg_mcb_dgen(const fapi::Target & i_target_mba,mcbist_data_gen 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) { @@ -710,13 +728,13 @@ fapi::ReturnCode cfg_mcb_dgen(const fapi::Target & i_target_mba,mcbist_data_gen if(l_mbaPosition == 0) { - rc = fapiPutScom(i_target_mba, l_mbs01_mcb_random[l_index] , l_data_buffer_64); if(rc) return rc;//added + rc = fapiPutScom(i_target_centaur, l_mbs01_mcb_random[l_index] , l_data_buffer_64); if(rc) return rc;//added } else { - rc = fapiPutScom(i_target_mba, l_mbs23_mcb_random[l_index] , l_data_buffer_64); if(rc) return rc;//added + rc = fapiPutScom(i_target_centaur, l_mbs23_mcb_random[l_index] , l_data_buffer_64); if(rc) return rc;//added } } diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist.H b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist.H index 54abd43ce..3c57eb92c 100755 --- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist.H +++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist.H @@ -5,7 +5,7 @@ /* */ /* IBM CONFIDENTIAL */ /* */ -/* COPYRIGHT International Business Machines Corp. 2012,2013 */ +/* COPYRIGHT International Business Machines Corp. 2012,2014 */ /* */ /* p1 */ /* */ @@ -20,16 +20,16 @@ /* Origin: 30 */ /* */ /* IBM_PROLOG_END_TAG */ -// $Id: mss_mcbist.H,v 1.38 2013/09/18 10:10:47 lapietra Exp $ +// $Id: mss_mcbist.H,v 1.41 2013/12/17 18:34:53 sasethur Exp $ // *!*************************************************************************** // *! (C) Copyright International Business Machines Corp. 1997, 1998 // *! All Rights Reserved -- Property of IBM // *! *** IBM Confidential *** // *!*************************************************************************** // *! FILENAME : mss_mcbist.H -// *! TITLE : +// *! TITLE : // *! DESCRIPTION : MCBIST procedures -// *! CONTEXT : +// *! CONTEXT : // *! // *! OWNER NAME : Devashikamani, Aditya Email: adityamd@in.ibm.com // *! BACKUP : Sethuraman, Saravanan Email: saravanans@in.ibm.com @@ -38,6 +38,9 @@ //------------------------------------------------------------------------------- // Version:|Author: | Date: | Comment: // --------|--------|---------|-------------------------------------------------- +// 1.41 |aditya |12/17/13 |Updated mcb_error_map function parameters +// 1.40 |rwheeler|10/29/13 |added W_ONLY_INFINITE_RAND test +// 1.39 |aditya |10/29/13 |Updated mcb_error_map function parameters // 1.38 |aditya |09/18/13 |Updated parameters for random seed attribute // 1.37 |aditya |08/02/13 |Updated parameters in mcb_error_map_print function // 1.36 |aditya |07/09/13 |Added l_random_addr_enable and l_fixed_addr_enable for struct Subtest_info @@ -50,21 +53,21 @@ // 1.27 |aditya |02/13/13 |updated testtypes // 1.25 |aditya |02/12/13 |updated testtypes // 1.24 |aditya |01/30/13 |Updated fw comments -// 1.23 |aditya |01/16/13 |added a parameter to setup_mcbist function -// 1.22 |aditya |01/11/13 |added a parameter to setup_mcbist function -// 1.21 |aditya |01/07/13 | Updated FW Review Comments -// 1.20 |aditya |01/03/13 | Updated FW Comments -// 1.18 |aditya |12/18/12 | Updated Review Comments -// 1.17 |aditya |12/14/12 |Updated FW review comments +// 1.23 |aditya |01/16/13 |added a parameter to setup_mcbist function +// 1.22 |aditya |01/11/13 |added a parameter to setup_mcbist function +// 1.21 |aditya |01/07/13 | Updated FW Review Comments +// 1.20 |aditya |01/03/13 | Updated FW Comments +// 1.18 |aditya |12/18/12 | Updated Review Comments +// 1.17 |aditya |12/14/12 |Updated FW review comments // 1.16 |aditya |12/6/12 | Updated Review Comments // 1.15 |aditya |11/15/12 | Updated for FW REVIEW COMMENTS // 1.13 |aditya |10/29/12 | Updated from ReturnCode to fapi::ReturnCode and Target to const fapi::Target & -// 1.12 |aditya |10/18/12 | Changed Parameters for Function mcb_write_test_mem +// 1.12 |aditya |10/18/12 | Changed Parameters for Function mcb_write_test_mem // 1.11 |aditya |10/17/12 | updated code to be compatible with ecmd 13 release -// 1.10 |aditya |15-Oct-12| Moved scom address to cen_scom_addresses.H, added user option +// 1.10 |aditya |15-Oct-12| Moved scom address to cen_scom_addresses.H, added user option // 1.9 |bellows |16-Jul-12| Added in Id tag // 1.6 |gaushard|26/03/12 | Removed Extra Comments/Codes -// 1.5 |gaushard|26/03/12 | Updated Function Declaration +// 1.5 |gaushard|26/03/12 | Updated Function Declaration // 1.4 |sasethur|23/03/12 | Added enum for shmoo mode // 1.3 |gaushard|22/03/12 | Added address generation function // 1.2 |sasethur|24/02/12 | Updated Typo @@ -79,7 +82,7 @@ #include <fapi.H> #include <cen_scom_addresses.H> #include <mss_access_delay_reg.H> -#include <mss_shmoo_common.H> + extern "C" { using namespace fapi; @@ -126,12 +129,13 @@ enum mcbist_test_mem R_INFINITE_RF, MARCH, SIMPLE_FIX_RF, - SHMOO_STRESS, - SIMPLE_RAND_RA, - SIMPLE_FIX_RA, - SIMPLE_FIX_RF_RA, - TEST_RR, - TEST_RF + SHMOO_STRESS, + SIMPLE_RAND_RA, + SIMPLE_FIX_RA, + SIMPLE_FIX_RF_RA, + TEST_RR, + TEST_RF, + W_ONLY_INFINITE_RAND }; enum mcbist_data_gen @@ -199,8 +203,8 @@ enum mcbist_oper_type enum mcbist_data_mode { FIX, - DATA_RF, - DATA_RR, + DATA_RF, + DATA_RR, RECCF, RECCB, DEA, @@ -264,9 +268,9 @@ enum shmoo_mode enum shmoo_addr_mode { - FEW_ADDR= 0, - QUARTER_ADDR = 1, - HALF_ADDR = 2, + FEW_ADDR= 0, + QUARTER_ADDR = 1, + HALF_ADDR = 2, FULL_ADDR = 3 }; @@ -279,11 +283,11 @@ uint8_t l_random_data_enable; uint8_t l_fixed_data_enable; uint8_t l_random_addr_enable; uint8_t l_fixed_addr_enable; -}; +}; fapi::ReturnCode poll_mcb(const fapi::Target & i_target_mba,uint8_t *o_mcb_status,struct Subtest_info l_sub_info[30],uint8_t i_flag); -fapi::ReturnCode mcb_error_map(const fapi::Target & i_target_mba,uint8_t o_error_map[][8][10][2]); +fapi::ReturnCode mcb_error_map(const fapi::Target & i_target_mba,uint8_t o_error_map[][8][10][2],uint8_t i_CDarray0[80],uint8_t i_CDarray1[80],uint8_t count_bad_dq[2]); fapi::ReturnCode mcb_write_test_mem(const fapi::Target & i_target_mba,const uint64_t i_reg_addr,mcbist_oper_type i_operation_type,uint8_t i_cfg_test_123_cmd,mcbist_addr_mode i_addr_mode,mcbist_data_mode i_data_mode,uint8_t i_done,mcbist_data_select_mode i_data_select_mode, mcbist_add_select_mode i_addr_select_mode,uint8_t i_testnumber,uint8_t i_testnumber1,uint8_t i_total_no,struct Subtest_info l_sub_info[30]); fapi::ReturnCode cfg_mcb_test_mem(const fapi::Target & i_target_mba,mcbist_test_mem i_test_type,struct Subtest_info l_sub_info[30]); fapi::ReturnCode mcb_reset_trap(const fapi::Target & i_target_mba); @@ -293,7 +297,7 @@ fapi::ReturnCode start_mcb(const fapi::Target & i_target_mba); fapi::ReturnCode setup_mcbist(const fapi::Target & i_target_mba,mcbist_byte_mask i_mcbbytemask,uint8_t i_mcbrotate,struct Subtest_info l_sub_info[30]); //fapi::ReturnCode mcb_error_map_print(const fapi::Target & i_target_mba,ecmdDataBufferBase & i_mcb_fail_320,uint8_t i_port); //fapi::ReturnCode mcb_error_map_print(const fapi::Target & i_target_mba,ecmdDataBufferBase & l_mcb_fail_160,uint8_t i_port,uint8_t l_array[200],uint8_t l_number); -fapi::ReturnCode mcb_error_map_print(const fapi::Target & i_target_mba,ecmdDataBufferBase & l_mcb_fail_160,uint8_t i_port,uint8_t l_array[200],uint8_t l_number,ecmdDataBufferBase l_data_buf_port,ecmdDataBufferBase l_data_buf_spare); +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[80],uint8_t l_number,ecmdDataBufferBase l_data_buf_port,ecmdDataBufferBase l_data_buf_spare); fapi::ReturnCode mss_conversion_testtype(const fapi::Target & i_target_mba,uint8_t l_pattern,mcbist_test_mem &i_mcbtest ); fapi::ReturnCode mss_conversion_data(const fapi::Target & i_target_mba,uint8_t l_pattern,mcbist_data_gen &i_mcbpatt); diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_address.C b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_address.C index f36b459b8..ae34690e8 100644 --- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_address.C +++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_address.C @@ -5,7 +5,7 @@ /* */ /* IBM CONFIDENTIAL */ /* */ -/* COPYRIGHT International Business Machines Corp. 2013 */ +/* COPYRIGHT International Business Machines Corp. 2013,2014 */ /* */ /* p1 */ /* */ @@ -20,7 +20,7 @@ /* Origin: 30 */ /* */ /* IBM_PROLOG_END_TAG */ -// $Id: mss_mcbist_address.C,v 1.11 2013/05/16 22:00:24 sasethur Exp $ +// $Id: mss_mcbist_address.C,v 1.13 2013/12/18 10:40:10 sasethur Exp $ // *!*************************************************************************** // *! (C) Copyright International Business Machines Corp. 1997, 1998, 2013 // *! All Rights Reserved -- Property of IBM @@ -38,6 +38,8 @@ //------------------------------------------------------------------------------- // Version:|Author: | Date: | Comment: // --------|--------|---------|-------------------------------------------------- +// 1.13 |preet |18-Dec-13| Added 64K default for few addr_mode +// 1.12 |preet |17-Dec-13| Added Addr modes // 1.11 |preeragh|17-May-13| Fixed FW Review Comments // 1.10 |preeragh|30-Apr-13| Fixed FW Review Comment // 1.9 |bellows |04-Apr-13| Changed program to be Hostboot compliant @@ -99,16 +101,16 @@ rc = FAPI_ATTR_GET(ATTR_MCBIST_ADDR_INTER, &i_target_mba, l_addr_inter); if(rc) //------------------------------ Debug Stuff ------------------------------- -FAPI_INF("ATTR_EFF_NUM_RANKS_PER_DIMM is %d ",l_num_ranks_per_dimm[0][0]); -FAPI_INF("ATTR_EFF_NUM_RANKS_PER_DIMM is %d ",l_num_ranks_per_dimm[0][1]); -FAPI_INF("ATTR_EFF_NUM_RANKS_PER_DIMM is %d ",l_num_ranks_per_dimm[1][0]); -FAPI_INF("ATTR_EFF_NUM_RANKS_PER_DIMM is %d ",l_num_ranks_per_dimm[1][1]); +//FAPI_INF("ATTR_EFF_NUM_RANKS_PER_DIMM is %d ",l_num_ranks_per_dimm[0][0]); +//FAPI_INF("ATTR_EFF_NUM_RANKS_PER_DIMM is %d ",l_num_ranks_per_dimm[0][1]); +//FAPI_INF("ATTR_EFF_NUM_RANKS_PER_DIMM is %d ",l_num_ranks_per_dimm[1][0]); +//FAPI_INF("ATTR_EFF_NUM_RANKS_PER_DIMM is %d ",l_num_ranks_per_dimm[1][1]); //------------------------------ Debug Stuff ------------------------------- -FAPI_INF("ATTR_EFF_NUM_MASTER_RANKS_PER_DIMM l_num_master_p0_dim0 is %d ",l_num_master_ranks[0][0]); -FAPI_INF("ATTR_EFF_NUM_MASTER_RANKS_PER_DIMM l_num_master_p0_dim1 is %d ",l_num_master_ranks[0][1]); -FAPI_INF("ATTR_EFF_NUM_MASTER_RANKS_PER_DIMM l_num_master_p1_dim0 is %d ",l_num_master_ranks[1][0]); -FAPI_INF("ATTR_EFF_NUM_MASTER_RANKS_PER_DIMM l_num_master_p1_dim1 is %d ",l_num_master_ranks[1][1]); +//FAPI_INF("ATTR_EFF_NUM_MASTER_RANKS_PER_DIMM l_num_master_p0_dim0 is %d ",l_num_master_ranks[0][0]); +//FAPI_INF("ATTR_EFF_NUM_MASTER_RANKS_PER_DIMM l_num_master_p0_dim1 is %d ",l_num_master_ranks[0][1]); +//FAPI_INF("ATTR_EFF_NUM_MASTER_RANKS_PER_DIMM l_num_master_p1_dim0 is %d ",l_num_master_ranks[1][0]); +//FAPI_INF("ATTR_EFF_NUM_MASTER_RANKS_PER_DIMM l_num_master_p1_dim1 is %d ",l_num_master_ranks[1][1]); //------------------------------------------------------------------------------- @@ -125,24 +127,24 @@ mr1_valid = 0; if( (l_num_ranks_p0_dim0 == 1 && l_num_ranks_p0_dim1 == 0) || (l_num_ranks_p1_dim0 == 1 && l_num_ranks_p1_dim1 == 0) ) //Single Rank case -- default0 { //do rank-only stuff for this - FAPI_INF("--- INSIDE 1R"); + //FAPI_INF("--- INSIDE 1R"); l_addr_inter=3; } else if ( (l_num_ranks_p0_dim0 == 1 && l_num_ranks_p0_dim1 == 1) || (l_num_ranks_p1_dim0 == 1 && l_num_ranks_p1_dim1 == 1) ) { - FAPI_INF("--- INSIDE p0d0 valid and p0d1 valid --- 0 4---- 2R"); + //FAPI_INF("--- INSIDE p0d0 valid and p0d1 valid --- 0 4---- 2R"); mr1_valid=1; } else if ( (l_num_ranks_p0_dim0 == 2 && l_num_ranks_p0_dim1 == 0) || (l_num_ranks_p1_dim0 == 2 && l_num_ranks_p1_dim1 == 0) ) { - FAPI_INF("--- INSIDE p0d0 valid and p0d1 valid --- 0 1---- 2R"); + //FAPI_INF("--- INSIDE p0d0 valid and p0d1 valid --- 0 1---- 2R"); mr3_valid=1; } else if ((l_num_ranks_p0_dim0 == 2 && l_num_ranks_p0_dim1 == 2)|| (l_num_ranks_p1_dim0 == 2 && l_num_ranks_p1_dim1 == 2)) //Rank 01 and 45 case { - FAPI_INF("--- INSIDE --- 2R 0145"); + //FAPI_INF("--- INSIDE --- 2R 0145"); mr3_valid = 1; mr1_valid=1; } @@ -162,20 +164,20 @@ else if ((l_num_ranks_p0_dim0 == 4 && l_num_ranks_p0_dim1 == 4) || (l_num_ranks_ else { - FAPI_INF("-- Error ---- Check Config ----- "); + FAPI_INF("-- Error ---- mcbist_addr_Check dimm_Config ----- "); } -FAPI_INF("ATTR_EFF_DRAM_GEN is %d ",l_dram_gen); -FAPI_INF("ATTR_EFF_DRAM_BANKS is %d ",l_dram_banks); -FAPI_INF("ATTR_EFF_DRAM_ROWS is %d ",l_dram_rows); -FAPI_INF("ATTR_EFF_DRAM_COLS is %d ",l_dram_cols); -FAPI_INF("ATTR_EFF_DRAM_DENSITY is %d ",l_dram_density); -FAPI_INF("ATTR_EFF_DRAM_WIDTH is %d ",l_dram_width); -FAPI_INF("ATTR_ADDR_INTER Mode is %d ",l_addr_inter); +//FAPI_INF("ATTR_EFF_DRAM_GEN is %d ",l_dram_gen); +//FAPI_INF("ATTR_EFF_DRAM_BANKS is %d ",l_dram_banks); +//FAPI_INF("ATTR_EFF_DRAM_ROWS is %d ",l_dram_rows); +//FAPI_INF("ATTR_EFF_DRAM_COLS is %d ",l_dram_cols); +//FAPI_INF("ATTR_EFF_DRAM_DENSITY is %d ",l_dram_density); +//FAPI_INF("ATTR_EFF_DRAM_WIDTH is %d ",l_dram_width); +//FAPI_INF("ATTR_ADDR_INTER Mode is %d ",l_addr_inter); -FAPI_INF("--- BANK-RANK Address interleave ---"); +//FAPI_INF("--- BANK-RANK Address interleave ---"); rc = parse_addr(i_target_mba,S0,mr3_valid,mr2_valid,mr1_valid,l_dram_rows,l_dram_cols,l_addr_inter);if(rc) return rc; @@ -203,7 +205,7 @@ uint8_t l_value_zero = 0; uint8_t l_user_end_addr = 0; ecmdDataBufferBase l_data_buffer_64(64); ecmdDataBufferBase l_data_buffer_rd64(64); -uint8_t l_attr_addr_mode = 3; //default Value - FULL Address Mode +uint8_t l_attr_addr_mode = 0; uint8_t l_num_cols = 0; uint8_t l_num_rows = 0; @@ -241,24 +243,24 @@ rc_num = l_data_buffer_64.flushTo0(); rc = fapiPutScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc; i--; - //FAPI_INF("Inside strcmp ba2"); + ////FAPI_INF("Inside strcmp ba2"); l_sbit = 48;l_value =i; rc = fapiGetScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc; rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value,l_sbit ,6); rc = fapiPutScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc; i--; - //FAPI_INF("Inside strcmp ba3"); + ////FAPI_INF("Inside strcmp ba3"); l_sbit = 42;l_value =i; //------- Enable these for DDR4 --- for now constant map to zero rc = fapiGetScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc; - FAPI_INF("ba3 Invalid"); + //FAPI_INF("ba3 Invalid"); rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6); rc = fapiPutScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc; i++; - //FAPI_INF("Inside strcmp mr3"); + ////FAPI_INF("Inside strcmp mr3"); l_sbit = 18;l_value =i; rc = fapiGetScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc; if(mr3_valid==1) @@ -272,19 +274,19 @@ rc_num = l_data_buffer_64.flushTo0(); { rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;} rc = fapiPutScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc; - FAPI_INF("mr3 Invalid"); + //FAPI_INF("mr3 Invalid"); i++; } - //FAPI_INF("Inside strcmp mr2"); + ////FAPI_INF("Inside strcmp mr2"); l_sbit = 12;l_value =i; rc = fapiGetScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc; if(mr2_valid==1) { rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;} - FAPI_INF("Inside mr2 --- l_addr_inter"); + //FAPI_INF("Inside mr2 --- l_addr_inter"); rc = fapiPutScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc; i--; } @@ -293,20 +295,20 @@ rc_num = l_data_buffer_64.flushTo0(); { rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;} rc = fapiPutScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc; - FAPI_INF("mr2 Invalid"); + //FAPI_INF("mr2 Invalid"); i++; } - //FAPI_INF("Inside strcmp mr1"); + ////FAPI_INF("Inside strcmp mr1"); l_sbit = 6;l_value =i; rc = fapiGetScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc; if(mr1_valid==1) { rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;} - FAPI_INF("Inside mr1 --- l_addr_inter"); + //FAPI_INF("Inside mr1 --- l_addr_inter"); rc = fapiPutScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc; i--; } @@ -314,7 +316,7 @@ rc_num = l_data_buffer_64.flushTo0(); { rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;} rc = fapiPutScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc; - FAPI_INF("mr1 Invalid"); + //FAPI_INF("mr1 Invalid"); i++; } @@ -322,31 +324,31 @@ rc_num = l_data_buffer_64.flushTo0(); - //FAPI_INF("Inside strcmp mr0"); + ////FAPI_INF("Inside strcmp mr0"); l_sbit = 0;l_value =i; //------- Enable these for DDR4 --- for now constant map to zero rc = fapiGetScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc; rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;} rc = fapiPutScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc; i++; - //FAPI_INF("Value of i = %d",i); - FAPI_INF("mr0 Invalid\n"); + ////FAPI_INF("Value of i = %d",i); + //FAPI_INF("mr0 Invalid\n"); - //FAPI_INF("Inside strcmp cl3"); + ////FAPI_INF("Inside strcmp cl3"); l_sbit = 42;l_value =i; rc = fapiGetScom(i_target_mba,0x030106cb,l_data_buffer_64); if(rc) return rc; rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;} rc = fapiPutScom(i_target_mba,0x030106cb,l_data_buffer_64); if(rc) return rc; i++; - FAPI_INF("col2 Invalid"); - //FAPI_INF("Value of i = %d",i); + //FAPI_INF("col2 Invalid"); + ////FAPI_INF("Value of i = %d",i); - //FAPI_INF("Inside strcmp cl3"); + ////FAPI_INF("Inside strcmp cl3"); l_sbit = 36;l_value =i; rc = fapiGetScom(i_target_mba,0x030106cb,l_data_buffer_64); if(rc) return rc; if(l_num_cols >= 1) @@ -359,11 +361,11 @@ rc_num = l_data_buffer_64.flushTo0(); { rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;} rc = fapiPutScom(i_target_mba,0x030106cb,l_data_buffer_64); if(rc) return rc; - FAPI_INF("Col 3 -- Invalid"); + //FAPI_INF("Col 3 -- Invalid"); i++; } - //FAPI_INF("Inside strcmp cl4"); + ////FAPI_INF("Inside strcmp cl4"); l_sbit = 30;l_value =i; rc = fapiGetScom(i_target_mba,0x030106cb,l_data_buffer_64); if(rc) return rc; if(l_num_cols >= 2) @@ -373,18 +375,18 @@ rc_num = l_data_buffer_64.flushTo0(); i--; } - //FAPI_INF("Value of i = %d",i); + ////FAPI_INF("Value of i = %d",i); else { rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;} rc = fapiPutScom(i_target_mba,0x030106cb,l_data_buffer_64); if(rc) return rc; - FAPI_INF("Col 4 -- Invalid"); + //FAPI_INF("Col 4 -- Invalid"); i++; } - //FAPI_INF("Inside strcmp cl5"); + ////FAPI_INF("Inside strcmp cl5"); l_sbit = 24;l_value =i; rc = fapiGetScom(i_target_mba,0x030106cb,l_data_buffer_64); if(rc) return rc; if(l_num_cols >= 3) @@ -397,11 +399,11 @@ rc_num = l_data_buffer_64.flushTo0(); { rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;} rc = fapiPutScom(i_target_mba,0x030106cb,l_data_buffer_64); if(rc) return rc; - FAPI_INF("Col 5 -- Invalid"); + //FAPI_INF("Col 5 -- Invalid"); i++; } - //FAPI_INF("Inside strcmp cl6"); + ////FAPI_INF("Inside strcmp cl6"); l_sbit = 18;l_value =i; rc = fapiGetScom(i_target_mba,0x030106cb,l_data_buffer_64); if(rc) return rc; if(l_num_cols >= 4) @@ -410,18 +412,18 @@ rc_num = l_data_buffer_64.flushTo0(); rc = fapiPutScom(i_target_mba,0x030106cb,l_data_buffer_64); if(rc) return rc; i--; } - //FAPI_INF("Value of i = %d",i); + ////FAPI_INF("Value of i = %d",i); else { rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;} rc = fapiPutScom(i_target_mba,0x030106cb,l_data_buffer_64); if(rc) return rc; - FAPI_INF("Col 6 -- Invalid"); + //FAPI_INF("Col 6 -- Invalid"); i++; } - //FAPI_INF("Inside strcmp cl7"); + ////FAPI_INF("Inside strcmp cl7"); l_sbit = 12;l_value =i; rc = fapiGetScom(i_target_mba,0x030106cb,l_data_buffer_64); if(rc) return rc; if(l_num_cols >= 5) @@ -430,18 +432,18 @@ rc_num = l_data_buffer_64.flushTo0(); rc = fapiPutScom(i_target_mba,0x030106cb,l_data_buffer_64); if(rc) return rc; i--; } - //FAPI_INF("Value of i = %d",i); + ////FAPI_INF("Value of i = %d",i); else { rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;} rc = fapiPutScom(i_target_mba,0x030106cb,l_data_buffer_64); if(rc) return rc; - FAPI_INF("Col 7 -- Invalid"); + //FAPI_INF("Col 7 -- Invalid"); i++; } - //FAPI_INF("Inside strcmp cl8"); + ////FAPI_INF("Inside strcmp cl8"); l_sbit = 6;l_value =i; rc = fapiGetScom(i_target_mba,0x030106cb,l_data_buffer_64); if(rc) return rc; if(l_num_cols >= 6) @@ -450,18 +452,18 @@ rc_num = l_data_buffer_64.flushTo0(); rc = fapiPutScom(i_target_mba,0x030106cb,l_data_buffer_64); if(rc) return rc; i--; } - //FAPI_INF("Value of i = %d",i); + ////FAPI_INF("Value of i = %d",i); else { rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;} rc = fapiPutScom(i_target_mba,0x030106cb,l_data_buffer_64); if(rc) return rc; - FAPI_INF("Col 8 -- Invalid"); + //FAPI_INF("Col 8 -- Invalid"); i++; } - //FAPI_INF("Inside strcmp cl9"); + ////FAPI_INF("Inside strcmp cl9"); l_sbit = 0;l_value =i; rc = fapiGetScom(i_target_mba,0x030106cb,l_data_buffer_64); if(rc) return rc; if(l_num_cols >= 7) @@ -473,20 +475,33 @@ rc_num = l_data_buffer_64.flushTo0(); { rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;} rc = fapiPutScom(i_target_mba,0x030106cb,l_data_buffer_64); if(rc) return rc; - FAPI_INF("Col 9 -- Invalid"); + //FAPI_INF("Col 9 -- Invalid"); i++; } - //FAPI_INF("Inside strcmp cl11"); + ////FAPI_INF("Inside strcmp cl11"); l_sbit = 54;l_value =i; rc = fapiGetScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc; if(l_num_cols >= 11) { + if(l_dram_cols >=11) + { rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;} rc = fapiPutScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc; + //FAPI_DBG("%s: Inside l_dram_cols > 10"); i--; + } + else + { + rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;} + rc = fapiPutScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc; + FAPI_DBG("%s:Col 11 -- Invalid",i_target_mba.toEcmdString()); + i++; + } + + } @@ -494,16 +509,16 @@ rc_num = l_data_buffer_64.flushTo0(); { rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;} rc = fapiPutScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc; - FAPI_INF("Col 11 -- Invalid"); + //FAPI_INF("Col 11 -- Invalid"); i++; } - //FAPI_INF("Value of i = %d",i); + ////FAPI_INF("Value of i = %d",i); - //FAPI_INF("Inside strcmp cl13"); + ////FAPI_INF("Inside strcmp cl13"); l_sbit = 48;l_value =i; rc = fapiGetScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc; if(l_num_cols >= 12) @@ -516,16 +531,16 @@ rc_num = l_data_buffer_64.flushTo0(); { rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;} rc = fapiPutScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc; - FAPI_INF("Col 13 Invalid"); + //FAPI_INF("Col 13 Invalid"); i++; } - //FAPI_INF("Value of i = %d",i); + ////FAPI_INF("Value of i = %d",i); - //FAPI_INF("Inside strcmp r0"); + ////FAPI_INF("Inside strcmp r0"); l_sbit = 42;l_value =i; rc = fapiGetScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc; if(l_num_rows > 0 ) @@ -533,18 +548,18 @@ rc_num = l_data_buffer_64.flushTo0(); rc = fapiPutScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc; i--; } - //FAPI_INF("Value of i = %d",i); + ////FAPI_INF("Value of i = %d",i); else { rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;} rc = fapiPutScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc; - FAPI_INF("row 0 -- Invalid"); + //FAPI_INF("row 0 -- Invalid"); i++; } - //FAPI_INF("Inside strcmp r1"); + ////FAPI_INF("Inside strcmp r1"); l_sbit = 36;l_value =i; rc = fapiGetScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc; if(l_num_rows > 1 ) @@ -552,19 +567,19 @@ rc_num = l_data_buffer_64.flushTo0(); rc = fapiPutScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc; i--; } - //FAPI_INF("Value of i = %d",i); + ////FAPI_INF("Value of i = %d",i); else { rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;} rc = fapiPutScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc; - FAPI_INF("row 1 -- Invalid"); + //FAPI_INF("row 1 -- Invalid"); i++; } - //FAPI_INF("Inside strcmp r2"); + ////FAPI_INF("Inside strcmp r2"); l_sbit = 30;l_value =i; rc = fapiGetScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc; if(l_num_rows > 2 ) @@ -572,18 +587,18 @@ rc_num = l_data_buffer_64.flushTo0(); rc = fapiPutScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc; i--; } - //FAPI_INF("Value of i = %d",i); + ////FAPI_INF("Value of i = %d",i); else { rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;} rc = fapiPutScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc; - FAPI_INF("row 2 -- Invalid"); + //FAPI_INF("row 2 -- Invalid"); i++; } - //FAPI_INF("Inside strcmp r3"); + ////FAPI_INF("Inside strcmp r3"); l_sbit = 24;l_value =i; rc = fapiGetScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc; if(l_num_rows > 3 ) @@ -591,30 +606,30 @@ rc_num = l_data_buffer_64.flushTo0(); rc = fapiPutScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc; i--; } - //FAPI_INF("Value of i = %d",i); + ////FAPI_INF("Value of i = %d",i); else { rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;} rc = fapiPutScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc; - FAPI_INF("row 3 -- Invalid"); + //FAPI_INF("row 3 -- Invalid"); i++; } - //FAPI_INF("Inside strcmp r4"); + ////FAPI_INF("Inside strcmp r4"); l_sbit = 18;l_value =i; rc = fapiGetScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc; if(l_num_rows > 4 ) {rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;} rc = fapiPutScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc; i--;} - //FAPI_INF("Value of i = %d",i); + ////FAPI_INF("Value of i = %d",i); else { rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;} rc = fapiPutScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc; - FAPI_INF("row 4 -- Invalid"); + //FAPI_INF("row 4 -- Invalid"); i++; } @@ -622,7 +637,7 @@ rc_num = l_data_buffer_64.flushTo0(); - //FAPI_INF("Inside strcmp r5"); + ////FAPI_INF("Inside strcmp r5"); l_sbit = 12;l_value =i; rc = fapiGetScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc; if(l_num_rows > 5 ) @@ -630,18 +645,18 @@ rc_num = l_data_buffer_64.flushTo0(); rc = fapiPutScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc; i--; } - //FAPI_INF("Value of i = %d",i); + ////FAPI_INF("Value of i = %d",i); else { rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;} rc = fapiPutScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc; - FAPI_INF("row 5 -- Invalid"); + //FAPI_INF("row 5 -- Invalid"); i++; } - //FAPI_INF("Inside strcmp r6"); + ////FAPI_INF("Inside strcmp r6"); l_sbit = 6;l_value =i; rc = fapiGetScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc; if(l_num_rows > 6 ) @@ -649,18 +664,18 @@ rc_num = l_data_buffer_64.flushTo0(); rc = fapiPutScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc; i--; } - //FAPI_INF("Value of i = %d",i); + ////FAPI_INF("Value of i = %d",i); else { rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;} rc = fapiPutScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc; - FAPI_INF("row 6 -- Invalid"); + //FAPI_INF("row 6 -- Invalid"); i++; } - //FAPI_INF("Inside strcmp r7"); + ////FAPI_INF("Inside strcmp r7"); l_sbit = 0;l_value =i; rc = fapiGetScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc; if(l_num_rows > 7 ) @@ -668,18 +683,18 @@ rc_num = l_data_buffer_64.flushTo0(); rc = fapiPutScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc; i--; } - //FAPI_INF("Value of i = %d",i); + ////FAPI_INF("Value of i = %d",i); else { rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;} rc = fapiPutScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc; - FAPI_INF("row 7 -- Invalid"); + //FAPI_INF("row 7 -- Invalid"); i++; } - //FAPI_INF("Inside strcmp r8"); + ////FAPI_INF("Inside strcmp r8"); l_sbit = 54;l_value =i; rc = fapiGetScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc; if(l_num_rows > 8 ) @@ -687,19 +702,19 @@ rc_num = l_data_buffer_64.flushTo0(); rc = fapiPutScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc; i--; } - //FAPI_INF("Value of i = %d",i); + ////FAPI_INF("Value of i = %d",i); else { rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;} rc = fapiPutScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc; - FAPI_INF("row 8 -- Invalid"); + //FAPI_INF("row 8 -- Invalid"); i++; } - //FAPI_INF("Inside strcmp r9"); + ////FAPI_INF("Inside strcmp r9"); l_sbit = 48;l_value =i; rc = fapiGetScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc; if(l_num_rows > 9 ) @@ -707,18 +722,18 @@ rc_num = l_data_buffer_64.flushTo0(); rc = fapiPutScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc; i--; } - //FAPI_INF("Value of i = %d",i); + ////FAPI_INF("Value of i = %d",i); else { rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;} rc = fapiPutScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc; - FAPI_INF("row 9 -- Invalid"); + //FAPI_INF("row 9 -- Invalid"); i++; } - //FAPI_INF("Inside strcmp r10"); + ////FAPI_INF("Inside strcmp r10"); l_sbit = 42;l_value =i; rc = fapiGetScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc; if(l_num_rows > 10 ) @@ -726,18 +741,18 @@ rc_num = l_data_buffer_64.flushTo0(); rc = fapiPutScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc; i--; } - //FAPI_INF("Value of i = %d",i); + ////FAPI_INF("Value of i = %d",i); else { rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;} rc = fapiPutScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc; - FAPI_INF("row 10 -- Invalid"); + //FAPI_INF("row 10 -- Invalid"); i++; } - //FAPI_INF("Inside strcmp r11"); + ////FAPI_INF("Inside strcmp r11"); l_sbit = 36;l_value =i; rc = fapiGetScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc; if(l_num_rows > 11 ) @@ -745,18 +760,18 @@ rc_num = l_data_buffer_64.flushTo0(); rc = fapiPutScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc; i--; } - //FAPI_INF("Value of i = %d",i); + ////FAPI_INF("Value of i = %d",i); else { rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;} rc = fapiPutScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc; - FAPI_INF("row 11 -- Invalid"); + //FAPI_INF("row 11 -- Invalid"); i++; } - //FAPI_INF("Inside strcmp r12"); + ////FAPI_INF("Inside strcmp r12"); l_sbit = 30;l_value =i; rc = fapiGetScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc; if(l_num_rows > 12 ) @@ -764,18 +779,18 @@ rc_num = l_data_buffer_64.flushTo0(); rc = fapiPutScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc; i--; } - //FAPI_INF("Value of i = %d",i); + ////FAPI_INF("Value of i = %d",i); else { rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;} rc = fapiPutScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc; - FAPI_INF("row 12 -- Invalid"); + //FAPI_INF("row 12 -- Invalid"); i++; } - //FAPI_INF("Inside strcmp r13"); + ////FAPI_INF("Inside strcmp r13"); l_sbit = 24;l_value =i; rc = fapiGetScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc; if(l_num_rows > 13 ) @@ -783,18 +798,18 @@ rc_num = l_data_buffer_64.flushTo0(); rc = fapiPutScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc; i--; } - //FAPI_INF("Value of i = %d",i); + ////FAPI_INF("Value of i = %d",i); else { rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;} rc = fapiPutScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc; - FAPI_INF("row 13 -- Invalid"); + //FAPI_INF("row 13 -- Invalid"); i++; } - //FAPI_INF("Inside strcmp r14"); + ////FAPI_INF("Inside strcmp r14"); l_sbit = 18;l_value =i; rc = fapiGetScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc; if(l_num_rows > 14 ) @@ -802,18 +817,18 @@ rc_num = l_data_buffer_64.flushTo0(); rc = fapiPutScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc; i--; } - //FAPI_INF("Value of i = %d",i); + ////FAPI_INF("Value of i = %d",i); else { rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;} rc = fapiPutScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc; - FAPI_INF("row 14 -- Invalid"); + //FAPI_INF("row 14 -- Invalid"); i++; } - //FAPI_INF("Inside strcmp r15"); + ////FAPI_INF("Inside strcmp r15"); l_sbit = 12;l_value =i; rc = fapiGetScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc; if ( l_num_rows > 15 ) @@ -825,14 +840,14 @@ rc_num = l_data_buffer_64.flushTo0(); { rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;} rc = fapiPutScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc; - FAPI_INF("row 15 -- Invalid"); + //FAPI_INF("row 15 -- Invalid"); i++; } - //FAPI_INF("Value of i = %d",i); + ////FAPI_INF("Value of i = %d",i); - //FAPI_INF("Inside strcmp r16 and l_dram_rows = %d",l_dram_rows); + ////FAPI_INF("Inside strcmp r16 and l_dram_rows = %d",l_dram_rows); l_sbit = 6;l_value =i; rc = fapiGetScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc; if ( l_dram_rows >= 17 ) @@ -843,17 +858,17 @@ rc_num = l_data_buffer_64.flushTo0(); } else { - //FAPI_INF("r16 not used"); + ////FAPI_INF("r16 not used"); rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;} - FAPI_INF("Row 16 Invalid"); + //FAPI_INF("Row 16 Invalid"); rc = fapiPutScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc; i++; } - //FAPI_INF("Value of i = %d",i); + ////FAPI_INF("Value of i = %d",i); - //FAPI_INF("Inside strcmp sl2"); + ////FAPI_INF("Inside strcmp sl2"); l_sbit = 36;l_value =i; rc = fapiGetScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc; //------- Enable these for later --- for now constant map to zero @@ -861,13 +876,13 @@ rc_num = l_data_buffer_64.flushTo0(); {l_value =0;} rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;} rc = fapiPutScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc; - FAPI_INF("sl2 Invalid"); + //FAPI_INF("sl2 Invalid"); i++; - //FAPI_INF("Value of i = %d",i); + ////FAPI_INF("Value of i = %d",i); - //FAPI_INF("Inside strcmp sl1"); + ////FAPI_INF("Inside strcmp sl1"); l_sbit = 30;l_value =i; rc = fapiGetScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc; //------- Enable these for later --- for now constant map to zero @@ -876,12 +891,12 @@ rc_num = l_data_buffer_64.flushTo0(); rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;} rc = fapiPutScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc; i++; - FAPI_INF("sl1 Invalid"); - //FAPI_INF("Value of i = %d",i); + //FAPI_INF("sl1 Invalid"); + ////FAPI_INF("Value of i = %d",i); - //FAPI_INF("Inside strcmp sl0"); + ////FAPI_INF("Inside strcmp sl0"); l_sbit = 24;l_value =i; rc = fapiGetScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc; //------- Enable these for later --- for now constant map to zero @@ -889,9 +904,9 @@ rc_num = l_data_buffer_64.flushTo0(); {l_value =0;} rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;} rc = fapiPutScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc; - FAPI_INF("sl0 Invalid"); + //FAPI_INF("sl0 Invalid"); i++; - //FAPI_INF("Value of i = %d",i); + ////FAPI_INF("Value of i = %d",i); @@ -900,11 +915,11 @@ rc_num = l_data_buffer_64.flushTo0(); //------ Setting Start and end addr counters -FAPI_INF("Debug - --------------- Setting Start and End Counters -----------\n"); +//FAPI_INF("Debug - --------------- Setting Start and End Counters -----------\n"); rc_num = l_data_buffer_rd64.flushTo0(); rc = fapiPutScom(i_target_mba,0x030106d0,l_data_buffer_rd64); if(rc) return rc; l_value = i+1; -FAPI_INF("Setting end_addr Value of i = %d",i); +//FAPI_INF("Setting end_addr Value of i = %d",i); rc_num = l_data_buffer_rd64.flushTo0(); //Calculate and set Valid bits for end_addr @@ -916,17 +931,15 @@ for(i=l_value;i <= 37;i++) if (rc_num){FAPI_ERR( "Error in function addr_gen:");rc.setEcmdError(rc_num);return rc;} l_readscom_value = l_data_buffer_rd64.getDoubleWord (0); -FAPI_INF("Debug - Initial End addr for 0x030106d2 = %016llX",l_readscom_value); +//FAPI_INF("Debug - Initial End addr for 0x030106d2 = %016llX",l_readscom_value); rc = FAPI_ATTR_GET(ATTR_EFF_SCHMOO_ADDR_MODE, &i_target_mba, l_attr_addr_mode); if(rc) return rc; rc = FAPI_ATTR_GET(ATTR_MCBIST_START_ADDR, &i_target_mba, l_start_addr); if(rc) return rc; -FAPI_INF("User Defined ATTR - Start = %016llX",l_start_addr); - -rc = FAPI_ATTR_GET(ATTR_EFF_SCHMOO_ADDR_MODE, &i_target_mba, l_attr_addr_mode); if(rc) return rc; +//FAPI_INF("User Defined ATTR - Start = %016llX",l_start_addr); rc = FAPI_ATTR_GET(ATTR_MCBIST_END_ADDR, &i_target_mba, l_end); if(rc) return rc; -FAPI_INF("User defined END ATTR - End Address = %016llX",l_end); +//FAPI_INF("User defined END ATTR - End Address = %016llX",l_end); rc = FAPI_ATTR_GET(ATTR_MCBIST_RANK, &i_target_mba, l_user_end_addr); if(rc) return rc; @@ -947,28 +960,31 @@ rc = fapiPutScom(i_target_mba,0x030106d3,l_data_buffer_rd64); if(rc) return rc; else { -l_attr_addr_mode = 3; //Default it for FW with Full Address Range +//l_attr_addr_mode = 3; //Default it for FW with Full Address Range if(l_attr_addr_mode == 0) { - FAPI_INF("ATTR_EFF_SCHMOO_ADDR_MODE - %d ---- Few Address Mode --------",l_attr_addr_mode); + //FAPI_INF("ATTR_EFF_SCHMOO_ADDR_MODE - %d ---- Few Address Mode --------",l_attr_addr_mode); l_sbit = 32; rc_num = l_data_buffer_rd64.flushTo0(); l_start = 24; l_len = 8; l_value32 = 28; rc_num=l_data_buffer_rd64.insert(l_value32,l_sbit,l_len,l_start); + + l_readscom_value = 0x000003FFF8000000ull; + rc_num = l_data_buffer_rd64.setDoubleWord(0,l_readscom_value);if(rc_num) return rc; rc = fapiPutScom(i_target_mba,0x030106d2,l_data_buffer_rd64); if(rc) return rc; rc = fapiPutScom(i_target_mba,0x030106d3,l_data_buffer_rd64); if(rc) return rc; l_readscom_value = l_data_buffer_rd64.getDoubleWord (0); - FAPI_INF("Debug - Final End addr for 0x030106d2 = %016llX",l_readscom_value); + //FAPI_INF("Debug - Final End addr for 0x030106d2 = %016llX",l_readscom_value); } else if(l_attr_addr_mode == 1) { - FAPI_INF("ATTR_EFF_SCHMOO_ADDR_MODE - %d ---- QUARTER ADDRESSING Mode --------",l_attr_addr_mode); + //FAPI_INF("ATTR_EFF_SCHMOO_ADDR_MODE - %d ---- QUARTER ADDRESSING Mode --------",l_attr_addr_mode); l_readscom_value = l_readscom_value >> 2; - FAPI_INF("Debug - Final End addr for 0x030106d2 = %016llX",l_readscom_value); + //FAPI_INF("Debug - Final End addr for 0x030106d2 = %016llX",l_readscom_value); rc_num = l_data_buffer_rd64.setDoubleWord(0,l_readscom_value);if(rc_num) return rc; rc = fapiPutScom(i_target_mba,0x030106d2,l_data_buffer_rd64); if(rc) return rc; rc = fapiPutScom(i_target_mba,0x030106d3,l_data_buffer_rd64); if(rc) return rc; @@ -976,17 +992,17 @@ else if(l_attr_addr_mode == 1) } else if(l_attr_addr_mode == 2) { - FAPI_INF("ATTR_EFF_SCHMOO_ADDR_MODE - %d ---- HALF ADDRESSING Mode --------",l_attr_addr_mode); + //FAPI_INF("ATTR_EFF_SCHMOO_ADDR_MODE - %d ---- HALF ADDRESSING Mode --------",l_attr_addr_mode); l_readscom_value = l_readscom_value >> 1; - FAPI_INF("Debug - Final End addr for 0x030106d2 = %016llX",l_readscom_value); + //FAPI_INF("Debug - Final End addr for 0x030106d2 = %016llX",l_readscom_value); rc_num = l_data_buffer_rd64.setDoubleWord(0,l_readscom_value);if(rc_num) return rc; rc = fapiPutScom(i_target_mba,0x030106d2,l_data_buffer_rd64); if(rc) return rc; rc = fapiPutScom(i_target_mba,0x030106d3,l_data_buffer_rd64); if(rc) return rc; } else { - FAPI_INF("ATTR_EFF_SCHMOO_ADDR_MODE - %d ---- FULL Address Mode --------",l_attr_addr_mode); - FAPI_INF("Debug - Final End addr for 0x030106d2 = %016llX",l_readscom_value); + //FAPI_INF("ATTR_EFF_SCHMOO_ADDR_MODE - %d ---- FULL Address Mode --------",l_attr_addr_mode); + //FAPI_INF("Debug - Final End addr for 0x030106d2 = %016llX",l_readscom_value); rc = fapiPutScom(i_target_mba,0x030106d2,l_data_buffer_rd64); if(rc) return rc; rc = fapiPutScom(i_target_mba,0x030106d3,l_data_buffer_rd64); if(rc) return rc; } diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_address.H b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_address.H index c81fc55fd..7859e84f8 100644 --- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_address.H +++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_address.H @@ -5,7 +5,7 @@ /* */ /* IBM CONFIDENTIAL */ /* */ -/* COPYRIGHT International Business Machines Corp. 2013 */ +/* COPYRIGHT International Business Machines Corp. 2013,2014 */ /* */ /* p1 */ /* */ @@ -20,7 +20,7 @@ /* Origin: 30 */ /* */ /* IBM_PROLOG_END_TAG */ -// $Id: mss_mcbist_address.H,v 1.3 2013/04/03 14:17:30 bellows Exp $ +// $Id: mss_mcbist_address.H,v 1.4 2013/12/17 18:33:49 sasethur Exp $ // *!*************************************************************************** // *! (C) Copyright International Business Machines Corp. 1997, 1998, 2013 // *! All Rights Reserved -- Property of IBM @@ -38,6 +38,7 @@ //------------------------------------------------------------------------------- // Version:|Author: | Date: | Comment: // 1.3 |bellows |03-Apr-13| Added Id for firmware +// 1.4 |preeragh|17-Dec-14| Removed unwanted header includes // --------|--------|---------|-------------------------------------------------- //------------------------------------------------------------------------------ #ifndef MSS_MCBIST_ADDRESS_H @@ -49,7 +50,6 @@ #include <fapi.H> #include <cen_scom_addresses.H> #include <mss_access_delay_reg.H> -#include <mss_shmoo_common.H> #include <mss_mcbist.H> #include<string.h> extern "C" diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_common.C b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_common.C index 9e9962619..409c413e1 100644 --- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_common.C +++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_common.C @@ -5,7 +5,7 @@ /* */ /* IBM CONFIDENTIAL */ /* */ -/* COPYRIGHT International Business Machines Corp. 2012,2013 */ +/* COPYRIGHT International Business Machines Corp. 2012,2014 */ /* */ /* p1 */ /* */ @@ -20,16 +20,16 @@ /* Origin: 30 */ /* */ /* IBM_PROLOG_END_TAG */ -// $Id: mss_mcbist_common.C,v 1.55 2013/10/24 15:04:44 sasethur Exp $ +// $Id: mss_mcbist_common.C,v 1.59 2013/12/17 18:37:58 sasethur Exp $ // *!*************************************************************************** // *! (C) Copyright International Business Machines Corp. 1997, 1998 // *! All Rights Reserved -- Property of IBM // *! *** IBM Confidential *** // *!*************************************************************************** // *! FILENAME : mss_mcbist_common.C -// *! TITLE : +// *! TITLE : // *! DESCRIPTION : MCBIST Procedures -// *! CONTEXT : +// *! CONTEXT : // *! // *! OWNER NAME : Devashikamani, Aditya Email: adityamd@in.ibm.com // *! BACKUP : Sethuraman, Saravanan Email: saravanans@in.ibm.com @@ -38,23 +38,27 @@ //------------------------------------------------------------------------------ // Version:|Author: | Date: | Comment: // --------|--------|--------|-------------------------------------------------- -// 1.55 |aditya |10/24/13|Removed DD2.0 attribute check for ECC setup +// 1.59 |aditya |12/17/13|Updated mcb_error_map function parameters +// 1.58 |aditya |12/10/13|Updated Target for MBS registers +// 1.57 |rwheeler|10/29/13 |added W_ONLY_INFINITE_RAND test +// 1.56 |aditya |10/29/13|Updated mcb_error_map function parameters +// 1.55 |aditya |10/24/13|Removed DD2.0 attribute check for ECC setup // 1.54 |aditya |10/17/13|Minor fix in byte mask function // 1.53 |aditya |10/05/13|Updated fw comments // 1.52 |aditya |09/27/13|Updated for Host Boot Compile // 1.51 |aditya |09/18/13|Updated parameters for random seed attribute and Error map masking // 1.50 |aditya |08/08/13|Updated for Host Boot Compile // 1.49 |aditya |08/02/13|Updated Error Map function -// 1.48 |aditya |07/09/13|Added l_random_addr_enable and l_fixed_addr_enable for struct Subtest_info +// 1.48 |aditya |07/09/13|Added l_random_addr_enable and l_fixed_addr_enable for struct Subtest_info // 1.47 |aditya |06/11/13|Replaced FAPI_INF to FAPI_DBG,Added target details for Prints -// 1.46 |aditya |06/11/13|Enabled pattern and testtype prints -// 1.45 |aditya |06/11/13|Added attributes ATTR_MCBIST_PRINTING_DISABLE +// 1.46 |aditya |06/11/13|Enabled pattern and testtype prints +// 1.45 |aditya |06/11/13|Added attributes ATTR_MCBIST_PRINTING_DISABLE // 1.44 |aditya |05/23/13|Added TEST_RR and TEST_RF testtypes // 1.43 |aditya |05/22/13|updated parameters for Subtest Printing // 1.41 |aditya |05/14/13|updated parameters for random seed details // 1.40 |aditya |05/07/13|Small Fix // 1.39 |aditya |05/07/13|Moved some parameters to attributes. -// 1.38 |aditya |04/30/13|Minor fix for firmware +// 1.38 |aditya |04/30/13|Minor fix for firmware // 1.37 |aditya |04/22/13|Minor Fix // 1.36 |aditya |04/09/13|Updated cfg_byte_mask and setup_mcbist functions // 1.35 |aditya |03/18/13|Updated cfg_byte_mask and error map functions @@ -64,24 +68,24 @@ // 1.29 |aditya |02/19/13|Updated Testtypes and removed rank looping // 1.26 |aditya |02/13/13|Modified Addressing // 1.24 |aditya |02/12/13|Modified Addressing -// 1.23 |aditya |02/07/13|Added MBS23 registers +// 1.23 |aditya |02/07/13|Added MBS23 registers // 1.22 |abhijit |02/06/13|Updated cfg_byte_mask function // 1.21 |abhijit |01/30/13|Updated cfg_byte_mask function // 1.20 |aditya |01/30/13|Updated fw comments // 1.18 |aditya |01/30/13|Updated fw comments -// 1.17 |aditya |01/16/13|Updated setup_mcbist function -// 1.16 |aditya |01/11/13|Updated function headers +// 1.17 |aditya |01/16/13|Updated setup_mcbist function +// 1.16 |aditya |01/11/13|Updated function headers // 1.15 |aditya |01/11/13|added parameters to setup_mcbist function -// 1.14 |aditya |01/07/13|Updated Review Comments -// 1.13 |aditya |01/03/13| Updated FW Comments +// 1.14 |aditya |01/07/13|Updated Review Comments +// 1.13 |aditya |01/03/13| Updated FW Comments // 1.10 |sasethur|12/14/12| Updated for warnings -// 1.9 |aditya |12/14/12| Updated FW review comments +// 1.9 |aditya |12/14/12| Updated FW review comments // 1.8 |aditya |12/6/12 | Updated Review Comments // 1.7 |aditya |11/15/12| Updated for FW REVIEW COMMENTS -// 1.6 |aditya |10/31/12| Fixed issue in mcb_error_map function -// 1.5 |abhijit |10/29/12| fixed issue in byte mask function -// 1.4 |aditya |10/29/12| Updated from ReturnCode to fapi::ReturnCode and Target to const fapi::Target & -// 1.3 |aditya |10/18/12| Replaced insertFromBin by InsertFromRight +// 1.6 |aditya |10/31/12| Fixed issue in mcb_error_map function +// 1.5 |abhijit |10/29/12| fixed issue in byte mask function +// 1.4 |aditya |10/29/12| Updated from ReturnCode to fapi::ReturnCode and Target to const fapi::Target & +// 1.3 |aditya |10/18/12| Replaced insertFromBin by InsertFromRight // 1.2 |aditya |10/17/12| updated code to be compatible with ecmd 13 release // 1.1 |aditya |10/01/12| updated fw review comments, datapattern, testtype, addressing // @@ -103,14 +107,15 @@ using namespace fapi; #define MCB_DEBUG2 -//const uint8_t MAX_PORT = 2; +const uint8_t MAX_PORT = 2; const uint8_t MAX_DRAM = 20; const uint8_t MAX_ISDIMM_DQ = 72; -//const uint8_t MAX_BYTE = 10; -//const uint8_t MAX_RANK = 8; +const uint8_t MAX_BYTE = 10; +const uint8_t MAX_RANK = 8; +const uint8_t MAX_NIBBLES = 2; //const uint8_t MAX_NIBBLE = 1; const uint8_t MCB_TEST_NUM = 16; -const uint64_t MCB_MAX_TIMEOUT = 3000000000000000ull; +const uint64_t MCB_MAX_TIMEOUT = 0000000000000600ull; const uint64_t DELAY_100US = 100000; // general purpose 100 usec delay for HW mode (2000000 sim cycles if simclk = 20ghz) const uint64_t DELAY_2000SIMCYCLES = 2000; // general purpose 2000 sim cycle delay for sim mode (100 ns if simclk = 20Ghz) //const uint64_t END_ADDRESS = 0x0000000004; //Will be fixed later, once the address generation function is ready @@ -130,38 +135,38 @@ const uint64_t FOUR = 0x0000000000000004ull; // const fapi::Target & Centaur.mba // uint8_t i_port Port on which we are operating. -// mcbist_data_gen i_mcbpatt Data pattern +// mcbist_data_gen i_mcbpatt Data pattern // mcbist_test_mem i_mcbtest subtest Type -// mcbist_byte_mask i_mcbbytemask It is used to mask bad bits read from SPD +// mcbist_byte_mask i_mcbbytemask It is used to mask bad bits read from SPD // uint8_t i_mcbrotate Provides the number of bit to shift per burst // uint8_t i_pattern Data Pattern // uint8_t i_test_type Subtest Type -// uint8_t i_rank Current Rank -// ,uint8_t i_bit32 Flag to set bit 32 of register 02011674 +// uint8_t i_rank Current Rank +// ,uint8_t i_bit32 Flag to set bit 32 of register 02011674 //uint64_t i_start Flag to set start address // uint64_t i_end Flag to set End address -//uint8_t new_address_map Flag to Enable Custom Address Map +//uint8_t new_address_map Flag to Enable Custom Address Map //****************************************************************/ fapi::ReturnCode setup_mcbist(const fapi::Target & i_target_mba,mcbist_byte_mask i_mcbbytemask,uint8_t i_mcbrotate,struct Subtest_info l_sub_info[30]) //fapi::ReturnCode setup_mcbist(const fapi::Target & i_target_mba, uint8_t i_port,mcbist_data_gen i_mcbpatt,mcbist_test_mem i_mcbtest,mcbist_byte_mask i_mcbbytemask,uint8_t i_mcbrotate,uint8_t i_pattern,uint8_t i_test_type,uint8_t i_rank,uint8_t i_bit32,uint64_t i_start,uint64_t i_end,uint8_t new_address_map) { - + fapi::ReturnCode rc; uint32_t rc_num = 0; uint8_t l_bit32 = 0; - //uint8_t l_print = 0; + //uint8_t l_print = 0; //rc = FAPI_ATTR_GET(ATTR_MCBIST_PRINTING_DISABLE, &i_target_mba,l_print); if(rc) return rc; FAPI_DBG("%s:Function Setup_MCBIST",i_target_mba.toEcmdString()); - + - + ecmdDataBufferBase l_data_buffer_64(64); - ecmdDataBufferBase l_data_bufferx1_64(64); + ecmdDataBufferBase l_data_bufferx1_64(64); ecmdDataBufferBase l_data_bufferx2_64(64); - ecmdDataBufferBase l_data_bufferx3_64(64); + ecmdDataBufferBase l_data_bufferx3_64(64); ecmdDataBufferBase l_data_bufferx4_64(64); uint64_t io_start_address = 0; uint64_t io_end_address = 0; @@ -181,7 +186,9 @@ fapi::ReturnCode setup_mcbist(const fapi::Target & i_target_mba,mcbist_byte_mask //uint8_t l_index1 = 0; uint8_t l_flag = 0; //uint64_t scom_array[24] = {0x03010440,0x03010441,0x03010442,0x03010443,0x03010444,0x03010445,0x03010446,0x03010447,0x0201145E,0x0201145F,0x02011460,0x02011461,0x02011462,0x02011463,0x02011464,0x02011465,0x0201149E,0x0201149F,0x020114A0,0x020114A1,0x020114A2,0x020114A3,0x020114A4,0x020114A5}; - uint64_t scom_array[24] = {MBA01_MBABS0_0x03010440,MBA01_MBABS1_0x03010441,MBA01_MBABS2_0x03010442,MBA01_MBABS3_0x03010443,MBA01_MBABS4_0x03010444,MBA01_MBABS5_0x03010445,MBA01_MBABS6_0x03010446 ,MBA01_MBABS7_0x03010447,MBS_ECC0_MBSBS0_0x0201145E ,MBS_ECC0_MBSBS1_0x0201145F ,MBS_ECC0_MBSBS2_0x02011460 ,MBS_ECC0_MBSBS3_0x02011461 ,MBS_ECC0_MBSBS4_0x02011462 ,MBS_ECC0_MBSBS5_0x02011463 ,MBS_ECC0_MBSBS6_0x02011464 ,MBS_ECC0_MBSBS7_0x02011465 ,MBS_ECC1_MBSBS0_0x0201149E ,MBS_ECC1_MBSBS1_0x0201149F ,MBS_ECC1_MBSBS2_0x020114A0 ,MBS_ECC1_MBSBS3_0x020114A1 ,MBS_ECC1_MBSBS4_0x020114A2 ,MBS_ECC1_MBSBS5_0x020114A3 ,MBS_ECC1_MBSBS6_0x020114A4 ,MBS_ECC1_MBSBS7_0x020114A5 } ; + uint64_t scom_array[8] = {MBA01_MBABS0_0x03010440,MBA01_MBABS1_0x03010441,MBA01_MBABS2_0x03010442,MBA01_MBABS3_0x03010443,MBA01_MBABS4_0x03010444,MBA01_MBABS5_0x03010445,MBA01_MBABS6_0x03010446 ,MBA01_MBABS7_0x03010447 }; + + uint64_t l_scom_array_MBS[16]={MBS_ECC0_MBSBS2_0x02011460 ,MBS_ECC0_MBSBS3_0x02011461 ,MBS_ECC0_MBSBS4_0x02011462 ,MBS_ECC0_MBSBS5_0x02011463 ,MBS_ECC0_MBSBS6_0x02011464 ,MBS_ECC0_MBSBS7_0x02011465 ,MBS_ECC1_MBSBS0_0x0201149E ,MBS_ECC1_MBSBS1_0x0201149F ,MBS_ECC1_MBSBS2_0x020114A0 ,MBS_ECC1_MBSBS3_0x020114A1 ,MBS_ECC1_MBSBS4_0x020114A2 ,MBS_ECC1_MBSBS5_0x020114A3 ,MBS_ECC1_MBSBS6_0x020114A4 ,MBS_ECC1_MBSBS7_0x020114A5 ,MBS_ECC0_MBSBS0_0x0201145E ,MBS_ECC0_MBSBS1_0x0201145F } ; Target i_target_centaur; @@ -195,39 +202,39 @@ fapi::ReturnCode setup_mcbist(const fapi::Target & i_target_mba,mcbist_byte_mask 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); + rc = mcb_reset_trap(i_target_mba); if(rc) return rc; //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 = fapiGetScom(i_target_centaur,MBS_MCBIST01_MCBCMABQ_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;} - - rc = fapiPutScom(i_target_mba,0x02011674,l_data_buffer_64);if(rc) return rc; - - rc = fapiGetScom(i_target_mba,0x02011774,l_data_buffer_64);if(rc) return rc; + + rc = fapiPutScom(i_target_centaur,MBS_MCBIST01_MCBCMABQ_0x02011674,l_data_buffer_64);if(rc) return rc; + + rc = fapiGetScom(i_target_centaur,0x02011774,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;} - - rc = fapiPutScom(i_target_mba,0x02011774,l_data_buffer_64);if(rc) return rc; + + rc = fapiPutScom(i_target_centaur,0x02011774,l_data_buffer_64);if(rc) return rc; } // if(l_attr_centaur_ec_mcbist_random_data_gen == 0) - //{ + //{ //FIFO work around for random data //################################### //# WRQ and RRQ set to FIFO mode OFF //################################### //#WRQ FIFO mode OFF - rc = fapiGetScom(i_target_mba,0x0301040d,l_data_buffer_64); if(rc) return rc; + rc = fapiGetScom(i_target_mba,0x0301040d,l_data_buffer_64); if(rc) return rc; rc_num = l_data_buffer_64.clearBit(5);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;} rc = fapiPutScom(i_target_mba,0x0301040d,l_data_buffer_64); if(rc) return rc; //#RRQ FIFO Mode OFF - rc = fapiGetScom(i_target_mba,0x0301040e,l_data_buffer_64); if(rc) return rc; + rc = fapiGetScom(i_target_mba,0x0301040e,l_data_buffer_64); if(rc) return rc; rc_num = l_data_buffer_64.setBit(6);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;} rc_num = l_data_buffer_64.setBit(7);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;} @@ -244,36 +251,36 @@ rc = FAPI_ATTR_GET(ATTR_MCBIST_ERROR_CAPTURE, &i_target_mba,l_bit32); if(rc) ret //power bus ECC setting for random data //# MBA01_MBA_WRD_MODE - disbale powerbus ECC checking and correction - rc = fapiGetScom(i_target_mba,0x03010449,l_data_buffer_64); if(rc) return rc; + rc = fapiGetScom(i_target_mba,0x03010449,l_data_buffer_64); if(rc) return rc; rc_num = l_data_buffer_64.setBit(0);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;} rc_num = l_data_buffer_64.setBit(1);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;} rc_num = l_data_buffer_64.setBit(5);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;} - rc = fapiPutScom(i_target_mba,0x03010449,l_data_buffer_64); if(rc) return rc; + rc = fapiPutScom(i_target_mba,0x03010449,l_data_buffer_64); if(rc) return rc; //# MBS_ECC01_MBSECCQ - set EEC checking On but ECC correction OFF - rc = fapiGetScom(i_target_mba,0x0201144a,l_data_buffer_64); if(rc) return rc; + rc = fapiGetScom(i_target_centaur,0x0201144a,l_data_buffer_64); if(rc) return rc; rc_num = l_data_buffer_64.clearBit(0);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;} rc_num = l_data_buffer_64.setBit(1);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;} - rc = fapiPutScom(i_target_mba,0x0201144a,l_data_buffer_64); if(rc) return rc; + rc = fapiPutScom(i_target_centaur,0x0201144a,l_data_buffer_64); if(rc) return rc; - rc = fapiGetScom(i_target_mba,0x0201148a,l_data_buffer_64); if(rc) return rc; + rc = fapiGetScom(i_target_centaur,0x0201148a,l_data_buffer_64); if(rc) return rc; rc_num = l_data_buffer_64.clearBit(0);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;} rc_num = l_data_buffer_64.setBit(1);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;} - rc = fapiPutScom(i_target_mba,0x0201148a,l_data_buffer_64); if(rc) return rc; + rc = fapiPutScom(i_target_centaur,0x0201148a,l_data_buffer_64); if(rc) return rc; //end of power bus ECC setting for random data //} - - rc = fapiGetScom(i_target_mba,MBA01_CCS_MODEQ_0x030106a7, l_data_buffer_64); if(rc) return rc; + + rc = fapiGetScom(i_target_mba,MBA01_CCS_MODEQ_0x030106a7, l_data_buffer_64); if(rc) return rc; rc_num = l_data_buffer_64.clearBit(29); if (rc_num){FAPI_ERR( "Error in function setup_mcb:");rc.setEcmdError(rc_num);return rc;} - - - rc = fapiPutScom(i_target_mba,MBA01_CCS_MODEQ_0x030106a7, l_data_buffer_64); if(rc) return rc; - //Hard coded to single address - Saravanan for debug - /* rc = fapiGetScom(i_target_mba, MBA01_MCBIST_MCBSEARA0Q_0x030106d2,l_data_buffer_64);if(rc) return rc; - rc_num = rc_num | l_data_buffer_64.flushTo0(); - rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBSEARA0Q_0x030106d2,l_data_buffer_64); if(rc) return rc; + + + rc = fapiPutScom(i_target_mba,MBA01_CCS_MODEQ_0x030106a7, l_data_buffer_64); if(rc) return rc; + //Hard coded to single address - Saravanan for debug + /* rc = fapiGetScom(i_target_mba, MBA01_MCBIST_MCBSEARA0Q_0x030106d2,l_data_buffer_64);if(rc) return rc; + rc_num = rc_num | l_data_buffer_64.flushTo0(); + rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBSEARA0Q_0x030106d2,l_data_buffer_64); if(rc) return rc; */ - + /*for(l_index = 0;l_index < 24;l_index++) { @@ -284,7 +291,7 @@ rc = FAPI_ATTR_GET(ATTR_MCBIST_ERROR_CAPTURE, &i_target_mba,l_bit32); if(rc) ret { if(l_data_buffer_64.isBitSet(l_index1)) { - + l_flag = 1; break; @@ -293,7 +300,7 @@ rc = FAPI_ATTR_GET(ATTR_MCBIST_ERROR_CAPTURE, &i_target_mba,l_bit32); if(rc) ret } */ - for(l_index = 0;l_index < 24;l_index++) + for(l_index = 0;l_index < 8;l_index++) { rc = fapiGetScom(i_target_mba,scom_array[l_index],l_data_buffer_64); if(rc) return rc; @@ -305,7 +312,20 @@ rc = FAPI_ATTR_GET(ATTR_MCBIST_ERROR_CAPTURE, &i_target_mba,l_bit32); if(rc) ret } - + for(l_index = 0;l_index < 16;l_index++) + { + + rc = fapiGetScom(i_target_centaur,l_scom_array_MBS[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) { @@ -319,7 +339,7 @@ rc = FAPI_ATTR_GET(ATTR_MCBIST_ERROR_CAPTURE, &i_target_mba,l_bit32); if(rc) ret - + //rc = cfg_mcb_test_mem(i_target_mba,i_mcbtest1); if(rc) return rc; rc = cfg_mcb_test_mem(i_target_mba,i_mcbtest1,l_sub_info); if(rc) return rc; rc = cfg_mcb_dgen(i_target_mba,i_mcbpatt1,i_mcbrotate); if(rc) return rc; @@ -341,7 +361,7 @@ rc = FAPI_ATTR_GET(ATTR_MCBIST_ERROR_CAPTURE, &i_target_mba,l_bit32); if(rc) ret if(i_mcbbytemask != NONE) { rc = cfg_byte_mask(i_target_mba); if(rc) return rc; - + } return rc; @@ -351,7 +371,7 @@ rc = FAPI_ATTR_GET(ATTR_MCBIST_ERROR_CAPTURE, &i_target_mba,l_bit32); if(rc) ret // Funtion name : mcb_reset_trap // Description: Clears all the trap registers in MCBIST engine //Input Parameters : -// const fapi::Target & centaur.mba +// const fapi::Target & centaur.mba //*****************************************************************/ fapi::ReturnCode mcb_reset_trap(const fapi::Target & i_target_mba) @@ -360,15 +380,17 @@ fapi::ReturnCode mcb_reset_trap(const fapi::Target & i_target_mba) fapi::ReturnCode rc; uint32_t rc_num = 0; uint8_t l_mbaPosition = 0; - //uint8_t l_print = 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); - + Target i_target_centaur; + //uint8_t l_attr_centaur_ec_mcbist_random_data_gen = 0; + rc = fapiGetParentChip(i_target_mba, i_target_centaur); if(rc) return rc; 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_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;} @@ -377,9 +399,9 @@ fapi::ReturnCode mcb_reset_trap(const fapi::Target & i_target_mba) //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_DBG("%s:Clearing the MCBIST Runtime Counter ",i_target_mba.toEcmdString()); + 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;} @@ -387,7 +409,7 @@ fapi::ReturnCode mcb_reset_trap(const fapi::Target & i_target_mba) //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;} - + /*if(l_mbaPosition == 0) { //PORT - A @@ -414,17 +436,17 @@ fapi::ReturnCode mcb_reset_trap(const fapi::Target & i_target_mba) 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_centaur,MBS_MCBIST01_MCBCMA1Q_0x02011672,l_data_buffer_64); if(rc) return(rc); + rc = fapiPutScom(i_target_centaur,MBS_MCBIST01_MCBCMB1Q_0x02011673,l_data_buffer_64); if(rc) return(rc); + rc = fapiPutScom(i_target_centaur,MBS_MCBIST01_MCBCMABQ_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); - + rc = fapiPutScom(i_target_centaur,0x02011772,l_data_buffer_64); if(rc) return(rc); + rc = fapiPutScom(i_target_centaur,0x02011773,l_data_buffer_64); if(rc) return(rc); + rc = fapiPutScom(i_target_centaur,0x02011774,l_data_buffer_64); if(rc) return(rc); + - + return rc; } @@ -442,16 +464,16 @@ 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; - //uint8_t l_print = 0; + //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; + rc = fapiGetScom(i_target_mba,MBA01_MCBIST_MCBAGRAQ_0x030106d6,l_data_buffer_64); if(rc) return rc; rc = FAPI_ATTR_GET(ATTR_EFF_NUM_RANKS_PER_DIMM, &i_target_mba, l_num_ranks_per_dimm); if(rc) return rc; - - + + if(l_num_ranks_per_dimm[0][0] > 0) { FAPI_DBG("%s: Socket 0 Configured",i_target_mba.toEcmdString()); @@ -475,33 +497,33 @@ fapi::ReturnCode start_mcb(const fapi::Target & i_target_mba) FAPI_DBG("%s:No Socket found",i_target_mba.toEcmdString()); } - - + + //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; + + rc = fapiPutScom(i_target_mba,MBA01_MCBIST_MCBAGRAQ_0x030106d6,l_data_buffer_64); if(rc) return rc; 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_DBG("%s:MCBIST already in progess, wait till MCBIST completes",i_target_mba.toEcmdString()); - + return rc; - + } - + rc_num = l_data_buffer_64.flushTo0();if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;} rc_num = l_data_buffer_64.setBit(0);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;} rc = fapiPutScom(i_target_mba,MBA01_MCBIST_MCB_CNTLQ_0x030106db,l_data_buffer_64); if(rc) return rc; - + //rc = fapiDelay(DELAY_100US, DELAY_2000SIMCYCLES);if(rc) return rc; // wait 2000 simcycles (in sim mode) OR 100 uS (in hw mode) - - + + return rc; } @@ -515,7 +537,7 @@ fapi::ReturnCode start_mcb(const fapi::Target & i_target_mba) // Input Parameters : // const fapi::Target & Centaur.mba // bool l_mcb_stop_on_fail Whether MCBIST should stop on fail or not -// uint64_t i_time Sets the max Time out value +// uint64_t i_time Sets the max Time out value // Output Parameter : // uint32 status = 1 MCBIST done with fail or MCBIST not complete (default value) // = 0 MCBIST Done without fail @@ -539,27 +561,27 @@ fapi::ReturnCode poll_mcb(const fapi::Target & i_target_mba,uint8_t *o_mcb_stat uint64_t l_time = 0; uint32_t l_time_count = 0; //uint64_t l_reg = 0; - uint8_t l_index = 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; uint8_t l_mcb_stop_on_fail= 0; mcbist_test_mem i_mcbtest1; -//uint8_t l_print = 0; +//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}; + // 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 = FAPI_ATTR_GET(ATTR_MCBIST_MAX_TIMEOUT, &i_target_mba, l_time); if(rc) return rc; rc = FAPI_ATTR_GET(ATTR_MCBIST_STOP_ON_ERROR, &i_target_mba, l_mcb_stop_on_fail); if(rc) return rc; - + /*rc = fapiGetScom(i_target_mba,0x02011670,l_data_buffer_64); if(rc) return rc; l_reg = l_data_buffer_64.getDoubleWord (0); FAPI_DBG("%s:Value of register is %016llX",l_reg);//Extract 3-7 . @@ -573,20 +595,20 @@ uint8_t test_array_count[44] ={0,2,2,1,1,1,6,6,30,30,2,7,4,2,1,5,4,2,1,1,3,1,1,4 l_time = MCB_MAX_TIMEOUT; - } + } FAPI_DBG("%s:Value of max time %016llX",i_target_mba.toEcmdString(),l_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)) + if(l_data_buffer_64.isBitSet(0)) { l_time_count++; - if(l_time_count == 5000) + if(l_time_count == 500) { l_time_count = 0; - FAPI_DBG("%s:POLLING STATUS:POLLING IN PROGRESS...........",i_target_mba.toEcmdString()); + FAPI_DBG("%s:POLLING STATUS:POLLING IN PROGRESS...........",i_target_mba.toEcmdString()); //if((i_flag == 0) &&(l_print == 0)) if(i_flag == 0) { @@ -609,27 +631,27 @@ 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 { 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; + 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; + 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()); } @@ -637,10 +659,10 @@ uint8_t test_array_count[44] ={0,2,2,1,1,1,6,6,30,30,2,7,4,2,1,5,4,2,1,1,3,1,1,4 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; + 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()); } } @@ -651,7 +673,7 @@ uint8_t test_array_count[44] ={0,2,2,1,1,1,6,6,30,30,2,7,4,2,1,5,4,2,1,1,3,1,1,4 } l_mcb_ip = 1; } - if(l_data_buffer_64.isBitSet(1)) + if(l_data_buffer_64.isBitSet(1)) { {FAPI_DBG("%s:POLLING STATUS:MCBIST POLLING DONE",i_target_mba.toEcmdString()); FAPI_DBG("%s:MCBIST is done",i_target_mba.toEcmdString());} @@ -661,21 +683,21 @@ 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 rc = fapiGetScom(i_target_mba,MBA01_MCBIST_MCBCFGQ_0x030106e0,l_data_buffer_trap_64);if(rc) return rc; rc_num = l_data_buffer_64.clearBit(60);if (rc_num){FAPI_ERR( "Error in function Poll_mcb:");rc.setEcmdError(rc_num);return rc;} rc = fapiPutScom(i_target_mba,MBA01_MCBIST_MCBCFGQ_0x030106e0,l_data_buffer_trap_64);if(rc) return rc; - + } - if(l_data_buffer_64.isBitSet(2)) + if(l_data_buffer_64.isBitSet(2)) { l_mcb_fail = 1; FAPI_DBG("%s:POLLING STATUS:MCBIST FAILED",i_target_mba.toEcmdString()); - if(l_mcb_stop_on_fail == 1) //if stop on error is 1, break after the current subtest completes + if(l_mcb_stop_on_fail == 1) //if stop on error is 1, break after the current subtest completes { rc = fapiGetScom(i_target_mba,MBA01_MCBIST_MCBCFGQ_0x030106e0,l_stop_on_fail_buffer_64); if(rc) return rc; rc_num = l_stop_on_fail_buffer_64.setBit(62);if (rc_num){FAPI_ERR( "Error in function poll_mcb:");rc.setEcmdError(rc_num);return rc;} // Set bit 61 to break after current subtest rc = fapiPutScom(i_target_mba,MBA01_MCBIST_MCBCFGQ_0x030106e0,l_stop_on_fail_buffer_64); if(rc) return rc; FAPI_DBG("%s:MCBIST will break after Current Subtest",i_target_mba.toEcmdString()); - - while(l_mcb_done == 0) // Poll till MCBIST is done + + while(l_mcb_done == 0) // Poll till MCBIST is done { rc = fapiGetScom(i_target_mba,MBA01_MCBIST_MCB_CNTLSTATQ_0x030106dc,l_data_buffer_64); if(rc) return rc; if(l_data_buffer_64.isBitSet(1)) @@ -704,7 +726,7 @@ uint8_t test_array_count[44] ={0,2,2,1,1,1,6,6,30,30,2,7,4,2,1,5,4,2,1,1,3,1,1,4 return rc; } -#ifdef MCB_DEBUG_1 +#ifdef MCB_DEBUG_1 //if((l_count%100 == 0)&&(l_print == 0))//Can be changed later if(l_count%100 == 0) { @@ -715,7 +737,7 @@ uint8_t test_array_count[44] ={0,2,2,1,1,1,6,6,30,30,2,7,4,2,1,5,4,2,1,1,3,1,1,4 #endif l_count++; } - + if((l_mcb_done == 1) && (l_mcb_fail == 1) && (l_mcb_stop_on_fail == true) ) { *o_mcb_status = 1; /// MCB fail @@ -729,7 +751,7 @@ uint8_t test_array_count[44] ={0,2,2,1,1,1,6,6,30,30,2,7,4,2,1,5,4,2,1,1,3,1,1,4 } else if((l_mcb_done == 1) && (l_mcb_fail == 0)) { - *o_mcb_status = 0;//pass; + *o_mcb_status = 0;//pass; #ifdef MCB_DEBUG2 FAPI_DBG("%s:*************************************************",i_target_mba.toEcmdString()); FAPI_DBG("%s:MCB done bit : %d",i_target_mba.toEcmdString(),l_mcb_done); @@ -740,18 +762,18 @@ 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 } else if((l_mcb_done == 0) && (l_mcb_ip == 1) && (l_mcb_timeout == l_time) ) { - *o_mcb_status = 1;//fail; + *o_mcb_status = 1;//fail; #ifdef MCB_DEBUG2 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 } - + if (*o_mcb_status == 1) { FAPI_ERR( "poll_mcb:MCBIST failed"); @@ -759,11 +781,11 @@ uint8_t test_array_count[44] ={0,2,2,1,1,1,6,6,30,30,2,7,4,2,1,5,4,2,1,1,3,1,1,4 return rc; } - - return rc; + + return rc; } -fapi::ReturnCode mcb_error_map_print(const fapi::Target & i_target_mba,ecmdDataBufferBase & i_mcb_fail_160,uint8_t i_port,uint8_t i_array[200],uint8_t i_number,ecmdDataBufferBase i_data_buf_port,ecmdDataBufferBase i_data_buf_spare) +fapi::ReturnCode mcb_error_map_print(const fapi::Target & i_target_mba,ecmdDataBufferBase & i_mcb_fail_160,uint8_t i_port,uint8_t i_array[80],uint8_t i_number,ecmdDataBufferBase i_data_buf_port,ecmdDataBufferBase i_data_buf_spare) { ReturnCode rc; uint32_t rc_num; @@ -781,10 +803,10 @@ fapi::ReturnCode mcb_error_map_print(const fapi::Target & i_target_mba,ecmdData //uint32_t rc_num; uint8_t l_mbaPosition = 0; //uint8_t l_attr_eff_dimm_type_u8 = 0; - //uint8_t l_print = 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; + 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]; @@ -879,7 +901,7 @@ fapi::ReturnCode mcb_error_map_print(const fapi::Target & i_target_mba,ecmdData FAPI_DBG("%s:Nibble 01010101010101010101",i_target_mba.toEcmdString()); FAPI_DBG("%s:MASK %016llX%04X\n",i_target_mba.toEcmdString(),l_generic_buffer,l_output); } - + } @@ -896,9 +918,9 @@ fapi::ReturnCode mcb_error_map_print(const fapi::Target & i_target_mba,ecmdData //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]; +uint8_t l_marray0[80] = {0}; ecmdDataBufferBase l_data_buffer1_64(64),l_data_buffer3_64(64); - + rc_num = l_data_buffer1_64.flushTo0(); @@ -919,7 +941,7 @@ uint8_t l_num,io_num,l_inter,l_num2,l_index2; for(l_index=0;l_index<i_number;l_index++) { - + //l_value = l_array0[l_index]; l_value = i_array[l_index]; l_inter = (l_value/4); @@ -968,21 +990,21 @@ l_value = 0; //FAPI_DBG("%s: --------------------",i_target_mba.toEcmdString()); - - + + rc = mss_getrankpair(i_target_mba,i_port,0,&l_rank_pair,l_rankpair_table); if(rc) return rc; for(l_cur_rank = 0;l_cur_rank < l_max_rank;l_cur_rank++) - { + { l_index2 = 0; l_num = 0; i_rank = l_rankpair_table[l_cur_rank]; - sprintf(l_str1,"%s:%-4s%d%5s",i_target_mba.toEcmdString(),"RANK",i_rank,""); + sprintf(l_str1,"%s:%-4s%d%5s",i_target_mba.toEcmdString(),"RANK",i_rank,""); for(l_byte = 0; l_byte < MAX_BYTE; l_byte++) { for(l_nibble = 0; l_nibble < MAX_NIBBLES; l_nibble++) { - l_value = l_marray0[l_num] ; + l_value = l_marray0[l_num] ; //FAPI_DBG("%s:l_value %d l_num %d",i_target_mba.toEcmdString(),l_value,l_num); l_index0 = (i_rank*20) + (l_byte*2) + l_nibble; // l_index1 = l_index0 + 160*(i_port); @@ -998,16 +1020,16 @@ l_value = 0; else { if(i_mcb_fail_160.isBitSet(l_index1)) - { + { strcat(l_str1,"X"); } else - { + { strcat(l_str1,"."); } } } - } + } FAPI_DBG("%s",l_str1); } @@ -1018,15 +1040,15 @@ return rc; /*****************************************************************/ // Funtion name : mcb_error_map -// Description : Reads the nibblewise Error map registers into o_error_map +// Description : Reads the nibblewise Error map registers into o_error_map // Input Parameters : // const fapi::Target & Centaur.mba // uint8_t i_port Current port -// uint8_t i_rank Current Rank +// uint8_t i_rank Current Rank // Output Parameter : -// uint8_t o_error_map[][8][10][2] Contains the error map +// uint8_t o_error_map[][8][10][2] Contains the error map //****************************************************************/ -fapi::ReturnCode mcb_error_map(const fapi::Target & i_target_mba, uint8_t o_error_map[][8][10][2]) +fapi::ReturnCode mcb_error_map(const fapi::Target & i_target_mba, uint8_t o_error_map[][8][10][2],uint8_t i_CDarray0[80],uint8_t i_CDarray1[80],uint8_t count_bad_dq[2]) { ecmdDataBufferBase l_mcbem1ab(64); ecmdDataBufferBase l_mcbem2ab(64); @@ -1048,7 +1070,7 @@ fapi::ReturnCode mcb_error_map(const fapi::Target & i_target_mba, uint8_t o_er fapi::ReturnCode rc; uint32_t rc_num = 0; uint16_t l_index0 = 0; - uint32_t l_index1 = 0; + uint32_t l_index1 = 0; uint8_t l_port = 0; uint8_t l_rank = 0; uint8_t l_byte = 0; @@ -1056,14 +1078,28 @@ fapi::ReturnCode mcb_error_map(const fapi::Target & i_target_mba, uint8_t o_er uint8_t l_num_ranks_per_dimm[MAX_PORT][MAX_PORT]; //uint64_t start; uint8_t l_mbaPosition = 0; - //uint8_t l_print = 0; + //uint8_t l_print = 0; //rc = FAPI_ATTR_GET(ATTR_MCBIST_PRINTING_DISABLE, &i_target_mba,l_print); if(rc) return rc; uint8_t rank_pair,i_byte,i_nibble,i_input_index_u8,o_val,i_byte1,i_nibble1; uint8_t l_index,l_i,l_number,l_value,l_value1,l_number1;//l_cur_rank, l_number1=0; //HB - uint8_t l_array[200],l_marray11[200],l_array0[200],l_marray0[200],l_array1[200],l_marray1[200],l_marray[200],cdimm_dq0[72],cdimm_dq1[72],cdimm_dq[72],l_ISarray1[200],l_ISarray0[200],l_ISarray[200];//,isdimm_dq[72] + uint8_t l_array[80] ={0}; + uint8_t l_marray11[80] ={0}; + uint8_t l_array0[80] ={0}; + uint8_t l_marray0[80] ={0}; + uint8_t l_array1[80] ={0}; + uint8_t l_marray1[80] ={0}; + uint8_t l_marray[80] ={0}; + uint8_t cdimm_dq0[72] ={0}; + uint8_t cdimm_dq1[72] ={0}; + uint8_t cdimm_dq[80] ={0}; + uint8_t l_ISarray1[80] ={0}; + uint8_t l_ISarray0[80] ={0}; + uint8_t l_ISarray[80] ={0}; + //uint8_t isdimm_dq[80] ={0}; + //,l_marray11[80],l_array0[80],l_marray0[80],l_array1[80],l_marray1[80],l_marray[80],cdimm_dq0[72],cdimm_dq1[72],cdimm_dq[72],l_ISarray1[80],l_ISarray0[80],l_ISarray[80];//,isdimm_dq[72] //uint8_t isdimm_dq0[72],isdimm_dq1[72]; uint8_t l_rankpair_table[MAX_RANK] ; ecmdDataBufferBase l_data_buffer1_64(64),l_data_buffer3_64(64),l_data_buf_port0(64),l_data_buf_port1(64),l_data_buf_spare(64); @@ -1085,25 +1121,25 @@ fapi::ReturnCode mcb_error_map(const fapi::Target & i_target_mba, uint8_t o_er { FAPI_ERR("Error getting MBA position"); return rc; } - - - rc = FAPI_ATTR_GET(ATTR_EFF_NUM_RANKS_PER_DIMM, &i_target_mba, l_num_ranks_per_dimm); if(rc) return rc; + + + rc = FAPI_ATTR_GET(ATTR_EFF_NUM_RANKS_PER_DIMM, &i_target_mba, l_num_ranks_per_dimm); if(rc) return rc; l_max_rank0=l_num_ranks_per_dimm[0][0]+l_num_ranks_per_dimm[0][1]; l_max_rank1=l_num_ranks_per_dimm[1][0]+l_num_ranks_per_dimm[1][1]; - rc = fapiGetParentChip(i_target_mba, i_target_centaur); + rc = fapiGetParentChip(i_target_mba, i_target_centaur); if (rc) { FAPI_ERR("Error in getting Parent Chiplet"); return rc; } - - - + + + if(l_mbaPosition == 0) { - + rc = fapiGetScom(i_target_centaur,MBS_MCBIST01_MCBEMA1Q_0x0201166a,l_mcbem1ab); if(rc) return rc; rc_num = l_mcb_fail_160.insert(l_mcbem1ab,0,60,0);if (rc_num){FAPI_ERR( "Error in function mcb_error_map:");rc.setEcmdError(rc_num);return rc;} @@ -1119,10 +1155,10 @@ fapi::ReturnCode mcb_error_map(const fapi::Target & i_target_mba, uint8_t o_er rc_num = l_mcb_fail1_160.insert(l_mcbem3ab,120,40,0);if (rc_num){FAPI_ERR( "Error in function mcb_error_map:");rc.setEcmdError(rc_num);return rc;} } - else if(l_mbaPosition==1) + else if(l_mbaPosition==1) { - + rc = fapiGetScom(i_target_centaur,0x0201176a,l_mcbem1ab); if(rc) return rc; rc_num = l_mcb_fail_160.insert(l_mcbem1ab,0,60,0);if (rc_num){FAPI_ERR( "Error in function mcb_error_map:");rc.setEcmdError(rc_num);return rc;} rc = fapiGetScom(i_target_centaur,0x0201176b,l_mcbem2ab); if(rc) return rc; @@ -1136,8 +1172,8 @@ fapi::ReturnCode mcb_error_map(const fapi::Target & i_target_mba, uint8_t o_er rc = fapiGetScom(i_target_centaur,0x0201176f,l_mcbem3ab); if(rc) return rc; rc_num = l_mcb_fail1_160.insert(l_mcbem3ab,120,40,0);if (rc_num){FAPI_ERR( "Error in function mcb_error_map:");rc.setEcmdError(rc_num);return rc;} - } - + } + for (l_port = 0; l_port < MAX_PORT ; l_port++) { @@ -1198,14 +1234,14 @@ fapi::ReturnCode mcb_error_map(const fapi::Target & i_target_mba, uint8_t o_er } } } - + rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_TYPE, &i_target_mba, l_attr_eff_dimm_type_u8); if(rc) return rc; - + //Adi //l_attr_eff_dimm_type_u8 = 0; - + //ISDIMM error map - //uint8_t l_max_ranks =8; + //uint8_t l_max_ranks =8; //Modified New Code //ReturnCode rc; @@ -1241,8 +1277,8 @@ rc_num = l_data_buffer3_64.flushTo0(); { //FAPI_INF("l_array:%d",l_i); l_i = 0; - rc = fapiGetScom(i_target_mba,0x02011672,l_data_buf_port0); if(rc) return rc; - rc = fapiGetScom(i_target_mba,0x02011674,l_data_buf_spare); if(rc) return rc; + rc = fapiGetScom(i_target_centaur,MBS_MCBIST01_MCBCMA1Q_0x02011672,l_data_buf_port0); if(rc) return rc; + rc = fapiGetScom(i_target_centaur,MBS_MCBIST01_MCBCMABQ_0x02011674,l_data_buf_spare); if(rc) return rc; for(l_index=0;l_index<64;l_index++) { @@ -1255,9 +1291,9 @@ rc_num = l_data_buffer3_64.flushTo0(); } for(l_index=0;l_index<16;l_index++) { - + if(l_data_buf_spare.isBitSet(l_index)) - { + { l_array0[l_i] = l_index+64; l_i++; //FAPI_INF("l_array:%d",l_i); @@ -1270,12 +1306,12 @@ rc_num = l_data_buffer3_64.flushTo0(); { //FAPI_INF("l_array:%d",l_i); l_i = 0; - rc = fapiGetScom(i_target_mba,0x02011673,l_data_buf_port1); if(rc) return rc; - rc = fapiGetScom(i_target_mba,0x02011674,l_data_buf_spare); if(rc) return rc; + rc = fapiGetScom(i_target_centaur,MBS_MCBIST01_MCBCMB1Q_0x02011673,l_data_buf_port1); if(rc) return rc; + rc = fapiGetScom(i_target_centaur,MBS_MCBIST01_MCBCMABQ_0x02011674,l_data_buf_spare); if(rc) return rc; for(l_index=0;l_index<64;l_index++) { if(l_data_buf_port1.isBitSet(l_index)) - { + { l_array1[l_i] = l_index; l_i++;//FAPI_INF("l_array:%d",l_i); } @@ -1288,7 +1324,7 @@ rc_num = l_data_buffer3_64.flushTo0(); { if(l_data_buf_spare.isBitSet(l_index)) - { + { l_array1[l_i] = l_index+64-16; l_i++;//FAPI_INF("l_array:%d",l_i); } @@ -1305,14 +1341,14 @@ rc_num = l_data_buffer3_64.flushTo0(); { //FAPI_INF("l_array:%d",l_i); l_i = 0; - rc = fapiGetScom(i_target_mba,0x02011774,l_data_buf_spare); if(rc) return rc; - rc = fapiGetScom(i_target_mba,0x02011772,l_data_buf_port0); if(rc) return rc; + rc = fapiGetScom(i_target_centaur,0x02011774,l_data_buf_spare); if(rc) return rc; + rc = fapiGetScom(i_target_centaur,0x02011772,l_data_buf_port0); if(rc) return rc; for(l_index=0;l_index<64;l_index++) { if(l_data_buf_port0.isBitSet(l_index)) - { + { l_array0[l_i] = l_index; l_i++;//FAPI_INF("l_array:%d",l_i); } @@ -1323,7 +1359,7 @@ rc_num = l_data_buffer3_64.flushTo0(); for(l_index=0;l_index<16;l_index++) { if(l_data_buf_spare.isBitSet(l_index)) - { + { l_array0[l_i] = l_index+64; l_i++;//FAPI_INF("l_array:%d",l_i); } @@ -1335,13 +1371,13 @@ rc_num = l_data_buffer3_64.flushTo0(); { l_i = 0; //FAPI_INF("l_array:%d",l_i); - rc = fapiGetScom(i_target_mba,0x02011774,l_data_buf_spare); if(rc) return rc; - rc = fapiGetScom(i_target_mba,0x02011773,l_data_buf_port1); if(rc) return rc; + rc = fapiGetScom(i_target_centaur,0x02011774,l_data_buf_spare); if(rc) return rc; + rc = fapiGetScom(i_target_centaur,0x02011773,l_data_buf_port1); if(rc) return rc; for(l_index=0;l_index<64;l_index++) { if(l_data_buf_port1.isBitSet(l_index)) - { + { l_array1[l_i] = l_index; l_i++;//FAPI_INF("l_array:%d",l_i); } @@ -1350,7 +1386,7 @@ rc_num = l_data_buffer3_64.flushTo0(); for(l_index=16;l_index<32;l_index++) { if(l_data_buf_spare.isBitSet(l_index)) - { + { l_array1[l_i] = l_index+64-16; l_i++;//FAPI_INF("l_array:%d",l_i); } @@ -1465,7 +1501,7 @@ l_n=0;io_num0= 0;io_num1=0; - if((l_attr_eff_dimm_type_u8 == 1) || (l_attr_eff_dimm_type_u8 == 3)) + if((l_attr_eff_dimm_type_u8 == 1) || (l_attr_eff_dimm_type_u8 == 3)) { //For ISDIMM marray @@ -1590,6 +1626,17 @@ l_n=0;io_num0= 0;io_num1=0; //DEBUG PRINTS + + +count_bad_dq[0]=l_number1; + count_bad_dq[1]=l_number; + // FAPI_INF("\n abhijit's number is number=%d and %d \n",count_bad_dq[0],count_bad_dq[1]); + for(l_i=0;l_i<l_number1;l_i++){ + i_CDarray0[l_i]=l_array0[l_i]; + } + for(l_i=0;l_i<l_number;l_i++){ + i_CDarray1[l_i]=l_array1[l_i]; + } /* for(l_i = 0;l_i < l_number1;l_i++) { @@ -1635,7 +1682,7 @@ FAPI_INF("______________________________________________________________________ if((l_attr_eff_dimm_type_u8 == 1) || (l_attr_eff_dimm_type_u8 == 3)) //Calling ISDIMM error mAP and LRDIMM { - FAPI_DBG("%s:################# Error MAP for ISDIMM #################",i_target_mba.toEcmdString()); + FAPI_DBG("%s:################# Error MAP for ISDIMM #################",i_target_mba.toEcmdString()); for(l_port = 0; l_port < 2; l_port++) { if(l_port == 0) @@ -1691,7 +1738,7 @@ FAPI_INF("______________________________________________________________________ FAPI_DBG("%s: NO RANKS FOUND ON PORT %d",i_target_mba.toEcmdString(),l_port); } else - { + { @@ -1854,7 +1901,7 @@ FAPI_INF("______________________________________________________________________ for( i_byte = 0;i_byte < l_max_bytes ;i_byte++) { for (i_nibble = 0;i_nibble < 2;i_nibble++) - { + { l_flag = 0; l_inter = l_marray[l_num] ; @@ -1888,10 +1935,10 @@ FAPI_INF("______________________________________________________________________ { if( o_error_map[l_port][l_rank][i_byte1][i_nibble1] == 1){ - strcat(l_str,"X"); + strcat(l_str,"X"); } else - { + { strcat(l_str,"."); } @@ -1909,28 +1956,28 @@ FAPI_INF("______________________________________________________________________ FAPI_DBG("%s:################# CDIMM ERROR MAP ###########################\n",i_target_mba.toEcmdString()); i_port = 0; mcb_error_map_print( i_target_mba , l_mcb_fail_160, i_port,l_array0,l_number1,l_data_buf_port0,l_data_buf_spare);//ecmdDataBufferBase l_data_buffer1_64(64),l_data_buffer3_64(64),l_data_buf_port0(64),l_data_buf_port1(64),l_data_buf_spare(64); - - i_port = 1; - mcb_error_map_print(i_target_mba, l_mcb_fail1_160, i_port,l_array1,l_number,l_data_buf_port1,l_data_buf_spare); + + i_port = 1; + mcb_error_map_print(i_target_mba, l_mcb_fail1_160, i_port,l_array1,l_number,l_data_buf_port1,l_data_buf_spare); } - + //End return rc; } /*****************************************************************/ // Funtion name : mcb_write_test_mem -// Description : : Based on parameters passed we write data into Register being passed +// Description : : Based on parameters passed we write data into Register being passed // Input Parameters : // const fapi::Target & Centaur.mba -// const uint64_t i_reg_addr Register address +// const uint64_t i_reg_addr Register address // mcbist_oper_type i_operation_type Operation Type // mcbist_addr_mode i_addr_mode Sequential or Random address modes // mcbist_data_mode i_data_mode Data Mode -// uint8_t i_done Done Bit -// mcbist_data_select_mode i_data_select_mode Different BURST modes or DEFAULT +// uint8_t i_done Done Bit +// mcbist_data_select_mode i_data_select_mode Different BURST modes or DEFAULT // mcbist_add_select_mode i_addr_select_mode Address Select mode -// uint8_t i_testnumber Subtest number +// uint8_t i_testnumber Subtest number // uint8_t i_cfg_test_123_cmd Integer value //****************************************************************/ @@ -1945,15 +1992,15 @@ fapi::ReturnCode mcb_write_test_mem(const fapi::Target & i_target_mba,const uin uint8_t l_data_mode = i_data_mode; uint8_t l_data_select_mode = i_data_select_mode; uint8_t l_addr_select_mode = i_addr_select_mode; - //uint8_t l_print = 0; + //uint8_t l_print = 0; //rc = FAPI_ATTR_GET(ATTR_MCBIST_PRINTING_DISABLE, &i_target_mba,l_print); if(rc) return rc; ecmdDataBufferBase l_data_buffer_64(64); - - + + FAPI_DBG("%s:Function mcb_write_test_mem",i_target_mba.toEcmdString()); rc = fapiGetScom(i_target_mba,i_reg_addr,l_data_buffer_64);if(rc) return rc; - l_index = i_testnumber * (MCB_TEST_NUM) ; - + l_index = i_testnumber * (MCB_TEST_NUM) ; + uint8_t l_done_bit ; rc = FAPI_ATTR_GET(ATTR_MCBIST_ADDR_BANK, &i_target_mba, l_done_bit); if(rc) return rc; if(l_done_bit == 1) @@ -1964,67 +2011,67 @@ fapi::ReturnCode mcb_write_test_mem(const fapi::Target & i_target_mba,const uin l_sub_info[i_testnumber1].l_operation_type = l_operation_type; l_sub_info[i_testnumber1].l_data_mode = l_data_mode; - l_sub_info[i_testnumber1].l_addr_mode = l_addr_mode; + l_sub_info[i_testnumber1].l_addr_mode = l_addr_mode; // Operation type - + rc_num = rc_num| l_data_buffer_64.insertFromRight(l_operation_type,l_index ,3); - - + + rc_num = rc_num| l_data_buffer_64.insertFromRight(l_cfg_test_123_cmd,l_index + 3,3); // ADDR MODE - + rc_num = rc_num| l_data_buffer_64.insertFromRight(l_addr_mode,l_index + 6,2); - // DATA MODE - + // DATA MODE + rc_num = rc_num| l_data_buffer_64.insertFromRight(l_data_mode,l_index + 8,3); // Done bit - + rc_num = rc_num| l_data_buffer_64.insertFromRight(i_done,l_index + 11,1); // Data Select Mode - + rc_num = rc_num| l_data_buffer_64.insertFromRight(l_data_select_mode,l_index + 12,2); - + // Address Select mode - + rc_num = rc_num| l_data_buffer_64.insertFromRight(l_addr_select_mode,l_index + 14,2); if (rc_num){FAPI_ERR( "Error in function mcb_write_test_mem:");rc.setEcmdError(rc_num);return rc;} - + rc = fapiPutScom(i_target_mba,i_reg_addr,l_data_buffer_64); if(rc) return rc; rc = fapiGetScom(i_target_mba,i_reg_addr,l_data_buffer_64); if(rc) return rc; - + FAPI_DBG("%s:SUBTEST %d of %d in Progress.................... ",i_target_mba.toEcmdString(),i_testnumber1,total_subtest_no); //FAPI_DBG("%s:SUBTEST %d in Progress.................... ",i_testnumber); - FAPI_DBG("%s:SUBTEST DETAILS",i_target_mba.toEcmdString()); + FAPI_DBG("%s:SUBTEST DETAILS",i_target_mba.toEcmdString()); switch(l_operation_type) { - case 0 : FAPI_DBG("%s:SUBTEST :WRITE",i_target_mba.toEcmdString());break; - case 1 : FAPI_DBG("%s:SUBTEST :READ",i_target_mba.toEcmdString());break; - case 2 : FAPI_DBG("%s:SUBTEST :READ - WRITE",i_target_mba.toEcmdString());break; - case 3 : FAPI_DBG("%s:SUBTEST :WRITE - READ",i_target_mba.toEcmdString());break; - case 4 : FAPI_DBG("%s:SUBTEST :READ - WRITE - READ",i_target_mba.toEcmdString());break; - case 5 : FAPI_DBG("%s:SUBTEST :READ - WRITE - WRITE",i_target_mba.toEcmdString());break; - case 6 : FAPI_DBG("%s:SUBTEST :RANDOM COMMAND SEQUENCE",i_target_mba.toEcmdString());break; - case 7 : FAPI_DBG("%s:SUBTEST :GOTO SUBTEST N OR REFRESH ONLY",i_target_mba.toEcmdString());break; + case 0 : FAPI_DBG("%s:SUBTEST :WRITE",i_target_mba.toEcmdString());break; + case 1 : FAPI_DBG("%s:SUBTEST :READ",i_target_mba.toEcmdString());break; + case 2 : FAPI_DBG("%s:SUBTEST :READ - WRITE",i_target_mba.toEcmdString());break; + case 3 : FAPI_DBG("%s:SUBTEST :WRITE - READ",i_target_mba.toEcmdString());break; + case 4 : FAPI_DBG("%s:SUBTEST :READ - WRITE - READ",i_target_mba.toEcmdString());break; + case 5 : FAPI_DBG("%s:SUBTEST :READ - WRITE - WRITE",i_target_mba.toEcmdString());break; + case 6 : FAPI_DBG("%s:SUBTEST :RANDOM COMMAND SEQUENCE",i_target_mba.toEcmdString());break; + case 7 : FAPI_DBG("%s:SUBTEST :GOTO SUBTEST N OR REFRESH ONLY",i_target_mba.toEcmdString());break; default : FAPI_DBG("%s:Wrong Operation selected for Subtest",i_target_mba.toEcmdString()); } switch(l_data_mode) { - case 0 : FAPI_DBG("%s:DATA MODE :FIXED DATA",i_target_mba.toEcmdString());break; - case 1 : FAPI_DBG("%s:DATA MODE :DATA_RANDOM_FORWARD",i_target_mba.toEcmdString());break; - case 2 : FAPI_DBG("%s:DATA MODE :DATA_RANDOM_REVERSE",i_target_mba.toEcmdString());break; - case 3 : FAPI_DBG("%s:DATA MODE :RANDOM w/ECC FORWARD",i_target_mba.toEcmdString());break; - case 4 : FAPI_DBG("%s:DATA MODE :RANDOM w/ECC REVERSE",i_target_mba.toEcmdString());break; - case 5 : FAPI_DBG("%s:DATA MODE :DATA EQUAL ADDRESS",i_target_mba.toEcmdString());break; - case 6 : FAPI_DBG("%s:DATA MODE :DATA ROTATE LEFT",i_target_mba.toEcmdString());break; - case 7 : FAPI_DBG("%s:DATA MODE :DATA ROTATE RIGHT",i_target_mba.toEcmdString());break; + 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()); } @@ -2032,10 +2079,10 @@ fapi::ReturnCode mcb_write_test_mem(const fapi::Target & i_target_mba,const uin switch(l_addr_mode) { - case 0 : FAPI_DBG("%s:ADDRESS MODE :SEQUENTIAL FORWARD",i_target_mba.toEcmdString());break; - case 1 : FAPI_DBG("%s:ADDRESS MODE :SEQUENTIAL REVERSE",i_target_mba.toEcmdString());break; - case 2 : FAPI_DBG("%s:ADDRESS MODE :RANDOM FORWARD",i_target_mba.toEcmdString());break; - case 3 : FAPI_DBG("%s:ADDRESS MODE :RANDOM REVERSE",i_target_mba.toEcmdString());break; + 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()); } @@ -2076,11 +2123,11 @@ fapi::ReturnCode mcb_write_test_mem(const fapi::Target & i_target_mba,const uin /*****************************************************************/ // Funtion name : cfg_byte_mask -// Description : -// Input Parameters : It is used to mask bad bits read from SPD +// Description : +// Input Parameters : It is used to mask bad bits read from SPD // const fapi::Target & Centaur.mba // uint8_t i_rank Current Rank -// uint8_t i_port Current Port +// uint8_t i_port Current Port //****************************************************************/ @@ -2097,17 +2144,20 @@ fapi::ReturnCode cfg_byte_mask(const fapi::Target & i_target_mba) uint8_t num_ranks_per_dimm[2][2]; uint8_t l_MAX_RANKS=8; uint8_t rank_pair=0; - uint64_t l_var = 0xFFFFFFFFFFFFFFFFull; + uint64_t l_var = 0xFFFFFFFFFFFFFFFFull; uint16_t l_spare = 0xFFFF; ecmdDataBufferBase l_data_buffer1_64(64); + Target i_target_centaur; + //uint8_t l_attr_centaur_ec_mcbist_random_data_gen = 0; + rc = fapiGetParentChip(i_target_mba, i_target_centaur); if(rc) return rc; uint8_t valid_rank[l_MAX_RANKS]; //rc = mss_getrankpair(i_target_mba,l_port,0,&rank_pair,valid_rank);if(rc) return rc; rc = FAPI_ATTR_GET(ATTR_EFF_NUM_RANKS_PER_DIMM, &i_target_mba, num_ranks_per_dimm); if(rc) return rc; uint8_t l_mbaPosition = 0; uint8_t l_attr_eff_dimm_type_u8 = 0; - rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_TYPE, &i_target_mba, l_attr_eff_dimm_type_u8); if(rc) return rc; + rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_TYPE, &i_target_mba, l_attr_eff_dimm_type_u8); if(rc) return rc; rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, &i_target_mba, l_mbaPosition); - //uint8_t l_print = 0; + //uint8_t l_print = 0; //rc = FAPI_ATTR_GET(ATTR_MCBIST_PRINTING_DISABLE, &i_target_mba,l_print); if(rc) return rc; //l_attr_eff_dimm_type_u8=1; @@ -2120,7 +2170,7 @@ fapi::ReturnCode cfg_byte_mask(const fapi::Target & i_target_mba) if (l_rnk == 255){ continue ; } - + ecmdDataBufferBase l_data_buffer2_64(64); ecmdDataBufferBase l_data_buffer3_64(64); ecmdDataBufferBase l_data_buffer4_64(64); @@ -2129,11 +2179,11 @@ fapi::ReturnCode cfg_byte_mask(const fapi::Target & i_target_mba) l_max_0 = num_ranks_per_dimm[0][0]+num_ranks_per_dimm[0][1]; l_max_1 = num_ranks_per_dimm[1][0]+num_ranks_per_dimm[1][1]; - + //uint32_t rc_num = 0; - + rc_num = l_data_buffer3_64.flushTo0();if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;} - + uint8_t l_dqBitmap[DIMM_DQ_RANK_BITMAP_SIZE]; uint8_t l_dq[8]={0}; @@ -2191,18 +2241,18 @@ fapi::ReturnCode cfg_byte_mask(const fapi::Target & i_target_mba) }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 = fapiGetScom(i_target_centaur,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 = fapiPutScom(i_target_centaur,MBS_MCBIST01_MCBCMA1Q_0x02011672,l_data_buffer1_64); if(rc) return rc; + rc = fapiGetScom(i_target_centaur,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_centaur,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; } - else + else { - rc = fapiGetScom(i_target_mba,MBS_MCBIST01_MCBCMABQ_0x02011674,l_data_buffer2_64); if(rc) return rc; + rc = fapiGetScom(i_target_centaur,MBS_MCBIST01_MCBCMABQ_0x02011674,l_data_buffer2_64); if(rc) return rc; //rc = fapiGetScom(i_target_mba,MBS_MCBIST01_MCBCMA1Q_0x02011672,l_data_buffer3_64); if(rc) return rc; if((l_attr_eff_dimm_type_u8 == 1) || (l_attr_eff_dimm_type_u8 == 3)){ rc_num = l_data_buffer2_64.insertFromRight(l_sp_isdimm,24,8);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;} @@ -2210,13 +2260,13 @@ fapi::ReturnCode cfg_byte_mask(const fapi::Target & i_target_mba) }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 = fapiGetScom(i_target_centaur,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 = fapiPutScom(i_target_centaur,MBS_MCBIST01_MCBCMB1Q_0x02011673,l_data_buffer1_64); if(rc) return rc; + rc = fapiGetScom(i_target_centaur,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_centaur,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; } }else @@ -2230,17 +2280,17 @@ fapi::ReturnCode cfg_byte_mask(const fapi::Target & i_target_mba) 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 = fapiGetScom(i_target_centaur,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 = fapiPutScom(i_target_centaur,0x02011772,l_data_buffer1_64); if(rc) return rc; + rc = fapiGetScom(i_target_centaur,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_centaur,0x02011774,l_data_buffer2_64); if(rc) return rc; //rc = fapiPutScom(i_target_mba,0x02011773,l_data_buffer3_64); if(rc) return rc; } - else + else { - rc = fapiGetScom(i_target_mba,0x02011774,l_data_buffer2_64); if(rc) return rc; + rc = fapiGetScom(i_target_centaur,0x02011774,l_data_buffer2_64); if(rc) return rc; if((l_attr_eff_dimm_type_u8 == 1) || (l_attr_eff_dimm_type_u8 == 3)){ rc_num = l_data_buffer2_64.insertFromRight(l_sp_isdimm,24,8);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,16,8);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;} @@ -2249,12 +2299,12 @@ fapi::ReturnCode cfg_byte_mask(const fapi::Target & i_target_mba) } //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 = fapiGetScom(i_target_centaur,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 = fapiPutScom(i_target_centaur,0x02011773,l_data_buffer1_64); if(rc) return rc; + rc = fapiGetScom(i_target_centaur,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_centaur,0x02011774,l_data_buffer2_64); if(rc) return rc; //rc = fapiPutScom(i_target_mba,0x02011772,l_data_buffer3_64); if(rc) return rc; } } @@ -2263,31 +2313,31 @@ fapi::ReturnCode cfg_byte_mask(const fapi::Target & i_target_mba) - - - + + + if(l_max_0 == 0) { if(l_mbaPosition == 0) { - rc = fapiGetScom(i_target_mba,0x02011672,l_data_buffer1_64); if(rc) return rc; - rc_num = l_data_buffer1_64.setDoubleWord(0,l_var); - rc = fapiPutScom(i_target_mba,0x02011672,l_data_buffer1_64); if(rc) return rc; - rc = fapiGetScom(i_target_mba,0x02011674,l_data_buffer1_64); if(rc) return rc; + rc = fapiGetScom(i_target_centaur,MBS_MCBIST01_MCBCMA1Q_0x02011672,l_data_buffer1_64); if(rc) return rc; + rc_num = l_data_buffer1_64.setDoubleWord(0,l_var); + rc = fapiPutScom(i_target_centaur,MBS_MCBIST01_MCBCMA1Q_0x02011672,l_data_buffer1_64); if(rc) return rc; + rc = fapiGetScom(i_target_centaur,MBS_MCBIST01_MCBCMABQ_0x02011674,l_data_buffer1_64); if(rc) return rc; rc_num = l_data_buffer1_64.insertFromRight(l_spare,0,16); - rc = fapiPutScom(i_target_mba,0x02011674,l_data_buffer1_64); if(rc) return rc; - } + rc = fapiPutScom(i_target_centaur,MBS_MCBIST01_MCBCMABQ_0x02011674,l_data_buffer1_64); if(rc) return rc; + } else { - rc = fapiGetScom(i_target_mba,0x02011772,l_data_buffer1_64); if(rc) return rc; - rc_num = l_data_buffer1_64.setDoubleWord(0,l_var); - rc = fapiPutScom(i_target_mba,0x02011772,l_data_buffer1_64); if(rc) return rc; - rc = fapiGetScom(i_target_mba,0x02011774,l_data_buffer1_64); if(rc) return rc; + rc = fapiGetScom(i_target_centaur,0x02011772,l_data_buffer1_64); if(rc) return rc; + rc_num = l_data_buffer1_64.setDoubleWord(0,l_var); + rc = fapiPutScom(i_target_centaur,0x02011772,l_data_buffer1_64); if(rc) return rc; + rc = fapiGetScom(i_target_centaur,0x02011774,l_data_buffer1_64); if(rc) return rc; rc_num = l_data_buffer1_64.insertFromRight(l_spare,0,16); - rc = fapiPutScom(i_target_mba,0x02011774,l_data_buffer1_64); if(rc) return rc; - + rc = fapiPutScom(i_target_centaur,0x02011774,l_data_buffer1_64); if(rc) return rc; + } } @@ -2295,24 +2345,24 @@ fapi::ReturnCode cfg_byte_mask(const fapi::Target & i_target_mba) { if(l_mbaPosition == 0) { - - rc = fapiGetScom(i_target_mba,0x02011673,l_data_buffer1_64); if(rc) return rc; - rc_num = l_data_buffer1_64.setDoubleWord(0,l_var); - rc = fapiPutScom(i_target_mba,0x02011673,l_data_buffer1_64); if(rc) return rc; - rc = fapiGetScom(i_target_mba,0x02011674,l_data_buffer1_64); if(rc) return rc; + + rc = fapiGetScom(i_target_centaur,MBS_MCBIST01_MCBCMB1Q_0x02011673,l_data_buffer1_64); if(rc) return rc; + rc_num = l_data_buffer1_64.setDoubleWord(0,l_var); + rc = fapiPutScom(i_target_centaur,MBS_MCBIST01_MCBCMB1Q_0x02011673,l_data_buffer1_64); if(rc) return rc; + rc = fapiGetScom(i_target_centaur,MBS_MCBIST01_MCBCMABQ_0x02011674,l_data_buffer1_64); if(rc) return rc; rc_num = l_data_buffer1_64.insertFromRight(l_spare,16,16); - rc = fapiPutScom(i_target_mba,0x02011674,l_data_buffer1_64); if(rc) return rc; - - } + rc = fapiPutScom(i_target_centaur,MBS_MCBIST01_MCBCMABQ_0x02011674,l_data_buffer1_64); if(rc) return rc; + + } else { - rc = fapiGetScom(i_target_mba,0x02011773,l_data_buffer1_64); if(rc) return rc; - rc_num = l_data_buffer1_64.setDoubleWord(0,l_var); - rc = fapiPutScom(i_target_mba,0x02011773,l_data_buffer1_64); if(rc) return rc; - rc = fapiGetScom(i_target_mba,0x02011774,l_data_buffer1_64); if(rc) return rc; + rc = fapiGetScom(i_target_centaur,0x02011773,l_data_buffer1_64); if(rc) return rc; + rc_num = l_data_buffer1_64.setDoubleWord(0,l_var); + rc = fapiPutScom(i_target_centaur,0x02011773,l_data_buffer1_64); if(rc) return rc; + rc = fapiGetScom(i_target_centaur,0x02011774,l_data_buffer1_64); if(rc) return rc; rc_num = l_data_buffer1_64.insertFromRight(l_spare,16,16); - rc = fapiPutScom(i_target_mba,0x02011774,l_data_buffer1_64); if(rc) return rc; + rc = fapiPutScom(i_target_centaur,0x02011774,l_data_buffer1_64); if(rc) return rc; } } @@ -2359,13 +2409,13 @@ 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 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()); @@ -2377,7 +2427,7 @@ case 38 : i_mcbtest = SHMOO_STRESS;break; 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; + //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) @@ -2412,20 +2462,21 @@ case 26 : i_mcbtest = R_ONLY;FAPI_INF("%s:TESTTYPE :R_ONLY",i_target_mba.toEcmdS 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 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 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; +case 44 : i_mcbtest = W_ONLY_INFINITE_RAND;FAPI_INF("%s:TESTTYPE :W_ONLY_INFINITE_RAND",i_target_mba.toEcmdString());break; default : FAPI_INF("%s:Wrong Test_type,so using default test_type",i_target_mba.toEcmdString()); } @@ -2436,7 +2487,7 @@ default : FAPI_INF("%s:Wrong Test_type,so using default test_type",i_target_mba. 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; + //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) @@ -2494,6 +2545,6 @@ fapi::ReturnCode mss_conversion_data(const fapi::Target & i_target_mba, uint8_t 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 0d533adc9..2f743f49b 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 @@ -5,7 +5,7 @@ /* */ /* IBM CONFIDENTIAL */ /* */ -/* COPYRIGHT International Business Machines Corp. 2012,2013 */ +/* COPYRIGHT International Business Machines Corp. 2012,2014 */ /* */ /* p1 */ /* */ @@ -20,7 +20,7 @@ /* Origin: 30 */ /* */ /* IBM_PROLOG_END_TAG */ -// $Id: mss_shmoo_common.H,v 1.17 2013/10/07 08:35:41 sasethur Exp $ +// $Id: mss_shmoo_common.H,v 1.18 2013/12/17 18:46:49 sasethur Exp $ // *!*************************************************************************** // *! (C) Copyright International Business Machines Corp. 1997, 1998 // *! All Rights Reserved -- Property of IBM @@ -52,23 +52,23 @@ enum shmoo_type_t { TEST_NONE=0,MCBIST=1,WR_EYE=2, WRT_DQS=8,RD_EYE=4,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=18; +//const uint8_t MAX_RPS=4;// 4 Rank pairs in this design +const uint8_t MAX_SHMOO=1; const uint8_t MAX_RANK_DIMM=4; const uint8_t MAX_NIBBLES=2; const uint8_t MAX_BITS=4; const uint8_t MAX_DQ=80; const uint8_t MAX_DQS=20; const uint8_t SCHMOO_NIBBLES=20; -const uint16_t read_counter_threshold=1000; -const uint16_t error_threshold_count=400; +//const uint16_t read_counter_threshold=1000; +//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_CMDS = 1; +//const uint8_t MAX_ADDR = 20; +//const uint8_t MAX_CNTRL = 20; +//const uint8_t MAX_CLK = 8; //const uint8_t MAX_NIBBLE = 1; @@ -87,29 +87,16 @@ struct shmoo_knob_data_t{ // config data and results //uint32_t curr_val[MAX_BLOCK][MAX_INSTANCE][MAX_RPS]; bool done; - uint32_t lb_regval[MAX_DQ][MAX_RPS]; // Left Bound register/Hex value - 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]; + uint16_t lb_regval[MAX_DQ]; // Left Bound register/Hex value + uint16_t rb_regval[MAX_DQ];// Right Bound register/Hex value + //uint32_t total_margin[MAX_DQ][MAX_RPS]; //Left bound+ right bound value + uint16_t nom_val[MAX_DQ]; // nominal value of this instance of the knob + uint16_t last_pass[MAX_DQ]; + uint16_t last_fail[MAX_DQ]; + uint16_t curr_val[MAX_DQ]; + // uint32_t curr_diff[MAX_DQ]; + uint16_t right_margin_val[MAX_DQ]; + uint16_t left_margin_val[MAX_DQ]; }; #endif |