summaryrefslogtreecommitdiffstats
path: root/src/usr/hwpf/hwp/dram_training
diff options
context:
space:
mode:
authorThi Tran <thi@us.ibm.com>2013-12-23 14:43:51 -0600
committerA. Patrick Williams III <iawillia@us.ibm.com>2014-01-09 15:22:40 -0600
commit39cb3971365041306ccbefc54717b588f74a4208 (patch)
treef0e4fd2ac58e525eba26b1b78a0107c160053f17 /src/usr/hwpf/hwp/dram_training
parent56278b56e0d258db65ac8bbc59c5819d70c06abc (diff)
downloadtalos-hostboot-39cb3971365041306ccbefc54717b588f74a4208.tar.gz
talos-hostboot-39cb3971365041306ccbefc54717b588f74a4208.zip
INITPROC: Hostboot SW238941 Adv training for Qualification/MFG testing
Change-Id: Ia9765917f7534b3da45d1a7a7ee0b1d50ae1e438 CQ:SW238941 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/7854 Tested-by: Jenkins Server Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/hwpf/hwp/dram_training')
-rw-r--r--src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_access_delay_reg.C1100
-rw-r--r--src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_access_delay_reg.H6
-rw-r--r--src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_draminit_training_advanced.C27
-rw-r--r--src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_generic_shmoo.C2920
-rw-r--r--src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_generic_shmoo.H39
-rwxr-xr-xsrc/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist.C40
-rwxr-xr-xsrc/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist.H60
-rw-r--r--src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_address.C300
-rw-r--r--src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_address.H6
-rw-r--r--src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_common.C707
-rw-r--r--src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_shmoo_common.H53
11 files changed, 2513 insertions, 2745 deletions
diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_access_delay_reg.C b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_access_delay_reg.C
index 01b24dcee..0029662f7 100644
--- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_access_delay_reg.C
+++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_access_delay_reg.C
@@ -5,7 +5,7 @@
/* */
/* IBM CONFIDENTIAL */
/* */
-/* COPYRIGHT International Business Machines Corp. 2012,2013 */
+/* COPYRIGHT International Business Machines Corp. 2012,2014 */
/* */
/* p1 */
/* */
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: mss_access_delay_reg.C,v 1.20 2013/10/22 06:17:40 sasethur Exp $
+// $Id: mss_access_delay_reg.C,v 1.21 2013/12/16 10:15:21 sasethur Exp $
//------------------------------------------------------------------------------
// *! (C) Copyright International Business Machines Corp. 2011
// *! All Rights Reserved -- Property of IBM
@@ -54,7 +54,7 @@
// 1.16 | sauchadh |12-jun-13| ADDED CAC registers for read dqs
// 1.17 | sauchadh |18-Jul-13| Added data bit disable registers
// 1.19 | abhijsau |9-Oct-13 | Added mss_c4_phy() function
-
+// 1.21 | abhijsau |16-Dec-13| Added function for fw
//----------------------------------------------------------------------
// My Includes
@@ -3269,7 +3269,1101 @@ fapi::ReturnCode mss_c4_phy(const fapi::Target & i_target_mba,uint8_t i_port, ui
return rc;
}
+fapi::ReturnCode mss_access_delay_reg_schmoo(const fapi::Target & i_target_mba, access_type_t i_access_type_e, uint8_t i_port_u8, uint8_t i_rank_u8, input_type_t i_input_type_e, uint8_t i_input_index_u8,uint8_t i_verbose,uint16_t &io_value_u16)
+{
+ fapi::ReturnCode rc;
+
+ const uint8_t max_rp=8;
+ uint8_t l_val=0;
+ uint8_t l_dram_width=0;
+ scom_location l_out;
+ uint64_t l_scom_add=0x0ull;
+ uint32_t l_sbit=0;
+ uint32_t l_len=0;
+ uint32_t l_value_u32=0;
+ uint32_t rc_num=0;
+ ecmdDataBufferBase data_buffer_64(64);
+ ecmdDataBufferBase data_buffer_32(32);
+ ecmdDataBufferBase out(16);
+ uint32_t l_output=0;
+ uint32_t l_start=0;
+ uint8_t l_rank_pair=9;
+ uint8_t l_rankpair_table[max_rp]={255};
+ uint8_t l_dimmtype=0;
+ uint8_t l_block=0;
+ uint8_t l_lane=0;
+ uint8_t l_start_bit=0;
+ uint8_t l_len8=0;
+ input_type l_type;
+ uint8_t l_mbapos=0;
+ const uint8_t l_ISDIMM_dqmax=71;
+ const uint8_t l_CDIMM_dqmax=79;
+ uint8_t l_adr=0;
+ const uint8_t addr_max=19;
+ const uint8_t cmd_max=3;
+ const uint8_t cnt_max=20;
+ const uint8_t clk_max=8;
+ const uint8_t addr_lanep0[addr_max]={1,5,3,7,10,6,4,10,13,12,9,9,0,0,6,4,1,4,8};
+ const uint8_t addr_adrp0[addr_max]={2,1,1,3,1,3,1,3,3,3,2,3,2,3,1,0,3,3,3};
+ const uint8_t addr_lanep1[addr_max]={7,10,3,6,8,12,6,1,5,8,2,0,13,4,5,9,6,11,9};
+ const uint8_t addr_adrp1[addr_max]={2,1,2,2,1,3,1,1,1,3,1,3,2,3,3,0,0,1,3};
+ const uint8_t addr_lanep2[addr_max]={8,0,7,1,12,10,1,5,9,5,13,5,4,2,4,9,10,9,0};
+ const uint8_t addr_adrp2[addr_max]={2,2,3,0,3,1,2,0,1,3,2,1,0,2,3,3,3,2,1};
+ const uint8_t addr_lanep3[addr_max]={6,2,9,9,2,3,4,10,0,5,1,5,4,1,8,11,5,12,1};
+ const uint8_t addr_adrp3[addr_max]={3,0,2,3,2,0,3,3,1,2,2,1,0,1,3,3,0,3,0};
+
+ const uint8_t cmd_lanep0[cmd_max]={2,11,5};
+ const uint8_t cmd_adrp0[cmd_max]={3,1,3};
+ const uint8_t cmd_lanep1[cmd_max]={2,10,10};
+ const uint8_t cmd_adrp1[cmd_max]={2,3,2};
+ const uint8_t cmd_lanep2[cmd_max]={3,11,3};
+ const uint8_t cmd_adrp2[cmd_max]={1,3,0};
+ const uint8_t cmd_lanep3[cmd_max]={7,10,7};
+ const uint8_t cmd_adrp3[cmd_max]={1,1,3};
+
+ const uint8_t cnt_lanep0[cnt_max]={0,7,3,1,7,8,8,3,8,6,7,2,2,0,9,1,3,6,9,2};
+ const uint8_t cnt_adrp0[cnt_max]={1,0,3,0,2,2,1,2,0,0,1,2,0,0,1,1,0,2,0,1};
+ const uint8_t cnt_lanep1[cnt_max]={5,4,0,5,11,9,10,7,1,11,0,4,12,3,6,8,1,4,7,7};
+ const uint8_t cnt_adrp1[cnt_max]={2,1,2,0,2,1,0,1,3,0,1,0,2,1,3,0,2,2,3,0};
+ const uint8_t cnt_lanep2[cnt_max]={0,4,7,13,11,5,12,2,3,6,11,6,7,1,10,8,8,2,4,1};
+ const uint8_t cnt_adrp2[cnt_max]={0,1,1,3,1,2,2,0,2,2,0,1,2,1,0,3,1,1,2,3};
+ const uint8_t cnt_lanep3[cnt_max]={0,11,9,8,4,7,0,3,8,6,13,8,7,0,6,6,1,2,9,5};
+ const uint8_t cnt_adrp3[cnt_max]={2,1,0,2,1,0,3,2,0,1,3,1,2,0,0,2,3,1,1,3};
+
+ const uint8_t clk_lanep0[clk_max]={10,11,11,10,4,5,13,12};
+ const uint8_t clk_adrp0[clk_max]={0,0,2,2,2,2,2,2};
+ const uint8_t clk_lanep1[clk_max]={3,2,8,9,1,0,3,2};
+ const uint8_t clk_adrp1[clk_max]={3,3,2,2,0,0,0,0};
+ const uint8_t clk_lanep2[clk_max]={11,10,6,7,2,3,8,9};
+ const uint8_t clk_adrp2[clk_max]={2,2,0,0,3,3,0,0};
+ const uint8_t clk_lanep3[clk_max]={3,2,13,12,10,11,11,10};
+ const uint8_t clk_adrp3[clk_max]={3,3,2,2,0,0,2,2};
+
+
+ rc = mss_getrankpair(i_target_mba,i_port_u8,i_rank_u8,&l_rank_pair,l_rankpair_table); if(rc) return rc;
+
+ rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_TYPE, &i_target_mba, l_dimmtype); if(rc) return rc;
+
+ rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_WIDTH, &i_target_mba, l_dram_width); if(rc) return rc;
+ rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, &i_target_mba, l_mbapos); if(rc) return rc;
+
+ if(i_verbose==1)
+ {
+ FAPI_INF("dimm type=%d",l_dimmtype);
+ FAPI_INF("rank pair=%d",l_rank_pair);
+ }
+ if((i_port_u8 >1) || (l_mbapos>1))
+ {
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR);
+ FAPI_ERR("Wrong target or port specified rc = 0x%08X", uint32_t(rc));
+ return rc;
+ }
+
+ if((l_dram_width ==fapi::ENUM_ATTR_EFF_DRAM_WIDTH_X4) || (l_dram_width ==fapi::ENUM_ATTR_EFF_DRAM_WIDTH_X8)) // Checking for dram width here so that checking can be skipped in called function
+ {
+ if(i_verbose==1)
+ {
+ FAPI_INF("dram width=%d",l_dram_width);
+ }
+ }
+
+ else
+ {
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR);
+ FAPI_ERR("Wrong dram width specified rc = 0x%08X", uint32_t(rc));
+ return rc;
+ }
+
+ if(i_input_type_e==RD_DQ || i_input_type_e==WR_DQ)
+ {
+
+ if(l_dimmtype==fapi::ENUM_ATTR_EFF_DIMM_TYPE_CDIMM)
+ {
+ l_type=CDIMM_DQ;
+
+ if(i_input_index_u8>l_CDIMM_dqmax)
+ {
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR);
+ FAPI_ERR("Wrong input index specified rc = 0x%08X" ,uint32_t(rc));
+ return rc;
+ }
+
+ }
+ else if((l_dimmtype==fapi::ENUM_ATTR_EFF_DIMM_TYPE_RDIMM) || (l_dimmtype==fapi::ENUM_ATTR_EFF_DIMM_TYPE_UDIMM) || (l_dimmtype==fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM))
+ {
+ l_type=ISDIMM_DQ;
+ if(i_input_index_u8>l_ISDIMM_dqmax)
+ {
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR);
+ FAPI_ERR("Wrong input index specified rc = 0x%08X", uint32_t(rc));
+ return rc;
+ }
+ }
+ else
+ {
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR);
+ FAPI_ERR("Wrong dimm type specified rc = 0x%08X", uint32_t(rc));
+ return rc;
+ }
+
+
+ rc=rosetta_map(i_target_mba,i_port_u8,l_type,i_input_index_u8,i_verbose,l_val); if(rc) return rc;
+
+ if(i_verbose==1)
+ {
+ FAPI_INF("C4 value is=%d",l_val);
+ }
+ rc=cross_coupled(i_target_mba,i_port_u8,l_rank_pair,i_input_type_e,l_val,i_verbose,l_out); if(rc) return rc;
+ if(i_verbose==1)
+ {
+ FAPI_INF("scom_address=%llX",l_out.scom_addr);
+ FAPI_INF("start bit=%d",l_out.start_bit);
+ FAPI_INF("length=%d",l_out.bit_length);
+ }
+ l_scom_add=l_out.scom_addr;
+ l_sbit=l_out.start_bit;
+ l_len=l_out.bit_length;
+
+ }
+
+ else if(i_input_type_e==ADDRESS)
+ {
+ if(i_input_index_u8<=18) // 19 delay values for Address
+ {
+ if((i_port_u8==0) && (l_mbapos==0))
+ {
+ l_lane=addr_lanep0[i_input_index_u8];
+ l_adr=addr_adrp0[i_input_index_u8];
+ }
+ else if((i_port_u8==1) && (l_mbapos==0))
+ {
+ l_lane=addr_lanep1[i_input_index_u8];
+ l_adr=addr_adrp1[i_input_index_u8];
+ }
+ else if((i_port_u8==0) && (l_mbapos==1))
+ {
+ l_lane=addr_lanep2[i_input_index_u8];
+ l_adr=addr_adrp2[i_input_index_u8];
+ }
+ else
+ {
+ l_lane=addr_lanep3[i_input_index_u8];
+ l_adr=addr_adrp3[i_input_index_u8];
+ }
+
+ }
+
+ else
+ {
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR);
+ FAPI_ERR("Wrong input index specified rc = 0x%08X ", uint32_t(rc));
+ return rc;
+ }
+
+ ip_type_t l_input=ADDRESS_t;
+ if(i_verbose==1)
+ {
+ FAPI_INF("ADR=%d",l_adr);
+ FAPI_INF("lane=%d",l_lane);
+ }
+ l_block=l_adr;
+ rc=get_address(i_target_mba,i_port_u8,l_rank_pair,l_input,l_block,l_lane,l_scom_add,l_start_bit,l_len8); if(rc) return rc;
+ l_sbit=l_start_bit;
+ l_len=l_len8;
+ if(i_verbose==1)
+ {
+ FAPI_INF("scom_address=%llX",l_scom_add);
+ FAPI_INF("start bit=%d",l_start_bit);
+ FAPI_INF("length=%d",l_len8);
+ }
+ }
+
+ else if(i_input_type_e==DATA_DISABLE)
+ {
+ if(i_input_index_u8<=4) // 5 delay values for data bits disable register
+ {
+ l_block=i_input_index_u8;
+ }
+ else
+ {
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR);
+ FAPI_ERR("Wrong input index specified rc = 0x%08X ", uint32_t(rc));
+ return rc;
+ }
+
+ ip_type_t l_input=DATA_DISABLE_t;
+ if(i_verbose==1)
+ {
+ FAPI_INF("block=%d",l_block);
+ }
+ l_lane=0;
+ rc=get_address(i_target_mba,i_port_u8,l_rank_pair,l_input,l_block,l_lane,l_scom_add,l_start_bit,l_len8); if(rc) return rc;
+ l_sbit=l_start_bit;
+ l_len=l_len8;
+ if(i_verbose==1)
+ {
+ FAPI_INF("scom_address=%llX",l_scom_add);
+ FAPI_INF("start bit=%d",l_start_bit);
+ FAPI_INF("length=%d",l_len8);
+ }
+ }
+
+
+ else if(i_input_type_e==COMMAND)
+ {
+ if(i_input_index_u8<=2) // 3 delay values for Command
+ {
+ if((i_port_u8==0) && (l_mbapos==0))
+ {
+ l_lane=cmd_lanep0[i_input_index_u8];
+ l_adr=cmd_adrp0[i_input_index_u8];
+ }
+ else if((i_port_u8==1) && (l_mbapos==0))
+ {
+ l_lane=cmd_lanep1[i_input_index_u8];
+ l_adr=cmd_adrp1[i_input_index_u8];
+ }
+ else if((i_port_u8==0) && (l_mbapos==1))
+ {
+ l_lane=cmd_lanep2[i_input_index_u8];
+ l_adr=cmd_adrp2[i_input_index_u8];
+ }
+ else
+ {
+ l_lane=cmd_lanep3[i_input_index_u8];
+ l_adr=cmd_adrp3[i_input_index_u8];
+ }
+
+ }
+
+ else
+ {
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR);
+ FAPI_ERR("Wrong input index specified rc = 0x%08X ", uint32_t(rc));
+ return rc;
+ }
+
+ ip_type_t l_input=COMMAND_t;
+ if(i_verbose==1)
+ {
+ FAPI_INF("ADR=%d",l_adr);
+ FAPI_INF("lane=%d",l_lane);
+ }
+ l_block=l_adr;
+ rc=get_address(i_target_mba,i_port_u8,l_rank_pair,l_input,l_block,l_lane,l_scom_add,l_start_bit,l_len8); if(rc) return rc;
+ l_sbit=l_start_bit;
+ l_len=l_len8;
+ if(i_verbose==1)
+ {
+ FAPI_INF("scom_address=%llX",l_scom_add);
+ FAPI_INF("start bit=%d",l_start_bit);
+ FAPI_INF("length=%d",l_len8);
+ }
+ }
+
+ else if(i_input_type_e==CONTROL)
+ {
+ if(i_input_index_u8<=19) // 20 delay values for Control
+ {
+ if((i_port_u8==0) && (l_mbapos==0))
+ {
+ l_lane=cnt_lanep0[i_input_index_u8];
+ l_adr=cnt_adrp0[i_input_index_u8];
+ }
+ else if((i_port_u8==1) && (l_mbapos==0))
+ {
+ l_lane=cnt_lanep1[i_input_index_u8];
+ l_adr=cnt_adrp1[i_input_index_u8];
+ }
+ else if((i_port_u8==0) && (l_mbapos==1))
+ {
+ l_lane=cnt_lanep2[i_input_index_u8];
+ l_adr=cnt_adrp2[i_input_index_u8];
+ }
+ else
+ {
+ l_lane=cnt_lanep3[i_input_index_u8];
+ l_adr=cnt_adrp3[i_input_index_u8];
+ }
+
+ }
+
+ else
+ {
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR);
+ FAPI_ERR("Wrong input index specified rc = 0x%08X ", uint32_t(rc));
+ return rc;
+ }
+
+ ip_type_t l_input=CONTROL_t;
+ if(i_verbose==1)
+ {
+ FAPI_INF("ADR=%d",l_adr);
+ FAPI_INF("lane=%d",l_lane);
+ }
+ l_block=l_adr;
+ rc=get_address(i_target_mba,i_port_u8,l_rank_pair,l_input,l_block,l_lane,l_scom_add,l_start_bit,l_len8); if(rc) return rc;
+ l_sbit=l_start_bit;
+ l_len=l_len8;
+ if(i_verbose==1)
+ {
+ FAPI_INF("scom_address=%llX",l_scom_add);
+ FAPI_INF("start bit=%d",l_start_bit);
+ FAPI_INF("length=%d",l_len8);
+ }
+ }
+
+ else if(i_input_type_e==CLOCK)
+ {
+ if(i_input_index_u8<=7) // 8 delay values for CLK
+ {
+ if((i_port_u8==0) && (l_mbapos==0))
+ {
+ l_lane=clk_lanep0[i_input_index_u8];
+ l_adr=clk_adrp0[i_input_index_u8];
+ }
+ else if((i_port_u8==1) && (l_mbapos==0))
+ {
+ l_lane=clk_lanep1[i_input_index_u8];
+ l_adr=clk_adrp1[i_input_index_u8];
+ }
+ else if((i_port_u8==0) && (l_mbapos==1))
+ {
+ l_lane=clk_lanep2[i_input_index_u8];
+ l_adr=clk_adrp2[i_input_index_u8];
+ }
+ else
+ {
+ l_lane=clk_lanep3[i_input_index_u8];
+ l_adr=clk_adrp3[i_input_index_u8];
+ }
+
+ }
+
+ else
+ {
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR);
+ FAPI_ERR("Wrong input index specified rc = 0x%08X ", uint32_t(rc));
+ return rc;
+ }
+
+ ip_type_t l_input=CLOCK_t;
+ if(i_verbose==1)
+ {
+ FAPI_INF("ADR=%d",l_adr);
+ FAPI_INF("lane=%d",l_lane);
+ }
+ l_block=l_adr;
+ rc=get_address(i_target_mba,i_port_u8,l_rank_pair,l_input,l_block,l_lane,l_scom_add,l_start_bit,l_len8); if(rc) return rc;
+ l_sbit=l_start_bit;
+ l_len=l_len8;
+ if(i_verbose==1)
+ {
+ FAPI_INF("scom_address=%llX",l_scom_add);
+ FAPI_INF("start bit=%d",l_start_bit);
+ FAPI_INF("length=%d",l_len8);
+ }
+ }
+
+
+ else if (i_input_type_e==RD_DQS || i_input_type_e==WR_DQS || i_input_type_e==DQS_ALIGN || i_input_type_e==DQS_GATE || i_input_type_e==RDCLK || i_input_type_e==DQSCLK)
+ {
+
+ if(l_dimmtype==fapi::ENUM_ATTR_EFF_DIMM_TYPE_CDIMM)
+ {
+ l_type=CDIMM_DQS;
+ }
+ else if((l_dimmtype==fapi::ENUM_ATTR_EFF_DIMM_TYPE_RDIMM) || (l_dimmtype==fapi::ENUM_ATTR_EFF_DIMM_TYPE_UDIMM) || (l_dimmtype==fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM))
+ {
+ l_type=ISDIMM_DQS;
+ }
+ else
+ {
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR);
+ FAPI_ERR("Wrong dimm type specified rc = 0x%08X", uint32_t(rc));
+ return rc;
+ }
+
+
+ rc=rosetta_map(i_target_mba,i_port_u8,l_type,i_input_index_u8,i_verbose,l_val); if(rc) return rc;
+ if(i_verbose==1)
+ {
+ FAPI_INF("C4 value is=%d",l_val);
+ }
+ rc=cross_coupled(i_target_mba,i_port_u8,l_rank_pair,i_input_type_e,l_val,i_verbose,l_out); if(rc) return rc;
+ if(i_verbose==1)
+ {
+ FAPI_INF("scom_address=%llX",l_out.scom_addr);
+ FAPI_INF("start bit=%d",l_out.start_bit);
+ FAPI_INF("length=%d",l_out.bit_length);
+ }
+ l_scom_add=l_out.scom_addr;
+ l_sbit=l_out.start_bit;
+ l_len=l_out.bit_length;
+
+ }
+
+
+ else if(i_input_type_e==RAW_RDCLK_0 || i_input_type_e==RAW_RDCLK_1 || i_input_type_e==RAW_RDCLK_2 || i_input_type_e==RAW_RDCLK_3 || i_input_type_e==RAW_RDCLK_4)
+ {
+ if(i_input_type_e==RAW_RDCLK_0)
+ {
+ l_block=0;
+ }
+
+ else if(i_input_type_e==RAW_RDCLK_1)
+ {
+ l_block=1;
+ }
+
+ else if(i_input_type_e==RAW_RDCLK_2)
+ {
+ l_block=2;
+ }
+
+ else if(i_input_type_e==RAW_RDCLK_3)
+ {
+ l_block=3;
+ }
+
+ else
+ {
+ l_block=4;
+ }
+ if(i_input_index_u8<=3) // 4 delay values for RDCLK
+ {
+ l_lane=i_input_index_u8;
+ }
+
+ else
+ {
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR);
+ FAPI_ERR("Wrong input index specified rc = 0x%08X ", uint32_t(rc));
+ return rc;
+ }
+
+ ip_type_t l_input=RAW_RDCLK;
+ if(i_verbose==1)
+ {
+ FAPI_INF("block=%d",l_block);
+ }
+ rc=get_address(i_target_mba,i_port_u8,l_rank_pair,l_input,l_block,l_lane,l_scom_add,l_start_bit,l_len8); if(rc) return rc;
+ l_sbit=l_start_bit;
+ l_len=l_len8;
+ if(i_verbose==1)
+ {
+ FAPI_INF("scom_address=%llX",l_scom_add);
+ FAPI_INF("start bit=%d",l_start_bit);
+ FAPI_INF("length=%d",l_len8);
+ }
+ }
+
+ else if(i_input_type_e==RAW_DQSCLK_0 || i_input_type_e==RAW_DQSCLK_1 || i_input_type_e==RAW_DQSCLK_2 || i_input_type_e==RAW_DQSCLK_3 || i_input_type_e==RAW_DQSCLK_4)
+ {
+ if(i_input_type_e==RAW_DQSCLK_0)
+ {
+ l_block=0;
+ }
+
+ else if(i_input_type_e==RAW_DQSCLK_1)
+ {
+ l_block=1;
+ }
+
+ else if(i_input_type_e==RAW_DQSCLK_2)
+ {
+ l_block=2;
+ }
+
+ else if(i_input_type_e==RAW_DQSCLK_3)
+ {
+ l_block=3;
+ }
+
+ else
+ {
+ l_block=4;
+ }
+ if(i_input_index_u8<=3) // 4 delay values for DQSCLK
+ {
+ l_lane=i_input_index_u8;
+ }
+
+ else
+ {
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR);
+ FAPI_ERR("Wrong input index specified rc = 0x%08X ", uint32_t(rc));
+ return rc;
+ }
+ ip_type_t l_input=RAW_DQSCLK;
+ if(i_verbose==1)
+ {
+ FAPI_INF("block=%d",l_block);
+ }
+ rc=get_address(i_target_mba,i_port_u8,l_rank_pair,l_input,l_block,l_lane,l_scom_add,l_start_bit,l_len8); if(rc) return rc;
+ l_sbit=l_start_bit;
+ l_len=l_len8;
+ if(i_verbose==1)
+ {
+ FAPI_INF("scom_address=%llX",l_scom_add);
+ FAPI_INF("start bit=%d",l_start_bit);
+ FAPI_INF("length=%d",l_len8);
+ }
+ }
+
+
+ else if(i_input_type_e==RAW_WR_DQ_0 || i_input_type_e==RAW_WR_DQ_1 || i_input_type_e==RAW_WR_DQ_2 || i_input_type_e==RAW_WR_DQ_3 || i_input_type_e==RAW_WR_DQ_4)
+ {
+ if(i_input_type_e==RAW_WR_DQ_0)
+ {
+ l_block=0;
+ }
+ else if(i_input_type_e==RAW_WR_DQ_1)
+ {
+ l_block=1;
+ }
+ else if(i_input_type_e==RAW_WR_DQ_2)
+ {
+ l_block=2;
+ }
+ else if(i_input_type_e==RAW_WR_DQ_3)
+ {
+ l_block=3;
+ }
+ else
+ {
+ l_block=4;
+ }
+ if(i_input_index_u8<=15) // 16 Write delay values for DQ bits
+ {
+ l_lane=i_input_index_u8;
+ }
+
+ else
+ {
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR);
+ FAPI_ERR("Wrong input index specified rc = 0x%08X ", uint32_t(rc));
+ return rc;
+ }
+
+ ip_type_t l_input=RAW_WR_DQ;
+ if(i_verbose==1)
+ {
+ FAPI_INF("block=%d",l_block);
+ FAPI_INF("lane=%d",l_lane);
+ }
+ rc=get_address(i_target_mba,i_port_u8,l_rank_pair,l_input,l_block,l_lane,l_scom_add,l_start_bit,l_len8); if(rc) return rc;
+ l_sbit=l_start_bit;
+ l_len=l_len8;
+ if(i_verbose==1)
+ {
+ FAPI_INF("scom_address=%llX",l_scom_add);
+ FAPI_INF("start bit=%d",l_start_bit);
+ FAPI_INF("length=%d",l_len8);
+ }
+ }
+
+ else if(i_input_type_e==RAW_RD_DQ_0 || i_input_type_e==RAW_RD_DQ_1 || i_input_type_e==RAW_RD_DQ_2 || i_input_type_e==RAW_RD_DQ_3 || i_input_type_e==RAW_RD_DQ_4)
+ {
+ if(i_input_type_e==RAW_RD_DQ_0)
+ {
+ l_block=0;
+ }
+ else if(i_input_type_e==RAW_RD_DQ_1)
+ {
+ l_block=1;
+ }
+ else if(i_input_type_e==RAW_RD_DQ_2)
+ {
+ l_block=2;
+ }
+ else if(i_input_type_e==RAW_RD_DQ_3)
+ {
+ l_block=3;
+ }
+ else
+ {
+ l_block=4;
+ }
+ if(i_input_index_u8<=15) // 16 read delay values for DQ bits
+ {
+ l_lane=i_input_index_u8;
+ }
+ else
+ {
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR);
+ FAPI_ERR("Wrong input index specified rc = 0x%08X ", uint32_t(rc));
+ return rc;
+ }
+ ip_type_t l_input=RAW_RD_DQ;
+ if(i_verbose==1)
+ {
+ FAPI_INF("block=%d",l_block);
+ FAPI_INF("lane=%d",l_lane);
+ }
+ rc=get_address(i_target_mba,i_port_u8,l_rank_pair,l_input,l_block,l_lane,l_scom_add,l_start_bit,l_len8); if(rc) return rc;
+ l_sbit=l_start_bit;
+ l_len=l_len8;
+ if(i_verbose==1)
+ {
+ FAPI_INF("scom_address=%llX",l_scom_add);
+ FAPI_INF("start bit=%d",l_start_bit);
+ FAPI_INF("length=%d",l_len8);
+ }
+ }
+
+ else if(i_input_type_e==RAW_RD_DQS_0 || i_input_type_e==RAW_RD_DQS_1 || i_input_type_e==RAW_RD_DQS_2 || i_input_type_e==RAW_RD_DQS_3 || i_input_type_e==RAW_RD_DQS_4)
+ {
+ if(i_input_type_e==RAW_RD_DQS_0)
+ {
+ l_block=0;
+ }
+ else if(i_input_type_e==RAW_RD_DQS_1)
+ {
+ l_block=1;
+ }
+ else if(i_input_type_e==RAW_RD_DQS_2)
+ {
+ l_block=2;
+ }
+ else if(i_input_type_e==RAW_RD_DQS_3)
+ {
+ l_block=3;
+ }
+ else
+ {
+ l_block=4;
+ }
+ if(i_input_index_u8<=3) // 4 Read DQS delay values
+ {
+ l_lane=i_input_index_u8;
+ }
+ else
+ {
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR);
+ FAPI_ERR("Wrong input index specified rc = 0x%08X ", uint32_t(rc));
+ return rc;
+ }
+
+ ip_type_t l_input=RAW_RD_DQS;
+ if(i_verbose==1)
+ {
+ FAPI_INF("block=%d",l_block);
+ FAPI_INF("lane=%d",l_lane);
+ }
+ rc=get_address(i_target_mba,i_port_u8,l_rank_pair,l_input,l_block,l_lane,l_scom_add,l_start_bit,l_len8); if(rc) return rc;
+ l_sbit=l_start_bit;
+ l_len=l_len8;
+ if(i_verbose==1)
+ {
+ FAPI_INF("scom_address=%llX",l_scom_add);
+ FAPI_INF("start bit=%d",l_start_bit);
+ FAPI_INF("length=%d",l_len8);
+ }
+ }
+
+ else if(i_input_type_e==RAW_DQS_ALIGN_0 || i_input_type_e==RAW_DQS_ALIGN_1 || i_input_type_e==RAW_DQS_ALIGN_2 || i_input_type_e==RAW_DQS_ALIGN_3 || i_input_type_e==RAW_DQS_ALIGN_4)
+ {
+ if(i_input_type_e==RAW_DQS_ALIGN_0)
+ {
+ l_block=0;
+ }
+ else if(i_input_type_e==RAW_DQS_ALIGN_1)
+ {
+ l_block=1;
+ }
+ else if(i_input_type_e==RAW_DQS_ALIGN_2)
+ {
+ l_block=2;
+ }
+ else if(i_input_type_e==RAW_DQS_ALIGN_3)
+ {
+ l_block=3;
+ }
+ else
+ {
+ l_block=4;
+ }
+ if(i_input_index_u8<=3) // 4 DQS alignment delay values
+ {
+ l_lane=i_input_index_u8;
+ }
+ else
+ {
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR);
+ FAPI_ERR("Wrong input index specified rc = 0x%08X ", uint32_t(rc));
+ return rc;
+ }
+ ip_type_t l_input=RAW_DQS_ALIGN;
+ if(i_verbose==1)
+ {
+ FAPI_INF("block=%d",l_block);
+ FAPI_INF("lane=%d",l_lane);
+ }
+ rc=get_address(i_target_mba,i_port_u8,l_rank_pair,l_input,l_block,l_lane,l_scom_add,l_start_bit,l_len8); if(rc) return rc;
+ l_sbit=l_start_bit;
+ l_len=l_len8;
+ if(i_verbose==1)
+ {
+ FAPI_INF("scom_address=%llX",l_scom_add);
+ FAPI_INF("start bit=%d",l_start_bit);
+ FAPI_INF("length=%d",l_len8);
+ }
+ }
+
+
+ else if(i_input_type_e==RAW_WR_DQS_0 || i_input_type_e==RAW_WR_DQS_1 || i_input_type_e==RAW_WR_DQS_2 || i_input_type_e==RAW_WR_DQS_3 || i_input_type_e==RAW_WR_DQS_4)
+ {
+ if(i_input_type_e==RAW_WR_DQS_0)
+ {
+ l_block=0;
+ }
+ else if(i_input_type_e==RAW_WR_DQS_1)
+ {
+ l_block=1;
+ }
+ else if(i_input_type_e==RAW_WR_DQS_2)
+ {
+ l_block=2;
+ }
+ else if(i_input_type_e==RAW_WR_DQS_3)
+ {
+ l_block=3;
+ }
+ else
+ {
+ l_block=4;
+ }
+ if(i_input_index_u8<=3) // 4 Write DQS delay values
+ {
+ l_lane=i_input_index_u8;
+ }
+ else
+ {
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR);
+ FAPI_ERR("Wrong input index specified rc = 0x%08X ", uint32_t(rc));
+ return rc;
+ }
+ ip_type_t l_input=RAW_WR_DQS;
+ if(i_verbose==1)
+ {
+ FAPI_INF("block=%d",l_block);
+ FAPI_INF("lane=%d",l_lane);
+ }
+ rc=get_address(i_target_mba,i_port_u8,l_rank_pair,l_input,l_block,l_lane,l_scom_add,l_start_bit,l_len8); if(rc) return rc;
+ l_sbit=l_start_bit;
+ l_len=l_len8;
+ if(i_verbose==1)
+ {
+ FAPI_INF("scom_address=%llX",l_scom_add);
+ FAPI_INF("start bit=%d",l_start_bit);
+ FAPI_INF("length=%d",l_len8);
+ }
+ }
+ else if(i_input_type_e==RAW_SYS_CLK_0 || i_input_type_e==RAW_SYS_CLK_1 || i_input_type_e==RAW_SYS_CLK_2 || i_input_type_e==RAW_SYS_CLK_3 || i_input_type_e==RAW_SYS_CLK_4)
+ {
+ if(i_input_type_e==RAW_SYS_CLK_0)
+ {
+ l_block=0;
+ }
+ else if(i_input_type_e==RAW_SYS_CLK_1)
+ {
+ l_block=1;
+ }
+ else if(i_input_type_e==RAW_SYS_CLK_2)
+ {
+ l_block=2;
+ }
+ else if(i_input_type_e==RAW_SYS_CLK_3)
+ {
+ l_block=3;
+ }
+ else
+ {
+ l_block=4;
+ }
+ if(i_input_index_u8==0) // 1 system clock delay value
+ {
+ l_lane=i_input_index_u8;
+ }
+ else
+ {
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR);
+ FAPI_ERR("Wrong input index specified rc = 0x%08X ", uint32_t(rc));
+ return rc;
+ }
+ ip_type_t l_input=RAW_SYS_CLK;
+ if(i_verbose==1)
+ {
+ FAPI_INF("block=%d",l_block);
+ FAPI_INF("lane=%d",l_lane);
+ }
+ rc=get_address(i_target_mba,i_port_u8,l_rank_pair,l_input,l_block,l_lane,l_scom_add,l_start_bit,l_len8); if(rc) return rc;
+ l_sbit=l_start_bit;
+ l_len=l_len8;
+ if(i_verbose==1)
+ {
+ FAPI_INF("scom_address=%llX",l_scom_add);
+ FAPI_INF("start bit=%d",l_start_bit);
+ FAPI_INF("length=%d",l_len8);
+ }
+ }
+
+ else if(i_input_type_e==RAW_SYS_ADDR_CLK)
+ {
+ if(i_input_index_u8<=1) // 1 system address clock delay value
+ {
+ l_lane=i_input_index_u8;
+ }
+ else
+ {
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR);
+ FAPI_ERR("Wrong input index specified rc = 0x%08X ", uint32_t(rc));
+ return rc;
+ }
+ ip_type_t l_input=RAW_SYS_ADDR_CLKS0S1;
+ if(i_verbose==1)
+ {
+ FAPI_INF("lane=%d",l_lane);
+ }
+ rc=get_address(i_target_mba,i_port_u8,l_rank_pair,l_input,l_block,l_lane,l_scom_add,l_start_bit,l_len8); if(rc) return rc;
+ l_sbit=l_start_bit;
+ l_len=l_len8;
+ if(i_verbose==1)
+ {
+ FAPI_INF("scom_address=%llX",l_scom_add);
+ FAPI_INF("start bit=%d",l_start_bit);
+ FAPI_INF("length=%d",l_len8);
+ }
+ }
+
+
+ else if(i_input_type_e==RAW_WR_CLK_0 || i_input_type_e==RAW_WR_CLK_1 || i_input_type_e==RAW_WR_CLK_2 || i_input_type_e==RAW_WR_CLK_3 || i_input_type_e==RAW_WR_CLK_4)
+ {
+ if(i_input_type_e==RAW_WR_CLK_0)
+ {
+ l_block=0;
+ }
+ else if(i_input_type_e==RAW_WR_CLK_1)
+ {
+ l_block=1;
+ }
+ else if(i_input_type_e==RAW_WR_CLK_2)
+ {
+ l_block=2;
+ }
+ else if(i_input_type_e==RAW_WR_CLK_3)
+ {
+ l_block=3;
+ }
+ else
+ {
+ l_block=4;
+ }
+ if(i_input_index_u8==0) // 1 Write clock delay value
+ {
+ l_lane=i_input_index_u8;
+ }
+ else
+ {
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR);
+ FAPI_ERR("Wrong input index specified rc = 0x%08X ", uint32_t(rc));
+ return rc;
+ }
+ ip_type_t l_input=RAW_WR_CLK;
+ if(i_verbose==1)
+ {
+ FAPI_INF("block=%d",l_block);
+ FAPI_INF("lane=%d",l_lane);
+ }
+ rc=get_address(i_target_mba,i_port_u8,l_rank_pair,l_input,l_block,l_lane,l_scom_add,l_start_bit,l_len8); if(rc) return rc;
+ l_sbit=l_start_bit;
+ l_len=l_len8;
+ if(i_verbose==1)
+ {
+ FAPI_INF("scom_address=%llX",l_scom_add);
+ FAPI_INF("start bit=%d",l_start_bit);
+ FAPI_INF("length=%d",l_len8);
+ }
+ }
+
+ else if(i_input_type_e==RAW_ADDR_0 || i_input_type_e==RAW_ADDR_1 || i_input_type_e==RAW_ADDR_2 || i_input_type_e==RAW_ADDR_3)
+ {
+ if(i_input_type_e==RAW_ADDR_0)
+ {
+ l_block=0;
+ }
+ else if(i_input_type_e==RAW_ADDR_1)
+ {
+ l_block=1;
+ }
+ else if(i_input_type_e==RAW_ADDR_2)
+ {
+ l_block=2;
+ }
+ else
+ {
+ l_block=3;
+ }
+ if(i_input_index_u8<=15) // 16 Addr delay values
+ {
+ l_lane=i_input_index_u8;
+ }
+ else
+ {
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR);
+ FAPI_ERR("Wrong input index specified rc = 0x%08X ", uint32_t(rc));
+ return rc;
+ }
+ ip_type_t l_input=RAW_ADDR;
+ if(i_verbose==1)
+ {
+ FAPI_INF("block=%d",l_block);
+ FAPI_INF("lane=%d",l_lane);
+ }
+ rc=get_address(i_target_mba,i_port_u8,l_rank_pair,l_input,l_block,l_lane,l_scom_add,l_start_bit,l_len8); if(rc) return rc;
+ l_sbit=l_start_bit;
+ l_len=l_len8;
+ if(i_verbose==1)
+ {
+ FAPI_INF("scom_address=%llX",l_scom_add);
+ FAPI_INF("start bit=%d",l_start_bit);
+ FAPI_INF("length=%d",l_len8);
+ }
+ }
+
+ else if(i_input_type_e==RAW_DQS_GATE_0 || i_input_type_e==RAW_DQS_GATE_1 || i_input_type_e==RAW_DQS_GATE_2 || i_input_type_e==RAW_DQS_GATE_3 || i_input_type_e==RAW_DQS_GATE_4)
+ {
+ if(i_input_type_e==RAW_DQS_GATE_0)
+ {
+ l_block=0;
+ }
+ else if(i_input_type_e==RAW_DQS_GATE_1)
+ {
+ l_block=1;
+ }
+ else if(i_input_type_e==RAW_DQS_GATE_2)
+ {
+ l_block=2;
+ }
+ else if(i_input_type_e==RAW_DQS_GATE_3)
+ {
+ l_block=3;
+ }
+ else
+ {
+ l_block=4;
+ }
+
+ if(i_input_index_u8<=3) // 4 Gate Delay values
+ {
+ l_lane=i_input_index_u8;
+ }
+ else
+ {
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR);
+ FAPI_ERR("Wrong input index specified rc = 0x%08X ", uint32_t(rc));
+ return rc;
+ }
+ ip_type_t l_input=RAW_DQS_GATE;
+ if(i_verbose==1)
+ {
+ FAPI_INF("block=%d",l_block);
+ FAPI_INF("lane=%d",l_lane);
+ }
+ rc=get_address(i_target_mba,i_port_u8,l_rank_pair,l_input,l_block,l_lane,l_scom_add,l_start_bit,l_len8); if(rc) return rc;
+ l_sbit=l_start_bit;
+ l_len=l_len8;
+ if(i_verbose==1)
+ {
+ FAPI_INF("scom_address=%llX",l_scom_add);
+ FAPI_INF("start bit=%d",l_start_bit);
+ FAPI_INF("length=%d",l_len8);
+ }
+ }
+
+ else
+ {
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR);
+ FAPI_ERR("Wrong input type specified rc = 0x%08X ", uint32_t(rc));
+ return rc;
+ }
+
+ if(i_access_type_e==READ)
+ {
+ rc=fapiGetScom(i_target_mba,l_scom_add,data_buffer_64);if(rc) return rc;
+ rc_num= rc_num | data_buffer_64.extractToRight(&l_output,l_sbit,l_len);
+ if(rc_num)
+ {
+ FAPI_ERR( "ecmd error on l_scom_add extract");
+ rc.setEcmdError(rc_num);
+ return rc;
+ }
+ rc_num = data_buffer_32.setWord(0,l_output);if(rc_num) return rc;
+io_value_u16=data_buffer_32.getHalfWord(1);
+ //io_value_u32=l_output;
+
+ //FAPI_INF(" Abhijit Delay value=%d and original=%d",io_value_u16,l_output);
+ }
+
+ else if(i_access_type_e==WRITE)
+ {
+
+ if(i_input_type_e==RD_DQ || i_input_type_e==RD_DQS || i_input_type_e==RAW_RD_DQ_0 || i_input_type_e==RAW_RD_DQ_1 || i_input_type_e==RAW_RD_DQ_2 || i_input_type_e==RAW_RD_DQ_3 || i_input_type_e==RAW_RD_DQ_4 || i_input_type_e==RAW_RD_DQS_0 || i_input_type_e==RAW_RD_DQS_1 || i_input_type_e==RAW_RD_DQS_2 || i_input_type_e==RAW_RD_DQS_3 || i_input_type_e==RAW_RD_DQS_4
+ || i_input_type_e==RAW_SYS_ADDR_CLK || i_input_type_e==RAW_SYS_CLK_0 || i_input_type_e==RAW_SYS_CLK_1 || i_input_type_e==RAW_SYS_CLK_2 || i_input_type_e==RAW_SYS_CLK_3 || i_input_type_e==RAW_SYS_CLK_4 || i_input_type_e==RAW_WR_CLK_0 || i_input_type_e==RAW_WR_CLK_1 || i_input_type_e==RAW_WR_CLK_2 || i_input_type_e==RAW_WR_CLK_3 || i_input_type_e==RAW_WR_CLK_4
+ || i_input_type_e==RAW_ADDR_0 || i_input_type_e==RAW_ADDR_1 || i_input_type_e==RAW_ADDR_2 || i_input_type_e==RAW_ADDR_3 || i_input_type_e==RAW_DQS_ALIGN_0 || i_input_type_e==RAW_DQS_ALIGN_1 || i_input_type_e==RAW_DQS_ALIGN_2 || i_input_type_e==RAW_DQS_ALIGN_3 || i_input_type_e==RAW_DQS_ALIGN_4
+ || i_input_type_e==DQS_ALIGN || i_input_type_e==COMMAND || i_input_type_e==ADDRESS || i_input_type_e==CONTROL || i_input_type_e==CLOCK )
+ {
+ l_start=25; // l_start is starting bit of delay value in the register. There are different registers and each register has a different field for delay
+ }
+ else if(i_input_type_e==WR_DQ || i_input_type_e==WR_DQS || i_input_type_e==RAW_WR_DQ_0 || i_input_type_e==RAW_WR_DQ_1 || i_input_type_e==RAW_WR_DQ_2 || i_input_type_e==RAW_WR_DQ_3 || i_input_type_e==RAW_WR_DQ_4 || i_input_type_e==RAW_WR_DQS_0 || i_input_type_e==RAW_WR_DQS_1 || i_input_type_e==RAW_WR_DQS_2 || i_input_type_e==RAW_WR_DQS_3 || i_input_type_e==RAW_WR_DQS_4 )
+ {
+ l_start=22;
+ }
+
+ else if(i_input_type_e==RAW_DQS_GATE_0 || i_input_type_e==RAW_DQS_GATE_1 || i_input_type_e==RAW_DQS_GATE_2 || i_input_type_e==RAW_DQS_GATE_3 || i_input_type_e==RAW_DQS_GATE_4 || i_input_type_e==DQS_GATE)
+ {
+ l_start=29;
+ }
+
+ else if(i_input_type_e==RAW_RDCLK_0 || i_input_type_e==RAW_RDCLK_1 || i_input_type_e==RAW_RDCLK_2 || i_input_type_e==RAW_RDCLK_3 || i_input_type_e==RAW_RDCLK_4 || i_input_type_e==RDCLK || i_input_type_e==RAW_DQSCLK_0 || i_input_type_e==RAW_DQSCLK_1 || i_input_type_e==RAW_DQSCLK_2 || i_input_type_e==RAW_DQSCLK_3 || i_input_type_e==RAW_DQSCLK_4 || i_input_type_e==DQSCLK)
+ {
+ l_start=30;
+ }
+
+ else if(i_input_type_e==DATA_DISABLE)
+ {
+ l_start=16;
+ }
+
+ else
+ {
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR);
+ FAPI_ERR("Wrong input type specified rc = 0x%08X ", uint32_t(rc));
+ return rc;
+ }
+ if(i_verbose==1)
+ {
+ FAPI_INF("value given=%d",io_value_u16);
+ }
+ rc_num = data_buffer_32.setHalfWord(1,io_value_u16);if(rc_num) return rc;
+ l_value_u32 = data_buffer_32.getWord(0);
+
+ // FAPI_INF("\n Abhijit the original passed=%d and the changed=%d ",io_value_u16,l_value_u32);
+ rc=fapiGetScom(i_target_mba,l_scom_add,data_buffer_64);if(rc) return rc;
+ rc_num=data_buffer_64.insert(l_value_u32,l_sbit,l_len,l_start);
+ if(rc_num)
+ {
+ FAPI_ERR( "ecmd error on l_scom_add extract");
+ rc.setEcmdError(rc_num);
+ return rc;
+ }
+ rc=fapiPutScom(i_target_mba,l_scom_add,data_buffer_64); if(rc) return rc;
+ }
+ return rc;
+}
+
} // extern "C"
diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_access_delay_reg.H b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_access_delay_reg.H
index 885c27688..c74e4dbfe 100644
--- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_access_delay_reg.H
+++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_access_delay_reg.H
@@ -5,7 +5,7 @@
/* */
/* IBM CONFIDENTIAL */
/* */
-/* COPYRIGHT International Business Machines Corp. 2012,2013 */
+/* COPYRIGHT International Business Machines Corp. 2012,2014 */
/* */
/* p1 */
/* */
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-//$Id: mss_access_delay_reg.H,v 1.10 2013/10/09 11:28:54 sasethur Exp $
+//$Id: mss_access_delay_reg.H,v 1.11 2013/12/16 10:15:30 sasethur Exp $
//------------------------------------------------------------------------------
// *! (C) Copyright International Business Machines Corp. 2011
// *! All Rights Reserved -- Property of IBM
@@ -189,6 +189,8 @@ typedef fapi::ReturnCode (*mss_access_delay_reg_FP_t)(const fapi::Target & i_tar
extern "C" {
//------------------------------------------------------------------------------
+fapi::ReturnCode mss_access_delay_reg_schmoo(const fapi::Target & i_target_mba, access_type_t i_access_type_e, uint8_t i_port_u8, uint8_t i_rank_u8, input_type_t i_input_type_e, uint8_t i_input_index_u8,uint8_t i_verbose, uint16_t &io_value_u32);
+
fapi::ReturnCode mss_access_delay_reg(const fapi::Target & i_target_mba, access_type_t i_access_type_e, uint8_t i_port_u8, uint8_t i_rank_u8, input_type_t i_input_type_e, uint8_t i_input_index_u8,uint8_t i_verbose, uint32_t &io_value_u32);
fapi::ReturnCode cross_coupled(const fapi::Target & i_target_mba,uint8_t i_port, uint8_t i_rank_pair,input_type_t i_input_type_e,uint8_t i_input_index,uint8_t i_verbose,scom_location& out);
diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_draminit_training_advanced.C b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_draminit_training_advanced.C
index 93038ede5..d110e4982 100644
--- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_draminit_training_advanced.C
+++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_draminit_training_advanced.C
@@ -5,7 +5,7 @@
/* */
/* IBM CONFIDENTIAL */
/* */
-/* COPYRIGHT International Business Machines Corp. 2012,2013 */
+/* COPYRIGHT International Business Machines Corp. 2012,2014 */
/* */
/* p1 */
/* */
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: mss_draminit_training_advanced.C,v 1.39 2013/10/17 12:59:04 sasethur Exp $
+// $Id: mss_draminit_training_advanced.C,v 1.40 2013/12/17 18:47:27 sasethur Exp $
/* File is created by SARAVANAN SETHURAMAN on Thur 29 Sept 2011. */
//------------------------------------------------------------------------------
@@ -79,6 +79,7 @@
// 1.37 | sasethur |04-Sep-13| Fixed fw review comment
// 1.38 | bellows |19-SEP-13| fixed possible buffer overrun found by stradale
// 1.39 | abhijsau |17-OCT-13| fixed a logical bug
+// 1.40 | abhijsau |17-DEC-13| added creation and deletion of schmoo object
// This procedure Schmoo's DRV_IMP, SLEW, VREF (DDR, CEN), RCV_IMP based on attribute from effective config procedure
// DQ & DQS Driver impedance, Slew rate, WR_Vref shmoo would call only write_eye shmoo for margin calculation
@@ -268,12 +269,12 @@ fapi::ReturnCode mss_draminit_training_advanced_cloned(const fapi::Target & i_ta
l_shmoo_type_valid=(shmoo_type_t)l_shmoo_type_valid_t;
l_shmoo_param_valid=(shmoo_param)l_shmoo_param_valid_t;
-
+ FAPI_INF("running in simics before attr");
FAPI_INF("+++++++++++++++++++++++++ Read Schmoo Attributes ++++++++++++++++++++++++++");
FAPI_INF("Schmoo param valid = 0x%x on %s", l_shmoo_param_valid, i_target_mba.toEcmdString());
FAPI_INF("Schmoo test valid = 0x%x on %s", l_shmoo_type_valid, i_target_mba.toEcmdString());
FAPI_INF("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
-
+ FAPI_INF("running in simics after attr");
//Check for Shmoo Parameter, if anyof them is enabled then go into the loop else the procedure exit
if (( l_num_ranks_per_dimm_u8array[0][0] > 0 ) || (l_num_ranks_per_dimm_u8array[0][1] > 0) || ( l_num_ranks_per_dimm_u8array[1][0] > 0 ) || (l_num_ranks_per_dimm_u8array[1][1] > 0))
@@ -1034,16 +1035,26 @@ fapi::ReturnCode delay_shmoo(const fapi::Target & i_target_mba, uint8_t i_port,
uint32_t i_shmoo_param)
{
fapi::ReturnCode rc;
- //FAPI_INF(" Inside the delay shmoo " );
+ FAPI_INF(" Inside before the delay shmoo " );
//Constructor CALL: generic_shmoo::generic_shmoo(uint8_t i_port, uint32_t shmoo_mask,shmoo_algorithm_t shmoo_algorithm)
//generic_shmoo mss_shmoo=generic_shmoo(i_port,2,SEQ_LIN);
- generic_shmoo mss_shmoo=generic_shmoo(i_port,i_shmoo_type_valid,SEQ_LIN);
- rc = mss_shmoo.run(i_target_mba, o_left_margin, o_right_margin,i_shmoo_param);
+ generic_shmoo * l_pShmoo = new generic_shmoo(i_port,i_shmoo_type_valid,SEQ_LIN);
+ //generic_shmoo mss_shmoo=generic_shmoo(i_port,i_shmoo_type_valid,SEQ_LIN);
+ rc = l_pShmoo->run(i_target_mba, o_left_margin, o_right_margin,i_shmoo_param);
if(rc)
{
FAPI_ERR("Delay Schmoo Function is Failed rc = 0x%08X (creator = %d)", uint32_t(rc), rc.getCreator());
- return rc;
}
+ //FAPI_INF("Abhijit Saurabh sizeof generic_shmoo is %d", sizeof(l_pShmoo));
+
+ delete l_pShmoo;
+
+ // rc = mss_shmoo.run(i_target_mba, o_left_margin, o_right_margin,i_shmoo_param);
+ // if(rc)
+ // {
+ // FAPI_ERR("Delay Schmoo Function is Failed rc = 0x%08X (creator = %d)", uint32_t(rc), rc.getCreator());
+ // return rc;
+ // }
return rc;
}
diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_generic_shmoo.C b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_generic_shmoo.C
index 0c72a60ae..86d1a2262 100644
--- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_generic_shmoo.C
+++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_generic_shmoo.C
@@ -5,7 +5,7 @@
/* */
/* IBM CONFIDENTIAL */
/* */
-/* COPYRIGHT International Business Machines Corp. 2012,2013 */
+/* COPYRIGHT International Business Machines Corp. 2012,2014 */
/* */
/* p1 */
/* */
@@ -21,7 +21,7 @@
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: mss_generic_shmoo.C,v 1.77 2013/10/21 06:05:32 sasethur Exp $
+// $Id: mss_generic_shmoo.C,v 1.83 2013/12/17 18:42:08 sasethur Exp $
// *!***************************************************************************
// *! (C) Copyright International Business Machines Corp. 1997, 1998
// *! All Rights Reserved -- Property of IBM
@@ -40,6 +40,11 @@
//------------------------------------------------------------------------------
// Version:|Author: | Date: | Comment:
// --------|--------|---------|--------------------------------------------------
+// 1.83 |abhijit |17-DEC-13| Changed the whole code structure to enable run from firmware
+// 1.81 |abhijit |07-nov-13| Fixed memory release as per fw suggestion
+// 1.80 |abhijit |07-nov-13| Fixed array initialization of bad bit array as per fw suggestion
+// 1.79 |abhijit |07-nov-13| Fixed array initialization of valid_ranks[] in schmoo constructor & modified prints in report function to support 2D script
+// 1.78 |abhijit |29-oct-13| added feature of not schmooing on bad dq and also added the target prints
// 1.77 |abhijit |21-oct-13| fixed the printing for tdqss min and tdqss max
// 1.76 |abhijit |17-oct-13| fixed the printing for dqs by 4
// 1.74 |abhijit |4-oct-13 | fixed fw comments
@@ -108,14 +113,14 @@ using namespace fapi;
* ---------------------------------------------------------------------------*/
generic_shmoo:: generic_shmoo(uint8_t addr,shmoo_type_t shmoo_mask,shmoo_algorithm_t shmoo_algorithm)
{
- //this->shmoo_mask=shmoo_mask; //! Sets what Shmoos the caller wants to run
+ this->shmoo_mask=shmoo_mask; //! Sets what Shmoos the caller wants to run
this->algorithm=shmoo_algorithm ;
this->iv_addr=addr ;
//iv_MAX_RANKS=8;
iv_MAX_BYTES=10;
- iv_DQS_ON=0;
+ iv_SHMOO_ON=0;
iv_pattern=0;
iv_test_type=0;
iv_dmm_type=0;
@@ -123,166 +128,76 @@ generic_shmoo:: generic_shmoo(uint8_t addr,shmoo_type_t shmoo_mask,shmoo_algorit
iv_binary_diff=2;
iv_vref_mul=0;
- for(int p=0;p<MAX_PORT;++p)
- {
- for(int i=0;i<iv_MAX_RANKS[p];++i)
+
+
+
+ for(int i=0;i<MAX_RANK;++i)
{
valid_rank[i]=0;
}
- }
+
for(int p=0;p<MAX_PORT;++p)
{
iv_MAX_RANKS[p]=4;
}
+
FAPI_DBG("mss_generic_shmoo : constructor running for shmoo type %d",shmoo_mask);
iv_shmoo_type = 0;
- SHMOO[iv_shmoo_type].static_knob.min_val=0;
- SHMOO[iv_shmoo_type].static_knob.max_val=512;
+ //SHMOO[iv_shmoo_type].static_knob.min_val=0;
+ //SHMOO[iv_shmoo_type].static_knob.max_val=512;
- if(shmoo_mask & TEST_NONE)
+ if(shmoo_mask == TEST_NONE)
{
FAPI_INF("mss_generic_shmoo : NONE selected %d",shmoo_mask);
- iv_shmoo_type = 0;
- SHMOO[0].static_knob.min_val=0;
- SHMOO[0].static_knob.max_val=512;
+ //iv_shmoo_type = 0;
+ //SHMOO[0].static_knob.min_val=0;
+ //SHMOO[0].static_knob.max_val=512;
}
- if(shmoo_mask & WR_EYE)
+ if(shmoo_mask == WR_EYE)
{
FAPI_INF("mss_generic_shmoo : WR_EYE selected %d",shmoo_mask);
- iv_shmoo_type = 2;
- SHMOO[0].static_knob.min_val=0;
- SHMOO[0].static_knob.max_val=512;
+ iv_shmoo_type = 0;
+ //SHMOO[0].static_knob.min_val=0;
+ //SHMOO[0].static_knob.max_val=512;
}
- if(shmoo_mask & RD_EYE)
+ if(shmoo_mask == RD_EYE)
{
FAPI_INF("mss_generic_shmoo : RD_EYE selected %d",shmoo_mask);
- iv_shmoo_type = 8;
- SHMOO[2].static_knob.min_val=2;
- SHMOO[2].static_knob.max_val=128;
+ iv_shmoo_type = 1;
+ //SHMOO[1].static_knob.min_val=2;
+ //SHMOO[1].static_knob.max_val=128;
}
-
- if(shmoo_mask & WRT_DQS) //preet
+ if(shmoo_mask == WRT_DQS)
{
FAPI_INF("mss_generic_shmoo : WRT_DQS selected %d",shmoo_mask);
- iv_shmoo_type = 4;
- iv_DQS_ON = 1;
- SHMOO[1].static_knob.min_val=0;
- SHMOO[1].static_knob.max_val=512;
+ iv_shmoo_type = 3;
+ //SHMOO[1].static_knob.min_val=2;
+ //SHMOO[1].static_knob.max_val=128;
}
- if(shmoo_mask & RD_GATE) //preet
+
+ for(int k=0;k<MAX_SHMOO;++k)
{
- FAPI_INF("mss_generic_shmoo : RD_GATE selected %d",shmoo_mask);
-
- iv_shmoo_type = 16;
- iv_DQS_ON = 2;
- SHMOO[3].static_knob.min_val=2;
- SHMOO[3].static_knob.max_val=128;
- }
- if(iv_DQS_ON==1){
for(int i=0;i<MAX_PORT;++i)
{
for(int j=0;j<iv_MAX_RANKS[i];++j)
{
- init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.nom_val,0);
- init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.right_err_cnt,0);
- init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.left_err_cnt,0);
- init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.lb_regval,SHMOO[iv_shmoo_type].static_knob.min_val);
- init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.rb_regval,SHMOO[iv_shmoo_type].static_knob.max_val);
- init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.lb_regval,20);
- init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.rb_regval,300);
- init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.total_margin,0);
- init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.right_margin_val,0);
- init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.left_margin_val,0);
- }
- }}else{
- // for(int i=0;i<MAX_PORT;++i)
- // {
-
- // init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[0].K.cmd_nom_val,0);
- // init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[0].K.offset,0);
- // init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[0].K.addr_nom_val,0);
- // init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[0].K.cntrl_nom_val,0);
+ init_multi_array(SHMOO[k].MBA.P[i].S[j].K.nom_val,0);
+ init_multi_array(SHMOO[k].MBA.P[i].S[j].K.lb_regval,0);
+ init_multi_array(SHMOO[k].MBA.P[i].S[j].K.rb_regval,512);
+ init_multi_array(SHMOO[k].MBA.P[i].S[j].K.last_pass,0);
+ init_multi_array(SHMOO[k].MBA.P[i].S[j].K.last_fail,0);
+ init_multi_array(SHMOO[k].MBA.P[i].S[j].K.curr_val,0);
-
- // init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[0].K.cmd_lb_regval,20);
- // init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[0].K.cmd_rb_regval,300);
- // init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[0].K.cmd_total_margin,0);
- // init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[0].K.cmd_right_margin_val,0);
- // init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[0].K.cmd_left_margin_val,0);
- // }
- }
- // if(iv_DQS_ON == 1)
- // { for(int i=0;i<MAX_PORT;++i)
- // {
- // for(int j=0;j<iv_MAX_RANKS[i];++j) //initialize values for DQS
- // {
- // init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.nom_val,0);
- // // init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.lb_regval,SHMOO[iv_shmoo_type].static_knob.min_val);
- // // init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.rb_regval,SHMOO[iv_shmoo_type].static_knob.max_val);
- // init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.lb_regval,20);
- // init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.rb_regval,300);
- // init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.total_margin,0);
- // init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.right_margin_val,0);
- // init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.left_margin_val,0);
- // }
- // }
- // }
-}
-
-fapi::ReturnCode generic_shmoo::shmoo_save_rest(const fapi::Target & i_target,uint64_t i_content_array[],uint8_t i_mode)
-{
- ReturnCode rc;
- uint32_t rc_num;
- uint8_t l_index = 0;
- uint64_t l_value = 0;
- uint64_t l_val_u64 = 0;
- ecmdDataBufferBase l_shmoo1ab(64);
- uint64_t l_Databitdir[10] = {0x800000030301143full,0x800004030301143full,0x800008030301143full,0x80000c030301143full,0x800010030301143full,0x800100030301143full,0x800104030301143full,
- 0x800108030301143full,0x80010c030301143full,0x800110030301143full};
- if(i_mode == 0)
- {
- FAPI_INF(" Saving DP18 data bit direction register contents");
- for(l_index = 0;l_index<MAX_BYTE;l_index++)
- {
- l_value = l_Databitdir[l_index];
- rc = fapiGetScom(i_target,l_value,l_shmoo1ab); if(rc) return rc;
- rc_num = l_shmoo1ab.setBit(57);
- rc = fapiPutScom(i_target,l_value,l_shmoo1ab); if(rc) return rc;
- i_content_array[l_index] = l_shmoo1ab.getDoubleWord (0);
-
-
- }
- }
-
- else if(i_mode == 1)
- {
- FAPI_INF(" Restoring DP18 data bit direction register contents");
- for(l_index = 0;l_index<MAX_BYTE;l_index++)
- {
- l_val_u64 = i_content_array[l_index];
- l_value = l_Databitdir[l_index];
- rc_num = l_shmoo1ab.setDoubleWord(0,l_val_u64);if (rc_num){FAPI_ERR( "Error in function shmoo_save_rest:");rc.setEcmdError(rc_num);return rc;}
- rc = fapiPutScom(i_target,l_value,l_shmoo1ab); if(rc) return rc;
- }
+ }
}
- else
- {
- FAPI_INF("Invalid value of MODE");
}
- return rc;
-
}
-
-
-
-
-
/*------------------------------------------------------------------------------
* Function: run
* Description : ! Delegator function that runs shmoo using other functions
@@ -306,8 +221,13 @@ fapi::ReturnCode generic_shmoo::run(const fapi::Target & i_target,uint32_t *o_ri
uint8_t l_totrg_0=0;
uint8_t l_totrg_1=0;
uint8_t l_pp=0;
- uint8_t pass=0;
+ //uint8_t pass=0;
uint8_t l_shmoo_param=0;
+
+
+
+
+
rc = FAPI_ATTR_GET(ATTR_EFF_SCHMOO_MODE, &i_target, l_shmoo_param); if(rc) return rc;
//uint8_t l_val=2;
@@ -359,7 +279,7 @@ fapi::ReturnCode generic_shmoo::run(const fapi::Target & i_target,uint32_t *o_ri
FAPI_DBG("mss_generic_shmoo : run() for shmoo type %d",shmoo_mask);
// Check if all bytes/bits are in a pass condition initially .Otherwise quit
if(l_attr_schmoo_test_type_u8 == 0){
- FAPI_INF("This procedure wont change any delay settings");
+ FAPI_INF("%s:This procedure wont change any delay settings",i_target.toEcmdString());
return rc;
}
if(l_attr_schmoo_test_type_u8 == 1){
@@ -371,7 +291,8 @@ fapi::ReturnCode generic_shmoo::run(const fapi::Target & i_target,uint32_t *o_ri
return rc;
}
}else if(l_attr_schmoo_test_type_u8 == 8){
- if(l_rankpgrp0[0] !=255)
+
+ if(l_rankpgrp0[0] !=255)
{
l_totrg_0++;
}
@@ -412,105 +333,53 @@ fapi::ReturnCode generic_shmoo::run(const fapi::Target & i_target,uint32_t *o_ri
if(l_pp==1)
{
- FAPI_INF("Ping pong is disabled");
+ FAPI_INF("%s:Ping pong is disabled",i_target.toEcmdString());
}
else
{
- FAPI_INF("Ping pong is enabled");
+ FAPI_INF("%s:Ping pong is enabled",i_target.toEcmdString());
}
if((l_pp=1) && ((l_totrg_0==1) || (l_totrg_1 ==1 )))
{
- FAPI_INF("Rank group is not good with ping pong. Hope you have set W2W gap to 10");
+ FAPI_INF("%s:Rank group is not good with ping pong. Hope you have set W2W gap to 10",i_target.toEcmdString());
}
- iv_shmoo_type=4;
- //FAPI_INF("\n ABHIJIT IS HERE 1111 \n");
+
rc=get_all_noms_dqs(i_target);if(rc) return rc;
- iv_shmoo_type=2;
- //FAPI_INF("\n ABHIJIT IS HERE 2222 \n");
+
rc=get_all_noms(i_target);if(rc) return rc;
rc=schmoo_setup_mcb(i_target);if(rc) return rc;
//Find RIGHT BOUND OR SETUP BOUND
rc=find_bound(i_target,RIGHT);if(rc) return rc;
- //FAPI_INF("\n ABHIJIT IS HERE 3333 \n");
+
//Find LEFT BOUND OR HOLD BOUND
rc=find_bound(i_target,LEFT);if(rc) return rc;
- iv_shmoo_type=4;
-
- if(l_dram_width == 4 ){
- rc=get_margin_dqs_by4(i_target);if(rc) return rc;
- }else{
- //FAPI_INF("\n ABHIJIT IS HERE 222 \n");
- rc=get_margin_dqs_by8(i_target);if(rc) return rc;
- }
- //FAPI_INF("\n before the call \n");
- rc=print_report_dqs(i_target);if(rc) return rc;
- rc=get_min_margin_dqs(i_target,o_right_min_margin,o_left_min_margin);if(rc) return rc;
-
- if((l_totrg_0==1) || (l_totrg_1 ==1 ))
- {
- shmoo_save_rest(i_target,i_content_array,1);
- }
+ if(l_dram_width == 4 ){
+
+ rc=get_margin_dqs_by4(i_target);if(rc) return rc;
+ }else{
+ rc=get_margin_dqs_by8(i_target);if(rc) return rc;
+ }
- }else if(l_attr_schmoo_test_type_u8 == 16){
- if(iv_shmoo_param==2){
- rc=get_all_noms_data_disable(i_target);if(rc) return rc;
- rc=get_all_noms_gate(i_target);if(rc) return rc;
+ rc=print_report_dqs(i_target);if(rc) return rc;
- rc=knob_update_gate_train(i_target,RIGHT,iv_shmoo_type,pass); if(rc) return rc;
- }
- iv_DQS_ON=1;
- rc=schmoo_setup_mcb(i_target);if(rc) return rc;
- rc=do_mcbist_test(i_target);
- if(rc)
- {
- FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
- return rc;
- }
- iv_DQS_ON=2;
+ rc=get_min_margin_dqs(i_target,o_right_min_margin,o_left_min_margin);if(rc) return rc;
- rc=schmoo_setup_mcb(i_target);if(rc) return rc;
- rc=do_mcbist_test(i_target);
- if(rc)
- {
- FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
- return rc;
- }
- //sanity check
- rc=mcb_error_map(i_target,mcbist_error_map);
- if(rc)
+ if((l_totrg_0==1) || (l_totrg_1 ==1 ))
{
- FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!");
-
- return rc;
- }
+ shmoo_save_rest(i_target,i_content_array,1);
+ }
-
- rc=get_all_noms_gate(i_target);if(rc) return rc;
- if(iv_shmoo_param==2){
- rc=find_bound(i_target,LEFT);if(rc) return rc;
- rc=put_all_noms_data_disable(i_target,0);if(rc) return rc;
- }else{
- rc=find_bound(i_target,RIGHT);if(rc) return rc;
- }
- rc=print_report_gate(i_target);if(rc) return rc;
+ FAPI_INF("%s: Least tDQSSmin(ps)=%d ps and Least tDQSSmax=%d ps",i_target.toEcmdString(),*o_left_min_margin,*o_right_min_margin);
} else {
- // rc=sanity_check(i_target); // Run MCBIST by default before for every schmoo to check if memory is in good condition.
- // if(!rc.ok())
- // {
- // FAPI_ERR("generic_shmoo::run MSS Generic Shmoo failed initial Sanity Check. Memory not in an all pass Condition");
- // return rc;
- // }
- // If memory is OK then we continue to gather nominals and config values
- // Now Read nominal values for all knobs configured
- // FAPI_DBG("mss_generic_shmoo : run() :read nominal values ");
+
rc=get_all_noms(i_target);if(rc) return rc;
@@ -519,7 +388,9 @@ fapi::ReturnCode generic_shmoo::run(const fapi::Target & i_target,uint32_t *o_ri
}
rc=set_all_binary(i_target,RIGHT);if(rc) return rc;
//Find RIGHT BOUND OR SETUP BOUND
+
rc=find_bound(i_target,RIGHT);if(rc) return rc;
+
rc=set_all_binary(i_target,LEFT);if(rc) return rc;
//Find LEFT BOUND OR HOLD BOUND
rc=find_bound(i_target,LEFT);if(rc) return rc;
@@ -530,19 +401,62 @@ fapi::ReturnCode generic_shmoo::run(const fapi::Target & i_target,uint32_t *o_ri
// It is used to print the schmoo report
rc=print_report(i_target);if(rc) return rc;
- if(l_attr_schmoo_test_type_u8==8){
- FAPI_INF(" Least tDQSSmin(ps)=%d ps and Least tDQSSmax=%d ps", *o_left_min_margin,*o_right_min_margin);
- }else if(l_attr_schmoo_test_type_u8==16){
-
- }else{
- FAPI_INF(" Minimum hold margin=%d ps and setup margin=%d ps", *o_left_min_margin,*o_right_min_margin);
- }
- //shmoo_save_rest(i_target,i_content_array,1);
+
+ FAPI_INF("%s:Minimum hold margin=%d ps and setup margin=%d ps",i_target.toEcmdString(), *o_left_min_margin,*o_right_min_margin);
+
+ shmoo_save_rest(i_target,i_content_array,1);
}
l_mcbist_prnt_off=0;
rc = FAPI_ATTR_SET(ATTR_MCBIST_PRINTING_DISABLE, &i_target, l_mcbist_prnt_off); if(rc) return rc;
+
+
return rc;
}
+
+fapi::ReturnCode generic_shmoo::shmoo_save_rest(const fapi::Target & i_target,uint64_t i_content_array[],uint8_t i_mode)
+{
+ ReturnCode rc;
+ uint32_t rc_num;
+ uint8_t l_index = 0;
+ uint64_t l_value = 0;
+ uint64_t l_val_u64 = 0;
+ ecmdDataBufferBase l_shmoo1ab(64);
+ uint64_t l_Databitdir[10] = {0x800000030301143full,0x800004030301143full,0x800008030301143full,0x80000c030301143full,0x800010030301143full,0x800100030301143full,0x800104030301143full,
+ 0x800108030301143full,0x80010c030301143full,0x800110030301143full};
+ if(i_mode == 0)
+ {
+ FAPI_INF("%s: Saving DP18 data bit direction register contents",i_target.toEcmdString());
+ for(l_index = 0;l_index<MAX_BYTE;l_index++)
+ {
+ l_value = l_Databitdir[l_index];
+ rc = fapiGetScom(i_target,l_value,l_shmoo1ab); if(rc) return rc;
+ rc_num = l_shmoo1ab.setBit(57);
+ rc = fapiPutScom(i_target,l_value,l_shmoo1ab); if(rc) return rc;
+ i_content_array[l_index] = l_shmoo1ab.getDoubleWord (0);
+
+
+ }
+ }
+
+ else if(i_mode == 1)
+ {
+ FAPI_INF("%s: Restoring DP18 data bit direction register contents",i_target.toEcmdString());
+ for(l_index = 0;l_index<MAX_BYTE;l_index++)
+ {
+ l_val_u64 = i_content_array[l_index];
+ l_value = l_Databitdir[l_index];
+ rc_num = l_shmoo1ab.setDoubleWord(0,l_val_u64);if (rc_num){FAPI_ERR( "Error in function shmoo_save_rest:");rc.setEcmdError(rc_num);return rc;}
+ rc = fapiPutScom(i_target,l_value,l_shmoo1ab); if(rc) return rc;
+ }
+ }
+ else
+ {
+ FAPI_INF("%s:Invalid value of MODE",i_target.toEcmdString());
+ }
+ return rc;
+
+}
+
/*------------------------------------------------------------------------------
* Function: sanity_check
* Description : do intial mcbist check in nominal and report spd if any bad bit found
@@ -552,19 +466,22 @@ fapi::ReturnCode generic_shmoo::run(const fapi::Target & i_target,uint32_t *o_ri
fapi::ReturnCode generic_shmoo::sanity_check(const fapi::Target & i_target){
fapi:: ReturnCode rc;
mcbist_mode=QUARTER_SLOW;
- //uint64_t l_time = 0x0000000000000000ull;
- uint8_t l_rank_valid = 0;
+
uint8_t l_mcb_status=0;
+ uint8_t l_CDarray0[80]={0};
+ uint8_t l_CDarray1[80]={0};
+
+
struct Subtest_info l_sub_info[30];
- FAPI_INF(" entering set_up mcbist now and rank %d",l_rank_valid);
+ //FAPI_INF("%s:entering set_up mcbist now and rank %d",i_target.toEcmdString(),l_rank_valid);
+
- //rc = setup_mcbist(i_target, 0, MCBIST_2D_CUP_PAT8, CENSHMOO, UNMASK_ALL, 0,iv_pattern,iv_test_type,l_rank_valid,0,l_start,l_end,0);if(rc) return rc; //send shmoo mode to vary the address range
rc=schmoo_setup_mcb(i_target);if(rc) return rc;
- FAPI_INF(" starting mcbist now");
+ //FAPI_INF("%s: starting mcbist now",i_target.toEcmdString());
rc=start_mcb(i_target);if(rc) return rc;
- FAPI_INF(" polling mcbist now");
+ //FAPI_INF("%s: polling mcbist now",i_target.toEcmdString());
//rc=poll_mcb(i_target_mba,&mcb_status,l_sub_info1,0);if(rc) return rc;
rc=poll_mcb(i_target,&l_mcb_status,l_sub_info,1);
if(rc)
@@ -573,8 +490,8 @@ fapi::ReturnCode generic_shmoo::sanity_check(const fapi::Target & i_target){
return rc;
}
- FAPI_INF(" checking error map ");
- rc=mcb_error_map(i_target,mcbist_error_map);if(rc) return rc;
+ //FAPI_INF("%s: checking error map ",i_target.toEcmdString());
+ rc=mcb_error_map(i_target,mcbist_error_map,l_CDarray0,l_CDarray1,count_bad_dq);if(rc) return rc;
if(l_mcb_status)
@@ -584,6 +501,7 @@ fapi::ReturnCode generic_shmoo::sanity_check(const fapi::Target & i_target){
return rc;
}
+
return rc;
}
/*------------------------------------------------------------------------------
@@ -598,32 +516,33 @@ fapi::ReturnCode generic_shmoo::do_mcbist_reset(const fapi::Target & i_target)
uint32_t rc_num =0;
+ Target i_target_centaur;
+ //uint8_t l_attr_centaur_ec_mcbist_random_data_gen = 0;
+ rc = fapiGetParentChip(i_target, i_target_centaur); if(rc) return rc;
+
ecmdDataBufferBase l_data_buffer_64(64);
rc_num = l_data_buffer_64.flushTo0();if (rc_num){FAPI_ERR( "Error in function mcb_reset_trap:");rc.setEcmdError(rc_num);return rc;}
//PORT - A
- rc = fapiPutScom(i_target,MBS_MCBIST01_MCBEMA1Q_0x0201166a,l_data_buffer_64); if(rc) return(rc);
- rc = fapiPutScom(i_target,MBS_MCBIST01_MCBEMA2Q_0x0201166b,l_data_buffer_64); if(rc) return(rc);
- rc = fapiPutScom(i_target,MBS_MCBIST01_MCBEMA3Q_0x0201166c,l_data_buffer_64); if(rc) return(rc);
+ rc = fapiPutScom(i_target_centaur,MBS_MCBIST01_MCBEMA1Q_0x0201166a,l_data_buffer_64); if(rc) return(rc);
+ rc = fapiPutScom(i_target_centaur,MBS_MCBIST01_MCBEMA2Q_0x0201166b,l_data_buffer_64); if(rc) return(rc);
+ rc = fapiPutScom(i_target_centaur,MBS_MCBIST01_MCBEMA3Q_0x0201166c,l_data_buffer_64); if(rc) return(rc);
//PORT - B
- rc = fapiPutScom(i_target,MBS_MCBIST01_MCBEMB1Q_0x0201166d,l_data_buffer_64); if(rc) return(rc);
- rc = fapiPutScom(i_target,MBS_MCBIST01_MCBEMB2Q_0x0201166e,l_data_buffer_64); if(rc) return(rc);
- rc = fapiPutScom(i_target,MBS_MCBIST01_MCBEMB3Q_0x0201166f,l_data_buffer_64); if(rc) return(rc);
+ rc = fapiPutScom(i_target_centaur,MBS_MCBIST01_MCBEMB1Q_0x0201166d,l_data_buffer_64); if(rc) return(rc);
+ rc = fapiPutScom(i_target_centaur,MBS_MCBIST01_MCBEMB2Q_0x0201166e,l_data_buffer_64); if(rc) return(rc);
+ rc = fapiPutScom(i_target_centaur,MBS_MCBIST01_MCBEMB3Q_0x0201166f,l_data_buffer_64); if(rc) return(rc);
// MBS 23
- rc = fapiPutScom(i_target,0x0201176a,l_data_buffer_64); if(rc) return(rc);
- rc = fapiPutScom(i_target,0x0201176b,l_data_buffer_64); if(rc) return(rc);
- rc = fapiPutScom(i_target,0x0201176c,l_data_buffer_64); if(rc) return(rc);
+ rc = fapiPutScom(i_target_centaur,0x0201176a,l_data_buffer_64); if(rc) return(rc);
+ rc = fapiPutScom(i_target_centaur,0x0201176b,l_data_buffer_64); if(rc) return(rc);
+ rc = fapiPutScom(i_target_centaur,0x0201176c,l_data_buffer_64); if(rc) return(rc);
//PORT - B
- rc = fapiPutScom(i_target,0x0201176d,l_data_buffer_64); if(rc) return(rc);
- rc = fapiPutScom(i_target,0x0201176e,l_data_buffer_64); if(rc) return(rc);
- rc = fapiPutScom(i_target,0x0201176f,l_data_buffer_64); if(rc) return(rc);
+ rc = fapiPutScom(i_target_centaur,0x0201176d,l_data_buffer_64); if(rc) return(rc);
+ rc = fapiPutScom(i_target_centaur,0x0201176e,l_data_buffer_64); if(rc) return(rc);
+ rc = fapiPutScom(i_target_centaur,0x0201176f,l_data_buffer_64); if(rc) return(rc);
+
- // rc = fapiPutScom(i_target,MBS_MCBIST01_MCB_ERRCNTA1Q_0x02011664,l_data_buffer_64); if(rc) return(rc);
- // rc = fapiPutScom(i_target,MBS_MCBIST01_MCB_ERRCNTA2Q_0x02011665,l_data_buffer_64); if(rc) return(rc);
- // rc = fapiPutScom(i_target,MBS_MCBIST01_MCB_ERRCNTB1Q_0x02011667,l_data_buffer_64); if(rc) return(rc);
- // rc = fapiPutScom(i_target,MBS_MCBIST01_MCB_ERRCNTB2Q_0x02011668,l_data_buffer_64); if(rc) return(rc);
return rc;
}
@@ -640,32 +559,6 @@ fapi::ReturnCode generic_shmoo::do_mcbist_test(const fapi::Target & i_target)
//uint32_t rc_num =0;
uint8_t l_mcb_status=0;
struct Subtest_info l_sub_info[30];
- //ecmdDataBufferBase l_data_buffer_64(64);
- //rc_num = l_data_buffer_64.flushTo0();if (rc_num){FAPI_ERR( "Error in function mcb_reset_trap:");rc.setEcmdError(rc_num);return rc;}
- //PORT - A
- // rc = fapiPutScom(i_target,MBS_MCBIST01_MCBEMA1Q_0x0201166a,l_data_buffer_64); if(rc) return(rc);
- // rc = fapiPutScom(i_target,MBS_MCBIST01_MCBEMA2Q_0x0201166b,l_data_buffer_64); if(rc) return(rc);
- // rc = fapiPutScom(i_target,MBS_MCBIST01_MCBEMA3Q_0x0201166c,l_data_buffer_64); if(rc) return(rc);
-
- // //PORT - B
- // rc = fapiPutScom(i_target,MBS_MCBIST01_MCBEMB1Q_0x0201166d,l_data_buffer_64); if(rc) return(rc);
- // rc = fapiPutScom(i_target,MBS_MCBIST01_MCBEMB2Q_0x0201166e,l_data_buffer_64); if(rc) return(rc);
- // rc = fapiPutScom(i_target,MBS_MCBIST01_MCBEMB3Q_0x0201166f,l_data_buffer_64); if(rc) return(rc);
-
- // // MBS 23
- // rc = fapiPutScom(i_target,0x0201176a,l_data_buffer_64); if(rc) return(rc);
- // rc = fapiPutScom(i_target,0x0201176b,l_data_buffer_64); if(rc) return(rc);
- // rc = fapiPutScom(i_target,0x0201176c,l_data_buffer_64); if(rc) return(rc);
-
- // //PORT - B
- // rc = fapiPutScom(i_target,0x0201176d,l_data_buffer_64); if(rc) return(rc);
- // rc = fapiPutScom(i_target,0x0201176e,l_data_buffer_64); if(rc) return(rc);
- // rc = fapiPutScom(i_target,0x0201176f,l_data_buffer_64); if(rc) return(rc);
-
- // rc = fapiPutScom(i_target,MBS_MCBIST01_MCB_ERRCNTA1Q_0x02011664,l_data_buffer_64); if(rc) return(rc);
- // rc = fapiPutScom(i_target,MBS_MCBIST01_MCB_ERRCNTA2Q_0x02011665,l_data_buffer_64); if(rc) return(rc);
- // rc = fapiPutScom(i_target,MBS_MCBIST01_MCB_ERRCNTB1Q_0x02011667,l_data_buffer_64); if(rc) return(rc);
- // rc = fapiPutScom(i_target,MBS_MCBIST01_MCB_ERRCNTB2Q_0x02011668,l_data_buffer_64); if(rc) return(rc);
rc = start_mcb(i_target);
if(rc)
@@ -682,7 +575,7 @@ fapi::ReturnCode generic_shmoo::do_mcbist_test(const fapi::Target & i_target)
return rc;
}
- //FAPI_INF("\n abhijit is here 1 \n");
+
return rc;
}
@@ -710,6 +603,10 @@ fapi::ReturnCode generic_shmoo::check_error_map(const fapi::Target & i_target,ui
uint8_t rank=0;
uint8_t l_max_byte=10;
uint8_t l_max_nibble=20;
+ uint8_t l_CDarray0[80]={0};
+ uint8_t l_CDarray1[80]={0};
+
+
if(iv_dmm_type==1)
{
@@ -717,15 +614,9 @@ fapi::ReturnCode generic_shmoo::check_error_map(const fapi::Target & i_target,ui
l_max_nibble=18;
}
- // rc=mcb_error_map(i_target,mcbist_error_map,port,i_rank);
- // if(rc)
- // {
- // FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!");
-
- // return rc;
- // }
- rc=mcb_error_map(i_target,mcbist_error_map);
+
+ rc=mcb_error_map(i_target,mcbist_error_map,l_CDarray0,l_CDarray1,count_bad_dq);
if(rc)
{
FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!");
@@ -741,12 +632,7 @@ fapi::ReturnCode generic_shmoo::check_error_map(const fapi::Target & i_target,ui
l_n=0;
for(l_byte=0;l_byte<l_max_byte;++l_byte)
{
- // if(l_byte==9){
- // if(iv_dmm_type==1)
- // {
- // continue;
- // }
- // }
+
//Nibble loop
for(l_nibble=0;l_nibble< MAX_NIBBLES;++l_nibble)
{
@@ -764,19 +650,18 @@ fapi::ReturnCode generic_shmoo::check_error_map(const fapi::Target & i_target,ui
}else{
l_nibble_is=0;
}
- //FAPI_INF("\n the final byte and nibble is %d and %d for rank=%d \n",l_byte_is,l_nibble_is,i_rank);
+
if( mcbist_error_map [l_p][l_rnk][l_byte_is][l_nibble_is] == 1){
//pass=0;
schmoo_error_map[l_p][rank][l_n]=1;
- //FAPI_INF("We are in error and nibble is %d and rank is %d and port is %d \n",l_n,rank,l_p);
+
}
else
{
if(iv_shmoo_param==4){
schmoo_error_map[l_p][rank][l_n]=0;
}
- //pass=0;
- //FAPI_INF("We are in error2");
+
}
} else {
@@ -785,16 +670,14 @@ fapi::ReturnCode generic_shmoo::check_error_map(const fapi::Target & i_target,ui
if( mcbist_error_map [l_p][l_rnk][l_byte][l_nibble] == 1){
//pass=0;
schmoo_error_map[l_p][rank][l_n]=1;
- //FAPI_INF("We are in error and nibble is %d and rank is %d and port is %d \n",l_n,rank,l_p);
+
}
else
{
if(iv_shmoo_param==4){
schmoo_error_map[l_p][rank][l_n]=0;
}
- //schmoo_error_map[l_p][rank][l_n]=0;
- //pass=0;
- //FAPI_INF("We are in error2");
+
}
}
l_n++;
@@ -816,86 +699,10 @@ fapi::ReturnCode generic_shmoo::check_error_map(const fapi::Target & i_target,ui
}
}
}
+
+
return rc;
}
-//////////////// will implement later /////////////////////
-/*
-fapi::ReturnCode generic_shmoo::get_error_cnt(const fapi::Target & i_target,uint8_t port,uint8_t rank,uint8_t rank_pair,uint8_t bit,bound_t bound)
-{
-fapi::ReturnCode rc;
-uint8_t l_nibble=0;
-uint8_t l_start_bit=0;
-uint16_t l_err_cnt_C=0;
-uint8_t rc_ecmd=0;
-uint8_t l_length_buffer=7;
-uint8_t l_val=0;
-
-
-input_type l_input_type_e = ISDIMM_DQ;
-ecmdDataBufferBase data_buffer_64(64);
-ecmdDataBufferBase data_buffer_64_1(64);
-
-if(iv_dmm_type==1)
- {
-
- //FAPI_INF("\n ISDIMM input byte=%d and nibble=%d and bit returned is %d \n",l_byte,l_nibble,l_val);
- rc=rosetta_map(i_target,port,l_input_type_e,bit,0,l_val);if(rc) return rc;
- //FAPI_INF("\n ISDIMM input byte=%d and nibble=%d and bit returned is %d \n",l_byte,l_nibble,l_val);
- l_nibble=l_val/4;
-
- }else{
-
-l_nibble=bit/4;
-}
-
-if(port==0)
- {
- if(l_nibble<9)
- {
- rc = fapiGetScom(i_target,MBS_MCBIST01_MCB_ERRCNTA1Q_0x02011664,data_buffer_64); if(rc) return rc;
- l_start_bit=l_nibble*7;
- rc_ecmd=data_buffer_64.extractToRight(&l_err_cnt_C,l_start_bit,l_length_buffer);if (rc_ecmd){ rc.setEcmdError(rc_ecmd); return rc;}
- }
- else
- {
- rc = fapiGetScom(i_target,MBS_MCBIST01_MCB_ERRCNTA2Q_0x02011665,data_buffer_64); if(rc) return rc;
- l_nibble=l_nibble-9;
- l_start_bit=l_nibble*7;
- rc_ecmd=data_buffer_64.extractToRight(&l_err_cnt_C,l_start_bit,l_length_buffer);if (rc_ecmd){ rc.setEcmdError(rc_ecmd); return rc;}
- }
- }else
- {
- if(l_nibble<9)
- {
- rc = fapiGetScom(i_target,MBS_MCBIST01_MCB_ERRCNTB1Q_0x02011667,data_buffer_64_1); if(rc) return rc;
- l_start_bit=l_nibble*7;
- rc_ecmd=data_buffer_64.extractToRight(&l_err_cnt_C,l_start_bit,l_length_buffer);if (rc_ecmd){ rc.setEcmdError(rc_ecmd); return rc;}
- }
- else
- {
- rc = fapiGetScom(i_target,MBS_MCBIST01_MCB_ERRCNTB2Q_0x02011668,data_buffer_64_1); if(rc) return rc;
- l_nibble=l_nibble-9;
- l_start_bit=l_nibble*7;
- rc_ecmd=data_buffer_64.extractToRight(&l_err_cnt_C,l_start_bit,l_length_buffer);if (rc_ecmd){ rc.setEcmdError(rc_ecmd); return rc;}
- }
- }
- if(bound==RIGHT)
- {
- if(l_err_cnt_C){
- SHMOO[iv_shmoo_type].MBA.P[port].S[rank].K.right_err_cnt[bit][rank_pair]=l_err_cnt_C;
- }
- FAPI_INF("\n THE PORT=%d Rank=%d dq=%d and error count=%d \n",port,rank,bit,SHMOO[iv_shmoo_type].MBA.P[port].S[rank].K.right_err_cnt[bit][rank_pair]);
- }else {
- if(l_err_cnt_C){
- SHMOO[iv_shmoo_type].MBA.P[port].S[rank].K.left_err_cnt[bit][rank_pair]=l_err_cnt_C;
-}
- FAPI_INF("\n THE PORT=%d Rank=%d dq=%d and error count=%d \n",port,rank,bit,SHMOO[iv_shmoo_type].MBA.P[port].S[rank].K.left_err_cnt[bit][rank_pair]);
- }
- return rc;
-
-}
-
-*/
/*------------------------------------------------------------------------------
* Function: init_multi_array
@@ -903,13 +710,12 @@ if(port==0)
*
* Parameters: the array address and the initial value
* ---------------------------------------------------------------------------*/
-void generic_shmoo::init_multi_array(uint32_t (&array)[MAX_DQ][MAX_RPS],uint32_t init_val)
+void generic_shmoo::init_multi_array(uint16_t (&array)[MAX_DQ],uint16_t init_val)
{
- uint8_t l_byte,l_nibble,l_bit,l_rp;
+ uint8_t l_byte,l_nibble,l_bit;
uint8_t l_dq=0;
- for (l_rp=0;l_rp<MAX_RPS;++l_rp)
- {// Byte loop
+ // Byte loop
for(l_byte=0;l_byte<iv_MAX_BYTES;++l_byte)
{ //Nibble loop
@@ -919,116 +725,21 @@ void generic_shmoo::init_multi_array(uint32_t (&array)[MAX_DQ][MAX_RPS],uint32_
for(l_bit=0;l_bit<MAX_BITS;++l_bit)
{
l_dq=8*l_byte+4*l_nibble+l_bit;
- array[l_dq][l_rp]=init_val;
+ array[l_dq]=init_val;
}
}
}
- }
-
-}
-/*------------------------------------------------------------------------------
- * Function: init_multi_array_dqs
- * Description : This function do the initialization of various schmoo parameters
- *
- * Parameters: the array address and the initial value
- * ---------------------------------------------------------------------------*/
-fapi::ReturnCode generic_shmoo::init_multi_array_dqs(uint32_t (&array)[MAX_DQ][MAX_RPS],uint32_t init_val)
-{
- fapi::ReturnCode rc;
- uint8_t l_byte,l_nibble,l_bit,l_rp;
- uint8_t l_dq=0;
- for (l_rp=0;l_rp<MAX_RPS;++l_rp)
- {// Byte loop
-
- for(l_byte=0;l_byte<iv_MAX_BYTES;++l_byte)
- { //Nibble loop
- for(l_nibble=0;l_nibble< MAX_NIBBLES;++l_nibble)
- {
- //Bit loop
- for(l_bit=0;l_bit<MAX_BITS;++l_bit)
- {
- l_dq=8*l_byte+4*l_nibble+l_bit;
- array[l_dq][l_rp]=init_val;
- }
- }
- }
- }
-return rc;
-}
-/*------------------------------------------------------------------------------
- * Function: get_all_noms
- * Description : This function gets the nominal values for each DQ
- *
- * Parameters: Target:MBA
- * ---------------------------------------------------------------------------*/
-fapi::ReturnCode generic_shmoo::get_all_noms(const fapi::Target & i_target)
-{
- fapi::ReturnCode rc;
- uint8_t l_rnk,l_byte,l_nibble,l_bit;
- uint8_t i_rnk=0;
- uint8_t i_rp=0;
- uint32_t val=0;
- uint8_t l_dq=0;
- uint8_t l_p=0;
-
- input_type_t l_input_type_e = WR_DQ;
- access_type_t l_access_type_e = READ ;
- FAPI_DBG("mss_generic_shmoo : get_all_noms : Reading in all nominal values");
-
-
- if(iv_shmoo_type == 4)
- {
- l_input_type_e = WR_DQS;
-
- }
- else if(iv_shmoo_type == 8)
- {
-
- l_input_type_e = RD_DQ;
-
- }
- else if(iv_shmoo_type == 3)
- {
-
- l_input_type_e = RD_DQS;
-
- }
-
- for (l_p=0;l_p<MAX_PORT;l_p++){
- for (l_rnk=0;l_rnk<iv_MAX_RANKS[l_p];++l_rnk)
- {// Byte loop
- rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc;
- i_rnk=valid_rank[l_rnk];
- rc = mss_getrankpair(i_target,l_p,i_rnk,&i_rp,valid_rank);if(rc) return rc;
- for(l_byte=0;l_byte<iv_MAX_BYTES;++l_byte)
- { //Nibble loop
- for(l_nibble=0;l_nibble< MAX_NIBBLES;++l_nibble)
- {
- //Bit loop
- for(l_bit=0;l_bit<MAX_BITS;++l_bit)
- {
- l_dq=8*l_byte+4*l_nibble+l_bit;
-
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,i_rnk,l_input_type_e,l_dq,0,val);if(rc) return rc;
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.nom_val[l_dq][i_rp]=val;
- #ifdef DBG
- FAPI_INF("Nominal Value for port=%d rank=%d and rank pair=%d and dq=%d is %d",l_p,i_rnk,i_rp,l_dq,val);
- #endif
- }
- }
- }
- }
-}
- return rc;
+
}
+
fapi::ReturnCode generic_shmoo::set_all_binary(const fapi::Target & i_target,bound_t bound)
{
fapi::ReturnCode rc;
uint8_t l_rnk,l_byte,l_nibble,l_bit;
- uint8_t i_rnk=0;
- uint8_t i_rp=0;
+ //uint8_t i_rnk=0;
+ //uint8_t i_rp=0;
uint8_t l_dq=0;
uint8_t l_p=0;
@@ -1036,7 +747,7 @@ fapi::ReturnCode generic_shmoo::set_all_binary(const fapi::Target & i_target,bou
uint32_t l_max_offset=64;
- if(iv_shmoo_type == 8)
+ if(iv_shmoo_type == 1)
{
l_max=127;
@@ -1046,9 +757,7 @@ fapi::ReturnCode generic_shmoo::set_all_binary(const fapi::Target & i_target,bou
for (l_p=0;l_p<MAX_PORT;l_p++){
for (l_rnk=0;l_rnk<iv_MAX_RANKS[l_p];++l_rnk)
{// Byte loop
- rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc;
- i_rnk=valid_rank[l_rnk];
- rc = mss_getrankpair(i_target,l_p,i_rnk,&i_rp,valid_rank);if(rc) return rc;
+
for(l_byte=0;l_byte<iv_MAX_BYTES;++l_byte)
{ //Nibble loop
for(l_nibble=0;l_nibble< MAX_NIBBLES;++l_nibble)
@@ -1058,30 +767,28 @@ fapi::ReturnCode generic_shmoo::set_all_binary(const fapi::Target & i_target,bou
{
l_dq=8*l_byte+4*l_nibble+l_bit;
- //rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,i_rnk,l_input_type_e,l_dq,0,val);if(rc) return rc;
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.last_pass[l_dq][i_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.nom_val[l_dq][i_rp];
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.curr_val[l_dq][i_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.nom_val[l_dq][i_rp];
+
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.last_pass[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.nom_val[l_dq];
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.curr_val[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.nom_val[l_dq];
if(bound==RIGHT)
{
- if((SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.nom_val[l_dq][i_rp]+l_max_offset)>l_max){
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.last_fail[l_dq][i_rp]=l_max;
+ if((SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.nom_val[l_dq]+l_max_offset)>l_max){
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.last_fail[l_dq]=l_max;
}else{
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.last_fail[l_dq][i_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.nom_val[l_dq][i_rp]+l_max_offset;
- //FAPI_INF("\n the last failure for right %d ",SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.last_fail[l_dq][i_rp]);
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.last_fail[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.nom_val[l_dq]+l_max_offset;
+ //FAPI_INF("\n the last failure for right %d ",SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.last_fail[l_dq][i_rp]);
}
}else{
- if(SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.nom_val[l_dq][i_rp]>64){
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.last_fail[l_dq][i_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.nom_val[l_dq][i_rp]-l_max_offset;
- //FAPI_INF("\n the last failure for left %d ",SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.last_fail[l_dq][i_rp]);
+ if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.nom_val[l_dq]>64){
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.last_fail[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.nom_val[l_dq]-l_max_offset;
+ //FAPI_INF("\n the last failure for left %d ",SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.last_fail[l_dq][i_rp]);
}else{
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.last_fail[l_dq][i_rp]=0;
- //FAPI_INF("\n the last failure for left %d ",SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.last_fail[l_dq][i_rp]);
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.last_fail[l_dq]=0;
+ //FAPI_INF("\n the last failure for left %d ",SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.last_fail[l_dq][i_rp]);
}
}
- //SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.nom_val[l_dq][i_rp]=val;
-
- //FAPI_DBG("Nominal Value for port=%d rank=%d and rank pair=%d and dq=%d is %d",l_p,i_rnk,i_rp,l_dq,val);
+
}
}
@@ -1090,60 +797,34 @@ fapi::ReturnCode generic_shmoo::set_all_binary(const fapi::Target & i_target,bou
}
return rc;
}
-
-fapi::ReturnCode generic_shmoo::get_all_noms_data_disable(const fapi::Target & i_target)
+/*------------------------------------------------------------------------------
+ * Function: get_all_noms
+ * Description : This function gets the nominal values for each DQ
+ *
+ * Parameters: Target:MBA
+ * ---------------------------------------------------------------------------*/
+fapi::ReturnCode generic_shmoo::get_all_noms(const fapi::Target & i_target)
{
fapi::ReturnCode rc;
- uint8_t l_rnk,l_block;
+ uint8_t l_rnk,l_byte,l_nibble,l_bit;
uint8_t i_rnk=0;
uint8_t i_rp=0;
- uint32_t val=0;
-
+ uint16_t val=0;
+ uint8_t l_dq=0;
uint8_t l_p=0;
- input_type_t l_input_type_e = DATA_DISABLE;
+ input_type_t l_input_type_e = WR_DQ;
access_type_t l_access_type_e = READ ;
FAPI_DBG("mss_generic_shmoo : get_all_noms : Reading in all nominal values");
-
-
- for (l_p=0;l_p<MAX_PORT;l_p++){
- for (l_rnk=0;l_rnk<iv_MAX_RANKS[l_p];++l_rnk)
- {// Byte loop
- rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc;
- i_rnk=valid_rank[l_rnk];
- rc = mss_getrankpair(i_target,l_p,i_rnk,&i_rp,valid_rank);if(rc) return rc;
- for(l_block=0;l_block<5;++l_block)
- { //DP 18 Loop
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,i_rnk,l_input_type_e,l_block,0,val);if(rc) return rc;
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.datadis_nom_val[l_block]=val;
- FAPI_INF("Nominal Value for data bit disable port=%d rank=%d and rank pair=%d and dq=%d is %d",l_p,i_rnk,i_rp,l_block,val);
+ if(iv_shmoo_type == 1)
+ {
+ l_input_type_e = RD_DQ;
+
+ }
- }
- }
-}
- return rc;
-}
-
-fapi::ReturnCode generic_shmoo::put_all_noms_data_disable(const fapi::Target & i_target,uint8_t flag)
-{
- fapi::ReturnCode rc;
-
- uint8_t l_rnk,l_block;
- uint8_t i_rnk=0;
- uint8_t i_rp=0;
- uint32_t val=0;
-
- uint8_t l_p=0;
-
- input_type_t l_input_type_e = DATA_DISABLE;
- access_type_t l_access_type_e = WRITE ;
- FAPI_DBG("mss_generic_shmoo : get_all_noms : Reading in all nominal values");
-
-
-
for (l_p=0;l_p<MAX_PORT;l_p++){
for (l_rnk=0;l_rnk<iv_MAX_RANKS[l_p];++l_rnk)
@@ -1151,25 +832,31 @@ fapi::ReturnCode generic_shmoo::put_all_noms_data_disable(const fapi::Target & i
rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc;
i_rnk=valid_rank[l_rnk];
rc = mss_getrankpair(i_target,l_p,i_rnk,&i_rp,valid_rank);if(rc) return rc;
- for(l_block=0;l_block<5;++l_block)
- { //DP 18 Loop
- val=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.datadis_nom_val[l_block];
- FAPI_INF("Nominal Value for data bit disable while restoring port=%d rank=%d and rank pair=%d and dq=%d is %d",l_p,i_rnk,i_rp,l_block,val);
- if(flag==1){
-
- val=0;
- FAPI_INF("\n the flushing value=%d \n",val);
- }
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,i_rnk,l_input_type_e,l_block,0,val);if(rc) return rc;
+ for(l_byte=0;l_byte<iv_MAX_BYTES;++l_byte)
+ { //Nibble loop
+ for(l_nibble=0;l_nibble< MAX_NIBBLES;++l_nibble)
+ {
+ //Bit loop
+ for(l_bit=0;l_bit<MAX_BITS;++l_bit)
+ {
+ l_dq=8*l_byte+4*l_nibble+l_bit;
-
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,i_rnk,l_input_type_e,l_dq,0,val);if(rc) return rc;
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.nom_val[l_dq]=val;
+
+ // FAPI_INF("%s:Nominal Value for port=%d rank=%d and rank pair=%d and dq=%d is %d",i_target.toEcmdString(),l_p,i_rnk,i_rp,l_dq,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.nom_val[l_dq]);
}
+ }
+ }
}
}
+
return rc;
}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
fapi::ReturnCode generic_shmoo::get_all_noms_dqs(const fapi::Target & i_target)
{
fapi::ReturnCode rc;
@@ -1177,13 +864,13 @@ fapi::ReturnCode generic_shmoo::get_all_noms_dqs(const fapi::Target & i_target)
uint8_t l_rnk;
//uint8_t i_rnk=0;
uint8_t i_rp=0;
- uint32_t val=0;
+ uint16_t val=0;
//uint8_t l_dq=0;
uint8_t l_p=0;
uint8_t l_max_nibble=20;
uint8_t rank=0;
uint8_t l_n=0;
- FAPI_INF("mss_generic_shmoo : get_all_noms_dqs : Reading in all nominal values and schmoo type=%d \n",iv_shmoo_type);
+ FAPI_INF("%s:mss_generic_shmoo : get_all_noms_dqs : Reading in all nominal values and schmoo type=%d \n",i_target.toEcmdString(),iv_shmoo_type);
if(iv_dmm_type==1)
{
@@ -1195,11 +882,7 @@ fapi::ReturnCode generic_shmoo::get_all_noms_dqs(const fapi::Target & i_target)
FAPI_DBG("mss_generic_shmoo : get_all_noms : Reading in all nominal values");
- if(iv_shmoo_type == 4)
- {
- l_input_type_e = WR_DQS;
-
- }
+
for (l_p=0;l_p<MAX_PORT;l_p++){
@@ -1210,11 +893,11 @@ fapi::ReturnCode generic_shmoo::get_all_noms_dqs(const fapi::Target & i_target)
rc = mss_getrankpair(i_target,l_p,rank,&i_rp,valid_rank);if(rc) return rc;
for (l_n=0; l_n<l_max_nibble;l_n++){
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_n,0,val);if(rc) return rc;
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[rank].K.nom_val[l_n][i_rp]=val;
- #ifdef DBG
- FAPI_INF("Nominal Value for port=%d rank=%d and rank pair=%d and dqs=%d is %d",l_p,rank,i_rp,l_n,SHMOO[iv_shmoo_type].MBA.P[l_p].S[rank].K.nom_val[l_n][i_rp]);
- #endif
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_n,0,val);if(rc) return rc;
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.curr_val[l_n]=val;
+
+ //FAPI_INF("%s:Nominal Value for port=%d rank=%d and rank pair=%d and dqs=%d is %d",i_target.toEcmdString(),l_p,rank,i_rp,l_n,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.curr_val[l_n]);
+
}
}
}
@@ -1226,76 +909,6 @@ fapi::ReturnCode generic_shmoo::get_all_noms_dqs(const fapi::Target & i_target)
return rc;
}
-fapi::ReturnCode generic_shmoo::get_all_noms_gate(const fapi::Target & i_target)
-{
- fapi::ReturnCode rc;
-
-
- uint8_t i_rnk=0;
-
-
- //uint8_t l_dq=0;
- uint8_t l_cmd=0;
- uint8_t l_p=0;
- uint8_t l_addr=0;
- uint8_t l_cntrl=0;
- uint8_t l_clk=0;
- uint32_t l_delay=0;
-
- #ifdef DEBUG
- FAPI_INF("mss_generic_shmoo : get_all_noms_gate : Reading in all nominal values and schmoo type=%d \n",iv_shmoo_type);
- #endif
-
- input_type_t l_input_type_e = COMMAND;
- access_type_t l_access_type_e = READ ;
- FAPI_DBG("mss_generic_shmoo : get_all_noms : Reading in all nominal values");
-
-
-
-
-
- for (l_p=0;l_p<MAX_PORT;l_p++){
- FAPI_INF("\n PORT=%d \n",l_p);
- for (l_cmd=0;l_cmd<3;l_cmd++)
- {
- l_input_type_e = COMMAND;
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cmd,1,l_delay);if(rc) return rc;
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd]=l_delay;
- FAPI_INF("\n Command = %d and value = %d \n",l_cmd,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd]);
- FAPI_INF("\n Command = %d and original value = %d \n",l_cmd,l_delay);
- }
-
- for (l_addr=0;l_addr<19;l_addr++)
- {
- l_input_type_e = ADDRESS;
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_addr,1,l_delay);if(rc) return rc;
- //FAPI_INF("\n Saurabh is here \n");
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr]=l_delay;
- //FAPI_INF("\n address = %d and value = %d \n",l_addr,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr]);
- }
- for (l_cntrl=0;l_cntrl<20;l_cntrl++)
- {
- l_input_type_e = CONTROL;
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cntrl,1,l_delay);if(rc) return rc;
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl]=l_delay;
- //FAPI_INF("\n CONTROL = %d and value = %d \n",l_cntrl,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl]);
- }
-
- for (l_clk=0;l_clk<8;l_clk++)
- {
- l_input_type_e = CLOCK;
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,1,l_input_type_e,l_clk,1,l_delay);if(rc) return rc;
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk]=l_delay;
- FAPI_INF("\n CLOCK = %d and value = %d \n",l_clk,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk]);
- }
- }
-
-
-
- return rc;
-}
-
-
/*------------------------------------------------------------------------------
* Function: knob_update
@@ -1316,6 +929,7 @@ fapi::ReturnCode generic_shmoo::knob_update(const fapi::Target & i_target,bound_
uint8_t l_dq=0;
access_type_t l_access_type_e = WRITE;
uint8_t l_n=0;
+ uint8_t l_i=0;
uint8_t l_p=0;
uint16_t l_delay=0;
@@ -1326,6 +940,13 @@ fapi::ReturnCode generic_shmoo::knob_update(const fapi::Target & i_target,bound_
uint8_t l_SCHMOO_NIBBLES=20;
uint8_t i_rp=0;
+ uint8_t l_CDarray0[80]={0};
+ uint8_t l_CDarray1[80]={0};
+
+
+
+
+
if(iv_dmm_type==1)
{
l_SCHMOO_NIBBLES=18;
@@ -1349,7 +970,7 @@ fapi::ReturnCode generic_shmoo::knob_update(const fapi::Target & i_target,bound_
}
}
- if(scenario == 8) {
+ if(scenario == 1) {
l_input_type_e = RD_DQ;
l_max_limit=127;
}
@@ -1357,9 +978,8 @@ fapi::ReturnCode generic_shmoo::knob_update(const fapi::Target & i_target,bound_
if(bound==RIGHT)
{
-
- if(algorithm==SEQ_LIN)
- {
+
+
for (l_delay=1;((pass==0));l_delay++){
@@ -1368,27 +988,47 @@ fapi::ReturnCode generic_shmoo::knob_update(const fapi::Target & i_target,bound_
for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
{
l_dq=bit;
+
rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
rank=valid_rank[l_rank];
rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
- //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq,bound);
if(schmoo_error_map[l_p][rank][l_n]==0){
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- #ifdef DBG
- FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- #endif
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
- //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq);
- //get_error_cnt(const fapi::Target & i_target,uint8_t port,uint8_t rank,uint8_t rank_pair,uint8_t bit)
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay;
+
+
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_dq]);if(rc) return rc;
+
}
+ rc=mcb_error_map(i_target,mcbist_error_map,l_CDarray0,l_CDarray1,count_bad_dq);if(rc) return rc;
- if(SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]>l_max_limit){
+
+ if(l_p == 0){
+
+ for(l_i=0;l_i<count_bad_dq[0];l_i++){
+
+ if(l_CDarray0[l_i]==l_dq){
+
+ schmoo_error_map[l_p][rank][l_n]=1;
+ }
+ }
+ }else{
+ for(l_i=0;l_i<count_bad_dq[1];l_i++){
+
+ if(l_CDarray1[l_i]==l_dq){
+
+ schmoo_error_map[l_p][rank][l_n]=1;
+ }
+ }
+ }
+ if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_dq]>l_max_limit){
schmoo_error_map[l_p][rank][l_n]=1;
}
+
l_dq=l_dq+4;
}
@@ -1403,7 +1043,7 @@ fapi::ReturnCode generic_shmoo::knob_update(const fapi::Target & i_target,bound_
FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
return rc;
}
- //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq);
+
rc=check_error_map(i_target,l_p,pass);
if(rc)
{
@@ -1422,19 +1062,19 @@ fapi::ReturnCode generic_shmoo::knob_update(const fapi::Target & i_target,bound_
rank=valid_rank[l_rank];
rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]);if(rc) return rc;
l_dq=l_dq+4;
}
}
}
- }
-
+
+
}
if(bound==LEFT)
{
- if(algorithm==SEQ_LIN)
- {
+
for (l_delay=1;(pass==0);l_delay++){
@@ -1447,19 +1087,32 @@ fapi::ReturnCode generic_shmoo::knob_update(const fapi::Target & i_target,bound_
rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
- //l_max=SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp];
- //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq,bound);
+
if(schmoo_error_map[l_p][rank][l_n]==0){
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- //l_max=SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp];
- #ifdef DBG
- FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- #endif
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_dq]);if(rc) return rc;
}
- if(SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp] == 0){
+
+ rc=mcb_error_map(i_target,mcbist_error_map,l_CDarray0,l_CDarray1,count_bad_dq);if(rc) return rc;
+
+ if(l_p==0){
+ for(l_i=0;l_i<count_bad_dq[0];l_i++){
+ if(l_CDarray0[l_i]==l_dq){
+ schmoo_error_map[l_p][rank][l_n]=1;
+ }
+ }
+ }else{
+ for(l_i=0;l_i<count_bad_dq[1];l_i++){
+ if(l_CDarray1[l_i]==l_dq){
+ schmoo_error_map[l_p][rank][l_n]=1;
+ }
+ }
+ }
+
+ if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_dq] == 0){
schmoo_error_map[l_p][rank][l_n] = 1;
}
@@ -1495,19 +1148,21 @@ rc=check_error_map(i_target,l_p,pass);
rank=valid_rank[l_rank];
rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc;
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]);if(rc) return rc;
l_dq=l_dq+4;
}
}
}
- }
+
}
+
+
return rc;
}
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
fapi::ReturnCode generic_shmoo::knob_update_bin(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag)
{
fapi::ReturnCode rc;
@@ -1521,6 +1176,10 @@ fapi::ReturnCode generic_shmoo::knob_update_bin(const fapi::Target & i_target,bo
uint8_t l_dq=0;
access_type_t l_access_type_e = WRITE;
uint8_t l_n=0;
+ uint8_t l_i=0;
+ uint8_t l_flag_p0=0;
+ uint8_t l_flag_p1=0;
+
uint8_t l_p=0;
//uint16_t l_delay=0;
@@ -1528,9 +1187,12 @@ fapi::ReturnCode generic_shmoo::knob_update_bin(const fapi::Target & i_target,bo
//uint16_t l_max_limit=500;
uint8_t rank=0;
uint8_t l_rank=0;
+ uint16_t l_curr_diff=0;
uint8_t l_SCHMOO_NIBBLES=20;
uint8_t i_rp=0;
uint8_t l_status=1;
+ uint8_t l_CDarray0[80];
+ uint8_t l_CDarray1[80];
if(iv_dmm_type==1)
{
@@ -1564,11 +1226,11 @@ fapi::ReturnCode generic_shmoo::knob_update_bin(const fapi::Target & i_target,bo
}
}
- if(scenario == 8) {
+ if(scenario == 1) {
l_input_type_e = RD_DQ;
//l_max_limit=127;
}
-
+ rc=mcb_error_map(i_target,mcbist_error_map,l_CDarray0,l_CDarray1,count_bad_dq);if(rc) return rc;
if(bound==RIGHT)
{
@@ -1603,53 +1265,76 @@ fapi::ReturnCode generic_shmoo::knob_update_bin(const fapi::Target & i_target,bo
rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
+ l_flag_p0=0;
+ l_flag_p1=0;
+ if(l_p == 0){
+ for(l_i=0;l_i<count_bad_dq[0];l_i++){
+ if(l_CDarray0[l_i]==l_dq){
+ schmoo_error_map[l_p][rank][l_n]=1;
+ l_flag_p0=1;
+
+
+ }
+ }
+ }else{
+ for(l_i=0;l_i<count_bad_dq[1];l_i++){
+
+ if(l_CDarray1[l_i]==l_dq){
+ schmoo_error_map[l_p][rank][l_n]=1;
+ l_flag_p1=1;
+
+ }
+ }
+ }
+
+
+
+
if(schmoo_error_map[l_p][rank][l_n]==0){
- SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp];
- SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]=(SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]+SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp])/2;
- // FAPI_INF("\n 111111 port=%d nibble=%d rank=%d and bit=%d the last pass value %d the last fail value %d and current value %d\n",l_p,l_n,rank,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp],SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp],SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]);if(rc) return rc;
- if(SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]>SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]){
- SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]-SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp];
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_pass[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_dq];
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_dq]=(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_pass[l_dq]+SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq])/2;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_dq]);if(rc) return rc;
+ if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_pass[l_dq]>SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq]){
+ l_curr_diff=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_pass[l_dq]-SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq];
}else{
- SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]-SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp];
+ l_curr_diff=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq]-SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_pass[l_dq];
}
- if(SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]<=1){
+
+
+
+ if(l_curr_diff<=1){
binary_done_map[l_p][rank][l_n]=1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp];
- //FAPI_INF("\n the right bound for port=%d rank=%d dq=%d is %d \n",l_p,rank,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]);
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq];
+
}
}else{
- SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp];
- SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]=(SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]+SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp])/2;
- //FAPI_INF("\n 2222222 port=%d nibble=%d rank=%d and bit=%d the last pass value %d the last fail value %d and current value %d\n",l_p,l_n,rank,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp],SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp],SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]);if(rc) return rc;
- if(SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]>SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]){
- SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]-SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp];
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_dq];
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_dq]=(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_pass[l_dq]+SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq])/2;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_dq]);if(rc) return rc;
+ if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_pass[l_dq]>SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq]){
+ l_curr_diff=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_pass[l_dq]-SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq];
}else{
- SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]-SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp];
+ l_curr_diff=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq]-SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_pass[l_dq];
+ }
+ if(l_p==0){
+ if(l_flag_p0==1){
+ l_curr_diff=1;
+ }}else{
+ if(l_flag_p1==1){
+ l_curr_diff=1;
+ }
}
- if(SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]<=1){
+
+ if(l_curr_diff<=1){
binary_done_map[l_p][rank][l_n]=1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp];
- //FAPI_INF("\n the right bound for port=%d rank=%d dq=%d is %d \n",l_p,rank,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]);
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq];
+
}
}
- // //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq,bound);
- // if(schmoo_error_map[l_p][rank][l_n]==0){
-
- // SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- // #ifdef DBG
- // FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- // #endif
- // rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
- // //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq);
- // //get_error_cnt(const fapi::Target & i_target,uint8_t port,uint8_t rank,uint8_t rank_pair,uint8_t bit)
- // }
- // if(SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]>l_max_limit){
- // schmoo_error_map[l_p][rank][l_n]=1;
- // }
l_dq=l_dq+4;
@@ -1671,14 +1356,14 @@ fapi::ReturnCode generic_shmoo::knob_update_bin(const fapi::Target & i_target,bo
FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
return rc;
}
- //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq);
+
rc=check_error_map(i_target,l_p,pass);
if(rc)
{
FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
return rc;
}
- //FAPI_INF("\n the status =%d \n",l_status);
+
}while(l_status==1);
@@ -1690,7 +1375,7 @@ fapi::ReturnCode generic_shmoo::knob_update_bin(const fapi::Target & i_target,bo
rank=valid_rank[l_rank];
rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc;
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]);if(rc) return rc;
l_dq=l_dq+4;
}
}
@@ -1731,798 +1416,102 @@ fapi::ReturnCode generic_shmoo::knob_update_bin(const fapi::Target & i_target,bo
rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
- if(schmoo_error_map[l_p][rank][l_n]==0){
- SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp];
- SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]=(SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]+SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp])/2;
- //FAPI_INF("\n 111111 port=%d nibble=%d rank=%d and bit=%d the last pass value %d the last fail value %d and current value %d\n",l_p,l_n,rank,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp],SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp],SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]);if(rc) return rc;
- if(SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]>SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]){
- SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]-SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp];
- }else{
- SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]-SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp];
- }
- if(SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]<=1){
- binary_done_map[l_p][rank][l_n]=1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp];
- //FAPI_INF("\n the left bound for port=%d rank=%d dq=%d is %d \n",l_p,rank,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]);
- }
- }else{
-
- SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp];
- SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]=(SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]+SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp])/2;
- //FAPI_INF("\n 2222222 port=%d nibble=%d rank=%d and bit=%d the last pass value %d the last fail value %d and current value %d\n",l_p,l_n,rank,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp],SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp],SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]);if(rc) return rc;
- if(SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]>SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]){
- SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]-SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp];
- }else{
- SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]-SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp];
- }
- if(SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]<=1){
- binary_done_map[l_p][rank][l_n]=1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp];
- //FAPI_INF("\n the left bound for port=%d rank=%d dq=%d is %d \n",l_p,rank,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]);
- }
- }
- // //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq,bound);
- // if(schmoo_error_map[l_p][rank][l_n]==0){
-
- // SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- // #ifdef DBG
- // FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- // #endif
- // rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
- // //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq);
- // //get_error_cnt(const fapi::Target & i_target,uint8_t port,uint8_t rank,uint8_t rank_pair,uint8_t bit)
- // }
-
- // if(SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]>l_max_limit){
- // schmoo_error_map[l_p][rank][l_n]=1;
- // }
-
- l_dq=l_dq+4;
-
- }
-
-
- }
-
- }
- rc=do_mcbist_reset(i_target);
- if(rc)
- {
- FAPI_ERR("generic_shmoo::find_bound do_mcbist_reset failed");
- return rc;
- }
- rc=do_mcbist_test(i_target);
- if(rc)
- {
- FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
- return rc;
- }
- //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq);
- rc=check_error_map(i_target,l_p,pass);
- if(rc)
- {
- FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
- return rc;
- }
- //FAPI_INF("\n the status =%d \n",l_status);
- }while(l_status==1);
-
-
- for (l_p=0;l_p<MAX_PORT;l_p++){
- for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
- {
- l_dq=bit;
- rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
- rank=valid_rank[l_rank];
- rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
- for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+4;
- }
- }
- }
- }
-
-
- }
-
- return rc;
-}
-/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-fapi::ReturnCode generic_shmoo::knob_update_gate(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t pass,bool &flag)
-{
- fapi::ReturnCode rc;
- ecmdDataBufferBase data_buffer_64(64);
- ecmdDataBufferBase data_buffer_64_1(64);
-
-
-
- uint8_t l_rp=0;
- input_type_t l_input_type_e = COMMAND;
-
- access_type_t l_access_type_e = WRITE;
- uint8_t l_n=0;
- uint8_t l_cmd=0;
- uint8_t l_addr=0;
- uint8_t l_cntrl=0;
- uint8_t l_clk=0;
- uint8_t i_rnk=0;
-
-
- uint8_t l_p=0;
- uint32_t l_delay=0;
- //uint32_t l_delay_cac=0;
- uint32_t l_cmd_delay=0;
- uint32_t l_addr_delay=0;
- uint32_t l_cntrl_delay=0;
- uint32_t l_clk_delay=0;
-
- //uint16_t l_max_limit=500;
- uint8_t rank=0;
- uint8_t l_rank=0;
- uint8_t l_SCHMOO_NIBBLES=20;
- uint8_t i_rp=0;
-
- if(iv_dmm_type==1)
- {
- l_SCHMOO_NIBBLES=18;
- }
-
- rc=do_mcbist_reset(i_target);
- if(rc)
- {
- FAPI_ERR("generic_shmoo::find_bound do_mcbist_reset failed");
- return rc;
- }
- //rc = mss_getrankpair(i_target,iv_port,rank,&l_rp,valid_rank);if(rc) return rc;
-
- for (l_p=0;l_p<MAX_PORT;l_p++){
- for(int i=0;i<iv_MAX_RANKS[l_p];i++){
- rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc;
- rank=valid_rank[i];
- for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
- schmoo_error_map[l_p][rank][l_n]=0;
- }
- }
- }
-
-
-
-
- if(bound==RIGHT)
- {
-
- if(algorithm==SEQ_LIN)
- {
-
-
- for (l_delay=1;((pass==0)&&(l_delay<127));l_delay++){
-
- for (l_p=0;l_p<MAX_PORT;l_p++){
- for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
- {
-
- rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
- rank=valid_rank[l_rank];
- rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
- for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
-
-
-
-
-
- if(schmoo_error_map[l_p][rank][l_n]==0){
-
-
- SHMOO[scenario].MBA.P[l_p].S[rank].K.offset[l_n]=l_delay;
-
- }
- }
-
-
- }
-
- }
-
- for (l_p=0;l_p<MAX_PORT;l_p++){
- for (l_cmd=0;l_cmd<3;l_cmd++)
- {
-
- l_cmd_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd]+l_delay;
-
- l_input_type_e = COMMAND;
- if(l_cmd_delay<127){
- //l_delay_cac=l_cmd_delay-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd];
- FAPI_INF("\n port=%d command=%d nominal =%d and write_value=%d \n",l_p,l_cmd,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd],l_cmd_delay);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cmd,0,l_cmd_delay);if(rc) return rc;
- }
- }
- for (l_addr=0;l_addr<19;l_addr++)
- {
-
- l_addr_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr]+l_delay;
- if(l_addr_delay<127){
- l_input_type_e = ADDRESS;
- FAPI_INF("\n port=%d address=%d nominal =%d and write_value=%d \n",l_p,l_addr,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr],l_addr_delay);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_addr,0,l_addr_delay);if(rc) return rc;
- }
- }
- for (l_cntrl=0;l_cntrl<20;l_cntrl++)
- {
- l_cntrl_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl]+l_delay;
- if(l_cntrl_delay<127){
- l_input_type_e = CONTROL;
- FAPI_INF("\n port=%d control=%d nominal =%d and write_value=%d \n",l_p,l_cntrl,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl],l_cntrl_delay);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cntrl,0,l_cntrl_delay);if(rc) return rc;
- }
- }
-
- for (l_clk=0;l_clk<8;l_clk++)
- {
- l_clk_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk]+l_delay;
-
-
-
-
- l_input_type_e = CLOCK;
+ l_flag_p0=0;
+ l_flag_p1=0;
+ if(l_p == 0){
+ for(l_i=0;l_i<count_bad_dq[0];l_i++){
+ if(l_CDarray0[l_i]==l_dq){
+ schmoo_error_map[l_p][rank][l_n]=1;
+ l_flag_p0=1;
- FAPI_INF("\n port=%d clock=%d nominal =%d and write_value=%d \n",l_p,l_clk,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk],l_clk_delay);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_clk,0,l_clk_delay);if(rc) return rc;
}
- }
-
-
- rc=do_mcbist_test(i_target);
- if(rc)
- {
- FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
- return rc;
- }
-
-
- rc=check_error_map(i_target,l_p,pass);
- if(rc)
- {
- FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
- return rc;
}
-
-
- }
-
-
+ }else{
+ for(l_i=0;l_i<count_bad_dq[1];l_i++){
- // PUT HERE NOMINAL BACK .
-
- for (l_p=0;l_p<MAX_PORT;l_p++){
- for (l_cmd=0;l_cmd<3;l_cmd++)
- {
-
- l_cmd_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd];
-
- l_input_type_e = COMMAND;
- if(l_cmd_delay<127){
-
- // l_delay_cac=l_cmd_delay-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd];
+ if(l_CDarray1[l_i]==l_dq){
+ schmoo_error_map[l_p][rank][l_n]=1;
+ l_flag_p1=1;
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cmd,0,l_cmd_delay);if(rc) return rc;
}
- }
- for (l_addr=0;l_addr<19;l_addr++)
- {
-
- l_addr_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr];
- if(l_addr_delay<127){
- l_input_type_e = ADDRESS;
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_addr,0,l_addr_delay);if(rc) return rc;
- }
- }
- for (l_cntrl=0;l_cntrl<20;l_cntrl++)
- {
- l_cntrl_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl];
- if(l_cntrl_delay<127){
- l_input_type_e = CONTROL;
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cntrl,0,l_cntrl_delay);if(rc) return rc;
- }
- }
-
- for (l_clk=0;l_clk<8;l_clk++)
- {
- l_clk_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk];
- l_input_type_e = CLOCK;
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_clk,0,l_clk_delay);if(rc) return rc;
-
- }
- }
-
-
- }
-
+ }
}
-
- if(bound==LEFT)
- {
- if(algorithm==SEQ_LIN)
- {
-
-
- for (l_delay=1;((pass==0)&&(l_delay<127));l_delay++){
-
- for (l_p=0;l_p<MAX_PORT;l_p++){
- for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
- {
- rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
- rank=valid_rank[l_rank];
- rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
- for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
-
-
-
-
-
if(schmoo_error_map[l_p][rank][l_n]==0){
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_pass[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_dq];
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_dq]=(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_pass[l_dq]+SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq])/2;
-
- SHMOO[scenario].MBA.P[l_p].S[rank].K.offset[l_n]=l_delay;
-
- }
- }
-
-
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_dq]);if(rc) return rc;
+ if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_pass[l_dq]>SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq]){
+ l_curr_diff=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_pass[l_dq]-SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq];
+ }else{
+ l_curr_diff=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq]-SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_pass[l_dq];
}
-
- }
-
- for (l_p=0;l_p<MAX_PORT;l_p++){
- for (l_cmd=0;l_cmd<3;l_cmd++)
- {
-
- l_cmd_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd]-l_delay;
-
- l_input_type_e = COMMAND;
- if((l_cmd_delay>0)&&(l_cmd_delay<127)){
- //l_delay_cac=l_cmd_delay-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd];
- FAPI_INF("\n port=%d command=%d nominal =%d and write_value=%d \n",l_p,l_cmd,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd],l_cmd_delay);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cmd,0,l_cmd_delay);if(rc) return rc;
- }
- }
- for (l_addr=0;l_addr<19;l_addr++)
- {
-
- l_addr_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr]-l_delay;
- if((l_addr_delay>0)&&(l_addr_delay<127)){
- l_input_type_e = ADDRESS;
- FAPI_INF("\n port=%d address=%d nominal =%d and write_value=%d \n",l_p,l_addr,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr],l_addr_delay);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_addr,0,l_addr_delay);if(rc) return rc;
- }
- }
- for (l_cntrl=0;l_cntrl<20;l_cntrl++)
- {
- l_cntrl_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl]-l_delay;
- if((l_cntrl_delay>0)&&(l_cntrl_delay<127)){
- l_input_type_e = CONTROL;
- FAPI_INF("\n port=%d control=%d nominal =%d and write_value=%d \n",l_p,l_cntrl,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl],l_cntrl_delay);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cntrl,0,l_cntrl_delay);if(rc) return rc;
- }
- }
-
- for (l_clk=0;l_clk<8;l_clk++)
- {
- l_clk_delay = (SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk]+127)-l_delay;
- l_input_type_e = CLOCK;
-
- FAPI_INF("\n port=%d clock=%d nominal =%d and write_value=%d \n",l_p,l_clk,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk],l_clk_delay);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_clk,0,l_clk_delay);if(rc) return rc;
-
- }
- }
- // put here loops for changing the delay values of CACc
-
- rc=do_mcbist_test(i_target);
- if(rc)
- {
- FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
- return rc;
- }
-
- rc=check_error_map(i_target,l_p,pass);
- if(rc)
- {
- FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
- return rc;
- }
-
-
- }
-
-
-
- // PUT HERE NOMINAL BACK .
-
- for (l_p=0;l_p<MAX_PORT;l_p++){
- for (l_cmd=0;l_cmd<3;l_cmd++)
- {
-
- l_cmd_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd];
-
- l_input_type_e = COMMAND;
- if(l_cmd_delay<127){
-
- // l_delay_cac=l_cmd_delay-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd];
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cmd,0,l_cmd_delay);if(rc) return rc;
- }
- }
- for (l_addr=0;l_addr<19;l_addr++)
- {
-
- l_addr_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr];
- if(l_addr_delay<127){
- l_input_type_e = ADDRESS;
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_addr,0,l_addr_delay);if(rc) return rc;
- }
- }
- for (l_cntrl=0;l_cntrl<20;l_cntrl++)
- {
- l_cntrl_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl];
- if(l_cntrl_delay<127){
- l_input_type_e = CONTROL;
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cntrl,0,l_cntrl_delay);if(rc) return rc;
- }
- }
-
- for (l_clk=0;l_clk<8;l_clk++)
- {
- l_clk_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk];
-
- l_input_type_e = CLOCK;
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_clk,0,l_clk_delay);if(rc) return rc;
-
- }
- }
-
+ if(l_curr_diff<=1){
+ binary_done_map[l_p][rank][l_n]=1;
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq];
- }
-
-
}
-
- return rc;
-}
-fapi::ReturnCode generic_shmoo::knob_update_gate_train(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t pass)
-{
- fapi::ReturnCode rc;
-
- ecmdDataBufferBase l_data_buffer_FIR_64(64);
- ecmdDataBufferBase data_buffer_64(64);
- ecmdDataBufferBase data_buffer_64_1(64);
-
-
-
- uint8_t l_rp=0;
- input_type_t l_input_type_e = COMMAND;
- uint8_t l_dq=0;
- access_type_t l_access_type_e = WRITE;
- uint8_t l_n=0;
- uint8_t l_cmd=0;
- uint8_t l_addr=0;
- uint8_t l_cntrl=0;
- uint8_t l_clk=0;
- uint8_t i_rnk=0;
- uint8_t bit=0;
- uint8_t l_failed=0;
-
- uint8_t l_p=0;
- uint32_t l_delay=0;
- uint32_t l_delay_failed=0;
-
- uint32_t l_cmd_delay=0;
- uint32_t l_addr_delay=0;
- uint32_t l_cntrl_delay=0;
- uint32_t l_clk_delay=0;
-
-
- uint8_t rank=0;
- uint8_t l_rank=0;
- uint8_t l_SCHMOO_NIBBLES=20;
- uint8_t i_rp=0;
- uint32_t rc_num = 0;
- uint8_t flag=1;
-
-
+ }else{
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_dq];
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_dq]=(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_pass[l_dq]+SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq])/2;
- if(iv_dmm_type==1)
- {
- l_SCHMOO_NIBBLES=18;
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_dq]);if(rc) return rc;
+ if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_pass[l_dq]>SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq]){
+ l_curr_diff=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_pass[l_dq]-SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq];
+ }else{
+ l_curr_diff=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq]-SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_pass[l_dq];
}
- rc=do_mcbist_reset(i_target);
- if(rc)
- {
- FAPI_ERR("generic_shmoo::find_bound do_mcbist_reset failed");
- return rc;
- }
-
-
- for (l_p=0;l_p<MAX_PORT;l_p++){
- for(int i=0;i<iv_MAX_RANKS[l_p];i++){
- rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc;
- rank=valid_rank[i];
- for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
- schmoo_error_map[l_p][rank][l_n]=0;
- }
- }
- }
-
-
-
- if(bound==RIGHT)
- {
-
- if(algorithm==SEQ_LIN)
- {
-
+ if(l_p==0){
+ if(l_flag_p0==1){
+ l_curr_diff=1;
+ }}else{
+ if(l_flag_p1==1){
+ l_curr_diff=1;
+ }
+ }
- for (l_delay=1;((pass==0)&&(l_delay<127));l_delay++){
-
- for (l_p=0;l_p<MAX_PORT;l_p++){
- for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
- {
+ if(l_curr_diff<=1){
+ binary_done_map[l_p][rank][l_n]=1;
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.last_fail[l_dq];
- rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
- rank=valid_rank[l_rank];
- rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
- for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
-
-
-
-
-
- if(schmoo_error_map[l_p][rank][l_n]==0){
+ }
+ }
- SHMOO[scenario].MBA.P[l_p].S[rank].K.offset[l_n]=l_delay;
- }
+ l_dq=l_dq+4;
+
}
}
}
-
- for (l_p=0;l_p<MAX_PORT;l_p++){
- l_failed=0;
- for (l_cmd=0;l_cmd<3;l_cmd++)
- {
-
- l_cmd_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd]+l_delay;
-
- l_input_type_e = COMMAND;
- if(l_cmd_delay==127){
- l_failed=1;
- pass=1;
- }
- if((l_cmd_delay<127)&&(l_failed==0)){
-
- FAPI_INF("\n port=%d command=%d nominal =%d and write_value=%d \n",l_p,l_cmd,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd],l_cmd_delay);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cmd,0,l_cmd_delay);if(rc) return rc;
- }
- }
- for (l_addr=0;l_addr<19;l_addr++)
- {
-
- l_addr_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr]+l_delay;
- if(l_addr_delay==127){
- l_failed=1;
- pass=1;
- }
- if((l_addr_delay<127)&&(l_failed==0)){
- l_input_type_e = ADDRESS;
-
- FAPI_INF("\n port=%d address=%d nominal =%d and write_value=%d \n",l_p,l_addr,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr],l_addr_delay);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_addr,0,l_addr_delay);if(rc) return rc;
- }
- }
- for (l_cntrl=0;l_cntrl<20;l_cntrl++)
- {
- l_cntrl_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl]+l_delay;
- if(l_cntrl_delay==127){
- l_failed=1;
- pass=1;
- }
- if((l_cntrl_delay<127)&&(l_failed==0)){
- l_input_type_e = CONTROL;
-
- FAPI_INF("\n port=%d control=%d nominal =%d and write_value=%d \n",l_p,l_cntrl,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl],l_cntrl_delay);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cntrl,0,l_cntrl_delay);if(rc) return rc;
- }
- }
-
- for (l_clk=0;l_clk<8;l_clk++)
- {
- l_clk_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk]+l_delay;
-
-
- l_input_type_e = CLOCK;
-
- FAPI_INF("\n port=%d clock=%d nominal =%d and write_value=%d \n",l_p,l_clk,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk],l_clk_delay);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,1,l_input_type_e,l_clk,0,l_clk_delay);if(rc) return rc;
-
- }
- }
- // call dram training here .
- FAPI_EXEC_HWP(rc, mss_draminit_training, i_target);
- //rc = mss_draminit_training(i_target);
- if(rc){
- l_delay_failed=l_delay-1;
- pass=1;
- }
-
- l_delay_failed=l_delay-1;
- FAPI_INF("\n the value of pass=%d and delay =%d and failed delay=%d \n",pass,l_delay,l_delay_failed);
- ///////
-
-
-}
-
-FAPI_INF("\n EFFECTIVE RIGHT CLOCK ADJUST = %d \n",l_delay_failed);
-rc_num = data_buffer_64.flushTo0();if (rc_num){FAPI_ERR( "Error in function mcb_reset_trap:");rc.setEcmdError(rc_num);return rc;}
-
-rc=put_all_noms_data_disable(i_target,flag);if(rc) return rc;
-
-// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP0_P0_0_0x8000007c0301143F,data_buffer_64); if(rc) return rc;
-// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP0_P0_1_0x8000047c0301143F,data_buffer_64); if(rc) return rc;
-// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP0_P0_2_0x8000087c0301143F,data_buffer_64); if(rc) return rc;
-// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP0_P0_3_0x80000c7c0301143F,data_buffer_64); if(rc) return rc;
-// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP0_P0_4_0x8000107c0301143F,data_buffer_64); if(rc) return rc;
-
-// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP0_P1_0_0x8001007c0301143F,data_buffer_64); if(rc) return rc;
-// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP0_P1_1_0x8001047c0301143F,data_buffer_64); if(rc) return rc;
-// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP0_P1_2_0x8001087c0301143F,data_buffer_64); if(rc) return rc;
-// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP0_P1_3_0x80010c7c0301143F,data_buffer_64); if(rc) return rc;
-// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP0_P1_4_0x8001107c0301143F,data_buffer_64); if(rc) return rc;
-
-// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP1_P0_0_0x8000017c0301143F,data_buffer_64); if(rc) return rc;
-// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP1_P0_1_0x8000057c0301143F,data_buffer_64); if(rc) return rc;
-// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP1_P0_2_0x8000097c0301143F,data_buffer_64); if(rc) return rc;
-// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP1_P0_3_0x80000d7c0301143F,data_buffer_64); if(rc) return rc;
-// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP1_P0_4_0x8000117c0301143F,data_buffer_64); if(rc) return rc;
-
-
-// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP1_P1_0_0x8001017c0301143F,data_buffer_64); if(rc) return rc;
-// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP1_P1_1_0x8001057c0301143F,data_buffer_64); if(rc) return rc;
-// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP1_P1_2_0x8001097c0301143F,data_buffer_64); if(rc) return rc;
-// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP1_P1_3_0x80010d7c0301143F,data_buffer_64); if(rc) return rc;
-// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP1_P1_4_0x8001117c0301143F,data_buffer_64); if(rc) return rc;
-
- for (l_p=0;l_p<MAX_PORT;l_p++){
- for (l_cmd=0;l_cmd<3;l_cmd++)
- {
-
- l_cmd_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd]+l_delay_failed;
-
- l_input_type_e = COMMAND;
- if(l_cmd_delay<127){
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cmd,0,l_cmd_delay);if(rc) return rc;
- }
- }
- for (l_addr=0;l_addr<19;l_addr++)
- {
-
- l_addr_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr]+l_delay_failed;
- if(l_addr_delay<127){
- l_input_type_e = ADDRESS;
-
- //FAPI_INF("\n port=%d address=%d nominal =%d and write_value=%d \n",l_p,l_addr,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr],l_addr_delay);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_addr,0,l_addr_delay);if(rc) return rc;
- }
- }
- for (l_cntrl=0;l_cntrl<20;l_cntrl++)
- {
- l_cntrl_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl]+l_delay_failed;
- if(l_cntrl_delay<127){
- l_input_type_e = CONTROL;
-
- //FAPI_INF("\n port=%d control=%d nominal =%d and write_value=%d \n",l_p,l_cntrl,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl],l_cntrl_delay);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cntrl,0,l_cntrl_delay);if(rc) return rc;
- }
- }
-
- for (l_clk=0;l_clk<8;l_clk++)
- {
- l_clk_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk]+l_delay_failed;
-
- //FAPI_INF("\n clock max value reached for port=%d and value =%d \n",l_p,l_clk_delay);
-
-
- l_input_type_e = CLOCK;
-
- //FAPI_INF("\n port=%d clock=%d nominal =%d and write_value=%d \n",l_p,l_clk,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk],l_clk_delay);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_clk,0,l_clk_delay);if(rc) return rc;
-
- }
- }
-
-
- //rc = mss_draminit_training(i_target);
- FAPI_EXEC_HWP(rc, mss_draminit_training, i_target);
- iv_shmoo_type=4;
- rc=schmoo_setup_mcb(i_target);if(rc) return rc;
- iv_shmoo_type=16;
- // check mcbist for the fail
- rc=do_mcbist_test(i_target);
+ rc=do_mcbist_reset(i_target);
if(rc)
{
- FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
+ FAPI_ERR("generic_shmoo::find_bound do_mcbist_reset failed");
return rc;
}
-
- rc=mcb_error_map(i_target,mcbist_error_map);if(rc) return rc;
-
-
-
-
- }
-
- }
-
- if(bound==LEFT)
- {
- if(algorithm==SEQ_LIN)
- {
-
- for (l_delay=1;(pass==0);l_delay++){
-
- for (l_p=0;l_p<MAX_PORT;l_p++){
- for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
- {
-
- rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
- rank=valid_rank[l_rank];
- rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
- for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
-
- //l_max=SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp];
- //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq,bound);
-
- if(schmoo_error_map[l_p][rank][l_n]==0){
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- //l_max=SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp];
- FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
-
- }
- if(SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp] == 0){
- schmoo_error_map[l_p][rank][l_n] = 1;
- }
-
- l_dq=l_dq+4;
-
- }
- }
-
- }
rc=do_mcbist_test(i_target);
if(rc)
{
FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
return rc;
}
-
-rc=check_error_map(i_target,l_p,pass);
+
+ rc=check_error_map(i_target,l_p,pass);
if(rc)
{
FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
return rc;
}
-
- }
+ }while(l_status==1);
for (l_p=0;l_p<MAX_PORT;l_p++){
@@ -2533,11 +1522,11 @@ rc=check_error_map(i_target,l_p,pass);
rank=valid_rank[l_rank];
rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc;
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]);if(rc) return rc;
l_dq=l_dq+4;
}
}
- }
+ }
}
@@ -2545,13 +1534,14 @@ rc=check_error_map(i_target,l_p,pass);
return rc;
}
+
/*------------------------------------------------------------------------------
* Function: knob_update_dqs
* Description : This is a key function is used to find right and left bound using new algorithm -- there is an option u can chose not to use it by setting a flag
*
- * Parameters: Target:MBA,bound:RIGHT/LEFT,scenario:type of schmoo,iv_port:0/1,rank:0-7,byte:0-7,nibble:0/1,bit:0-3,pass,
+ * Parameters: Target:MBA,bound:RIGHT/LEFT,iv_SHMOO_ON:type of schmoo,iv_port:0/1,rank:0-7,byte:0-7,nibble:0/1,bit:0-3,pass,
* --------------------------------------------------------------------------- */
-fapi::ReturnCode generic_shmoo::knob_update_dqs_by4(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag)
+fapi::ReturnCode generic_shmoo::knob_update_dqs_by4(const fapi::Target & i_target,bound_t bound,uint8_t iv_SHMOO_ON,uint8_t bit,uint8_t pass,bool &flag)
{
fapi::ReturnCode rc;
ecmdDataBufferBase data_buffer_64(64);
@@ -2565,17 +1555,22 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4(const fapi::Target & i_targe
uint8_t l_dq=0;
access_type_t l_access_type_e = WRITE;
uint8_t l_n=0;
- uint8_t l_dqs=4;
+ //uint8_t iv_SHMOO_ON=4;
uint8_t l_p=0;
uint16_t l_delay=0;
+ uint16_t l_delay_dq=0;
//uint32_t l_max=0;
uint16_t l_max_limit=500;
uint8_t rank=0;
uint8_t l_rank=0;
uint8_t l_SCHMOO_NIBBLES=20;
uint8_t i_rp=0;
+ uint8_t l_CDarray0[80];
+ uint8_t l_CDarray1[80];
+
+
rc=do_mcbist_test(i_target);
@@ -2585,7 +1580,7 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4(const fapi::Target & i_targe
return rc;
}
- rc=mcb_error_map(i_target,mcbist_error_map);
+ rc=mcb_error_map(i_target,mcbist_error_map,l_CDarray0,l_CDarray1,count_bad_dq);
if(rc)
{
FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!");
@@ -2597,7 +1592,7 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4(const fapi::Target & i_targe
{
l_SCHMOO_NIBBLES=18;
}
- //rc = mss_getrankpair(i_target,iv_port,rank,&l_rp,valid_rank);if(rc) return rc;
+
for (l_p=0;l_p<MAX_PORT;l_p++){
for(int i=0;i<iv_MAX_RANKS[l_p];i++){
@@ -2628,32 +1623,34 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4(const fapi::Target & i_targe
rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
rank=valid_rank[l_rank];
rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
- //FAPI_INF("\n abhijit here after port=%d rank=%d \n",l_p,rank);
+
for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
l_dq=4*l_n;
if(schmoo_error_map[l_p][rank][l_n]==0){
- //FAPI_INF("\n value of nominal delay scenario=%d rank=%d for port=%d dqs=%d is %d ",l_dqs,rank,l_p,l_n,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);
- SHMOO[l_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_n][l_rp]=SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]+l_delay;
- //FAPI_INF("\n value of delay scenario=%d rank=%d for port=%d dqs=%d is %d ",l_dqs,rank,l_p,l_n,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_n][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_n][l_rp]);if(rc) return rc;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- //FAPI_INF("\n value of delay scenario=%d rank=%d for port=%d bit=%d is %d ",scenario,rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+
+
+
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_n]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_n]+l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_n]);if(rc) return rc;
+ l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc;
l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc;
l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc;
l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc;
}
- //FAPI_INF("\n abhijit here before \n");
- if(SHMOO[l_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]>l_max_limit){
+
+ if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_n]>l_max_limit){
schmoo_error_map[l_p][rank][l_n]=1;
}
@@ -2663,6 +1660,7 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4(const fapi::Target & i_targe
}
}
+
rc=do_mcbist_test(i_target);
if(rc)
{
@@ -2688,8 +1686,8 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4(const fapi::Target & i_targe
rank=valid_rank[l_rank];
rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
- //FAPI_INF("\n restoring nominal values for dqs=%d port=%d rank=%d is %d \n",l_n,l_p,rank,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);if(rc) return rc;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_n]);if(rc) return rc;
}
}
@@ -2703,7 +1701,7 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4(const fapi::Target & i_targe
rank=valid_rank[l_rank];
rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc;
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]);if(rc) return rc;
l_dq=l_dq+4;
}
}
@@ -2716,7 +1714,7 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4(const fapi::Target & i_targe
return rc;
}
- rc=mcb_error_map(i_target,mcbist_error_map);
+ rc=mcb_error_map(i_target,mcbist_error_map,l_CDarray0,l_CDarray1,count_bad_dq);
if(rc)
{
FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!");
@@ -2725,7 +1723,9 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4(const fapi::Target & i_targe
}
}
-
+
+ //FAPI_INF("\n ######################### The Right Bound is over ################################ ");
+
}
if(bound==LEFT)
@@ -2744,29 +1744,27 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4(const fapi::Target & i_targe
rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
l_dq=4*l_n;
- // l_max=SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp];
-
-
+
if(schmoo_error_map[l_p][rank][l_n]==0){
- SHMOO[l_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_n][l_rp]=SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]-l_delay;
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_n][l_rp]);if(rc) return rc;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_n]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_n]-l_delay;
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_n]);if(rc) return rc;
+ l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc;
l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc;
l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc;
l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc;
}
- if(SHMOO[l_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp] == 0){
+ if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_n] == 0){
schmoo_error_map[l_p][rank][l_n] = 1;
}
@@ -2802,7 +1800,7 @@ rc=check_error_map(i_target,l_p,pass);
rank=valid_rank[l_rank];
rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);if(rc) return rc;
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_n]);if(rc) return rc;
}
}
@@ -2817,7 +1815,7 @@ rc=check_error_map(i_target,l_p,pass);
rank=valid_rank[l_rank];
rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc;
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]);if(rc) return rc;
l_dq=l_dq+4;
}
}
@@ -2831,7 +1829,7 @@ rc=check_error_map(i_target,l_p,pass);
return rc;
}
- rc=mcb_error_map(i_target,mcbist_error_map);
+ rc=mcb_error_map(i_target,mcbist_error_map,l_CDarray0,l_CDarray1,count_bad_dq);
if(rc)
{
FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!");
@@ -2840,12 +1838,13 @@ rc=check_error_map(i_target,l_p,pass);
}
}
-
+ //FAPI_INF("\n ######################### The Left Bound is over ################################ ");
}
return rc;
}
+
fapi::ReturnCode generic_shmoo::knob_update_dqs_by4_isdimm(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag)
{
fapi::ReturnCode rc;
@@ -2860,12 +1859,16 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4_isdimm(const fapi::Target &
uint8_t l_dq=0;
access_type_t l_access_type_e = WRITE;
uint8_t l_n=0;
- uint8_t l_dqs=4;
+
uint8_t l_my_dqs=0;
+ uint8_t l_CDarray0[80];
+ uint8_t l_CDarray1[80];
+
uint8_t l_p=0;
uint16_t l_delay=0;
+ uint16_t l_delay_dq=0;
//uint32_t l_max=0;
uint16_t l_max_limit=500;
uint8_t rank=0;
@@ -2880,7 +1883,7 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4_isdimm(const fapi::Target &
return rc;
}
- rc=mcb_error_map(i_target,mcbist_error_map);
+ rc=mcb_error_map(i_target,mcbist_error_map,l_CDarray0,l_CDarray1,count_bad_dq);
if(rc)
{
FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!");
@@ -2893,7 +1896,7 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4_isdimm(const fapi::Target &
l_SCHMOO_NIBBLES=18;
}
uint8_t l_dqs_arr[18]={0,9,1,10,2,11,3,12,4,13,5,14,6,15,7,16,8,17};
- //rc = mss_getrankpair(i_target,iv_port,rank,&l_rp,valid_rank);if(rc) return rc;
+
for (l_p=0;l_p<MAX_PORT;l_p++){
for(int i=0;i<iv_MAX_RANKS[l_p];i++){
@@ -2924,33 +1927,32 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4_isdimm(const fapi::Target &
rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
rank=valid_rank[l_rank];
rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
- //FAPI_INF("\n abhijit here after port=%d rank=%d \n",l_p,rank);
+
for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
l_dq=4*l_n;
l_my_dqs=l_dqs_arr[l_n];
if(schmoo_error_map[l_p][rank][l_n]==0){
- // FAPI_INF("\n value of nominal delay scenario=%d rank=%d for port=%d dqs=%d is %d ",l_dqs,rank,l_p,l_my_dqs,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_my_dqs][l_rp]);
- SHMOO[l_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_my_dqs][l_rp]=SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_my_dqs][l_rp]+l_delay;
- // FAPI_INF("\n value of delay scenario=%d rank=%d for port=%d dqs=%d is %d ",l_dqs,rank,l_p,l_my_dqs,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_my_dqs][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_my_dqs,0,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_my_dqs][l_rp]);if(rc) return rc;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- //FAPI_INF("\n value of delay scenario=%d rank=%d for port=%d bit=%d is %d ",scenario,rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_my_dqs]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_my_dqs]+l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_my_dqs,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[rank].K.rb_regval[l_my_dqs]);if(rc) return rc;
+ l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc;
l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay;
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc;
l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc;
l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc;
}
- //FAPI_INF("\n abhijit here before \n");
- if(SHMOO[l_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]>l_max_limit){
+
+ if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[rank].K.rb_regval[l_my_dqs]>l_max_limit){
schmoo_error_map[l_p][rank][l_n]=1;
}
@@ -2985,8 +1987,8 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4_isdimm(const fapi::Target &
rank=valid_rank[l_rank];
rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
- //FAPI_INF("\n restoring nominal values for dqs=%d port=%d rank=%d is %d \n",l_n,l_p,rank,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);if(rc) return rc;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_n]);if(rc) return rc;
}
}
@@ -3001,7 +2003,7 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4_isdimm(const fapi::Target &
rank=valid_rank[l_rank];
rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc;
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]);if(rc) return rc;
l_dq=l_dq+4;
}
}
@@ -3014,7 +2016,7 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4_isdimm(const fapi::Target &
return rc;
}
- rc=mcb_error_map(i_target,mcbist_error_map);
+ rc=mcb_error_map(i_target,mcbist_error_map,l_CDarray0,l_CDarray1,count_bad_dq);
if(rc)
{
FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!");
@@ -3046,29 +2048,27 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by4_isdimm(const fapi::Target &
for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
l_dq=4*l_n;
l_my_dqs=l_dqs_arr[l_n];
- //l_max=SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp];
-
if(schmoo_error_map[l_p][rank][l_n]==0){
- SHMOO[l_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_my_dqs][l_rp]=SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_my_dqs][l_rp]-l_delay;
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_my_dqs,0,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_my_dqs][l_rp]);if(rc) return rc;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_my_dqs]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_my_dqs]-l_delay;
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_my_dqs,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_my_dqs]);if(rc) return rc;
+ l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc;
l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc;
l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc;
l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc;
}
- if(SHMOO[l_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp] == 0){
+ if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[rank].K.lb_regval[l_my_dqs] == 0){
schmoo_error_map[l_p][rank][l_n] = 1;
}
@@ -3104,7 +2104,7 @@ rc=check_error_map(i_target,l_p,pass);
rank=valid_rank[l_rank];
rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);if(rc) return rc;
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_n]);if(rc) return rc;
}
}
@@ -3119,7 +2119,7 @@ rc=check_error_map(i_target,l_p,pass);
rank=valid_rank[l_rank];
rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc;
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[rank].K.nom_val[l_dq]);if(rc) return rc;
l_dq=l_dq+4;
}
}
@@ -3133,7 +2133,7 @@ rc=check_error_map(i_target,l_p,pass);
return rc;
}
- rc=mcb_error_map(i_target,mcbist_error_map);
+ rc=mcb_error_map(i_target,mcbist_error_map,l_CDarray0,l_CDarray1,count_bad_dq);
if(rc)
{
FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!");
@@ -3148,7 +2148,8 @@ rc=check_error_map(i_target,l_p,pass);
return rc;
}
-fapi::ReturnCode generic_shmoo::knob_update_dqs_by8(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag)
+
+fapi::ReturnCode generic_shmoo::knob_update_dqs_by8(const fapi::Target & i_target,bound_t bound,uint8_t iv_SHMOO_ON,uint8_t bit,uint8_t pass,bool &flag)
{
fapi::ReturnCode rc;
ecmdDataBufferBase data_buffer_64(64);
@@ -3163,7 +2164,10 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by8(const fapi::Target & i_targe
uint8_t l_dqs=0;
access_type_t l_access_type_e = WRITE;
uint8_t l_n=0;
- uint8_t l_scen_dqs=4;
+ uint8_t l_CDarray0[80];
+ uint8_t l_CDarray1[80];
+ uint16_t l_delay_dq=0;
+
uint8_t l_p=0;
@@ -3187,7 +2191,7 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by8(const fapi::Target & i_targe
return rc;
}
- rc=mcb_error_map(i_target,mcbist_error_map);
+ rc=mcb_error_map(i_target,mcbist_error_map,l_CDarray0,l_CDarray1,count_bad_dq);
if(rc)
{
FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!");
@@ -3201,7 +2205,7 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by8(const fapi::Target & i_targe
//l_SCHMOO_BYTES=9;
l_SCHMOO_NIBBLES=18;
}
- //rc = mss_getrankpair(i_target,iv_port,rank,&l_rp,valid_rank);if(rc) return rc;
+
for (l_p=0;l_p<MAX_PORT;l_p++){
for(int i=0;i<iv_MAX_RANKS[l_p];i++){
@@ -3236,49 +2240,48 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by8(const fapi::Target & i_targe
rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
rank=valid_rank[l_rank];
rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
- //FAPI_INF("\n abhijit here after port=%d rank=%d \n",l_p,rank);
+
for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
l_dq=4*l_n;
if((schmoo_error_map[l_p][rank][l_n]==0)&&(schmoo_error_map[l_p][rank][l_n+1]==0)){
- //FAPI_INF("\n value of nominal delay scenario=%d rank=%d for port=%d dqs=%d is %d ",l_scen_dqs,rank,l_p,l_n,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);
- SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_n][l_rp]=SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]+l_delay;
- //FAPI_INF("\n value of delay scenario=%d rank=%d for port=%d dqs=%d is %d ",l_scen_dqs,rank,l_p,l_n,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_n][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_n][l_rp]);if(rc) return rc;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- //FAPI_INF("\n value of delay scenario=%d rank=%d for port=%d bit=%d is %d ",scenario,rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_n]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_n]+l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_n]);if(rc) return rc;
+ l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc;
l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc;
l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc;
l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc;
l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc;
l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc;
l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc;
l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
-
+ l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]+l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc;
}
- //FAPI_INF("\n abhijit here before \n");
- if(SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]>l_max_limit){
+
+ if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.rb_regval[l_n]>l_max_limit){
schmoo_error_map[l_p][rank][l_n]=1;
schmoo_error_map[l_p][rank][l_n+1]=1;
}
@@ -3321,8 +2324,8 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by8(const fapi::Target & i_targe
rank=valid_rank[l_rank];
rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
- //FAPI_INF("\n restoring nominal values for dqs=%d port=%d rank=%d is %d \n",l_n,l_p,rank,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);if(rc) return rc;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_n]);if(rc) return rc;
}
}
@@ -3337,7 +2340,7 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by8(const fapi::Target & i_targe
rank=valid_rank[l_rank];
rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc;
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]);if(rc) return rc;
l_dq=l_dq+4;
}
}
@@ -3351,7 +2354,7 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by8(const fapi::Target & i_targe
return rc;
}
- rc=mcb_error_map(i_target,mcbist_error_map);
+ rc=mcb_error_map(i_target,mcbist_error_map,l_CDarray0,l_CDarray1,count_bad_dq);
if(rc)
{
FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!");
@@ -3361,7 +2364,7 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by8(const fapi::Target & i_targe
}
-
+ //FAPI_INF("\n ######################### The Right Bound is over ################################ ");
}
if(bound==LEFT)
@@ -3381,45 +2384,45 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by8(const fapi::Target & i_targe
rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
l_dq=4*l_n;
- //l_max=SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp];
+ //l_max=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[rank].K.lb_regval[l_dq];
if((schmoo_error_map[l_p][rank][l_n]==0)&&(schmoo_error_map[l_p][rank][l_n+1]==0)){
- SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_n][l_rp]=SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]-l_delay;
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_n][l_rp]);if(rc) return rc;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_n]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_n]-l_delay;
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_n]);if(rc) return rc;
+ l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc;
l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc;
l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc;
l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc;
l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc;
l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc;
l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc;
l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
+ l_delay_dq=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]-l_delay;
+
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,l_delay_dq);if(rc) return rc;
}
- if(SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp] == 0){
+ if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.lb_regval[l_n] == 0){
schmoo_error_map[l_p][rank][l_n] = 1;
schmoo_error_map[l_p][rank][l_n+1] = 1;
}
@@ -3462,223 +2465,8 @@ rc=check_error_map(i_target,l_p,pass);
rank=valid_rank[l_rank];
rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
- //FAPI_INF("\n restoring nominal values for dqs=%d port=%d rank=%d is %d \n",l_n,l_p,rank,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);if(rc) return rc;
-
- }
- }
- }
-
- for(int l_bit=0;l_bit<4;l_bit++){
- for (l_p=0;l_p<MAX_PORT;l_p++){
- for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
- {
- l_dq=l_bit;
- rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
- rank=valid_rank[l_rank];
- rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
- for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+4;
- }
- }
- }
- }
-
- rc=do_mcbist_test(i_target);
- if(rc)
- {
- FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
- return rc;
- }
-
- rc=mcb_error_map(i_target,mcbist_error_map);
- if(rc)
- {
- FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!");
-
- return rc;
- }
-
- }
-
-
- }
-
- return rc;
-}
-fapi::ReturnCode generic_shmoo::knob_update_dqs_by8_isdimm(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag)
-{
- fapi::ReturnCode rc;
- ecmdDataBufferBase data_buffer_64(64);
- ecmdDataBufferBase data_buffer_64_1(64);
-
-
-
- uint8_t l_rp=0;
- input_type_t l_input_type_e = WR_DQ;
- input_type_t l_input_type_e_dqs = WR_DQS;
- uint8_t l_dq=0;
- uint8_t l_dqs=0;
- access_type_t l_access_type_e = WRITE;
- uint8_t l_n=0;
- uint8_t l_scen_dqs=4;
-
-
- uint8_t l_p=0;
- uint16_t l_delay=0;
- //uint32_t l_max=0;
- uint16_t l_max_limit=500;
- uint8_t rank=0;
- uint8_t l_rank=0;
- //uint8_t l_SCHMOO_BYTES=10;
- uint8_t l_SCHMOO_NIBBLES=20;
-
- uint8_t i_rp=0;
-
- rc=do_mcbist_test(i_target);
- if(rc)
- {
- FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
- return rc;
- }
-
- rc=mcb_error_map(i_target,mcbist_error_map);
- if(rc)
- {
- FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!");
-
- return rc;
- }
-
- if(iv_dmm_type==1)
- {
- //l_SCHMOO_BYTES=9;
- l_SCHMOO_NIBBLES=18;
- }
- //rc = mss_getrankpair(i_target,iv_port,rank,&l_rp,valid_rank);if(rc) return rc;
-
- for (l_p=0;l_p<MAX_PORT;l_p++){
- for(int i=0;i<iv_MAX_RANKS[l_p];i++){
- rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc;
- rank=valid_rank[i];
- for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
- schmoo_error_map[l_p][rank][l_n]=0;
- }
- }
- }
-
-
-
-
- if(bound==RIGHT)
- {
-
- if(algorithm==SEQ_LIN)
- {
-
-
- for (l_delay=1;((pass==0));l_delay++){
-
- for (l_p=0;l_p<MAX_PORT;l_p++){
- for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
- {
- l_dq=0;
- l_dqs=0;
- rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
- rank=valid_rank[l_rank];
- rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
- //FAPI_INF("\n abhijit here after port=%d rank=%d \n",l_p,rank);
- for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
- l_dq=4*l_n;
- l_dqs=l_n/2;
- //FAPI_INF("\n the value of error check is %d \n",schmoo_error_map[l_p][rank][l_n]);
- if((schmoo_error_map[l_p][rank][l_n]==0)&&(schmoo_error_map[l_p][rank][l_n+1]==0)){
- //FAPI_INF("\n value of nominal delay scenario=%d rank=%d for port=%d dqs=%d is %d ",l_scen_dqs,rank,l_p,l_dqs,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_dqs][l_rp]);
- SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_dqs][l_rp]=SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_dqs][l_rp]+l_delay;
- //FAPI_INF("\n value of delay scenario=%d rank=%d for port=%d dqs=%d is %d ",l_scen_dqs,rank,l_p,l_dqs,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_dqs][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_dqs,0,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_dqs][l_rp]);if(rc) return rc;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- //FAPI_INF("\n value of delay scenario=%d rank=%d for port=%d bit=%d is %d ",scenario,rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay;
- //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc;
-
- }
- //FAPI_INF("\n abhijit here before \n");
- if(SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_dqs][l_rp]>l_max_limit){
-
- schmoo_error_map[l_p][rank][l_n]=1;
- schmoo_error_map[l_p][rank][l_n+1]=1;
- }
- if((schmoo_error_map[l_p][rank][l_n]==1)||(schmoo_error_map[l_p][rank][l_n+1]==1)){
-
- schmoo_error_map[l_p][rank][l_n]=1;
- schmoo_error_map[l_p][rank][l_n+1]=1;
- }
-
- l_n=l_n+1;
-
- }
-
-
- }
-
- }
- rc=do_mcbist_test(i_target);
- if(rc)
- {
- FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
- return rc;
- }
-
- rc=check_error_map(i_target,l_p,pass);
- if(rc)
- {
- FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
- return rc;
- }
-
- }
-
-
- for (l_p=0;l_p<MAX_PORT;l_p++){
- for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
- {
-
- rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
- rank=valid_rank[l_rank];
- rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
- for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
- //FAPI_INF("\n restoring nominal values for dqs=%d port=%d rank=%d is %d \n",l_n,l_p,rank,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);if(rc) return rc;
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.curr_val[l_n]);if(rc) return rc;
}
}
@@ -3693,7 +2481,7 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by8_isdimm(const fapi::Target &
rank=valid_rank[l_rank];
rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc;
+ rc=mss_access_delay_reg_schmoo(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rank].K.nom_val[l_dq]);if(rc) return rc;
l_dq=l_dq+4;
}
}
@@ -3707,148 +2495,7 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs_by8_isdimm(const fapi::Target &
return rc;
}
- rc=mcb_error_map(i_target,mcbist_error_map);
- if(rc)
- {
- FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!");
-
- return rc;
- }
-
-
-
- }
-
- }
-
- if(bound==LEFT)
- {
- if(algorithm==SEQ_LIN)
- {
-
- for (l_delay=1;(pass==0);l_delay++){
-
- for (l_p=0;l_p<MAX_PORT;l_p++){
- for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
- {
- l_dq=0;
- l_dqs=0;
- rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
- rank=valid_rank[l_rank];
- rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
- for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
- l_dq=4*l_n;
- // l_max=SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp];
- l_dqs=l_n/2;
-
- if((schmoo_error_map[l_p][rank][l_n]==0)&&(schmoo_error_map[l_p][rank][l_n+1]==0)){
- SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_dqs][l_rp]=SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_dqs][l_rp]-l_delay;
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_dqs,0,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_dqs][l_rp]);if(rc) return rc;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+1;
- SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay;
- //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc;
- }
- if(SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_dqs][l_rp] == 0){
- schmoo_error_map[l_p][rank][l_n] = 1;
- schmoo_error_map[l_p][rank][l_n+1] = 1;
- }
-
- if((schmoo_error_map[l_p][rank][l_n]==1)||(schmoo_error_map[l_p][rank][l_n+1]==1)){
-
- schmoo_error_map[l_p][rank][l_n]=1;
- schmoo_error_map[l_p][rank][l_n+1]=1;
- }
-
- l_n=l_n+1;
-
- }
- }
-
- }
- rc=do_mcbist_test(i_target);
- if(rc)
- {
- FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
- return rc;
- }
-
-rc=check_error_map(i_target,l_p,pass);
- if(rc)
- {
- FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
- return rc;
- }
-
-
- }
-
-
- for (l_p=0;l_p<MAX_PORT;l_p++){
- for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
- {
-
- rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
- rank=valid_rank[l_rank];
- rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
- for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
- //FAPI_INF("\n restoring nominal values for dqs=%d port=%d rank=%d is %d \n",l_n,l_p,rank,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);if(rc) return rc;
-
- }
- }
- }
-
- for(int l_bit=0;l_bit<4;l_bit++){
- for (l_p=0;l_p<MAX_PORT;l_p++){
- for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
- {
- l_dq=l_bit;
- rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
- rank=valid_rank[l_rank];
- rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
- for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
- rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc;
- l_dq=l_dq+4;
- }
- }
- }
- }
- rc=do_mcbist_test(i_target);
- if(rc)
- {
- FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");
- return rc;
- }
-
- rc=mcb_error_map(i_target,mcbist_error_map);
+ rc=mcb_error_map(i_target,mcbist_error_map,l_CDarray0,l_CDarray1,count_bad_dq);
if(rc)
{
FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!");
@@ -3858,12 +2505,13 @@ rc=check_error_map(i_target,l_p,pass);
}
-
+ //FAPI_INF("\n ######################### The Left Bound is over ################################ ");
}
return rc;
}
+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*------------------------------------------------------------------------------
* Function: find_bound
* Description : This function calls the knob_update for each DQ which is used to find bound that is left/right according to schmoo type
@@ -3881,12 +2529,9 @@ fapi::ReturnCode generic_shmoo::find_bound(const fapi::Target & i_target,bound_t
rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_WIDTH, &i_target, l_dram_width); if(rc) return rc;
- FAPI_INF("\n SCHMOO IS IN PROGRESS ...... \n");
- // FAPI_INF("generic_shmoo::find_bound running find_bound function ");
-
-
- //rc=knob_update_dqs_by8_isdimm(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc;
- if(iv_DQS_ON == 1){
+ FAPI_INF("%s:\n SCHMOO IS IN PROGRESS ...... \n",i_target.toEcmdString());
+
+ if(iv_shmoo_type == 3){
rc=do_mcbist_reset(i_target);
if(rc)
{
@@ -3897,22 +2542,24 @@ fapi::ReturnCode generic_shmoo::find_bound(const fapi::Target & i_target,bound_t
if(l_dram_width == 4){
if(iv_dmm_type==1)
{
- rc=knob_update_dqs_by4_isdimm(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc;
+ rc=knob_update_dqs_by4_isdimm(i_target,bound,iv_SHMOO_ON,l_bit,pass,flag); if(rc) return rc;
}else{
- rc=knob_update_dqs_by4(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc;
+
+ pass=0;
+
+ rc=knob_update_dqs_by4(i_target,bound,iv_SHMOO_ON,l_bit,pass,flag); if(rc) return rc;
}
}else{
if(iv_dmm_type==1)
{
- rc=knob_update_dqs_by8_isdimm(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc;
+ //rc=knob_update_dqs_by8_isdimm(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc;
}else{
- rc=knob_update_dqs_by8(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc;
+
+ rc=knob_update_dqs_by4(i_target,bound,iv_SHMOO_ON,l_bit,pass,flag); if(rc) return rc;
+ //rc=knob_update_dqs_by8(i_target,bound,iv_SHMOO_ON,l_bit,pass,flag); if(rc) return rc;
//rc=knob_update_dqs_by8_isdimm(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc;
}
}
- }else if(iv_DQS_ON == 2){
- pass=0;
- rc=knob_update_gate(i_target,bound,iv_shmoo_type,pass,flag); if(rc) return rc;
}
else{
//Bit loop
@@ -3921,13 +2568,13 @@ fapi::ReturnCode generic_shmoo::find_bound(const fapi::Target & i_target,bound_t
// preetham function here
pass=0;
- //FAPI_INF("\n abhijit is inside find bound and schmoo type is %d \n",iv_shmoo_type);
-
- //rc=knob_update(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc;
+
////////////////////////////////////////////////////////////////////////////////////
if(iv_shmoo_param==4){
rc=knob_update_bin(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc;
}else{
+
+ //rc=knob_update_rd_eye_pwrfix(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc;
rc=knob_update(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc;
}
@@ -3936,7 +2583,6 @@ fapi::ReturnCode generic_shmoo::find_bound(const fapi::Target & i_target,bound_t
return rc;
}
-//#ifdef char
/*------------------------------------------------------------------------------
* Function: print_report
* Description : This function is used to print the information needed such as freq,voltage etc, and also the right,left and total margin
@@ -3958,6 +2604,11 @@ fapi::ReturnCode generic_shmoo::print_report(const fapi::Target & i_target)
uint8_t l_attr_eff_dimm_type_u8 = 0;
uint8_t l_attr_eff_num_drops_per_port_u8 = 0;
uint8_t l_attr_eff_dram_width_u8 = 0;
+ uint16_t l_total_margin=0;
+ //char l_str[60] = "";
+
+ char * l_pMike = new char[128];
+ char * l_str = new char[128];
fapi::Target l_target_centaur;
@@ -3973,31 +2624,36 @@ fapi::ReturnCode generic_shmoo::print_report(const fapi::Target & i_target)
- FAPI_INF(" freq = %d on %s.", l_attr_mss_freq_u32, l_target_centaur.toEcmdString());
- FAPI_INF("volt = %d on %s.", l_attr_mss_volt_u32, l_target_centaur.toEcmdString());
- FAPI_INF("dimm_type = %d on %s.", l_attr_eff_dimm_type_u8, i_target.toEcmdString());
+ FAPI_INF("%s: freq = %d on %s.",i_target.toEcmdString(),l_attr_mss_freq_u32, l_target_centaur.toEcmdString());
+ FAPI_INF("%s: volt = %d on %s.",i_target.toEcmdString(), l_attr_mss_volt_u32, l_target_centaur.toEcmdString());
+ FAPI_INF("%s: dimm_type = %d on %s.",i_target.toEcmdString(), l_attr_eff_dimm_type_u8, i_target.toEcmdString());
if ( l_attr_eff_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_CDIMM )
{
- FAPI_INF("It is a CDIMM");
+ FAPI_INF("%s: It is a CDIMM",i_target.toEcmdString());
}
else
{
- FAPI_INF("It is an ISDIMM");
+ FAPI_INF("%s: It is an ISDIMM",i_target.toEcmdString());
}
- FAPI_INF("\n Number of ranks on port = 0 is %d ",iv_MAX_RANKS[0]);
- FAPI_INF("\n Number of ranks on port = 1 is %d \n \n",iv_MAX_RANKS[1]);
+ FAPI_INF("%s: \n Number of ranks on port = 0 is %d ",i_target.toEcmdString(),iv_MAX_RANKS[0]);
+ FAPI_INF("%s: \n Number of ranks on port = 1 is %d \n \n",i_target.toEcmdString(),iv_MAX_RANKS[1]);
- //FAPI_INF("num_drops_per_port = %d on %s.", l_attr_eff_num_drops_per_port_u8, i_target.toEcmdString());
- //FAPI_INF("num_ranks = %d on %s.", iv_MAX_RANKS,i_target.toEcmdString());
- //FAPI_INF("dram_width = %d on %s. \n\n", l_attr_eff_dram_width_u8, i_target.toEcmdString());
- FAPI_INF("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
+ //FAPI_INF("%s:num_drops_per_port = %d on %s.", l_attr_eff_num_drops_per_port_u8, i_target.toEcmdString());
+ //FAPI_INF("%s:num_ranks = %d on %s.", iv_MAX_RANKS,i_target.toEcmdString());
+ //FAPI_INF("%s:dram_width = %d on %s. \n\n", l_attr_eff_dram_width_u8, i_target.toEcmdString());
+ FAPI_INF("%s:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",i_target.toEcmdString());
//// Based on schmoo param the print will change eventually
- if(iv_shmoo_type==2)
+
+ if(iv_shmoo_type==0)
{
- FAPI_INF("Schmoo POS\tPort\tRank\tByte\tnibble\tbit\tNominal\t\tSetup_Limit\tHold_Limit\tWrD_Setup(ps)\tWrD_Hold(ps)\tEye_Width(ps)\tBitRate\tVref_Multiplier ");
+ sprintf(l_pMike,"Schmoo POS\tPort\tRank\tByte\tnibble\t\tSetup_Limit\tHold_Limit\tWrD_Setup(ps)\tWrD_Hold(ps)\tEye_Width(ps)\tBitRate\tVref_Multiplier ");
}else{
- FAPI_INF("Schmoo POS\tPort\tRank\tByte\tnibble\tbit\tNominal\t\tSetup_Limit\tHold_Limit\tRdD_Setup(ps)\tRdD_Hold(ps)\tEye_Width(ps)\tBitRate\tVref_Multiplier ");
- }
+ sprintf (l_pMike,"Schmoo POS\tPort\tRank\tByte\tnibble\t\tSetup_Limit\tHold_Limit\tRdD_Setup(ps)\tRdD_Hold(ps)\tEye_Width(ps)\tBitRate\tVref_Multiplier ");
+ }
+ //sprintf (l_pMike, "MIKE\tJONES
+ //FAPI_INF("Schmoo POS\tPort\tRank\tByte\tnibble\tbit\tNominal\t\tSetup_Limit\tHold_Limit \n");
+ FAPI_INF("%s",l_pMike);
+ delete [] l_pMike;
for (l_p=0;l_p<MAX_PORT;l_p++){
@@ -4014,14 +2670,17 @@ fapi::ReturnCode generic_shmoo::print_report(const fapi::Target & i_target)
for(l_bit=0;l_bit< MAX_BITS;++l_bit)
{
l_dq=8*l_byte+4*l_nibble+l_bit;
-
- if(iv_shmoo_type==2)
+ l_total_margin=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.left_margin_val[l_dq]+SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.right_margin_val[l_dq];
+ sprintf(l_str,"%d\t%d\t%d\t%d\t%d\t%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d",l_mbapos,l_p,i_rank,l_byte,l_nibble,l_bit,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.nom_val[l_dq],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.rb_regval[l_dq],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_dq],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.left_margin_val[l_dq],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.right_margin_val[l_dq],l_total_margin,l_attr_mss_freq_u32,iv_vref_mul);
+ if(iv_shmoo_type==0)
{
- FAPI_INF("WR_EYE %d\t%d\t%d\t%d\t%d\t%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n ",l_mbapos,l_p,i_rank,l_byte,l_nibble,l_bit,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.total_margin[l_dq][l_rp],l_attr_mss_freq_u32,iv_vref_mul);
+ FAPI_INF("WR_EYE %s ",l_str);
+ //FAPI_INF("WR_EYE %s %4d%4d%4d%4d%4d%4d ",l_str,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.nom_val[l_dq],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.rb_regval[l_dq],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_dq],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.left_margin_val[l_dq],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.right_margin_val[l_dq],l_total_margin);
}
- if(iv_shmoo_type==8)
+ if(iv_shmoo_type==1)
{
- FAPI_INF("RD_EYE %d\t%d\t%d\t%d\t%d\t%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n ",l_mbapos,l_p,i_rank,l_byte,l_nibble,l_bit,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.total_margin[l_dq][l_rp],l_attr_mss_freq_u32,iv_vref_mul);
+ FAPI_INF("RD_EYE %s ",l_str);
+ //FAPI_INF("RD_EYE %s %4d%4d%4d%4d%4d%4d ",l_str,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.nom_val[l_dq],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.rb_regval[l_dq],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_dq],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.left_margin_val[l_dq],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.right_margin_val[l_dq],l_total_margin);
}
}
@@ -4030,11 +2689,11 @@ fapi::ReturnCode generic_shmoo::print_report(const fapi::Target & i_target)
}
}
+ delete [] l_str;
return rc;
}
-
- fapi::ReturnCode generic_shmoo::print_report_dqs(const fapi::Target & i_target)
+ fapi::ReturnCode generic_shmoo::print_report_dqs(const fapi::Target & i_target)
{
fapi::ReturnCode rc;
@@ -4044,6 +2703,7 @@ fapi::ReturnCode generic_shmoo::print_report(const fapi::Target & i_target)
uint8_t l_p=0;
uint8_t i_rank=0;
uint8_t l_mbapos = 0;
+ uint16_t l_total_margin = 0;
uint32_t l_attr_mss_freq_u32 = 0;
uint32_t l_attr_mss_volt_u32 = 0;
uint8_t l_attr_eff_dimm_type_u8 = 0;
@@ -4052,7 +2712,8 @@ fapi::ReturnCode generic_shmoo::print_report(const fapi::Target & i_target)
fapi::Target l_target_centaur;
uint8_t l_SCHMOO_NIBBLES=20;
uint8_t l_by8_dqs=0;
-
+ char * l_pMike = new char[128];
+ char * l_str = new char[128];
if(iv_dmm_type==1)
{
@@ -4076,34 +2737,35 @@ fapi::ReturnCode generic_shmoo::print_report(const fapi::Target & i_target)
}
}
- //FAPI_INF("Shmoonibbles val is=%d",l_SCHMOO_NIBBLES);
+ //FAPI_INF("%s:Shmoonibbles val is=%d",l_SCHMOO_NIBBLES);
- FAPI_INF(" freq = %d on %s.", l_attr_mss_freq_u32, l_target_centaur.toEcmdString());
- FAPI_INF("volt = %d on %s.", l_attr_mss_volt_u32, l_target_centaur.toEcmdString());
- FAPI_INF("dimm_type = %d on %s.", l_attr_eff_dimm_type_u8, i_target.toEcmdString());
- FAPI_INF("\n Number of ranks on port=0 is %d ",iv_MAX_RANKS[0]);
- FAPI_INF("\n Number of ranks on port=1 is %d ",iv_MAX_RANKS[1]);
+ FAPI_INF("%s: freq = %d on %s.",i_target.toEcmdString(), l_attr_mss_freq_u32, l_target_centaur.toEcmdString());
+ FAPI_INF("%s:volt = %d on %s.",i_target.toEcmdString(), l_attr_mss_volt_u32, l_target_centaur.toEcmdString());
+ FAPI_INF("%s:dimm_type = %d on %s.",i_target.toEcmdString(), l_attr_eff_dimm_type_u8, i_target.toEcmdString());
+ FAPI_INF("%s:\n Number of ranks on port=0 is %d ",i_target.toEcmdString(),iv_MAX_RANKS[0]);
+ FAPI_INF("%s:\n Number of ranks on port=1 is %d ",i_target.toEcmdString(),iv_MAX_RANKS[1]);
if ( l_attr_eff_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_CDIMM )
{
- FAPI_INF("It is a CDIMM");
+ FAPI_INF("%s:It is a CDIMM",i_target.toEcmdString());
}
else
{
- FAPI_INF("It is an ISDIMM");
+ FAPI_INF("%s:It is an ISDIMM",i_target.toEcmdString());
}
- FAPI_INF("\n Number of ranks on port=0 is %d ",iv_MAX_RANKS[0]);
- FAPI_INF("\n Number of ranks on port=1 is %d \n \n",iv_MAX_RANKS[1]);
- //FAPI_INF("num_drops_per_port = %d on %s.", l_attr_eff_num_drops_per_port_u8, i_target.toEcmdString());
- //FAPI_INF("num_ranks = %d on %s.", iv_MAX_RANKS,i_target.toEcmdString());
- //FAPI_INF("dram_width = %d on %s. \n\n", l_attr_eff_dram_width_u8, i_target.toEcmdString());
+ FAPI_INF("%s:\n Number of ranks on port=0 is %d ",i_target.toEcmdString(),iv_MAX_RANKS[0]);
+ FAPI_INF("%s:\n Number of ranks on port=1 is %d \n \n",i_target.toEcmdString(),iv_MAX_RANKS[1]);
+ //FAPI_INF("%s:num_drops_per_port = %d on %s.", l_attr_eff_num_drops_per_port_u8, i_target.toEcmdString());
+ //FAPI_INF("%s:num_ranks = %d on %s.", iv_MAX_RANKS,i_target.toEcmdString());
+ //FAPI_INF("%s:dram_width = %d on %s. \n\n", l_attr_eff_dram_width_u8, i_target.toEcmdString());
//fprintf(fp, "Schmoo POS\tPort\tRank\tDQS\tNominal\t\tSetup_Limit\tHold_Limit\tWrD_Setup(ps)\tWrD_Hold(ps)\tEye_Width(ps)\tBitRate \n");
FAPI_INF("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
- FAPI_INF("Schmoo POS\tPort\tRank\tDQS\tNominal\t\ttDQSSmin_PR_limit\ttDQSSmax_PR_limit\ttDQSSmin(ps)\ttDQSSmax(ps)\ttDQSS_Window(ps)\tBitRate ");
-
- iv_shmoo_type=4;
+ sprintf(l_pMike,"Schmoo POS\tPort\tRank\tDQS\tNominal\t\ttDQSSmin_PR_limit\ttDQSSmax_PR_limit\ttDQSSmin(ps)\ttDQSSmax(ps)\ttDQSS_Window(ps)\tBitRate ");
+ FAPI_INF("%s",l_pMike);
+ delete [] l_pMike;
+ //iv_shmoo_type=4;
for (l_p=0;l_p<MAX_PORT;l_p++){
@@ -4127,113 +2789,30 @@ fapi::ReturnCode generic_shmoo::print_report(const fapi::Target & i_target)
l_by8_dqs=l_nibble*2;
} */
+ l_total_margin=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.left_margin_val[l_nibble]+SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.right_margin_val[l_nibble];
+ sprintf(l_str,"%d\t%d\t%d\t%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d",l_mbapos,l_p,i_rank,l_nibble,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.curr_val[l_nibble],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_nibble],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.rb_regval[l_nibble],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.left_margin_val[l_nibble],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.right_margin_val[l_nibble],l_total_margin,l_attr_mss_freq_u32);
+ //FAPI_INF("abhijit %s %d %d %d ",l_str,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.curr_val[l_nibble],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_nibble],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.rb_regval[l_by8_dqs]);
//fprintf(fp,"WR_DQS %d\t%d\t%d\t%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n ",l_mbapos,l_p,i_rank,l_nibble,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.total_margin[l_by8_dqs][l_rp],l_attr_mss_freq_u32);
- FAPI_INF("WR_DQS %d\t%d\t%d\t%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n ",l_mbapos,l_p,i_rank,l_nibble,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_nibble][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_nibble][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.total_margin[l_by8_dqs][l_rp],l_attr_mss_freq_u32);
-
-
+ //FAPI_INF("WR_DQS %s %4d%4d%4d ",l_mbapos,l_p,i_rank,l_nibble,SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.curr_val[l_nibble],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_nibble],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.rb_regval[l_nibble],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.left_margin_val[l_nibble],SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.right_margin_val[l_nibble],);
+ FAPI_INF("WR_DQS %s",l_str);
+ if(iv_dmm_type==0)
+ {
+ if(l_attr_eff_dram_width_u8 == 8)
+ {
+ l_nibble=l_by8_dqs;
+ }
+ }
- }
+
+ }
}
}
-
+ delete [] l_str;
//fclose(fp);
return rc;
}
- fapi::ReturnCode generic_shmoo::print_report_gate(const fapi::Target & i_target)
-{
- fapi::ReturnCode rc;
-
- uint8_t l_rank,l_n;
- //uint8_t l_dq=0;
- uint8_t l_rp=0;
- uint8_t l_p=0;
- uint8_t rank=0;
- uint8_t l_mbapos = 0;
- uint32_t l_attr_mss_freq_u32 = 0;
- uint32_t l_attr_mss_volt_u32 = 0;
- uint8_t l_attr_eff_dimm_type_u8 = 0;
- uint8_t l_attr_eff_num_drops_per_port_u8 = 0;
- uint8_t l_attr_eff_dram_width_u8 = 0;
- fapi::Target l_target_centaur;
- uint8_t l_SCHMOO_NIBBLES=20;
-
-
-
- if(iv_dmm_type==1)
- {
- l_SCHMOO_NIBBLES=18;
- }
-
- rc = fapiGetParentChip(i_target, l_target_centaur); if(rc) return rc;
-
- rc = FAPI_ATTR_GET(ATTR_MSS_FREQ, &l_target_centaur, l_attr_mss_freq_u32); if(rc) return rc;
- rc = FAPI_ATTR_GET(ATTR_MSS_VOLT, &l_target_centaur, l_attr_mss_volt_u32); if(rc) return rc;
- rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_TYPE, &i_target, l_attr_eff_dimm_type_u8); if(rc) return rc;
- rc = FAPI_ATTR_GET(ATTR_EFF_NUM_DROPS_PER_PORT, &i_target, l_attr_eff_num_drops_per_port_u8); if(rc) return rc;
- rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_WIDTH, &i_target, l_attr_eff_dram_width_u8); if(rc) return rc;
- rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, &i_target, l_mbapos);if(rc) return rc;
-
- if(l_attr_eff_dram_width_u8 == 8){
- l_SCHMOO_NIBBLES=20;
- if(iv_dmm_type==1)
- {
- l_SCHMOO_NIBBLES=18;
- }
- }
-
- //FAPI_INF("Shmoonibbles val is=%d",l_SCHMOO_NIBBLES);
-
- FAPI_INF(" freq = %d on %s.", l_attr_mss_freq_u32, l_target_centaur.toEcmdString());
- FAPI_INF("volt = %d on %s.", l_attr_mss_volt_u32, l_target_centaur.toEcmdString());
- FAPI_INF("dimm_type = %d on %s.", l_attr_eff_dimm_type_u8, i_target.toEcmdString());
- FAPI_INF("\n Number of ranks on port=0 is %d ",iv_MAX_RANKS[0]);
- FAPI_INF("\n Number of ranks on port=1 is %d ",iv_MAX_RANKS[1]);
-
-
- if ( l_attr_eff_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_CDIMM )
- {
- FAPI_INF("It is a CDIMM");
- }
- else
- {
- FAPI_INF("It is an ISDIMM");
- }
-
- FAPI_INF("\n Number of ranks on port=0 is %d ",iv_MAX_RANKS[0]);
- FAPI_INF("\n Number of ranks on port=1 is %d \n \n",iv_MAX_RANKS[1]);
- //FAPI_INF("num_drops_per_port = %d on %s.", l_attr_eff_num_drops_per_port_u8, i_target.toEcmdString());
- //FAPI_INF("num_ranks = %d on %s.", iv_MAX_RANKS,i_target.toEcmdString());
- //FAPI_INF("dram_width = %d on %s. \n\n", l_attr_eff_dram_width_u8, i_target.toEcmdString());
- //fprintf(fp, "Schmoo POS\tPort\tRank\tDQS\tNominal\t\tSetup_Limit\tHold_Limit\tWrD_Setup(ps)\tWrD_Hold(ps)\tEye_Width(ps)\tBitRate \n");
- FAPI_INF("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
- FAPI_INF("Schmoo POS\tPort\tRank\tNIBBLE\tOFFSET\tBitRate ");
-
-
- for (l_p=0;l_p<MAX_PORT;l_p++){
- for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank)
- {
-
- rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc;
- rank=valid_rank[l_rank];
- rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;
- for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){
-
-
- //FAPI_INF("\n schmoo=%d port=%d rank=%d and nibble=%d and value=%d ",iv_shmoo_type,l_p,rank,l_n,SHMOO[iv_shmoo_type].MBA.P[l_p].S[rank].K.offset[l_n]);
- FAPI_INF("RD_DQS %d\t%d\t%d\t%d\t%d\t\t%d\n ",l_mbapos,l_p,rank,l_n,SHMOO[iv_shmoo_type].MBA.P[l_p].S[rank].K.offset[l_n],l_attr_mss_freq_u32);
- //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq,bound);
-
- }
-
-
- }
-
- }
-
- return rc;
- }
-
+
//#endif
/*------------------------------------------------------------------------------
* Function: get_margin
@@ -4284,35 +2863,35 @@ fapi::ReturnCode generic_shmoo::get_margin(const fapi::Target & i_target)
{
l_dq=8*l_byte+4*l_nibble+l_bit;
//FAPI_INF(" the right bound = %d and nominal = %d",SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_dq][l_rp]);
- if(iv_shmoo_type==8)
+ if(iv_shmoo_type==1)
{
- if(SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp] == 0){
+ if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_dq] == 0){
//FAPI_INF("\n abhijit saurabh is here and dq=%d \n",l_dq);
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp]=0;
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_dq]=0;
if(iv_shmoo_param!=4){
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp]-2;
+ //SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_dq]-1;
}else{
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp]-1;
+ //SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_dq]-1;
}
- //FAPI_INF("\n the value of left bound after is %d \n",SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp]);
+ //FAPI_INF("\n the value of left bound after is %d \n",SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_dq][l_rp]);
}
}
if(iv_shmoo_param==4){
- if(SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_dq][l_rp]>SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_dq][l_rp]){
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_dq][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_dq][l_rp]-1;
+ if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.rb_regval[l_dq]>SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.nom_val[l_dq]){
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.rb_regval[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.rb_regval[l_dq]-1;
}
- if(SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp]<SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_dq][l_rp]){
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp]+1;
+ if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_dq]<SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.nom_val[l_dq]){
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_dq]+1;
}
}else{
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_dq][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_dq][l_rp]-1;
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp]+1;
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.rb_regval[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.rb_regval[l_dq]-1;
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_dq]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_dq]+1;
}
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_dq][l_rp]=((SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_dq][l_rp]-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_dq][l_rp])*l_factor)/l_factor_ps;
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_dq][l_rp]= ((SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_dq][l_rp]-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp])*l_factor)/l_factor_ps;//((1/uint32_t_freq*1000000)/128);
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.total_margin[l_dq][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_dq][l_rp]+SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_dq][l_rp];
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.right_margin_val[l_dq]=((SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.rb_regval[l_dq]-SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.nom_val[l_dq])*l_factor)/l_factor_ps;
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.left_margin_val[l_dq]= ((SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.nom_val[l_dq]-SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_dq])*l_factor)/l_factor_ps;//((1/uint32_t_freq*1000000)/128);
+ // SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[i_rank].K.total_margin[l_dq][l_rp]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[i_rank].K.right_margin_val[l_dq][l_rp]+SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[i_rank].K.left_margin_val[l_dq][l_rp];
}
}
}
@@ -4371,11 +2950,11 @@ fapi::ReturnCode generic_shmoo::get_margin(const fapi::Target & i_target)
{
//FAPI_INF("\n Abhijit 11111 is here after schmoo type=%d and port=%d \n",iv_shmoo_type,l_p);
//FAPI_INF(" the right bound = %d and nominal = %d",SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_nibble][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_nibble][l_rp]);
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_nibble][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_nibble][l_rp]-1;
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_nibble][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_nibble][l_rp]+1;
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_nibble][l_rp]=((SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_nibble][l_rp]-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_nibble][l_rp])*l_factor)/l_factor_ps;
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_nibble][l_rp]= ((SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_nibble][l_rp]-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_nibble][l_rp])*l_factor)/l_factor_ps;//((1/uint32_t_freq*1000000)/128);
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.total_margin[l_nibble][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_nibble][l_rp]+SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_nibble][l_rp];
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.rb_regval[l_nibble]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.rb_regval[l_nibble]-1;
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_nibble]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_nibble]+1;
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.right_margin_val[l_nibble]=((SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.rb_regval[l_nibble]-SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.curr_val[l_nibble])*l_factor)/l_factor_ps;
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.left_margin_val[l_nibble]= ((SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.curr_val[l_nibble]-SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_nibble])*l_factor)/l_factor_ps;//((1/uint32_t_freq*1000000)/128);
+ //SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.total_margin[l_nibble]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.right_margin_val[l_nibble]+SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.left_margin_val[l_nibble];
//FAPI_INF("\n Abhijit is here after %d and port=%d \n",l_nibble,l_p);
//FAPI_INF("\n Abhijit is here after 2 %d \n",l_rnk);
}
@@ -4445,11 +3024,12 @@ fapi::ReturnCode generic_shmoo::get_margin(const fapi::Target & i_target)
//FAPI_INF("\n Abhijit 11111 is here after schmoo type=%d and port=%d \n",iv_shmoo_type,l_p);
//FAPI_INF(" the port=%d rank=%d byte=%d right bound = %d and nominal = %d",l_p,i_rank,l_nibble,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_nibble][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_nibble][l_rp]);
//FAPI_INF(" the port=%d rank=%d byte=%d left bound = %d and nominal = %d",l_p,i_rank,l_nibble,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_nibble][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_nibble][l_rp]);
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_nibble][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_nibble][l_rp]-1;
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_nibble][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_nibble][l_rp]+1;
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_nibble][l_rp]=((SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_nibble][l_rp]-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_nibble][l_rp])*l_factor)/l_factor_ps;
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_nibble][l_rp]= ((SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_nibble][l_rp]-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_nibble][l_rp])*l_factor)/l_factor_ps;//((1/uint32_t_freq*1000000)/128);
- SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.total_margin[l_nibble][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_nibble][l_rp]+SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_nibble][l_rp];
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.rb_regval[l_nibble]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.rb_regval[l_nibble]-1;
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_nibble]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_nibble]+1;
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.right_margin_val[l_nibble]=((SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.rb_regval[l_nibble]-SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.curr_val[l_nibble])*l_factor)/l_factor_ps;
+ SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.left_margin_val[l_nibble]= ((SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.curr_val[l_nibble]-SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.lb_regval[l_nibble])*l_factor)/l_factor_ps;//((1/uint32_t_freq*1000000)/128);
+ //SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.total_margin[l_nibble]=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.right_margin_val[l_nibble]+SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.left_margin_val[l_nibble];
+ // SHMOO[iv_shmoo_type].MBA.P[l_p].S[l_rnk].K.total_margin[l_nibble]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[l_rnk].K.right_margin_val[l_nibble]+SHMOO[iv_shmoo_type].MBA.P[l_p].S[l_rnk].K.left_margin_val[l_nibble];
//FAPI_INF("\n Abhijit is here after %d and port=%d \n",l_nibble,l_p);
//FAPI_INF("\n Abhijit is here after 2 %d \n",l_rnk);
}
@@ -4462,6 +3042,7 @@ fapi::ReturnCode generic_shmoo::get_margin(const fapi::Target & i_target)
return rc;
}
+
/*------------------------------------------------------------------------------
* Function: get_min_margin
* Description : This function is used to get the minimum margin of all the schmoo margins
@@ -4501,19 +3082,19 @@ fapi::ReturnCode generic_shmoo::get_min_margin(const fapi::Target & i_target,uin
for(l_bit=0;l_bit< MAX_BITS;++l_bit)
{
l_dq=8*l_byte+4*l_nibble+l_bit;
- if(SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_dq][l_rp]<l_temp_right)
+ if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.right_margin_val[l_dq]<l_temp_right)
{
- l_temp_right=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_dq][l_rp];
+ l_temp_right=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.right_margin_val[l_dq];
}
- if(SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_dq][l_rp]<l_temp_left)
+ if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.left_margin_val[l_dq]<l_temp_left)
{
- l_temp_left=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_dq][l_rp];
+ l_temp_left=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.left_margin_val[l_dq];
}
- // if(SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_dq][l_rp]<l_temp_right_nibble)
+ // if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[i_rank].K.right_margin_val[l_dq][l_rp]<l_temp_right_nibble)
// {
- // l_temp_right_nibble=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_dq][l_rp];
+ // l_temp_right_nibble=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[i_rank].K.right_margin_val[l_dq][l_rp];
// }
// if(SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_dq][l_rp]<l_temp_left_nibble)
// {
@@ -4536,7 +3117,7 @@ fapi::ReturnCode generic_shmoo::get_min_margin(const fapi::Target & i_target,uin
// hacked for now till schmoo is running
- if(iv_shmoo_type==8)
+ if(iv_shmoo_type==1)
{
*o_right_min_margin=l_temp_left;
*o_left_min_margin=l_temp_right;
@@ -4547,7 +3128,7 @@ fapi::ReturnCode generic_shmoo::get_min_margin(const fapi::Target & i_target,uin
return rc;
}
- fapi::ReturnCode generic_shmoo::get_min_margin_dqs(const fapi::Target & i_target,uint32_t *o_right_min_margin,uint32_t *o_left_min_margin)
+fapi::ReturnCode generic_shmoo::get_min_margin_dqs(const fapi::Target & i_target,uint32_t *o_right_min_margin,uint32_t *o_left_min_margin)
{
fapi::ReturnCode rc;
uint8_t l_rnk,l_nibble,i_rank;
@@ -4581,7 +3162,6 @@ fapi::ReturnCode generic_shmoo::get_min_margin(const fapi::Target & i_target,uin
l_SCHMOO_NIBBLES=9;
}
}
- iv_shmoo_type=4;
for (l_p=0;l_p<MAX_PORT;l_p++){
for (l_rnk=0;l_rnk<iv_MAX_RANKS[l_p];++l_rnk)
@@ -4601,30 +3181,36 @@ fapi::ReturnCode generic_shmoo::get_min_margin(const fapi::Target & i_target,uin
}
}
- if(SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_by8_dqs][l_rp]<l_temp_right)
+ if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.right_margin_val[l_nibble]<l_temp_right)
{
- l_temp_right=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_by8_dqs][l_rp];
+ l_temp_right=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.right_margin_val[l_nibble];
}
- if(SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_by8_dqs][l_rp]<l_temp_left)
+ if(SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.left_margin_val[l_nibble]<l_temp_left)
+ {
+ l_temp_left=SHMOO[iv_SHMOO_ON].MBA.P[l_p].S[l_rnk].K.left_margin_val[l_nibble];
+ }
+
+ if(iv_dmm_type==0)
+ {
+ if(l_attr_eff_dram_width_u8 == 8)
{
- l_temp_left=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_by8_dqs][l_rp];
+ l_nibble=l_by8_dqs;
}
+ }
+
}
}
}
// hacked for now till schmoo is running
- if(iv_shmoo_type==8)
- {
+
*o_right_min_margin=l_temp_left;
*o_left_min_margin=l_temp_right;
- }else{
- *o_right_min_margin=l_temp_right;
- *o_left_min_margin=l_temp_left;
- }
+
return rc;
}
+
fapi::ReturnCode generic_shmoo:: schmoo_setup_mcb( const fapi::Target & i_target)
{
@@ -4646,11 +3232,11 @@ l_pattern=iv_pattern;
l_testtype=iv_test_type;
if(iv_shmoo_type==16){
-FAPI_INF("\n Read DQS is running \n");
-if(iv_DQS_ON==1){
+FAPI_INF("%s:\n Read DQS is running \n",i_target.toEcmdString());
+if(iv_SHMOO_ON==1){
l_testtype=3;
}
- if(iv_DQS_ON==2){
+ if(iv_SHMOO_ON==2){
l_testtype=4;
}
}
@@ -4659,13 +3245,9 @@ if(iv_DQS_ON==1){
rc = FAPI_ATTR_SET(ATTR_MCBIST_PATTERN, &i_target,l_pattern); if(rc) return rc;//-----------i_mcbpatt------->run
rc = FAPI_ATTR_SET(ATTR_MCBIST_TEST_TYPE, &i_target, l_testtype); if(rc) return rc;//---------i_mcbtest------->run
}
-//rc = FAPI_ATTR_SET(ATTR_MCBIST_PATTERN, &i_target,iv_pattern); if(rc) return rc;//-----------i_mcbpatt------->run
-//rc = FAPI_ATTR_SET(ATTR_MCBIST_TEST_TYPE, &i_target, iv_test_type); if(rc) return rc;//---------i_mcbtest------->run
rc = setup_mcbist(i_target,i_mcbbytemask1,0,l_sub_info);if(rc) return rc;
-
-
return rc;
}
diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_generic_shmoo.H b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_generic_shmoo.H
index 009f7d5f1..c0c53414d 100644
--- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_generic_shmoo.H
+++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_generic_shmoo.H
@@ -5,7 +5,7 @@
/* */
/* IBM CONFIDENTIAL */
/* */
-/* COPYRIGHT International Business Machines Corp. 2012,2013 */
+/* COPYRIGHT International Business Machines Corp. 2012,2014 */
/* */
/* p1 */
/* */
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: mss_generic_shmoo.H,v 1.22 2013/08/08 11:08:58 sasethur Exp $
+// $Id: mss_generic_shmoo.H,v 1.24 2013/12/17 18:45:02 sasethur Exp $
// *!***************************************************************************
// *! (C) Copyright International Business Machines Corp. 1997, 1998
// *! All Rights Reserved -- Property of IBM
@@ -39,6 +39,7 @@
//------------------------------------------------------------------------------
// Version:|Author: | Date: | Comment:
// --------|--------|--------|--------------------------------------------------
+// 1.24 |abhijit |12/17/13|modified as per to support firmware
// 1.22 |abhijit |8/08/13 |added binary schmoo functions
// 1.20 |abhijit |7/17/13 |added functions for read dqs
// 1.11 |abhijit |1/21/13 |fixed constructor definition
@@ -77,7 +78,7 @@ class generic_shmoo
struct PORT{
struct RANK{
shmoo_knob_data_t K; // Set of knobs used by this shmoo
- }S[MAX_RANK];
+ }S[MAX_RANK_DIMM];
} P[MAX_PORT];
}MBA;
shmoo_knob_config_t static_knob; // Static info regarding the knob
@@ -89,6 +90,7 @@ class generic_shmoo
shmoo_algorithm_t algorithm;
shmoo_mode mcbist_mode;
uint8_t mcbist_error_map[MAX_PORT][MAX_RANK][MAX_BYTE][MAX_NIBBLES];
+ uint8_t count_bad_dq[MAX_PORT];
uint8_t schmoo_error_map[MAX_PORT][MAX_RANK][20];
uint8_t binary_done_map[MAX_PORT][MAX_RANK][20];
shmoo_type_t shmoo_mask;
@@ -98,11 +100,11 @@ class generic_shmoo
uint32_t iv_pattern;
uint32_t iv_test_type;
uint8_t iv_dmm_type;
- uint8_t iv_DQS_ON;
+ uint8_t iv_SHMOO_ON;
uint8_t iv_shmoo_type;
- uint32_t iv_shmoo_param;
- uint32_t iv_binary_diff;
- uint32_t iv_vref_mul;
+ uint16_t iv_shmoo_param;
+ uint16_t iv_binary_diff;
+ uint16_t iv_vref_mul;
uint8_t valid_rank[MAX_RANK];
@@ -116,26 +118,27 @@ class generic_shmoo
generic_shmoo(uint8_t iv_addr,shmoo_type_t shmoo_mask,shmoo_algorithm_t shmoo_algorithm);// Constructor
generic_shmoo(){};
~generic_shmoo(){}; // Destructor
- void init_multi_array(uint32_t (&array)[MAX_DQ][MAX_RPS],uint32_t init_val); //initialize multi dim arrays to known value
- fapi::ReturnCode init_multi_array_dqs(uint32_t (&array)[MAX_DQ][MAX_RPS],uint32_t init_val);
+ void init_multi_array(uint16_t (&array)[MAX_DQ],uint16_t init_val); //initialize multi dim arrays to known value
+ //fapi::ReturnCode init_multi_array_dqs(uint32_t (&array)[MAX_DQ][MAX_RPS],uint32_t init_val);
fapi::ReturnCode get_all_noms(const fapi::Target & i_target); //! Read in all the Nominal values of the relevant knobs
+ //fapi::ReturnCode get_all_bad_dq(const fapi::Target & i_target);
fapi::ReturnCode set_all_binary(const fapi::Target & i_target,bound_t bound);
fapi::ReturnCode get_all_noms_dqs(const fapi::Target & i_target); //! Read in all the Nominal values of the relevant knobs
- fapi::ReturnCode get_all_noms_gate(const fapi::Target & i_target); //! Read in all the Nominal values of the relevant knobs
- fapi::ReturnCode get_all_noms_data_disable(const fapi::Target & i_target);
- fapi::ReturnCode put_all_noms_data_disable(const fapi::Target & i_target,uint8_t flag);
+ //fapi::ReturnCode get_all_noms_gate(const fapi::Target & i_target); //! Read in all the Nominal values of the relevant knobs
+ //fapi::ReturnCode get_all_noms_data_disable(const fapi::Target & i_target);
+ //fapi::ReturnCode put_all_noms_data_disable(const fapi::Target & i_target,uint8_t flag);
//fapi::ReturnCode put_all_zero_data_disable(const fapi::Target & i_target);
fapi::ReturnCode find_bound(const fapi::Target & i_target,bound_t); // generic Right bound
fapi::ReturnCode knob_update(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag); // Increment or decrement the knob
fapi::ReturnCode knob_update_bin(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag);
- fapi::ReturnCode knob_update_gate(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t pass,bool &flag); // Increment or decrement the knob
+ //fapi::ReturnCode knob_update_gate(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t pass,bool &flag); // Increment or decrement the knob
//fapi::ReturnCode knob_update_gate(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag);
- fapi::ReturnCode knob_update_gate_train(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t pass);
+ //fapi::ReturnCode knob_update_gate_train(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t pass);
fapi::ReturnCode knob_update_dqs_by8(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag);
fapi::ReturnCode knob_update_dqs_by4(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag);
- fapi::ReturnCode print_report(const fapi::Target & i_target); // Print Shmoo report to STDOUT
+ fapi::ReturnCode print_report(const fapi::Target & i_target); // Print Shmoo report to STDOUT
fapi::ReturnCode print_report_dqs(const fapi::Target & i_target);
- fapi::ReturnCode print_report_gate(const fapi::Target & i_target);
+ //fapi::ReturnCode print_report_gate(const fapi::Target & i_target);
//fapi::ReturnCode print_shmoo_parms();
fapi::ReturnCode get_margin(const fapi::Target & i_target);
fapi::ReturnCode get_margin_dqs_by8(const fapi::Target & i_target);
@@ -147,8 +150,8 @@ class generic_shmoo
fapi::ReturnCode check_error_map(const fapi::Target & i_target,uint8_t port,uint8_t &pass);
fapi::ReturnCode sanity_check(const fapi::Target & i_target);
fapi::ReturnCode schmoo_setup_mcb( const fapi::Target & i_target);
- fapi::ReturnCode get_error_cnt(const fapi::Target & i_target,uint8_t port,uint8_t rank,uint8_t rank_pair,uint8_t bit,bound_t bound);
- fapi::ReturnCode knob_update_dqs_by8_isdimm(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag);
+ //fapi::ReturnCode get_error_cnt(const fapi::Target & i_target,uint8_t port,uint8_t rank,uint8_t rank_pair,uint8_t bit,bound_t bound);
+ //fapi::ReturnCode knob_update_dqs_by8_isdimm(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag);
fapi::ReturnCode knob_update_dqs_by4_isdimm(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag);
fapi::ReturnCode run(const fapi::Target & i_target,uint32_t *right_min_margin,uint32_t *left_min_margin,uint32_t i_vref_mul);
fapi::ReturnCode shmoo_save_rest(const fapi::Target & i_target,uint64_t i_content_array[],uint8_t i_mode);
diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist.C b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist.C
index 17f95b6c7..c64790325 100755
--- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist.C
+++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist.C
@@ -5,7 +5,7 @@
/* */
/* IBM CONFIDENTIAL */
/* */
-/* COPYRIGHT International Business Machines Corp. 2012,2013 */
+/* COPYRIGHT International Business Machines Corp. 2012,2014 */
/* */
/* p1 */
/* */
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: mss_mcbist.C,v 1.43 2013/10/04 06:32:21 sasethur Exp $
+// $Id: mss_mcbist.C,v 1.45 2013/12/17 18:36:53 sasethur Exp $
// *!***************************************************************************
// *! (C) Copyright International Business Machines Corp. 1997, 1998
// *! All Rights Reserved -- Property of IBM
@@ -38,6 +38,7 @@
//------------------------------------------------------------------------------
// Version:|Author: | Date: | Comment:
// --------|--------|--------|--------------------------------------------------
+// 1.45 |aditya |12/17/13|Added Simple_fix_rf
// 1.43 |aditya |10/05/13|Updated fw comments
// 1.42 |aditya |09/18/13|Updated Call for functions
// 1.41 |aditya |08/10/13|Minor Fix for Hostboot compile
@@ -85,7 +86,7 @@ extern "C"
{
using namespace fapi;
-
+const uint8_t MAX_BYTE = 10;
//*****************************************************************/
// Funtion name : cfg_mcb_test_mem
// Description : This function executes different MCBIST subtests
@@ -213,6 +214,18 @@ fapi::ReturnCode cfg_mcb_test_mem(const fapi::Target & i_target_mba,mcbist_test
rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR1Q_0x030106a9,RW, 4,RF,DATA_RF,0,DEFAULT,FIX_ADDR,0,4,4,l_sub_info); if(rc) return rc;
}
+ else if (i_test_type == SIMPLE_FIX_RF)
+ {
+ FAPI_DBG("%s:Current MCBIST TESTTYPE : SIMPLE_FIX_RF ",i_target_mba.toEcmdString());
+ rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,W, 0,SF,DATA_RF, 0,DEFAULT,FIX_ADDR,0,0,4,l_sub_info); if(rc) return rc;
+ rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,R, 0,SF,DATA_RF, 1,DEFAULT,FIX_ADDR,1,1,4,l_sub_info); if(rc) return rc;
+ l_done_bit = 1;
+ rc = FAPI_ATTR_SET(ATTR_MCBIST_ADDR_BANK, &i_target_mba, l_done_bit); if(rc) return rc;
+ //rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,R, 0,SF,DATA_RF, 1,DEFAULT,FIX_ADDR,2,2,4,l_sub_info); if(rc) return rc;
+ //rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,OPER_RAND,0,RF,DATA_RF, 1,DEFAULT,FIX_ADDR,3,3,4,l_sub_info); if(rc) return rc;
+
+ //rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR1Q_0x030106a9,RW, 4,RF,DATA_RF,0,DEFAULT,FIX_ADDR,0,4,4,l_sub_info); if(rc) return rc;
+ }
else
{
@@ -305,6 +318,7 @@ fapi::ReturnCode cfg_mcb_dgen(const fapi::Target & i_target_mba,mcbist_data_gen
uint32_t l_mbs23_mcb_random[MAX_BYTE] = {0x02011775,0x02011776,0x02011777,0x02011778,0x02011779,0x0201177a,0x0201177b,0x0201177c,0x0201177d,0x0201177e};
+
uint8_t l_index,l_index1 = 0;
uint32_t l_rand_32 = 0;
@@ -317,6 +331,16 @@ fapi::ReturnCode cfg_mcb_dgen(const fapi::Target & i_target_mba,mcbist_data_gen
FAPI_INF(" Data mode is %d ",i_datamode);}
uint8_t l_mbaPosition =0;
+
+ fapi::Target i_target_centaur ;
+ rc = fapiGetParentChip(i_target_mba, i_target_centaur);
+ if (rc)
+ {
+ if(l_print == 0)FAPI_INF("Error in getting parent chip!"); return rc;
+ }
+
+
+
if(l_print == 0)FAPI_INF("Function cfg_mcb_dgen");
//Read MBA position attribute 0 - MBA01 1 - MBA23
rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, &i_target_mba, l_mbaPosition);
@@ -484,12 +508,6 @@ fapi::ReturnCode cfg_mcb_dgen(const fapi::Target & i_target_mba,mcbist_data_gen
return rc;
}
- fapi::Target i_target_centaur ;
- rc = fapiGetParentChip(i_target_mba, i_target_centaur);
- if (rc)
- {
- if(l_print == 0)FAPI_INF("Error in getting parent chip!"); return rc;
- }
if(i_datamode == MCBIST_2D_CUP_PAT5)
{
@@ -710,13 +728,13 @@ fapi::ReturnCode cfg_mcb_dgen(const fapi::Target & i_target_mba,mcbist_data_gen
if(l_mbaPosition == 0)
{
- rc = fapiPutScom(i_target_mba, l_mbs01_mcb_random[l_index] , l_data_buffer_64); if(rc) return rc;//added
+ rc = fapiPutScom(i_target_centaur, l_mbs01_mcb_random[l_index] , l_data_buffer_64); if(rc) return rc;//added
}
else
{
- rc = fapiPutScom(i_target_mba, l_mbs23_mcb_random[l_index] , l_data_buffer_64); if(rc) return rc;//added
+ rc = fapiPutScom(i_target_centaur, l_mbs23_mcb_random[l_index] , l_data_buffer_64); if(rc) return rc;//added
}
}
diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist.H b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist.H
index 54abd43ce..3c57eb92c 100755
--- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist.H
+++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist.H
@@ -5,7 +5,7 @@
/* */
/* IBM CONFIDENTIAL */
/* */
-/* COPYRIGHT International Business Machines Corp. 2012,2013 */
+/* COPYRIGHT International Business Machines Corp. 2012,2014 */
/* */
/* p1 */
/* */
@@ -20,16 +20,16 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: mss_mcbist.H,v 1.38 2013/09/18 10:10:47 lapietra Exp $
+// $Id: mss_mcbist.H,v 1.41 2013/12/17 18:34:53 sasethur Exp $
// *!***************************************************************************
// *! (C) Copyright International Business Machines Corp. 1997, 1998
// *! All Rights Reserved -- Property of IBM
// *! *** IBM Confidential ***
// *!***************************************************************************
// *! FILENAME : mss_mcbist.H
-// *! TITLE :
+// *! TITLE :
// *! DESCRIPTION : MCBIST procedures
-// *! CONTEXT :
+// *! CONTEXT :
// *!
// *! OWNER NAME : Devashikamani, Aditya Email: adityamd@in.ibm.com
// *! BACKUP : Sethuraman, Saravanan Email: saravanans@in.ibm.com
@@ -38,6 +38,9 @@
//-------------------------------------------------------------------------------
// Version:|Author: | Date: | Comment:
// --------|--------|---------|--------------------------------------------------
+// 1.41 |aditya |12/17/13 |Updated mcb_error_map function parameters
+// 1.40 |rwheeler|10/29/13 |added W_ONLY_INFINITE_RAND test
+// 1.39 |aditya |10/29/13 |Updated mcb_error_map function parameters
// 1.38 |aditya |09/18/13 |Updated parameters for random seed attribute
// 1.37 |aditya |08/02/13 |Updated parameters in mcb_error_map_print function
// 1.36 |aditya |07/09/13 |Added l_random_addr_enable and l_fixed_addr_enable for struct Subtest_info
@@ -50,21 +53,21 @@
// 1.27 |aditya |02/13/13 |updated testtypes
// 1.25 |aditya |02/12/13 |updated testtypes
// 1.24 |aditya |01/30/13 |Updated fw comments
-// 1.23 |aditya |01/16/13 |added a parameter to setup_mcbist function
-// 1.22 |aditya |01/11/13 |added a parameter to setup_mcbist function
-// 1.21 |aditya |01/07/13 | Updated FW Review Comments
-// 1.20 |aditya |01/03/13 | Updated FW Comments
-// 1.18 |aditya |12/18/12 | Updated Review Comments
-// 1.17 |aditya |12/14/12 |Updated FW review comments
+// 1.23 |aditya |01/16/13 |added a parameter to setup_mcbist function
+// 1.22 |aditya |01/11/13 |added a parameter to setup_mcbist function
+// 1.21 |aditya |01/07/13 | Updated FW Review Comments
+// 1.20 |aditya |01/03/13 | Updated FW Comments
+// 1.18 |aditya |12/18/12 | Updated Review Comments
+// 1.17 |aditya |12/14/12 |Updated FW review comments
// 1.16 |aditya |12/6/12 | Updated Review Comments
// 1.15 |aditya |11/15/12 | Updated for FW REVIEW COMMENTS
// 1.13 |aditya |10/29/12 | Updated from ReturnCode to fapi::ReturnCode and Target to const fapi::Target &
-// 1.12 |aditya |10/18/12 | Changed Parameters for Function mcb_write_test_mem
+// 1.12 |aditya |10/18/12 | Changed Parameters for Function mcb_write_test_mem
// 1.11 |aditya |10/17/12 | updated code to be compatible with ecmd 13 release
-// 1.10 |aditya |15-Oct-12| Moved scom address to cen_scom_addresses.H, added user option
+// 1.10 |aditya |15-Oct-12| Moved scom address to cen_scom_addresses.H, added user option
// 1.9 |bellows |16-Jul-12| Added in Id tag
// 1.6 |gaushard|26/03/12 | Removed Extra Comments/Codes
-// 1.5 |gaushard|26/03/12 | Updated Function Declaration
+// 1.5 |gaushard|26/03/12 | Updated Function Declaration
// 1.4 |sasethur|23/03/12 | Added enum for shmoo mode
// 1.3 |gaushard|22/03/12 | Added address generation function
// 1.2 |sasethur|24/02/12 | Updated Typo
@@ -79,7 +82,7 @@
#include <fapi.H>
#include <cen_scom_addresses.H>
#include <mss_access_delay_reg.H>
-#include <mss_shmoo_common.H>
+
extern "C"
{
using namespace fapi;
@@ -126,12 +129,13 @@ enum mcbist_test_mem
R_INFINITE_RF,
MARCH,
SIMPLE_FIX_RF,
- SHMOO_STRESS,
- SIMPLE_RAND_RA,
- SIMPLE_FIX_RA,
- SIMPLE_FIX_RF_RA,
- TEST_RR,
- TEST_RF
+ SHMOO_STRESS,
+ SIMPLE_RAND_RA,
+ SIMPLE_FIX_RA,
+ SIMPLE_FIX_RF_RA,
+ TEST_RR,
+ TEST_RF,
+ W_ONLY_INFINITE_RAND
};
enum mcbist_data_gen
@@ -199,8 +203,8 @@ enum mcbist_oper_type
enum mcbist_data_mode
{
FIX,
- DATA_RF,
- DATA_RR,
+ DATA_RF,
+ DATA_RR,
RECCF,
RECCB,
DEA,
@@ -264,9 +268,9 @@ enum shmoo_mode
enum shmoo_addr_mode
{
- FEW_ADDR= 0,
- QUARTER_ADDR = 1,
- HALF_ADDR = 2,
+ FEW_ADDR= 0,
+ QUARTER_ADDR = 1,
+ HALF_ADDR = 2,
FULL_ADDR = 3
};
@@ -279,11 +283,11 @@ uint8_t l_random_data_enable;
uint8_t l_fixed_data_enable;
uint8_t l_random_addr_enable;
uint8_t l_fixed_addr_enable;
-};
+};
fapi::ReturnCode poll_mcb(const fapi::Target & i_target_mba,uint8_t *o_mcb_status,struct Subtest_info l_sub_info[30],uint8_t i_flag);
-fapi::ReturnCode mcb_error_map(const fapi::Target & i_target_mba,uint8_t o_error_map[][8][10][2]);
+fapi::ReturnCode mcb_error_map(const fapi::Target & i_target_mba,uint8_t o_error_map[][8][10][2],uint8_t i_CDarray0[80],uint8_t i_CDarray1[80],uint8_t count_bad_dq[2]);
fapi::ReturnCode mcb_write_test_mem(const fapi::Target & i_target_mba,const uint64_t i_reg_addr,mcbist_oper_type i_operation_type,uint8_t i_cfg_test_123_cmd,mcbist_addr_mode i_addr_mode,mcbist_data_mode i_data_mode,uint8_t i_done,mcbist_data_select_mode i_data_select_mode, mcbist_add_select_mode i_addr_select_mode,uint8_t i_testnumber,uint8_t i_testnumber1,uint8_t i_total_no,struct Subtest_info l_sub_info[30]);
fapi::ReturnCode cfg_mcb_test_mem(const fapi::Target & i_target_mba,mcbist_test_mem i_test_type,struct Subtest_info l_sub_info[30]);
fapi::ReturnCode mcb_reset_trap(const fapi::Target & i_target_mba);
@@ -293,7 +297,7 @@ fapi::ReturnCode start_mcb(const fapi::Target & i_target_mba);
fapi::ReturnCode setup_mcbist(const fapi::Target & i_target_mba,mcbist_byte_mask i_mcbbytemask,uint8_t i_mcbrotate,struct Subtest_info l_sub_info[30]);
//fapi::ReturnCode mcb_error_map_print(const fapi::Target & i_target_mba,ecmdDataBufferBase & i_mcb_fail_320,uint8_t i_port);
//fapi::ReturnCode mcb_error_map_print(const fapi::Target & i_target_mba,ecmdDataBufferBase & l_mcb_fail_160,uint8_t i_port,uint8_t l_array[200],uint8_t l_number);
-fapi::ReturnCode mcb_error_map_print(const fapi::Target & i_target_mba,ecmdDataBufferBase & l_mcb_fail_160,uint8_t i_port,uint8_t l_array[200],uint8_t l_number,ecmdDataBufferBase l_data_buf_port,ecmdDataBufferBase l_data_buf_spare);
+fapi::ReturnCode mcb_error_map_print(const fapi::Target & i_target_mba,ecmdDataBufferBase & l_mcb_fail_160,uint8_t i_port,uint8_t l_array[80],uint8_t l_number,ecmdDataBufferBase l_data_buf_port,ecmdDataBufferBase l_data_buf_spare);
fapi::ReturnCode mss_conversion_testtype(const fapi::Target & i_target_mba,uint8_t l_pattern,mcbist_test_mem &i_mcbtest );
fapi::ReturnCode mss_conversion_data(const fapi::Target & i_target_mba,uint8_t l_pattern,mcbist_data_gen &i_mcbpatt);
diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_address.C b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_address.C
index f36b459b8..ae34690e8 100644
--- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_address.C
+++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_address.C
@@ -5,7 +5,7 @@
/* */
/* IBM CONFIDENTIAL */
/* */
-/* COPYRIGHT International Business Machines Corp. 2013 */
+/* COPYRIGHT International Business Machines Corp. 2013,2014 */
/* */
/* p1 */
/* */
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: mss_mcbist_address.C,v 1.11 2013/05/16 22:00:24 sasethur Exp $
+// $Id: mss_mcbist_address.C,v 1.13 2013/12/18 10:40:10 sasethur Exp $
// *!***************************************************************************
// *! (C) Copyright International Business Machines Corp. 1997, 1998, 2013
// *! All Rights Reserved -- Property of IBM
@@ -38,6 +38,8 @@
//-------------------------------------------------------------------------------
// Version:|Author: | Date: | Comment:
// --------|--------|---------|--------------------------------------------------
+// 1.13 |preet |18-Dec-13| Added 64K default for few addr_mode
+// 1.12 |preet |17-Dec-13| Added Addr modes
// 1.11 |preeragh|17-May-13| Fixed FW Review Comments
// 1.10 |preeragh|30-Apr-13| Fixed FW Review Comment
// 1.9 |bellows |04-Apr-13| Changed program to be Hostboot compliant
@@ -99,16 +101,16 @@ rc = FAPI_ATTR_GET(ATTR_MCBIST_ADDR_INTER, &i_target_mba, l_addr_inter); if(rc)
//------------------------------ Debug Stuff -------------------------------
-FAPI_INF("ATTR_EFF_NUM_RANKS_PER_DIMM is %d ",l_num_ranks_per_dimm[0][0]);
-FAPI_INF("ATTR_EFF_NUM_RANKS_PER_DIMM is %d ",l_num_ranks_per_dimm[0][1]);
-FAPI_INF("ATTR_EFF_NUM_RANKS_PER_DIMM is %d ",l_num_ranks_per_dimm[1][0]);
-FAPI_INF("ATTR_EFF_NUM_RANKS_PER_DIMM is %d ",l_num_ranks_per_dimm[1][1]);
+//FAPI_INF("ATTR_EFF_NUM_RANKS_PER_DIMM is %d ",l_num_ranks_per_dimm[0][0]);
+//FAPI_INF("ATTR_EFF_NUM_RANKS_PER_DIMM is %d ",l_num_ranks_per_dimm[0][1]);
+//FAPI_INF("ATTR_EFF_NUM_RANKS_PER_DIMM is %d ",l_num_ranks_per_dimm[1][0]);
+//FAPI_INF("ATTR_EFF_NUM_RANKS_PER_DIMM is %d ",l_num_ranks_per_dimm[1][1]);
//------------------------------ Debug Stuff -------------------------------
-FAPI_INF("ATTR_EFF_NUM_MASTER_RANKS_PER_DIMM l_num_master_p0_dim0 is %d ",l_num_master_ranks[0][0]);
-FAPI_INF("ATTR_EFF_NUM_MASTER_RANKS_PER_DIMM l_num_master_p0_dim1 is %d ",l_num_master_ranks[0][1]);
-FAPI_INF("ATTR_EFF_NUM_MASTER_RANKS_PER_DIMM l_num_master_p1_dim0 is %d ",l_num_master_ranks[1][0]);
-FAPI_INF("ATTR_EFF_NUM_MASTER_RANKS_PER_DIMM l_num_master_p1_dim1 is %d ",l_num_master_ranks[1][1]);
+//FAPI_INF("ATTR_EFF_NUM_MASTER_RANKS_PER_DIMM l_num_master_p0_dim0 is %d ",l_num_master_ranks[0][0]);
+//FAPI_INF("ATTR_EFF_NUM_MASTER_RANKS_PER_DIMM l_num_master_p0_dim1 is %d ",l_num_master_ranks[0][1]);
+//FAPI_INF("ATTR_EFF_NUM_MASTER_RANKS_PER_DIMM l_num_master_p1_dim0 is %d ",l_num_master_ranks[1][0]);
+//FAPI_INF("ATTR_EFF_NUM_MASTER_RANKS_PER_DIMM l_num_master_p1_dim1 is %d ",l_num_master_ranks[1][1]);
//-------------------------------------------------------------------------------
@@ -125,24 +127,24 @@ mr1_valid = 0;
if( (l_num_ranks_p0_dim0 == 1 && l_num_ranks_p0_dim1 == 0) || (l_num_ranks_p1_dim0 == 1 && l_num_ranks_p1_dim1 == 0) ) //Single Rank case -- default0
{
//do rank-only stuff for this
- FAPI_INF("--- INSIDE 1R");
+ //FAPI_INF("--- INSIDE 1R");
l_addr_inter=3;
}
else if ( (l_num_ranks_p0_dim0 == 1 && l_num_ranks_p0_dim1 == 1) || (l_num_ranks_p1_dim0 == 1 && l_num_ranks_p1_dim1 == 1) )
{
- FAPI_INF("--- INSIDE p0d0 valid and p0d1 valid --- 0 4---- 2R");
+ //FAPI_INF("--- INSIDE p0d0 valid and p0d1 valid --- 0 4---- 2R");
mr1_valid=1;
}
else if ( (l_num_ranks_p0_dim0 == 2 && l_num_ranks_p0_dim1 == 0) || (l_num_ranks_p1_dim0 == 2 && l_num_ranks_p1_dim1 == 0) )
{
- FAPI_INF("--- INSIDE p0d0 valid and p0d1 valid --- 0 1---- 2R");
+ //FAPI_INF("--- INSIDE p0d0 valid and p0d1 valid --- 0 1---- 2R");
mr3_valid=1;
}
else if ((l_num_ranks_p0_dim0 == 2 && l_num_ranks_p0_dim1 == 2)|| (l_num_ranks_p1_dim0 == 2 && l_num_ranks_p1_dim1 == 2)) //Rank 01 and 45 case
{
- FAPI_INF("--- INSIDE --- 2R 0145");
+ //FAPI_INF("--- INSIDE --- 2R 0145");
mr3_valid = 1;
mr1_valid=1;
}
@@ -162,20 +164,20 @@ else if ((l_num_ranks_p0_dim0 == 4 && l_num_ranks_p0_dim1 == 4) || (l_num_ranks_
else
{
- FAPI_INF("-- Error ---- Check Config ----- ");
+ FAPI_INF("-- Error ---- mcbist_addr_Check dimm_Config ----- ");
}
-FAPI_INF("ATTR_EFF_DRAM_GEN is %d ",l_dram_gen);
-FAPI_INF("ATTR_EFF_DRAM_BANKS is %d ",l_dram_banks);
-FAPI_INF("ATTR_EFF_DRAM_ROWS is %d ",l_dram_rows);
-FAPI_INF("ATTR_EFF_DRAM_COLS is %d ",l_dram_cols);
-FAPI_INF("ATTR_EFF_DRAM_DENSITY is %d ",l_dram_density);
-FAPI_INF("ATTR_EFF_DRAM_WIDTH is %d ",l_dram_width);
-FAPI_INF("ATTR_ADDR_INTER Mode is %d ",l_addr_inter);
+//FAPI_INF("ATTR_EFF_DRAM_GEN is %d ",l_dram_gen);
+//FAPI_INF("ATTR_EFF_DRAM_BANKS is %d ",l_dram_banks);
+//FAPI_INF("ATTR_EFF_DRAM_ROWS is %d ",l_dram_rows);
+//FAPI_INF("ATTR_EFF_DRAM_COLS is %d ",l_dram_cols);
+//FAPI_INF("ATTR_EFF_DRAM_DENSITY is %d ",l_dram_density);
+//FAPI_INF("ATTR_EFF_DRAM_WIDTH is %d ",l_dram_width);
+//FAPI_INF("ATTR_ADDR_INTER Mode is %d ",l_addr_inter);
-FAPI_INF("--- BANK-RANK Address interleave ---");
+//FAPI_INF("--- BANK-RANK Address interleave ---");
rc = parse_addr(i_target_mba,S0,mr3_valid,mr2_valid,mr1_valid,l_dram_rows,l_dram_cols,l_addr_inter);if(rc) return rc;
@@ -203,7 +205,7 @@ uint8_t l_value_zero = 0;
uint8_t l_user_end_addr = 0;
ecmdDataBufferBase l_data_buffer_64(64);
ecmdDataBufferBase l_data_buffer_rd64(64);
-uint8_t l_attr_addr_mode = 3; //default Value - FULL Address Mode
+uint8_t l_attr_addr_mode = 0;
uint8_t l_num_cols = 0;
uint8_t l_num_rows = 0;
@@ -241,24 +243,24 @@ rc_num = l_data_buffer_64.flushTo0();
rc = fapiPutScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc;
i--;
- //FAPI_INF("Inside strcmp ba2");
+ ////FAPI_INF("Inside strcmp ba2");
l_sbit = 48;l_value =i;
rc = fapiGetScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc;
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value,l_sbit ,6);
rc = fapiPutScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc;
i--;
- //FAPI_INF("Inside strcmp ba3");
+ ////FAPI_INF("Inside strcmp ba3");
l_sbit = 42;l_value =i;
//------- Enable these for DDR4 --- for now constant map to zero
rc = fapiGetScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc;
- FAPI_INF("ba3 Invalid");
+ //FAPI_INF("ba3 Invalid");
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);
rc = fapiPutScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc;
i++;
- //FAPI_INF("Inside strcmp mr3");
+ ////FAPI_INF("Inside strcmp mr3");
l_sbit = 18;l_value =i;
rc = fapiGetScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc;
if(mr3_valid==1)
@@ -272,19 +274,19 @@ rc_num = l_data_buffer_64.flushTo0();
{
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc;
- FAPI_INF("mr3 Invalid");
+ //FAPI_INF("mr3 Invalid");
i++;
}
- //FAPI_INF("Inside strcmp mr2");
+ ////FAPI_INF("Inside strcmp mr2");
l_sbit = 12;l_value =i;
rc = fapiGetScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc;
if(mr2_valid==1)
{
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
- FAPI_INF("Inside mr2 --- l_addr_inter");
+ //FAPI_INF("Inside mr2 --- l_addr_inter");
rc = fapiPutScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc;
i--;
}
@@ -293,20 +295,20 @@ rc_num = l_data_buffer_64.flushTo0();
{
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc;
- FAPI_INF("mr2 Invalid");
+ //FAPI_INF("mr2 Invalid");
i++;
}
- //FAPI_INF("Inside strcmp mr1");
+ ////FAPI_INF("Inside strcmp mr1");
l_sbit = 6;l_value =i;
rc = fapiGetScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc;
if(mr1_valid==1)
{
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
- FAPI_INF("Inside mr1 --- l_addr_inter");
+ //FAPI_INF("Inside mr1 --- l_addr_inter");
rc = fapiPutScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc;
i--;
}
@@ -314,7 +316,7 @@ rc_num = l_data_buffer_64.flushTo0();
{
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc;
- FAPI_INF("mr1 Invalid");
+ //FAPI_INF("mr1 Invalid");
i++;
}
@@ -322,31 +324,31 @@ rc_num = l_data_buffer_64.flushTo0();
- //FAPI_INF("Inside strcmp mr0");
+ ////FAPI_INF("Inside strcmp mr0");
l_sbit = 0;l_value =i;
//------- Enable these for DDR4 --- for now constant map to zero
rc = fapiGetScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc;
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc;
i++;
- //FAPI_INF("Value of i = %d",i);
- FAPI_INF("mr0 Invalid\n");
+ ////FAPI_INF("Value of i = %d",i);
+ //FAPI_INF("mr0 Invalid\n");
- //FAPI_INF("Inside strcmp cl3");
+ ////FAPI_INF("Inside strcmp cl3");
l_sbit = 42;l_value =i;
rc = fapiGetScom(i_target_mba,0x030106cb,l_data_buffer_64); if(rc) return rc;
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,0x030106cb,l_data_buffer_64); if(rc) return rc;
i++;
- FAPI_INF("col2 Invalid");
- //FAPI_INF("Value of i = %d",i);
+ //FAPI_INF("col2 Invalid");
+ ////FAPI_INF("Value of i = %d",i);
- //FAPI_INF("Inside strcmp cl3");
+ ////FAPI_INF("Inside strcmp cl3");
l_sbit = 36;l_value =i;
rc = fapiGetScom(i_target_mba,0x030106cb,l_data_buffer_64); if(rc) return rc;
if(l_num_cols >= 1)
@@ -359,11 +361,11 @@ rc_num = l_data_buffer_64.flushTo0();
{
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,0x030106cb,l_data_buffer_64); if(rc) return rc;
- FAPI_INF("Col 3 -- Invalid");
+ //FAPI_INF("Col 3 -- Invalid");
i++;
}
- //FAPI_INF("Inside strcmp cl4");
+ ////FAPI_INF("Inside strcmp cl4");
l_sbit = 30;l_value =i;
rc = fapiGetScom(i_target_mba,0x030106cb,l_data_buffer_64); if(rc) return rc;
if(l_num_cols >= 2)
@@ -373,18 +375,18 @@ rc_num = l_data_buffer_64.flushTo0();
i--;
}
- //FAPI_INF("Value of i = %d",i);
+ ////FAPI_INF("Value of i = %d",i);
else
{
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,0x030106cb,l_data_buffer_64); if(rc) return rc;
- FAPI_INF("Col 4 -- Invalid");
+ //FAPI_INF("Col 4 -- Invalid");
i++;
}
- //FAPI_INF("Inside strcmp cl5");
+ ////FAPI_INF("Inside strcmp cl5");
l_sbit = 24;l_value =i;
rc = fapiGetScom(i_target_mba,0x030106cb,l_data_buffer_64); if(rc) return rc;
if(l_num_cols >= 3)
@@ -397,11 +399,11 @@ rc_num = l_data_buffer_64.flushTo0();
{
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,0x030106cb,l_data_buffer_64); if(rc) return rc;
- FAPI_INF("Col 5 -- Invalid");
+ //FAPI_INF("Col 5 -- Invalid");
i++;
}
- //FAPI_INF("Inside strcmp cl6");
+ ////FAPI_INF("Inside strcmp cl6");
l_sbit = 18;l_value =i;
rc = fapiGetScom(i_target_mba,0x030106cb,l_data_buffer_64); if(rc) return rc;
if(l_num_cols >= 4)
@@ -410,18 +412,18 @@ rc_num = l_data_buffer_64.flushTo0();
rc = fapiPutScom(i_target_mba,0x030106cb,l_data_buffer_64); if(rc) return rc;
i--;
}
- //FAPI_INF("Value of i = %d",i);
+ ////FAPI_INF("Value of i = %d",i);
else
{
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,0x030106cb,l_data_buffer_64); if(rc) return rc;
- FAPI_INF("Col 6 -- Invalid");
+ //FAPI_INF("Col 6 -- Invalid");
i++;
}
- //FAPI_INF("Inside strcmp cl7");
+ ////FAPI_INF("Inside strcmp cl7");
l_sbit = 12;l_value =i;
rc = fapiGetScom(i_target_mba,0x030106cb,l_data_buffer_64); if(rc) return rc;
if(l_num_cols >= 5)
@@ -430,18 +432,18 @@ rc_num = l_data_buffer_64.flushTo0();
rc = fapiPutScom(i_target_mba,0x030106cb,l_data_buffer_64); if(rc) return rc;
i--;
}
- //FAPI_INF("Value of i = %d",i);
+ ////FAPI_INF("Value of i = %d",i);
else
{
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,0x030106cb,l_data_buffer_64); if(rc) return rc;
- FAPI_INF("Col 7 -- Invalid");
+ //FAPI_INF("Col 7 -- Invalid");
i++;
}
- //FAPI_INF("Inside strcmp cl8");
+ ////FAPI_INF("Inside strcmp cl8");
l_sbit = 6;l_value =i;
rc = fapiGetScom(i_target_mba,0x030106cb,l_data_buffer_64); if(rc) return rc;
if(l_num_cols >= 6)
@@ -450,18 +452,18 @@ rc_num = l_data_buffer_64.flushTo0();
rc = fapiPutScom(i_target_mba,0x030106cb,l_data_buffer_64); if(rc) return rc;
i--;
}
- //FAPI_INF("Value of i = %d",i);
+ ////FAPI_INF("Value of i = %d",i);
else
{
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,0x030106cb,l_data_buffer_64); if(rc) return rc;
- FAPI_INF("Col 8 -- Invalid");
+ //FAPI_INF("Col 8 -- Invalid");
i++;
}
- //FAPI_INF("Inside strcmp cl9");
+ ////FAPI_INF("Inside strcmp cl9");
l_sbit = 0;l_value =i;
rc = fapiGetScom(i_target_mba,0x030106cb,l_data_buffer_64); if(rc) return rc;
if(l_num_cols >= 7)
@@ -473,20 +475,33 @@ rc_num = l_data_buffer_64.flushTo0();
{
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,0x030106cb,l_data_buffer_64); if(rc) return rc;
- FAPI_INF("Col 9 -- Invalid");
+ //FAPI_INF("Col 9 -- Invalid");
i++;
}
- //FAPI_INF("Inside strcmp cl11");
+ ////FAPI_INF("Inside strcmp cl11");
l_sbit = 54;l_value =i;
rc = fapiGetScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc;
if(l_num_cols >= 11)
{
+ if(l_dram_cols >=11)
+ {
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc;
+ //FAPI_DBG("%s: Inside l_dram_cols > 10");
i--;
+ }
+ else
+ {
+ rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
+ rc = fapiPutScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc;
+ FAPI_DBG("%s:Col 11 -- Invalid",i_target_mba.toEcmdString());
+ i++;
+ }
+
+
}
@@ -494,16 +509,16 @@ rc_num = l_data_buffer_64.flushTo0();
{
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc;
- FAPI_INF("Col 11 -- Invalid");
+ //FAPI_INF("Col 11 -- Invalid");
i++;
}
- //FAPI_INF("Value of i = %d",i);
+ ////FAPI_INF("Value of i = %d",i);
- //FAPI_INF("Inside strcmp cl13");
+ ////FAPI_INF("Inside strcmp cl13");
l_sbit = 48;l_value =i;
rc = fapiGetScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc;
if(l_num_cols >= 12)
@@ -516,16 +531,16 @@ rc_num = l_data_buffer_64.flushTo0();
{
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc;
- FAPI_INF("Col 13 Invalid");
+ //FAPI_INF("Col 13 Invalid");
i++;
}
- //FAPI_INF("Value of i = %d",i);
+ ////FAPI_INF("Value of i = %d",i);
- //FAPI_INF("Inside strcmp r0");
+ ////FAPI_INF("Inside strcmp r0");
l_sbit = 42;l_value =i;
rc = fapiGetScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc;
if(l_num_rows > 0 )
@@ -533,18 +548,18 @@ rc_num = l_data_buffer_64.flushTo0();
rc = fapiPutScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc;
i--;
}
- //FAPI_INF("Value of i = %d",i);
+ ////FAPI_INF("Value of i = %d",i);
else
{
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc;
- FAPI_INF("row 0 -- Invalid");
+ //FAPI_INF("row 0 -- Invalid");
i++;
}
- //FAPI_INF("Inside strcmp r1");
+ ////FAPI_INF("Inside strcmp r1");
l_sbit = 36;l_value =i;
rc = fapiGetScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc;
if(l_num_rows > 1 )
@@ -552,19 +567,19 @@ rc_num = l_data_buffer_64.flushTo0();
rc = fapiPutScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc;
i--;
}
- //FAPI_INF("Value of i = %d",i);
+ ////FAPI_INF("Value of i = %d",i);
else
{
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc;
- FAPI_INF("row 1 -- Invalid");
+ //FAPI_INF("row 1 -- Invalid");
i++;
}
- //FAPI_INF("Inside strcmp r2");
+ ////FAPI_INF("Inside strcmp r2");
l_sbit = 30;l_value =i;
rc = fapiGetScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc;
if(l_num_rows > 2 )
@@ -572,18 +587,18 @@ rc_num = l_data_buffer_64.flushTo0();
rc = fapiPutScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc;
i--;
}
- //FAPI_INF("Value of i = %d",i);
+ ////FAPI_INF("Value of i = %d",i);
else
{
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc;
- FAPI_INF("row 2 -- Invalid");
+ //FAPI_INF("row 2 -- Invalid");
i++;
}
- //FAPI_INF("Inside strcmp r3");
+ ////FAPI_INF("Inside strcmp r3");
l_sbit = 24;l_value =i;
rc = fapiGetScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc;
if(l_num_rows > 3 )
@@ -591,30 +606,30 @@ rc_num = l_data_buffer_64.flushTo0();
rc = fapiPutScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc;
i--;
}
- //FAPI_INF("Value of i = %d",i);
+ ////FAPI_INF("Value of i = %d",i);
else
{
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc;
- FAPI_INF("row 3 -- Invalid");
+ //FAPI_INF("row 3 -- Invalid");
i++;
}
- //FAPI_INF("Inside strcmp r4");
+ ////FAPI_INF("Inside strcmp r4");
l_sbit = 18;l_value =i;
rc = fapiGetScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc;
if(l_num_rows > 4 )
{rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc;
i--;}
- //FAPI_INF("Value of i = %d",i);
+ ////FAPI_INF("Value of i = %d",i);
else
{
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc;
- FAPI_INF("row 4 -- Invalid");
+ //FAPI_INF("row 4 -- Invalid");
i++;
}
@@ -622,7 +637,7 @@ rc_num = l_data_buffer_64.flushTo0();
- //FAPI_INF("Inside strcmp r5");
+ ////FAPI_INF("Inside strcmp r5");
l_sbit = 12;l_value =i;
rc = fapiGetScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc;
if(l_num_rows > 5 )
@@ -630,18 +645,18 @@ rc_num = l_data_buffer_64.flushTo0();
rc = fapiPutScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc;
i--;
}
- //FAPI_INF("Value of i = %d",i);
+ ////FAPI_INF("Value of i = %d",i);
else
{
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc;
- FAPI_INF("row 5 -- Invalid");
+ //FAPI_INF("row 5 -- Invalid");
i++;
}
- //FAPI_INF("Inside strcmp r6");
+ ////FAPI_INF("Inside strcmp r6");
l_sbit = 6;l_value =i;
rc = fapiGetScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc;
if(l_num_rows > 6 )
@@ -649,18 +664,18 @@ rc_num = l_data_buffer_64.flushTo0();
rc = fapiPutScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc;
i--;
}
- //FAPI_INF("Value of i = %d",i);
+ ////FAPI_INF("Value of i = %d",i);
else
{
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc;
- FAPI_INF("row 6 -- Invalid");
+ //FAPI_INF("row 6 -- Invalid");
i++;
}
- //FAPI_INF("Inside strcmp r7");
+ ////FAPI_INF("Inside strcmp r7");
l_sbit = 0;l_value =i;
rc = fapiGetScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc;
if(l_num_rows > 7 )
@@ -668,18 +683,18 @@ rc_num = l_data_buffer_64.flushTo0();
rc = fapiPutScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc;
i--;
}
- //FAPI_INF("Value of i = %d",i);
+ ////FAPI_INF("Value of i = %d",i);
else
{
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,0x030106ca,l_data_buffer_64); if(rc) return rc;
- FAPI_INF("row 7 -- Invalid");
+ //FAPI_INF("row 7 -- Invalid");
i++;
}
- //FAPI_INF("Inside strcmp r8");
+ ////FAPI_INF("Inside strcmp r8");
l_sbit = 54;l_value =i;
rc = fapiGetScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc;
if(l_num_rows > 8 )
@@ -687,19 +702,19 @@ rc_num = l_data_buffer_64.flushTo0();
rc = fapiPutScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc;
i--;
}
- //FAPI_INF("Value of i = %d",i);
+ ////FAPI_INF("Value of i = %d",i);
else
{
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc;
- FAPI_INF("row 8 -- Invalid");
+ //FAPI_INF("row 8 -- Invalid");
i++;
}
- //FAPI_INF("Inside strcmp r9");
+ ////FAPI_INF("Inside strcmp r9");
l_sbit = 48;l_value =i;
rc = fapiGetScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc;
if(l_num_rows > 9 )
@@ -707,18 +722,18 @@ rc_num = l_data_buffer_64.flushTo0();
rc = fapiPutScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc;
i--;
}
- //FAPI_INF("Value of i = %d",i);
+ ////FAPI_INF("Value of i = %d",i);
else
{
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc;
- FAPI_INF("row 9 -- Invalid");
+ //FAPI_INF("row 9 -- Invalid");
i++;
}
- //FAPI_INF("Inside strcmp r10");
+ ////FAPI_INF("Inside strcmp r10");
l_sbit = 42;l_value =i;
rc = fapiGetScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc;
if(l_num_rows > 10 )
@@ -726,18 +741,18 @@ rc_num = l_data_buffer_64.flushTo0();
rc = fapiPutScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc;
i--;
}
- //FAPI_INF("Value of i = %d",i);
+ ////FAPI_INF("Value of i = %d",i);
else
{
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc;
- FAPI_INF("row 10 -- Invalid");
+ //FAPI_INF("row 10 -- Invalid");
i++;
}
- //FAPI_INF("Inside strcmp r11");
+ ////FAPI_INF("Inside strcmp r11");
l_sbit = 36;l_value =i;
rc = fapiGetScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc;
if(l_num_rows > 11 )
@@ -745,18 +760,18 @@ rc_num = l_data_buffer_64.flushTo0();
rc = fapiPutScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc;
i--;
}
- //FAPI_INF("Value of i = %d",i);
+ ////FAPI_INF("Value of i = %d",i);
else
{
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc;
- FAPI_INF("row 11 -- Invalid");
+ //FAPI_INF("row 11 -- Invalid");
i++;
}
- //FAPI_INF("Inside strcmp r12");
+ ////FAPI_INF("Inside strcmp r12");
l_sbit = 30;l_value =i;
rc = fapiGetScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc;
if(l_num_rows > 12 )
@@ -764,18 +779,18 @@ rc_num = l_data_buffer_64.flushTo0();
rc = fapiPutScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc;
i--;
}
- //FAPI_INF("Value of i = %d",i);
+ ////FAPI_INF("Value of i = %d",i);
else
{
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc;
- FAPI_INF("row 12 -- Invalid");
+ //FAPI_INF("row 12 -- Invalid");
i++;
}
- //FAPI_INF("Inside strcmp r13");
+ ////FAPI_INF("Inside strcmp r13");
l_sbit = 24;l_value =i;
rc = fapiGetScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc;
if(l_num_rows > 13 )
@@ -783,18 +798,18 @@ rc_num = l_data_buffer_64.flushTo0();
rc = fapiPutScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc;
i--;
}
- //FAPI_INF("Value of i = %d",i);
+ ////FAPI_INF("Value of i = %d",i);
else
{
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc;
- FAPI_INF("row 13 -- Invalid");
+ //FAPI_INF("row 13 -- Invalid");
i++;
}
- //FAPI_INF("Inside strcmp r14");
+ ////FAPI_INF("Inside strcmp r14");
l_sbit = 18;l_value =i;
rc = fapiGetScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc;
if(l_num_rows > 14 )
@@ -802,18 +817,18 @@ rc_num = l_data_buffer_64.flushTo0();
rc = fapiPutScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc;
i--;
}
- //FAPI_INF("Value of i = %d",i);
+ ////FAPI_INF("Value of i = %d",i);
else
{
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc;
- FAPI_INF("row 14 -- Invalid");
+ //FAPI_INF("row 14 -- Invalid");
i++;
}
- //FAPI_INF("Inside strcmp r15");
+ ////FAPI_INF("Inside strcmp r15");
l_sbit = 12;l_value =i;
rc = fapiGetScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc;
if ( l_num_rows > 15 )
@@ -825,14 +840,14 @@ rc_num = l_data_buffer_64.flushTo0();
{
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc;
- FAPI_INF("row 15 -- Invalid");
+ //FAPI_INF("row 15 -- Invalid");
i++;
}
- //FAPI_INF("Value of i = %d",i);
+ ////FAPI_INF("Value of i = %d",i);
- //FAPI_INF("Inside strcmp r16 and l_dram_rows = %d",l_dram_rows);
+ ////FAPI_INF("Inside strcmp r16 and l_dram_rows = %d",l_dram_rows);
l_sbit = 6;l_value =i;
rc = fapiGetScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc;
if ( l_dram_rows >= 17 )
@@ -843,17 +858,17 @@ rc_num = l_data_buffer_64.flushTo0();
}
else
{
- //FAPI_INF("r16 not used");
+ ////FAPI_INF("r16 not used");
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
- FAPI_INF("Row 16 Invalid");
+ //FAPI_INF("Row 16 Invalid");
rc = fapiPutScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc;
i++;
}
- //FAPI_INF("Value of i = %d",i);
+ ////FAPI_INF("Value of i = %d",i);
- //FAPI_INF("Inside strcmp sl2");
+ ////FAPI_INF("Inside strcmp sl2");
l_sbit = 36;l_value =i;
rc = fapiGetScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc;
//------- Enable these for later --- for now constant map to zero
@@ -861,13 +876,13 @@ rc_num = l_data_buffer_64.flushTo0();
{l_value =0;}
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc;
- FAPI_INF("sl2 Invalid");
+ //FAPI_INF("sl2 Invalid");
i++;
- //FAPI_INF("Value of i = %d",i);
+ ////FAPI_INF("Value of i = %d",i);
- //FAPI_INF("Inside strcmp sl1");
+ ////FAPI_INF("Inside strcmp sl1");
l_sbit = 30;l_value =i;
rc = fapiGetScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc;
//------- Enable these for later --- for now constant map to zero
@@ -876,12 +891,12 @@ rc_num = l_data_buffer_64.flushTo0();
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc;
i++;
- FAPI_INF("sl1 Invalid");
- //FAPI_INF("Value of i = %d",i);
+ //FAPI_INF("sl1 Invalid");
+ ////FAPI_INF("Value of i = %d",i);
- //FAPI_INF("Inside strcmp sl0");
+ ////FAPI_INF("Inside strcmp sl0");
l_sbit = 24;l_value =i;
rc = fapiGetScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc;
//------- Enable these for later --- for now constant map to zero
@@ -889,9 +904,9 @@ rc_num = l_data_buffer_64.flushTo0();
{l_value =0;}
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value_zero,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function parse_addr:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc;
- FAPI_INF("sl0 Invalid");
+ //FAPI_INF("sl0 Invalid");
i++;
- //FAPI_INF("Value of i = %d",i);
+ ////FAPI_INF("Value of i = %d",i);
@@ -900,11 +915,11 @@ rc_num = l_data_buffer_64.flushTo0();
//------ Setting Start and end addr counters
-FAPI_INF("Debug - --------------- Setting Start and End Counters -----------\n");
+//FAPI_INF("Debug - --------------- Setting Start and End Counters -----------\n");
rc_num = l_data_buffer_rd64.flushTo0();
rc = fapiPutScom(i_target_mba,0x030106d0,l_data_buffer_rd64); if(rc) return rc;
l_value = i+1;
-FAPI_INF("Setting end_addr Value of i = %d",i);
+//FAPI_INF("Setting end_addr Value of i = %d",i);
rc_num = l_data_buffer_rd64.flushTo0();
//Calculate and set Valid bits for end_addr
@@ -916,17 +931,15 @@ for(i=l_value;i <= 37;i++)
if (rc_num){FAPI_ERR( "Error in function addr_gen:");rc.setEcmdError(rc_num);return rc;}
l_readscom_value = l_data_buffer_rd64.getDoubleWord (0);
-FAPI_INF("Debug - Initial End addr for 0x030106d2 = %016llX",l_readscom_value);
+//FAPI_INF("Debug - Initial End addr for 0x030106d2 = %016llX",l_readscom_value);
rc = FAPI_ATTR_GET(ATTR_EFF_SCHMOO_ADDR_MODE, &i_target_mba, l_attr_addr_mode); if(rc) return rc;
rc = FAPI_ATTR_GET(ATTR_MCBIST_START_ADDR, &i_target_mba, l_start_addr); if(rc) return rc;
-FAPI_INF("User Defined ATTR - Start = %016llX",l_start_addr);
-
-rc = FAPI_ATTR_GET(ATTR_EFF_SCHMOO_ADDR_MODE, &i_target_mba, l_attr_addr_mode); if(rc) return rc;
+//FAPI_INF("User Defined ATTR - Start = %016llX",l_start_addr);
rc = FAPI_ATTR_GET(ATTR_MCBIST_END_ADDR, &i_target_mba, l_end); if(rc) return rc;
-FAPI_INF("User defined END ATTR - End Address = %016llX",l_end);
+//FAPI_INF("User defined END ATTR - End Address = %016llX",l_end);
rc = FAPI_ATTR_GET(ATTR_MCBIST_RANK, &i_target_mba, l_user_end_addr); if(rc) return rc;
@@ -947,28 +960,31 @@ rc = fapiPutScom(i_target_mba,0x030106d3,l_data_buffer_rd64); if(rc) return rc;
else
{
-l_attr_addr_mode = 3; //Default it for FW with Full Address Range
+//l_attr_addr_mode = 3; //Default it for FW with Full Address Range
if(l_attr_addr_mode == 0)
{
- FAPI_INF("ATTR_EFF_SCHMOO_ADDR_MODE - %d ---- Few Address Mode --------",l_attr_addr_mode);
+ //FAPI_INF("ATTR_EFF_SCHMOO_ADDR_MODE - %d ---- Few Address Mode --------",l_attr_addr_mode);
l_sbit = 32;
rc_num = l_data_buffer_rd64.flushTo0();
l_start = 24;
l_len = 8;
l_value32 = 28;
rc_num=l_data_buffer_rd64.insert(l_value32,l_sbit,l_len,l_start);
+
+ l_readscom_value = 0x000003FFF8000000ull;
+ rc_num = l_data_buffer_rd64.setDoubleWord(0,l_readscom_value);if(rc_num) return rc;
rc = fapiPutScom(i_target_mba,0x030106d2,l_data_buffer_rd64); if(rc) return rc;
rc = fapiPutScom(i_target_mba,0x030106d3,l_data_buffer_rd64); if(rc) return rc;
l_readscom_value = l_data_buffer_rd64.getDoubleWord (0);
- FAPI_INF("Debug - Final End addr for 0x030106d2 = %016llX",l_readscom_value);
+ //FAPI_INF("Debug - Final End addr for 0x030106d2 = %016llX",l_readscom_value);
}
else if(l_attr_addr_mode == 1)
{
- FAPI_INF("ATTR_EFF_SCHMOO_ADDR_MODE - %d ---- QUARTER ADDRESSING Mode --------",l_attr_addr_mode);
+ //FAPI_INF("ATTR_EFF_SCHMOO_ADDR_MODE - %d ---- QUARTER ADDRESSING Mode --------",l_attr_addr_mode);
l_readscom_value = l_readscom_value >> 2;
- FAPI_INF("Debug - Final End addr for 0x030106d2 = %016llX",l_readscom_value);
+ //FAPI_INF("Debug - Final End addr for 0x030106d2 = %016llX",l_readscom_value);
rc_num = l_data_buffer_rd64.setDoubleWord(0,l_readscom_value);if(rc_num) return rc;
rc = fapiPutScom(i_target_mba,0x030106d2,l_data_buffer_rd64); if(rc) return rc;
rc = fapiPutScom(i_target_mba,0x030106d3,l_data_buffer_rd64); if(rc) return rc;
@@ -976,17 +992,17 @@ else if(l_attr_addr_mode == 1)
}
else if(l_attr_addr_mode == 2)
{
- FAPI_INF("ATTR_EFF_SCHMOO_ADDR_MODE - %d ---- HALF ADDRESSING Mode --------",l_attr_addr_mode);
+ //FAPI_INF("ATTR_EFF_SCHMOO_ADDR_MODE - %d ---- HALF ADDRESSING Mode --------",l_attr_addr_mode);
l_readscom_value = l_readscom_value >> 1;
- FAPI_INF("Debug - Final End addr for 0x030106d2 = %016llX",l_readscom_value);
+ //FAPI_INF("Debug - Final End addr for 0x030106d2 = %016llX",l_readscom_value);
rc_num = l_data_buffer_rd64.setDoubleWord(0,l_readscom_value);if(rc_num) return rc;
rc = fapiPutScom(i_target_mba,0x030106d2,l_data_buffer_rd64); if(rc) return rc;
rc = fapiPutScom(i_target_mba,0x030106d3,l_data_buffer_rd64); if(rc) return rc;
}
else
{
- FAPI_INF("ATTR_EFF_SCHMOO_ADDR_MODE - %d ---- FULL Address Mode --------",l_attr_addr_mode);
- FAPI_INF("Debug - Final End addr for 0x030106d2 = %016llX",l_readscom_value);
+ //FAPI_INF("ATTR_EFF_SCHMOO_ADDR_MODE - %d ---- FULL Address Mode --------",l_attr_addr_mode);
+ //FAPI_INF("Debug - Final End addr for 0x030106d2 = %016llX",l_readscom_value);
rc = fapiPutScom(i_target_mba,0x030106d2,l_data_buffer_rd64); if(rc) return rc;
rc = fapiPutScom(i_target_mba,0x030106d3,l_data_buffer_rd64); if(rc) return rc;
}
diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_address.H b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_address.H
index c81fc55fd..7859e84f8 100644
--- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_address.H
+++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_address.H
@@ -5,7 +5,7 @@
/* */
/* IBM CONFIDENTIAL */
/* */
-/* COPYRIGHT International Business Machines Corp. 2013 */
+/* COPYRIGHT International Business Machines Corp. 2013,2014 */
/* */
/* p1 */
/* */
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: mss_mcbist_address.H,v 1.3 2013/04/03 14:17:30 bellows Exp $
+// $Id: mss_mcbist_address.H,v 1.4 2013/12/17 18:33:49 sasethur Exp $
// *!***************************************************************************
// *! (C) Copyright International Business Machines Corp. 1997, 1998, 2013
// *! All Rights Reserved -- Property of IBM
@@ -38,6 +38,7 @@
//-------------------------------------------------------------------------------
// Version:|Author: | Date: | Comment:
// 1.3 |bellows |03-Apr-13| Added Id for firmware
+// 1.4 |preeragh|17-Dec-14| Removed unwanted header includes
// --------|--------|---------|--------------------------------------------------
//------------------------------------------------------------------------------
#ifndef MSS_MCBIST_ADDRESS_H
@@ -49,7 +50,6 @@
#include <fapi.H>
#include <cen_scom_addresses.H>
#include <mss_access_delay_reg.H>
-#include <mss_shmoo_common.H>
#include <mss_mcbist.H>
#include<string.h>
extern "C"
diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_common.C b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_common.C
index 9e9962619..409c413e1 100644
--- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_common.C
+++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_common.C
@@ -5,7 +5,7 @@
/* */
/* IBM CONFIDENTIAL */
/* */
-/* COPYRIGHT International Business Machines Corp. 2012,2013 */
+/* COPYRIGHT International Business Machines Corp. 2012,2014 */
/* */
/* p1 */
/* */
@@ -20,16 +20,16 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: mss_mcbist_common.C,v 1.55 2013/10/24 15:04:44 sasethur Exp $
+// $Id: mss_mcbist_common.C,v 1.59 2013/12/17 18:37:58 sasethur Exp $
// *!***************************************************************************
// *! (C) Copyright International Business Machines Corp. 1997, 1998
// *! All Rights Reserved -- Property of IBM
// *! *** IBM Confidential ***
// *!***************************************************************************
// *! FILENAME : mss_mcbist_common.C
-// *! TITLE :
+// *! TITLE :
// *! DESCRIPTION : MCBIST Procedures
-// *! CONTEXT :
+// *! CONTEXT :
// *!
// *! OWNER NAME : Devashikamani, Aditya Email: adityamd@in.ibm.com
// *! BACKUP : Sethuraman, Saravanan Email: saravanans@in.ibm.com
@@ -38,23 +38,27 @@
//------------------------------------------------------------------------------
// Version:|Author: | Date: | Comment:
// --------|--------|--------|--------------------------------------------------
-// 1.55 |aditya |10/24/13|Removed DD2.0 attribute check for ECC setup
+// 1.59 |aditya |12/17/13|Updated mcb_error_map function parameters
+// 1.58 |aditya |12/10/13|Updated Target for MBS registers
+// 1.57 |rwheeler|10/29/13 |added W_ONLY_INFINITE_RAND test
+// 1.56 |aditya |10/29/13|Updated mcb_error_map function parameters
+// 1.55 |aditya |10/24/13|Removed DD2.0 attribute check for ECC setup
// 1.54 |aditya |10/17/13|Minor fix in byte mask function
// 1.53 |aditya |10/05/13|Updated fw comments
// 1.52 |aditya |09/27/13|Updated for Host Boot Compile
// 1.51 |aditya |09/18/13|Updated parameters for random seed attribute and Error map masking
// 1.50 |aditya |08/08/13|Updated for Host Boot Compile
// 1.49 |aditya |08/02/13|Updated Error Map function
-// 1.48 |aditya |07/09/13|Added l_random_addr_enable and l_fixed_addr_enable for struct Subtest_info
+// 1.48 |aditya |07/09/13|Added l_random_addr_enable and l_fixed_addr_enable for struct Subtest_info
// 1.47 |aditya |06/11/13|Replaced FAPI_INF to FAPI_DBG,Added target details for Prints
-// 1.46 |aditya |06/11/13|Enabled pattern and testtype prints
-// 1.45 |aditya |06/11/13|Added attributes ATTR_MCBIST_PRINTING_DISABLE
+// 1.46 |aditya |06/11/13|Enabled pattern and testtype prints
+// 1.45 |aditya |06/11/13|Added attributes ATTR_MCBIST_PRINTING_DISABLE
// 1.44 |aditya |05/23/13|Added TEST_RR and TEST_RF testtypes
// 1.43 |aditya |05/22/13|updated parameters for Subtest Printing
// 1.41 |aditya |05/14/13|updated parameters for random seed details
// 1.40 |aditya |05/07/13|Small Fix
// 1.39 |aditya |05/07/13|Moved some parameters to attributes.
-// 1.38 |aditya |04/30/13|Minor fix for firmware
+// 1.38 |aditya |04/30/13|Minor fix for firmware
// 1.37 |aditya |04/22/13|Minor Fix
// 1.36 |aditya |04/09/13|Updated cfg_byte_mask and setup_mcbist functions
// 1.35 |aditya |03/18/13|Updated cfg_byte_mask and error map functions
@@ -64,24 +68,24 @@
// 1.29 |aditya |02/19/13|Updated Testtypes and removed rank looping
// 1.26 |aditya |02/13/13|Modified Addressing
// 1.24 |aditya |02/12/13|Modified Addressing
-// 1.23 |aditya |02/07/13|Added MBS23 registers
+// 1.23 |aditya |02/07/13|Added MBS23 registers
// 1.22 |abhijit |02/06/13|Updated cfg_byte_mask function
// 1.21 |abhijit |01/30/13|Updated cfg_byte_mask function
// 1.20 |aditya |01/30/13|Updated fw comments
// 1.18 |aditya |01/30/13|Updated fw comments
-// 1.17 |aditya |01/16/13|Updated setup_mcbist function
-// 1.16 |aditya |01/11/13|Updated function headers
+// 1.17 |aditya |01/16/13|Updated setup_mcbist function
+// 1.16 |aditya |01/11/13|Updated function headers
// 1.15 |aditya |01/11/13|added parameters to setup_mcbist function
-// 1.14 |aditya |01/07/13|Updated Review Comments
-// 1.13 |aditya |01/03/13| Updated FW Comments
+// 1.14 |aditya |01/07/13|Updated Review Comments
+// 1.13 |aditya |01/03/13| Updated FW Comments
// 1.10 |sasethur|12/14/12| Updated for warnings
-// 1.9 |aditya |12/14/12| Updated FW review comments
+// 1.9 |aditya |12/14/12| Updated FW review comments
// 1.8 |aditya |12/6/12 | Updated Review Comments
// 1.7 |aditya |11/15/12| Updated for FW REVIEW COMMENTS
-// 1.6 |aditya |10/31/12| Fixed issue in mcb_error_map function
-// 1.5 |abhijit |10/29/12| fixed issue in byte mask function
-// 1.4 |aditya |10/29/12| Updated from ReturnCode to fapi::ReturnCode and Target to const fapi::Target &
-// 1.3 |aditya |10/18/12| Replaced insertFromBin by InsertFromRight
+// 1.6 |aditya |10/31/12| Fixed issue in mcb_error_map function
+// 1.5 |abhijit |10/29/12| fixed issue in byte mask function
+// 1.4 |aditya |10/29/12| Updated from ReturnCode to fapi::ReturnCode and Target to const fapi::Target &
+// 1.3 |aditya |10/18/12| Replaced insertFromBin by InsertFromRight
// 1.2 |aditya |10/17/12| updated code to be compatible with ecmd 13 release
// 1.1 |aditya |10/01/12| updated fw review comments, datapattern, testtype, addressing
//
@@ -103,14 +107,15 @@ using namespace fapi;
#define MCB_DEBUG2
-//const uint8_t MAX_PORT = 2;
+const uint8_t MAX_PORT = 2;
const uint8_t MAX_DRAM = 20;
const uint8_t MAX_ISDIMM_DQ = 72;
-//const uint8_t MAX_BYTE = 10;
-//const uint8_t MAX_RANK = 8;
+const uint8_t MAX_BYTE = 10;
+const uint8_t MAX_RANK = 8;
+const uint8_t MAX_NIBBLES = 2;
//const uint8_t MAX_NIBBLE = 1;
const uint8_t MCB_TEST_NUM = 16;
-const uint64_t MCB_MAX_TIMEOUT = 3000000000000000ull;
+const uint64_t MCB_MAX_TIMEOUT = 0000000000000600ull;
const uint64_t DELAY_100US = 100000; // general purpose 100 usec delay for HW mode (2000000 sim cycles if simclk = 20ghz)
const uint64_t DELAY_2000SIMCYCLES = 2000; // general purpose 2000 sim cycle delay for sim mode (100 ns if simclk = 20Ghz)
//const uint64_t END_ADDRESS = 0x0000000004; //Will be fixed later, once the address generation function is ready
@@ -130,38 +135,38 @@ const uint64_t FOUR = 0x0000000000000004ull;
// const fapi::Target & Centaur.mba
// uint8_t i_port Port on which we are operating.
-// mcbist_data_gen i_mcbpatt Data pattern
+// mcbist_data_gen i_mcbpatt Data pattern
// mcbist_test_mem i_mcbtest subtest Type
-// mcbist_byte_mask i_mcbbytemask It is used to mask bad bits read from SPD
+// mcbist_byte_mask i_mcbbytemask It is used to mask bad bits read from SPD
// uint8_t i_mcbrotate Provides the number of bit to shift per burst
// uint8_t i_pattern Data Pattern
// uint8_t i_test_type Subtest Type
-// uint8_t i_rank Current Rank
-// ,uint8_t i_bit32 Flag to set bit 32 of register 02011674
+// uint8_t i_rank Current Rank
+// ,uint8_t i_bit32 Flag to set bit 32 of register 02011674
//uint64_t i_start Flag to set start address
// uint64_t i_end Flag to set End address
-//uint8_t new_address_map Flag to Enable Custom Address Map
+//uint8_t new_address_map Flag to Enable Custom Address Map
//****************************************************************/
fapi::ReturnCode setup_mcbist(const fapi::Target & i_target_mba,mcbist_byte_mask i_mcbbytemask,uint8_t i_mcbrotate,struct Subtest_info l_sub_info[30])
//fapi::ReturnCode setup_mcbist(const fapi::Target & i_target_mba, uint8_t i_port,mcbist_data_gen i_mcbpatt,mcbist_test_mem i_mcbtest,mcbist_byte_mask i_mcbbytemask,uint8_t i_mcbrotate,uint8_t i_pattern,uint8_t i_test_type,uint8_t i_rank,uint8_t i_bit32,uint64_t i_start,uint64_t i_end,uint8_t new_address_map)
{
-
+
fapi::ReturnCode rc;
uint32_t rc_num = 0;
uint8_t l_bit32 = 0;
- //uint8_t l_print = 0;
+ //uint8_t l_print = 0;
//rc = FAPI_ATTR_GET(ATTR_MCBIST_PRINTING_DISABLE, &i_target_mba,l_print); if(rc) return rc;
FAPI_DBG("%s:Function Setup_MCBIST",i_target_mba.toEcmdString());
-
+
-
+
ecmdDataBufferBase l_data_buffer_64(64);
- ecmdDataBufferBase l_data_bufferx1_64(64);
+ ecmdDataBufferBase l_data_bufferx1_64(64);
ecmdDataBufferBase l_data_bufferx2_64(64);
- ecmdDataBufferBase l_data_bufferx3_64(64);
+ ecmdDataBufferBase l_data_bufferx3_64(64);
ecmdDataBufferBase l_data_bufferx4_64(64);
uint64_t io_start_address = 0;
uint64_t io_end_address = 0;
@@ -181,7 +186,9 @@ fapi::ReturnCode setup_mcbist(const fapi::Target & i_target_mba,mcbist_byte_mask
//uint8_t l_index1 = 0;
uint8_t l_flag = 0;
//uint64_t scom_array[24] = {0x03010440,0x03010441,0x03010442,0x03010443,0x03010444,0x03010445,0x03010446,0x03010447,0x0201145E,0x0201145F,0x02011460,0x02011461,0x02011462,0x02011463,0x02011464,0x02011465,0x0201149E,0x0201149F,0x020114A0,0x020114A1,0x020114A2,0x020114A3,0x020114A4,0x020114A5};
- uint64_t scom_array[24] = {MBA01_MBABS0_0x03010440,MBA01_MBABS1_0x03010441,MBA01_MBABS2_0x03010442,MBA01_MBABS3_0x03010443,MBA01_MBABS4_0x03010444,MBA01_MBABS5_0x03010445,MBA01_MBABS6_0x03010446 ,MBA01_MBABS7_0x03010447,MBS_ECC0_MBSBS0_0x0201145E ,MBS_ECC0_MBSBS1_0x0201145F ,MBS_ECC0_MBSBS2_0x02011460 ,MBS_ECC0_MBSBS3_0x02011461 ,MBS_ECC0_MBSBS4_0x02011462 ,MBS_ECC0_MBSBS5_0x02011463 ,MBS_ECC0_MBSBS6_0x02011464 ,MBS_ECC0_MBSBS7_0x02011465 ,MBS_ECC1_MBSBS0_0x0201149E ,MBS_ECC1_MBSBS1_0x0201149F ,MBS_ECC1_MBSBS2_0x020114A0 ,MBS_ECC1_MBSBS3_0x020114A1 ,MBS_ECC1_MBSBS4_0x020114A2 ,MBS_ECC1_MBSBS5_0x020114A3 ,MBS_ECC1_MBSBS6_0x020114A4 ,MBS_ECC1_MBSBS7_0x020114A5 } ;
+ uint64_t scom_array[8] = {MBA01_MBABS0_0x03010440,MBA01_MBABS1_0x03010441,MBA01_MBABS2_0x03010442,MBA01_MBABS3_0x03010443,MBA01_MBABS4_0x03010444,MBA01_MBABS5_0x03010445,MBA01_MBABS6_0x03010446 ,MBA01_MBABS7_0x03010447 };
+
+ uint64_t l_scom_array_MBS[16]={MBS_ECC0_MBSBS2_0x02011460 ,MBS_ECC0_MBSBS3_0x02011461 ,MBS_ECC0_MBSBS4_0x02011462 ,MBS_ECC0_MBSBS5_0x02011463 ,MBS_ECC0_MBSBS6_0x02011464 ,MBS_ECC0_MBSBS7_0x02011465 ,MBS_ECC1_MBSBS0_0x0201149E ,MBS_ECC1_MBSBS1_0x0201149F ,MBS_ECC1_MBSBS2_0x020114A0 ,MBS_ECC1_MBSBS3_0x020114A1 ,MBS_ECC1_MBSBS4_0x020114A2 ,MBS_ECC1_MBSBS5_0x020114A3 ,MBS_ECC1_MBSBS6_0x020114A4 ,MBS_ECC1_MBSBS7_0x020114A5 ,MBS_ECC0_MBSBS0_0x0201145E ,MBS_ECC0_MBSBS1_0x0201145F } ;
Target i_target_centaur;
@@ -195,39 +202,39 @@ fapi::ReturnCode setup_mcbist(const fapi::Target & i_target_mba,mcbist_byte_mask
rc = mss_conversion_testtype(i_target_mba,i_mcbtest, i_mcbtest1);if(rc) return rc;
rc = mss_conversion_data(i_target_mba,i_mcbpatt,i_mcbpatt1);if(rc) return rc;
- rc = mcb_reset_trap(i_target_mba);
+ rc = mcb_reset_trap(i_target_mba);
if(rc) return rc;
//shd set attr for this 1st 8 or last 8
rc = FAPI_ATTR_GET(ATTR_MCBIST_ERROR_CAPTURE, &i_target_mba,l_bit32); if(rc) return rc;
if(l_bit32 == 1)
{
FAPI_DBG("%s: error capture set to last 8 Bits",i_target_mba.toEcmdString());
- rc = fapiGetScom(i_target_mba,0x02011674,l_data_buffer_64);if(rc) return rc;
+ rc = fapiGetScom(i_target_centaur,MBS_MCBIST01_MCBCMABQ_0x02011674,l_data_buffer_64);if(rc) return rc;
rc_num = l_data_buffer_64.setBit(32);if (rc_num){FAPI_ERR( "Error in function setup_mcbist:");rc.setEcmdError(rc_num);return rc;}
-
- rc = fapiPutScom(i_target_mba,0x02011674,l_data_buffer_64);if(rc) return rc;
-
- rc = fapiGetScom(i_target_mba,0x02011774,l_data_buffer_64);if(rc) return rc;
+
+ rc = fapiPutScom(i_target_centaur,MBS_MCBIST01_MCBCMABQ_0x02011674,l_data_buffer_64);if(rc) return rc;
+
+ rc = fapiGetScom(i_target_centaur,0x02011774,l_data_buffer_64);if(rc) return rc;
rc_num = l_data_buffer_64.setBit(32);if (rc_num){FAPI_ERR( "Error in function setup_mcbist:");rc.setEcmdError(rc_num);return rc;}
-
- rc = fapiPutScom(i_target_mba,0x02011774,l_data_buffer_64);if(rc) return rc;
+
+ rc = fapiPutScom(i_target_centaur,0x02011774,l_data_buffer_64);if(rc) return rc;
}
// if(l_attr_centaur_ec_mcbist_random_data_gen == 0)
- //{
+ //{
//FIFO work around for random data
//###################################
//# WRQ and RRQ set to FIFO mode OFF
//###################################
//#WRQ FIFO mode OFF
- rc = fapiGetScom(i_target_mba,0x0301040d,l_data_buffer_64); if(rc) return rc;
+ rc = fapiGetScom(i_target_mba,0x0301040d,l_data_buffer_64); if(rc) return rc;
rc_num = l_data_buffer_64.clearBit(5);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,0x0301040d,l_data_buffer_64); if(rc) return rc;
//#RRQ FIFO Mode OFF
- rc = fapiGetScom(i_target_mba,0x0301040e,l_data_buffer_64); if(rc) return rc;
+ rc = fapiGetScom(i_target_mba,0x0301040e,l_data_buffer_64); if(rc) return rc;
rc_num = l_data_buffer_64.setBit(6);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;}
rc_num = l_data_buffer_64.setBit(7);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;}
@@ -244,36 +251,36 @@ rc = FAPI_ATTR_GET(ATTR_MCBIST_ERROR_CAPTURE, &i_target_mba,l_bit32); if(rc) ret
//power bus ECC setting for random data
//# MBA01_MBA_WRD_MODE - disbale powerbus ECC checking and correction
- rc = fapiGetScom(i_target_mba,0x03010449,l_data_buffer_64); if(rc) return rc;
+ rc = fapiGetScom(i_target_mba,0x03010449,l_data_buffer_64); if(rc) return rc;
rc_num = l_data_buffer_64.setBit(0);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;}
rc_num = l_data_buffer_64.setBit(1);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;}
rc_num = l_data_buffer_64.setBit(5);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;}
- rc = fapiPutScom(i_target_mba,0x03010449,l_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_mba,0x03010449,l_data_buffer_64); if(rc) return rc;
//# MBS_ECC01_MBSECCQ - set EEC checking On but ECC correction OFF
- rc = fapiGetScom(i_target_mba,0x0201144a,l_data_buffer_64); if(rc) return rc;
+ rc = fapiGetScom(i_target_centaur,0x0201144a,l_data_buffer_64); if(rc) return rc;
rc_num = l_data_buffer_64.clearBit(0);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;}
rc_num = l_data_buffer_64.setBit(1);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;}
- rc = fapiPutScom(i_target_mba,0x0201144a,l_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur,0x0201144a,l_data_buffer_64); if(rc) return rc;
- rc = fapiGetScom(i_target_mba,0x0201148a,l_data_buffer_64); if(rc) return rc;
+ rc = fapiGetScom(i_target_centaur,0x0201148a,l_data_buffer_64); if(rc) return rc;
rc_num = l_data_buffer_64.clearBit(0);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;}
rc_num = l_data_buffer_64.setBit(1);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;}
- rc = fapiPutScom(i_target_mba,0x0201148a,l_data_buffer_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur,0x0201148a,l_data_buffer_64); if(rc) return rc;
//end of power bus ECC setting for random data
//}
-
- rc = fapiGetScom(i_target_mba,MBA01_CCS_MODEQ_0x030106a7, l_data_buffer_64); if(rc) return rc;
+
+ rc = fapiGetScom(i_target_mba,MBA01_CCS_MODEQ_0x030106a7, l_data_buffer_64); if(rc) return rc;
rc_num = l_data_buffer_64.clearBit(29); if (rc_num){FAPI_ERR( "Error in function setup_mcb:");rc.setEcmdError(rc_num);return rc;}
-
-
- rc = fapiPutScom(i_target_mba,MBA01_CCS_MODEQ_0x030106a7, l_data_buffer_64); if(rc) return rc;
- //Hard coded to single address - Saravanan for debug
- /* rc = fapiGetScom(i_target_mba, MBA01_MCBIST_MCBSEARA0Q_0x030106d2,l_data_buffer_64);if(rc) return rc;
- rc_num = rc_num | l_data_buffer_64.flushTo0();
- rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBSEARA0Q_0x030106d2,l_data_buffer_64); if(rc) return rc;
+
+
+ rc = fapiPutScom(i_target_mba,MBA01_CCS_MODEQ_0x030106a7, l_data_buffer_64); if(rc) return rc;
+ //Hard coded to single address - Saravanan for debug
+ /* rc = fapiGetScom(i_target_mba, MBA01_MCBIST_MCBSEARA0Q_0x030106d2,l_data_buffer_64);if(rc) return rc;
+ rc_num = rc_num | l_data_buffer_64.flushTo0();
+ rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBSEARA0Q_0x030106d2,l_data_buffer_64); if(rc) return rc;
*/
-
+
/*for(l_index = 0;l_index < 24;l_index++)
{
@@ -284,7 +291,7 @@ rc = FAPI_ATTR_GET(ATTR_MCBIST_ERROR_CAPTURE, &i_target_mba,l_bit32); if(rc) ret
{
if(l_data_buffer_64.isBitSet(l_index1))
{
-
+
l_flag = 1;
break;
@@ -293,7 +300,7 @@ rc = FAPI_ATTR_GET(ATTR_MCBIST_ERROR_CAPTURE, &i_target_mba,l_bit32); if(rc) ret
} */
- for(l_index = 0;l_index < 24;l_index++)
+ for(l_index = 0;l_index < 8;l_index++)
{
rc = fapiGetScom(i_target_mba,scom_array[l_index],l_data_buffer_64); if(rc) return rc;
@@ -305,7 +312,20 @@ rc = FAPI_ATTR_GET(ATTR_MCBIST_ERROR_CAPTURE, &i_target_mba,l_bit32); if(rc) ret
}
-
+ for(l_index = 0;l_index < 16;l_index++)
+ {
+
+ rc = fapiGetScom(i_target_centaur,l_scom_array_MBS[l_index],l_data_buffer_64); if(rc) return rc;
+ l_flag = (l_data_buffer_64.getDoubleWord(0)) ? 1 : 0;
+ if(l_flag == 1)
+ {
+ break;
+ }
+
+ }
+
+
+
if(l_flag == 1)
{
@@ -319,7 +339,7 @@ rc = FAPI_ATTR_GET(ATTR_MCBIST_ERROR_CAPTURE, &i_target_mba,l_bit32); if(rc) ret
-
+
//rc = cfg_mcb_test_mem(i_target_mba,i_mcbtest1); if(rc) return rc;
rc = cfg_mcb_test_mem(i_target_mba,i_mcbtest1,l_sub_info); if(rc) return rc;
rc = cfg_mcb_dgen(i_target_mba,i_mcbpatt1,i_mcbrotate); if(rc) return rc;
@@ -341,7 +361,7 @@ rc = FAPI_ATTR_GET(ATTR_MCBIST_ERROR_CAPTURE, &i_target_mba,l_bit32); if(rc) ret
if(i_mcbbytemask != NONE)
{
rc = cfg_byte_mask(i_target_mba); if(rc) return rc;
-
+
}
return rc;
@@ -351,7 +371,7 @@ rc = FAPI_ATTR_GET(ATTR_MCBIST_ERROR_CAPTURE, &i_target_mba,l_bit32); if(rc) ret
// Funtion name : mcb_reset_trap
// Description: Clears all the trap registers in MCBIST engine
//Input Parameters :
-// const fapi::Target & centaur.mba
+// const fapi::Target & centaur.mba
//*****************************************************************/
fapi::ReturnCode mcb_reset_trap(const fapi::Target & i_target_mba)
@@ -360,15 +380,17 @@ fapi::ReturnCode mcb_reset_trap(const fapi::Target & i_target_mba)
fapi::ReturnCode rc;
uint32_t rc_num = 0;
uint8_t l_mbaPosition = 0;
- //uint8_t l_print = 0;
+ //uint8_t l_print = 0;
//rc = FAPI_ATTR_GET(ATTR_MCBIST_PRINTING_DISABLE, &i_target_mba,l_print); if(rc) return rc;
rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, &i_target_mba, l_mbaPosition);
-
+ Target i_target_centaur;
+ //uint8_t l_attr_centaur_ec_mcbist_random_data_gen = 0;
+ rc = fapiGetParentChip(i_target_mba, i_target_centaur); if(rc) return rc;
FAPI_DBG("%s:Function - mcb_reset_trap",i_target_mba.toEcmdString());
//FAPI_DBG("%s:Using MCB Reset Trap Function -- This automatically resets error log RA, error counters, Status Reg and error map",i_target_mba.toEcmdString());
-
-
+
+
//Reset MCB Maintanence register
//FAPI_DBG("%s:Clearing the MCBIST Maintenance ",i_target_mba.toEcmdString());
//rc_num = l_data_buffer_64.flushTo0();if (rc_num){FAPI_ERR( "Error in function mcb_reset_trap:");rc.setEcmdError(rc_num);return rc;}
@@ -377,9 +399,9 @@ fapi::ReturnCode mcb_reset_trap(const fapi::Target & i_target_mba)
//rc_num = l_data_buffer_64.clearBit(0,3);if (rc_num){FAPI_ERR( "Error in function mcb_reset_trap:");rc.setEcmdError(rc_num);return rc;}
//rc = fapiPutScom(i_target_mba,MBA01_MCBIST_MCB_CNTLSTATQ_0x030106dc,l_data_buffer_64);if(rc) return rc;
-
+
//Reset the MCBIST runtime counter
- FAPI_DBG("%s:Clearing the MCBIST Runtime Counter ",i_target_mba.toEcmdString());
+ FAPI_DBG("%s:Clearing the MCBIST Runtime Counter ",i_target_mba.toEcmdString());
rc_num = l_data_buffer_64.flushTo0();if (rc_num){FAPI_ERR( "Error in function mcb_reset_trap:");rc.setEcmdError(rc_num);return rc;}
rc = fapiGetScom(i_target_mba,MBA01_MCBIST_RUNTIMECTRQ_0x030106b0,l_data_buffer_64);if(rc) return rc;
rc_num = l_data_buffer_64.clearBit(0,37);if (rc_num){FAPI_ERR( "Error in function mcb_reset_trap:");rc.setEcmdError(rc_num);return rc;}
@@ -387,7 +409,7 @@ fapi::ReturnCode mcb_reset_trap(const fapi::Target & i_target_mba)
//FAPI_DBG("%s:To clear Port error map registers ",i_target_mba.toEcmdString());
rc_num = l_data_buffer_64.flushTo0();if (rc_num){FAPI_ERR( "Error in function mcb_reset_trap:");rc.setEcmdError(rc_num);return rc;}
-
+
/*if(l_mbaPosition == 0)
{
//PORT - A
@@ -414,17 +436,17 @@ fapi::ReturnCode mcb_reset_trap(const fapi::Target & i_target_mba)
rc = fapiGetScom(i_target_mba,0x0201176f,l_data_buffer_64); if(rc) return(rc);//comment this later
} */
- rc = fapiPutScom(i_target_mba,0x02011672,l_data_buffer_64); if(rc) return(rc);
- rc = fapiPutScom(i_target_mba,0x02011673,l_data_buffer_64); if(rc) return(rc);
- rc = fapiPutScom(i_target_mba,0x02011674,l_data_buffer_64); if(rc) return(rc);
+ rc = fapiPutScom(i_target_centaur,MBS_MCBIST01_MCBCMA1Q_0x02011672,l_data_buffer_64); if(rc) return(rc);
+ rc = fapiPutScom(i_target_centaur,MBS_MCBIST01_MCBCMB1Q_0x02011673,l_data_buffer_64); if(rc) return(rc);
+ rc = fapiPutScom(i_target_centaur,MBS_MCBIST01_MCBCMABQ_0x02011674,l_data_buffer_64); if(rc) return(rc);
- rc = fapiPutScom(i_target_mba,0x02011772,l_data_buffer_64); if(rc) return(rc);
- rc = fapiPutScom(i_target_mba,0x02011773,l_data_buffer_64); if(rc) return(rc);
- rc = fapiPutScom(i_target_mba,0x02011774,l_data_buffer_64); if(rc) return(rc);
-
+ rc = fapiPutScom(i_target_centaur,0x02011772,l_data_buffer_64); if(rc) return(rc);
+ rc = fapiPutScom(i_target_centaur,0x02011773,l_data_buffer_64); if(rc) return(rc);
+ rc = fapiPutScom(i_target_centaur,0x02011774,l_data_buffer_64); if(rc) return(rc);
+
-
+
return rc;
}
@@ -442,16 +464,16 @@ fapi::ReturnCode start_mcb(const fapi::Target & i_target_mba)
ecmdDataBufferBase l_data_buffer_trap_64(64);
uint8_t l_num_ranks_per_dimm[2][2];
fapi::ReturnCode rc;
- //uint8_t l_print = 0;
+ //uint8_t l_print = 0;
//rc = FAPI_ATTR_GET(ATTR_MCBIST_PRINTING_DISABLE, &i_target_mba,l_print); if(rc) return rc;
uint32_t rc_num = 0;
FAPI_DBG("%s:Function - start_mcb",i_target_mba.toEcmdString());
- rc = fapiGetScom(i_target_mba,MBA01_MCBIST_MCBAGRAQ_0x030106d6,l_data_buffer_64); if(rc) return rc;
+ rc = fapiGetScom(i_target_mba,MBA01_MCBIST_MCBAGRAQ_0x030106d6,l_data_buffer_64); if(rc) return rc;
rc = FAPI_ATTR_GET(ATTR_EFF_NUM_RANKS_PER_DIMM, &i_target_mba, l_num_ranks_per_dimm); if(rc) return rc;
-
-
+
+
if(l_num_ranks_per_dimm[0][0] > 0)
{
FAPI_DBG("%s: Socket 0 Configured",i_target_mba.toEcmdString());
@@ -475,33 +497,33 @@ fapi::ReturnCode start_mcb(const fapi::Target & i_target_mba)
FAPI_DBG("%s:No Socket found",i_target_mba.toEcmdString());
}
-
-
+
+
//rc = fapiDelay(DELAY_100US, DELAY_2000SIMCYCLES);if(rc) return rc; // wait 2000 simcycles (in sim mode) OR 100 uS (in hw mode)
-
- rc = fapiPutScom(i_target_mba,MBA01_MCBIST_MCBAGRAQ_0x030106d6,l_data_buffer_64); if(rc) return rc;
+
+ rc = fapiPutScom(i_target_mba,MBA01_MCBIST_MCBAGRAQ_0x030106d6,l_data_buffer_64); if(rc) return rc;
FAPI_DBG("%s:STARTING MCBIST for Centaur Target",i_target_mba.toEcmdString());
rc = fapiGetScom(i_target_mba,MBA01_MCBIST_MCB_CNTLSTATQ_0x030106dc,l_data_buffer_64); if(rc) return rc;
-
+
if(l_data_buffer_64.isBitSet(0))
{
FAPI_DBG("%s:MCBIST already in progess, wait till MCBIST completes",i_target_mba.toEcmdString());
-
+
return rc;
-
+
}
-
+
rc_num = l_data_buffer_64.flushTo0();if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;}
rc_num = l_data_buffer_64.setBit(0);if (rc_num){FAPI_ERR( "Error in function start_mcb:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,MBA01_MCBIST_MCB_CNTLQ_0x030106db,l_data_buffer_64); if(rc) return rc;
-
+
//rc = fapiDelay(DELAY_100US, DELAY_2000SIMCYCLES);if(rc) return rc; // wait 2000 simcycles (in sim mode) OR 100 uS (in hw mode)
-
-
+
+
return rc;
}
@@ -515,7 +537,7 @@ fapi::ReturnCode start_mcb(const fapi::Target & i_target_mba)
// Input Parameters :
// const fapi::Target & Centaur.mba
// bool l_mcb_stop_on_fail Whether MCBIST should stop on fail or not
-// uint64_t i_time Sets the max Time out value
+// uint64_t i_time Sets the max Time out value
// Output Parameter :
// uint32 status = 1 MCBIST done with fail or MCBIST not complete (default value)
// = 0 MCBIST Done without fail
@@ -539,27 +561,27 @@ fapi::ReturnCode poll_mcb(const fapi::Target & i_target_mba,uint8_t *o_mcb_stat
uint64_t l_time = 0;
uint32_t l_time_count = 0;
//uint64_t l_reg = 0;
- uint8_t l_index = 0;
+ uint8_t l_index = 0;
uint8_t l_Subtest_no = 0;
uint32_t i_mcbtest = 0;
uint32_t l_st_ln = 0;
uint32_t l_len = 0;
uint8_t l_mcb_stop_on_fail= 0;
mcbist_test_mem i_mcbtest1;
-//uint8_t l_print = 0;
+//uint8_t l_print = 0;
//rc = FAPI_ATTR_GET(ATTR_MCBIST_PRINTING_DISABLE, &i_target_mba,l_print); if(rc) return rc;
Target i_target_centaur;
rc = fapiGetParentChip(i_target_mba, i_target_centaur); if(rc) return rc;
// Clear to register to zero;
-
+
//Should get the attributes l_time
- // 0,1,2,3,4,5,6,7,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,
-uint8_t test_array_count[44] ={0,2,2,1,1,1,6,6,30,30,2,7,4,2,1,5,4,2,1,1,3,1,1,4,2,1,1,1,1,10,0,5,3,3,3,3,9,4,30,1,2,2,3,3};
+ // 0,1,2,3,4,5,6,7,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,
+uint8_t test_array_count[44] ={0,2,2,1,1,1,6,6,30,30,2,7,4,2,1,5,4,2,1,1,3,1,1,4,2,1,1,1,1,10,0,5,3,3,3,3,9,4,30,1,2,2,3,3};
FAPI_DBG("%s:Function Poll_MCBIST",i_target_mba.toEcmdString());
- rc = FAPI_ATTR_GET(ATTR_MCBIST_MAX_TIMEOUT, &i_target_mba, l_time); if(rc) return rc;
+ rc = FAPI_ATTR_GET(ATTR_MCBIST_MAX_TIMEOUT, &i_target_mba, l_time); if(rc) return rc;
rc = FAPI_ATTR_GET(ATTR_MCBIST_STOP_ON_ERROR, &i_target_mba, l_mcb_stop_on_fail); if(rc) return rc;
-
+
/*rc = fapiGetScom(i_target_mba,0x02011670,l_data_buffer_64); if(rc) return rc;
l_reg = l_data_buffer_64.getDoubleWord (0);
FAPI_DBG("%s:Value of register is %016llX",l_reg);//Extract 3-7 .
@@ -573,20 +595,20 @@ uint8_t test_array_count[44] ={0,2,2,1,1,1,6,6,30,30,2,7,4,2,1,5,4,2,1,1,3,1,1,4
l_time = MCB_MAX_TIMEOUT;
- }
+ }
FAPI_DBG("%s:Value of max time %016llX",i_target_mba.toEcmdString(),l_time);
while ((l_mcb_done == 0) && (l_mcb_timeout <= l_time))
{
rc = fapiDelay(DELAY_100US, DELAY_2000SIMCYCLES);if(rc) return rc; // wait 2000 simcycles (in sim mode) OR 100 uS (in hw mode)
rc = fapiGetScom(i_target_mba,MBA01_MCBIST_MCB_CNTLSTATQ_0x030106dc,l_data_buffer_64); if(rc) return rc;
- if(l_data_buffer_64.isBitSet(0))
+ if(l_data_buffer_64.isBitSet(0))
{
l_time_count++;
- if(l_time_count == 5000)
+ if(l_time_count == 500)
{
l_time_count = 0;
- FAPI_DBG("%s:POLLING STATUS:POLLING IN PROGRESS...........",i_target_mba.toEcmdString());
+ FAPI_DBG("%s:POLLING STATUS:POLLING IN PROGRESS...........",i_target_mba.toEcmdString());
//if((i_flag == 0) &&(l_print == 0))
if(i_flag == 0)
{
@@ -609,27 +631,27 @@ uint8_t test_array_count[44] ={0,2,2,1,1,1,6,6,30,30,2,7,4,2,1,5,4,2,1,1,3,1,1,4
{
switch(l_sub_info[l_Subtest_no].l_operation_type)
{
- case 0 : FAPI_DBG("%s:SUBTEST :WRITE",i_target_mba.toEcmdString());break;
- case 1 : FAPI_DBG("%s:SUBTEST :READ",i_target_mba.toEcmdString());break;
- case 2 : FAPI_DBG("%s:SUBTEST :READ - WRITE",i_target_mba.toEcmdString());break;
- case 3 : FAPI_DBG("%s:SUBTEST :WRITE - READ",i_target_mba.toEcmdString());break;
- case 4 : FAPI_DBG("%s:SUBTEST :READ - WRITE - READ",i_target_mba.toEcmdString());break;
- case 5 : FAPI_DBG("%s:SUBTEST :READ - WRITE - WRITE",i_target_mba.toEcmdString());break;
- case 6 : FAPI_DBG("%s:SUBTEST :RANDOM COMMAND SEQUENCE",i_target_mba.toEcmdString());break;
- case 7 : FAPI_DBG("%s:SUBTEST :GOTO SUBTEST N OR REFRESH ONLY",i_target_mba.toEcmdString());break;
+ case 0 : FAPI_DBG("%s:SUBTEST :WRITE",i_target_mba.toEcmdString());break;
+ case 1 : FAPI_DBG("%s:SUBTEST :READ",i_target_mba.toEcmdString());break;
+ case 2 : FAPI_DBG("%s:SUBTEST :READ - WRITE",i_target_mba.toEcmdString());break;
+ case 3 : FAPI_DBG("%s:SUBTEST :WRITE - READ",i_target_mba.toEcmdString());break;
+ case 4 : FAPI_DBG("%s:SUBTEST :READ - WRITE - READ",i_target_mba.toEcmdString());break;
+ case 5 : FAPI_DBG("%s:SUBTEST :READ - WRITE - WRITE",i_target_mba.toEcmdString());break;
+ case 6 : FAPI_DBG("%s:SUBTEST :RANDOM COMMAND SEQUENCE",i_target_mba.toEcmdString());break;
+ case 7 : FAPI_DBG("%s:SUBTEST :GOTO SUBTEST N OR REFRESH ONLY",i_target_mba.toEcmdString());break;
default : FAPI_DBG("%s:Wrong Operation selected for Subtest",i_target_mba.toEcmdString());
}
switch(l_sub_info[l_Subtest_no].l_data_mode)
{
- case 0 : FAPI_DBG("%s:DATA MODE :FIXED DATA",i_target_mba.toEcmdString());break;
- case 1 : FAPI_DBG("%s:DATA MODE :DATA_RANDOM_FORWARD",i_target_mba.toEcmdString());break;
- case 2 : FAPI_DBG("%s:DATA MODE :DATA_RANDOM_REVERSE",i_target_mba.toEcmdString());break;
- case 3 : FAPI_DBG("%s:DATA MODE :RANDOM w/ECC FORWARD",i_target_mba.toEcmdString());break;
- case 4 : FAPI_DBG("%s:DATA MODE :RANDOM w/ECC REVERSE",i_target_mba.toEcmdString());break;
- case 5 : FAPI_DBG("%s:DATA MODE :DATA EQUAL ADDRESS",i_target_mba.toEcmdString());break;
- case 6 : FAPI_DBG("%s:DATA MODE :DATA ROTATE LEFT",i_target_mba.toEcmdString());break;
- case 7 : FAPI_DBG("%s:DATA MODE :DATA ROTATE RIGHT",i_target_mba.toEcmdString());break;
+ case 0 : FAPI_DBG("%s:DATA MODE :FIXED DATA",i_target_mba.toEcmdString());break;
+ case 1 : FAPI_DBG("%s:DATA MODE :DATA_RANDOM_FORWARD",i_target_mba.toEcmdString());break;
+ case 2 : FAPI_DBG("%s:DATA MODE :DATA_RANDOM_REVERSE",i_target_mba.toEcmdString());break;
+ case 3 : FAPI_DBG("%s:DATA MODE :RANDOM w/ECC FORWARD",i_target_mba.toEcmdString());break;
+ case 4 : FAPI_DBG("%s:DATA MODE :RANDOM w/ECC REVERSE",i_target_mba.toEcmdString());break;
+ case 5 : FAPI_DBG("%s:DATA MODE :DATA EQUAL ADDRESS",i_target_mba.toEcmdString());break;
+ case 6 : FAPI_DBG("%s:DATA MODE :DATA ROTATE LEFT",i_target_mba.toEcmdString());break;
+ case 7 : FAPI_DBG("%s:DATA MODE :DATA ROTATE RIGHT",i_target_mba.toEcmdString());break;
default : FAPI_DBG("%s:Wrong Data Mode selected for Subtest",i_target_mba.toEcmdString());
}
@@ -637,10 +659,10 @@ uint8_t test_array_count[44] ={0,2,2,1,1,1,6,6,30,30,2,7,4,2,1,5,4,2,1,1,3,1,1,4
switch(l_sub_info[l_Subtest_no].l_addr_mode)
{
- case 0 : FAPI_DBG("%s:ADDRESS MODE :SEQUENTIAL FORWARD",i_target_mba.toEcmdString());break;
- case 1 : FAPI_DBG("%s:ADDRESS MODE :SEQUENTIAL REVERSE",i_target_mba.toEcmdString());break;
- case 2 : FAPI_DBG("%s:ADDRESS MODE :RANDOM FORWARD",i_target_mba.toEcmdString());break;
- case 3 : FAPI_DBG("%s:ADDRESS MODE :RANDOM REVERSE",i_target_mba.toEcmdString());break;
+ case 0 : FAPI_DBG("%s:ADDRESS MODE :SEQUENTIAL FORWARD",i_target_mba.toEcmdString());break;
+ case 1 : FAPI_DBG("%s:ADDRESS MODE :SEQUENTIAL REVERSE",i_target_mba.toEcmdString());break;
+ case 2 : FAPI_DBG("%s:ADDRESS MODE :RANDOM FORWARD",i_target_mba.toEcmdString());break;
+ case 3 : FAPI_DBG("%s:ADDRESS MODE :RANDOM REVERSE",i_target_mba.toEcmdString());break;
default : FAPI_DBG("%s:Wrong Address Mode selected for Subtest",i_target_mba.toEcmdString());
}
}
@@ -651,7 +673,7 @@ uint8_t test_array_count[44] ={0,2,2,1,1,1,6,6,30,30,2,7,4,2,1,5,4,2,1,1,3,1,1,4
}
l_mcb_ip = 1;
}
- if(l_data_buffer_64.isBitSet(1))
+ if(l_data_buffer_64.isBitSet(1))
{
{FAPI_DBG("%s:POLLING STATUS:MCBIST POLLING DONE",i_target_mba.toEcmdString());
FAPI_DBG("%s:MCBIST is done",i_target_mba.toEcmdString());}
@@ -661,21 +683,21 @@ uint8_t test_array_count[44] ={0,2,2,1,1,1,6,6,30,30,2,7,4,2,1,5,4,2,1,1,3,1,1,4
rc = fapiGetScom(i_target_mba,MBA01_MCBIST_MCBCFGQ_0x030106e0,l_data_buffer_trap_64);if(rc) return rc;
rc_num = l_data_buffer_64.clearBit(60);if (rc_num){FAPI_ERR( "Error in function Poll_mcb:");rc.setEcmdError(rc_num);return rc;}
rc = fapiPutScom(i_target_mba,MBA01_MCBIST_MCBCFGQ_0x030106e0,l_data_buffer_trap_64);if(rc) return rc;
-
+
}
- if(l_data_buffer_64.isBitSet(2))
+ if(l_data_buffer_64.isBitSet(2))
{
l_mcb_fail = 1;
FAPI_DBG("%s:POLLING STATUS:MCBIST FAILED",i_target_mba.toEcmdString());
- if(l_mcb_stop_on_fail == 1) //if stop on error is 1, break after the current subtest completes
+ if(l_mcb_stop_on_fail == 1) //if stop on error is 1, break after the current subtest completes
{
rc = fapiGetScom(i_target_mba,MBA01_MCBIST_MCBCFGQ_0x030106e0,l_stop_on_fail_buffer_64); if(rc) return rc;
rc_num = l_stop_on_fail_buffer_64.setBit(62);if (rc_num){FAPI_ERR( "Error in function poll_mcb:");rc.setEcmdError(rc_num);return rc;} // Set bit 61 to break after current subtest
rc = fapiPutScom(i_target_mba,MBA01_MCBIST_MCBCFGQ_0x030106e0,l_stop_on_fail_buffer_64); if(rc) return rc;
FAPI_DBG("%s:MCBIST will break after Current Subtest",i_target_mba.toEcmdString());
-
- while(l_mcb_done == 0) // Poll till MCBIST is done
+
+ while(l_mcb_done == 0) // Poll till MCBIST is done
{
rc = fapiGetScom(i_target_mba,MBA01_MCBIST_MCB_CNTLSTATQ_0x030106dc,l_data_buffer_64); if(rc) return rc;
if(l_data_buffer_64.isBitSet(1))
@@ -704,7 +726,7 @@ uint8_t test_array_count[44] ={0,2,2,1,1,1,6,6,30,30,2,7,4,2,1,5,4,2,1,1,3,1,1,4
return rc;
}
-#ifdef MCB_DEBUG_1
+#ifdef MCB_DEBUG_1
//if((l_count%100 == 0)&&(l_print == 0))//Can be changed later
if(l_count%100 == 0)
{
@@ -715,7 +737,7 @@ uint8_t test_array_count[44] ={0,2,2,1,1,1,6,6,30,30,2,7,4,2,1,5,4,2,1,1,3,1,1,4
#endif
l_count++;
}
-
+
if((l_mcb_done == 1) && (l_mcb_fail == 1) && (l_mcb_stop_on_fail == true) )
{
*o_mcb_status = 1; /// MCB fail
@@ -729,7 +751,7 @@ uint8_t test_array_count[44] ={0,2,2,1,1,1,6,6,30,30,2,7,4,2,1,5,4,2,1,1,3,1,1,4
}
else if((l_mcb_done == 1) && (l_mcb_fail == 0))
{
- *o_mcb_status = 0;//pass;
+ *o_mcb_status = 0;//pass;
#ifdef MCB_DEBUG2
FAPI_DBG("%s:*************************************************",i_target_mba.toEcmdString());
FAPI_DBG("%s:MCB done bit : %d",i_target_mba.toEcmdString(),l_mcb_done);
@@ -740,18 +762,18 @@ uint8_t test_array_count[44] ={0,2,2,1,1,1,6,6,30,30,2,7,4,2,1,5,4,2,1,1,3,1,1,4
}
else if((l_mcb_done == 0) && (l_mcb_ip == 1) && (l_mcb_timeout == l_time) )
{
- *o_mcb_status = 1;//fail;
+ *o_mcb_status = 1;//fail;
#ifdef MCB_DEBUG2
FAPI_DBG("%s:****************************************",i_target_mba.toEcmdString());
FAPI_DBG("%s:MCB done bit : %d",i_target_mba.toEcmdString(),l_mcb_done);
FAPI_DBG("%s:MCB fail bit : %d",i_target_mba.toEcmdString(),l_mcb_fail);
FAPI_DBG("%s:MCB IP bit : %d",i_target_mba.toEcmdString(),l_mcb_ip);
FAPI_DBG("%s:****************************************",i_target_mba.toEcmdString());
-
+
#endif
}
-
+
if (*o_mcb_status == 1)
{
FAPI_ERR( "poll_mcb:MCBIST failed");
@@ -759,11 +781,11 @@ uint8_t test_array_count[44] ={0,2,2,1,1,1,6,6,30,30,2,7,4,2,1,5,4,2,1,1,3,1,1,4
return rc;
}
-
- return rc;
+
+ return rc;
}
-fapi::ReturnCode mcb_error_map_print(const fapi::Target & i_target_mba,ecmdDataBufferBase & i_mcb_fail_160,uint8_t i_port,uint8_t i_array[200],uint8_t i_number,ecmdDataBufferBase i_data_buf_port,ecmdDataBufferBase i_data_buf_spare)
+fapi::ReturnCode mcb_error_map_print(const fapi::Target & i_target_mba,ecmdDataBufferBase & i_mcb_fail_160,uint8_t i_port,uint8_t i_array[80],uint8_t i_number,ecmdDataBufferBase i_data_buf_port,ecmdDataBufferBase i_data_buf_spare)
{
ReturnCode rc;
uint32_t rc_num;
@@ -781,10 +803,10 @@ fapi::ReturnCode mcb_error_map_print(const fapi::Target & i_target_mba,ecmdData
//uint32_t rc_num;
uint8_t l_mbaPosition = 0;
//uint8_t l_attr_eff_dimm_type_u8 = 0;
- //uint8_t l_print = 0;
+ //uint8_t l_print = 0;
//rc = FAPI_ATTR_GET(ATTR_MCBIST_PRINTING_DISABLE, &i_target_mba,l_print); if(rc) return rc;
rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, &i_target_mba, l_mbaPosition);
- rc = FAPI_ATTR_GET(ATTR_EFF_NUM_RANKS_PER_DIMM, &i_target_mba, l_num_ranks_per_dimm); if(rc) return rc;
+ rc = FAPI_ATTR_GET(ATTR_EFF_NUM_RANKS_PER_DIMM, &i_target_mba, l_num_ranks_per_dimm); if(rc) return rc;
l_max_rank=l_num_ranks_per_dimm[i_port][0]+l_num_ranks_per_dimm[i_port][1];
@@ -879,7 +901,7 @@ fapi::ReturnCode mcb_error_map_print(const fapi::Target & i_target_mba,ecmdData
FAPI_DBG("%s:Nibble 01010101010101010101",i_target_mba.toEcmdString());
FAPI_DBG("%s:MASK %016llX%04X\n",i_target_mba.toEcmdString(),l_generic_buffer,l_output);
}
-
+
}
@@ -896,9 +918,9 @@ fapi::ReturnCode mcb_error_map_print(const fapi::Target & i_target_mba,ecmdData
//uint8_t l_index,l_value,l_value1;
//uint32_t rc_num;
//uint8_t l_array0[200],l_marray0[200];
-uint8_t l_marray0[200];
+uint8_t l_marray0[80] = {0};
ecmdDataBufferBase l_data_buffer1_64(64),l_data_buffer3_64(64);
-
+
rc_num = l_data_buffer1_64.flushTo0();
@@ -919,7 +941,7 @@ uint8_t l_num,io_num,l_inter,l_num2,l_index2;
for(l_index=0;l_index<i_number;l_index++)
{
-
+
//l_value = l_array0[l_index];
l_value = i_array[l_index];
l_inter = (l_value/4);
@@ -968,21 +990,21 @@ l_value = 0;
//FAPI_DBG("%s: --------------------",i_target_mba.toEcmdString());
-
-
+
+
rc = mss_getrankpair(i_target_mba,i_port,0,&l_rank_pair,l_rankpair_table); if(rc) return rc;
for(l_cur_rank = 0;l_cur_rank < l_max_rank;l_cur_rank++)
- {
+ {
l_index2 = 0;
l_num = 0;
i_rank = l_rankpair_table[l_cur_rank];
- sprintf(l_str1,"%s:%-4s%d%5s",i_target_mba.toEcmdString(),"RANK",i_rank,"");
+ sprintf(l_str1,"%s:%-4s%d%5s",i_target_mba.toEcmdString(),"RANK",i_rank,"");
for(l_byte = 0; l_byte < MAX_BYTE; l_byte++)
{
for(l_nibble = 0; l_nibble < MAX_NIBBLES; l_nibble++)
{
- l_value = l_marray0[l_num] ;
+ l_value = l_marray0[l_num] ;
//FAPI_DBG("%s:l_value %d l_num %d",i_target_mba.toEcmdString(),l_value,l_num);
l_index0 = (i_rank*20) + (l_byte*2) + l_nibble;
// l_index1 = l_index0 + 160*(i_port);
@@ -998,16 +1020,16 @@ l_value = 0;
else
{
if(i_mcb_fail_160.isBitSet(l_index1))
- {
+ {
strcat(l_str1,"X");
}
else
- {
+ {
strcat(l_str1,".");
}
}
}
- }
+ }
FAPI_DBG("%s",l_str1);
}
@@ -1018,15 +1040,15 @@ return rc;
/*****************************************************************/
// Funtion name : mcb_error_map
-// Description : Reads the nibblewise Error map registers into o_error_map
+// Description : Reads the nibblewise Error map registers into o_error_map
// Input Parameters :
// const fapi::Target & Centaur.mba
// uint8_t i_port Current port
-// uint8_t i_rank Current Rank
+// uint8_t i_rank Current Rank
// Output Parameter :
-// uint8_t o_error_map[][8][10][2] Contains the error map
+// uint8_t o_error_map[][8][10][2] Contains the error map
//****************************************************************/
-fapi::ReturnCode mcb_error_map(const fapi::Target & i_target_mba, uint8_t o_error_map[][8][10][2])
+fapi::ReturnCode mcb_error_map(const fapi::Target & i_target_mba, uint8_t o_error_map[][8][10][2],uint8_t i_CDarray0[80],uint8_t i_CDarray1[80],uint8_t count_bad_dq[2])
{
ecmdDataBufferBase l_mcbem1ab(64);
ecmdDataBufferBase l_mcbem2ab(64);
@@ -1048,7 +1070,7 @@ fapi::ReturnCode mcb_error_map(const fapi::Target & i_target_mba, uint8_t o_er
fapi::ReturnCode rc;
uint32_t rc_num = 0;
uint16_t l_index0 = 0;
- uint32_t l_index1 = 0;
+ uint32_t l_index1 = 0;
uint8_t l_port = 0;
uint8_t l_rank = 0;
uint8_t l_byte = 0;
@@ -1056,14 +1078,28 @@ fapi::ReturnCode mcb_error_map(const fapi::Target & i_target_mba, uint8_t o_er
uint8_t l_num_ranks_per_dimm[MAX_PORT][MAX_PORT];
//uint64_t start;
uint8_t l_mbaPosition = 0;
- //uint8_t l_print = 0;
+ //uint8_t l_print = 0;
//rc = FAPI_ATTR_GET(ATTR_MCBIST_PRINTING_DISABLE, &i_target_mba,l_print); if(rc) return rc;
uint8_t rank_pair,i_byte,i_nibble,i_input_index_u8,o_val,i_byte1,i_nibble1;
uint8_t l_index,l_i,l_number,l_value,l_value1,l_number1;//l_cur_rank,
l_number1=0; //HB
- uint8_t l_array[200],l_marray11[200],l_array0[200],l_marray0[200],l_array1[200],l_marray1[200],l_marray[200],cdimm_dq0[72],cdimm_dq1[72],cdimm_dq[72],l_ISarray1[200],l_ISarray0[200],l_ISarray[200];//,isdimm_dq[72]
+ uint8_t l_array[80] ={0};
+ uint8_t l_marray11[80] ={0};
+ uint8_t l_array0[80] ={0};
+ uint8_t l_marray0[80] ={0};
+ uint8_t l_array1[80] ={0};
+ uint8_t l_marray1[80] ={0};
+ uint8_t l_marray[80] ={0};
+ uint8_t cdimm_dq0[72] ={0};
+ uint8_t cdimm_dq1[72] ={0};
+ uint8_t cdimm_dq[80] ={0};
+ uint8_t l_ISarray1[80] ={0};
+ uint8_t l_ISarray0[80] ={0};
+ uint8_t l_ISarray[80] ={0};
+ //uint8_t isdimm_dq[80] ={0};
+ //,l_marray11[80],l_array0[80],l_marray0[80],l_array1[80],l_marray1[80],l_marray[80],cdimm_dq0[72],cdimm_dq1[72],cdimm_dq[72],l_ISarray1[80],l_ISarray0[80],l_ISarray[80];//,isdimm_dq[72]
//uint8_t isdimm_dq0[72],isdimm_dq1[72];
uint8_t l_rankpair_table[MAX_RANK] ;
ecmdDataBufferBase l_data_buffer1_64(64),l_data_buffer3_64(64),l_data_buf_port0(64),l_data_buf_port1(64),l_data_buf_spare(64);
@@ -1085,25 +1121,25 @@ fapi::ReturnCode mcb_error_map(const fapi::Target & i_target_mba, uint8_t o_er
{
FAPI_ERR("Error getting MBA position"); return rc;
}
-
-
- rc = FAPI_ATTR_GET(ATTR_EFF_NUM_RANKS_PER_DIMM, &i_target_mba, l_num_ranks_per_dimm); if(rc) return rc;
+
+
+ rc = FAPI_ATTR_GET(ATTR_EFF_NUM_RANKS_PER_DIMM, &i_target_mba, l_num_ranks_per_dimm); if(rc) return rc;
l_max_rank0=l_num_ranks_per_dimm[0][0]+l_num_ranks_per_dimm[0][1];
l_max_rank1=l_num_ranks_per_dimm[1][0]+l_num_ranks_per_dimm[1][1];
- rc = fapiGetParentChip(i_target_mba, i_target_centaur);
+ rc = fapiGetParentChip(i_target_mba, i_target_centaur);
if (rc)
{
FAPI_ERR("Error in getting Parent Chiplet");
return rc;
}
-
-
-
+
+
+
if(l_mbaPosition == 0)
{
-
+
rc = fapiGetScom(i_target_centaur,MBS_MCBIST01_MCBEMA1Q_0x0201166a,l_mcbem1ab); if(rc) return rc;
rc_num = l_mcb_fail_160.insert(l_mcbem1ab,0,60,0);if (rc_num){FAPI_ERR( "Error in function mcb_error_map:");rc.setEcmdError(rc_num);return rc;}
@@ -1119,10 +1155,10 @@ fapi::ReturnCode mcb_error_map(const fapi::Target & i_target_mba, uint8_t o_er
rc_num = l_mcb_fail1_160.insert(l_mcbem3ab,120,40,0);if (rc_num){FAPI_ERR( "Error in function mcb_error_map:");rc.setEcmdError(rc_num);return rc;}
}
- else if(l_mbaPosition==1)
+ else if(l_mbaPosition==1)
{
-
+
rc = fapiGetScom(i_target_centaur,0x0201176a,l_mcbem1ab); if(rc) return rc;
rc_num = l_mcb_fail_160.insert(l_mcbem1ab,0,60,0);if (rc_num){FAPI_ERR( "Error in function mcb_error_map:");rc.setEcmdError(rc_num);return rc;}
rc = fapiGetScom(i_target_centaur,0x0201176b,l_mcbem2ab); if(rc) return rc;
@@ -1136,8 +1172,8 @@ fapi::ReturnCode mcb_error_map(const fapi::Target & i_target_mba, uint8_t o_er
rc = fapiGetScom(i_target_centaur,0x0201176f,l_mcbem3ab); if(rc) return rc;
rc_num = l_mcb_fail1_160.insert(l_mcbem3ab,120,40,0);if (rc_num){FAPI_ERR( "Error in function mcb_error_map:");rc.setEcmdError(rc_num);return rc;}
- }
-
+ }
+
for (l_port = 0; l_port < MAX_PORT ; l_port++)
{
@@ -1198,14 +1234,14 @@ fapi::ReturnCode mcb_error_map(const fapi::Target & i_target_mba, uint8_t o_er
}
}
}
-
+
rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_TYPE, &i_target_mba, l_attr_eff_dimm_type_u8); if(rc) return rc;
-
+
//Adi
//l_attr_eff_dimm_type_u8 = 0;
-
+
//ISDIMM error map
- //uint8_t l_max_ranks =8;
+ //uint8_t l_max_ranks =8;
//Modified New Code
//ReturnCode rc;
@@ -1241,8 +1277,8 @@ rc_num = l_data_buffer3_64.flushTo0();
{
//FAPI_INF("l_array:%d",l_i);
l_i = 0;
- rc = fapiGetScom(i_target_mba,0x02011672,l_data_buf_port0); if(rc) return rc;
- rc = fapiGetScom(i_target_mba,0x02011674,l_data_buf_spare); if(rc) return rc;
+ rc = fapiGetScom(i_target_centaur,MBS_MCBIST01_MCBCMA1Q_0x02011672,l_data_buf_port0); if(rc) return rc;
+ rc = fapiGetScom(i_target_centaur,MBS_MCBIST01_MCBCMABQ_0x02011674,l_data_buf_spare); if(rc) return rc;
for(l_index=0;l_index<64;l_index++)
{
@@ -1255,9 +1291,9 @@ rc_num = l_data_buffer3_64.flushTo0();
}
for(l_index=0;l_index<16;l_index++)
{
-
+
if(l_data_buf_spare.isBitSet(l_index))
- {
+ {
l_array0[l_i] = l_index+64;
l_i++;
//FAPI_INF("l_array:%d",l_i);
@@ -1270,12 +1306,12 @@ rc_num = l_data_buffer3_64.flushTo0();
{
//FAPI_INF("l_array:%d",l_i);
l_i = 0;
- rc = fapiGetScom(i_target_mba,0x02011673,l_data_buf_port1); if(rc) return rc;
- rc = fapiGetScom(i_target_mba,0x02011674,l_data_buf_spare); if(rc) return rc;
+ rc = fapiGetScom(i_target_centaur,MBS_MCBIST01_MCBCMB1Q_0x02011673,l_data_buf_port1); if(rc) return rc;
+ rc = fapiGetScom(i_target_centaur,MBS_MCBIST01_MCBCMABQ_0x02011674,l_data_buf_spare); if(rc) return rc;
for(l_index=0;l_index<64;l_index++)
{
if(l_data_buf_port1.isBitSet(l_index))
- {
+ {
l_array1[l_i] = l_index;
l_i++;//FAPI_INF("l_array:%d",l_i);
}
@@ -1288,7 +1324,7 @@ rc_num = l_data_buffer3_64.flushTo0();
{
if(l_data_buf_spare.isBitSet(l_index))
- {
+ {
l_array1[l_i] = l_index+64-16;
l_i++;//FAPI_INF("l_array:%d",l_i);
}
@@ -1305,14 +1341,14 @@ rc_num = l_data_buffer3_64.flushTo0();
{
//FAPI_INF("l_array:%d",l_i);
l_i = 0;
- rc = fapiGetScom(i_target_mba,0x02011774,l_data_buf_spare); if(rc) return rc;
- rc = fapiGetScom(i_target_mba,0x02011772,l_data_buf_port0); if(rc) return rc;
+ rc = fapiGetScom(i_target_centaur,0x02011774,l_data_buf_spare); if(rc) return rc;
+ rc = fapiGetScom(i_target_centaur,0x02011772,l_data_buf_port0); if(rc) return rc;
for(l_index=0;l_index<64;l_index++)
{
if(l_data_buf_port0.isBitSet(l_index))
- {
+ {
l_array0[l_i] = l_index;
l_i++;//FAPI_INF("l_array:%d",l_i);
}
@@ -1323,7 +1359,7 @@ rc_num = l_data_buffer3_64.flushTo0();
for(l_index=0;l_index<16;l_index++)
{
if(l_data_buf_spare.isBitSet(l_index))
- {
+ {
l_array0[l_i] = l_index+64;
l_i++;//FAPI_INF("l_array:%d",l_i);
}
@@ -1335,13 +1371,13 @@ rc_num = l_data_buffer3_64.flushTo0();
{
l_i = 0;
//FAPI_INF("l_array:%d",l_i);
- rc = fapiGetScom(i_target_mba,0x02011774,l_data_buf_spare); if(rc) return rc;
- rc = fapiGetScom(i_target_mba,0x02011773,l_data_buf_port1); if(rc) return rc;
+ rc = fapiGetScom(i_target_centaur,0x02011774,l_data_buf_spare); if(rc) return rc;
+ rc = fapiGetScom(i_target_centaur,0x02011773,l_data_buf_port1); if(rc) return rc;
for(l_index=0;l_index<64;l_index++)
{
if(l_data_buf_port1.isBitSet(l_index))
- {
+ {
l_array1[l_i] = l_index;
l_i++;//FAPI_INF("l_array:%d",l_i);
}
@@ -1350,7 +1386,7 @@ rc_num = l_data_buffer3_64.flushTo0();
for(l_index=16;l_index<32;l_index++)
{
if(l_data_buf_spare.isBitSet(l_index))
- {
+ {
l_array1[l_i] = l_index+64-16;
l_i++;//FAPI_INF("l_array:%d",l_i);
}
@@ -1465,7 +1501,7 @@ l_n=0;io_num0= 0;io_num1=0;
- if((l_attr_eff_dimm_type_u8 == 1) || (l_attr_eff_dimm_type_u8 == 3))
+ if((l_attr_eff_dimm_type_u8 == 1) || (l_attr_eff_dimm_type_u8 == 3))
{
//For ISDIMM marray
@@ -1590,6 +1626,17 @@ l_n=0;io_num0= 0;io_num1=0;
//DEBUG PRINTS
+
+
+count_bad_dq[0]=l_number1;
+ count_bad_dq[1]=l_number;
+ // FAPI_INF("\n abhijit's number is number=%d and %d \n",count_bad_dq[0],count_bad_dq[1]);
+ for(l_i=0;l_i<l_number1;l_i++){
+ i_CDarray0[l_i]=l_array0[l_i];
+ }
+ for(l_i=0;l_i<l_number;l_i++){
+ i_CDarray1[l_i]=l_array1[l_i];
+ }
/*
for(l_i = 0;l_i < l_number1;l_i++)
{
@@ -1635,7 +1682,7 @@ FAPI_INF("______________________________________________________________________
if((l_attr_eff_dimm_type_u8 == 1) || (l_attr_eff_dimm_type_u8 == 3)) //Calling ISDIMM error mAP and LRDIMM
{
- FAPI_DBG("%s:################# Error MAP for ISDIMM #################",i_target_mba.toEcmdString());
+ FAPI_DBG("%s:################# Error MAP for ISDIMM #################",i_target_mba.toEcmdString());
for(l_port = 0; l_port < 2; l_port++)
{
if(l_port == 0)
@@ -1691,7 +1738,7 @@ FAPI_INF("______________________________________________________________________
FAPI_DBG("%s: NO RANKS FOUND ON PORT %d",i_target_mba.toEcmdString(),l_port);
}
else
- {
+ {
@@ -1854,7 +1901,7 @@ FAPI_INF("______________________________________________________________________
for( i_byte = 0;i_byte < l_max_bytes ;i_byte++)
{
for (i_nibble = 0;i_nibble < 2;i_nibble++)
- {
+ {
l_flag = 0;
l_inter = l_marray[l_num] ;
@@ -1888,10 +1935,10 @@ FAPI_INF("______________________________________________________________________
{
if( o_error_map[l_port][l_rank][i_byte1][i_nibble1] == 1){
- strcat(l_str,"X");
+ strcat(l_str,"X");
}
else
- {
+ {
strcat(l_str,".");
}
@@ -1909,28 +1956,28 @@ FAPI_INF("______________________________________________________________________
FAPI_DBG("%s:################# CDIMM ERROR MAP ###########################\n",i_target_mba.toEcmdString());
i_port = 0;
mcb_error_map_print( i_target_mba , l_mcb_fail_160, i_port,l_array0,l_number1,l_data_buf_port0,l_data_buf_spare);//ecmdDataBufferBase l_data_buffer1_64(64),l_data_buffer3_64(64),l_data_buf_port0(64),l_data_buf_port1(64),l_data_buf_spare(64);
-
- i_port = 1;
- mcb_error_map_print(i_target_mba, l_mcb_fail1_160, i_port,l_array1,l_number,l_data_buf_port1,l_data_buf_spare);
+
+ i_port = 1;
+ mcb_error_map_print(i_target_mba, l_mcb_fail1_160, i_port,l_array1,l_number,l_data_buf_port1,l_data_buf_spare);
}
-
+
//End
return rc;
}
/*****************************************************************/
// Funtion name : mcb_write_test_mem
-// Description : : Based on parameters passed we write data into Register being passed
+// Description : : Based on parameters passed we write data into Register being passed
// Input Parameters :
// const fapi::Target & Centaur.mba
-// const uint64_t i_reg_addr Register address
+// const uint64_t i_reg_addr Register address
// mcbist_oper_type i_operation_type Operation Type
// mcbist_addr_mode i_addr_mode Sequential or Random address modes
// mcbist_data_mode i_data_mode Data Mode
-// uint8_t i_done Done Bit
-// mcbist_data_select_mode i_data_select_mode Different BURST modes or DEFAULT
+// uint8_t i_done Done Bit
+// mcbist_data_select_mode i_data_select_mode Different BURST modes or DEFAULT
// mcbist_add_select_mode i_addr_select_mode Address Select mode
-// uint8_t i_testnumber Subtest number
+// uint8_t i_testnumber Subtest number
// uint8_t i_cfg_test_123_cmd Integer value
//****************************************************************/
@@ -1945,15 +1992,15 @@ fapi::ReturnCode mcb_write_test_mem(const fapi::Target & i_target_mba,const uin
uint8_t l_data_mode = i_data_mode;
uint8_t l_data_select_mode = i_data_select_mode;
uint8_t l_addr_select_mode = i_addr_select_mode;
- //uint8_t l_print = 0;
+ //uint8_t l_print = 0;
//rc = FAPI_ATTR_GET(ATTR_MCBIST_PRINTING_DISABLE, &i_target_mba,l_print); if(rc) return rc;
ecmdDataBufferBase l_data_buffer_64(64);
-
-
+
+
FAPI_DBG("%s:Function mcb_write_test_mem",i_target_mba.toEcmdString());
rc = fapiGetScom(i_target_mba,i_reg_addr,l_data_buffer_64);if(rc) return rc;
- l_index = i_testnumber * (MCB_TEST_NUM) ;
-
+ l_index = i_testnumber * (MCB_TEST_NUM) ;
+
uint8_t l_done_bit ;
rc = FAPI_ATTR_GET(ATTR_MCBIST_ADDR_BANK, &i_target_mba, l_done_bit); if(rc) return rc;
if(l_done_bit == 1)
@@ -1964,67 +2011,67 @@ fapi::ReturnCode mcb_write_test_mem(const fapi::Target & i_target_mba,const uin
l_sub_info[i_testnumber1].l_operation_type = l_operation_type;
l_sub_info[i_testnumber1].l_data_mode = l_data_mode;
- l_sub_info[i_testnumber1].l_addr_mode = l_addr_mode;
+ l_sub_info[i_testnumber1].l_addr_mode = l_addr_mode;
// Operation type
-
+
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_operation_type,l_index ,3);
-
-
+
+
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_cfg_test_123_cmd,l_index + 3,3);
// ADDR MODE
-
+
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_addr_mode,l_index + 6,2);
- // DATA MODE
-
+ // DATA MODE
+
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_data_mode,l_index + 8,3);
// Done bit
-
+
rc_num = rc_num| l_data_buffer_64.insertFromRight(i_done,l_index + 11,1);
// Data Select Mode
-
+
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_data_select_mode,l_index + 12,2);
-
+
// Address Select mode
-
+
rc_num = rc_num| l_data_buffer_64.insertFromRight(l_addr_select_mode,l_index + 14,2);
if (rc_num){FAPI_ERR( "Error in function mcb_write_test_mem:");rc.setEcmdError(rc_num);return rc;}
-
+
rc = fapiPutScom(i_target_mba,i_reg_addr,l_data_buffer_64); if(rc) return rc;
rc = fapiGetScom(i_target_mba,i_reg_addr,l_data_buffer_64); if(rc) return rc;
-
+
FAPI_DBG("%s:SUBTEST %d of %d in Progress.................... ",i_target_mba.toEcmdString(),i_testnumber1,total_subtest_no);
//FAPI_DBG("%s:SUBTEST %d in Progress.................... ",i_testnumber);
- FAPI_DBG("%s:SUBTEST DETAILS",i_target_mba.toEcmdString());
+ FAPI_DBG("%s:SUBTEST DETAILS",i_target_mba.toEcmdString());
switch(l_operation_type)
{
- case 0 : FAPI_DBG("%s:SUBTEST :WRITE",i_target_mba.toEcmdString());break;
- case 1 : FAPI_DBG("%s:SUBTEST :READ",i_target_mba.toEcmdString());break;
- case 2 : FAPI_DBG("%s:SUBTEST :READ - WRITE",i_target_mba.toEcmdString());break;
- case 3 : FAPI_DBG("%s:SUBTEST :WRITE - READ",i_target_mba.toEcmdString());break;
- case 4 : FAPI_DBG("%s:SUBTEST :READ - WRITE - READ",i_target_mba.toEcmdString());break;
- case 5 : FAPI_DBG("%s:SUBTEST :READ - WRITE - WRITE",i_target_mba.toEcmdString());break;
- case 6 : FAPI_DBG("%s:SUBTEST :RANDOM COMMAND SEQUENCE",i_target_mba.toEcmdString());break;
- case 7 : FAPI_DBG("%s:SUBTEST :GOTO SUBTEST N OR REFRESH ONLY",i_target_mba.toEcmdString());break;
+ case 0 : FAPI_DBG("%s:SUBTEST :WRITE",i_target_mba.toEcmdString());break;
+ case 1 : FAPI_DBG("%s:SUBTEST :READ",i_target_mba.toEcmdString());break;
+ case 2 : FAPI_DBG("%s:SUBTEST :READ - WRITE",i_target_mba.toEcmdString());break;
+ case 3 : FAPI_DBG("%s:SUBTEST :WRITE - READ",i_target_mba.toEcmdString());break;
+ case 4 : FAPI_DBG("%s:SUBTEST :READ - WRITE - READ",i_target_mba.toEcmdString());break;
+ case 5 : FAPI_DBG("%s:SUBTEST :READ - WRITE - WRITE",i_target_mba.toEcmdString());break;
+ case 6 : FAPI_DBG("%s:SUBTEST :RANDOM COMMAND SEQUENCE",i_target_mba.toEcmdString());break;
+ case 7 : FAPI_DBG("%s:SUBTEST :GOTO SUBTEST N OR REFRESH ONLY",i_target_mba.toEcmdString());break;
default : FAPI_DBG("%s:Wrong Operation selected for Subtest",i_target_mba.toEcmdString());
}
switch(l_data_mode)
{
- case 0 : FAPI_DBG("%s:DATA MODE :FIXED DATA",i_target_mba.toEcmdString());break;
- case 1 : FAPI_DBG("%s:DATA MODE :DATA_RANDOM_FORWARD",i_target_mba.toEcmdString());break;
- case 2 : FAPI_DBG("%s:DATA MODE :DATA_RANDOM_REVERSE",i_target_mba.toEcmdString());break;
- case 3 : FAPI_DBG("%s:DATA MODE :RANDOM w/ECC FORWARD",i_target_mba.toEcmdString());break;
- case 4 : FAPI_DBG("%s:DATA MODE :RANDOM w/ECC REVERSE",i_target_mba.toEcmdString());break;
- case 5 : FAPI_DBG("%s:DATA MODE :DATA EQUAL ADDRESS",i_target_mba.toEcmdString());break;
- case 6 : FAPI_DBG("%s:DATA MODE :DATA ROTATE LEFT",i_target_mba.toEcmdString());break;
- case 7 : FAPI_DBG("%s:DATA MODE :DATA ROTATE RIGHT",i_target_mba.toEcmdString());break;
+ case 0 : FAPI_DBG("%s:DATA MODE :FIXED DATA",i_target_mba.toEcmdString());break;
+ case 1 : FAPI_DBG("%s:DATA MODE :DATA_RANDOM_FORWARD",i_target_mba.toEcmdString());break;
+ case 2 : FAPI_DBG("%s:DATA MODE :DATA_RANDOM_REVERSE",i_target_mba.toEcmdString());break;
+ case 3 : FAPI_DBG("%s:DATA MODE :RANDOM w/ECC FORWARD",i_target_mba.toEcmdString());break;
+ case 4 : FAPI_DBG("%s:DATA MODE :RANDOM w/ECC REVERSE",i_target_mba.toEcmdString());break;
+ case 5 : FAPI_DBG("%s:DATA MODE :DATA EQUAL ADDRESS",i_target_mba.toEcmdString());break;
+ case 6 : FAPI_DBG("%s:DATA MODE :DATA ROTATE LEFT",i_target_mba.toEcmdString());break;
+ case 7 : FAPI_DBG("%s:DATA MODE :DATA ROTATE RIGHT",i_target_mba.toEcmdString());break;
default : FAPI_DBG("%s:Wrong Data Mode selected for Subtest",i_target_mba.toEcmdString());
}
@@ -2032,10 +2079,10 @@ fapi::ReturnCode mcb_write_test_mem(const fapi::Target & i_target_mba,const uin
switch(l_addr_mode)
{
- case 0 : FAPI_DBG("%s:ADDRESS MODE :SEQUENTIAL FORWARD",i_target_mba.toEcmdString());break;
- case 1 : FAPI_DBG("%s:ADDRESS MODE :SEQUENTIAL REVERSE",i_target_mba.toEcmdString());break;
- case 2 : FAPI_DBG("%s:ADDRESS MODE :RANDOM FORWARD",i_target_mba.toEcmdString());break;
- case 3 : FAPI_DBG("%s:ADDRESS MODE :RANDOM REVERSE",i_target_mba.toEcmdString());break;
+ case 0 : FAPI_DBG("%s:ADDRESS MODE :SEQUENTIAL FORWARD",i_target_mba.toEcmdString());break;
+ case 1 : FAPI_DBG("%s:ADDRESS MODE :SEQUENTIAL REVERSE",i_target_mba.toEcmdString());break;
+ case 2 : FAPI_DBG("%s:ADDRESS MODE :RANDOM FORWARD",i_target_mba.toEcmdString());break;
+ case 3 : FAPI_DBG("%s:ADDRESS MODE :RANDOM REVERSE",i_target_mba.toEcmdString());break;
default :FAPI_DBG("%s:Wrong Address Mode selected for Subtest",i_target_mba.toEcmdString());
}
@@ -2076,11 +2123,11 @@ fapi::ReturnCode mcb_write_test_mem(const fapi::Target & i_target_mba,const uin
/*****************************************************************/
// Funtion name : cfg_byte_mask
-// Description :
-// Input Parameters : It is used to mask bad bits read from SPD
+// Description :
+// Input Parameters : It is used to mask bad bits read from SPD
// const fapi::Target & Centaur.mba
// uint8_t i_rank Current Rank
-// uint8_t i_port Current Port
+// uint8_t i_port Current Port
//****************************************************************/
@@ -2097,17 +2144,20 @@ fapi::ReturnCode cfg_byte_mask(const fapi::Target & i_target_mba)
uint8_t num_ranks_per_dimm[2][2];
uint8_t l_MAX_RANKS=8;
uint8_t rank_pair=0;
- uint64_t l_var = 0xFFFFFFFFFFFFFFFFull;
+ uint64_t l_var = 0xFFFFFFFFFFFFFFFFull;
uint16_t l_spare = 0xFFFF;
ecmdDataBufferBase l_data_buffer1_64(64);
+ Target i_target_centaur;
+ //uint8_t l_attr_centaur_ec_mcbist_random_data_gen = 0;
+ rc = fapiGetParentChip(i_target_mba, i_target_centaur); if(rc) return rc;
uint8_t valid_rank[l_MAX_RANKS];
//rc = mss_getrankpair(i_target_mba,l_port,0,&rank_pair,valid_rank);if(rc) return rc;
rc = FAPI_ATTR_GET(ATTR_EFF_NUM_RANKS_PER_DIMM, &i_target_mba, num_ranks_per_dimm); if(rc) return rc;
uint8_t l_mbaPosition = 0;
uint8_t l_attr_eff_dimm_type_u8 = 0;
- rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_TYPE, &i_target_mba, l_attr_eff_dimm_type_u8); if(rc) return rc;
+ rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_TYPE, &i_target_mba, l_attr_eff_dimm_type_u8); if(rc) return rc;
rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, &i_target_mba, l_mbaPosition);
- //uint8_t l_print = 0;
+ //uint8_t l_print = 0;
//rc = FAPI_ATTR_GET(ATTR_MCBIST_PRINTING_DISABLE, &i_target_mba,l_print); if(rc) return rc;
//l_attr_eff_dimm_type_u8=1;
@@ -2120,7 +2170,7 @@ fapi::ReturnCode cfg_byte_mask(const fapi::Target & i_target_mba)
if (l_rnk == 255){
continue ;
}
-
+
ecmdDataBufferBase l_data_buffer2_64(64);
ecmdDataBufferBase l_data_buffer3_64(64);
ecmdDataBufferBase l_data_buffer4_64(64);
@@ -2129,11 +2179,11 @@ fapi::ReturnCode cfg_byte_mask(const fapi::Target & i_target_mba)
l_max_0 = num_ranks_per_dimm[0][0]+num_ranks_per_dimm[0][1];
l_max_1 = num_ranks_per_dimm[1][0]+num_ranks_per_dimm[1][1];
-
+
//uint32_t rc_num = 0;
-
+
rc_num = l_data_buffer3_64.flushTo0();if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
-
+
uint8_t l_dqBitmap[DIMM_DQ_RANK_BITMAP_SIZE];
uint8_t l_dq[8]={0};
@@ -2191,18 +2241,18 @@ fapi::ReturnCode cfg_byte_mask(const fapi::Target & i_target_mba)
}else{
rc_num = l_data_buffer2_64.insertFromRight(l_sp,0,16);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
}
- rc = fapiGetScom(i_target_mba,MBS_MCBIST01_MCBCMA1Q_0x02011672,l_data_buffer4_64); if(rc) return rc;
+ rc = fapiGetScom(i_target_centaur,MBS_MCBIST01_MCBCMA1Q_0x02011672,l_data_buffer4_64); if(rc) return rc;
rc_num = l_data_buffer1_64.setOr(l_data_buffer4_64,0,64);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
//rc_num = l_data_buffer2_64.insertFromRight(l_sp_mask,16,16);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
- rc = fapiPutScom(i_target_mba,MBS_MCBIST01_MCBCMA1Q_0x02011672,l_data_buffer1_64); if(rc) return rc;
- rc = fapiGetScom(i_target_mba,MBS_MCBIST01_MCBCMABQ_0x02011674,l_data_buffer5_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur,MBS_MCBIST01_MCBCMA1Q_0x02011672,l_data_buffer1_64); if(rc) return rc;
+ rc = fapiGetScom(i_target_centaur,MBS_MCBIST01_MCBCMABQ_0x02011674,l_data_buffer5_64); if(rc) return rc;
rc_num = l_data_buffer2_64.setOr(l_data_buffer5_64,0,64);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
- rc = fapiPutScom(i_target_mba,MBS_MCBIST01_MCBCMABQ_0x02011674,l_data_buffer2_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur,MBS_MCBIST01_MCBCMABQ_0x02011674,l_data_buffer2_64); if(rc) return rc;
//rc = fapiPutScom(i_target_mba,MBS_MCBIST01_MCBCMB1Q_0x02011673,l_data_buffer3_64); if(rc) return rc;
}
- else
+ else
{
- rc = fapiGetScom(i_target_mba,MBS_MCBIST01_MCBCMABQ_0x02011674,l_data_buffer2_64); if(rc) return rc;
+ rc = fapiGetScom(i_target_centaur,MBS_MCBIST01_MCBCMABQ_0x02011674,l_data_buffer2_64); if(rc) return rc;
//rc = fapiGetScom(i_target_mba,MBS_MCBIST01_MCBCMA1Q_0x02011672,l_data_buffer3_64); if(rc) return rc;
if((l_attr_eff_dimm_type_u8 == 1) || (l_attr_eff_dimm_type_u8 == 3)){
rc_num = l_data_buffer2_64.insertFromRight(l_sp_isdimm,24,8);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
@@ -2210,13 +2260,13 @@ fapi::ReturnCode cfg_byte_mask(const fapi::Target & i_target_mba)
}else{
rc_num = l_data_buffer2_64.insertFromRight(l_sp,16,16);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
}
- rc = fapiGetScom(i_target_mba,MBS_MCBIST01_MCBCMB1Q_0x02011673,l_data_buffer4_64); if(rc) return rc;
+ rc = fapiGetScom(i_target_centaur,MBS_MCBIST01_MCBCMB1Q_0x02011673,l_data_buffer4_64); if(rc) return rc;
rc_num = l_data_buffer1_64.setOr(l_data_buffer4_64,0,64);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
//rc_num = l_data_buffer2_64.insertFromRight(l_sp_mask,0,16);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
- rc = fapiPutScom(i_target_mba,MBS_MCBIST01_MCBCMB1Q_0x02011673,l_data_buffer1_64); if(rc) return rc;
- rc = fapiGetScom(i_target_mba,MBS_MCBIST01_MCBCMABQ_0x02011674,l_data_buffer5_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur,MBS_MCBIST01_MCBCMB1Q_0x02011673,l_data_buffer1_64); if(rc) return rc;
+ rc = fapiGetScom(i_target_centaur,MBS_MCBIST01_MCBCMABQ_0x02011674,l_data_buffer5_64); if(rc) return rc;
rc_num = l_data_buffer2_64.setOr(l_data_buffer5_64,0,64);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
- rc = fapiPutScom(i_target_mba,MBS_MCBIST01_MCBCMABQ_0x02011674,l_data_buffer2_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur,MBS_MCBIST01_MCBCMABQ_0x02011674,l_data_buffer2_64); if(rc) return rc;
//rc = fapiPutScom(i_target_mba,MBS_MCBIST01_MCBCMA1Q_0x02011672,l_data_buffer3_64); if(rc) return rc;
}
}else
@@ -2230,17 +2280,17 @@ fapi::ReturnCode cfg_byte_mask(const fapi::Target & i_target_mba)
rc_num = l_data_buffer2_64.insertFromRight(l_sp,0,16);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
}
//rc_num = l_data_buffer2_64.insertFromRight(l_sp_mask,16,16);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
- rc = fapiGetScom(i_target_mba,0x02011772,l_data_buffer4_64); if(rc) return rc;
+ rc = fapiGetScom(i_target_centaur,0x02011772,l_data_buffer4_64); if(rc) return rc;
rc_num = l_data_buffer1_64.setOr(l_data_buffer4_64,0,64);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
- rc = fapiPutScom(i_target_mba,0x02011772,l_data_buffer1_64); if(rc) return rc;
- rc = fapiGetScom(i_target_mba,0x02011774,l_data_buffer5_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur,0x02011772,l_data_buffer1_64); if(rc) return rc;
+ rc = fapiGetScom(i_target_centaur,0x02011774,l_data_buffer5_64); if(rc) return rc;
rc_num = l_data_buffer2_64.setOr(l_data_buffer5_64,0,64);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
- rc = fapiPutScom(i_target_mba,0x02011774,l_data_buffer2_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur,0x02011774,l_data_buffer2_64); if(rc) return rc;
//rc = fapiPutScom(i_target_mba,0x02011773,l_data_buffer3_64); if(rc) return rc;
}
- else
+ else
{
- rc = fapiGetScom(i_target_mba,0x02011774,l_data_buffer2_64); if(rc) return rc;
+ rc = fapiGetScom(i_target_centaur,0x02011774,l_data_buffer2_64); if(rc) return rc;
if((l_attr_eff_dimm_type_u8 == 1) || (l_attr_eff_dimm_type_u8 == 3)){
rc_num = l_data_buffer2_64.insertFromRight(l_sp_isdimm,24,8);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
rc_num = l_data_buffer2_64.insertFromRight(l_sp,16,8);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
@@ -2249,12 +2299,12 @@ fapi::ReturnCode cfg_byte_mask(const fapi::Target & i_target_mba)
}
//rc_num = l_data_buffer2_64.insertFromRight(l_sp_mask,0,16);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
- rc = fapiGetScom(i_target_mba,0x02011773,l_data_buffer4_64); if(rc) return rc;
+ rc = fapiGetScom(i_target_centaur,0x02011773,l_data_buffer4_64); if(rc) return rc;
rc_num = l_data_buffer1_64.setOr(l_data_buffer4_64,0,64);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
- rc = fapiPutScom(i_target_mba,0x02011773,l_data_buffer1_64); if(rc) return rc;
- rc = fapiGetScom(i_target_mba,0x02011774,l_data_buffer5_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur,0x02011773,l_data_buffer1_64); if(rc) return rc;
+ rc = fapiGetScom(i_target_centaur,0x02011774,l_data_buffer5_64); if(rc) return rc;
rc_num = l_data_buffer2_64.setOr(l_data_buffer5_64,0,64);if (rc_num){FAPI_ERR( "Error in function cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}
- rc = fapiPutScom(i_target_mba,0x02011774,l_data_buffer2_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur,0x02011774,l_data_buffer2_64); if(rc) return rc;
//rc = fapiPutScom(i_target_mba,0x02011772,l_data_buffer3_64); if(rc) return rc;
}
}
@@ -2263,31 +2313,31 @@ fapi::ReturnCode cfg_byte_mask(const fapi::Target & i_target_mba)
-
-
-
+
+
+
if(l_max_0 == 0)
{
if(l_mbaPosition == 0)
{
- rc = fapiGetScom(i_target_mba,0x02011672,l_data_buffer1_64); if(rc) return rc;
- rc_num = l_data_buffer1_64.setDoubleWord(0,l_var);
- rc = fapiPutScom(i_target_mba,0x02011672,l_data_buffer1_64); if(rc) return rc;
- rc = fapiGetScom(i_target_mba,0x02011674,l_data_buffer1_64); if(rc) return rc;
+ rc = fapiGetScom(i_target_centaur,MBS_MCBIST01_MCBCMA1Q_0x02011672,l_data_buffer1_64); if(rc) return rc;
+ rc_num = l_data_buffer1_64.setDoubleWord(0,l_var);
+ rc = fapiPutScom(i_target_centaur,MBS_MCBIST01_MCBCMA1Q_0x02011672,l_data_buffer1_64); if(rc) return rc;
+ rc = fapiGetScom(i_target_centaur,MBS_MCBIST01_MCBCMABQ_0x02011674,l_data_buffer1_64); if(rc) return rc;
rc_num = l_data_buffer1_64.insertFromRight(l_spare,0,16);
- rc = fapiPutScom(i_target_mba,0x02011674,l_data_buffer1_64); if(rc) return rc;
- }
+ rc = fapiPutScom(i_target_centaur,MBS_MCBIST01_MCBCMABQ_0x02011674,l_data_buffer1_64); if(rc) return rc;
+ }
else
{
- rc = fapiGetScom(i_target_mba,0x02011772,l_data_buffer1_64); if(rc) return rc;
- rc_num = l_data_buffer1_64.setDoubleWord(0,l_var);
- rc = fapiPutScom(i_target_mba,0x02011772,l_data_buffer1_64); if(rc) return rc;
- rc = fapiGetScom(i_target_mba,0x02011774,l_data_buffer1_64); if(rc) return rc;
+ rc = fapiGetScom(i_target_centaur,0x02011772,l_data_buffer1_64); if(rc) return rc;
+ rc_num = l_data_buffer1_64.setDoubleWord(0,l_var);
+ rc = fapiPutScom(i_target_centaur,0x02011772,l_data_buffer1_64); if(rc) return rc;
+ rc = fapiGetScom(i_target_centaur,0x02011774,l_data_buffer1_64); if(rc) return rc;
rc_num = l_data_buffer1_64.insertFromRight(l_spare,0,16);
- rc = fapiPutScom(i_target_mba,0x02011774,l_data_buffer1_64); if(rc) return rc;
-
+ rc = fapiPutScom(i_target_centaur,0x02011774,l_data_buffer1_64); if(rc) return rc;
+
}
}
@@ -2295,24 +2345,24 @@ fapi::ReturnCode cfg_byte_mask(const fapi::Target & i_target_mba)
{
if(l_mbaPosition == 0)
{
-
- rc = fapiGetScom(i_target_mba,0x02011673,l_data_buffer1_64); if(rc) return rc;
- rc_num = l_data_buffer1_64.setDoubleWord(0,l_var);
- rc = fapiPutScom(i_target_mba,0x02011673,l_data_buffer1_64); if(rc) return rc;
- rc = fapiGetScom(i_target_mba,0x02011674,l_data_buffer1_64); if(rc) return rc;
+
+ rc = fapiGetScom(i_target_centaur,MBS_MCBIST01_MCBCMB1Q_0x02011673,l_data_buffer1_64); if(rc) return rc;
+ rc_num = l_data_buffer1_64.setDoubleWord(0,l_var);
+ rc = fapiPutScom(i_target_centaur,MBS_MCBIST01_MCBCMB1Q_0x02011673,l_data_buffer1_64); if(rc) return rc;
+ rc = fapiGetScom(i_target_centaur,MBS_MCBIST01_MCBCMABQ_0x02011674,l_data_buffer1_64); if(rc) return rc;
rc_num = l_data_buffer1_64.insertFromRight(l_spare,16,16);
- rc = fapiPutScom(i_target_mba,0x02011674,l_data_buffer1_64); if(rc) return rc;
-
- }
+ rc = fapiPutScom(i_target_centaur,MBS_MCBIST01_MCBCMABQ_0x02011674,l_data_buffer1_64); if(rc) return rc;
+
+ }
else
{
- rc = fapiGetScom(i_target_mba,0x02011773,l_data_buffer1_64); if(rc) return rc;
- rc_num = l_data_buffer1_64.setDoubleWord(0,l_var);
- rc = fapiPutScom(i_target_mba,0x02011773,l_data_buffer1_64); if(rc) return rc;
- rc = fapiGetScom(i_target_mba,0x02011774,l_data_buffer1_64); if(rc) return rc;
+ rc = fapiGetScom(i_target_centaur,0x02011773,l_data_buffer1_64); if(rc) return rc;
+ rc_num = l_data_buffer1_64.setDoubleWord(0,l_var);
+ rc = fapiPutScom(i_target_centaur,0x02011773,l_data_buffer1_64); if(rc) return rc;
+ rc = fapiGetScom(i_target_centaur,0x02011774,l_data_buffer1_64); if(rc) return rc;
rc_num = l_data_buffer1_64.insertFromRight(l_spare,16,16);
- rc = fapiPutScom(i_target_mba,0x02011774,l_data_buffer1_64); if(rc) return rc;
+ rc = fapiPutScom(i_target_centaur,0x02011774,l_data_buffer1_64); if(rc) return rc;
}
}
@@ -2359,13 +2409,13 @@ case 26 : i_mcbtest = R_ONLY;break;
case 27 : i_mcbtest = W_ONLY_RAND;break;
case 28 : i_mcbtest = R_ONLY_RAND;break;
case 29 : i_mcbtest = R_ONLY_MULTI;break;
-case 30 : i_mcbtest = SHORT;break;
-case 31 : i_mcbtest = SIMPLE_RAND_BARI;break;
-case 32 : i_mcbtest = W_R_INFINITE;break;
-case 33 : i_mcbtest = W_R_RAND_INFINITE;break;
-case 34 : i_mcbtest = R_INFINITE1;break;
-case 35 : i_mcbtest = R_INFINITE_RF;break;
-case 36 : i_mcbtest = MARCH;break;
+case 30 : i_mcbtest = SHORT;break;
+case 31 : i_mcbtest = SIMPLE_RAND_BARI;break;
+case 32 : i_mcbtest = W_R_INFINITE;break;
+case 33 : i_mcbtest = W_R_RAND_INFINITE;break;
+case 34 : i_mcbtest = R_INFINITE1;break;
+case 35 : i_mcbtest = R_INFINITE_RF;break;
+case 36 : i_mcbtest = MARCH;break;
case 37 : i_mcbtest = SIMPLE_FIX_RF;break;
case 38 : i_mcbtest = SHMOO_STRESS;break;
default : FAPI_DBG("%s:Wrong Test_type,so using default test_type",i_target_mba.toEcmdString());
@@ -2377,7 +2427,7 @@ case 38 : i_mcbtest = SHMOO_STRESS;break;
fapi::ReturnCode mss_conversion_testtype( const fapi::Target & i_target_mba,uint8_t l_pattern,mcbist_test_mem &i_mcbtest )
{
ReturnCode rc;
- //uint8_t l_print = 0;
+ //uint8_t l_print = 0;
//rc = FAPI_ATTR_GET(ATTR_MCBIST_PRINTING_DISABLE, &i_target_mba,l_print); if(rc) return rc;
FAPI_INF("%s:value of testtype is %d",i_target_mba.toEcmdString(),l_pattern);
switch(l_pattern)
@@ -2412,20 +2462,21 @@ case 26 : i_mcbtest = R_ONLY;FAPI_INF("%s:TESTTYPE :R_ONLY",i_target_mba.toEcmdS
case 27 : i_mcbtest = W_ONLY_RAND;FAPI_INF("%s:TESTTYPE :W_ONLY_RAND",i_target_mba.toEcmdString());break;
case 28 : i_mcbtest = R_ONLY_RAND;FAPI_INF("%s:TESTTYPE :R_ONLY_RAND",i_target_mba.toEcmdString());break;
case 29 : i_mcbtest = R_ONLY_MULTI;FAPI_INF("%s:TESTTYPE :R_ONLY_MULTI",i_target_mba.toEcmdString());break;
-case 30 : i_mcbtest = SHORT;FAPI_INF("%s:TESTTYPE :SHORT",i_target_mba.toEcmdString());break;
-case 31 : i_mcbtest = SIMPLE_RAND_BARI;FAPI_INF("%s:TESTTYPE :SIMPLE_RAND_BARI",i_target_mba.toEcmdString());break;
-case 32 : i_mcbtest = W_R_INFINITE;FAPI_INF("%s:TESTTYPE :W_R_INFINITE",i_target_mba.toEcmdString());break;
-case 33 : i_mcbtest = W_R_RAND_INFINITE;FAPI_INF("%s:TESTTYPE :W_R_RAND_INFINITE",i_target_mba.toEcmdString());break;
-case 34 : i_mcbtest = R_INFINITE1;FAPI_INF("%s:TESTTYPE :R_INFINITE1",i_target_mba.toEcmdString());break;
-case 35 : i_mcbtest = R_INFINITE_RF;FAPI_INF("%s:TESTTYPE :R_INFINITE_RF",i_target_mba.toEcmdString());break;
-case 36 : i_mcbtest = MARCH;FAPI_INF("%s:TESTTYPE :MARCH",i_target_mba.toEcmdString());break;
+case 30 : i_mcbtest = SHORT;FAPI_INF("%s:TESTTYPE :SHORT",i_target_mba.toEcmdString());break;
+case 31 : i_mcbtest = SIMPLE_RAND_BARI;FAPI_INF("%s:TESTTYPE :SIMPLE_RAND_BARI",i_target_mba.toEcmdString());break;
+case 32 : i_mcbtest = W_R_INFINITE;FAPI_INF("%s:TESTTYPE :W_R_INFINITE",i_target_mba.toEcmdString());break;
+case 33 : i_mcbtest = W_R_RAND_INFINITE;FAPI_INF("%s:TESTTYPE :W_R_RAND_INFINITE",i_target_mba.toEcmdString());break;
+case 34 : i_mcbtest = R_INFINITE1;FAPI_INF("%s:TESTTYPE :R_INFINITE1",i_target_mba.toEcmdString());break;
+case 35 : i_mcbtest = R_INFINITE_RF;FAPI_INF("%s:TESTTYPE :R_INFINITE_RF",i_target_mba.toEcmdString());break;
+case 36 : i_mcbtest = MARCH;FAPI_INF("%s:TESTTYPE :MARCH",i_target_mba.toEcmdString());break;
case 37 : i_mcbtest = SIMPLE_FIX_RF;FAPI_INF("%s:TESTTYPE :SIMPLE_FIX_RF",i_target_mba.toEcmdString());break;
case 38 : i_mcbtest = SHMOO_STRESS;FAPI_INF("%s:TESTTYPE :SHMOO_STRESS",i_target_mba.toEcmdString());break;
-case 39 : i_mcbtest = SIMPLE_RAND_RA;FAPI_INF("%s:TESTTYPE :SIMPLE_RAND_RA",i_target_mba.toEcmdString());break;
+case 39 : i_mcbtest = SIMPLE_RAND_RA;FAPI_INF("%s:TESTTYPE :SIMPLE_RAND_RA",i_target_mba.toEcmdString());break;
case 40 : i_mcbtest = SIMPLE_FIX_RA;FAPI_INF("%s:TESTTYPE :SIMPLE_FIX_RA",i_target_mba.toEcmdString());break;
case 41 : i_mcbtest = SIMPLE_FIX_RF_RA;FAPI_INF("%s:TESTTYPE :SIMPLE_FIX_RF_RA",i_target_mba.toEcmdString());break;
case 42 : i_mcbtest = TEST_RR;FAPI_INF("%s:TESTTYPE :TEST_RR",i_target_mba.toEcmdString());break;
case 43 : i_mcbtest = TEST_RF;FAPI_INF("%s:TESTTYPE :TEST_RF",i_target_mba.toEcmdString());break;
+case 44 : i_mcbtest = W_ONLY_INFINITE_RAND;FAPI_INF("%s:TESTTYPE :W_ONLY_INFINITE_RAND",i_target_mba.toEcmdString());break;
default : FAPI_INF("%s:Wrong Test_type,so using default test_type",i_target_mba.toEcmdString());
}
@@ -2436,7 +2487,7 @@ default : FAPI_INF("%s:Wrong Test_type,so using default test_type",i_target_mba.
fapi::ReturnCode mss_conversion_data(const fapi::Target & i_target_mba, uint8_t l_pattern,mcbist_data_gen &i_mcbpatt)
{
ReturnCode rc;
- //uint8_t l_print = 0;
+ //uint8_t l_print = 0;
//rc = FAPI_ATTR_GET(ATTR_MCBIST_PRINTING_DISABLE, &i_target_mba,l_print); if(rc) return rc;
FAPI_INF("%s:value of pattern is %d",i_target_mba.toEcmdString(),l_pattern);
switch(l_pattern)
@@ -2494,6 +2545,6 @@ fapi::ReturnCode mss_conversion_data(const fapi::Target & i_target_mba, uint8_t
return rc;
}
-
+
}
diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_shmoo_common.H b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_shmoo_common.H
index 0d533adc9..2f743f49b 100644
--- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_shmoo_common.H
+++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_shmoo_common.H
@@ -5,7 +5,7 @@
/* */
/* IBM CONFIDENTIAL */
/* */
-/* COPYRIGHT International Business Machines Corp. 2012,2013 */
+/* COPYRIGHT International Business Machines Corp. 2012,2014 */
/* */
/* p1 */
/* */
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: mss_shmoo_common.H,v 1.17 2013/10/07 08:35:41 sasethur Exp $
+// $Id: mss_shmoo_common.H,v 1.18 2013/12/17 18:46:49 sasethur Exp $
// *!***************************************************************************
// *! (C) Copyright International Business Machines Corp. 1997, 1998
// *! All Rights Reserved -- Property of IBM
@@ -52,23 +52,23 @@ enum shmoo_type_t { TEST_NONE=0,MCBIST=1,WR_EYE=2, WRT_DQS=8,RD_EYE=4,RD_GATE=16
enum shmoo_algorithm_t { SEQ_LIN}; // Parallel bytes/ranks here .. no parallel targets in HB
const uint8_t NINE = 9;
-const uint8_t MAX_RPS=4;// 4 Rank pairs in this design
-const uint8_t MAX_SHMOO=18;
+//const uint8_t MAX_RPS=4;// 4 Rank pairs in this design
+const uint8_t MAX_SHMOO=1;
const uint8_t MAX_RANK_DIMM=4;
const uint8_t MAX_NIBBLES=2;
const uint8_t MAX_BITS=4;
const uint8_t MAX_DQ=80;
const uint8_t MAX_DQS=20;
const uint8_t SCHMOO_NIBBLES=20;
-const uint16_t read_counter_threshold=1000;
-const uint16_t error_threshold_count=400;
+//const uint16_t read_counter_threshold=1000;
+//const uint16_t error_threshold_count=400;
const uint8_t MAX_PORT = 2;
const uint8_t MAX_BYTE = 10;
const uint8_t MAX_RANK = 8;
-const uint8_t MAX_CMDS = 3;
-const uint8_t MAX_ADDR = 20;
-const uint8_t MAX_CNTRL = 20;
-const uint8_t MAX_CLK = 8;
+//const uint8_t MAX_CMDS = 1;
+//const uint8_t MAX_ADDR = 20;
+//const uint8_t MAX_CNTRL = 20;
+//const uint8_t MAX_CLK = 8;
//const uint8_t MAX_NIBBLE = 1;
@@ -87,29 +87,16 @@ struct shmoo_knob_data_t{
// config data and results
//uint32_t curr_val[MAX_BLOCK][MAX_INSTANCE][MAX_RPS];
bool done;
- uint32_t lb_regval[MAX_DQ][MAX_RPS]; // Left Bound register/Hex value
- uint32_t rb_regval[MAX_DQ][MAX_RPS];// Right Bound register/Hex value
- uint32_t total_margin[MAX_DQ][MAX_RPS]; //Left bound+ right bound value
- uint32_t nom_val[MAX_DQ][MAX_RPS]; // nominal value of this instance of the knob
- uint32_t last_pass[MAX_DQ][MAX_RPS];
- uint32_t last_fail[MAX_DQ][MAX_RPS];
- uint32_t curr_val[MAX_DQ][MAX_RPS];
- uint32_t curr_diff[MAX_DQ][MAX_RPS];
- uint32_t right_margin_val[MAX_DQ][MAX_RPS];
- uint32_t left_margin_val[MAX_DQ][MAX_RPS];
- uint32_t right_err_cnt[MAX_DQ][MAX_RPS];
- uint32_t left_err_cnt[MAX_DQ][MAX_RPS];
- uint32_t cmd_lb_regval[MAX_PORT][MAX_CMDS][SCHMOO_NIBBLES]; // Left Bound register/Hex value
- uint32_t cmd_rb_regval[MAX_PORT][MAX_CMDS][SCHMOO_NIBBLES];// Right Bound register/Hex value
- uint32_t cmd_total_margin[MAX_PORT][MAX_CMDS][SCHMOO_NIBBLES]; //Left bound+ right bound value
- uint32_t cmd_nom_val[MAX_CMDS]; // nominal value of this instance of the knob
- uint32_t cmd_right_margin_val[MAX_PORT][MAX_CMDS][SCHMOO_NIBBLES];
- uint32_t cmd_left_margin_val[MAX_PORT][MAX_CMDS][SCHMOO_NIBBLES];
- uint32_t addr_nom_val[MAX_ADDR];
- uint32_t cntrl_nom_val[MAX_CNTRL];
- uint32_t clk_nom_val[MAX_CLK];
- uint32_t datadis_nom_val[MAX_CLK];
- uint32_t offset[SCHMOO_NIBBLES];
+ uint16_t lb_regval[MAX_DQ]; // Left Bound register/Hex value
+ uint16_t rb_regval[MAX_DQ];// Right Bound register/Hex value
+ //uint32_t total_margin[MAX_DQ][MAX_RPS]; //Left bound+ right bound value
+ uint16_t nom_val[MAX_DQ]; // nominal value of this instance of the knob
+ uint16_t last_pass[MAX_DQ];
+ uint16_t last_fail[MAX_DQ];
+ uint16_t curr_val[MAX_DQ];
+ // uint32_t curr_diff[MAX_DQ];
+ uint16_t right_margin_val[MAX_DQ];
+ uint16_t left_margin_val[MAX_DQ];
};
#endif
OpenPOWER on IntegriCloud