From 39cb3971365041306ccbefc54717b588f74a4208 Mon Sep 17 00:00:00 2001 From: Thi Tran Date: Mon, 23 Dec 2013 14:43:51 -0600 Subject: 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 --- .../mss_draminit_trainadv/mss_access_delay_reg.C | 1102 ++++++- .../mss_draminit_trainadv/mss_access_delay_reg.H | 6 +- .../mss_draminit_training_advanced.C | 27 +- .../mss_draminit_trainadv/mss_generic_shmoo.C | 3034 ++++++-------------- .../mss_draminit_trainadv/mss_generic_shmoo.H | 39 +- .../mss_draminit_trainadv/mss_mcbist.C | 40 +- .../mss_draminit_trainadv/mss_mcbist.H | 60 +- .../mss_draminit_trainadv/mss_mcbist_address.C | 300 +- .../mss_draminit_trainadv/mss_mcbist_address.H | 6 +- .../mss_draminit_trainadv/mss_mcbist_common.C | 707 ++--- .../mss_draminit_trainadv/mss_shmoo_common.H | 53 +- 11 files changed, 2571 insertions(+), 2803 deletions(-) (limited to 'src/usr/hwpf/hwp/dram_training') 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;pl_max){ + SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.last_fail[l_dq]=l_max; + }else{ + 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_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_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]); + } + } + + + } + } + } } -return rc; +} + return rc; } /*------------------------------------------------------------------------------ * Function: get_all_noms @@ -968,7 +810,7 @@ fapi::ReturnCode generic_shmoo::get_all_noms(const fapi::Target & i_target) 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; @@ -977,71 +819,12 @@ fapi::ReturnCode generic_shmoo::get_all_noms(const fapi::Target & i_target) FAPI_DBG("mss_generic_shmoo : get_all_noms : Reading in all nominal values"); - if(iv_shmoo_type == 4) - { - l_input_type_e = WR_DQS; - - } - else if(iv_shmoo_type == 8) + if(iv_shmoo_type == 1) { - l_input_type_e = RD_DQ; } - else if(iv_shmoo_type == 3) - { - - l_input_type_e = RD_DQS; - - } - for (l_p=0;l_pl_max){ - SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.last_fail[l_dq][i_rp]=l_max; - }else{ - SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.last_fail[l_dq][i_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.nom_val[l_dq][i_rp]+l_max_offset; - //FAPI_INF("\n the last failure for right %d ",SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.last_fail[l_dq][i_rp]); - } - - }else{ - if(SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.nom_val[l_dq][i_rp]>64){ - SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.last_fail[l_dq][i_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.nom_val[l_dq][i_rp]-l_max_offset; - //FAPI_INF("\n the last failure for left %d ",SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.last_fail[l_dq][i_rp]); - }else{ - SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.last_fail[l_dq][i_rp]=0; - //FAPI_INF("\n the last failure for left %d ",SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.last_fail[l_dq][i_rp]); - } - } - //SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.nom_val[l_dq][i_rp]=val; - - //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); - + 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_data_disable(const fapi::Target & i_target) -{ - fapi::ReturnCode rc; - - uint8_t l_rnk,l_block; - uint8_t i_rnk=0; - uint8_t i_rp=0; - uint32_t val=0; - - uint8_t l_p=0; - - input_type_t l_input_type_e = DATA_DISABLE; - access_type_t l_access_type_e = READ ; - FAPI_DBG("mss_generic_shmoo : get_all_noms : Reading in all nominal values"); - - - - - for (l_p=0;l_pl_max_limit){ + + if(l_p == 0){ + + for(l_i=0;l_il_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_nSHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]){ - SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]-SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]; + 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_nSHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]){ - SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]-SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]; + 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.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]); + 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]; + } }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_p0)&&(l_cmd_delay<127)){ - //l_delay_cac=l_cmd_delay-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd]; - FAPI_INF("\n port=%d command=%d nominal =%d and write_value=%d \n",l_p,l_cmd,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd],l_cmd_delay); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cmd,0,l_cmd_delay);if(rc) return rc; - } - } - for (l_addr=0;l_addr<19;l_addr++) - { - - l_addr_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr]-l_delay; - if((l_addr_delay>0)&&(l_addr_delay<127)){ - l_input_type_e = ADDRESS; - FAPI_INF("\n port=%d address=%d nominal =%d and write_value=%d \n",l_p,l_addr,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr],l_addr_delay); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_addr,0,l_addr_delay);if(rc) return rc; - } - } - for (l_cntrl=0;l_cntrl<20;l_cntrl++) - { - l_cntrl_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl]-l_delay; - if((l_cntrl_delay>0)&&(l_cntrl_delay<127)){ - l_input_type_e = CONTROL; - FAPI_INF("\n port=%d control=%d nominal =%d and write_value=%d \n",l_p,l_cntrl,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl],l_cntrl_delay); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cntrl,0,l_cntrl_delay);if(rc) return rc; - } - } - - for (l_clk=0;l_clk<8;l_clk++) - { - l_clk_delay = (SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk]+127)-l_delay; - l_input_type_e = CLOCK; - - FAPI_INF("\n port=%d clock=%d nominal =%d and write_value=%d \n",l_p,l_clk,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk],l_clk_delay); - rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_clk,0,l_clk_delay);if(rc) return rc; - - } - } - // put here loops for changing the delay values of CACc - - rc=do_mcbist_test(i_target); - if(rc) - { - FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); - return rc; - } - - rc=check_error_map(i_target,l_p,pass); - if(rc) - { - FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); - return rc; - } - - - } - - - - // PUT HERE NOMINAL BACK . - - for (l_p=0;l_pSHMOO[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 = mss_getrankpair(i_target,iv_port,rank,&l_rp,valid_rank);if(rc) return rc; - for (l_p=0;l_pl_max_limit){ - schmoo_error_map[l_p][rank][l_n]=1; - } - - } + + l_dq=l_dq+4; + + } } } - rc=do_mcbist_test(i_target); - if(rc) - { - FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); - return rc; - } - - rc=check_error_map(i_target,l_p,pass); - if(rc) - { - FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); - return rc; - } - - } - - - for (l_p=0;l_pl_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; } @@ -2960,6 +1660,7 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4_isdimm(const fapi::Target & } } + rc=do_mcbist_test(i_target); if(rc) { @@ -2985,13 +1686,12 @@ 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_nl_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; - schmoo_error_map[l_p][rank][l_n+1]=1; - } - if((schmoo_error_map[l_p][rank][l_n]==1)||(schmoo_error_map[l_p][rank][l_n+1]==1)){ - - schmoo_error_map[l_p][rank][l_n]=1; - schmoo_error_map[l_p][rank][l_n+1]=1; } - l_n=l_n+1; - l_dqs=l_dqs+1; } @@ -3321,8 +1987,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_nl_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; } - - if((schmoo_error_map[l_p][rank][l_n]==1)||(schmoo_error_map[l_p][rank][l_n+1]==1)){ + if((schmoo_error_map[l_p][rank][l_n]==1)||(schmoo_error_map[l_p][rank][l_n+1]==1)){ schmoo_error_map[l_p][rank][l_n]=1; schmoo_error_map[l_p][rank][l_n+1]=1; } l_n=l_n+1; - + l_dqs=l_dqs+1; } @@ -3677,8 +2324,8 @@ 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_nSHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_dq][l_rp]){ - SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_dq][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_dq][l_rp]-1; + if(SHMOO[iv_SHMOO_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]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 #include #include -#include + 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 #include #include -#include #include #include 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