diff options
| author | Thi Tran <thi@us.ibm.com> | 2013-08-29 08:50:45 -0500 | 
|---|---|---|
| committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2013-09-12 16:34:52 -0500 | 
| commit | a816a9a252dbac72cc3a574f16f0cda0efaa38b4 (patch) | |
| tree | 27322e88273f06c3c046f4f0907c4ccd9e2b0c58 | |
| parent | 91e85b80c733bbf8f34df591ff04ce845f70b332 (diff) | |
| download | blackbird-hostboot-a816a9a252dbac72cc3a574f16f0cda0efaa38b4.tar.gz blackbird-hostboot-a816a9a252dbac72cc3a574f16f0cda0efaa38b4.zip | |
Hostboot - Updated HWPs from defect SW221626 (DIMM 2.0 support)
CQ: SW221626
Change-Id: Iab65ce796154aaad5b409c3d1adc0819f026f9bf
Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/5966
Tested-by: Jenkins Server
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
13 files changed, 5893 insertions, 1045 deletions
| diff --git a/src/usr/hwpf/hwp/dram_training/dram_training.C b/src/usr/hwpf/hwp/dram_training/dram_training.C index 3d2e11639..161d0a2c0 100644 --- a/src/usr/hwpf/hwp/dram_training/dram_training.C +++ b/src/usr/hwpf/hwp/dram_training/dram_training.C @@ -783,8 +783,6 @@ void*    call_mss_draminit_trainadv( void *io_pArgs )  {      errlHndl_t l_err = NULL;      IStepError l_stepError; -    uint8_t l_pattern = 0; -    uint8_t l_test_type = 0;      TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace,              "call_mss_draminit_trainadv entry" ); @@ -815,8 +813,7 @@ void*    call_mss_draminit_trainadv( void *io_pArgs )                      (const_cast<TARGETING::Target*>(l_mba_target)) );          //  call the HWP with each fapi::Target -        FAPI_INVOKE_HWP(l_err, mss_draminit_training_advanced, l_fapi_mba_target, -                        l_pattern, l_test_type); +        FAPI_INVOKE_HWP(l_err, mss_draminit_training_advanced, l_fapi_mba_target);          if (l_err)          { diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_access_delay_reg.C b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_access_delay_reg.C index b2e1b001d..df79c60c5 100644 --- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_access_delay_reg.C +++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_access_delay_reg.C @@ -20,7 +20,7 @@  /* Origin: 30                                                             */  /*                                                                        */  /* IBM_PROLOG_END_TAG                                                     */ -// $Id: mss_access_delay_reg.C,v 1.14 2013/01/10 14:32:39 sasethur Exp $ +// $Id: mss_access_delay_reg.C,v 1.17 2013/07/18 06:22:49 sauchadh Exp $  //------------------------------------------------------------------------------  // *! (C) Copyright International Business Machines Corp. 2011  // *! All Rights Reserved -- Property of IBM @@ -49,7 +49,10 @@  //   1.11  | sauchadh |18-Dec-12| Fixed Frimware comments and removed print statements in between  //   1.12  | sauchadh |18-Dec-12| Added support for unused DQS in x8 mode  //   1.13  | sauchadh |7-Jan-12 | Added DQSCLK and RDCLK in phase select register -//   1.14  | sauchadh |8-Jan-12 | Fixed Firmware comments  +//   1.14  | sauchadh |8-Jan-12 | Fixed Firmware comments +//   1.15  | sauchadh |20-may-13| Fixed swizzle issue in DQSCLK phase rotators +//   1.16  | sauchadh |12-jun-13| ADDED	 CAC registers for read dqs +//   1.17  | sauchadh |18-Jul-13| Added data bit disable registers  //---------------------------------------------------------------------- @@ -110,10 +113,50 @@ fapi::ReturnCode mss_access_delay_reg(const fapi::Target & i_target_mba, access_     uint8_t l_mbapos=0;     const uint8_t l_ISDIMM_dqmax=71;     const uint8_t l_CDIMM_dqmax=79; +   uint8_t l_adr=0; +    const uint8_t addr_max=19; +   const uint8_t cmd_max=3; +   const uint8_t cnt_max=20; +   const uint8_t clk_max=8; +   const uint8_t addr_lanep0[addr_max]={1,5,3,7,10,6,4,10,13,12,9,9,0,0,6,4,1,4,8}; +   const uint8_t addr_adrp0[addr_max]={2,1,1,3,1,3,1,3,3,3,2,3,2,3,1,0,3,3,3}; +   const uint8_t addr_lanep1[addr_max]={7,10,3,6,8,12,6,1,5,8,2,0,13,4,5,9,6,11,9}; +   const uint8_t addr_adrp1[addr_max]={2,1,2,2,1,3,1,1,1,3,1,3,2,3,3,0,0,1,3}; +   const uint8_t addr_lanep2[addr_max]={8,0,7,1,12,10,1,5,9,5,13,5,4,2,4,9,10,9,0}; +   const uint8_t addr_adrp2[addr_max]={2,2,3,0,3,1,2,0,1,3,2,1,0,2,3,3,3,2,1}; +   const uint8_t addr_lanep3[addr_max]={6,2,9,9,2,3,4,10,0,5,1,5,4,1,8,11,5,12,1}; +   const uint8_t addr_adrp3[addr_max]={3,0,2,3,2,0,3,3,1,2,2,1,0,1,3,3,0,3,0}; +    +   const uint8_t cmd_lanep0[cmd_max]={2,11,5}; +   const uint8_t cmd_adrp0[cmd_max]={3,1,3}; +   const uint8_t cmd_lanep1[cmd_max]={2,10,10}; +   const uint8_t cmd_adrp1[cmd_max]={2,3,2}; +   const uint8_t cmd_lanep2[cmd_max]={3,11,3}; +   const uint8_t cmd_adrp2[cmd_max]={1,3,0}; +   const uint8_t cmd_lanep3[cmd_max]={7,10,7}; +   const uint8_t cmd_adrp3[cmd_max]={1,1,3}; +    +   const uint8_t cnt_lanep0[cnt_max]={0,7,3,1,7,8,8,3,8,6,7,2,2,0,9,1,3,6,9,2}; +   const uint8_t cnt_adrp0[cnt_max]={1,0,3,0,2,2,1,2,0,0,1,2,0,0,1,1,0,2,0,1}; +   const uint8_t cnt_lanep1[cnt_max]={5,4,0,5,11,9,10,7,1,11,0,4,12,3,6,8,1,4,7,7}; +   const uint8_t cnt_adrp1[cnt_max]={2,1,2,0,2,1,0,1,3,0,1,0,2,1,3,0,2,2,3,0}; +   const uint8_t cnt_lanep2[cnt_max]={0,4,7,13,11,5,12,2,3,6,11,6,7,1,10,8,8,2,4,1}; +   const uint8_t cnt_adrp2[cnt_max]={0,1,1,3,1,2,2,0,2,2,0,1,2,1,0,3,1,1,2,3}; +   const uint8_t cnt_lanep3[cnt_max]={0,11,9,8,4,7,0,3,8,6,13,8,7,0,6,6,1,2,9,5}; +   const uint8_t cnt_adrp3[cnt_max]={2,1,0,2,1,0,3,2,0,1,3,1,2,0,0,2,3,1,1,3}; +    +   const uint8_t clk_lanep0[clk_max]={10,11,11,10,4,5,13,12}; +   const uint8_t clk_adrp0[clk_max]={0,0,2,2,2,2,2,2}; +   const uint8_t clk_lanep1[clk_max]={3,2,8,9,1,0,3,2}; +   const uint8_t clk_adrp1[clk_max]={3,3,2,2,0,0,0,0}; +   const uint8_t clk_lanep2[clk_max]={11,10,6,7,2,3,8,9}; +   const uint8_t clk_adrp2[clk_max]={2,2,0,0,3,3,0,0}; +   const uint8_t clk_lanep3[clk_max]={3,2,13,12,10,11,11,10}; +   const uint8_t clk_adrp3[clk_max]={3,3,2,2,0,0,2,2}; +    +    +   rc = mss_getrankpair(i_target_mba,i_port_u8,i_rank_u8,&l_rank_pair,l_rankpair_table);   if(rc) return rc; -    -   rc = mss_getrankpair(i_target_mba,i_port_u8,i_rank_u8,&l_rank_pair,l_rankpair_table);  if(rc) return rc; -          rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_TYPE, &i_target_mba, l_dimmtype); if(rc) return rc;     rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_WIDTH, &i_target_mba, l_dram_width); if(rc) return rc; @@ -197,6 +240,246 @@ fapi::ReturnCode mss_access_delay_reg(const fapi::Target & i_target_mba, access_        l_len=l_out.bit_length;     } +    +   else if(i_input_type_e==ADDRESS) +   { +      if(i_input_index_u8<=18) // 19 delay values for Address +      { +         if((i_port_u8==0) && (l_mbapos==0)) +         { +            l_lane=addr_lanep0[i_input_index_u8]; +            l_adr=addr_adrp0[i_input_index_u8]; +         } +         else if((i_port_u8==1) && (l_mbapos==0)) +         { +            l_lane=addr_lanep1[i_input_index_u8]; +            l_adr=addr_adrp1[i_input_index_u8];  +         } +         else if((i_port_u8==0) && (l_mbapos==1)) +         { +            l_lane=addr_lanep2[i_input_index_u8]; +            l_adr=addr_adrp2[i_input_index_u8];  +         } +         else +         { +            l_lane=addr_lanep3[i_input_index_u8]; +            l_adr=addr_adrp3[i_input_index_u8];  +         } +          +      } +       +      else +      { +         FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR); +         FAPI_ERR("Wrong input index specified rc = 0x%08X ", uint32_t(rc)); +         return rc;       +      } +       +      ip_type_t l_input=ADDRESS_t; +      if(i_verbose==1) +      { +         FAPI_INF("ADR=%d",l_adr); +         FAPI_INF("lane=%d",l_lane); +      } +      l_block=l_adr; +      rc=get_address(i_target_mba,i_port_u8,l_rank_pair,l_input,l_block,l_lane,l_scom_add,l_start_bit,l_len8); if(rc) return rc; +      l_sbit=l_start_bit;     +      l_len=l_len8; +      if(i_verbose==1) +      { +         FAPI_INF("scom_address=%llX",l_scom_add); +         FAPI_INF("start bit=%d",l_start_bit); +         FAPI_INF("length=%d",l_len8);  +      } +   } +    +   else if(i_input_type_e==DATA_DISABLE) +   { +      if(i_input_index_u8<=4) // 5 delay values for data bits disable register +      { +         l_block=i_input_index_u8; +      } +      else +      { +         FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR); +         FAPI_ERR("Wrong input index specified rc = 0x%08X ", uint32_t(rc)); +         return rc;       +      } +       +      ip_type_t l_input=DATA_DISABLE_t; +      if(i_verbose==1) +      { +         FAPI_INF("block=%d",l_block); +      } +      l_lane=0; +      rc=get_address(i_target_mba,i_port_u8,l_rank_pair,l_input,l_block,l_lane,l_scom_add,l_start_bit,l_len8); if(rc) return rc; +      l_sbit=l_start_bit;     +      l_len=l_len8; +      if(i_verbose==1) +      { +         FAPI_INF("scom_address=%llX",l_scom_add); +         FAPI_INF("start bit=%d",l_start_bit); +         FAPI_INF("length=%d",l_len8);  +      } +   } +    +    +   else if(i_input_type_e==COMMAND) +   { +      if(i_input_index_u8<=2) // 3 delay values for Command +      { +         if((i_port_u8==0) && (l_mbapos==0)) +         { +            l_lane=cmd_lanep0[i_input_index_u8]; +            l_adr=cmd_adrp0[i_input_index_u8]; +         } +         else if((i_port_u8==1) && (l_mbapos==0)) +         { +            l_lane=cmd_lanep1[i_input_index_u8]; +            l_adr=cmd_adrp1[i_input_index_u8];  +         } +         else if((i_port_u8==0) && (l_mbapos==1)) +         { +            l_lane=cmd_lanep2[i_input_index_u8]; +            l_adr=cmd_adrp2[i_input_index_u8];  +         } +         else +         { +            l_lane=cmd_lanep3[i_input_index_u8]; +            l_adr=cmd_adrp3[i_input_index_u8];  +         } +          +      } +       +      else +      { +         FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR); +         FAPI_ERR("Wrong input index specified rc = 0x%08X ", uint32_t(rc)); +         return rc;       +      } +       +      ip_type_t l_input=COMMAND_t; +      if(i_verbose==1) +      { +         FAPI_INF("ADR=%d",l_adr); +         FAPI_INF("lane=%d",l_lane); +      } +      l_block=l_adr; +      rc=get_address(i_target_mba,i_port_u8,l_rank_pair,l_input,l_block,l_lane,l_scom_add,l_start_bit,l_len8); if(rc) return rc; +      l_sbit=l_start_bit;     +      l_len=l_len8; +      if(i_verbose==1) +      { +         FAPI_INF("scom_address=%llX",l_scom_add); +         FAPI_INF("start bit=%d",l_start_bit); +         FAPI_INF("length=%d",l_len8);  +      } +   }    +    +    else if(i_input_type_e==CONTROL) +   { +      if(i_input_index_u8<=19) // 20 delay values for Control +      { +         if((i_port_u8==0) && (l_mbapos==0)) +         { +            l_lane=cnt_lanep0[i_input_index_u8]; +            l_adr=cnt_adrp0[i_input_index_u8]; +         } +         else if((i_port_u8==1) && (l_mbapos==0)) +         { +            l_lane=cnt_lanep1[i_input_index_u8]; +            l_adr=cnt_adrp1[i_input_index_u8];  +         } +         else if((i_port_u8==0) && (l_mbapos==1)) +         { +            l_lane=cnt_lanep2[i_input_index_u8]; +            l_adr=cnt_adrp2[i_input_index_u8];  +         } +         else +         { +            l_lane=cnt_lanep3[i_input_index_u8]; +            l_adr=cnt_adrp3[i_input_index_u8];  +         } +          +      } +       +      else +      { +         FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR); +         FAPI_ERR("Wrong input index specified rc = 0x%08X ", uint32_t(rc)); +         return rc;       +      } +       +      ip_type_t l_input=CONTROL_t; +      if(i_verbose==1) +      { +         FAPI_INF("ADR=%d",l_adr); +         FAPI_INF("lane=%d",l_lane); +      } +      l_block=l_adr; +      rc=get_address(i_target_mba,i_port_u8,l_rank_pair,l_input,l_block,l_lane,l_scom_add,l_start_bit,l_len8); if(rc) return rc; +      l_sbit=l_start_bit;     +      l_len=l_len8; +      if(i_verbose==1) +      { +         FAPI_INF("scom_address=%llX",l_scom_add); +         FAPI_INF("start bit=%d",l_start_bit); +         FAPI_INF("length=%d",l_len8);  +      } +   } +    +   else if(i_input_type_e==CLOCK) +   { +      if(i_input_index_u8<=7) // 8 delay values for CLK +      { +         if((i_port_u8==0) && (l_mbapos==0)) +         { +            l_lane=clk_lanep0[i_input_index_u8]; +            l_adr=clk_adrp0[i_input_index_u8]; +         } +         else if((i_port_u8==1) && (l_mbapos==0)) +         { +            l_lane=clk_lanep1[i_input_index_u8]; +            l_adr=clk_adrp1[i_input_index_u8];  +         } +         else if((i_port_u8==0) && (l_mbapos==1)) +         { +            l_lane=clk_lanep2[i_input_index_u8]; +            l_adr=clk_adrp2[i_input_index_u8];  +         } +         else +         { +            l_lane=clk_lanep3[i_input_index_u8]; +            l_adr=clk_adrp3[i_input_index_u8];  +         } +          +      } +       +      else +      { +         FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR); +         FAPI_ERR("Wrong input index specified rc = 0x%08X ", uint32_t(rc)); +         return rc;       +      } +       +      ip_type_t l_input=CLOCK_t; +      if(i_verbose==1) +      { +         FAPI_INF("ADR=%d",l_adr); +         FAPI_INF("lane=%d",l_lane); +      } +      l_block=l_adr; +      rc=get_address(i_target_mba,i_port_u8,l_rank_pair,l_input,l_block,l_lane,l_scom_add,l_start_bit,l_len8); if(rc) return rc; +      l_sbit=l_start_bit;     +      l_len=l_len8; +      if(i_verbose==1) +      { +         FAPI_INF("scom_address=%llX",l_scom_add); +         FAPI_INF("start bit=%d",l_start_bit); +         FAPI_INF("length=%d",l_len8);  +      } +   }    +        else if (i_input_type_e==RD_DQS || i_input_type_e==WR_DQS || i_input_type_e==DQS_ALIGN ||  i_input_type_e==DQS_GATE || i_input_type_e==RDCLK || i_input_type_e==DQSCLK)	         { @@ -832,7 +1115,7 @@ fapi::ReturnCode mss_access_delay_reg(const fapi::Target & i_target_mba, access_          return rc;        }            io_value_u32=l_output; -      FAPI_INF("Delay value=%d",io_value_u32); +     // FAPI_INF("Delay value=%d",io_value_u32);     }     else if(i_access_type_e==WRITE) @@ -841,7 +1124,7 @@ fapi::ReturnCode mss_access_delay_reg(const fapi::Target & i_target_mba, access_        if(i_input_type_e==RD_DQ || i_input_type_e==RD_DQS || i_input_type_e==RAW_RD_DQ_0 || i_input_type_e==RAW_RD_DQ_1 || i_input_type_e==RAW_RD_DQ_2 || i_input_type_e==RAW_RD_DQ_3 || i_input_type_e==RAW_RD_DQ_4 || i_input_type_e==RAW_RD_DQS_0 || i_input_type_e==RAW_RD_DQS_1 || i_input_type_e==RAW_RD_DQS_2 || i_input_type_e==RAW_RD_DQS_3 || i_input_type_e==RAW_RD_DQS_4        || i_input_type_e==RAW_SYS_ADDR_CLK || i_input_type_e==RAW_SYS_CLK_0 || i_input_type_e==RAW_SYS_CLK_1 || i_input_type_e==RAW_SYS_CLK_2 || i_input_type_e==RAW_SYS_CLK_3 || i_input_type_e==RAW_SYS_CLK_4 || i_input_type_e==RAW_WR_CLK_0 || i_input_type_e==RAW_WR_CLK_1 || i_input_type_e==RAW_WR_CLK_2 || i_input_type_e==RAW_WR_CLK_3 || i_input_type_e==RAW_WR_CLK_4        || i_input_type_e==RAW_ADDR_0 || i_input_type_e==RAW_ADDR_1 || i_input_type_e==RAW_ADDR_2 || i_input_type_e==RAW_ADDR_3 || i_input_type_e==RAW_DQS_ALIGN_0 || i_input_type_e==RAW_DQS_ALIGN_1 || i_input_type_e==RAW_DQS_ALIGN_2 || i_input_type_e==RAW_DQS_ALIGN_3 || i_input_type_e==RAW_DQS_ALIGN_4 -      || i_input_type_e==DQS_ALIGN )    +      || i_input_type_e==DQS_ALIGN || i_input_type_e==COMMAND || i_input_type_e==ADDRESS || i_input_type_e==CONTROL || i_input_type_e==CLOCK )           {           l_start=25;   // l_start is starting bit of delay value in the register. There are different registers and each register has a different field for delay        } @@ -860,12 +1143,22 @@ fapi::ReturnCode mss_access_delay_reg(const fapi::Target & i_target_mba, access_           l_start=30;          } +      else if(i_input_type_e==DATA_DISABLE) +      { +         l_start=16; +      } +              else        {           FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR);           FAPI_ERR("Wrong input type specified rc = 0x%08X ", uint32_t(rc));           return rc;              } +      if(i_verbose==1) +      { +         FAPI_INF("value given=%d",io_value_u32); +      } +              rc=fapiGetScom(i_target_mba,l_scom_add,data_buffer_64);if(rc) return rc;	          rc_num=data_buffer_64.insert(io_value_u32,l_sbit,l_len,l_start);        if(rc_num) @@ -978,9 +1271,8 @@ fapi::ReturnCode cross_coupled(const fapi::Target & i_target_mba,uint8_t i_port,        out.bit_length=l_len;      } -   else if (i_input_type_e==RD_DQS || i_input_type_e==WR_DQS ||  i_input_type_e==DQS_ALIGN)	     +   else if (i_input_type_e==WR_DQS ||  i_input_type_e==DQS_ALIGN)	         { -	           if(i_port==0 && l_mbapos==0)        {           l_dq=dqs_dq_lane_p0[i_input_index]; @@ -1298,11 +1590,7 @@ fapi::ReturnCode cross_coupled(const fapi::Target & i_target_mba,uint8_t i_port,           }           }   -      if (i_input_type_e==RD_DQS) -      { -         l_input_type=RD_DQS_t; -      } -      else if(i_input_type_e==WR_DQS)	  		   +      if(i_input_type_e==WR_DQS)	  		          {           l_input_type=WR_DQS_t;          } @@ -1318,9 +1606,10 @@ fapi::ReturnCode cross_coupled(const fapi::Target & i_target_mba,uint8_t i_port,     }    -   else if (i_input_type_e==DQS_GATE || i_input_type_e==RDCLK || i_input_type_e==DQSCLK)	     +   else if (i_input_type_e==RD_DQS || i_input_type_e==DQS_GATE || i_input_type_e==RDCLK || i_input_type_e==DQSCLK)	         { -	    +       +              if(i_port==0 && l_mbapos==0)        {           l_dq=dqs_dq_lane_p0[i_input_index]; @@ -1366,11 +1655,12 @@ fapi::ReturnCode cross_coupled(const fapi::Target & i_target_mba,uint8_t i_port,        else        {           l_lane=22; -      }   +      } +      //FAPI_INF("here");        if (i_input_type_e==DQS_GATE)        { -         l_input_type=DQS_GATE_t;    +         l_input_type=DQS_GATE_t;        }        else if(i_input_type_e==RDCLK) @@ -1378,6 +1668,11 @@ fapi::ReturnCode cross_coupled(const fapi::Target & i_target_mba,uint8_t i_port,           l_input_type=RDCLK_t;        } +      else if(i_input_type_e==RD_DQS) +      { +         l_input_type=RD_DQS_t; +      } +              else        {           l_input_type=DQSCLK_t; @@ -1386,7 +1681,8 @@ fapi::ReturnCode cross_coupled(const fapi::Target & i_target_mba,uint8_t i_port,        if(i_verbose==1)        {           FAPI_INF("lane is=%d",l_lane); -      }    +      } +              rc=get_address(i_target_mba,i_port,i_rank_pair,l_input_type,l_block,l_lane,l_scom_address_64,l_start_bit,l_len); if(rc) return rc; 		         out.scom_addr=l_scom_address_64;        out.start_bit=l_start_bit; @@ -1611,14 +1907,18 @@ fapi::ReturnCode get_address(const fapi::Target & i_target_mba,uint8_t i_port, u     uint8_t l_lane=0;     const uint64_t l_port01_st=0x8000000000000000ull;     const uint64_t l_port23_st=0x8001000000000000ull; +   const uint64_t l_port01_adr_st=0x8000400000000000ull; +   const uint64_t l_port23_adr_st=0x8001400000000000ull;     const uint32_t l_port01_en=0x0301143f;     const uint64_t l_rd_port01_en=0x040301143full;     const uint64_t l_sys_clk_en=0x730301143full;     const uint64_t l_wr_clk_en =0x740301143full;     const uint64_t l_adr02_st=0x8000400000000000ull;     const uint64_t l_adr13_st=0x8001400000000000ull; -   const uint64_t l_dqs_gate_en=0x130301143full; +   const uint64_t l_dqs_gate_en=0x000000130301143full;     const uint64_t l_dqsclk_en=0x090301143full; +   const uint64_t l_data_ds_en=0x7c0301143full; +   uint8_t l_tmp=0;     rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, &i_target_mba, l_mbapos); if(rc) return rc;     if(i_input_type_e==WR_DQ_t || i_input_type_e==RAW_WR_DQ) @@ -1686,6 +1986,38 @@ fapi::ReturnCode get_address(const fapi::Target & i_target_mba,uint8_t i_port, u        o_scom_address_64=l_scom_address_64;  +   } +    +   else if(i_input_type_e==COMMAND_t || i_input_type_e==CLOCK_t ||  i_input_type_e==CONTROL_t ||  i_input_type_e==ADDRESS_t ) +   { +      l_tmp|=4;        +      l_lane=i_lane/2;            +      l_temp=l_lane+l_tmp; +      l_temp|=(i_block*4)<<8;      +      l_temp=l_temp<<32; +      if((i_port==0 && l_mbapos==0) || (i_port==0 && l_mbapos==1)) +      { +         l_scom_address_64|= l_port01_adr_st | l_temp | l_port01_en; +      } +      else  +      {  +         l_scom_address_64|= l_port23_adr_st | l_temp | l_port01_en; +      } +             +      if((i_lane % 2) == 0) +      { +         o_start_bit=49; +         o_len=7; +      } +      else +      { +         o_start_bit=57; +         o_len=7; +      } +    +       +      o_scom_address_64=l_scom_address_64;  +          }     @@ -1746,7 +2078,26 @@ fapi::ReturnCode get_address(const fapi::Target & i_target_mba,uint8_t i_port, u        o_scom_address_64=l_scom_address_64;      } +    +   else if(i_input_type_e==DATA_DISABLE_t)     +   { +      l_temp|=(i_block*4)<<8;      +      l_temp|=i_rank_pair<<8;      +      l_temp=l_temp<<32; +      if((i_port==0 && l_mbapos==0) || (i_port==0 && l_mbapos==1)) +      { +         l_scom_address_64|= l_port01_st | l_temp | l_data_ds_en; +      } +      else +      {  +         l_scom_address_64|= l_port23_st | l_temp | l_data_ds_en; +      } +      o_start_bit=48;  +      o_len=16;   +      o_scom_address_64=l_scom_address_64;  +   } +        else if(i_input_type_e==RD_CLK_t)     {          l_temp|=(i_block*4)<<8;      @@ -2139,22 +2490,20 @@ fapi::ReturnCode get_address(const fapi::Target & i_target_mba,uint8_t i_port, u     else if(i_input_type_e==RAW_DQS_GATE ||  i_input_type_e==DQS_GATE_t)     { -      //l_lane=i_lane; -      l_lane=i_lane/4;     -      l_temp|=l_lane; -      l_temp|=(i_block*4)<<8;      -      l_temp|=i_rank_pair<<8;      -      l_temp=l_temp<<32; -      -      if((i_port==0 && l_mbapos==0) || (i_port==0 && l_mbapos==1)) +      if(i_input_type_e==RAW_DQS_GATE)        { -         l_scom_address_64|= l_port01_st | l_temp | l_dqs_gate_en; +         l_lane=i_lane/4;     +         l_temp|=l_lane;        } -      else  -      {  -         l_scom_address_64|= l_port23_st | l_temp | l_dqs_gate_en; +      if(i_input_type_e==DQS_GATE_t) +      { +         l_lane=i_lane;            } +      l_temp|=(i_block*4)<<8;      +      l_temp|=i_rank_pair<<8;      +      l_temp=l_temp<<32; +             if(i_input_type_e==RAW_DQS_GATE)        {           if((i_lane % 4) == 0) @@ -2208,6 +2557,15 @@ fapi::ReturnCode get_address(const fapi::Target & i_target_mba,uint8_t i_port, u        } +      if((i_port==0 && l_mbapos==0) || (i_port==0 && l_mbapos==1)) +      { +         l_scom_address_64|= l_port01_st | l_temp | l_dqs_gate_en; +      } +      else  +      {  +         l_scom_address_64|= l_port23_st | l_temp | l_dqs_gate_en; +      } +                         o_scom_address_64=l_scom_address_64;      }  diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_access_delay_reg.H b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_access_delay_reg.H index 54a3c7b04..69c6d0e9d 100644 --- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_access_delay_reg.H +++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_access_delay_reg.H @@ -20,7 +20,7 @@  /* Origin: 30                                                             */  /*                                                                        */  /* IBM_PROLOG_END_TAG                                                     */ -//$Id: mss_access_delay_reg.H,v 1.7 2013/01/07 17:16:49 sasethur Exp $ +//$Id: mss_access_delay_reg.H,v 1.9 2013/07/18 06:23:03 sauchadh Exp $  //------------------------------------------------------------------------------  // *! (C) Copyright International Business Machines Corp. 2011  // *! All Rights Reserved -- Property of IBM @@ -128,7 +128,12 @@ enum input_type_t {     RAW_DQSCLK_2,     RAW_DQSCLK_3,     RAW_DQSCLK_4, -   DQSCLK +   DQSCLK, +   COMMAND, +   CONTROL, +   CLOCK, +   ADDRESS, +   DATA_DISABLE     };  enum ip_type_t { @@ -152,7 +157,12 @@ enum ip_type_t {     RDCLK_t,     RAW_RDCLK,     DQSCLK_t, -   RAW_DQSCLK +   RAW_DQSCLK, +   COMMAND_t, +   CONTROL_t, +   CLOCK_t, +   ADDRESS_t, +   DATA_DISABLE_t  }; diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_draminit_training_advanced.C b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_draminit_training_advanced.C index bf2740375..ec8a17164 100644 --- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_draminit_training_advanced.C +++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_draminit_training_advanced.C @@ -20,7 +20,7 @@  /* Origin: 30                                                             */  /*                                                                        */  /* IBM_PROLOG_END_TAG                                                     */ -// $Id: mss_draminit_training_advanced.C,v 1.30 2013/04/24 13:41:57 sasethur Exp $ +// $Id: mss_draminit_training_advanced.C,v 1.35 2013/08/08 13:07:28 sasethur Exp $  /* File is created by SARAVANAN SETHURAMAN on Thur 29 Sept 2011. */  //------------------------------------------------------------------------------ @@ -31,7 +31,7 @@  // *! TITLE :mss_draminit_training_advanced.C  // *! DESCRIPTION : Tools for centaur procedures  // *! OWNER NAME : Saravanan Sethuraman          email ID:saravanans@in.ibm.com -// *! BACKUP NAME: Mark D Bellows	 	 email ID:bellows@us.ibm.com +// *! BACKUP NAME: Mark D Bellows	 			 email ID:bellows@us.ibm.com  // #! ADDITIONAL COMMENTS :  //  // General purpose funcs @@ -70,6 +70,12 @@  //  1.28   | sasethur |22-Apr-13| Fixed fw comment   //  1.29   | sasethur |23-Apr-13| Fixed fw comment   //  1.30   | sasethur |24-Apr-13| Fixed fw comment  +//  1.31   | sasethur |10-May-13| Added user input for test type, pattern from wrapper  +//  1.32   | sasethur |04-Jun-13| Fixed for PortD cnfg, vref print for min setup, hold, fixed rdvref print, added set/reset mcbist attr +//  1.33   | sasethur |12-Jun-13| Updated mcbist setup attribute  +//  1.34   | sasethur |20-Jun-13| Fixed read_vref print, setup attribute +//  1.35   | sasethur |08-Aug-13| Fixed fw comment. +  // This procedure Schmoo's DRV_IMP, SLEW, VREF (DDR, CEN), RCV_IMP based on attribute from effective config procedure  // DQ & DQS Driver impedance, Slew rate, WR_Vref shmoo would call only write_eye shmoo for margin calculation @@ -93,10 +99,7 @@  #include <mss_generic_shmoo.H>  #include <mss_draminit_training_advanced.H>  #include <mss_unmask_errors.H> -//#include <mss_mcbist_common.C> -const uint8_t PATTERN = 14; -const uint8_t TESTTYPE = 13;  const uint32_t MASK = 1;  const uint32_t MAX_DIMM =2; @@ -117,38 +120,37 @@ extern "C"  using namespace fapi; -fapi::ReturnCode mss_draminit_training_advanced_cloned(const fapi::Target & i_target_mba, -			uint8_t i_pattern, uint8_t i_test_type); +fapi::ReturnCode mss_draminit_training_advanced_cloned(const fapi::Target & i_target_mba);  fapi::ReturnCode drv_imped_shmoo(const fapi::Target & i_target_mba, uint8_t i_port, -			shmoo_type_t i_shmoo_type_valid,  -			uint8_t i_pattern, uint8_t i_test_type);       +			shmoo_type_t i_shmoo_type_valid);   fapi::ReturnCode slew_rate_shmoo(const fapi::Target & i_target_mba, uint8_t i_port, -			shmoo_type_t i_shmoo_type_valid,  -			uint8_t i_pattern, uint8_t i_test_type); +			shmoo_type_t i_shmoo_type_valid);   fapi::ReturnCode wr_vref_shmoo(const fapi::Target & i_target_mba, uint8_t i_port, -			shmoo_type_t i_shmoo_type_valid,  -			uint8_t i_pattern, uint8_t i_test_type); +			shmoo_type_t i_shmoo_type_valid);  fapi::ReturnCode rd_vref_shmoo(const fapi::Target & i_target_mba, uint8_t i_port, -			shmoo_type_t i_shmoo_type_valid,  -			uint8_t i_pattern, uint8_t i_test_type); +			shmoo_type_t i_shmoo_type_valid);   fapi::ReturnCode rcv_imp_shmoo(const fapi::Target & i_target_mba, uint8_t i_port, -			shmoo_type_t i_shmoo_type_valid,  -			uint8_t i_pattern, uint8_t i_test_type); +			shmoo_type_t i_shmoo_type_valid);  fapi::ReturnCode delay_shmoo(const fapi::Target & i_target_mba, uint8_t i_port,  		    shmoo_type_t i_shmoo_type_valid,   		    uint32_t *o_left_margin, uint32_t *o_right_margin, -			uint8_t i_pattern, uint8_t i_test_type, uint32_t i_shmoo_param); +		     uint32_t i_shmoo_param);  void find_best_margin(shmoo_param i_shmoo_param_valid,uint32_t i_left[],  -			uint32_t i_right[], const uint8_t i_max,  +			uint32_t i_right[], const uint8_t l_max,   			uint32_t i_param_nom, uint8_t& o_index); +fapi::ReturnCode set_attribute(const fapi::Target & i_target_mba); + +fapi::ReturnCode reset_attribute(const fapi::Target & i_target_mba); + +  //-----------------------------------------------------------------------------------  //Function name: mss_draminit_training_advanced()  //Description: This function varies driver impedance, receiver impedance, slew, wr & rd vref @@ -159,17 +161,12 @@ void find_best_margin(shmoo_param i_shmoo_param_valid,uint32_t i_left[],  //	Default vlaues are Zero  //----------------------------------------------------------------------------------- -fapi::ReturnCode mss_draminit_training_advanced(const fapi::Target & i_target_mba,  -					uint8_t i_pattern,  -					uint8_t i_test_type) +fapi::ReturnCode mss_draminit_training_advanced(const fapi::Target & i_target_mba)  {      // const fapi::Target is centaur.mba -    i_pattern= PATTERN;        // MPR - Hard coded will be removed after attribute is assigned in firmware   -    i_test_type= TESTTYPE;     // SIMPLE RAND - Hard coded will be removed after attribute is assigned in firmware       fapi::ReturnCode rc; -    FAPI_INF(" pattern bit is %d and test_type_bit is %d",i_pattern,i_test_type);    -     -    rc = mss_draminit_training_advanced_cloned(i_target_mba,i_pattern,i_test_type); +    //FAPI_INF(" pattern bit is %d and test_type_bit is %d");    +    rc = mss_draminit_training_advanced_cloned(i_target_mba);      if (rc)       {  	FAPI_ERR("Advanced DRAM Init training procedure is Failed rc = 0x%08X (creator = %d)", uint32_t(rc), rc.getCreator()); @@ -199,9 +196,7 @@ fapi::ReturnCode mss_draminit_training_advanced(const fapi::Target & i_target_mb  // Input : const fapi::Target MBA  // i_pattern, i_test_type : Default = 0, mcbist lab function would use this arg  //----------------------------------------------------------------------------------- -fapi::ReturnCode mss_draminit_training_advanced_cloned(const fapi::Target & i_target_mba, -						 uint8_t i_pattern, -						 uint8_t i_test_type) +fapi::ReturnCode mss_draminit_training_advanced_cloned(const fapi::Target & i_target_mba)  {      //const fapi::Target is centaur.mba      fapi::ReturnCode rc; @@ -277,13 +272,13 @@ fapi::ReturnCode mss_draminit_training_advanced_cloned(const fapi::Target & i_ta      //Check for Shmoo Parameter, if anyof them is enabled then go into the loop else the procedure exit  -    	    if (( l_num_ranks_per_dimm_u8array[l_port][0] > 0 ) || (l_num_ranks_per_dimm_u8array[l_port][1] > 0)) +    	    if (( l_num_ranks_per_dimm_u8array[0][0] > 0 ) || (l_num_ranks_per_dimm_u8array[0][1] > 0) || ( l_num_ranks_per_dimm_u8array[1][0] > 0 ) || (l_num_ranks_per_dimm_u8array[1][1] > 0))              {      		if((l_shmoo_param_valid != PARAM_NONE) || (l_shmoo_type_valid != TEST_NONE))       		{      		    if((l_shmoo_param_valid & DRV_IMP) != 0)      		    {  -    			rc = drv_imped_shmoo(i_target_mba, l_port, l_shmoo_type_valid, i_pattern,i_test_type);  +    			rc = drv_imped_shmoo(i_target_mba, l_port, l_shmoo_type_valid);       			if (rc)      			{      			    FAPI_ERR("Driver Impedance Schmoo function is Failed rc = 0x%08X (creator = %d)", uint32_t(rc), rc.getCreator()); @@ -292,7 +287,7 @@ fapi::ReturnCode mss_draminit_training_advanced_cloned(const fapi::Target & i_ta      		    }      		    if((l_shmoo_param_valid & SLEW_RATE) !=0)           	    { -    			rc = slew_rate_shmoo(i_target_mba, l_port, l_shmoo_type_valid, i_pattern,i_test_type); +    			rc = slew_rate_shmoo(i_target_mba, l_port, l_shmoo_type_valid);      			if (rc)      			{      			    FAPI_ERR("Slew Rate Schmoo Function is Failed rc = 0x%08X (creator = %d)", uint32_t(rc), rc.getCreator()); @@ -300,17 +295,17 @@ fapi::ReturnCode mss_draminit_training_advanced_cloned(const fapi::Target & i_ta      			}      		    }      		    if((l_shmoo_param_valid & WR_VREF) != 0)  -   		    { -    			rc = wr_vref_shmoo(i_target_mba, l_port, l_shmoo_type_valid, i_pattern,i_test_type); +	   		    { +    			rc = wr_vref_shmoo(i_target_mba, l_port, l_shmoo_type_valid);      			if (rc) -   			{ +   				{       			    FAPI_ERR("Write Vref Schmoo Function is Failed rc = 0x%08X (creator = %d)", uint32_t(rc), rc.getCreator());      			    return rc;      			}      		    }      		    if((l_shmoo_param_valid & RD_VREF) !=0)      		    { -    			rc = rd_vref_shmoo(i_target_mba, l_port, l_shmoo_type_valid, i_pattern,i_test_type); +    			rc = rd_vref_shmoo(i_target_mba, l_port, l_shmoo_type_valid);      			if (rc)      			{      			    FAPI_ERR("Read Vref Schmoo Function is Failed rc = 0x%08X (creator = %d)", uint32_t(rc), rc.getCreator()); @@ -319,16 +314,16 @@ fapi::ReturnCode mss_draminit_training_advanced_cloned(const fapi::Target & i_ta  		    }      		    if ((l_shmoo_param_valid & RCV_IMP) !=0)      		    {	 -    			rc = rcv_imp_shmoo(i_target_mba, l_port, l_shmoo_type_valid, i_pattern,i_test_type); +    			rc = rcv_imp_shmoo(i_target_mba, l_port, l_shmoo_type_valid);      			if (rc)      			{      			    FAPI_ERR("Receiver Impedance Schmoo Function is Failed rc = 0x%08X (creator = %d)", uint32_t(rc), rc.getCreator());      			    return rc;      			}      		    } -    		    if ((l_shmoo_param_valid & DELAY_REG) != 0)  +    		    if (((l_shmoo_param_valid & DELAY_REG) != 0) || (l_shmoo_type_valid & TEST_NONE) != 0)       		    { -    			rc = delay_shmoo(i_target_mba, l_port, l_shmoo_type_valid, &l_left_margin, &l_right_margin, i_pattern, i_test_type, l_shmoo_param);  +    			rc = delay_shmoo(i_target_mba, l_port, l_shmoo_type_valid, &l_left_margin, &l_right_margin, l_shmoo_param);       			if (rc)      			{      			    FAPI_ERR("Delay Schmoo Function is Failed rc = 0x%08X (creator = %d)", uint32_t(rc), rc.getCreator()); @@ -356,14 +351,12 @@ return rc;  fapi::ReturnCode drv_imped_shmoo(const fapi::Target & i_target_mba,  			   uint8_t i_port, -			   shmoo_type_t i_shmoo_type_valid, -			   uint8_t i_pattern, -			   uint8_t i_test_type) +			   shmoo_type_t i_shmoo_type_valid)  {      fapi::ReturnCode rc;      uint8_t l_drv_imp_dq_dqs[MAX_PORT] = {0};      uint8_t l_drv_imp_dq_dqs_nom[MAX_PORT] = {0}; -    uint8_t l_drv_imp_dq_dqs_new[MAX_PORT] = {0}; +    //uint8_t l_drv_imp_dq_dqs_new[MAX_PORT] = {0};      uint8_t index=0;      uint8_t l_slew_rate_dq_dqs[MAX_PORT] = {0};      uint8_t l_slew_rate_dq_dqs_schmoo[MAX_PORT] = {0}; @@ -377,6 +370,7 @@ fapi::ReturnCode drv_imped_shmoo(const fapi::Target & i_target_mba,      uint32_t l_left_margin = 0;      uint32_t l_right_margin = 0;      uint8_t count = 0; +    uint8_t shmoo_param_count = 0;      uint8_t l_slew_type = 0; // Hard coded since this procedure will touch only DQ_DQS and not address      rc = FAPI_ATTR_GET(ATTR_EFF_CEN_DRV_IMP_DQ_DQS, &i_target_mba, l_drv_imp_dq_dqs_nom);  @@ -403,7 +397,7 @@ fapi::ReturnCode drv_imped_shmoo(const fapi::Target & i_target_mba,      {     	for(index = 0; index< MAX_DRV_IMP; index+=1)     	{ -            if (l_drv_imp_dq_dqs_schmoo[i_port] & MASK)  +        if (l_drv_imp_dq_dqs_schmoo[i_port] & MASK)   	    {  	        l_drv_imp_dq_dqs[i_port] = drv_imp_array[index];  		FAPI_INF("Current Driver Impedance Value = %d Ohms", drv_imp_array[index]); @@ -415,11 +409,16 @@ fapi::ReturnCode drv_imped_shmoo(const fapi::Target & i_target_mba,  	        rc = config_slew_rate(i_target_mba, i_port, l_slew_type, l_drv_imp_dq_dqs[i_port], l_slew_rate_dq_dqs[i_port]);   		if (rc) return rc;  		FAPI_INF("Calling Shmoo for finding Timing Margin:"); +		if (shmoo_param_count)  +		{ +			rc = set_attribute(i_target_mba); if(rc) return rc; +		}  		rc = delay_shmoo(i_target_mba, i_port, i_shmoo_type_valid,  -				 &l_left_margin, &l_right_margin, i_pattern, i_test_type, l_drv_imp_dq_dqs_in);   +				 &l_left_margin, &l_right_margin, l_drv_imp_dq_dqs_in);    		if (rc) return rc;  		l_left_margin_drv_imp_array[index]= l_left_margin;  	        l_right_margin_drv_imp_array[index]= l_right_margin; +		 shmoo_param_count++;  	    }  	    else  	    { @@ -442,7 +441,7 @@ fapi::ReturnCode drv_imped_shmoo(const fapi::Target & i_target_mba,  	else  	{ -	   if(i_port == 0) +	  /* if(i_port == 0)  	   {  	   l_drv_imp_dq_dqs_new[0] = drv_imp_array[count];  	   l_drv_imp_dq_dqs_new[1] = l_drv_imp_dq_dqs_nom[1];  // This can be removed once the get/set attribute takes care of this @@ -451,29 +450,35 @@ fapi::ReturnCode drv_imped_shmoo(const fapi::Target & i_target_mba,  	   {  	   l_drv_imp_dq_dqs_new[1] = drv_imp_array[count];  	   l_drv_imp_dq_dqs_new[0] = l_drv_imp_dq_dqs_nom[0]; -	   } +	   }*/ -	   if (l_drv_imp_dq_dqs_new[i_port] != l_drv_imp_dq_dqs_nom[i_port]) -	   { +	  // if (l_drv_imp_dq_dqs_new[i_port] != l_drv_imp_dq_dqs_nom[i_port]) +	  // {  	        //FAPI_INF("Better Margin found on %d Ohms on %s", l_drv_imp_dq_dqs_new[i_port], i_target_mba.toEcmdString()); -	        //rc = FAPI_ATTR_SET(ATTR_EFF_CEN_DRV_IMP_DQ_DQS, &i_target_mba, l_drv_imp_dq_dqs_new);  -	        //if (rc) return rc; +	       // rc = FAPI_ATTR_SET(ATTR_EFF_CEN_DRV_IMP_DQ_DQS, &i_target_mba, l_drv_imp_dq_dqs_new);  +	       // if (rc) return rc;  	        //FAPI_INF("Configuring New Driver Impedance Value to Registers:");  	        //rc = config_drv_imp(i_target_mba, i_port, l_drv_imp_dq_dqs_new[i_port]);  	        //if (rc) return rc;  	        //rc = config_slew_rate(i_target_mba, i_port, l_slew_type, l_drv_imp_dq_dqs_new[i_port], l_slew_rate_dq_dqs[i_port]);   		//if (rc) return rc; -	    } -	    else -	    { -	        FAPI_INF("Nominal value will not be changed - Restoring the original values!");	 +	   // } +	   // else +	   // { +	        //FAPI_INF("Nominal value will not be changed - Restoring the original values!");	 +	        FAPI_INF("Restoring the nominal values!");	 +	        rc = FAPI_ATTR_SET(ATTR_EFF_CEN_DRV_IMP_DQ_DQS, &i_target_mba, l_drv_imp_dq_dqs_nom);  +	        if (rc) return rc;  	        rc = config_drv_imp(i_target_mba, i_port, l_drv_imp_dq_dqs_nom[i_port]);  	        if (rc) return rc; +	        rc = FAPI_ATTR_SET(ATTR_EFF_CEN_SLEW_RATE_DQ_DQS, &i_target_mba, l_slew_rate_dq_dqs);  +	        if (rc) return rc;  	        rc = config_slew_rate(i_target_mba, i_port, l_slew_type, l_drv_imp_dq_dqs_nom[i_port], l_slew_rate_dq_dqs[i_port]);   		if (rc) return rc; -	    }  +	   // }   	} -	 +    FAPI_INF("Restoring mcbist setup attribute..."); +	rc = reset_attribute(i_target_mba); if (rc) return rc;  	FAPI_INF("++++ Driver impedance shmoo function executed successfully ++++");      }  return rc; @@ -493,22 +498,21 @@ return rc;  fapi::ReturnCode slew_rate_shmoo(const fapi::Target & i_target_mba,  			   uint8_t i_port, -			   shmoo_type_t i_shmoo_type_valid, -			   uint8_t i_pattern, -			   uint8_t i_test_type) +			   shmoo_type_t i_shmoo_type_valid)  {      fapi::ReturnCode rc;      uint8_t l_slew_rate_dq_dqs[MAX_PORT] = {0};      uint8_t l_slew_rate_dq_dqs_nom[MAX_PORT] = {0};      uint8_t l_slew_rate_dq_dqs_nom_fc = 0;      uint8_t l_slew_rate_dq_dqs_in = 0; -    uint8_t l_slew_rate_dq_dqs_new[MAX_PORT] = {0}; +    //uint8_t l_slew_rate_dq_dqs_new[MAX_PORT] = {0};      uint32_t l_slew_rate_dq_dqs_schmoo[MAX_PORT] = {0};      uint8_t l_drv_imp_dq_dqs_nom[MAX_PORT] = {0};      i_shmoo_type_valid = WR_EYE; // Hard coded - Other shmoo type is not valid - Temporary      uint8_t index = 0;      uint8_t count = 0; +    uint8_t shmoo_param_count = 0;      uint32_t l_left_margin_slew_array[MAX_NUM_SLEW_RATES] = {0};      uint32_t l_right_margin_slew_array[MAX_NUM_SLEW_RATES] = {0};      uint32_t l_left_margin = 0; @@ -546,11 +550,16 @@ fapi::ReturnCode slew_rate_shmoo(const fapi::Target & i_target_mba,                  if (rc) return rc;  		l_slew_rate_dq_dqs_in = l_slew_rate_dq_dqs[i_port];  		FAPI_INF("Calling Shmoo for finding Timing Margin:"); +		if (shmoo_param_count) +		{ +			rc = set_attribute(i_target_mba); if(rc) return rc; +		}  		rc = delay_shmoo(i_target_mba, i_port, i_shmoo_type_valid,  -				 &l_left_margin, &l_right_margin, i_pattern, i_test_type, l_slew_rate_dq_dqs_in);   +				 &l_left_margin, &l_right_margin, l_slew_rate_dq_dqs_in);                    if (rc) return rc;  		l_left_margin_slew_array[index]= l_left_margin;  		l_right_margin_slew_array[index]= l_right_margin; +		 shmoo_param_count++;  	    }  	    else  	    { @@ -572,7 +581,7 @@ fapi::ReturnCode slew_rate_shmoo(const fapi::Target & i_target_mba,  	else  	{ -	   if(i_port == 0) +	 /*  if(i_port == 0)  	   {  	       l_slew_rate_dq_dqs_new[0] = slew_rate_array[count];  	       l_slew_rate_dq_dqs_new[1] = l_slew_rate_dq_dqs_nom[1];  @@ -581,25 +590,36 @@ fapi::ReturnCode slew_rate_shmoo(const fapi::Target & i_target_mba,  	   {  	       l_slew_rate_dq_dqs_new[1] = slew_rate_array[count];  	       l_slew_rate_dq_dqs_new[0] = l_slew_rate_dq_dqs_nom[0];   -	   } +	   }*/ +	   FAPI_INF("Restoring the nominal values!");	 +	   rc = FAPI_ATTR_SET(ATTR_EFF_CEN_DRV_IMP_DQ_DQS, &i_target_mba, l_drv_imp_dq_dqs_nom);  +	   if (rc) return rc; +	   rc = config_drv_imp(i_target_mba, i_port, l_drv_imp_dq_dqs_nom[i_port]); +	   if (rc) return rc; +	   rc = FAPI_ATTR_SET(ATTR_EFF_CEN_SLEW_RATE_DQ_DQS, &i_target_mba, l_slew_rate_dq_dqs_nom);  +	   if (rc) return rc; +	   rc = config_slew_rate(i_target_mba, i_port, l_slew_type, l_drv_imp_dq_dqs_nom[i_port], l_slew_rate_dq_dqs_nom[i_port]);  +   	   if (rc) return rc; -	    if (l_slew_rate_dq_dqs_new[i_port] != l_slew_rate_dq_dqs_nom[i_port]) +	   /* if (l_slew_rate_dq_dqs_new[i_port] != l_slew_rate_dq_dqs_nom[i_port])  	    { -	        //FAPI_INF("Better Margin found on Slew Rate: %d V/ns on %s", l_slew_rate_dq_dqs_new[i_port], i_target_mba.toEcmdString()); -	        //rc = FAPI_ATTR_SET(ATTR_EFF_CEN_SLEW_RATE_DQ_DQS, &i_target_mba, l_slew_rate_dq_dqs_new);  +	        FAPI_INF("Better Margin found on Slew Rate: %d V/ns on %s", l_slew_rate_dq_dqs_new[i_port], i_target_mba.toEcmdString()); +	        rc = FAPI_ATTR_SET(ATTR_EFF_CEN_SLEW_RATE_DQ_DQS, &i_target_mba, l_slew_rate_dq_dqs_new);   	        if (rc) return rc; -	        //FAPI_INF("Configuring New Slew Rate Value to Registers:"); -	        //rc = config_slew_rate(i_target_mba, i_port, l_slew_type, l_drv_imp_dq_dqs_nom[i_port], l_slew_rate_dq_dqs_new[i_port]);  +	        FAPI_INF("Configuring New Slew Rate Value to Registers:"); +	        rc = config_slew_rate(i_target_mba, i_port, l_slew_type, l_drv_imp_dq_dqs_nom[i_port], l_slew_rate_dq_dqs_new[i_port]);   	        if (rc) return rc;  	    }  	    else  	    {  	        FAPI_INF("Nominal value will not be changed!");	  	        FAPI_INF("Slew Rate: %d V/ns on %s", l_slew_rate_dq_dqs_nom[i_port], i_target_mba.toEcmdString()); -	    } +	    } */  	} +        FAPI_INF("Restoring mcbist setup attribute..."); +	rc = reset_attribute(i_target_mba); if (rc) return rc;  	FAPI_INF("++++ Slew Rate shmoo function executed successfully ++++");      }  return rc;	 @@ -619,14 +639,12 @@ return rc;  fapi::ReturnCode wr_vref_shmoo(const fapi::Target & i_target_mba,  			 uint8_t i_port, -			 shmoo_type_t i_shmoo_type_valid, -			 uint8_t i_pattern, -			 uint8_t i_test_type) +			 shmoo_type_t i_shmoo_type_valid)  {      fapi::ReturnCode rc;      uint32_t l_wr_dram_vref[MAX_PORT] = {0};      uint32_t l_wr_dram_vref_nom[MAX_PORT] = {0}; -    uint32_t l_wr_dram_vref_new[MAX_PORT] = {0}; +    //uint32_t l_wr_dram_vref_new[MAX_PORT] = {0};      uint32_t l_wr_dram_vref_schmoo[MAX_PORT] = {0};       uint32_t l_wr_dram_vref_nom_fc = 0;      uint32_t l_wr_dram_vref_in = 0; @@ -634,6 +652,7 @@ fapi::ReturnCode wr_vref_shmoo(const fapi::Target & i_target_mba,      uint8_t index = 0;      uint8_t count = 0; +    uint8_t shmoo_param_count = 0;      uint32_t l_left_margin = 0;      uint32_t l_right_margin = 0;      uint32_t l_left_margin_wr_vref_array[MAX_WR_VREF]= {0}; @@ -660,17 +679,24 @@ fapi::ReturnCode wr_vref_shmoo(const fapi::Target & i_target_mba,  	{              if (l_wr_dram_vref_schmoo[i_port] & MASK)   	    { -        	FAPI_INF("Current Vref multiplier value is %d", wr_vref_array[index]); -		l_wr_dram_vref[i_port] = wr_vref_array[index]; -		rc = config_wr_dram_vref(i_target_mba, i_port, l_wr_dram_vref[i_port]);  -                if (rc) return rc; -		l_wr_dram_vref_in = l_wr_dram_vref[i_port]; -		//FAPI_INF(" Calling Shmoo for finding Timing Margin:"); -		rc = delay_shmoo(i_target_mba, i_port, i_shmoo_type_valid,  -	 			 &l_left_margin, &l_right_margin, i_pattern, i_test_type, l_wr_dram_vref_in);   -                if (rc) return rc; -		l_left_margin_wr_vref_array[index]= l_left_margin; -	        l_right_margin_wr_vref_array[index]= l_right_margin; +				FAPI_INF("Current Vref multiplier value is %d", wr_vref_array[index]); +			l_wr_dram_vref[i_port] = wr_vref_array[index]; +			rc = config_wr_dram_vref(i_target_mba, i_port, l_wr_dram_vref[i_port]);  +					if (rc) return rc; +			l_wr_dram_vref_in = l_wr_dram_vref[i_port]; +			//FAPI_INF(" Calling Shmoo for finding Timing Margin:"); +			if (shmoo_param_count)  +			{ +				rc = set_attribute(i_target_mba); +				if (rc) return rc; +			} +			rc = delay_shmoo(i_target_mba, i_port, i_shmoo_type_valid,  +					 &l_left_margin, &l_right_margin, l_wr_dram_vref_in);   +			if (rc) return rc; +			l_left_margin_wr_vref_array[index]= l_left_margin; +				l_right_margin_wr_vref_array[index]= l_right_margin; +			 shmoo_param_count++; +			FAPI_INF("Wr Vref = %d ; Min Setup time = %d; Min Hold time = %d", wr_vref_array[index],l_left_margin_wr_vref_array[index],  l_right_margin_wr_vref_array[index]);   	    }  	    else  	    { @@ -678,7 +704,8 @@ fapi::ReturnCode wr_vref_shmoo(const fapi::Target & i_target_mba,  	        l_right_margin_wr_vref_array[index]= 0;  	    }  	    l_wr_dram_vref_schmoo[i_port] = (l_wr_dram_vref_schmoo[i_port] >> 1); -   	    FAPI_INF("Configuring Vref registers_2:, index %d , max value %d, schmoo %x mask %d ", index, MAX_WR_VREF, l_wr_dram_vref_schmoo[i_port], MASK); +   	    //FAPI_INF("Wr Vref = %d ; Min Setup time = %d; Min Hold time = %d", wr_vref_array[index],l_left_margin_wr_vref_array[index],  l_right_margin_wr_vref_array[index]);  +		//FAPI_INF("Configuring Vref registers_2:, index %d , max value %d, schmoo %x mask %d ", index, MAX_WR_VREF, l_wr_dram_vref_schmoo[i_port], MASK);  	}  	l_wr_dram_vref_nom_fc = l_wr_dram_vref_nom[i_port];  	find_best_margin(WR_VREF, l_left_margin_wr_vref_array, @@ -693,7 +720,7 @@ fapi::ReturnCode wr_vref_shmoo(const fapi::Target & i_target_mba,  	else  	{ -	    if(i_port == 0) +	  /*  if(i_port == 0)  	    {  	        l_wr_dram_vref_new[0] = wr_vref_array_fitness[count];                  l_wr_dram_vref_new[1] = l_wr_dram_vref_nom[1]; @@ -714,12 +741,17 @@ fapi::ReturnCode wr_vref_shmoo(const fapi::Target & i_target_mba,                  //if (rc) return rc;	      	    }  	    else -	    { -	        FAPI_INF("Nominal value will not be changed!- Restoring the original values!");	 +	    {*/ +	     //   FAPI_INF("Nominal value will not be changed!- Restoring the original values!");	 +	        FAPI_INF(" Restoring the nominal values!");	 +	        rc = FAPI_ATTR_SET(ATTR_EFF_DRAM_WR_VREF, &i_target_mba, l_wr_dram_vref_nom);  +	        if (rc) return rc;  	        rc = config_wr_dram_vref(i_target_mba, i_port, l_wr_dram_vref_nom[i_port]);                   if (rc) return rc;	     -	    } +	   // }          } +    FAPI_INF("Restoring mcbist setup attribute..."); +    rc = reset_attribute(i_target_mba); if (rc) return rc;      FAPI_INF("++++ Write DRAM Vref Shmoo function executed successfully ++++");      }      return rc; @@ -740,19 +772,18 @@ fapi::ReturnCode wr_vref_shmoo(const fapi::Target & i_target_mba,  fapi::ReturnCode rd_vref_shmoo(const fapi::Target & i_target_mba,  			 uint8_t i_port, -			 shmoo_type_t i_shmoo_type_valid, -			 uint8_t i_pattern, -			 uint8_t i_test_type)  +			 shmoo_type_t i_shmoo_type_valid)  {      fapi::ReturnCode rc;      uint32_t l_rd_cen_vref[MAX_PORT] = {0};      uint32_t l_rd_cen_vref_nom[MAX_PORT] = {0};      uint32_t l_rd_cen_vref_nom_fc = 0;      uint32_t l_rd_cen_vref_in = 0; -    uint32_t l_rd_cen_vref_new[MAX_PORT] ={0}; +    //uint32_t l_rd_cen_vref_new[MAX_PORT] ={0};      uint32_t l_rd_cen_vref_schmoo[MAX_PORT] = {0};      uint8_t index  = 0;      uint8_t count  = 0; +    uint8_t shmoo_param_count = 0;      i_shmoo_type_valid = RD_EYE; // Hard coded - Temporary      uint32_t l_left_margin = 0; @@ -768,7 +799,7 @@ fapi::ReturnCode rd_vref_shmoo(const fapi::Target & i_target_mba,      FAPI_INF("+++++++++++++++++CENTAUR VREF Read Shmoo Attributes values+++++++++++++++");      FAPI_INF("CEN_RD_VREF[0]  = %d CEN_RD_VREF[1]  = %d on %s", l_rd_cen_vref_nom[0],l_rd_cen_vref_nom[1], i_target_mba.toEcmdString()); -    FAPI_INF("CEN_RD_VREF_SCHMOO[0] = [%d], CEN_RD_VREF_SCHMOO[1] = [%d] on %s", l_rd_cen_vref_schmoo[0], l_rd_cen_vref_schmoo[1],i_target_mba.toEcmdString()); +    FAPI_INF("CEN_RD_VREF_SCHMOO[0] = [%x], CEN_RD_VREF_SCHMOO[1] = [%x] on %s", l_rd_cen_vref_schmoo[0], l_rd_cen_vref_schmoo[1],i_target_mba.toEcmdString());      FAPI_INF("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");      if(l_rd_cen_vref_schmoo[i_port] == 0) @@ -787,10 +818,17 @@ fapi::ReturnCode rd_vref_shmoo(const fapi::Target & i_target_mba,  		rc = config_rd_cen_vref(i_target_mba, i_port, l_rd_cen_vref[i_port]); if (rc) return rc;  		l_rd_cen_vref_in = l_rd_cen_vref[i_port];  		//FAPI_INF(" Calling Shmoo function to find out Timing Margin:"); -		rc = delay_shmoo(i_target_mba, i_port, i_shmoo_type_valid, &l_left_margin, &l_right_margin,i_pattern,i_test_type, l_rd_cen_vref_in); +		if (shmoo_param_count)  +		{ +			rc = set_attribute(i_target_mba); +                	if (rc) return rc; +		} +		rc = delay_shmoo(i_target_mba, i_port, i_shmoo_type_valid, &l_left_margin, &l_right_margin, l_rd_cen_vref_in);  		if (rc) return rc;  		l_left_margin_rd_vref_array[index]= l_left_margin;  	        l_right_margin_rd_vref_array[index]= l_right_margin; +		 shmoo_param_count++; +		 FAPI_INF("Read Vref = %d ; Min Setup time = %d; Min Hold time = %d", rd_cen_vref_array[index],l_left_margin_rd_vref_array[index],  l_right_margin_rd_vref_array[index]);   	    }  	    else  	    { @@ -798,6 +836,7 @@ fapi::ReturnCode rd_vref_shmoo(const fapi::Target & i_target_mba,  	        l_right_margin_rd_vref_array[index]= 0;  	    }     	    l_rd_cen_vref_schmoo[i_port] = (l_rd_cen_vref_schmoo[i_port] >> 1); +   	    /* FAPI_INF("Read Vref = %d ; Min Setup time = %d; Min Hold time = %d", rd_cen_vref_array[index],l_left_margin_rd_vref_array[index],  l_right_margin_rd_vref_array[index]);  */  	}  	l_rd_cen_vref_nom_fc = l_rd_cen_vref_nom[i_port];  	find_best_margin(RD_VREF, l_left_margin_rd_vref_array, @@ -812,7 +851,7 @@ fapi::ReturnCode rd_vref_shmoo(const fapi::Target & i_target_mba,  	else  	{ -	    if(i_port == 0) +	 /* if(i_port == 0)  	    {  	        l_rd_cen_vref_new[0] = rd_cen_vref_array_fitness[count];                  l_rd_cen_vref_new[1] = l_rd_cen_vref_nom[1]; @@ -833,12 +872,17 @@ fapi::ReturnCode rd_vref_shmoo(const fapi::Target & i_target_mba,                  //if (rc) return rc;  	    }  	    else -	    { -	        FAPI_INF("Nominal value will not be changed!- Restoring the original values!");	 +	    {*/ +	       // FAPI_INF("Nominal value will not be changed!- Restoring the original values!");	 +	        FAPI_INF("Restoring Nominal values!");	 +	        rc = FAPI_ATTR_SET(ATTR_EFF_CEN_RD_VREF, &i_target_mba, l_rd_cen_vref_nom);  +	        if (rc) return rc;  	        rc = config_rd_cen_vref(i_target_mba, i_port, l_rd_cen_vref_nom[i_port]);                   if (rc) return rc; -	    } +	   // }  	} +    FAPI_INF("Restoring mcbist setup attribute..."); +	rc = reset_attribute(i_target_mba); if (rc) return rc;      FAPI_INF("++++ Centaur Read Vref Shmoo function executed successfully ++++");      }  return rc; @@ -855,19 +899,18 @@ return rc;  //------------------------------------------------------------------------------  fapi::ReturnCode rcv_imp_shmoo(const fapi::Target & i_target_mba,  			 uint8_t i_port, -			 shmoo_type_t i_shmoo_type_valid, -			 uint8_t i_pattern, -			 uint8_t i_test_type) +			 shmoo_type_t i_shmoo_type_valid)  {      fapi::ReturnCode rc;      uint8_t l_rcv_imp_dq_dqs[MAX_PORT] = {0};      uint8_t l_rcv_imp_dq_dqs_nom[MAX_PORT] = {0};      uint8_t l_rcv_imp_dq_dqs_nom_fc = 0;      uint8_t l_rcv_imp_dq_dqs_in = 0; -    uint8_t l_rcv_imp_dq_dqs_new[MAX_PORT] = {0}; +    //uint8_t l_rcv_imp_dq_dqs_new[MAX_PORT] = {0};      uint32_t l_rcv_imp_dq_dqs_schmoo[MAX_PORT] = {0};      uint8_t index = 0;      uint8_t count  = 0; +    uint8_t shmoo_param_count = 0;      i_shmoo_type_valid = RD_EYE;   //Hard coded since no other shmoo is applicable - Temporary      uint32_t l_left_margin = 0; @@ -901,12 +944,18 @@ fapi::ReturnCode rcv_imp_shmoo(const fapi::Target & i_target_mba,  		FAPI_INF("Configuring Receiver impedance registers:");    	        rc = config_rcv_imp(i_target_mba, i_port, l_rcv_imp_dq_dqs[i_port]); if (rc) return rc;  		l_rcv_imp_dq_dqs_in = l_rcv_imp_dq_dqs[i_port]; -		FAPI_INF("Calling Shmoo function to find out timing margin:"); +		//FAPI_INF("Calling Shmoo function to find out timing margin:"); +		if (shmoo_param_count)  +		{ +			rc = set_attribute(i_target_mba); +  	                if (rc) return rc; +		}  	        rc = delay_shmoo(i_target_mba, i_port, i_shmoo_type_valid,  -			     &l_left_margin, &l_right_margin, i_pattern, i_test_type, l_rcv_imp_dq_dqs_in); +			     &l_left_margin, &l_right_margin, l_rcv_imp_dq_dqs_in);  	        if (rc) return rc;  		l_left_margin_rcv_imp_array[index]= l_left_margin;  	        l_right_margin_rcv_imp_array[index]= l_right_margin; +		 shmoo_param_count++;  	    }  	    else  	    { @@ -928,7 +977,7 @@ fapi::ReturnCode rcv_imp_shmoo(const fapi::Target & i_target_mba,  	else  	{ -	    if(i_port == 0) +	  /*  if(i_port == 0)  	    {  	        l_rcv_imp_dq_dqs_new[0] = rcv_imp_array[count];  	        l_rcv_imp_dq_dqs_new[1] = l_rcv_imp_dq_dqs_nom[1];  // This can be removed once the get/set attribute takes care of this @@ -937,23 +986,27 @@ fapi::ReturnCode rcv_imp_shmoo(const fapi::Target & i_target_mba,  	    {  	        l_rcv_imp_dq_dqs_new[1] = rcv_imp_array[count];  	        l_rcv_imp_dq_dqs_new[0] = l_rcv_imp_dq_dqs_nom[0]; -	    } -  -	    if (l_rcv_imp_dq_dqs_new[i_port] != l_rcv_imp_dq_dqs_nom[i_port]) -	    { +	    }*/ +	   // if (l_rcv_imp_dq_dqs_new[i_port] != l_rcv_imp_dq_dqs_nom[i_port]) +	   // {  	        //FAPI_INF("Better Margin found on %d on %s", l_rcv_imp_dq_dqs_new[i_port], i_target_mba.toEcmdString());  	        //rc = FAPI_ATTR_SET(ATTR_EFF_CEN_RCV_IMP_DQ_DQS, &i_target_mba, l_rcv_imp_dq_dqs_new);   	        //if (rc) return rc;  	        //rc = config_rcv_imp(i_target_mba, i_port, l_rcv_imp_dq_dqs_new[i_port]);  	        //if (rc) return rc; -	    } -	    else -	    { -	        FAPI_INF("Nominal value will not be changed!- Restoring the original values!");	 +	   // } +	   // else +	   // { +	     //   FAPI_INF("Nominal value will not be changed!- Restoring the original values!");	 +	        FAPI_INF("Restoring the nominal values!");	 +	        rc = FAPI_ATTR_SET(ATTR_EFF_CEN_RCV_IMP_DQ_DQS, &i_target_mba, l_rcv_imp_dq_dqs_nom);  +	        if (rc) return rc;  	        rc = config_rcv_imp(i_target_mba, i_port, l_rcv_imp_dq_dqs_nom[i_port]);                  if (rc) return rc; -	    } +	   // }  	} +    FAPI_INF("Restoring mcbist setup attribute..."); +	rc = reset_attribute(i_target_mba); if (rc) return rc;      FAPI_INF("++++ Receiver Impdeance Shmoo function executed successfully ++++");      }  return rc;   @@ -974,16 +1027,14 @@ fapi::ReturnCode delay_shmoo(const fapi::Target & i_target_mba, uint8_t i_port,  		       shmoo_type_t i_shmoo_type_valid,  		       uint32_t *o_left_margin,  		       uint32_t *o_right_margin, -		       uint8_t i_pattern, -		       uint8_t i_test_type,  		       uint32_t i_shmoo_param)  {      fapi::ReturnCode rc; -    FAPI_INF(" Inside the delay shmoo " ); +    //FAPI_INF(" Inside the delay shmoo " );      //Constructor CALL: generic_shmoo::generic_shmoo(uint8_t i_port, uint32_t shmoo_mask,shmoo_algorithm_t shmoo_algorithm)      //generic_shmoo mss_shmoo=generic_shmoo(i_port,2,SEQ_LIN);      generic_shmoo mss_shmoo=generic_shmoo(i_port,i_shmoo_type_valid,SEQ_LIN); -    rc = mss_shmoo.run(i_target_mba, o_left_margin, o_right_margin,i_pattern,i_test_type,i_shmoo_param); +    rc = mss_shmoo.run(i_target_mba, o_left_margin, o_right_margin,i_shmoo_param);      if(rc)      {          FAPI_ERR("Delay Schmoo Function is Failed rc = 0x%08X (creator = %d)", uint32_t(rc), rc.getCreator()); @@ -992,6 +1043,35 @@ fapi::ReturnCode delay_shmoo(const fapi::Target & i_target_mba, uint8_t i_port,  return rc;  } + +//------------------------------------------------------------------------------ +//Function name: set_attributes() +//Description: Sets the attribute used  by all functions +//------------------------------------------------------------------------------ + +fapi::ReturnCode set_attribute(const fapi::Target & i_target_mba) +{ +   fapi::ReturnCode rc; +   uint8_t l_mcbist_setup_multiple_set = 1;  //Hard coded it wont change +   FAPI_ATTR_SET(ATTR_SCHMOO_MULTIPLE_SETUP_CALL, &i_target_mba, l_mcbist_setup_multiple_set); +   if (rc) return rc; +   return rc; +} + +//------------------------------------------------------------------------------ +//Function name: reset_attributes() +//Description: Sets the attribute used  by all functions +//------------------------------------------------------------------------------ + +fapi::ReturnCode reset_attribute(const fapi::Target & i_target_mba) +{ +   fapi::ReturnCode rc; +   uint8_t l_mcbist_setup_multiple_reset = 0; //Hard coded it wont change +   FAPI_ATTR_SET(ATTR_SCHMOO_MULTIPLE_SETUP_CALL, &i_target_mba, l_mcbist_setup_multiple_reset); +   if (rc) return rc; +   return rc; +} +  //------------------------------------------------------------------------------  // Function name:find_best_margin()  // Finds better timing margin and returns the index @@ -1092,7 +1172,7 @@ void find_best_margin(shmoo_param i_shmoo_param_valid,  	    {   	        o_index = index2;  		//wont break this loop, since the purpose is to find the best parameter value & best timing margin The enum is constructed to do that -	      //  FAPI_INF("Best Value found on index %d,  Setup Margin: %d, Hold Margin: %d", o_index, i_left[index2], i_right[index2]); +	    //  FAPI_INF("Index value %d, Min Setup Margin: %d, Min Hold Margin: %d", o_index, i_left[index2], i_right[index2]);    	    }  	}      } diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_draminit_training_advanced.H b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_draminit_training_advanced.H index 706672cbd..1cae04c33 100755 --- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_draminit_training_advanced.H +++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_draminit_training_advanced.H @@ -5,7 +5,7 @@  /*                                                                        */  /* IBM CONFIDENTIAL                                                       */  /*                                                                        */ -/* COPYRIGHT International Business Machines Corp. 2012                   */ +/* COPYRIGHT International Business Machines Corp. 2012,2013              */  /*                                                                        */  /* p1                                                                     */  /*                                                                        */ @@ -20,7 +20,7 @@  /* Origin: 30                                                             */  /*                                                                        */  /* IBM_PROLOG_END_TAG                                                     */ -// $Id: mss_draminit_training_advanced.H,v 1.13 2012/12/06 11:13:42 lapietra Exp $ +// $Id: mss_draminit_training_advanced.H,v 1.16 2013/08/08 14:54:08 sasethur Exp $  /* File is created by SARAVANAN SETHURAMAN on Thur Sept 28 2011. */  //------------------------------------------------------------------------------ @@ -51,7 +51,9 @@  //  1.11   | 26-Oct-12 | sasethur | Updated fapi:: and const Target & for HB environment  //  1.12   | 15-Nov-12 | sasethur | Updated fw review comments  //  1.13   | 07-Dec-12 | sasethur | Updated for fw review in comment section - +//  1.14   | 10-May-13 | sasethur | Added user input for test type, pattern from wrapper +//  1.15   | 10-May-13 | sasethur | changed uint8_t to uint32_t for test type, pattern +//  1.16   | 08-Aug-13 | sasethur | Removed Pattern and testype  #ifndef _MSS_DRAMINIT_TRAINING_ADVANCED_H  #define _MSS_DRAMINIT_TRAINING_ADVANCED_H @@ -61,7 +63,7 @@  //----------------------------------------------------------------------  #include <fapi.H> -typedef fapi::ReturnCode (*mss_draminit_training_advanced_FP_t)(const fapi::Target &,uint8_t i_pattern,uint8_t i_test_type); +typedef fapi::ReturnCode (*mss_draminit_training_advanced_FP_t)(const fapi::Target &);  extern "C" @@ -75,7 +77,7 @@ extern "C"  * @return ReturnCode  */ -fapi::ReturnCode mss_draminit_training_advanced(const fapi::Target & i_target_mba,uint8_t i_pattern,uint8_t i_test_type); +fapi::ReturnCode mss_draminit_training_advanced(const fapi::Target & i_target_mba);  } // extern C diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_generic_shmoo.C b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_generic_shmoo.C index 83abd1f5a..028486e1c 100644 --- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_generic_shmoo.C +++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_generic_shmoo.C @@ -21,7 +21,7 @@  /*                                                                        */  /* IBM_PROLOG_END_TAG                                                     */ -// $Id: mss_generic_shmoo.C,v 1.45 2013/04/23 13:57:28 sasethur Exp $ +// $Id: mss_generic_shmoo.C,v 1.66 2013/08/12 10:07:23 sasethur Exp $  // *!***************************************************************************  // *! (C) Copyright International Business Machines Corp. 1997, 1998  // *!           All Rights Reserved -- Property of IBM @@ -33,19 +33,28 @@  // *! CONTEXT              : To make all shmoos share a common abstraction layer  // *!  // *! OWNER  NAME          : Abhijit Saurabh          Email: abhijit.saurabh@in.ibm.com -// *! BACKUP NAME          : preetham      	      Email: preeragh@in.ibm.com +// *! BACKUP NAME          : Sidhartha Vijay      	  Email: sidvijay@in.ibm.com  // *!  // *!***************************************************************************  // CHANGE HISTORY:  //------------------------------------------------------------------------------  // Version:|Author: | Date:   | Comment:  // --------|--------|---------|-------------------------------------------------- -//   1.44  |bellows |04/22/13 |  fixed fw comments   -//   1.43  |bellows |04/11/13 |  quick fix for firmware delivery.  Uninitialized varialbles: i_mcbtest, i_mcbpatt  -//   1.42  |abhijit |04/09/13 |  added shmoo param  -//   1.40  |abhijit |03/22/13 |  Fixed boundary checks   -//   1.38  |abhijit |03/19/13 |  included spare byte and ECC and fixed printing for RD_EYE  -//   1.36  |abhijit |03/19/13 |  changed mcbist call position    +//   1.65  |abhijit	|8-aug-13 | added binary schmoo first phase and modified training call  +//   1.64  |abhijit	|17-jul-13| added rd dqs phase 2  +//   1.63  |abhijit	|19-jun-13| fixed warnings in schmoo   +//   1.61  |abhijit	|11-jun-13| added read dqs and removed prints and single mcbist setup     +//   1.59  |abhijit	|26-may-13| removed unnecessary prints    +//   1.57  |abhijit	|21-may-13| fixed DQS report printing    +//   1.56  |abhijit	|14-may-13| Updated call to setup_mcbist   +//   1.55  |abhijit	|10-may-13| fixed firmware review comments   +//   1.51  |abhijit	|10-may-13| optimized write dqs schmoo  +//   1.49  |abhijit	|8-may-13 | Changed Write dqs reporting and optimized schmoo for running faster +//   1.48  |sauchadh|7-may-13 | Added ping pong for wr_dqs shmoo        +//   1.45  |abhijit |04/25/13 | added test type SIMPLE_FIX_RF and SHMOO_STRESS   +//   1.40  |abhijit |03/22/13 | Fixed boundary checks   +//   1.38  |abhijit |03/19/13 | included spare byte and ECC and fixed printing for RD_EYE  +//   1.36  |abhijit |03/19/13 | changed mcbist call position     //   1.35  |abhijit |03/16/13 | fixed clearing of error map regs for mba23    //   1.32  |abhijit |03/12/13 | new parallel schmoo under dev   //   1.27  |abhijit |01/21/13 | fixed ISDIMM mapping need some workaround  @@ -61,16 +70,19 @@  //   1.12  |abhijit |15-Nov-12| Fixed FW review comments  //   1.11  |abhijit |29-Oct-12| added change for ISDIMM checker DQS.  //   1.9   |abhijit |22-Oct-12| added Write and read DQS.   -//   1.8   |abhijit |15-Oct-12|Updated multiple changes  -//   1.0   |varkeykv|27-Sep-11|Initial check in +//   1.8   |abhijit |15-Oct-12| Updated multiple changes  +//   1.0   |varkeykv|27-Sep-11| Initial check in  //------------------------------------------------------------------------------  #include <fapi.H>  #include "mss_generic_shmoo.H"  #include "mss_mcbist.H" +#include <mss_draminit_training.H> +// #include <mss_funcs.H> +// #include <mss_unmask_errors.H>  #include <dimmBadDqBitmapFuncs.H>  #include <mss_access_delay_reg.H> - +//#define DBG 0  extern "C"  { @@ -82,7 +94,7 @@ using namespace fapi;   * constructor: generic_shmoo   * Description  :Constructor used to initialize variables and do the initial settings    * - * Parameters: i_target: mba; 	iv_port: 0, 1 + * Parameters: i_target: mba;		iv_port: 0, 1   * ---------------------------------------------------------------------------*/  generic_shmoo:: generic_shmoo(uint8_t addr,shmoo_type_t shmoo_mask,shmoo_algorithm_t shmoo_algorithm)  { @@ -97,8 +109,10 @@ generic_shmoo:: generic_shmoo(uint8_t addr,shmoo_type_t shmoo_mask,shmoo_algorit      iv_pattern=0;      iv_test_type=0;      iv_dmm_type=0; -	iv_shmoo_param=0; -     +    iv_shmoo_param=0; +	iv_binary_diff=2; +	iv_vref_mul=0; +	  	for(int p=0;p<MAX_PORT;++p)      {      for(int i=0;i<iv_MAX_RANKS[p];++i) @@ -120,7 +134,7 @@ generic_shmoo:: generic_shmoo(uint8_t addr,shmoo_type_t shmoo_mask,shmoo_algorit  	if(shmoo_mask & TEST_NONE)      { -        FAPI_DBG("mss_generic_shmoo : WR_EYE selected %d",shmoo_mask); +        FAPI_INF("mss_generic_shmoo : NONE selected %d",shmoo_mask);          iv_shmoo_type = 0;          SHMOO[0].static_knob.min_val=0;          SHMOO[0].static_knob.max_val=512;    @@ -128,23 +142,23 @@ generic_shmoo:: generic_shmoo(uint8_t addr,shmoo_type_t shmoo_mask,shmoo_algorit      if(shmoo_mask & WR_EYE)      { -        FAPI_DBG("mss_generic_shmoo : WR_EYE selected %d",shmoo_mask); -        iv_shmoo_type = 0; +        FAPI_INF("mss_generic_shmoo : WR_EYE selected %d",shmoo_mask); +        iv_shmoo_type = 2;          SHMOO[0].static_knob.min_val=0;          SHMOO[0].static_knob.max_val=512;         }      if(shmoo_mask & RD_EYE)      { -        FAPI_DBG("mss_generic_shmoo : RD_EYE selected %d",shmoo_mask); -        iv_shmoo_type = 2; +        FAPI_INF("mss_generic_shmoo : RD_EYE selected %d",shmoo_mask); +        iv_shmoo_type = 8;          SHMOO[2].static_knob.min_val=2;          SHMOO[2].static_knob.max_val=128;      }       if(shmoo_mask & WRT_DQS) //preet      { -        FAPI_DBG("mss_generic_shmoo : WRT_DQS selected %d",shmoo_mask); -        iv_shmoo_type = 1; +        FAPI_INF("mss_generic_shmoo : WRT_DQS selected %d",shmoo_mask); +        iv_shmoo_type = 4;  		iv_DQS_ON = 1;          SHMOO[1].static_knob.min_val=0;          SHMOO[1].static_knob.max_val=512; @@ -152,68 +166,174 @@ generic_shmoo:: generic_shmoo(uint8_t addr,shmoo_type_t shmoo_mask,shmoo_algorit      if(shmoo_mask & RD_GATE) //preet      { -        FAPI_DBG("mss_generic_shmoo : RD_EYE selected %d",shmoo_mask); +        FAPI_INF("mss_generic_shmoo : RD_GATE selected %d",shmoo_mask); -        iv_shmoo_type = 3; -	iv_DQS_ON = 1; +        iv_shmoo_type = 16; +	iv_DQS_ON = 2;          SHMOO[3].static_knob.min_val=2;          SHMOO[3].static_knob.max_val=128;      } +	if(iv_DQS_ON==1){  	for(int i=0;i<MAX_PORT;++i)      {      for(int j=0;j<iv_MAX_RANKS[i];++j)      {          init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.nom_val,0); +		init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.right_err_cnt,0); +		init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.left_err_cnt,0);          init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.lb_regval,SHMOO[iv_shmoo_type].static_knob.min_val);          init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.rb_regval,SHMOO[iv_shmoo_type].static_knob.max_val); +		init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.lb_regval,20); +        init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.rb_regval,300);          init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.total_margin,0);          init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.right_margin_val,0);          init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.left_margin_val,0);      } -	} +	}}else{ +	// for(int i=0;i<MAX_PORT;++i) +    // { -	if(iv_DQS_ON == 1) -	{	for(int i=0;i<MAX_PORT;++i) -		{ -		for(int j=0;j<iv_MAX_RANKS[i];++j) //initialize values for DQS -        { -            init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.nom_val,0); -            init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.lb_regval,SHMOO[iv_shmoo_type].static_knob.min_val); -            init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.rb_regval,SHMOO[iv_shmoo_type].static_knob.max_val); -            init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.total_margin,0); -	    init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.right_margin_val,0); -	    init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.left_margin_val,0); -        } +	// init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[0].K.cmd_nom_val,0); +	// init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[0].K.offset,0); +	// init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[0].K.addr_nom_val,0); +	// init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[0].K.cntrl_nom_val,0); +		 +         +		// init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[0].K.cmd_lb_regval,20); +        // init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[0].K.cmd_rb_regval,300); +        // init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[0].K.cmd_total_margin,0); +        // init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[0].K.cmd_right_margin_val,0); +        // init_multi_array(SHMOO[iv_shmoo_type].MBA.P[i].S[0].K.cmd_left_margin_val,0); +		// } +	} +	// if(iv_DQS_ON == 1) +	// {	for(int i=0;i<MAX_PORT;++i) +		// { +		// for(int j=0;j<iv_MAX_RANKS[i];++j) //initialize values for DQS +        // { +            // init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.nom_val,0); +            // // init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.lb_regval,SHMOO[iv_shmoo_type].static_knob.min_val); +            // // init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.rb_regval,SHMOO[iv_shmoo_type].static_knob.max_val); +			// init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.lb_regval,20); +            // init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.rb_regval,300); +            // init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.total_margin,0); +	    // init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.right_margin_val,0); +	    // init_multi_array_dqs(SHMOO[iv_shmoo_type].MBA.P[i].S[j].K.left_margin_val,0); +        // } +		// } +	// } +} + +fapi::ReturnCode generic_shmoo::shmoo_save_rest(const fapi::Target & i_target,uint64_t i_content_array[],uint8_t i_mode) +{ +    ReturnCode rc; +	uint32_t rc_num; +	uint8_t l_index = 0; +	uint64_t l_value = 0; +	uint64_t l_val_u64 = 0; +	ecmdDataBufferBase l_shmoo1ab(64);	 +	uint64_t l_Databitdir[10] = {0x800000030301143full,0x800004030301143full,0x800008030301143full,0x80000c030301143full,0x800010030301143full,0x800100030301143full,0x800104030301143full, +	0x800108030301143full,0x80010c030301143full,0x800110030301143full}; +	if(i_mode == 0) +	{ +		FAPI_INF(" Saving DP18 data bit direction register contents"); +		for(l_index = 0;l_index<9;l_index++) +		{ 	 +			l_value = l_Databitdir[l_index]; +			rc = fapiGetScom(i_target,l_value,l_shmoo1ab); if(rc) return rc; +			rc_num =  l_shmoo1ab.setBit(57); +			rc = fapiPutScom(i_target,l_value,l_shmoo1ab); if(rc) return rc;	 +			i_content_array[l_index] = l_shmoo1ab.getDoubleWord (0); +			 +			  		}  	} +	 +	else if(i_mode == 1) +	{ +		FAPI_INF(" Restoring DP18 data bit direction register contents");	 +		for(l_index = 0;l_index<9;l_index++) +		{ 	 +			l_val_u64 = i_content_array[l_index]; +			l_value = l_Databitdir[l_index]; +			rc_num  =  l_shmoo1ab.setDoubleWord(0,l_val_u64);if (rc_num){FAPI_ERR( "Error in function  shmoo_save_rest:");rc.setEcmdError(rc_num);return rc;}  +			rc = fapiPutScom(i_target,l_value,l_shmoo1ab); if(rc) return rc;				 +		}	 +	} +	else +	{ +		FAPI_INF("Invalid value of MODE"); +	} +	return rc; +  } + + + + +  /*------------------------------------------------------------------------------   * Function: run   * Description  : ! Delegator function that runs shmoo using other  functions   *   * Parameters: i_target: mba;		iv_port: 0, 1   * ---------------------------------------------------------------------------*/ -fapi::ReturnCode generic_shmoo::run(const fapi::Target & i_target,uint32_t *o_right_min_margin,uint32_t *o_left_min_margin,uint8_t i_pattern,uint8_t i_test_type,uint32_t i_shmoo_param){ +fapi::ReturnCode generic_shmoo::run(const fapi::Target & i_target,uint32_t *o_right_min_margin,uint32_t *o_left_min_margin,uint32_t i_vref_mul){      fapi::ReturnCode rc;        uint8_t num_ranks_per_dimm[2][2];      uint8_t l_attr_eff_dimm_type_u8=0; -	uint8_t l_attr_schmoo_test_type_u8=0; +    uint8_t l_attr_schmoo_test_type_u8=0; +	uint8_t l_attr_schmoo_multiple_setup_call_u8=0; +	uint8_t l_mcbist_prnt_off = 0; +	 +	  +    uint64_t i_content_array[10]; +    uint8_t l_rankpgrp0[2]={0}; +    uint8_t l_rankpgrp1[2]={0}; +    uint8_t l_rankpgrp2[2]={0}; +    uint8_t l_rankpgrp3[2]={0}; +    uint8_t l_totrg_0=0; +    uint8_t l_totrg_1=0; +    uint8_t l_pp=0; +	uint8_t pass=0; +	uint8_t l_shmoo_param=0; +     +	rc = FAPI_ATTR_GET(ATTR_EFF_SCHMOO_MODE, &i_target, l_shmoo_param); if(rc) return rc;      //uint8_t l_val=2; -	iv_shmoo_param=i_shmoo_param; +	iv_shmoo_param=l_shmoo_param; +	iv_vref_mul=i_vref_mul;      ecmdDataBufferBase l_data_buffer1_64(64); +    uint8_t l_dram_width=0; +    rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_WIDTH, &i_target, l_dram_width); if(rc) return rc; +    rc = FAPI_ATTR_SET(ATTR_MCBIST_PRINTING_DISABLE, &i_target, l_mcbist_prnt_off); if(rc) return rc;      rc = FAPI_ATTR_GET(ATTR_EFF_NUM_RANKS_PER_DIMM, &i_target, num_ranks_per_dimm); if(rc) return rc;      rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_TYPE, &i_target, l_attr_eff_dimm_type_u8); if(rc) return rc;  -    rc = FAPI_ATTR_GET(ATTR_EFF_SCHMOO_TEST_VALID, &i_target, l_attr_schmoo_test_type_u8); if(rc) return rc;  -	 +    rc = FAPI_ATTR_GET(ATTR_EFF_SCHMOO_TEST_VALID, &i_target, l_attr_schmoo_test_type_u8); if(rc) return rc; +	rc = FAPI_ATTR_GET(ATTR_SCHMOO_MULTIPLE_SETUP_CALL, &i_target, l_attr_schmoo_multiple_setup_call_u8); if(rc) return rc; +     +     +    rc = FAPI_ATTR_GET(ATTR_EFF_PRIMARY_RANK_GROUP0, &i_target, l_rankpgrp0);if(rc) return rc; +    	 +    rc = FAPI_ATTR_GET(ATTR_EFF_PRIMARY_RANK_GROUP1, &i_target, l_rankpgrp1);if(rc) return rc; +      +    rc = FAPI_ATTR_GET(ATTR_EFF_PRIMARY_RANK_GROUP2, &i_target, l_rankpgrp2);if(rc) return rc; +     +    rc = FAPI_ATTR_GET(ATTR_EFF_PRIMARY_RANK_GROUP3, &i_target, l_rankpgrp3);if(rc) return rc; +     +     +          iv_MAX_RANKS[0]=num_ranks_per_dimm[0][0]+num_ranks_per_dimm[0][1]; -	iv_MAX_RANKS[1]=num_ranks_per_dimm[1][0]+num_ranks_per_dimm[1][1]; +    iv_MAX_RANKS[1]=num_ranks_per_dimm[1][0]+num_ranks_per_dimm[1][1]; -    iv_pattern=i_pattern; -    iv_test_type=i_test_type; +    iv_pattern=0; +    iv_test_type=0; +     +     +          if ( l_attr_eff_dimm_type_u8 == 0 )      { @@ -240,7 +360,138 @@ fapi::ReturnCode generic_shmoo::run(const fapi::Target & i_target,uint32_t *o_ri      FAPI_ERR("generic_shmoo::run MSS Generic Shmoo failed initial Sanity Check. Memory not in an all pass Condition");      return rc;       } +	}else if(l_attr_schmoo_test_type_u8 == 4){ +	 if(l_rankpgrp0[0] !=255) +    { +    l_totrg_0++; +    } +    if(l_rankpgrp1[0] !=255) +    { +    l_totrg_0++; +    } +    if(l_rankpgrp2[0] !=255) +    { +    l_totrg_0++; +    } +    if(l_rankpgrp3[0] !=255) +    { +    l_totrg_0++; +    } +     +     if(l_rankpgrp0[1] !=255) +    { +    l_totrg_1++; +    } +    if(l_rankpgrp1[1] !=255) +    { +    l_totrg_1++; +    } +    if(l_rankpgrp2[1] !=255) +    { +    l_totrg_1++; +    } +    if(l_rankpgrp3[1] !=255) +    { +    l_totrg_1++; +    } +   if((l_totrg_0==1) || (l_totrg_1 ==1 )) +    { +    shmoo_save_rest(i_target,i_content_array,0); +    l_pp=1; +    } +     +    if(l_pp==1) +    { +    FAPI_INF("Ping pong is disabled"); +    } +    else +    { +    FAPI_INF("Ping pong is enabled");	 +    } +     +    if((l_pp=1) && ((l_totrg_0==1) || (l_totrg_1 ==1 ))) +    { +	FAPI_INF("Rank group is not good with ping pong. Hope you have set W2W gap to 10"); +    } +     +	 +	iv_shmoo_type=4; +	//FAPI_INF("\n ABHIJIT IS HERE 1111  \n"); +	rc=get_all_noms_dqs(i_target);if(rc) return rc; +	iv_shmoo_type=2; +	//FAPI_INF("\n ABHIJIT IS HERE 2222  \n"); +	rc=get_all_noms(i_target);if(rc) return rc; +	rc=schmoo_setup_mcb(i_target);if(rc) return rc; +    //Find RIGHT BOUND OR SETUP BOUND +    rc=find_bound(i_target,RIGHT);if(rc) return rc; +	//FAPI_INF("\n ABHIJIT IS HERE 3333  \n"); +    //Find LEFT BOUND OR HOLD BOUND +    rc=find_bound(i_target,LEFT);if(rc) return rc; +	iv_shmoo_type=4; +	 +	if(l_dram_width == 4 ){ +	rc=get_margin_dqs_by4(i_target);if(rc) return rc; +	}else{ +	//FAPI_INF("\n ABHIJIT IS HERE 222  \n"); +	rc=get_margin_dqs_by8(i_target);if(rc) return rc; +	} +	//FAPI_INF("\n before the call \n"); +	rc=print_report_dqs(i_target);if(rc) return rc; +	rc=get_min_margin_dqs(i_target,o_right_min_margin,o_left_min_margin);if(rc) return rc; +	 +    if((l_totrg_0==1) || (l_totrg_1 ==1 )) +    { +    shmoo_save_rest(i_target,i_content_array,1); +    }  +	 +	 +	 +	 +	}else if(l_attr_schmoo_test_type_u8 == 16){ +	 +	if(iv_shmoo_param==2){ +	rc=get_all_noms_data_disable(i_target);if(rc) return rc; +	rc=get_all_noms_gate(i_target);if(rc) return rc; +	 +	rc=knob_update_gate_train(i_target,RIGHT,iv_shmoo_type,pass); if(rc) return rc;  +	} +	iv_DQS_ON=1; +	rc=schmoo_setup_mcb(i_target);if(rc) return rc; +	rc=do_mcbist_test(i_target); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); +		    return rc; +		} +	iv_DQS_ON=2; +	 +	rc=schmoo_setup_mcb(i_target);if(rc) return rc; +	rc=do_mcbist_test(i_target); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); +		    return rc; +		} +		//sanity check  +	rc=mcb_error_map(i_target,mcbist_error_map); +    if(rc) +    { +        FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!");  +			 +        return rc; +    } +	 +	 +	rc=get_all_noms_gate(i_target);if(rc) return rc;  +	if(iv_shmoo_param==2){ +	rc=find_bound(i_target,LEFT);if(rc) return rc; +	rc=put_all_noms_data_disable(i_target,0);if(rc) return rc;  	}else{ +	rc=find_bound(i_target,RIGHT);if(rc) return rc; +	} +	rc=print_report_gate(i_target);if(rc) return rc; +	 +	} else {  	// rc=sanity_check(i_target); // Run MCBIST by  default before for every schmoo to check if memory is in good condition.       // if(!rc.ok())      // { @@ -250,10 +501,16 @@ fapi::ReturnCode generic_shmoo::run(const fapi::Target & i_target,uint32_t *o_ri      // If memory is OK then we continue to gather nominals and config values      //  Now Read nominal values for all knobs configured      // FAPI_DBG("mss_generic_shmoo : run() :read nominal values "); +	 +	      rc=get_all_noms(i_target);if(rc) return rc; +	if(l_attr_schmoo_multiple_setup_call_u8==0){  	rc=schmoo_setup_mcb(i_target);if(rc) return rc; +	} +	rc=set_all_binary(i_target,RIGHT);if(rc) return rc;      //Find RIGHT BOUND OR SETUP BOUND      rc=find_bound(i_target,RIGHT);if(rc) return rc; +	rc=set_all_binary(i_target,LEFT);if(rc) return rc;      //Find LEFT BOUND OR HOLD BOUND      rc=find_bound(i_target,LEFT);if(rc) return rc;      //Find the margins in Ps i.e setup margin ,hold margin,Eye width  @@ -262,7 +519,10 @@ fapi::ReturnCode generic_shmoo::run(const fapi::Target & i_target,uint32_t *o_ri      rc=get_min_margin(i_target,o_right_min_margin,o_left_min_margin);if(rc) return rc;      // It is used to print the schmoo report      rc=print_report(i_target);if(rc) return rc; +    //shmoo_save_rest(i_target,i_content_array,1);  	} +	l_mcbist_prnt_off=0; +	rc = FAPI_ATTR_SET(ATTR_MCBIST_PRINTING_DISABLE, &i_target, l_mcbist_prnt_off); if(rc) return rc;      return rc;  }  /*------------------------------------------------------------------------------ @@ -274,11 +534,11 @@ fapi::ReturnCode generic_shmoo::run(const fapi::Target & i_target,uint32_t *o_ri  fapi::ReturnCode generic_shmoo::sanity_check(const fapi::Target & i_target){      fapi:: ReturnCode rc;      mcbist_mode=QUARTER_SLOW; -    uint8_t l_mcb_status=0; -    uint64_t l_time = 0x0000000000000000ull; +    //uint64_t l_time = 0x0000000000000000ull;      uint8_t l_rank_valid = 0; -     +    uint8_t l_mcb_status=0; +	struct Subtest_info l_sub_info[30];  	FAPI_INF("  entering set_up mcbist now and rank %d",l_rank_valid); @@ -287,9 +547,15 @@ fapi::ReturnCode generic_shmoo::sanity_check(const fapi::Target & i_target){  	FAPI_INF("  starting  mcbist now");  	rc=start_mcb(i_target);if(rc) return rc;  	FAPI_INF("  polling   mcbist now"); -	rc=poll_mcb(i_target,false,&l_mcb_status,l_time);if(rc) return rc; +	rc=poll_mcb(i_target,0,&l_mcb_status,l_sub_info,1); +    if(rc) +    { +        FAPI_ERR("generic_shmoo::do_mcbist_test: POLL MCBIST failed !!");   +			 +        return rc; +    }  	FAPI_INF("  checking error map "); -	rc=mcb_error_map(i_target,mcbist_error_map,0,l_rank_valid);if(rc) return rc; +	rc=mcb_error_map(i_target,mcbist_error_map);if(rc) return rc;      if(l_mcb_status) @@ -302,17 +568,17 @@ fapi::ReturnCode generic_shmoo::sanity_check(const fapi::Target & i_target){      return rc;  }  /*------------------------------------------------------------------------------ - * Function: do_mcbist_test - * Description  : do mcbist check for error on particular nibble + * Function: do_mcbist_reset + * Description  : do mcbist reset   *   * Parameters: i_target: mba,iv_port 0/1 , rank 0-7 , byte 0-7, nibble 0/1, pass;	   * ---------------------------------------------------------------------------*/ -fapi::ReturnCode generic_shmoo::do_mcbist_test(const fapi::Target & i_target) +fapi::ReturnCode generic_shmoo::do_mcbist_reset(const fapi::Target & i_target)  {  	fapi::ReturnCode rc; -    uint64_t l_time = 0x0000000000000000ull; +      	uint32_t rc_num =0; -	uint8_t l_mcb_status=0; +	  	ecmdDataBufferBase l_data_buffer_64(64);   	rc_num =  l_data_buffer_64.flushTo0();if (rc_num){FAPI_ERR( "Error in function  mcb_reset_trap:");rc.setEcmdError(rc_num);return rc;}      //PORT - A @@ -335,6 +601,53 @@ fapi::ReturnCode generic_shmoo::do_mcbist_test(const fapi::Target & i_target)      rc = fapiPutScom(i_target,0x0201176e,l_data_buffer_64); if(rc) return(rc);      rc = fapiPutScom(i_target,0x0201176f,l_data_buffer_64); if(rc) return(rc); +	// rc = fapiPutScom(i_target,MBS_MCBIST01_MCB_ERRCNTA1Q_0x02011664,l_data_buffer_64); if(rc) return(rc); +    // rc = fapiPutScom(i_target,MBS_MCBIST01_MCB_ERRCNTA2Q_0x02011665,l_data_buffer_64); if(rc) return(rc); +    // rc = fapiPutScom(i_target,MBS_MCBIST01_MCB_ERRCNTB1Q_0x02011667,l_data_buffer_64); if(rc) return(rc); +	// rc = fapiPutScom(i_target,MBS_MCBIST01_MCB_ERRCNTB2Q_0x02011668,l_data_buffer_64); if(rc) return(rc); +	 +   return rc; +} +/*------------------------------------------------------------------------------ + * Function: do_mcbist_test + * Description  : do mcbist check for error on particular nibble + * + * Parameters: i_target: mba,iv_port 0/1 , rank 0-7 , byte 0-7, nibble 0/1, pass;	 + * ---------------------------------------------------------------------------*/ +fapi::ReturnCode generic_shmoo::do_mcbist_test(const fapi::Target & i_target) +{ +	fapi::ReturnCode rc; +     +	//uint32_t rc_num =0; +	uint8_t l_mcb_status=0; +	struct Subtest_info l_sub_info[30]; +	//ecmdDataBufferBase l_data_buffer_64(64);  +	//rc_num =  l_data_buffer_64.flushTo0();if (rc_num){FAPI_ERR( "Error in function  mcb_reset_trap:");rc.setEcmdError(rc_num);return rc;} +    //PORT - A +    // rc = fapiPutScom(i_target,MBS_MCBIST01_MCBEMA1Q_0x0201166a,l_data_buffer_64); if(rc) return(rc); +    // rc = fapiPutScom(i_target,MBS_MCBIST01_MCBEMA2Q_0x0201166b,l_data_buffer_64); if(rc) return(rc); +    // rc = fapiPutScom(i_target,MBS_MCBIST01_MCBEMA3Q_0x0201166c,l_data_buffer_64); if(rc) return(rc); + +    // //PORT - B +    // rc = fapiPutScom(i_target,MBS_MCBIST01_MCBEMB1Q_0x0201166d,l_data_buffer_64); if(rc) return(rc); +    // rc = fapiPutScom(i_target,MBS_MCBIST01_MCBEMB2Q_0x0201166e,l_data_buffer_64); if(rc) return(rc); +    // rc = fapiPutScom(i_target,MBS_MCBIST01_MCBEMB3Q_0x0201166f,l_data_buffer_64); if(rc) return(rc); +	 +	// // MBS 23 +	// rc = fapiPutScom(i_target,0x0201176a,l_data_buffer_64); if(rc) return(rc); +    // rc = fapiPutScom(i_target,0x0201176b,l_data_buffer_64); if(rc) return(rc); +    // rc = fapiPutScom(i_target,0x0201176c,l_data_buffer_64); if(rc) return(rc); + +    // //PORT - B +    // rc = fapiPutScom(i_target,0x0201176d,l_data_buffer_64); if(rc) return(rc); +    // rc = fapiPutScom(i_target,0x0201176e,l_data_buffer_64); if(rc) return(rc); +    // rc = fapiPutScom(i_target,0x0201176f,l_data_buffer_64); if(rc) return(rc); +	 +	// rc = fapiPutScom(i_target,MBS_MCBIST01_MCB_ERRCNTA1Q_0x02011664,l_data_buffer_64); if(rc) return(rc); +    // rc = fapiPutScom(i_target,MBS_MCBIST01_MCB_ERRCNTA2Q_0x02011665,l_data_buffer_64); if(rc) return(rc); +    // rc = fapiPutScom(i_target,MBS_MCBIST01_MCB_ERRCNTB1Q_0x02011667,l_data_buffer_64); if(rc) return(rc); +	// rc = fapiPutScom(i_target,MBS_MCBIST01_MCB_ERRCNTB2Q_0x02011668,l_data_buffer_64); if(rc) return(rc); +	     rc = start_mcb(i_target);      if(rc)      { @@ -342,7 +655,8 @@ fapi::ReturnCode generic_shmoo::do_mcbist_test(const fapi::Target & i_target)          return rc;      } -    rc=poll_mcb(i_target,false,&l_mcb_status,l_time); +    //rc=poll_mcb(i_target,false,&l_mcb_status); +	rc=poll_mcb(i_target,0,&l_mcb_status,l_sub_info,1);      if(rc)      {          FAPI_ERR("generic_shmoo::do_mcbist_test: POLL MCBIST failed !!");   @@ -392,19 +706,19 @@ fapi::ReturnCode generic_shmoo::check_error_map(const fapi::Target & i_target,ui          // return rc;      // } -	   -    for (l_p=0;l_p<MAX_PORT;l_p++){ -	for (l_rnk=0;l_rnk<iv_MAX_RANKS[l_p];++l_rnk) -    {// Byte loop -	rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc; -		rank=valid_rank[l_rnk]; -	rc=mcb_error_map(i_target,mcbist_error_map,port,rank); +	 rc=mcb_error_map(i_target,mcbist_error_map);      if(rc)      {          FAPI_ERR("generic_shmoo::do_mcbist_test: mcb_error_map failed!!");           return rc;      } +    for (l_p=0;l_p<MAX_PORT;l_p++){ +	for (l_rnk=0;l_rnk<iv_MAX_RANKS[l_p];++l_rnk) +    {// Byte loop +	rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[l_rnk]; +	  	l_n=0;  	for(l_byte=0;l_byte<l_max_byte;++l_byte)  		{	 @@ -439,7 +753,9 @@ fapi::ReturnCode generic_shmoo::check_error_map(const fapi::Target & i_target,ui      }      else      { -		//schmoo_error_map[l_p][rank][l_n]=0; +		if(iv_shmoo_param==4){ +		schmoo_error_map[l_p][rank][l_n]=0; +		}          //pass=0;          //FAPI_INF("We are in error2");      } @@ -454,6 +770,9 @@ fapi::ReturnCode generic_shmoo::check_error_map(const fapi::Target & i_target,ui      }      else      { +	if(iv_shmoo_param==4){ +		schmoo_error_map[l_p][rank][l_n]=0; +		}  		//schmoo_error_map[l_p][rank][l_n]=0;          //pass=0;          //FAPI_INF("We are in error2"); @@ -480,6 +799,85 @@ fapi::ReturnCode generic_shmoo::check_error_map(const fapi::Target & i_target,ui  	 }      return rc;  } +//////////////// will implement later ///////////////////// +/* +fapi::ReturnCode generic_shmoo::get_error_cnt(const fapi::Target & i_target,uint8_t port,uint8_t rank,uint8_t rank_pair,uint8_t bit,bound_t bound) +{ +fapi::ReturnCode rc; +uint8_t l_nibble=0; +uint8_t l_start_bit=0; +uint16_t l_err_cnt_C=0; +uint8_t rc_ecmd=0; +uint8_t l_length_buffer=7; +uint8_t l_val=0; + + +input_type l_input_type_e =  ISDIMM_DQ; +ecmdDataBufferBase data_buffer_64(64); +ecmdDataBufferBase data_buffer_64_1(64); + +if(iv_dmm_type==1) +    { +	 +	//FAPI_INF("\n ISDIMM input byte=%d and nibble=%d and bit returned is %d \n",l_byte,l_nibble,l_val); +	rc=rosetta_map(i_target,port,l_input_type_e,bit,0,l_val);if(rc) return rc; +	//FAPI_INF("\n ISDIMM input byte=%d and nibble=%d and bit returned is %d \n",l_byte,l_nibble,l_val); +	l_nibble=l_val/4; +	 +	}else{ +	 +l_nibble=bit/4; +} + +if(port==0) +				{ +				    if(l_nibble<9) +				    { +					rc = fapiGetScom(i_target,MBS_MCBIST01_MCB_ERRCNTA1Q_0x02011664,data_buffer_64); if(rc) return rc; +					l_start_bit=l_nibble*7; +					rc_ecmd=data_buffer_64.extractToRight(&l_err_cnt_C,l_start_bit,l_length_buffer);if (rc_ecmd){ rc.setEcmdError(rc_ecmd); return rc;} +				    } +				    else +				    { +					rc = fapiGetScom(i_target,MBS_MCBIST01_MCB_ERRCNTA2Q_0x02011665,data_buffer_64); if(rc) return rc; +					l_nibble=l_nibble-9; +					l_start_bit=l_nibble*7; +					rc_ecmd=data_buffer_64.extractToRight(&l_err_cnt_C,l_start_bit,l_length_buffer);if (rc_ecmd){ rc.setEcmdError(rc_ecmd); return rc;} +				    } +				}else +				{ +				    if(l_nibble<9) +				    { +					rc = fapiGetScom(i_target,MBS_MCBIST01_MCB_ERRCNTB1Q_0x02011667,data_buffer_64_1); if(rc) return rc; +					l_start_bit=l_nibble*7; +					rc_ecmd=data_buffer_64.extractToRight(&l_err_cnt_C,l_start_bit,l_length_buffer);if (rc_ecmd){ rc.setEcmdError(rc_ecmd); return rc;} +				    } +				    else +				    { +					rc = fapiGetScom(i_target,MBS_MCBIST01_MCB_ERRCNTB2Q_0x02011668,data_buffer_64_1); if(rc) return rc; +					l_nibble=l_nibble-9; +					l_start_bit=l_nibble*7; +					rc_ecmd=data_buffer_64.extractToRight(&l_err_cnt_C,l_start_bit,l_length_buffer);if (rc_ecmd){ rc.setEcmdError(rc_ecmd); return rc;} +				    } +				} +				if(bound==RIGHT) +    { +		if(l_err_cnt_C){ +		SHMOO[iv_shmoo_type].MBA.P[port].S[rank].K.right_err_cnt[bit][rank_pair]=l_err_cnt_C;	 +		} +		FAPI_INF("\n THE PORT=%d Rank=%d dq=%d and error count=%d \n",port,rank,bit,SHMOO[iv_shmoo_type].MBA.P[port].S[rank].K.right_err_cnt[bit][rank_pair]); +	}else { +	if(l_err_cnt_C){ +	SHMOO[iv_shmoo_type].MBA.P[port].S[rank].K.left_err_cnt[bit][rank_pair]=l_err_cnt_C;	 +}	 +		FAPI_INF("\n THE PORT=%d Rank=%d dq=%d and error count=%d \n",port,rank,bit,SHMOO[iv_shmoo_type].MBA.P[port].S[rank].K.left_err_cnt[bit][rank_pair]); +		} +	return rc;	 +				 +}				 + +*/ +  /*------------------------------------------------------------------------------   * Function: init_multi_array   * Description  : This function do the initialization of various schmoo parameters @@ -560,12 +958,12 @@ fapi::ReturnCode generic_shmoo::get_all_noms(const fapi::Target & i_target)      FAPI_DBG("mss_generic_shmoo : get_all_noms : Reading in all nominal values"); -             if(iv_shmoo_type == 1) +             if(iv_shmoo_type == 4)              {     		l_input_type_e = WR_DQS;              } -            else if(iv_shmoo_type == 2) +            else if(iv_shmoo_type == 8)              {     		l_input_type_e = RD_DQ; @@ -595,8 +993,63 @@ fapi::ReturnCode generic_shmoo::get_all_noms(const fapi::Target & i_target)  		    rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,i_rnk,l_input_type_e,l_dq,0,val);if(rc) return rc;   		    SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.nom_val[l_dq][i_rp]=val; +			#ifdef DBG   		    FAPI_INF("Nominal  Value for port=%d rank=%d  and rank pair=%d and dq=%d is  %d",l_p,i_rnk,i_rp,l_dq,val); -                     +             #endif        +		} +	    } +	} +    } +}	 +    return rc; +} +fapi::ReturnCode generic_shmoo::set_all_binary(const fapi::Target & i_target,bound_t bound) +{ +    fapi::ReturnCode rc; +     +    uint8_t l_rnk,l_byte,l_nibble,l_bit; +    uint8_t i_rnk=0; +    uint8_t i_rp=0; +     +    uint8_t l_dq=0; +	uint8_t l_p=0; +	uint32_t l_max=512; +              +    if(iv_shmoo_type == 8) +            {    +		 +		l_max=127; +                 +            } +             +	 for (l_p=0;l_p<MAX_PORT;l_p++){ +    for (l_rnk=0;l_rnk<iv_MAX_RANKS[l_p];++l_rnk) +    {// Byte loop +	rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc; +		i_rnk=valid_rank[l_rnk]; +		    rc = mss_getrankpair(i_target,l_p,i_rnk,&i_rp,valid_rank);if(rc) return rc;  +        for(l_byte=0;l_byte<iv_MAX_BYTES;++l_byte) +        {   //Nibble loop +            for(l_nibble=0;l_nibble< MAX_NIBBLES;++l_nibble) +            {  +		//Bit loop +                for(l_bit=0;l_bit<MAX_BITS;++l_bit) +                {   +		    l_dq=8*l_byte+4*l_nibble+l_bit; +		     +		    //rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,i_rnk,l_input_type_e,l_dq,0,val);if(rc) return rc;  +			SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.last_pass[l_dq][i_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.nom_val[l_dq][i_rp]; +			SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.curr_val[l_dq][i_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.nom_val[l_dq][i_rp]; +			if(bound==RIGHT) +			{ +			SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.last_fail[l_dq][i_rp]=l_max; +			}else{ +			SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.last_fail[l_dq][i_rp]=0; +			} +		    //SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.nom_val[l_dq][i_rp]=val; +			 +		    //FAPI_DBG("Nominal  Value for port=%d rank=%d  and rank pair=%d and dq=%d is  %d",l_p,i_rnk,i_rp,l_dq,val); +                     		}  	    }  	} @@ -605,6 +1058,212 @@ fapi::ReturnCode generic_shmoo::get_all_noms(const fapi::Target & i_target)      return rc;  } +fapi::ReturnCode generic_shmoo::get_all_noms_data_disable(const fapi::Target & i_target) +{ +    fapi::ReturnCode rc; +     +    uint8_t l_rnk,l_block; +    uint8_t i_rnk=0; +    uint8_t i_rp=0; +    uint32_t val=0; +     +	uint8_t l_p=0; +              +    input_type_t l_input_type_e = DATA_DISABLE; +    access_type_t l_access_type_e = READ ; +    FAPI_DBG("mss_generic_shmoo : get_all_noms : Reading in all nominal values"); +     +     +              +             +	 for (l_p=0;l_p<MAX_PORT;l_p++){ +    for (l_rnk=0;l_rnk<iv_MAX_RANKS[l_p];++l_rnk) +    {// Byte loop +	rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc; +		i_rnk=valid_rank[l_rnk]; +		    rc = mss_getrankpair(i_target,l_p,i_rnk,&i_rp,valid_rank);if(rc) return rc;  +        for(l_block=0;l_block<5;++l_block) +        {   //DP 18 Loop +		rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,i_rnk,l_input_type_e,l_block,0,val);if(rc) return rc;  +		    SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.datadis_nom_val[l_block]=val; +			FAPI_INF("Nominal  Value for data bit disable  port=%d rank=%d  and rank pair=%d and dq=%d is  %d",l_p,i_rnk,i_rp,l_block,val); +             +		} +    } +}	 +    return rc; +} + +fapi::ReturnCode generic_shmoo::put_all_noms_data_disable(const fapi::Target & i_target,uint8_t flag) +{ +    fapi::ReturnCode rc; +     +    uint8_t l_rnk,l_block; +    uint8_t i_rnk=0; +    uint8_t i_rp=0; +    uint32_t val=0; +     +	uint8_t l_p=0; +              +    input_type_t l_input_type_e = DATA_DISABLE; +    access_type_t l_access_type_e = WRITE ; +    FAPI_DBG("mss_generic_shmoo : get_all_noms : Reading in all nominal values"); +     +     +              +             +	 for (l_p=0;l_p<MAX_PORT;l_p++){ +    for (l_rnk=0;l_rnk<iv_MAX_RANKS[l_p];++l_rnk) +    {// Byte loop +	rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc; +		i_rnk=valid_rank[l_rnk]; +		    rc = mss_getrankpair(i_target,l_p,i_rnk,&i_rp,valid_rank);if(rc) return rc;  +        for(l_block=0;l_block<5;++l_block) +        {   //DP 18 Loop +		val=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.datadis_nom_val[l_block]; +		FAPI_INF("Nominal  Value for data bit disable while restoring   port=%d rank=%d  and rank pair=%d and dq=%d is  %d",l_p,i_rnk,i_rp,l_block,val); +		if(flag==1){ +		 +		val=0; +		FAPI_INF("\n the flushing value=%d \n",val); +		} +		rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,i_rnk,l_input_type_e,l_block,0,val);if(rc) return rc;  +		     +             +		} +    } +}	 +    return rc; +} + + +fapi::ReturnCode generic_shmoo::get_all_noms_dqs(const fapi::Target & i_target) +{ +    fapi::ReturnCode rc; +     +    uint8_t l_rnk; +    //uint8_t i_rnk=0; +    uint8_t i_rp=0; +    uint32_t val=0; +    //uint8_t l_dq=0; +	uint8_t l_p=0; +    uint8_t l_max_nibble=20; +	uint8_t rank=0; +	uint8_t l_n=0; +	FAPI_INF("mss_generic_shmoo : get_all_noms_dqs : Reading in all nominal values and schmoo type=%d \n",iv_shmoo_type); +	if(iv_dmm_type==1) +		 { +		  +		 l_max_nibble=18; +		 } +		  +    input_type_t l_input_type_e = WR_DQS; +    access_type_t l_access_type_e = READ ; +    FAPI_DBG("mss_generic_shmoo : get_all_noms : Reading in all nominal values"); +     +     +             if(iv_shmoo_type == 4) +            {    +		l_input_type_e = WR_DQS; +                 +            } +             +			 +			for (l_p=0;l_p<MAX_PORT;l_p++){ +	for (l_rnk=0;l_rnk<iv_MAX_RANKS[l_p];++l_rnk) +    {// Byte loop +	rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[l_rnk]; +		rc = mss_getrankpair(i_target,l_p,rank,&i_rp,valid_rank);if(rc) return rc;  +	 for (l_n=0; l_n<l_max_nibble;l_n++){ +	  +	 rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_n,0,val);if(rc) return rc;  +		    SHMOO[iv_shmoo_type].MBA.P[l_p].S[rank].K.nom_val[l_n][i_rp]=val; +			#ifdef DBG  +		    FAPI_INF("Nominal  Value for port=%d rank=%d  and rank pair=%d and dqs=%d is  %d",l_p,rank,i_rp,l_n,SHMOO[iv_shmoo_type].MBA.P[l_p].S[rank].K.nom_val[l_n][i_rp]); +			#endif +	 } +	 } +	 } +			 +			 +             +	 +	 +    return rc; +} + +fapi::ReturnCode generic_shmoo::get_all_noms_gate(const fapi::Target & i_target) +{ +    fapi::ReturnCode rc; +     +     +    uint8_t i_rnk=0; +     +     +    //uint8_t l_dq=0; +	uint8_t l_cmd=0; +	uint8_t l_p=0; +	uint8_t l_addr=0; +	uint8_t l_cntrl=0; +	uint8_t l_clk=0; +	uint32_t l_delay=0; +     +	#ifdef DEBUG +	FAPI_INF("mss_generic_shmoo : get_all_noms_gate : Reading in all nominal values and schmoo type=%d \n",iv_shmoo_type); +	#endif +		  +    input_type_t l_input_type_e = COMMAND; +    access_type_t l_access_type_e = READ ; +    FAPI_DBG("mss_generic_shmoo : get_all_noms : Reading in all nominal values"); +     +     +              +             +			 +			for (l_p=0;l_p<MAX_PORT;l_p++){ +			FAPI_INF("\n PORT=%d \n",l_p); +	 for (l_cmd=0;l_cmd<3;l_cmd++) +			{ +			l_input_type_e = COMMAND; +			rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cmd,1,l_delay);if(rc) return rc; +			SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd]=l_delay; +			FAPI_INF("\n Command = %d and value = %d \n",l_cmd,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd]); +			FAPI_INF("\n Command = %d and original value = %d \n",l_cmd,l_delay); +			} +			 +			for (l_addr=0;l_addr<19;l_addr++) +			{ +			l_input_type_e = ADDRESS; +			rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_addr,1,l_delay);if(rc) return rc; +			//FAPI_INF("\n Saurabh is here \n"); +			 SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr]=l_delay; +			 //FAPI_INF("\n address = %d and value = %d \n",l_addr,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr]); +			} +			for (l_cntrl=0;l_cntrl<20;l_cntrl++) +			{ +			l_input_type_e = CONTROL; +			rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cntrl,1,l_delay);if(rc) return rc; +			SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl]=l_delay; +			//FAPI_INF("\n CONTROL = %d and value = %d \n",l_cntrl,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl]); +			} +			 +			for (l_clk=0;l_clk<8;l_clk++) +			{ +			l_input_type_e = CLOCK; +			rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,1,l_input_type_e,l_clk,1,l_delay);if(rc) return rc; +			SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk]=l_delay; +			FAPI_INF("\n CLOCK = %d and value = %d \n",l_clk,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk]); +			} +            } +             +	 +	 +    return rc; +} + + +  /*------------------------------------------------------------------------------   * Function: knob_update   * Description  : This is a key function is used to find right and left bound using new algorithm -- there is an option u can chose not to use it by setting a flag @@ -627,7 +1286,7 @@ fapi::ReturnCode generic_shmoo::knob_update(const fapi::Target & i_target,bound_  	uint8_t l_p=0;      uint16_t l_delay=0; -    //uint32_t l_max=0; +      	uint16_t l_max_limit=500;      uint8_t rank=0;  	uint8_t l_rank=0; @@ -638,6 +1297,13 @@ fapi::ReturnCode generic_shmoo::knob_update(const fapi::Target & i_target,bound_      {  	l_SCHMOO_NIBBLES=18;  	} +	 +	rc=do_mcbist_reset(i_target); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_reset failed"); +		    return rc; +		}      //rc = mss_getrankpair(i_target,iv_port,rank,&l_rp,valid_rank);if(rc) return rc;   	for (l_p=0;l_p<MAX_PORT;l_p++){ @@ -650,7 +1316,7 @@ fapi::ReturnCode generic_shmoo::knob_update(const fapi::Target & i_target,bound_  	 }  	 } -    if(scenario == 2) { +    if(scenario == 8) {  	l_input_type_e = RD_DQ;  	l_max_limit=127;  	} @@ -674,13 +1340,16 @@ fapi::ReturnCode generic_shmoo::knob_update(const fapi::Target & i_target,bound_  		rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc;  	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	 //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq,bound);  	 if(schmoo_error_map[l_p][rank][l_n]==0){  	 SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; -	  +	 #ifdef DBG   	 FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); +	 #endif  	 rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; -	   +	  //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq); +	  //get_error_cnt(const fapi::Target & i_target,uint8_t port,uint8_t rank,uint8_t rank_pair,uint8_t bit)  	 }  	 if(SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]>l_max_limit){ @@ -701,7 +1370,7 @@ fapi::ReturnCode generic_shmoo::knob_update(const fapi::Target & i_target,bound_  		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");  		    return rc;  		} -		 +		//rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq);  		rc=check_error_map(i_target,l_p,pass);  		if(rc)  		{    @@ -746,7 +1415,1047 @@ fapi::ReturnCode generic_shmoo::knob_update(const fapi::Target & i_target,bound_  	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){  	 //l_max=SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]; +	 //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq,bound); +	  +	 if(schmoo_error_map[l_p][rank][l_n]==0){ +	 SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; +	 //l_max=SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]; +	 #ifdef DBG  +	 FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); +	 #endif +	 rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; +	  +	 } +	 if(SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp] == 0){ +	 schmoo_error_map[l_p][rank][l_n] = 1; +	 } +	  +	 l_dq=l_dq+4; +	 +			}  +		} +			 +	 } +	 rc=do_mcbist_test(i_target); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); +		    return rc; +		} +		  +rc=check_error_map(i_target,l_p,pass); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); +		    return rc; +		}		 +		 +	 +	 } +		 +		 +	for (l_p=0;l_p<MAX_PORT;l_p++){ +	for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) +    { +	 l_dq=bit; +	 rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[l_rank]; +		rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	 rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc; +	 l_dq=l_dq+4; +			}  +		} +		} +	 } +	  +	     +	} +     +    return rc;	 +} +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +fapi::ReturnCode generic_shmoo::knob_update_bin(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag) +{	 +    fapi::ReturnCode rc; +    ecmdDataBufferBase data_buffer_64(64); +    ecmdDataBufferBase data_buffer_64_1(64); +     +     +     +    uint8_t  l_rp=0; +    input_type_t l_input_type_e = WR_DQ; +    uint8_t l_dq=0; +    access_type_t l_access_type_e = WRITE; +	uint8_t l_n=0; +	 +	uint8_t l_p=0; +    //uint16_t l_delay=0; +     +	//uint16_t l_max_limit=500; +    uint8_t rank=0; +	uint8_t l_rank=0; +	uint8_t l_SCHMOO_NIBBLES=20; +	uint8_t i_rp=0; +	uint8_t l_status=1; +	 +	if(iv_dmm_type==1) +    { +	l_SCHMOO_NIBBLES=18; +	} +	 +	rc=do_mcbist_reset(i_target); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_reset failed"); +		    return rc; +		} +    //rc = mss_getrankpair(i_target,iv_port,rank,&l_rp,valid_rank);if(rc) return rc;  +	 +	for (l_p=0;l_p<MAX_PORT;l_p++){ +	for(int i=0;i<iv_MAX_RANKS[l_p];i++){ +	rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[i]; +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	 schmoo_error_map[l_p][rank][l_n]=0; +	 } +	 } +	 } +	 for (l_p=0;l_p<MAX_PORT;l_p++){ +	for(int i=0;i<iv_MAX_RANKS[l_p];i++){ +	rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[i]; +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	 binary_done_map[l_p][rank][l_n]=0; +	 } +	 } +	 } +	 +    if(scenario == 8) { +	l_input_type_e = RD_DQ; +	//l_max_limit=127; +	} +	 +     +    if(bound==RIGHT) +    { +         +	if(algorithm==SEQ_LIN) +        { +		 +	 +	 do{ +	  +	 //////////////////////////////////////////// +	 for (l_p=0;l_p<MAX_PORT;l_p++){ +	for(int i=0;i<iv_MAX_RANKS[l_p];i++){ +	rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[i]; +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	 l_status=0; +	 if(binary_done_map[l_p][rank][l_n]==0){ +	 l_status=1; +	 } +	 } +	 } +	 } +	 //////////////// +	  +	 for (l_p=0;l_p<MAX_PORT;l_p++){ +	 for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) +    { +	 l_dq=bit; +	 rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[l_rank]; +		rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	  +	 if(schmoo_error_map[l_p][rank][l_n]==0){ +	 SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]; +	 SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]=(SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]+SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp])/2; +	 //FAPI_INF("\n 111111 port=%d nibble=%d rank=%d and bit=%d the last pass value %d the last fail value %d and current value %d\n",l_p,l_n,rank,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp],SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp],SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]); +	rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]);if(rc) return rc; +	if(SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]>SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]){ +	SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]-SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]; +	}else{ +	SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]-SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]; +	} +	if(SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]<=2){ +	binary_done_map[l_p][rank][l_n]=1; +	SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]; +	FAPI_INF("\n the right bound for port=%d rank=%d dq=%d is %d \n",l_p,rank,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]); +	} +	}else{ +	 +	SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]; +	SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]=(SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]+SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp])/2; +	//FAPI_INF("\n 2222222 port=%d nibble=%d rank=%d and bit=%d the last pass value %d the last fail value %d and current value %d\n",l_p,l_n,rank,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp],SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp],SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]); +	rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]);if(rc) return rc; +	if(SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]>SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]){ +	SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]-SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]; +	}else{ +	SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]-SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]; +	} +	if(SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]<=2){ +	binary_done_map[l_p][rank][l_n]=1; +	SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]; +	FAPI_INF("\n the right bound for port=%d rank=%d dq=%d is %d \n",l_p,rank,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]); +	} +	} +	 // //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq,bound); +	 // if(schmoo_error_map[l_p][rank][l_n]==0){ +	  +	 // SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; +	 // #ifdef DBG  +	 // FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); +	 // #endif +	 // rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; +	  // //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq); +	  // //get_error_cnt(const fapi::Target & i_target,uint8_t port,uint8_t rank,uint8_t rank_pair,uint8_t bit) +	 // } +	  +	 // if(SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]>l_max_limit){ +	 // schmoo_error_map[l_p][rank][l_n]=1; +	 // } +	  +	  l_dq=l_dq+4; +	   +			}  +		 +		 +	} +		 +	 } +	 rc=do_mcbist_reset(i_target); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_reset failed"); +		    return rc; +		} +	 rc=do_mcbist_test(i_target); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); +		    return rc; +		} +		//rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq); +		rc=check_error_map(i_target,l_p,pass); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); +		    return rc; +		}		 +	//FAPI_INF("\n the status =%d \n",l_status); +	 }while(l_status==1); +		 +		 +	for (l_p=0;l_p<MAX_PORT;l_p++){ +	for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) +    { +	 l_dq=bit; +	 rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[l_rank]; +		rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	 rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc; +	 l_dq=l_dq+4; +			}  +		} +	 } +	 } +		 +	} + 	 +    if(bound==LEFT) +    { +        if(algorithm==SEQ_LIN) +        { +		 +	 +	 do{ +	  +	 //////////////////////////////////////////// +	 for (l_p=0;l_p<MAX_PORT;l_p++){ +	for(int i=0;i<iv_MAX_RANKS[l_p];i++){ +	rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[i]; +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	 l_status=0; +	 if(binary_done_map[l_p][rank][l_n]==0){ +	 l_status=1; +	 } +	 } +	 } +	 } +	 //////////////// +	  +	 for (l_p=0;l_p<MAX_PORT;l_p++){ +	 for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) +    { +	 l_dq=bit; +	 rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[l_rank]; +		rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	  +	 if(schmoo_error_map[l_p][rank][l_n]==0){ +	 SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]; +	 SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]=(SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]+SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp])/2; +	 //FAPI_INF("\n 111111 port=%d nibble=%d rank=%d and bit=%d the last pass value %d the last fail value %d and current value %d\n",l_p,l_n,rank,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp],SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp],SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]); +	rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]);if(rc) return rc; +	if(SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]>SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]){ +	SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]-SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]; +	}else{ +	SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]-SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]; +	} +	if(SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]<=2){ +	binary_done_map[l_p][rank][l_n]=1; +	SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]; +	FAPI_INF("\n the left bound for port=%d rank=%d dq=%d is %d \n",l_p,rank,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]); +	} +	}else{ +	 +	SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]; +	SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]=(SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]+SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp])/2; +	//FAPI_INF("\n 2222222 port=%d nibble=%d rank=%d and bit=%d the last pass value %d the last fail value %d and current value %d\n",l_p,l_n,rank,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp],SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp],SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]); +	rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]);if(rc) return rc; +	if(SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]>SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]){ +	SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]-SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]; +	}else{ +	SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.last_fail[l_dq][l_rp]-SHMOO[scenario].MBA.P[l_p].S[rank].K.last_pass[l_dq][l_rp]; +	} +	if(SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_diff[l_dq][l_rp]<=2){ +	binary_done_map[l_p][rank][l_n]=1; +	SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]; +	FAPI_INF("\n the left bound for port=%d rank=%d dq=%d is %d \n",l_p,rank,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.curr_val[l_dq][l_rp]); +	} +	} +	 // //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq,bound); +	 // if(schmoo_error_map[l_p][rank][l_n]==0){ +	  +	 // SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; +	 // #ifdef DBG  +	 // FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); +	 // #endif +	 // rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; +	  // //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq); +	  // //get_error_cnt(const fapi::Target & i_target,uint8_t port,uint8_t rank,uint8_t rank_pair,uint8_t bit) +	 // } +	  +	 // if(SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]>l_max_limit){ +	 // schmoo_error_map[l_p][rank][l_n]=1; +	 // } +	  +	  l_dq=l_dq+4; +	   +			}  +		 +		 +	} +		 +	 } +	 rc=do_mcbist_reset(i_target); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_reset failed"); +		    return rc; +		} +	 rc=do_mcbist_test(i_target); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); +		    return rc; +		} +		//rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq); +		rc=check_error_map(i_target,l_p,pass); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); +		    return rc; +		}		 +	FAPI_INF("\n the status =%d \n",l_status); +	 }while(l_status==1); +		 +		 +	for (l_p=0;l_p<MAX_PORT;l_p++){ +	for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) +    { +	 l_dq=bit; +	 rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[l_rank]; +		rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	 rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc; +	 l_dq=l_dq+4; +			}  +		} +	 } +	 } +	  +	     +	} +     +    return rc;	 +} +///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +fapi::ReturnCode generic_shmoo::knob_update_gate(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t pass,bool &flag) +{	 +    fapi::ReturnCode rc; +    ecmdDataBufferBase data_buffer_64(64); +    ecmdDataBufferBase data_buffer_64_1(64); +     +     +     +    uint8_t  l_rp=0; +    input_type_t l_input_type_e = COMMAND; +     +    access_type_t l_access_type_e = WRITE; +	uint8_t l_n=0; +	uint8_t l_cmd=0; +	uint8_t l_addr=0; +	uint8_t l_cntrl=0; +	uint8_t l_clk=0; +	uint8_t i_rnk=0; +	 +	 +	uint8_t l_p=0; +    uint32_t l_delay=0; +	//uint32_t l_delay_cac=0; +	uint32_t l_cmd_delay=0; +	uint32_t l_addr_delay=0; +	uint32_t l_cntrl_delay=0; +	uint32_t l_clk_delay=0; +     +	//uint16_t l_max_limit=500; +    uint8_t rank=0; +	uint8_t l_rank=0; +	uint8_t l_SCHMOO_NIBBLES=20; +	uint8_t i_rp=0; +	 +	if(iv_dmm_type==1) +    { +	l_SCHMOO_NIBBLES=18; +	} +	 +	rc=do_mcbist_reset(i_target); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_reset failed"); +		    return rc; +		} +    //rc = mss_getrankpair(i_target,iv_port,rank,&l_rp,valid_rank);if(rc) return rc;  +	 +	for (l_p=0;l_p<MAX_PORT;l_p++){ +	for(int i=0;i<iv_MAX_RANKS[l_p];i++){ +	rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[i]; +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	 schmoo_error_map[l_p][rank][l_n]=0; +	 } +	 } +	 } +	 +     +	 +     +    if(bound==RIGHT) +    { +         +	if(algorithm==SEQ_LIN) +        { +		 +	 +	 for (l_delay=1;((pass==0)&&(l_delay<127));l_delay++){ +	  +	 for (l_p=0;l_p<MAX_PORT;l_p++){ +	 for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) +    { +	 +	 rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[l_rank]; +		rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	  +	  +	  +	  +	  +	 if(schmoo_error_map[l_p][rank][l_n]==0){ +	  +	  +	 SHMOO[scenario].MBA.P[l_p].S[rank].K.offset[l_n]=l_delay; +	  +	 } +			}  +		 +		 +	} +		 +	 } +	  +	 for (l_p=0;l_p<MAX_PORT;l_p++){ +	 for (l_cmd=0;l_cmd<3;l_cmd++) +			{ +			 +			l_cmd_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd]+l_delay; +			 +			l_input_type_e = COMMAND; +			if(l_cmd_delay<127){ +			 //l_delay_cac=l_cmd_delay-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd]; +			FAPI_INF("\n port=%d command=%d nominal =%d and write_value=%d  \n",l_p,l_cmd,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd],l_cmd_delay); +			rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cmd,0,l_cmd_delay);if(rc) return rc; +			} +			} +			for (l_addr=0;l_addr<19;l_addr++) +			{ +			 +			l_addr_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr]+l_delay; +			if(l_addr_delay<127){ +			l_input_type_e = ADDRESS; +			FAPI_INF("\n port=%d  address=%d nominal =%d and write_value=%d \n",l_p,l_addr,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr],l_addr_delay); +			rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_addr,0,l_addr_delay);if(rc) return rc; +			} +			} +			for (l_cntrl=0;l_cntrl<20;l_cntrl++) +			{ +			l_cntrl_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl]+l_delay; +			if(l_cntrl_delay<127){ +			l_input_type_e = CONTROL; +			FAPI_INF("\n port=%d control=%d nominal =%d and write_value=%d \n",l_p,l_cntrl,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl],l_cntrl_delay); +			rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cntrl,0,l_cntrl_delay);if(rc) return rc; +			} +			} +			 +			for (l_clk=0;l_clk<8;l_clk++) +			{ +			l_clk_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk]+l_delay; +			  +			  +			 +			  +			l_input_type_e = CLOCK; +			 +			FAPI_INF("\n port=%d clock=%d nominal =%d and write_value=%d \n",l_p,l_clk,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk],l_clk_delay); +			rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_clk,0,l_clk_delay);if(rc) return rc; +			 +			} +            } +	  +	  +	 rc=do_mcbist_test(i_target); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); +		    return rc; +		} +		 +		 +		rc=check_error_map(i_target,l_p,pass); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); +		    return rc; +		} +	 +	 +	 } +		 +		 +		 +	// PUT HERE NOMINAL BACK . +	 +	for (l_p=0;l_p<MAX_PORT;l_p++){ +	 for (l_cmd=0;l_cmd<3;l_cmd++) +			{ +			 +			l_cmd_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd]; +			 +			l_input_type_e = COMMAND; +			if(l_cmd_delay<127){ +			  +			// l_delay_cac=l_cmd_delay-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd]; +			 +			rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cmd,0,l_cmd_delay);if(rc) return rc; +			} +			} +			for (l_addr=0;l_addr<19;l_addr++) +			{ +			 +			l_addr_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr]; +			if(l_addr_delay<127){ +			l_input_type_e = ADDRESS; +			rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_addr,0,l_addr_delay);if(rc) return rc; +			} +			} +			for (l_cntrl=0;l_cntrl<20;l_cntrl++) +			{ +			l_cntrl_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl]; +			if(l_cntrl_delay<127){ +			l_input_type_e = CONTROL;			 +			rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cntrl,0,l_cntrl_delay);if(rc) return rc; +			} +			} +			 +			for (l_clk=0;l_clk<8;l_clk++) +			{ +			l_clk_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk];	  +			l_input_type_e = CLOCK; +			rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_clk,0,l_clk_delay);if(rc) return rc; +			 +			} +            } +	 +	 +	 } +		 +	} + 	 +    if(bound==LEFT) +    { +        if(algorithm==SEQ_LIN) +        { +		 +	 +	 for (l_delay=1;((pass==0)&&(l_delay<127));l_delay++){ +	  +	 for (l_p=0;l_p<MAX_PORT;l_p++){ +	 for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) +    { +	 +	 rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[l_rank]; +		rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	  +	  +	  +	  +	  +	 if(schmoo_error_map[l_p][rank][l_n]==0){ +	  +	  +	 SHMOO[scenario].MBA.P[l_p].S[rank].K.offset[l_n]=l_delay; +	  +	 } +			}  +		 +		 +	} +		 +	 } +	  +	 for (l_p=0;l_p<MAX_PORT;l_p++){ +	 for (l_cmd=0;l_cmd<3;l_cmd++) +			{ +			 +			l_cmd_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd]-l_delay; +			 +			l_input_type_e = COMMAND; +			if((l_cmd_delay>0)&&(l_cmd_delay<127)){ +			 //l_delay_cac=l_cmd_delay-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd]; +			FAPI_INF("\n port=%d command=%d nominal =%d and write_value=%d  \n",l_p,l_cmd,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd],l_cmd_delay); +			rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cmd,0,l_cmd_delay);if(rc) return rc; +			} +			} +			for (l_addr=0;l_addr<19;l_addr++) +			{ +			 +			l_addr_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr]-l_delay; +			if((l_addr_delay>0)&&(l_addr_delay<127)){ +			l_input_type_e = ADDRESS; +			FAPI_INF("\n port=%d  address=%d nominal =%d and write_value=%d \n",l_p,l_addr,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr],l_addr_delay); +			rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_addr,0,l_addr_delay);if(rc) return rc; +			} +			} +			for (l_cntrl=0;l_cntrl<20;l_cntrl++) +			{ +			l_cntrl_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl]-l_delay; +			if((l_cntrl_delay>0)&&(l_cntrl_delay<127)){ +			l_input_type_e = CONTROL; +			FAPI_INF("\n port=%d control=%d nominal =%d and write_value=%d \n",l_p,l_cntrl,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl],l_cntrl_delay); +			rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cntrl,0,l_cntrl_delay);if(rc) return rc; +			} +			} +			 +			for (l_clk=0;l_clk<8;l_clk++) +			{ +			l_clk_delay = (SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk]+127)-l_delay; +			l_input_type_e = CLOCK; +			 +			FAPI_INF("\n port=%d clock=%d nominal =%d and write_value=%d \n",l_p,l_clk,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk],l_clk_delay); +			rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_clk,0,l_clk_delay);if(rc) return rc; +			 +			} +            } +	 // put here loops for changing the delay values of CACc +	  +	 rc=do_mcbist_test(i_target); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); +		    return rc; +		} +		 +		rc=check_error_map(i_target,l_p,pass); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); +		    return rc; +		} + +	 +	 } +		 +		 +		 +	// PUT HERE NOMINAL BACK . +	 +	for (l_p=0;l_p<MAX_PORT;l_p++){ +	 for (l_cmd=0;l_cmd<3;l_cmd++) +			{ +			 +			l_cmd_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd]; +			 +			l_input_type_e = COMMAND; +			if(l_cmd_delay<127){ +			  +			// l_delay_cac=l_cmd_delay-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd]; +			rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cmd,0,l_cmd_delay);if(rc) return rc; +			} +			} +			for (l_addr=0;l_addr<19;l_addr++) +			{ +			 +			l_addr_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr]; +			if(l_addr_delay<127){ +			l_input_type_e = ADDRESS; +			rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_addr,0,l_addr_delay);if(rc) return rc; +			} +			} +			for (l_cntrl=0;l_cntrl<20;l_cntrl++) +			{ +			l_cntrl_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl]; +			if(l_cntrl_delay<127){ +			l_input_type_e = CONTROL; +			rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cntrl,0,l_cntrl_delay);if(rc) return rc; +			} +			} +			 +			for (l_clk=0;l_clk<8;l_clk++) +			{ +			l_clk_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk]; +			  +			l_input_type_e = CLOCK; +			rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_clk,0,l_clk_delay);if(rc) return rc; +			 +			} +            } +	 +	 +	 } +	  +	     +	} +     +    return rc;	 +} +fapi::ReturnCode generic_shmoo::knob_update_gate_train(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t pass) +{	 +    fapi::ReturnCode rc; +	 +    ecmdDataBufferBase l_data_buffer_FIR_64(64); +	ecmdDataBufferBase data_buffer_64(64); +    ecmdDataBufferBase data_buffer_64_1(64); +     +     +     +    uint8_t  l_rp=0; +    input_type_t l_input_type_e = COMMAND; +    uint8_t l_dq=0; +    access_type_t l_access_type_e = WRITE; +	uint8_t l_n=0; +	uint8_t l_cmd=0; +	uint8_t l_addr=0; +	uint8_t l_cntrl=0; +	uint8_t l_clk=0; +	uint8_t i_rnk=0; +	uint8_t bit=0; +	uint8_t l_failed=0; +	 +	uint8_t l_p=0; +    uint32_t l_delay=0; +	uint32_t l_delay_failed=0; +	 +	uint32_t l_cmd_delay=0; +	uint32_t l_addr_delay=0; +	uint32_t l_cntrl_delay=0; +	uint32_t l_clk_delay=0; +     +	 +    uint8_t rank=0; +	uint8_t l_rank=0; +	uint8_t l_SCHMOO_NIBBLES=20; +	uint8_t i_rp=0; +	uint32_t rc_num = 0; +	uint8_t flag=1; +	 +	 +	 +	 +	if(iv_dmm_type==1) +    { +	l_SCHMOO_NIBBLES=18; +	} +	 +	rc=do_mcbist_reset(i_target); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_reset failed"); +		    return rc; +		} +     +	 +	for (l_p=0;l_p<MAX_PORT;l_p++){ +	for(int i=0;i<iv_MAX_RANKS[l_p];i++){ +	rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[i]; +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	 schmoo_error_map[l_p][rank][l_n]=0; +	 } +	 } +	 } +	 +     +	 +     +    if(bound==RIGHT) +    { +         +	if(algorithm==SEQ_LIN) +        { +		 +	 +	 for (l_delay=1;((pass==0)&&(l_delay<127));l_delay++){ +	  +	 for (l_p=0;l_p<MAX_PORT;l_p++){ +	 for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) +    { +	 +	 rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[l_rank]; +		rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	  +	  +	  +	  +	  +	 if(schmoo_error_map[l_p][rank][l_n]==0){ +	  +	  +	 SHMOO[scenario].MBA.P[l_p].S[rank].K.offset[l_n]=l_delay; +	  } +			}  +		 +		 +	} +		 +	 } +	  +	 for (l_p=0;l_p<MAX_PORT;l_p++){ +	 l_failed=0; +	 for (l_cmd=0;l_cmd<3;l_cmd++) +			{ +			 +			l_cmd_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd]+l_delay; +			 +			l_input_type_e = COMMAND; +			if(l_cmd_delay==127){ +			l_failed=1; +			pass=1; +			} +			if((l_cmd_delay<127)&&(l_failed==0)){ +			  +			FAPI_INF("\n port=%d command=%d nominal =%d and write_value=%d  \n",l_p,l_cmd,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd],l_cmd_delay); +			rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cmd,0,l_cmd_delay);if(rc) return rc; +			} +			} +			for (l_addr=0;l_addr<19;l_addr++) +			{ +			 +			l_addr_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr]+l_delay; +			if(l_addr_delay==127){ +			l_failed=1; +			pass=1; +			} +			if((l_addr_delay<127)&&(l_failed==0)){ +			l_input_type_e = ADDRESS; +			 +			FAPI_INF("\n port=%d  address=%d nominal =%d and write_value=%d \n",l_p,l_addr,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr],l_addr_delay); +			rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_addr,0,l_addr_delay);if(rc) return rc; +			} +			} +			for (l_cntrl=0;l_cntrl<20;l_cntrl++) +			{ +			l_cntrl_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl]+l_delay; +			if(l_cntrl_delay==127){ +			l_failed=1; +			pass=1; +			} +			if((l_cntrl_delay<127)&&(l_failed==0)){ +			l_input_type_e = CONTROL; +			 +			FAPI_INF("\n port=%d control=%d nominal =%d and write_value=%d \n",l_p,l_cntrl,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl],l_cntrl_delay); +			rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cntrl,0,l_cntrl_delay);if(rc) return rc; +			} +			} +			 +			for (l_clk=0;l_clk<8;l_clk++) +			{ +			l_clk_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk]+l_delay; +			  +			  +			l_input_type_e = CLOCK; +			 +			FAPI_INF("\n port=%d clock=%d nominal =%d and write_value=%d \n",l_p,l_clk,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk],l_clk_delay); +			rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,1,l_input_type_e,l_clk,0,l_clk_delay);if(rc) return rc; +			 +			} +            } +	 // call dram training here . +	 FAPI_EXEC_HWP(rc, mss_draminit_training, i_target); +	//rc = mss_draminit_training(i_target); +	if(rc){ +	l_delay_failed=l_delay-1; +	pass=1; +	} +	 +	l_delay_failed=l_delay-1; +	FAPI_INF("\n the value of pass=%d  and delay =%d and failed delay=%d \n",pass,l_delay,l_delay_failed); +	/////// + +	 +} + +FAPI_INF("\n EFFECTIVE RIGHT CLOCK ADJUST = %d \n",l_delay_failed); +rc_num =  data_buffer_64.flushTo0();if (rc_num){FAPI_ERR( "Error in function  mcb_reset_trap:");rc.setEcmdError(rc_num);return rc;} + +rc=put_all_noms_data_disable(i_target,flag);if(rc) return rc; + +// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP0_P0_0_0x8000007c0301143F,data_buffer_64); if(rc) return rc; +// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP0_P0_1_0x8000047c0301143F,data_buffer_64); if(rc) return rc; +// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP0_P0_2_0x8000087c0301143F,data_buffer_64); if(rc) return rc; +// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP0_P0_3_0x80000c7c0301143F,data_buffer_64); if(rc) return rc; +// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP0_P0_4_0x8000107c0301143F,data_buffer_64); if(rc) return rc; + +// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP0_P1_0_0x8001007c0301143F,data_buffer_64); if(rc) return rc; +// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP0_P1_1_0x8001047c0301143F,data_buffer_64); if(rc) return rc; +// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP0_P1_2_0x8001087c0301143F,data_buffer_64); if(rc) return rc; +// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP0_P1_3_0x80010c7c0301143F,data_buffer_64); if(rc) return rc; +// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP0_P1_4_0x8001107c0301143F,data_buffer_64); if(rc) return rc; + +// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP1_P0_0_0x8000017c0301143F,data_buffer_64); if(rc) return rc; +// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP1_P0_1_0x8000057c0301143F,data_buffer_64); if(rc) return rc; +// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP1_P0_2_0x8000097c0301143F,data_buffer_64); if(rc) return rc; +// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP1_P0_3_0x80000d7c0301143F,data_buffer_64); if(rc) return rc; +// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP1_P0_4_0x8000117c0301143F,data_buffer_64); if(rc) return rc; + + +// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP1_P1_0_0x8001017c0301143F,data_buffer_64); if(rc) return rc; +// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP1_P1_1_0x8001057c0301143F,data_buffer_64); if(rc) return rc; +// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP1_P1_2_0x8001097c0301143F,data_buffer_64); if(rc) return rc; +// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP1_P1_3_0x80010d7c0301143F,data_buffer_64); if(rc) return rc; +// rc = fapiPutScom(i_target,DPHY01_DDRPHY_DP18_DATA_BIT_DISABLE0_RP1_P1_4_0x8001117c0301143F,data_buffer_64); if(rc) return rc; +	  +	 for (l_p=0;l_p<MAX_PORT;l_p++){ +	 for (l_cmd=0;l_cmd<3;l_cmd++) +			{ +			 +			l_cmd_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cmd_nom_val[l_cmd]+l_delay_failed; +			 +			l_input_type_e = COMMAND; +			if(l_cmd_delay<127){ +			rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cmd,0,l_cmd_delay);if(rc) return rc; +			} +			} +			for (l_addr=0;l_addr<19;l_addr++) +			{ +			 +			l_addr_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr]+l_delay_failed; +			if(l_addr_delay<127){ +			l_input_type_e = ADDRESS; +			 +			//FAPI_INF("\n port=%d  address=%d nominal =%d and write_value=%d \n",l_p,l_addr,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.addr_nom_val[l_addr],l_addr_delay); +			rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_addr,0,l_addr_delay);if(rc) return rc; +			} +			} +			for (l_cntrl=0;l_cntrl<20;l_cntrl++) +			{ +			l_cntrl_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl]+l_delay_failed; +			if(l_cntrl_delay<127){ +			l_input_type_e = CONTROL; +			 +			//FAPI_INF("\n port=%d control=%d nominal =%d and write_value=%d \n",l_p,l_cntrl,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.cntrl_nom_val[l_cntrl],l_cntrl_delay); +			rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_cntrl,0,l_cntrl_delay);if(rc) return rc; +			} +			} +			 +			for (l_clk=0;l_clk<8;l_clk++) +			{ +			l_clk_delay = SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk]+l_delay_failed; +			  +			 //FAPI_INF("\n clock max value reached for port=%d and value =%d \n",l_p,l_clk_delay); +			 +			  +			l_input_type_e = CLOCK; +			 +			//FAPI_INF("\n port=%d clock=%d nominal =%d and write_value=%d \n",l_p,l_clk,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rnk].K.clk_nom_val[l_clk],l_clk_delay); +			rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,0,l_input_type_e,l_clk,0,l_clk_delay);if(rc) return rc; +			 +			} +            } +		 +		 +		//rc = mss_draminit_training(i_target); +		FAPI_EXEC_HWP(rc, mss_draminit_training, i_target); +		iv_shmoo_type=4; +	rc=schmoo_setup_mcb(i_target);if(rc) return rc; +	 iv_shmoo_type=16; +	 // check mcbist for the fail  +	 rc=do_mcbist_test(i_target); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); +		    return rc; +		} +		 +		rc=mcb_error_map(i_target,mcbist_error_map);if(rc) return rc; +	 +	 +	 +	 +	 } +		 +	} + 	 +    if(bound==LEFT) +    { +        if(algorithm==SEQ_LIN) +        { +		 +		for (l_delay=1;(pass==0);l_delay++){ +	  +	 for (l_p=0;l_p<MAX_PORT;l_p++){ +	 for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) +    { +	  +	 rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[l_rank]; +		rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	 //l_max=SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]; +	 //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq,bound);  	 if(schmoo_error_map[l_p][rank][l_n]==0){  	 SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; @@ -808,96 +2517,1196 @@ rc=check_error_map(i_target,l_p,pass);   * Description  : This is a key function is used to find right and left bound using new algorithm -- there is an option u can chose not to use it by setting a flag   *   * Parameters: Target:MBA,bound:RIGHT/LEFT,scenario:type of schmoo,iv_port:0/1,rank:0-7,byte:0-7,nibble:0/1,bit:0-3,pass, - * --------------------------------------------------------------------------- -fapi::ReturnCode generic_shmoo::knob_update_dqs(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t rank,uint8_t byte,uint8_t nibble,uint8_t bit,uint8_t pass) -{ + * --------------------------------------------------------------------------- */ +fapi::ReturnCode generic_shmoo::knob_update_dqs_by4(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag) +{	      fapi::ReturnCode rc;      ecmdDataBufferBase data_buffer_64(64);      ecmdDataBufferBase data_buffer_64_1(64); -    data_buffer_64.flushTo0(); -    data_buffer_64_1.flushTo0(); -    uint32_t l_current_val=0; -    uint32_t l_max_value=0; -    uint32_t l_min_value=0; +     +          uint8_t  l_rp=0; -    input_type_t l_input_type_e = WR_DQS; +    input_type_t l_input_type_e = WR_DQ; +	input_type_t l_input_type_e_dqs = WR_DQS;      uint8_t l_dq=0;      access_type_t l_access_type_e = WRITE; +	uint8_t l_n=0; +	uint8_t l_dqs=4; +	 +	 +	uint8_t l_p=0; +    uint16_t l_delay=0; +    //uint32_t l_max=0; +	uint16_t l_max_limit=500; +    uint8_t rank=0; +	uint8_t l_rank=0; +	uint8_t l_SCHMOO_NIBBLES=20; +	uint8_t i_rp=0; +	 +	 +	rc=do_mcbist_test(i_target); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); +		    return rc; +		} +		 +		rc=check_error_map(i_target,l_p,pass); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); +		    return rc; +		}		 -    if(scenario == 1)  +	if(iv_dmm_type==1)      { -	l_input_type_e = WR_DQS; -    } -    else if(scenario == 3)  +	l_SCHMOO_NIBBLES=18; +	} +    //rc = mss_getrankpair(i_target,iv_port,rank,&l_rp,valid_rank);if(rc) return rc;  +	 +	for (l_p=0;l_p<MAX_PORT;l_p++){ +	for(int i=0;i<iv_MAX_RANKS[l_p];i++){ +	rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[i]; +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	 schmoo_error_map[l_p][rank][l_n]=0; +	 } +	 } +	 } +	 +     +	 +     +    if(bound==RIGHT)      { -	l_input_type_e = RD_DQS; -    } +         +	if(algorithm==SEQ_LIN) +        { +		 +	 +	 for (l_delay=1;((pass==0));l_delay++){ +	  +	 for (l_p=0;l_p<MAX_PORT;l_p++){ +	 for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) +    { +	 l_dq=0; +	 rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[l_rank]; +		rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; +		//FAPI_INF("\n abhijit here after  port=%d rank=%d \n",l_p,rank); +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	 l_dq=4*l_n; +	 if(schmoo_error_map[l_p][rank][l_n]==0){ +	 //FAPI_INF("\n value of nominal delay scenario=%d rank=%d for port=%d dqs=%d is %d ",l_dqs,rank,l_p,l_n,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]); +	 SHMOO[l_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_n][l_rp]=SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]+l_delay; +	 //FAPI_INF("\n value of delay scenario=%d rank=%d for port=%d dqs=%d is %d ",l_dqs,rank,l_p,l_n,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_n][l_rp]); +	 rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_n][l_rp]);if(rc) return rc; +	 SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; +	 //FAPI_INF("\n value of delay scenario=%d rank=%d for port=%d bit=%d is %d ",scenario,rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); +	 rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; +	  l_dq=l_dq+1; +	  SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; +	 //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); +	  rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; +	  l_dq=l_dq+1; +	  SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; +	 //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); +	  rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; +	  l_dq=l_dq+1; +	  SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; +	 //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); +	  rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; +	 } +	 //FAPI_INF("\n abhijit here before \n"); +	 if(SHMOO[l_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]>l_max_limit){ +	 schmoo_error_map[l_p][rank][l_n]=1; +	 } +		 +		}  +		 +		 +	} +		 +	 } +	 rc=do_mcbist_test(i_target); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); +		    return rc; +		} +		 +		rc=check_error_map(i_target,l_p,pass); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); +		    return rc; +		}		 +	 } +		 +		 +	for (l_p=0;l_p<MAX_PORT;l_p++){ +	for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) +    { + +	 rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[l_rank]; +		rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	 //FAPI_INF("\n restoring nominal values for dqs=%d port=%d rank=%d is %d \n",l_n,l_p,rank,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]); +	 rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);if(rc) return rc; +	  +			}  +		} +		} +		for(int l_bit=0;l_bit<4;l_bit++){ +		for (l_p=0;l_p<MAX_PORT;l_p++){ +	for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) +    { +	 l_dq=l_bit; +	 rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[l_rank]; +		rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	 rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc; +	 l_dq=l_dq+4; +			}  +		} +	 } +	}	 +		 +		 +	 } +		 +	} + 	      if(bound==LEFT)      { +        if(algorithm==SEQ_LIN) +        { +		 +		for (l_delay=1;(pass==0);l_delay++){ +	  +	 for (l_p=0;l_p<MAX_PORT;l_p++){ +	 for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) +    { +	 l_dq=0; +	 rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[l_rank]; +		rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	 l_dq=4*l_n; +	// l_max=SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]; +	  +	  +	 if(schmoo_error_map[l_p][rank][l_n]==0){ +	  SHMOO[l_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_n][l_rp]=SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]-l_delay; +	 rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_n][l_rp]);if(rc) return rc; +	 SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; +	 //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); +	 rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; +	  l_dq=l_dq+1; +	  SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; +	 //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); +	  rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; +	  l_dq=l_dq+1; +	  SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; +	 //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); +	  rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; +	  l_dq=l_dq+1; +	  SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; +	 //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); +	  rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; +	 } +	 if(SHMOO[l_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp] == 0){ +	 schmoo_error_map[l_p][rank][l_n] = 1; +	 } +	  +	  +	 +			}  +		} +			 +	 } +	 rc=do_mcbist_test(i_target); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); +		    return rc; +		} +		  +rc=check_error_map(i_target,l_p,pass); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); +		    return rc; +		}		 +		 +	 +	 } +		 +		 +	for (l_p=0;l_p<MAX_PORT;l_p++){ +	for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) +    { + +	 rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[l_rank]; +		rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	 rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);if(rc) return rc; +	  +			}  +		} +		} +		 +		for(int l_bit=0;l_bit<4;l_bit++){ +		for (l_p=0;l_p<MAX_PORT;l_p++){ +	for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) +    { +	 l_dq=l_bit; +	 rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[l_rank]; +		rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	 rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc; +	 l_dq=l_dq+4; +			}  +		} +	 } +	} +	 } +	  +	     +	} +     +    return rc;	 +} +fapi::ReturnCode generic_shmoo::knob_update_dqs_by4_isdimm(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag) +{	 +    fapi::ReturnCode rc; +    ecmdDataBufferBase data_buffer_64(64); +    ecmdDataBufferBase data_buffer_64_1(64); +     +     +     +    uint8_t  l_rp=0; +    input_type_t l_input_type_e = WR_DQ; +	input_type_t l_input_type_e_dqs = WR_DQS; +    uint8_t l_dq=0; +    access_type_t l_access_type_e = WRITE; +	uint8_t l_n=0; +	uint8_t l_dqs=4; +	uint8_t l_my_dqs=0; +	 +	 +	uint8_t l_p=0; +    uint16_t l_delay=0; +    //uint32_t l_max=0; +	uint16_t l_max_limit=500; +    uint8_t rank=0; +	uint8_t l_rank=0; +	uint8_t l_SCHMOO_NIBBLES=20; +	uint8_t i_rp=0; +	 +	rc=do_mcbist_test(i_target); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); +		    return rc; +		} +		 +		rc=check_error_map(i_target,l_p,pass); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); +		    return rc; +		}		 +		 +	 +	if(iv_dmm_type==1) +    { +	l_SCHMOO_NIBBLES=18; +	} +	uint8_t l_dqs_arr[18]={0,9,1,10,2,11,3,12,4,13,5,14,6,15,7,16,8,17}; +    //rc = mss_getrankpair(i_target,iv_port,rank,&l_rp,valid_rank);if(rc) return rc;  +	 +	for (l_p=0;l_p<MAX_PORT;l_p++){ +	for(int i=0;i<iv_MAX_RANKS[l_p];i++){ +	rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[i]; +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	 schmoo_error_map[l_p][rank][l_n]=0; +	 } +	 } +	 } +	 +     +     +    if(bound==RIGHT) +    { +	if(algorithm==SEQ_LIN) +        { +		 +	 +	 for (l_delay=1;((pass==0));l_delay++){ +	  +	 for (l_p=0;l_p<MAX_PORT;l_p++){ +	 for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) +    { +	 l_dq=0; +	 l_my_dqs=0; +	 rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[l_rank]; +		rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; +		//FAPI_INF("\n abhijit here after  port=%d rank=%d \n",l_p,rank); +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	 l_dq=4*l_n; +	 l_my_dqs=l_dqs_arr[l_n]; +	 if(schmoo_error_map[l_p][rank][l_n]==0){ +	 //FAPI_INF("\n value of nominal delay scenario=%d rank=%d for port=%d dqs=%d is %d ",l_dqs,rank,l_p,l_my_dqs,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_my_dqs][l_rp]); +	 SHMOO[l_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_my_dqs][l_rp]=SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_my_dqs][l_rp]+l_delay; +	 //FAPI_INF("\n value of delay scenario=%d rank=%d for port=%d dqs=%d is %d ",l_dqs,rank,l_p,l_my_dqs,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_my_dqs][l_rp]); +	 rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_my_dqs,0,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_my_dqs][l_rp]);if(rc) return rc; +	 SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; +	 //FAPI_INF("\n value of delay scenario=%d rank=%d for port=%d bit=%d is %d ",scenario,rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); +	 rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; +	  l_dq=l_dq+1; +	  SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; +	 //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); +	  rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; +	  l_dq=l_dq+1; +	  SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; +	 //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); +	  rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; +	  l_dq=l_dq+1; +	  SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; +	 //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); +	  rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; +	 } +	 //FAPI_INF("\n abhijit here before \n"); +	 if(SHMOO[l_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]>l_max_limit){ +	 schmoo_error_map[l_p][rank][l_n]=1; +	 } +		 +		}  +		 +		 +	} +		 +	 } +	 rc=do_mcbist_test(i_target); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); +		    return rc; +		} +		 +		rc=check_error_map(i_target,l_p,pass); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); +		    return rc; +		}		 +	 +	 } +		 +		 +	for (l_p=0;l_p<MAX_PORT;l_p++){ +	for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) +    { + +	 rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[l_rank]; +		rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	 //FAPI_INF("\n restoring nominal values for dqs=%d port=%d rank=%d is %d \n",l_n,l_p,rank,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]); +	 rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);if(rc) return rc; +	  +			}  +		} +		} +		 +		for(int l_bit=0;l_bit<4;l_bit++){ +		for (l_p=0;l_p<MAX_PORT;l_p++){ +	for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) +    { +	 l_dq=l_bit; +	 rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[l_rank]; +		rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	 rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc; +	 l_dq=l_dq+4; +			}  +		} +	 } +	} +		 +		 +		 +	 } +		 +	} + 	 +    if(bound==LEFT) +    {          if(algorithm==SEQ_LIN)          { -	    l_min_value=SHMOO[scenario].static_knob.min_val; -	    FAPI_INF("  curr val in left above  = %d and pass=%d ",l_current_val,pass); -	    for(l_current_val=SHMOO[scenario].MBA.P[iv_port].S[rank].K.nom_val[l_dq][l_rp];((l_current_val >= 20)&&(pass==1));l_current_val-=20) -	    { -		    //use saurabh function for writing here  -		    FAPI_INF("  curr val in left = %d and pass=%d ",l_current_val,pass); -		    rc=mss_access_delay_reg(i_target,l_access_type_e,iv_port,0,l_input_type_e,l_dq,0,l_current_val);if(rc) return rc; -		     -		    rc=do_mcbist_test(i_target,rank,byte,nibble,pass); -		    if(rc) -		    {    -			FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); -			return rc; -		    } -       	    } -	    if(!pass) -	    { -		SHMOO[scenario].MBA.P[iv_port].S[rank].K.lb_regval[l_dq][l_rp]=l_current_val; -	    } -	    FAPI_INF("  left  bound = %d  ",SHMOO[scenario].MBA.P[iv_port].S[rank].K.rb_regval[l_dq][l_rp]); -	    l_current_val=SHMOO[scenario].MBA.P[iv_port].S[rank].K.nom_val[l_dq][l_rp]; -	    rc=mss_access_delay_reg(i_target,l_access_type_e,iv_port,0,l_input_type_e,l_dq,0,l_current_val);if(rc) return rc; +		 +		for (l_delay=1;(pass==0);l_delay++){ +	  +	 for (l_p=0;l_p<MAX_PORT;l_p++){ +	 for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) +    { +	 l_dq=0; +	 l_my_dqs=0; +	 rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[l_rank]; +		rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	 l_dq=4*l_n; +	 	 l_my_dqs=l_dqs_arr[l_n]; +	 //l_max=SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]; +	  +	  +	 if(schmoo_error_map[l_p][rank][l_n]==0){ +	  SHMOO[l_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_my_dqs][l_rp]=SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_my_dqs][l_rp]-l_delay; +	 rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_my_dqs,0,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_my_dqs][l_rp]);if(rc) return rc; +	 SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; +	 //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); +	 rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; +	  l_dq=l_dq+1; +	  SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; +	// FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); +	  rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; +	  l_dq=l_dq+1; +	  SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; +	 //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); +	  rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; +	  l_dq=l_dq+1; +	  SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; +	 //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); +	  rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; +	 } +	 if(SHMOO[l_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp] == 0){ +	 schmoo_error_map[l_p][rank][l_n] = 1; +	 } +	  +	  +	 +			}  +		} +			 +	 } +	 rc=do_mcbist_test(i_target); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); +		    return rc; +		} +		  +rc=check_error_map(i_target,l_p,pass); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); +		    return rc; +		}		 +		 +	 +	 } +		 +		 +	for (l_p=0;l_p<MAX_PORT;l_p++){ +	for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) +    { + +	 rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[l_rank]; +		rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	 rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);if(rc) return rc; +	  +			}  +		} +		} +		 +		for(int l_bit=0;l_bit<4;l_bit++){ +		for (l_p=0;l_p<MAX_PORT;l_p++){ +	for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) +    { +	 l_dq=l_bit; +	 rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[l_rank]; +		rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	 rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc; +	 l_dq=l_dq+4; +			}  +		} +	 } +	} +	 } +	   	} -    } +     +    return rc;	 +} +fapi::ReturnCode generic_shmoo::knob_update_dqs_by8(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag) +{	 +    fapi::ReturnCode rc; +    ecmdDataBufferBase data_buffer_64(64); +    ecmdDataBufferBase data_buffer_64_1(64); +     +     +     +    uint8_t  l_rp=0; +    input_type_t l_input_type_e = WR_DQ; +	input_type_t l_input_type_e_dqs = WR_DQS; +    uint8_t l_dq=0; +	uint8_t l_dqs=0; +    access_type_t l_access_type_e = WRITE; +	uint8_t l_n=0; +	uint8_t l_scen_dqs=4; +	 +	 +	uint8_t l_p=0; +    uint16_t l_delay=0; +    //uint32_t l_max=0; +	uint16_t l_max_limit=500; +    uint8_t rank=0; +	uint8_t l_rank=0; +	//uint8_t l_SCHMOO_BYTES=10; +	uint8_t l_SCHMOO_NIBBLES=20; +	 +	uint8_t i_rp=0; +	 +	 +	 +			 +		rc=do_mcbist_test(i_target); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); +		    return rc; +		} +		 +		rc=check_error_map(i_target,l_p,pass); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); +		    return rc; +		}		 +	 +	if(iv_dmm_type==1) +    { +	//l_SCHMOO_BYTES=9; +	l_SCHMOO_NIBBLES=18; +	} +    //rc = mss_getrankpair(i_target,iv_port,rank,&l_rp,valid_rank);if(rc) return rc;  +	 +	for (l_p=0;l_p<MAX_PORT;l_p++){ +	for(int i=0;i<iv_MAX_RANKS[l_p];i++){ +	rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[i]; +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	 schmoo_error_map[l_p][rank][l_n]=0; +	 } +	 } +	 } +	 +     +	 +     +	 +     +    if(bound==RIGHT) +    { +         +	if(algorithm==SEQ_LIN) +        { +		 +	 +	 for (l_delay=1;((pass==0));l_delay++){ +	  +	 //for (l_p=0;l_p<MAX_PORT;l_p++){ +	 for (l_p=0;l_p<MAX_PORT;l_p++){ +	 for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) +    { +	 l_dq=0; +	 l_dqs=0; +	 rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[l_rank]; +		rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; +		//FAPI_INF("\n abhijit here after  port=%d rank=%d \n",l_p,rank); +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	 l_dq=4*l_n; +	 if((schmoo_error_map[l_p][rank][l_n]==0)&&(schmoo_error_map[l_p][rank][l_n+1]==0)){ +	 //FAPI_INF("\n value of nominal delay scenario=%d rank=%d for port=%d dqs=%d is %d ",l_scen_dqs,rank,l_p,l_n,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]); +	 SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_n][l_rp]=SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]+l_delay; +	 //FAPI_INF("\n value of delay scenario=%d rank=%d for port=%d dqs=%d is %d ",l_scen_dqs,rank,l_p,l_n,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_n][l_rp]); +	 rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_n][l_rp]);if(rc) return rc; +	 SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; +	 //FAPI_INF("\n value of delay scenario=%d rank=%d for port=%d bit=%d is %d ",scenario,rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); +	 rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; +	  l_dq=l_dq+1; +	  SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; +	 //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); +	  rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; +	  l_dq=l_dq+1; +	  SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; +	 //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); +	  rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; +	  l_dq=l_dq+1; +	  SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; +	 //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); +	  rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; +	 l_dq=l_dq+1; +	  SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; +	 //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); +	  rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; +	  l_dq=l_dq+1; +	  SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; +	 //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); +	  rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; +	  l_dq=l_dq+1; +	  SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; +	 //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); +	  rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; +	  l_dq=l_dq+1; +	  SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; +	 //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); +	  rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; +	   +	 } +	 //FAPI_INF("\n abhijit here before \n"); +	 if(SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]>l_max_limit){ +	 schmoo_error_map[l_p][rank][l_n]=1; +	 schmoo_error_map[l_p][rank][l_n+1]=1; +	 } +		if((schmoo_error_map[l_p][rank][l_n]==1)||(schmoo_error_map[l_p][rank][l_n+1]==1)){ +		 +		schmoo_error_map[l_p][rank][l_n]=1; +	 schmoo_error_map[l_p][rank][l_n+1]=1; +	 } +		 +		l_n=l_n+1; +		l_dqs=l_dqs+1; +		}  +		 +		 +	} +		 +	 } +	 rc=do_mcbist_test(i_target); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); +		    return rc; +		} +		 +		rc=check_error_map(i_target,l_p,pass); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); +		    return rc; +		}		 -    else if(bound==RIGHT) +	 } +		 +		 +	for (l_p=0;l_p<MAX_PORT;l_p++){ +	for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) +    { + +	 rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[l_rank]; +		rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	 //FAPI_INF("\n restoring nominal values for dqs=%d port=%d rank=%d is %d \n",l_n,l_p,rank,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]); +	 rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);if(rc) return rc; +	  +			}  +		} +		} +		 +		for(int l_bit=0;l_bit<4;l_bit++){ +		for (l_p=0;l_p<MAX_PORT;l_p++){ +	for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) +    { +	 l_dq=l_bit; +	 rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[l_rank]; +		rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	 rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc; +	 l_dq=l_dq+4; +			}  +		} +	 } +	} +		 +		 +		 +	 } +		 +	} + 	 +    if(bound==LEFT)      { -                   if(algorithm==SEQ_LIN) -         { -	    l_max_value=SHMOO[scenario].static_knob.max_val; -	    for(l_current_val=SHMOO[scenario].MBA.P[iv_port].S[rank].K.nom_val[l_dq][l_rp];((l_current_val<l_max_value)&&(pass==1));l_current_val+=100) -	    { -		    //use saurabh function for writing here  -		    FAPI_INF("  curr val  = %d ",l_current_val); -		    rc=mss_access_delay_reg(i_target,l_access_type_e,iv_port,0,l_input_type_e,l_dq,0,l_current_val);if(rc) return rc; -		     -		    rc=do_mcbist_test(i_target,rank,byte,nibble,pass); -		    if(rc) -		    {    -			FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); +        { +		 +		for (l_delay=1;(pass==0);l_delay++){ +	  +	 for (l_p=0;l_p<MAX_PORT;l_p++){ +	 for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) +    { +	 l_dq=0; +	 l_dqs=0; +	 rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[l_rank]; +		rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	 l_dq=4*l_n; +	 //l_max=SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]; +	  +	  +	 if((schmoo_error_map[l_p][rank][l_n]==0)&&(schmoo_error_map[l_p][rank][l_n+1]==0)){ +	  SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_n][l_rp]=SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]-l_delay; +	 rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_n][l_rp]);if(rc) return rc; +	 SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; +	 //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); +	 rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; +	  l_dq=l_dq+1; +	  SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; +	 //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); +	  rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; +	  l_dq=l_dq+1; +	  SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; +	 //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); +	  rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; +	  l_dq=l_dq+1; +	  SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; +	 //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); +	  rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; +	  l_dq=l_dq+1; +	  SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; +	 //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); +	  rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; +	  l_dq=l_dq+1; +	  SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; +	 //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); +	  rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; +	  l_dq=l_dq+1; +	  SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; +	 //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); +	  rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; +	  l_dq=l_dq+1; +	  SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; +	 //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); +	  rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; +	 } +	 if(SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp] == 0){ +	 schmoo_error_map[l_p][rank][l_n] = 1; +	 schmoo_error_map[l_p][rank][l_n+1] = 1; +	 } +	  +	 if((schmoo_error_map[l_p][rank][l_n]==1)||(schmoo_error_map[l_p][rank][l_n+1]==1)){ +		 +		schmoo_error_map[l_p][rank][l_n]=1; +	 schmoo_error_map[l_p][rank][l_n+1]=1; +	 } +	  +	l_n=l_n+1; +	l_dqs=l_dq+1; +			}  +		} +			 +	 } +	 rc=do_mcbist_test(i_target); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed");  		    return rc; -		    } -	    } -	    if(!pass) -	    { -		SHMOO[scenario].MBA.P[iv_port].S[rank].K.rb_regval[l_dq][l_rp]=l_current_val; -	    } -	    l_current_val=SHMOO[scenario].MBA.P[iv_port].S[rank].K.nom_val[l_dq][l_rp]; +		} +		  +rc=check_error_map(i_target,l_p,pass); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); +		    return rc; +		}		 -	    rc=mss_access_delay_reg(i_target,l_access_type_e,iv_port,0,l_input_type_e,l_dq,0,l_current_val);if(rc) return rc; -	    FAPI_INF("  right bound = %d  ",SHMOO[scenario].MBA.P[iv_port].S[rank].K.rb_regval[l_dq][l_rp]); -        } +	 +	 } +		 +		 +	for (l_p=0;l_p<MAX_PORT;l_p++){ +	for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) +    { + +	 rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[l_rank]; +		rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	 //FAPI_INF("\n restoring nominal values for dqs=%d port=%d rank=%d is %d \n",l_n,l_p,rank,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]); +	 rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);if(rc) return rc; +	  +			}  +		} +		} +		 +		for(int l_bit=0;l_bit<4;l_bit++){ +		for (l_p=0;l_p<MAX_PORT;l_p++){ +	for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) +    { +	 l_dq=l_bit; +	 rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[l_rank]; +		rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	 rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc; +	 l_dq=l_dq+4; +			}  +		} +	 } +	} +	 } +	  -    } -    return rc; +	} +     +    return rc;	  } -*/ +fapi::ReturnCode generic_shmoo::knob_update_dqs_by8_isdimm(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag) +{	 +    fapi::ReturnCode rc; +    ecmdDataBufferBase data_buffer_64(64); +    ecmdDataBufferBase data_buffer_64_1(64); +     +     +     +    uint8_t  l_rp=0; +    input_type_t l_input_type_e = WR_DQ; +	input_type_t l_input_type_e_dqs = WR_DQS; +    uint8_t l_dq=0; +	uint8_t l_dqs=0; +    access_type_t l_access_type_e = WRITE; +	uint8_t l_n=0; +	uint8_t l_scen_dqs=4; +	 +	 +	uint8_t l_p=0; +    uint16_t l_delay=0; +    //uint32_t l_max=0; +	uint16_t l_max_limit=500; +    uint8_t rank=0; +	uint8_t l_rank=0; +	//uint8_t l_SCHMOO_BYTES=10; +	uint8_t l_SCHMOO_NIBBLES=20; +	 +	uint8_t i_rp=0; +	 +	rc=do_mcbist_test(i_target); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); +		    return rc; +		} +		 +		rc=check_error_map(i_target,l_p,pass); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); +		    return rc; +		}		 +	 +	if(iv_dmm_type==1) +    { +	//l_SCHMOO_BYTES=9; +	l_SCHMOO_NIBBLES=18; +	} +    //rc = mss_getrankpair(i_target,iv_port,rank,&l_rp,valid_rank);if(rc) return rc;  +	 +	for (l_p=0;l_p<MAX_PORT;l_p++){ +	for(int i=0;i<iv_MAX_RANKS[l_p];i++){ +	rc = mss_getrankpair(i_target,l_p,0,&i_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[i]; +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	 schmoo_error_map[l_p][rank][l_n]=0; +	 } +	 } +	 } +	 +     +	 +     +    if(bound==RIGHT) +    { +         +	if(algorithm==SEQ_LIN) +        { +		 +	 +	 for (l_delay=1;((pass==0));l_delay++){ +	  +	 for (l_p=0;l_p<MAX_PORT;l_p++){ +	 for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) +    { +	 l_dq=0; +	 l_dqs=0; +	 rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[l_rank]; +		rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; +		//FAPI_INF("\n abhijit here after  port=%d rank=%d \n",l_p,rank); +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	 l_dq=4*l_n; +	 l_dqs=l_n/2; +	 //FAPI_INF("\n the value of error check is %d \n",schmoo_error_map[l_p][rank][l_n]); +	 if((schmoo_error_map[l_p][rank][l_n]==0)&&(schmoo_error_map[l_p][rank][l_n+1]==0)){ +	 //FAPI_INF("\n value of nominal delay scenario=%d rank=%d for port=%d dqs=%d is %d ",l_scen_dqs,rank,l_p,l_dqs,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_dqs][l_rp]); +	 SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_dqs][l_rp]=SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_dqs][l_rp]+l_delay; +	 //FAPI_INF("\n value of delay scenario=%d rank=%d for port=%d dqs=%d is %d ",l_scen_dqs,rank,l_p,l_dqs,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_dqs][l_rp]); +	 rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_dqs,0,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_dqs][l_rp]);if(rc) return rc; +	 SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; +	 //FAPI_INF("\n value of delay scenario=%d rank=%d for port=%d bit=%d is %d ",scenario,rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); +	 rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; +	  l_dq=l_dq+1; +	  SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; +	 //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); +	  rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; +	  l_dq=l_dq+1; +	  SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; +	 //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); +	  rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; +	  l_dq=l_dq+1; +	  SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; +	 //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); +	  rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; +	 l_dq=l_dq+1; +	  SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; +	 //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); +	  rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; +	  l_dq=l_dq+1; +	  SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; +	 //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); +	  rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; +	  l_dq=l_dq+1; +	  SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; +	 //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); +	  rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; +	  l_dq=l_dq+1; +	  SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]+l_delay; +	 //FAPI_INF("\n value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]); +	  rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.rb_regval[l_dq][l_rp]);if(rc) return rc; +	   +	 } +	 //FAPI_INF("\n abhijit here before \n"); +	 if(SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.rb_regval[l_dqs][l_rp]>l_max_limit){ +	 +	 schmoo_error_map[l_p][rank][l_n]=1; +	 schmoo_error_map[l_p][rank][l_n+1]=1; +	 } +	  +	 if((schmoo_error_map[l_p][rank][l_n]==1)||(schmoo_error_map[l_p][rank][l_n+1]==1)){ +		 +		schmoo_error_map[l_p][rank][l_n]=1; +	 schmoo_error_map[l_p][rank][l_n+1]=1; +	 } +		 +		l_n=l_n+1; +		 +		}  +		 +		 +	} +		 +	 } +	 rc=do_mcbist_test(i_target); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); +		    return rc; +		} +		 +		rc=check_error_map(i_target,l_p,pass); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); +		    return rc; +		}		 +	 +	 } +		 +		 +	for (l_p=0;l_p<MAX_PORT;l_p++){ +	for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) +    { + +	 rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[l_rank]; +		rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	 //FAPI_INF("\n restoring nominal values for dqs=%d port=%d rank=%d is %d \n",l_n,l_p,rank,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]); +	 rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);if(rc) return rc; +	  +			}  +		} +		} +		 +		for(int l_bit=0;l_bit<4;l_bit++){ +		for (l_p=0;l_p<MAX_PORT;l_p++){ +	for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) +    { +	 l_dq=l_bit; +	 rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[l_rank]; +		rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	 rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc; +	 l_dq=l_dq+4; +			}  +		} +	 } +	} +		 +		 +		 +	 } +		 +	} + 	 +    if(bound==LEFT) +    { +        if(algorithm==SEQ_LIN) +        { +		 +		for (l_delay=1;(pass==0);l_delay++){ +	  +	 for (l_p=0;l_p<MAX_PORT;l_p++){ +	 for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) +    { +	 l_dq=0; +	 l_dqs=0; +	 rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[l_rank]; +		rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	 l_dq=4*l_n; +	// l_max=SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]; +	 l_dqs=l_n/2; +	  +	 if((schmoo_error_map[l_p][rank][l_n]==0)&&(schmoo_error_map[l_p][rank][l_n+1]==0)){ +	  SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_dqs][l_rp]=SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_dqs][l_rp]-l_delay; +	 rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_dqs,0,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_dqs][l_rp]);if(rc) return rc; +	 SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; +	 //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); +	 rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; +	  l_dq=l_dq+1; +	  SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; +	 //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); +	  rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; +	  l_dq=l_dq+1; +	  SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; +	 //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); +	  rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; +	  l_dq=l_dq+1; +	  SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; +	 //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); +	  rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; +	  l_dq=l_dq+1; +	  SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; +	 //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); +	  rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; +	  l_dq=l_dq+1; +	  SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; +	 //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); +	  rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; +	  l_dq=l_dq+1; +	  SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; +	 //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); +	  rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; +	  l_dq=l_dq+1; +	  SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]=SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]-l_delay; +	 //FAPI_INF("\n left value of delay rank=%d for port=%d bit=%d is %d ",rank,l_p,l_dq,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]); +	  rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.lb_regval[l_dq][l_rp]);if(rc) return rc; +	 } +	 if(SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.lb_regval[l_dqs][l_rp] == 0){ +	 schmoo_error_map[l_p][rank][l_n] = 1; +	 schmoo_error_map[l_p][rank][l_n+1] = 1; +	 } +	  +	 if((schmoo_error_map[l_p][rank][l_n]==1)||(schmoo_error_map[l_p][rank][l_n+1]==1)){ +		 +		schmoo_error_map[l_p][rank][l_n]=1; +	 schmoo_error_map[l_p][rank][l_n+1]=1; +	 } +	  +	l_n=l_n+1; +	 +			}  +		} +			 +	 } +	 rc=do_mcbist_test(i_target); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); +		    return rc; +		} +		  +rc=check_error_map(i_target,l_p,pass); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_test failed"); +		    return rc; +		}		 +		 +	 +	 } +		 +		 +	for (l_p=0;l_p<MAX_PORT;l_p++){ +	for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) +    { + +	 rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[l_rank]; +		rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	 rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e_dqs,l_n,0,SHMOO[l_scen_dqs].MBA.P[l_p].S[rank].K.nom_val[l_n][l_rp]);if(rc) return rc; +	  +			}  +		} +		} +		 +		for(int l_bit=0;l_bit<4;l_bit++){ +		for (l_p=0;l_p<MAX_PORT;l_p++){ +	for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) +    { +	 l_dq=l_bit; +	 rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[l_rank]; +		rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	 rc=mss_access_delay_reg(i_target,l_access_type_e,l_p,rank,l_input_type_e,l_dq,0,SHMOO[scenario].MBA.P[l_p].S[rank].K.nom_val[l_dq][l_rp]);if(rc) return rc; +	 l_dq=l_dq+4; +			}  +		} +	 } +	} +	 } +	  +	     +	} +     +    return rc;	 +} +  /*------------------------------------------------------------------------------   * Function: find_bound   * Description  : This function calls the knob_update for each DQ which is used to find bound  that is left/right according to schmoo type @@ -905,32 +3714,68 @@ fapi::ReturnCode generic_shmoo::knob_update_dqs(const fapi::Target & i_target,bo   * Parameters: Target:MBA,bound:RIGHT/LEFT,   * ---------------------------------------------------------------------------*/  fapi::ReturnCode generic_shmoo::find_bound(const fapi::Target & i_target,bound_t bound){ -    uint8_t l_bit; +    uint8_t l_bit=0;      fapi::ReturnCode rc;  	uint8_t pass=0; +	uint8_t l_dram_width=0;      bool flag=false; +    rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_WIDTH, &i_target, l_dram_width); if(rc) return rc; +	FAPI_INF("\n SCHMOO IS IN PROGRESS ...... \n"); +   // FAPI_INF("generic_shmoo::find_bound running find_bound function "); -    FAPI_INF("generic_shmoo::find_bound running find_bound function "); -     -         -                 -                     -		    //Bit loop +        //rc=knob_update_dqs_by8_isdimm(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc; +              if(iv_DQS_ON == 1){ +			  rc=do_mcbist_reset(i_target); +		if(rc) +		{    +		    FAPI_ERR("generic_shmoo::find_bound do_mcbist_reset failed"); +		    return rc; +		} +			  pass=0; +			  if(l_dram_width == 4){ +			  if(iv_dmm_type==1) +    { +	rc=knob_update_dqs_by4_isdimm(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc;  +	}else{ +			  rc=knob_update_dqs_by4(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc;  +			  } +              }else{ +			  if(iv_dmm_type==1) +    { +	rc=knob_update_dqs_by8_isdimm(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc; +	}else{ +			   rc=knob_update_dqs_by8(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc; +			   //rc=knob_update_dqs_by8_isdimm(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc; +			   } +			   } +				}else if(iv_DQS_ON == 2){ +				pass=0; +				rc=knob_update_gate(i_target,bound,iv_shmoo_type,pass,flag); if(rc) return rc;  +				} +				else{ +			//Bit loop                      for(l_bit=0;l_bit< MAX_BITS;++l_bit)                      {  			// preetham function here  			pass=0; -			//FAPI_INF("\n abhijit is inside find bound 0 \n"); -			rc=knob_update(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc;    -                     +			//FAPI_INF("\n abhijit is inside find bound and schmoo type is %d \n",iv_shmoo_type); +			 +			//rc=knob_update(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc;    +            //////////////////////////////////////////////////////////////////////////////////// +			if(iv_shmoo_param==4){ +			rc=knob_update_bin(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc; 	 +				}else{ +				rc=knob_update(i_target,bound,iv_shmoo_type,l_bit,pass,flag); if(rc) return rc; +				} +					                  } -             +            }      return rc;  } @@ -956,6 +3801,7 @@ fapi::ReturnCode generic_shmoo::print_report(const fapi::Target & i_target)      uint8_t l_attr_eff_dimm_type_u8 = 0;      uint8_t l_attr_eff_num_drops_per_port_u8 = 0;      uint8_t l_attr_eff_dram_width_u8 = 0; +	      fapi::Target l_target_centaur; @@ -967,6 +3813,8 @@ fapi::ReturnCode generic_shmoo::print_report(const fapi::Target & i_target)      rc = FAPI_ATTR_GET(ATTR_EFF_NUM_DROPS_PER_PORT, &i_target, l_attr_eff_num_drops_per_port_u8); if(rc) return rc;      rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_WIDTH, &i_target, l_attr_eff_dram_width_u8); if(rc) return rc;      rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, &i_target, l_mbapos);if(rc) return rc; +     +         FAPI_INF("      freq = %d on %s.", l_attr_mss_freq_u32, l_target_centaur.toEcmdString());      FAPI_INF("volt = %d on %s.", l_attr_mss_volt_u32, l_target_centaur.toEcmdString()); @@ -979,13 +3827,20 @@ fapi::ReturnCode generic_shmoo::print_report(const fapi::Target & i_target)      {  	FAPI_INF("It is an ISDIMM");       } +	FAPI_INF("\n Number of ranks on port = 0 is %d ",iv_MAX_RANKS[0]); +	FAPI_INF("\n Number of ranks on port = 1 is %d \n \n",iv_MAX_RANKS[1]); +	      //FAPI_INF("num_drops_per_port = %d on %s.", l_attr_eff_num_drops_per_port_u8, i_target.toEcmdString());      //FAPI_INF("num_ranks  = %d on %s.", iv_MAX_RANKS,i_target.toEcmdString());      //FAPI_INF("dram_width = %d on %s. \n\n", l_attr_eff_dram_width_u8, i_target.toEcmdString());      FAPI_INF("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); +	//// Based on schmoo param the print will change eventually  +	if(iv_shmoo_type==2) +			    {      FAPI_INF("Schmoo  POS\tPort\tRank\tByte\tnibble\tbit\tNominal\t\tSetup_Limit\tHold_Limit\tWrD_Setup(ps)\tWrD_Hold(ps)\tEye_Width(ps)\tBitRate\tVref_Multiplier  "); -     -     +    }else{ +	FAPI_INF("Schmoo  POS\tPort\tRank\tByte\tnibble\tbit\tNominal\t\tSetup_Limit\tHold_Limit\tRdD_Setup(ps)\tRdD_Hold(ps)\tEye_Width(ps)\tBitRate\tVref_Multiplier  "); +    }  		for (l_p=0;l_p<MAX_PORT;l_p++){ @@ -1003,13 +3858,13 @@ fapi::ReturnCode generic_shmoo::print_report(const fapi::Target & i_target)  			{	  			    l_dq=8*l_byte+4*l_nibble+l_bit; -			    if(iv_shmoo_type==0) +			    if(iv_shmoo_type==2)  			    { -				FAPI_INF("WR_EYE %d\t%d\t%d\t%d\t%d\t%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n ",l_mbapos,l_p,i_rank,l_byte,l_nibble,l_bit,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.total_margin[l_dq][l_rp],l_attr_mss_freq_u32,iv_shmoo_param); +				FAPI_INF("WR_EYE %d\t%d\t%d\t%d\t%d\t%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n ",l_mbapos,l_p,i_rank,l_byte,l_nibble,l_bit,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.total_margin[l_dq][l_rp],l_attr_mss_freq_u32,iv_vref_mul);  			    } -			    if(iv_shmoo_type==2) +			    if(iv_shmoo_type==8)  			    { -				FAPI_INF("RD_EYE %d\t%d\t%d\t%d\t%d\t%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n ",l_mbapos,l_p,i_rank,l_byte,l_nibble,l_bit,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.total_margin[l_dq][l_rp],l_attr_mss_freq_u32,iv_shmoo_param); +				FAPI_INF("RD_EYE %d\t%d\t%d\t%d\t%d\t%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n ",l_mbapos,l_p,i_rank,l_byte,l_nibble,l_bit,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.total_margin[l_dq][l_rp],l_attr_mss_freq_u32,iv_vref_mul);  			    }  			} @@ -1020,6 +3875,208 @@ fapi::ReturnCode generic_shmoo::print_report(const fapi::Target & i_target)      return rc;   } +  +  + fapi::ReturnCode generic_shmoo::print_report_dqs(const fapi::Target & i_target) +{ +    fapi::ReturnCode rc; +     +    uint8_t l_rnk,l_nibble; +    //uint8_t l_dq=0; +    uint8_t l_rp=0; +	uint8_t l_p=0; +    uint8_t i_rank=0; +    uint8_t l_mbapos = 0; +    uint32_t l_attr_mss_freq_u32 = 0; +    uint32_t l_attr_mss_volt_u32 = 0; +    uint8_t l_attr_eff_dimm_type_u8 = 0; +    uint8_t l_attr_eff_num_drops_per_port_u8 = 0; +    uint8_t l_attr_eff_dram_width_u8 = 0; +    fapi::Target l_target_centaur; +    uint8_t l_SCHMOO_NIBBLES=20; +	uint8_t l_by8_dqs=0; +	 +	 +	if(iv_dmm_type==1) +    { +	l_SCHMOO_NIBBLES=18; +	} +     +    rc = fapiGetParentChip(i_target, l_target_centaur); if(rc) return rc; +    +    rc = FAPI_ATTR_GET(ATTR_MSS_FREQ, &l_target_centaur, l_attr_mss_freq_u32); if(rc) return rc; +    rc = FAPI_ATTR_GET(ATTR_MSS_VOLT, &l_target_centaur, l_attr_mss_volt_u32); if(rc) return rc; +    rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_TYPE, &i_target, l_attr_eff_dimm_type_u8); if(rc) return rc; +    rc = FAPI_ATTR_GET(ATTR_EFF_NUM_DROPS_PER_PORT, &i_target, l_attr_eff_num_drops_per_port_u8); if(rc) return rc; +    rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_WIDTH, &i_target, l_attr_eff_dram_width_u8); if(rc) return rc; +    rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, &i_target, l_mbapos);if(rc) return rc; +    +   if(l_attr_eff_dram_width_u8 == 8){ +   l_SCHMOO_NIBBLES=10; +   if(iv_dmm_type==1) +    { +	l_SCHMOO_NIBBLES=9; +	} +   } +    +   //FAPI_INF("Shmoonibbles val is=%d",l_SCHMOO_NIBBLES); +    +    FAPI_INF("      freq = %d on %s.", l_attr_mss_freq_u32, l_target_centaur.toEcmdString()); +    FAPI_INF("volt = %d on %s.", l_attr_mss_volt_u32, l_target_centaur.toEcmdString()); +    FAPI_INF("dimm_type = %d on %s.", l_attr_eff_dimm_type_u8, i_target.toEcmdString()); +	FAPI_INF("\n Number of ranks on port=0 is %d ",iv_MAX_RANKS[0]); +	FAPI_INF("\n Number of ranks on port=1 is %d ",iv_MAX_RANKS[1]); +	 +	 +    if ( l_attr_eff_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_CDIMM ) +    { +	FAPI_INF("It is a CDIMM");  +    } +    else +    { +	FAPI_INF("It is an ISDIMM");  +    } +	 +	FAPI_INF("\n Number of ranks on port=0 is %d ",iv_MAX_RANKS[0]); +	FAPI_INF("\n Number of ranks on port=1 is %d \n \n",iv_MAX_RANKS[1]); +    //FAPI_INF("num_drops_per_port = %d on %s.", l_attr_eff_num_drops_per_port_u8, i_target.toEcmdString()); +    //FAPI_INF("num_ranks  = %d on %s.", iv_MAX_RANKS,i_target.toEcmdString()); +    //FAPI_INF("dram_width = %d on %s. \n\n", l_attr_eff_dram_width_u8, i_target.toEcmdString()); +	//fprintf(fp, "Schmoo  POS\tPort\tRank\tDQS\tNominal\t\tSetup_Limit\tHold_Limit\tWrD_Setup(ps)\tWrD_Hold(ps)\tEye_Width(ps)\tBitRate  \n"); +    FAPI_INF("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); +    FAPI_INF("Schmoo  POS\tPort\tRank\tDQS\tNominal\t\ttDQSSmin_PR_limit\ttDQSSmax_PR_limit\ttDQSSmin(ps)\ttDQSSmax(ps)\ttDQSS_Window(ps)\tBitRate  "); +     +    iv_shmoo_type=4; +         +	     +		for (l_p=0;l_p<MAX_PORT;l_p++){ +		for (l_rnk=0;l_rnk<iv_MAX_RANKS[l_p];++l_rnk) +	    {			rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; +					    i_rank=valid_rank[l_rnk]; +			    rc = mss_getrankpair(i_target,l_p,i_rank,&l_rp,valid_rank);if(rc) return rc; +		 +		    for(l_nibble=0;l_nibble< l_SCHMOO_NIBBLES;++l_nibble) +		    { +				 +			   l_by8_dqs=l_nibble; +			   if(iv_dmm_type==0) +			   { +			    if(l_attr_eff_dram_width_u8 == 8) +			    { +				l_nibble=l_nibble*2; +			    } +			   } +			/*if(l_attr_eff_dram_width_u8 == 8){ +			l_by8_dqs=l_nibble*2; +			 +			} */ +			  //fprintf(fp,"WR_DQS %d\t%d\t%d\t%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n ",l_mbapos,l_p,i_rank,l_nibble,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.total_margin[l_by8_dqs][l_rp],l_attr_mss_freq_u32); +				FAPI_INF("WR_DQS %d\t%d\t%d\t%d\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\t\t%d\n ",l_mbapos,l_p,i_rank,l_nibble,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_nibble][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_nibble][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_by8_dqs][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.total_margin[l_by8_dqs][l_rp],l_attr_mss_freq_u32); +			     +			     +			     +			 +		    } +		} +	    } +	 +    //fclose(fp); +    return rc; + } +   fapi::ReturnCode generic_shmoo::print_report_gate(const fapi::Target & i_target) +{ +    fapi::ReturnCode rc; +     +    uint8_t l_rank,l_n; +    //uint8_t l_dq=0; +    uint8_t l_rp=0; +	uint8_t l_p=0; +    uint8_t rank=0; +    uint8_t l_mbapos = 0; +    uint32_t l_attr_mss_freq_u32 = 0; +    uint32_t l_attr_mss_volt_u32 = 0; +    uint8_t l_attr_eff_dimm_type_u8 = 0; +    uint8_t l_attr_eff_num_drops_per_port_u8 = 0; +    uint8_t l_attr_eff_dram_width_u8 = 0; +    fapi::Target l_target_centaur; +    uint8_t l_SCHMOO_NIBBLES=20; +	 +	 +	 +	if(iv_dmm_type==1) +    { +	l_SCHMOO_NIBBLES=18; +	} +     +    rc = fapiGetParentChip(i_target, l_target_centaur); if(rc) return rc; +    +    rc = FAPI_ATTR_GET(ATTR_MSS_FREQ, &l_target_centaur, l_attr_mss_freq_u32); if(rc) return rc; +    rc = FAPI_ATTR_GET(ATTR_MSS_VOLT, &l_target_centaur, l_attr_mss_volt_u32); if(rc) return rc; +    rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_TYPE, &i_target, l_attr_eff_dimm_type_u8); if(rc) return rc; +    rc = FAPI_ATTR_GET(ATTR_EFF_NUM_DROPS_PER_PORT, &i_target, l_attr_eff_num_drops_per_port_u8); if(rc) return rc; +    rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_WIDTH, &i_target, l_attr_eff_dram_width_u8); if(rc) return rc; +    rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, &i_target, l_mbapos);if(rc) return rc; +    +   if(l_attr_eff_dram_width_u8 == 8){ +   l_SCHMOO_NIBBLES=20; +   if(iv_dmm_type==1) +    { +	l_SCHMOO_NIBBLES=18; +	} +   } +    +   //FAPI_INF("Shmoonibbles val is=%d",l_SCHMOO_NIBBLES); +    +    FAPI_INF("      freq = %d on %s.", l_attr_mss_freq_u32, l_target_centaur.toEcmdString()); +    FAPI_INF("volt = %d on %s.", l_attr_mss_volt_u32, l_target_centaur.toEcmdString()); +    FAPI_INF("dimm_type = %d on %s.", l_attr_eff_dimm_type_u8, i_target.toEcmdString()); +	FAPI_INF("\n Number of ranks on port=0 is %d ",iv_MAX_RANKS[0]); +	FAPI_INF("\n Number of ranks on port=1 is %d ",iv_MAX_RANKS[1]); +	 +	 +    if ( l_attr_eff_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_CDIMM ) +    { +	FAPI_INF("It is a CDIMM");  +    } +    else +    { +	FAPI_INF("It is an ISDIMM");  +    } +	 +	FAPI_INF("\n Number of ranks on port=0 is %d ",iv_MAX_RANKS[0]); +	FAPI_INF("\n Number of ranks on port=1 is %d \n \n",iv_MAX_RANKS[1]); +    //FAPI_INF("num_drops_per_port = %d on %s.", l_attr_eff_num_drops_per_port_u8, i_target.toEcmdString()); +    //FAPI_INF("num_ranks  = %d on %s.", iv_MAX_RANKS,i_target.toEcmdString()); +    //FAPI_INF("dram_width = %d on %s. \n\n", l_attr_eff_dram_width_u8, i_target.toEcmdString()); +	//fprintf(fp, "Schmoo  POS\tPort\tRank\tDQS\tNominal\t\tSetup_Limit\tHold_Limit\tWrD_Setup(ps)\tWrD_Hold(ps)\tEye_Width(ps)\tBitRate  \n"); +    FAPI_INF("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"); +    FAPI_INF("Schmoo  POS\tPort\tRank\tNIBBLE\tOFFSET\tBitRate  "); +     +         +		for (l_p=0;l_p<MAX_PORT;l_p++){ +	 for (l_rank=0;l_rank<iv_MAX_RANKS[l_p];++l_rank) +    { +	 +	 rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; +		rank=valid_rank[l_rank]; +		rc = mss_getrankpair(i_target,l_p,rank,&l_rp,valid_rank);if(rc) return rc; +	 for (l_n=0; l_n<l_SCHMOO_NIBBLES;l_n++){ +	  +	  +	 //FAPI_INF("\n schmoo=%d port=%d rank=%d and nibble=%d and value=%d ",iv_shmoo_type,l_p,rank,l_n,SHMOO[iv_shmoo_type].MBA.P[l_p].S[rank].K.offset[l_n]); +	 FAPI_INF("RD_DQS %d\t%d\t%d\t%d\t%d\t\t%d\n ",l_mbapos,l_p,rank,l_n,SHMOO[iv_shmoo_type].MBA.P[l_p].S[rank].K.offset[l_n],l_attr_mss_freq_u32); +	 //rc=get_error_cnt(i_target,l_p,rank,l_rp,l_dq,bound); +	  +			}  +		 +		 +	} +		 +	 } +	     +    return rc; + } +  //#endif  /*------------------------------------------------------------------------------   * Function: get_margin @@ -1070,7 +4127,7 @@ fapi::ReturnCode generic_shmoo::get_margin(const fapi::Target & i_target)  			{  			    l_dq=8*l_byte+4*l_nibble+l_bit;  			    //FAPI_INF("  the right bound = %d and nominal = %d",SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_dq][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_dq][l_rp]); -				if(iv_shmoo_type==2) +				if(iv_shmoo_type==8)  			    {  				if(SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp] == 0){  				//FAPI_INF("\n abhijit saurabh is here and dq=%d \n",l_dq); @@ -1078,9 +4135,11 @@ fapi::ReturnCode generic_shmoo::get_margin(const fapi::Target & i_target)  				SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp]-2;  				//FAPI_INF("\n the value of left bound after is %d \n",SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp]);  				} -				} +				}  +				  				SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_dq][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_dq][l_rp]-1;  				SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp]+1; +				  			    SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_dq][l_rp]=((SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_dq][l_rp]-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_dq][l_rp])*l_factor)/l_factor_ps;                              SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_dq][l_rp]= ((SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_dq][l_rp]-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_dq][l_rp])*l_factor)/l_factor_ps;//((1/uint32_t_freq*1000000)/128);  			    SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.total_margin[l_dq][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_dq][l_rp]+SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_dq][l_rp]; @@ -1093,6 +4152,146 @@ fapi::ReturnCode generic_shmoo::get_margin(const fapi::Target & i_target)      return rc;   } + fapi::ReturnCode generic_shmoo::get_margin_dqs_by4(const fapi::Target & i_target) +{ +    fapi::ReturnCode rc; +    uint8_t l_rnk; +    uint32_t l_attr_mss_freq_margin_u32 = 0; +    uint32_t l_freq=0; +	uint64_t l_cyc = 1000000000000000ULL; +   // uint8_t l_dq=0; +	uint8_t l_nibble=0; +    uint8_t  l_rp=0; +	uint8_t  l_p=0; +    uint8_t i_rank=0; +    uint64_t l_factor=0; +	uint64_t l_factor_ps=1000000000; +	uint8_t l_SCHMOO_NIBBLES=20; +	 +	if(iv_dmm_type==1) +    { +	l_SCHMOO_NIBBLES=18; +	} +     +	//FAPI_INF("   the factor is % llu ",l_cyc); +     +    fapi::Target l_target_centaur; +    rc = fapiGetParentChip(i_target, l_target_centaur); if(rc) return rc; +    rc = FAPI_ATTR_GET(ATTR_MSS_FREQ, &l_target_centaur, l_attr_mss_freq_margin_u32); if(rc) return rc; +    l_freq=l_attr_mss_freq_margin_u32/2; +    l_cyc=l_cyc/l_freq;// converting to zepto to get more accurate data   +    l_factor=l_cyc/128; +	//FAPI_INF("l_factor is % llu ",l_factor); +     +     +        	 +	     +		for (l_p=0;l_p<MAX_PORT;l_p++){ +		//FAPI_INF("\n Abhijit is here before %d \n",l_p);   +		for (l_rnk=0;l_rnk<iv_MAX_RANKS[l_p];++l_rnk) +	    { +		 +		rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; +		i_rank=valid_rank[l_rnk]; +		rc = mss_getrankpair(i_target,l_p,i_rank,&l_rp,valid_rank);if(rc) return rc;  +		     +		    //Nibble loop +			// FAPI_INF("\n Abhijit is outside  %d \n",l_p);  +		    for(l_nibble=0;l_nibble<l_SCHMOO_NIBBLES;l_nibble++) +		    { +			//FAPI_INF("\n Abhijit 11111 is here after schmoo type=%d  and port=%d \n",iv_shmoo_type,l_p); +			//FAPI_INF("  the right bound = %d and nominal = %d",SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_nibble][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_nibble][l_rp]); +				SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_nibble][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_nibble][l_rp]-1; +				SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_nibble][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_nibble][l_rp]+1; +				SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_nibble][l_rp]=((SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_nibble][l_rp]-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_nibble][l_rp])*l_factor)/l_factor_ps; +                            SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_nibble][l_rp]= ((SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_nibble][l_rp]-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_nibble][l_rp])*l_factor)/l_factor_ps;//((1/uint32_t_freq*1000000)/128); +			    SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.total_margin[l_nibble][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_nibble][l_rp]+SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_nibble][l_rp]; +				//FAPI_INF("\n Abhijit is here after %d  and port=%d \n",l_nibble,l_p); +				//FAPI_INF("\n Abhijit is here after 2 %d \n",l_rnk);  +            } +           +			 +        } +		  +	    } +           +      +    return rc; + } +  + fapi::ReturnCode generic_shmoo::get_margin_dqs_by8(const fapi::Target & i_target) +{ +    fapi::ReturnCode rc; +    uint8_t l_rnk; +    uint32_t l_attr_mss_freq_margin_u32 = 0; +    uint32_t l_freq=0; +	uint64_t l_cyc = 1000000000000000ULL; +    //uint8_t l_dq=0; +	uint8_t l_nibble=0; +    uint8_t  l_rp=0; +	uint8_t  l_p=0; +    uint8_t i_rank=0; +    uint64_t l_factor=0; +	uint64_t l_factor_ps=1000000000; +	uint8_t l_SCHMOO_NIBBLES=20; +	 +	if(iv_dmm_type==1) +    { +	l_SCHMOO_NIBBLES=9; +	} +     +	//FAPI_INF("   the factor is % llu ",l_cyc); +     +    fapi::Target l_target_centaur; +    rc = fapiGetParentChip(i_target, l_target_centaur); if(rc) return rc; +    rc = FAPI_ATTR_GET(ATTR_MSS_FREQ, &l_target_centaur, l_attr_mss_freq_margin_u32); if(rc) return rc; +    l_freq=l_attr_mss_freq_margin_u32/2; +    l_cyc=l_cyc/l_freq;// converting to zepto to get more accurate data   +    l_factor=l_cyc/128; +	//FAPI_INF("l_factor is % llu ",l_factor); +     +     +        	 +	     +		for (l_p=0;l_p<MAX_PORT;l_p++){ +		//FAPI_INF("\n Abhijit is here before %d \n",l_p);   +		for (l_rnk=0;l_rnk<iv_MAX_RANKS[l_p];++l_rnk) +	    { +		 +		rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; +		i_rank=valid_rank[l_rnk]; +		rc = mss_getrankpair(i_target,l_p,i_rank,&l_rp,valid_rank);if(rc) return rc;  +		     +		    //Nibble loop +			 //FAPI_INF("\n Abhijit is outside  %d \n",l_p);  +		    for(l_nibble=0;l_nibble<l_SCHMOO_NIBBLES;l_nibble++) +		    { +			if(iv_dmm_type==0) +			{ +				if((l_nibble%2)){ +				continue ; +				} +			} +			//FAPI_INF("\n Abhijit 11111 is here after schmoo type=%d  and port=%d \n",iv_shmoo_type,l_p); +			FAPI_INF("  the port=%d rank=%d byte=%d right bound = %d and nominal = %d",l_p,i_rank,l_nibble,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_nibble][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_nibble][l_rp]); +				FAPI_INF("  the port=%d rank=%d byte=%d left bound = %d and nominal = %d",l_p,i_rank,l_nibble,SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_nibble][l_rp],SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_nibble][l_rp]); +				SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_nibble][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_nibble][l_rp]-1; +				SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_nibble][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_nibble][l_rp]+1; +				SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_nibble][l_rp]=((SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.rb_regval[l_nibble][l_rp]-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_nibble][l_rp])*l_factor)/l_factor_ps; +                            SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_nibble][l_rp]= ((SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.nom_val[l_nibble][l_rp]-SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.lb_regval[l_nibble][l_rp])*l_factor)/l_factor_ps;//((1/uint32_t_freq*1000000)/128); +			    SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.total_margin[l_nibble][l_rp]=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_nibble][l_rp]+SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_nibble][l_rp]; +				//FAPI_INF("\n Abhijit is here after %d  and port=%d \n",l_nibble,l_p); +				//FAPI_INF("\n Abhijit is here after 2 %d \n",l_rnk);  +            } +           +			 +        } +		  +	    } +           +      +    return rc; + }  /*------------------------------------------------------------------------------   * Function: get_min_margin   * Description  : This function is used to get the minimum margin of all the schmoo margins   @@ -1105,10 +4304,13 @@ fapi::ReturnCode generic_shmoo::get_min_margin(const fapi::Target & i_target,uin      uint8_t l_rnk,l_byte,l_nibble,l_bit,i_rank;      uint16_t l_temp_right=4800;      uint16_t l_temp_left=4800; +	//uint16_t l_temp_right_nibble=4800; +    //uint16_t l_temp_left_nibble=4800;      uint8_t l_dq=0;      uint8_t l_rp=0;  	uint8_t l_p=0; - +	//uint32_t min_margin_nibble_right[MAX_PORT][MAX_RANK][MAX_BYTE][MAX_NIBBLES]; +	//uint32_t min_margin_nibble_left[MAX_PORT][MAX_RANK][MAX_BYTE][MAX_NIBBLES]; @@ -1124,6 +4326,8 @@ fapi::ReturnCode generic_shmoo::get_min_margin(const fapi::Target & i_target,uin  		    //Nibble loop  		    for(l_nibble=0;l_nibble< MAX_NIBBLES;++l_nibble)  		    { +			//l_temp_right_nibble=4800; +			//l_temp_left_nibble=4800;  			for(l_bit=0;l_bit< MAX_BITS;++l_bit)  			{	  			    l_dq=8*l_byte+4*l_nibble+l_bit; @@ -1135,7 +4339,26 @@ fapi::ReturnCode generic_shmoo::get_min_margin(const fapi::Target & i_target,uin  			    {  				l_temp_left=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_dq][l_rp];  			    } +				 +				 +				// if(SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_dq][l_rp]<l_temp_right_nibble) +			    // { +				// l_temp_right_nibble=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_dq][l_rp]; +			    // } +			    // if(SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_dq][l_rp]<l_temp_left_nibble) +			    // { +				// l_temp_left_nibble=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_dq][l_rp]; +			    // } +				 +				// min_margin_nibble_right[l_p][i_rank][l_byte][l_nibble]=l_temp_right_nibble; +				// min_margin_nibble_left[l_p][i_rank][l_byte][l_nibble]=l_temp_left_nibble; +				 +				//FAPI_INF("\n the minimum right margin for port=%d rank=%d byte=%d nibble=%d is %d \n",l_p,i_rank,l_byte,l_nibble,l_temp_right_nibble); +				//FAPI_INF("\n the minimum left margin for port=%d rank=%d byte=%d nibble=%d is %d \n",l_p,i_rank,l_byte,l_nibble,l_temp_left_nibble); +				                          } +						 +						                      }                  }  				} @@ -1143,125 +4366,135 @@ fapi::ReturnCode generic_shmoo::get_min_margin(const fapi::Target & i_target,uin      // hacked for now till schmoo is running  +	if(iv_shmoo_type==8) +	{ +		*o_right_min_margin=l_temp_left; +		*o_left_min_margin=l_temp_right; +	}else{      *o_right_min_margin=l_temp_right;      *o_left_min_margin=l_temp_left; +		}      return rc;   } - fapi::ReturnCode generic_shmoo:: schmoo_setup_mcb( const fapi::Target & i_target) +  +  fapi::ReturnCode generic_shmoo::get_min_margin_dqs(const fapi::Target & i_target,uint32_t *o_right_min_margin,uint32_t *o_left_min_margin)  { +    fapi::ReturnCode rc; +    uint8_t l_rnk,l_nibble,i_rank; +    uint16_t l_temp_right=4800; +    uint16_t l_temp_left=4800; +     +    uint8_t l_rp=0; +	uint8_t l_p=0; +	uint8_t l_attr_eff_dram_width_u8=0; - +	 +	 +    +    -	//uint32_t rc_num =0; -	uint8_t l_pattern=0; -	uint8_t l_testtype=0; -	//uint8_t l_rank=0; -    fapi::ReturnCode rc; +    uint8_t l_SCHMOO_NIBBLES=20; +	uint8_t l_by8_dqs=0; +	 +	rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_WIDTH, &i_target, l_attr_eff_dram_width_u8); if(rc) return rc; -	uint64_t l_start =0x0000000000000000ull;  -    uint64_t l_end = 0x0000000000000000ull;  +	if(iv_dmm_type==1) +    { +	l_SCHMOO_NIBBLES=18; +	} +	 if(l_attr_eff_dram_width_u8 == 8){ +   l_SCHMOO_NIBBLES=10; +   if(iv_dmm_type==1) +    { +	l_SCHMOO_NIBBLES=9; +	} +   } +	iv_shmoo_type=4; -	mcbist_test_mem i_mcbtest = CENSHMOO; // bellows: initialize to this type -	mcbist_data_gen i_mcbpatt = ABLE_FIVE; // bellows: initialize to this data type +    for (l_p=0;l_p<MAX_PORT;l_p++){ +		for (l_rnk=0;l_rnk<iv_MAX_RANKS[l_p];++l_rnk) +	    {			rc = mss_getrankpair(i_target,l_p,0,&l_rp,valid_rank);if(rc) return rc; +					    i_rank=valid_rank[l_rnk]; +			    rc = mss_getrankpair(i_target,l_p,i_rank,&l_rp,valid_rank);if(rc) return rc; +		 +		    for(l_nibble=0;l_nibble< l_SCHMOO_NIBBLES;++l_nibble) +		    { +				 +			   l_by8_dqs=l_nibble; +			   if(iv_dmm_type==0) +			   { +			    if(l_attr_eff_dram_width_u8 == 8) +			    { +				l_nibble=l_nibble*2; +			    } +			   } +			 +			if(SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_by8_dqs][l_rp]<l_temp_right) +			    { +				l_temp_right=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.right_margin_val[l_by8_dqs][l_rp]; +			    } +			    if(SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_by8_dqs][l_rp]<l_temp_left) +			    { +				l_temp_left=SHMOO[iv_shmoo_type].MBA.P[l_p].S[i_rank].K.left_margin_val[l_by8_dqs][l_rp]; +			    } +		    } +		} +	    } +         +    // hacked for now till schmoo is running  +	if(iv_shmoo_type==8) +	{ +		*o_right_min_margin=l_temp_left; +		*o_left_min_margin=l_temp_right; +	}else{ +    *o_right_min_margin=l_temp_right; +    *o_left_min_margin=l_temp_left; +		} +    return rc; + } +  fapi::ReturnCode generic_shmoo:: schmoo_setup_mcb( const fapi::Target & i_target) +{ + +struct Subtest_info l_sub_info[30]; +    uint32_t l_pattern=0; +	uint32_t l_testtype=0; +	//uint32_t rc_num =0; +	mcbist_byte_mask i_mcbbytemask1; +	 +	i_mcbbytemask1 = UNMASK_ALL; +	 +    fapi::ReturnCode rc; -     -     //send shmoo mode to vary the address range -    +	 +	  l_pattern=iv_pattern; -FAPI_INF("value of pattern is %d",l_pattern); -switch(l_pattern) -{ -case 0 : i_mcbpatt = ABLE_FIVE;break; -case 1 : i_mcbpatt = USR_MODE;break; -case 2 : i_mcbpatt = ONEHOT;break; -case 3 : i_mcbpatt = DQ0_00011111_RESTALLONE;break; -case 4 : i_mcbpatt = DQ0_11100000_RESTALLZERO;break; -case 5 : i_mcbpatt = ALLZERO;break; -case 6 : i_mcbpatt = ALLONE;break; -case 7 : i_mcbpatt = BYTE_BURST_SIGNATURE;break; -case 8 : i_mcbpatt = BYTE_BURST_SIGNATURE_V1;break; -case 9 : i_mcbpatt = BYTE_BURST_SIGNATURE_V2;break; -case 10 : i_mcbpatt = BYTE_BURST_SIGNATURE_V3;break; -case 11 : i_mcbpatt = DATA_GEN_DELTA_I;break; -case 12 : i_mcbpatt = MCBIST_2D_CUP_PAT0;break; -case 13 : i_mcbpatt = MPR;break; -case 14 : i_mcbpatt = MPR03;break; -case 15 : i_mcbpatt = MPR25;break; -case 16 : i_mcbpatt = MPR47;break; -case 17 : i_mcbpatt = DELTA_I1;break; -case 18 : i_mcbpatt = MCBIST_2D_CUP_PAT1;break; -case 19 : i_mcbpatt = MHC_55;break; -case 20 : i_mcbpatt = MHC_DQ_SIM;break; -case 21 : i_mcbpatt = MCBIST_2D_CUP_PAT2;break; -case 22 : i_mcbpatt = MCBIST_2D_CUP_PAT3;break; -case 23 : i_mcbpatt = MCBIST_2D_CUP_PAT4;break; -case 24 : i_mcbpatt = MCBIST_2D_CUP_PAT5;break; -case 25 : i_mcbpatt = MCBIST_2D_CUP_PAT6;break; -case 26 : i_mcbpatt = MCBIST_2D_CUP_PAT7;break; -case 27 : i_mcbpatt = MCBIST_2D_CUP_PAT8;break; -case 28 : i_mcbpatt = MCBIST_2D_CUP_PAT9;break; -case 29 : i_mcbpatt = CWLPATTERN;break; -case 30 : i_mcbpatt = GREY1;break; -case 31 : i_mcbpatt = DC_ONECHANGE;break; -case 32 : i_mcbpatt = DC_ONECHANGEDIAG;break; -case 33 : i_mcbpatt = GREY2;break; -case 34 : i_mcbpatt = FIRST_XFER;break; -case 35 : i_mcbpatt = MCBIST_222_XFER;break; -case 36 : i_mcbpatt = MCBIST_333_XFER;break; -case 37 : i_mcbpatt = MCBIST_444_XFER;break; -case 38 : i_mcbpatt = MCBIST_555_XFER;break; -case 39 : i_mcbpatt = MCBIST_666_XFER;break; -case 40 : i_mcbpatt = MCBIST_777_XFER;break; -case 41 : i_mcbpatt = MCBIST_888_XFER;break; -case 42 : i_mcbpatt = FIRST_XFER_X4MODE;break; -case 43 : i_mcbpatt = MCBIST_LONG;break; -case 44 : i_mcbpatt = PSEUDORANDOM;break; -case 45 : i_mcbpatt = CASTLE;break; - -default : FAPI_INF("Wrong Data Pattern,so using default pattern"); -}  l_testtype=iv_test_type; -switch(l_testtype) -{ -case 0 : i_mcbtest = USER_MODE;break; -case 1 : i_mcbtest = CENSHMOO;break; -case 2 : i_mcbtest = SUREFAIL;break; -case 3 : i_mcbtest = MEMWRITE;break; -case 4 : i_mcbtest = MEMREAD;break; -case 5 : i_mcbtest = CBR_REFRESH;break; -case 6 : i_mcbtest = MCBIST_SHORT;break; -case 7 : i_mcbtest = SHORT_SEQ;break; -case 8 : i_mcbtest = DELTA_I;break; -case 9 : i_mcbtest = DELTA_I_LOOP;break; -case 10 : i_mcbtest = SHORT_RAND;break; -case 11 : i_mcbtest = LONG1;break; -case 12 : i_mcbtest = BUS_TAT;break; -case 13 : i_mcbtest = SIMPLE_FIX;break; -case 14 : i_mcbtest = SIMPLE_RAND;break; -case 15 : i_mcbtest = SIMPLE_RAND_2W;break; -case 16 : i_mcbtest = SIMPLE_RAND_FIXD;break; -case 17 : i_mcbtest = SIMPLE_RA_RD_WR;break; -case 18 : i_mcbtest = SIMPLE_RA_RD_R;break; -case 19 : i_mcbtest = SIMPLE_RA_FD_R;break; -case 20 : i_mcbtest = SIMPLE_RA_FD_R_INF;break; -case 21 : i_mcbtest = SIMPLE_SA_FD_R;break; -case 22 : i_mcbtest = SIMPLE_RA_FD_W;break; -case 23 : i_mcbtest = INFINITE;break; -case 24 : i_mcbtest = WR_ONLY;break; -case 25 : i_mcbtest = W_ONLY;break; -case 26 : i_mcbtest = R_ONLY;break; -case 27 : i_mcbtest = W_ONLY_RAND;break; -case 28 : i_mcbtest = R_ONLY_RAND;break; -case 29 : i_mcbtest = R_ONLY_MULTI;break; -default : FAPI_INF("Wrong Test_type,so using default test_type"); -} -rc = setup_mcbist(i_target, 0,  i_mcbpatt, i_mcbtest, UNMASK_ALL, 0,iv_pattern,iv_test_type,0,0,l_start,l_end,iv_addr);if(rc) return rc; +if(iv_shmoo_type==16){ +FAPI_INF("\n Read DQS is running \n"); +if(iv_DQS_ON==1){ +	l_testtype=3; +	} +	if(iv_DQS_ON==2){ +	l_testtype=4; +	} +	} +     //send shmoo mode to vary the address range +	if(iv_shmoo_type==16){  + rc = FAPI_ATTR_SET(ATTR_MCBIST_PATTERN, &i_target,l_pattern); if(rc) return rc;//-----------i_mcbpatt------->run +	rc = FAPI_ATTR_SET(ATTR_MCBIST_TEST_TYPE, &i_target, l_testtype); if(rc) return rc;//---------i_mcbtest------->run +	} +//rc = FAPI_ATTR_SET(ATTR_MCBIST_PATTERN, &i_target,iv_pattern); if(rc) return rc;//-----------i_mcbpatt------->run +//rc = FAPI_ATTR_SET(ATTR_MCBIST_TEST_TYPE, &i_target, iv_test_type); if(rc) return rc;//---------i_mcbtest------->run + +rc = setup_mcbist(i_target,i_mcbbytemask1,0,1,0,l_sub_info);if(rc) return rc; +  +   return rc;  } diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_generic_shmoo.H b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_generic_shmoo.H index df73008ee..009f7d5f1 100644 --- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_generic_shmoo.H +++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_generic_shmoo.H @@ -20,7 +20,7 @@  /* Origin: 30                                                             */  /*                                                                        */  /* IBM_PROLOG_END_TAG                                                     */ -// $Id: mss_generic_shmoo.H,v 1.13 2013/04/09 12:18:47 lapietra Exp $ +// $Id: mss_generic_shmoo.H,v 1.22 2013/08/08 11:08:58 sasethur Exp $  // *!***************************************************************************  // *! (C) Copyright International Business Machines Corp. 1997, 1998  // *!           All Rights Reserved -- Property of IBM @@ -31,14 +31,16 @@  // *! DESCRIPTION          : Memory Subsystem Generic Shmoo -- abstraction for HB  // *! CONTEXT              : To make all shmoos share a common abstraction layer  // *! -// *! OWNER  NAME          : Varkey Varghese          Email: varkey.kv@in.ibm.com -// *! BACKUP NAME          : Abhijit Saurabh          Email:  abhijit.saurabh@in.ibm.com    +// *! OWNER  NAME          : Abhijit Saurabh          Email:  abhijit.saurabh@in.ibm.com +// *! BACKUP NAME          :      // *!  // *!***************************************************************************  // CHANGE HISTORY:  //------------------------------------------------------------------------------  // Version:|Author: | Date:  | Comment:  // --------|--------|--------|-------------------------------------------------- +//   1.22  |abhijit |8/08/13 |added binary schmoo functions  +//   1.20  |abhijit |7/17/13 |added functions for read dqs   //   1.11  |abhijit |1/21/13 |fixed constructor definition    //   1.9   |abhijit |06/12/12|fixed fw review comments   //   1.4   |abhijit |09/27/11|made changes according to new design @@ -57,6 +59,9 @@ using namespace fapi;  #define SHMOO_DEBUG2 0  #include "mss_shmoo_common.H"  #include "mss_mcbist.H" +//#include "mss_draminit_training.H" +// #include <cen_scom_addresses.H> +// #include "mss_funcs.H" @@ -85,16 +90,19 @@ class generic_shmoo          shmoo_mode mcbist_mode;          uint8_t mcbist_error_map[MAX_PORT][MAX_RANK][MAX_BYTE][MAX_NIBBLES];  		uint8_t schmoo_error_map[MAX_PORT][MAX_RANK][20]; +		uint8_t binary_done_map[MAX_PORT][MAX_RANK][20];  		shmoo_type_t shmoo_mask;  	uint8_t iv_addr;  	uint8_t iv_MAX_RANKS[MAX_PORT];  	uint8_t iv_MAX_BYTES; -	uint8_t iv_pattern; -	uint8_t iv_test_type; +	uint32_t iv_pattern; +	uint32_t iv_test_type;  	uint8_t iv_dmm_type;  	uint8_t iv_DQS_ON;  	uint8_t iv_shmoo_type;  	uint32_t iv_shmoo_param; +	uint32_t iv_binary_diff; +	uint32_t iv_vref_mul;  	uint8_t valid_rank[MAX_RANK]; @@ -111,17 +119,39 @@ class generic_shmoo          void  init_multi_array(uint32_t (&array)[MAX_DQ][MAX_RPS],uint32_t init_val); //initialize multi dim arrays to known value  	fapi::ReturnCode init_multi_array_dqs(uint32_t (&array)[MAX_DQ][MAX_RPS],uint32_t init_val);          fapi::ReturnCode get_all_noms(const fapi::Target & i_target); //! Read in all the Nominal values of the relevant knobs +		fapi::ReturnCode set_all_binary(const fapi::Target & i_target,bound_t bound); +		fapi::ReturnCode get_all_noms_dqs(const fapi::Target & i_target); //! Read in all the Nominal values of the relevant knobs +		fapi::ReturnCode get_all_noms_gate(const fapi::Target & i_target); //! Read in all the Nominal values of the relevant knobs +		fapi::ReturnCode get_all_noms_data_disable(const fapi::Target & i_target); +		fapi::ReturnCode put_all_noms_data_disable(const fapi::Target & i_target,uint8_t flag); +		//fapi::ReturnCode put_all_zero_data_disable(const fapi::Target & i_target);          fapi::ReturnCode find_bound(const fapi::Target & i_target,bound_t); // generic Right bound          fapi::ReturnCode knob_update(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag); // Increment or decrement the knob -	fapi::ReturnCode knob_update_dqs(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t rank,uint8_t byte,uint8_t nibble,uint8_t bit,uint8_t pass); -        fapi::ReturnCode print_report(const fapi::Target & i_target); // Print Shmoo report to file or STDOUT -        fapi::ReturnCode print_shmoo_parms(); +		fapi::ReturnCode knob_update_bin(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag);  +	fapi::ReturnCode knob_update_gate(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t pass,bool &flag); // Increment or decrement the knob +	//fapi::ReturnCode knob_update_gate(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag);  +	fapi::ReturnCode knob_update_gate_train(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t pass); +	fapi::ReturnCode knob_update_dqs_by8(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag);  +	fapi::ReturnCode knob_update_dqs_by4(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag); +        fapi::ReturnCode print_report(const fapi::Target & i_target); // Print Shmoo report to  STDOUT +        fapi::ReturnCode print_report_dqs(const fapi::Target & i_target); +		fapi::ReturnCode print_report_gate(const fapi::Target & i_target); +		//fapi::ReturnCode print_shmoo_parms();  	fapi::ReturnCode get_margin(const fapi::Target & i_target); +	fapi::ReturnCode get_margin_dqs_by8(const fapi::Target & i_target); +	fapi::ReturnCode get_margin_dqs_by4(const fapi::Target & i_target);  	fapi::ReturnCode get_min_margin(const fapi::Target & i_target,uint32_t *o_right_min_margin,uint32_t *o_left_min_margin); +	fapi::ReturnCode get_min_margin_dqs(const fapi::Target & i_target,uint32_t *o_right_min_margin,uint32_t *o_left_min_margin);          fapi::ReturnCode do_mcbist_test(const fapi::Target & i_target); +		fapi::ReturnCode do_mcbist_reset(const fapi::Target & i_target);          fapi::ReturnCode  check_error_map(const fapi::Target & i_target,uint8_t port,uint8_t &pass);          fapi::ReturnCode sanity_check(const fapi::Target & i_target);  		fapi::ReturnCode schmoo_setup_mcb( const fapi::Target & i_target); -        fapi::ReturnCode run(const fapi::Target & i_target,uint32_t *right_min_margin,uint32_t *left_min_margin,uint8_t i_pattern,uint8_t i_test_type,uint32_t i_shmoo_param); +		fapi::ReturnCode get_error_cnt(const fapi::Target & i_target,uint8_t port,uint8_t rank,uint8_t rank_pair,uint8_t bit,bound_t bound); +		fapi::ReturnCode knob_update_dqs_by8_isdimm(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag);  +	fapi::ReturnCode knob_update_dqs_by4_isdimm(const fapi::Target & i_target,bound_t bound,uint8_t scenario,uint8_t bit,uint8_t pass,bool &flag); +        fapi::ReturnCode run(const fapi::Target & i_target,uint32_t *right_min_margin,uint32_t *left_min_margin,uint32_t i_vref_mul); +	fapi::ReturnCode shmoo_save_rest(const fapi::Target & i_target,uint64_t i_content_array[],uint8_t i_mode); +	  };  #endif diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist.C b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist.C index ffc4f3d69..395f446fe 100755 --- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist.C +++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist.C @@ -20,7 +20,7 @@  /* Origin: 30                                                             */  /*                                                                        */  /* IBM_PROLOG_END_TAG                                                     */ -// $Id: mss_mcbist.C,v 1.37 2013/02/19 12:14:03 sasethur Exp $ +// $Id: mss_mcbist.C,v 1.41 2013/08/12 10:07:57 sasethur Exp $  // *!***************************************************************************  // *! (C) Copyright International Business Machines Corp. 1997, 1998  // *!           All Rights Reserved -- Property of IBM @@ -38,6 +38,10 @@  //------------------------------------------------------------------------------  // Version:|Author: | Date:  | Comment:  // --------|--------|--------|-------------------------------------------------- +//   1.41  |aditya  |08/10/13|Minor Fix for Hostboot compile +//   1.40  |aditya  |06/11/13|Added attributes ATTR_MCBIST_PRINTING_DISABLE and ATTR_MCBIST_DATA_ENABLE +//   1.39  |aditya  |05/22/13|updated parameters for Subtest Printing +//   1.38  |aditya  |05/14/13|updated parameters for cfg_mcb_dgen  //   1.37  |aditya  |02/19/13|updated testtypes  //   1.34  |aditya  |02/13/13|updated testtypes  //   1.33  |aditya  |02/12/13|updated testtypes @@ -88,72 +92,123 @@ using namespace fapi;  //     mcbist_test_mem i_test_type      Subtest Type  //****************************************************************/ -fapi::ReturnCode  cfg_mcb_test_mem(const fapi::Target & i_target_mba,mcbist_test_mem i_test_type) +fapi::ReturnCode  cfg_mcb_test_mem(const fapi::Target & i_target_mba,mcbist_test_mem i_test_type,struct Subtest_info l_sub_info[30])  { -    fapi::ReturnCode  rc; -    FAPI_INF("Function - cfg_mcb_test_mem"); +	fapi::ReturnCode  rc; +	uint8_t l_print = 0;  +	uint32_t l_mcbtest; +	uint8_t l_index,l_data_flag,l_random_flag,l_count,l_data_attr; +	l_index = 0; +	l_data_flag = 0; +	l_random_flag = 0; +	l_data_attr = 0; +	uint8_t test_array_count[44] ={0,2,2,1,1,1,6,6,30,30,2,7,4,2,1,5,4,2,1,1,3,1,1,4,2,1,1,1,1,10,0,5,3,3,3,3,9,4,30,1,2,2,3,3}; +	rc = FAPI_ATTR_GET(ATTR_MCBIST_PRINTING_DISABLE, &i_target_mba,l_print); if(rc) return rc; +	if(l_print == 0){FAPI_INF("Function Name: cfg_mcb_test_mem"); +    FAPI_INF("Start Time");} +    rc = FAPI_ATTR_GET(ATTR_MCBIST_TEST_TYPE, &i_target_mba, l_mcbtest); +	 +	 +	 +	 +   +     +    if(l_print == 0)FAPI_INF("Function - cfg_mcb_test_mem"); - +	uint8_t l_done_bit = 0; +     rc = FAPI_ATTR_SET(ATTR_MCBIST_ADDR_BANK, &i_target_mba, l_done_bit); if(rc) return rc;      if(i_test_type == CENSHMOO) -    {                                                  -        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,W,0,SF,FIX,0,DEFAULT,FIX_ADDR,0);  if(rc) return rc; -        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,R,0,SF,FIX,1,DEFAULT,FIX_ADDR,1);  if(rc) return rc; +    {    +	    if(l_print == 0)FAPI_INF("Current MCBIST TESTTYPE : CENSHMOO ");                                          +        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,W,0,SF,FIX,0,DEFAULT,FIX_ADDR,0,0,1,l_sub_info); if(rc) return rc; +        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,R,0,SF,FIX,1,DEFAULT,FIX_ADDR,1,1,1,l_sub_info); if(rc) return rc;      }      else if(i_test_type == MEMWRITE)      { -        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,W,0,SF,FIX,1,DEFAULT,FIX_ADDR,0);   if(rc) return rc;       +        if(l_print == 0)FAPI_INF("Current MCBIST TESTTYPE : MEMWRITE "); +		rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,W,0,SF,FIX,1,DEFAULT,FIX_ADDR,0,0,0,l_sub_info); if(rc) return rc;              }      else if(i_test_type == MEMREAD)      { -        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,R,0,SF,FIX,1,DEFAULT,FIX_ADDR,0);    if(rc) return rc;      +        if(l_print == 0)FAPI_INF("Current MCBIST TESTTYPE : MEMREAD "); +		rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,R,0,SF,FIX,1,DEFAULT,FIX_ADDR,0,0,0,l_sub_info); if(rc) return rc;              } -     +     else if (i_test_type == SIMPLE_FIX)      { -        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,W,   0,SF,FIX, 0,DEFAULT,FIX_ADDR,0);  if(rc) return rc; -        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,R,   0,SF,FIX, 1,DEFAULT,FIX_ADDR,1);  if(rc) return rc; -        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,R,   0,SF,FIX, 1,DEFAULT,FIX_ADDR,2);  if(rc) return rc; -        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,OPER_RAND,0,RF,FIX, 1,DEFAULT,FIX_ADDR,3);  if(rc) return rc; +        if(l_print == 0)FAPI_INF("Current MCBIST TESTTYPE : SIMPLE_FIX "); +		rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,W,   0,SF,FIX, 0,DEFAULT,FIX_ADDR,0,0,4,l_sub_info); if(rc) return rc; +        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,R,   0,SF,FIX, 1,DEFAULT,FIX_ADDR,1,1,4,l_sub_info); if(rc) return rc; -        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR1Q_0x030106a9,RW,  0,RF,DATA_RF,0,DEFAULT,FIX_ADDR,0);   if(rc) return rc; +		l_done_bit = 1; +		rc = FAPI_ATTR_SET(ATTR_MCBIST_ADDR_BANK, &i_target_mba, l_done_bit); if(rc) return rc;		 +		 +		rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,R,   0,SF,FIX, 1,DEFAULT,FIX_ADDR,2,2,4,l_sub_info); if(rc) return rc; +        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,OPER_RAND,0,RF,FIX, 1,DEFAULT,FIX_ADDR,3,3,4,l_sub_info); if(rc) return rc; +         +        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR1Q_0x030106a9,RW,  4,RF,DATA_RF,0,DEFAULT,FIX_ADDR,0,4,4,l_sub_info); if(rc) return rc;        } -    else if (i_test_type == SIMPLE_RAND) +   else if (i_test_type == SIMPLE_RAND)      { -        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,W,   0,SF,DATA_RF,0,DEFAULT,FIX_ADDR,0);  if(rc) return rc; -        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,R,   0,SF,DATA_RF,0,DEFAULT,FIX_ADDR,1);  if(rc) return rc; -        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,W,   0,RF,DATA_RF,0,DEFAULT,FIX_ADDR,2);  if(rc) return rc; -        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,R,   0,RF,DATA_RF,1,DEFAULT,FIX_ADDR,3);  if(rc) return rc; +        if(l_print == 0)FAPI_INF("Current MCBIST TESTTYPE : SIMPLE_RAND "); +		rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,WR,   0,SF,DATA_RF,1,DEFAULT,FIX_ADDR,0,0,4,l_sub_info); if(rc) return rc; +         +		l_done_bit = 1; +		rc = FAPI_ATTR_SET(ATTR_MCBIST_ADDR_BANK, &i_target_mba, l_done_bit); if(rc) return rc;		 +		 +		rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,R,   1,SF,DATA_RF,0,DEFAULT,FIX_ADDR,1,1,4,l_sub_info); if(rc) return rc; +        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,W,   0,RF,DATA_RF,0,DEFAULT,FIX_ADDR,2,2,4,l_sub_info); if(rc) return rc; +        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,R,   0,RF,DATA_RF,1,DEFAULT,FIX_ADDR,3,3,4,l_sub_info); if(rc) return rc; -        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR1Q_0x030106a9,RW,  4,RF,DATA_RF,0,DEFAULT,FIX_ADDR,0);   if(rc) return rc;       +        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR1Q_0x030106a9,RW,  4,RF,DATA_RF,0,DEFAULT,FIX_ADDR,0,4,4,l_sub_info); if(rc) return rc;              } -    else if (i_test_type == WR_ONLY) +     else if (i_test_type == WR_ONLY)      { -        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,W,   0,SF,DATA_RF,0,DEFAULT,FIX_ADDR,0);  if(rc) return rc; -        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,R,   0,SF,DATA_RF,1,DEFAULT,FIX_ADDR,1);  if(rc) return rc; -        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,W,   0,RF,FIX,0,DEFAULT,FIX_ADDR,2);  if(rc) return rc;  -        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,OPER_RAND,0,RF,FIX,1,DEFAULT,FIX_ADDR,3);  if(rc) return rc; +        if(l_print == 0)FAPI_INF("Current MCBIST TESTTYPE : WR_ONLY "); +		rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,W,   0,SF,DATA_RF,0,DEFAULT,FIX_ADDR,0,0,4,l_sub_info); if(rc) return rc; +        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,R,   0,SF,DATA_RF,1,DEFAULT,FIX_ADDR,1,1,4,l_sub_info); if(rc) return rc; -        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR1Q_0x030106a9,RW,  4,RF,DATA_RF,0,DEFAULT,FIX_ADDR,0);   if(rc) return rc;        -    }  +		l_done_bit = 1; +		rc = FAPI_ATTR_SET(ATTR_MCBIST_ADDR_BANK, &i_target_mba, l_done_bit); if(rc) return rc;		 +		 +		 +		rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,W,   0,RF,FIX,0,DEFAULT,FIX_ADDR,2,2,4,l_sub_info); if(rc) return rc; +        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,OPER_RAND,0,RF,FIX,1,DEFAULT,FIX_ADDR,3,3,4,l_sub_info); if(rc) return rc; +         +        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR1Q_0x030106a9,RW,  4,RF,DATA_RF,0,DEFAULT,FIX_ADDR,0,4,4,l_sub_info); if(rc) return rc;         +    }      else if (i_test_type == W_ONLY)      { -        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,W,   0,SF,DATA_RF,1,DEFAULT,FIX_ADDR,0);  if(rc) return rc; -        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,R,   0,SF,FIX, 1,DEFAULT,FIX_ADDR,1);  if(rc) return rc; -        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,W,   0,RF,FIX, 0,DEFAULT,FIX_ADDR,2);  if(rc) return rc;  -        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,OPER_RAND,0,RF,FIX, 1,DEFAULT,FIX_ADDR,3);  if(rc) return rc; +        if(l_print == 0)FAPI_INF("Current MCBIST TESTTYPE : W_ONLY "); +		rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,W,   0,SF,DATA_RF,1,DEFAULT,FIX_ADDR,0,0,4,l_sub_info); if(rc) return rc; +         +		l_done_bit = 1; +		rc = FAPI_ATTR_SET(ATTR_MCBIST_ADDR_BANK, &i_target_mba, l_done_bit); if(rc) return rc;		 +		 +		 +		rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,R,   0,SF,FIX, 1,DEFAULT,FIX_ADDR,1,1,4,l_sub_info); if(rc) return rc; +        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,W,   0,RF,FIX, 0,DEFAULT,FIX_ADDR,2,2,4,l_sub_info); if(rc) return rc; +        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,OPER_RAND,0,RF,FIX, 1,DEFAULT,FIX_ADDR,3,3,4,l_sub_info); if(rc) return rc; -        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR1Q_0x030106a9,RW,  4,RF,DATA_RF,0,DEFAULT,FIX_ADDR,0);   if(rc) return rc;     +        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR1Q_0x030106a9,RW,  4,RF,DATA_RF,0,DEFAULT,FIX_ADDR,0,4,4,l_sub_info); if(rc) return rc;              }      else if (i_test_type == R_ONLY)      { -        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,R,   0,SF,DATA_RF,1,DEFAULT,FIX_ADDR,0);  if(rc) return rc; -        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,W,   0,RF,FIX, 0,DEFAULT,FIX_ADDR,2);  if(rc) return rc; -        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,OPER_RAND,0,RF,FIX, 1,DEFAULT,FIX_ADDR,3);  if(rc) return rc; +        if(l_print == 0)FAPI_INF("Current MCBIST TESTTYPE : R_ONLY "); +		rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,R,   0,SF,DATA_RF,1,DEFAULT,FIX_ADDR,0,0,4,l_sub_info); if(rc) return rc; -        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR1Q_0x030106a9,RW,  4,RF,DATA_RF,0,DEFAULT,FIX_ADDR,0);  if(rc) return rc;   +		l_done_bit = 1; +		rc = FAPI_ATTR_SET(ATTR_MCBIST_ADDR_BANK, &i_target_mba, l_done_bit); if(rc) return rc;		 +		 +		 +		rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,GOTO,0,SF,FIX,0,DEFAULT,FIX_ADDR,1,1,4,l_sub_info); if(rc) return rc; +        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,W,   0,RF,FIX, 0,DEFAULT,FIX_ADDR,2,2,4,l_sub_info); if(rc) return rc; +        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR0Q_0x030106a8,OPER_RAND,0,RF,FIX, 1,DEFAULT,FIX_ADDR,3,3,4,l_sub_info); if(rc) return rc; +         +        rc = mcb_write_test_mem(i_target_mba,MBA01_MCBIST_MCBMR1Q_0x030106a9,RW,  4,RF,DATA_RF,0,DEFAULT,FIX_ADDR,0,4,4,l_sub_info); if(rc) return rc;              }      else @@ -164,7 +219,44 @@ fapi::ReturnCode  cfg_mcb_test_mem(const fapi::Target & i_target_mba,mcbist_test  		return rc;      } +	if(l_print == 0){FAPI_INF("Function Name: cfg_mcb_test_mem"); +    FAPI_INF("Stop Time");} +     +	 +	l_count = test_array_count[l_mcbtest]; +	for(l_index = 0;l_index < l_count;l_index++) +	{ +		if(l_sub_info[l_index].l_fixed_data_enable == 1) +		{ +			l_data_flag = 1; +		} +		if(l_sub_info[l_index].l_random_data_enable == 1) +		{ +			l_random_flag = 1; +		} +		 +	} +	if((l_data_flag == 0) && (l_random_flag == 1)) +	{ +	l_data_attr = 1; +	} +	else if((l_data_flag == 1) && (l_random_flag == 0)) +	{ +	l_data_attr = 2; +	} +	else if((l_data_flag == 1) && (l_random_flag == 1)) +	{ +	l_data_attr = 3; +	} +	else +	{ +	l_data_attr = 3; +	} +	rc = FAPI_ATTR_SET(ATTR_MCBIST_DATA_ENABLE, &i_target_mba,l_data_attr); if(rc) return rc;	 +	      return rc; +	 +	  } @@ -179,8 +271,15 @@ fapi::ReturnCode  cfg_mcb_test_mem(const fapi::Target & i_target_mba,mcbist_test  //     mcbist_data_gen i_datamode       MCBIST Data mode   //     uint8_t i_mcbrotate              Provides the number of bit to shift per burst  //****************************************************************/ -fapi::ReturnCode  cfg_mcb_dgen(const fapi::Target & i_target_mba,mcbist_data_gen i_datamode,uint8_t i_mcbrotate) +fapi::ReturnCode  cfg_mcb_dgen(const fapi::Target & i_target_mba,mcbist_data_gen i_datamode,uint8_t i_mcbrotate,uint8_t i_seed_choice,uint32_t i_seed)  { +	uint8_t l_print = 0;  +	 +	 +    uint8_t l_data_attr,l_random_flag,l_data_flag; +	l_data_flag =1; l_random_flag = 1; +	l_data_attr = 3; +	      ecmdDataBufferBase l_data_buffer_64(64);  	ecmdDataBufferBase l_var_data_buffer_64(64);  	ecmdDataBufferBase l_var1_data_buffer_64(64); @@ -196,381 +295,427 @@ fapi::ReturnCode  cfg_mcb_dgen(const fapi::Target & i_target_mba,mcbist_data_gen      uint8_t l_rotnum = 0;      uint32_t l_mba01_mcb_pseudo_random[MAX_BYTE] = { MBA01_MCBIST_MCBFD0Q_0x030106be,MBA01_MCBIST_MCBFD1Q_0x030106bf,MBA01_MCBIST_MCBFD2Q_0x030106c0,MBA01_MCBIST_MCBFD3Q_0x030106c1,MBA01_MCBIST_MCBFD4Q_0x030106c2, MBA01_MCBIST_MCBFD5Q_0x030106c3,MBA01_MCBIST_MCBFD6Q_0x030106c4,MBA01_MCBIST_MCBFD7Q_0x030106c5,MBA01_MCBIST_MCBFDQ_0x030106c6,MBA01_MCBIST_MCBFDSPQ_0x030106c7};      uint32_t l_mba01_mcb_random[MAX_BYTE] = {MBA01_MCBIST_MCBRDS0Q_0x030106b2,MBA01_MCBIST_MCBRDS1Q_0x030106b3,MBA01_MCBIST_MCBRDS2Q_0x030106b4,MBA01_MCBIST_MCBRDS3Q_0x030106b5,MBA01_MCBIST_MCBRDS4Q_0x030106b6,MBA01_MCBIST_MCBRDS5Q_0x030106b7,MBA01_MCBIST_MCBRDS6Q_0x030106b8,MBA01_MCBIST_MCBRDS7Q_0x030106b9,MBA01_MCBIST_MCBRDS8Q_0x030106ba,0x030106bb}; -    uint8_t l_index,l_index1 = 0; +     +	uint32_t l_mbs01_mcb_random[MAX_BYTE] = {0x02011675,0x02011676,0x02011677,0x02011678,0x02011679,0x0201167a,0x0201167b,0x0201167c,0x0201167d,0x0201167e}; +    uint32_t l_mbs23_mcb_random[MAX_BYTE] = {0x02011775,0x02011776,0x02011777,0x02011778,0x02011779,0x0201177a,0x0201177b,0x0201177c,0x0201177d,0x0201177e}; +	 +	 +	uint8_t l_index,l_index1 = 0;      uint32_t l_rand_32 = 0;      uint32_t l_rand_8 = 0;      fapi::ReturnCode  rc;      uint32_t rc_num = 0; -    FAPI_INF(" Data mode is %d ",i_datamode); +	if(l_print == 0){FAPI_INF("Function Name: cfg_mcb_dgen"); +     +    FAPI_INF(" Data mode is %d ",i_datamode);}      uint8_t l_mbaPosition =0;    -    FAPI_INF("Function cfg_mcb_dgen"); +    if(l_print == 0)FAPI_INF("Function cfg_mcb_dgen");      //Read MBA position attribute 0 - MBA01 1 - MBA23      rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, &i_target_mba, l_mbaPosition);      if(rc)      {         	FAPI_ERR("Error getting MBA position"); return rc;      } -	 +	rc = FAPI_ATTR_GET(ATTR_MCBIST_PRINTING_DISABLE, &i_target_mba,l_print); if(rc) return rc;  	/*if ((l_mbaPosition != 0)||(l_mbaPosition != 1))  	{  	    return rc;  	} */ -	 -	 -	 -    if(i_datamode == MCBIST_2D_CUP_PAT5) -    {    -	    l_var = 0xFFFF0000FFFF0000ull; -        l_var1 =0x0000FFFF0000FFFFull;  -        l_spare = 0xFF00FF00FF00FF00ull; -		 -        rc_num = l_var_data_buffer_64.setDoubleWord(0,l_var);if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;} -		rc_num = l_var1_data_buffer_64.setDoubleWord(0,l_var1);  if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;} -		rc_num = l_spare_data_buffer_64.setDoubleWord(0,l_spare);  if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;} -		 -		rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD0Q_0x030106be, l_var_data_buffer_64); if(rc) return rc; -        rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD1Q_0x030106bf, l_var1_data_buffer_64); if(rc) return rc; -        rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD2Q_0x030106c0, l_var_data_buffer_64); if(rc) return rc; -	rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD3Q_0x030106c1, l_var1_data_buffer_64); if(rc) return rc; -	rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD4Q_0x030106c2, l_var_data_buffer_64); if(rc) return rc; -	rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD5Q_0x030106c3, l_var1_data_buffer_64); if(rc) return rc; -	rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD6Q_0x030106c4, l_var_data_buffer_64); if(rc) return rc;	 -	rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD7Q_0x030106c5, l_var1_data_buffer_64); if(rc) return rc; -	rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFDQ_0x030106c6 , l_spare_data_buffer_64); if(rc) return rc; -	rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFDSPQ_0x030106c7 , l_spare_data_buffer_64); if(rc) return rc; -	 -	 +	rc = FAPI_ATTR_GET(ATTR_MCBIST_DATA_ENABLE, &i_target_mba,l_data_attr); if(rc) return rc; -	 -	 -	 -	 +	if(l_data_attr == 1)		 +	{ +		l_data_flag =0; l_random_flag = 1;  	} -	 -	 -	 -    else if(i_datamode == MCBIST_2D_CUP_PAT8) -    { -        l_var = 0xFFFFFFFFFFFFFFFFull;                                                                                                                                          -        l_var1 =0x0000000000000000ull;                                                                                                                                                                                                                                             -        l_spare = 0xFFFF0000FFFF0000ull;   -rc_num = l_var_data_buffer_64.setDoubleWord(0,l_var);  if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}	 - rc_num = l_var1_data_buffer_64.setDoubleWord(0,l_var1);  if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}	 - rc_num = l_spare_data_buffer_64.setDoubleWord(0,l_spare);  if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;} -        rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD0Q_0x030106be, l_var_data_buffer_64); if(rc) return rc;  -        rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD1Q_0x030106bf, l_var_data_buffer_64); if(rc) return rc;   -       rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD2Q_0x030106c0, l_var1_data_buffer_64); if(rc) return rc;    - 	rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD3Q_0x030106c1, l_var1_data_buffer_64); if(rc) return rc;         - 	rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD4Q_0x030106c2, l_var_data_buffer_64); if(rc) return rc;          - 	rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD5Q_0x030106c3, l_var_data_buffer_64); if(rc) return rc;         - 	rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD6Q_0x030106c4, l_var1_data_buffer_64); if(rc) return rc;	     - 	rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD7Q_0x030106c5, l_var1_data_buffer_64); if(rc) return rc;       - 	rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFDQ_0x030106c6 , l_spare_data_buffer_64); if(rc) return rc;      - 	rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFDSPQ_0x030106c7 , l_spare_data_buffer_64); if(rc) return rc;     -  -  -    } -    else if(i_datamode == ABLE_FIVE) -    { -          -		// l_var = 0x4B4B4B4B4B4B4B4Bull;                                                                                                                                       -        //l_var1 = 0x9696969696969696ull;      -         l_var = 0xA5A5A5A5A5A5A5A5ull;                                                                                                                                       -         l_var1 =0x5A5A5A5A5A5A5A5Aull;                                                                                                                                   -        l_spare = 0xA55AA55AA55AA55Aull;  -         -		rc_num = l_spare_data_buffer_64.setDoubleWord(0,l_spare);  if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;} -		rc_num = l_var_data_buffer_64.setDoubleWord(0,l_var);  if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;} -		rc_num = l_var1_data_buffer_64.setDoubleWord(0,l_var1);  if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;} -		 -        rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD0Q_0x030106be, l_var_data_buffer_64); if(rc) return rc;  -        rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD1Q_0x030106bf, l_var1_data_buffer_64); if(rc) return rc; -         rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD2Q_0x030106c0, l_var_data_buffer_64); if(rc) return rc;  -  	rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD3Q_0x030106c1, l_var1_data_buffer_64); if(rc) return rc;     -  	rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD4Q_0x030106c2, l_var_data_buffer_64); if(rc) return rc;      -  	rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD5Q_0x030106c3, l_var1_data_buffer_64); if(rc) return rc;     -  	rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD6Q_0x030106c4, l_var_data_buffer_64); if(rc) return rc;	     -  	rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD7Q_0x030106c5, l_var1_data_buffer_64); if(rc) return rc;     -  	rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFDQ_0x030106c6 , l_spare_data_buffer_64); if(rc) return rc;    -  	rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFDSPQ_0x030106c7 , l_spare_data_buffer_64); if(rc) return rc;     -   -    } -	 -	else if((i_datamode == DATA_GEN_DELTA_I) || (i_datamode == MCBIST_2D_CUP_PAT0)) -    { -        -                                                                                                                                                                         -        l_var = 0xFFFFFFFFFFFFFFFFull;                                                                                                                                     -        l_var1 =0x0000000000000000ull;                                                                                                                                     -        l_spare = 0xFF00FF00FF00FF00ull;                                                                                                                                   -        rc_num = l_spare_data_buffer_64.setDoubleWord(0,l_spare);  if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;} -		rc_num = l_var_data_buffer_64.setDoubleWord(0,l_var);  if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;} -		rc_num = l_var1_data_buffer_64.setDoubleWord(0,l_var1);  if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;} -		 -        rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD0Q_0x030106be, l_var_data_buffer_64); if(rc) return rc;  -        rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD1Q_0x030106bf, l_var1_data_buffer_64); if(rc) return rc; -         rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD2Q_0x030106c0, l_var_data_buffer_64); if(rc) return rc;  -  	rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD3Q_0x030106c1, l_var1_data_buffer_64); if(rc) return rc;     -  	rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD4Q_0x030106c2, l_var_data_buffer_64); if(rc) return rc;      -  	rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD5Q_0x030106c3, l_var1_data_buffer_64); if(rc) return rc;     -  	rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD6Q_0x030106c4, l_var_data_buffer_64); if(rc) return rc;	     -  	rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD7Q_0x030106c5, l_var1_data_buffer_64); if(rc) return rc;     -  	rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFDQ_0x030106c6 , l_spare_data_buffer_64); if(rc) return rc;    -  	rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFDSPQ_0x030106c7 , l_spare_data_buffer_64); if(rc) return rc;     -                                                                                                                                                           -    } -	 -    else if(i_datamode == PSEUDORANDOM) -    { -       // srand(2); -        FAPI_INF("Need to check the value of RAND_MAX for this compiler -- assuming 32bit of data is returned"); -        for (l_index = 0; l_index< (MAX_BYTE) ; l_index++) -        { -            //l_rand_32 = rand(); -			l_rand_32 = 0xFFFFFFFF;//Hard Coded Temporary Fix till random function is fixed -            rc_num =  rc_num| l_data_buffer_32.insertFromRight(l_rand_32,0,32);	 -            rc_num =  rc_num|  l_data_buffer_64.insert(l_data_buffer_32,0,32,0); -            //l_rand_32 = rand(); -			l_rand_32 = 0xFFFFFFFF; -            rc_num = rc_num| l_data_buffer_32.insertFromRight(l_rand_32,0,32);           -            rc_num = rc_num| l_data_buffer_64.insert(l_data_buffer_32,32,32,0); -	    if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;} -		rc = fapiPutScom(i_target_mba, l_mba01_mcb_pseudo_random[l_index] , l_data_buffer_64); if(rc) return rc; -        } -    } -    else -    { -        FAPI_ERR("Data generation configuration mcbist_data_gen enum : %d does not exist for centaur printPosData(i_target_mba)",(int)i_datamode); -        -		FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR); -		return rc; -    } -     -    fapi::Target i_target_centaur ; -    rc = fapiGetParentChip(i_target_mba, i_target_centaur);  -    if (rc) -    { -	FAPI_INF("Error in getting parent chip!"); return rc; -    } -	 -    if(i_datamode == MCBIST_2D_CUP_PAT5) -    { -	  l_var = 0xFFFF0000FFFF0000ull;                                                                                                                                       -      l_var1 =0x0000FFFF0000FFFFull;                                                                                                                                   -      l_spare = 0xFF00FF00FF00FF00ull;  -	   -	rc_num = l_var_data_buffer_64.setDoubleWord(0,l_var);  if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}		 -	rc_num = l_var1_data_buffer_64.setDoubleWord(0,l_var1); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}   -    rc_num = l_spare_data_buffer_64.setDoubleWord(0,l_spare);if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;} -	   -	   -    	if (l_mbaPosition == 0) +	else if(l_data_attr == 2)  	{ -	    	//Writing MBS 01 pattern registers for comparison mode    -	     -    	 -	 -        rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD0Q_0x02011681, l_var_data_buffer_64); if(rc) return rc; -        rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD1Q_0x02011682, l_var1_data_buffer_64); if(rc) return rc; -        rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD2Q_0x02011683, l_var_data_buffer_64); if(rc) return rc; -    	rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD3Q_0x02011684, l_var1_data_buffer_64); if(rc) return rc;  -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD4Q_0x02011685, l_var_data_buffer_64); if(rc) return rc;  -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD5Q_0x02011686, l_var1_data_buffer_64); if(rc) return rc;  -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD6Q_0x02011687, l_var_data_buffer_64); if(rc) return rc;	 -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD7Q_0x02011688, l_var1_data_buffer_64); if(rc) return rc;  -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFDQ_0x02011689,  l_spare_data_buffer_64); if(rc) return rc;  -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFDSPQ_0x0201168A,l_spare_data_buffer_64); if(rc) return rc;  -                                                                                                                                                                             +		l_data_flag =1; l_random_flag = 0;  	} -	else if (l_mbaPosition == 1) +	else if(l_data_attr == 3)  	{ -	    	//Writing MBS 23 pattern registers for comparison mode    -	   -		 -		rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD0Q_0x02011781, l_var_data_buffer_64); if(rc) return rc; -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD1Q_0x02011782, l_var1_data_buffer_64); if(rc) return rc; -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD2Q_0x02011783, l_var_data_buffer_64); if(rc) return rc; -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD3Q_0x02011784, l_var1_data_buffer_64); if(rc) return rc;  -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD4Q_0x02011785, l_var_data_buffer_64); if(rc) return rc;   -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD5Q_0x02011786, l_var1_data_buffer_64); if(rc) return rc;  -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD6Q_0x02011787, l_var_data_buffer_64); if(rc) return rc;    -  	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD7Q_0x02011788, l_var1_data_buffer_64); if(rc) return rc;  -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFDQ_0x02011789,  l_spare_data_buffer_64); if(rc) return rc;  -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFDSPQ_0x0201178A,l_spare_data_buffer_64); if(rc) return rc;  -                                                                                                                                                                               +		l_data_flag =1; l_random_flag = 1;  	} -    } -    else if(i_datamode == MCBIST_2D_CUP_PAT8) -    { -	l_var = 0xFFFFFFFFFFFFFFFFull;                                                                                                                                               -	l_var1 =0x0000000000000000ull;                                                                                                                                           -    l_spare = 0xFFFF0000FFFF0000ull;  -	 -	rc_num = l_var_data_buffer_64.setDoubleWord(0,l_var);  if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}		 -	rc_num = l_var1_data_buffer_64.setDoubleWord(0,l_var1); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}   -    rc_num = l_spare_data_buffer_64.setDoubleWord(0,l_spare);if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;} -	 -	if (l_mbaPosition == 0) +	else  	{ -	    	//Writing MBS 01 pattern registers for comparison mod -    -   +		l_data_flag =1; l_random_flag = 1; +	} -        rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD0Q_0x02011681, l_var_data_buffer_64); if(rc) return rc; -        rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD1Q_0x02011682, l_var_data_buffer_64); if(rc) return rc; -        rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD2Q_0x02011683, l_var1_data_buffer_64); if(rc) return rc; -    	rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD3Q_0x02011684, l_var1_data_buffer_64); if(rc) return rc;  -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD4Q_0x02011685, l_var_data_buffer_64); if(rc) return rc;  -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD5Q_0x02011686, l_var_data_buffer_64); if(rc) return rc;  -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD6Q_0x02011687, l_var1_data_buffer_64); if(rc) return rc;	 -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD7Q_0x02011688, l_var1_data_buffer_64); if(rc) return rc;  -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFDQ_0x02011689,  l_spare_data_buffer_64); if(rc) return rc;  -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFDSPQ_0x0201168A,l_spare_data_buffer_64); if(rc) return rc;                                                                                                                                           +	if(l_data_flag == 1) +	{ +		if(i_datamode == MCBIST_2D_CUP_PAT5) +		{    +			l_var = 0xFFFF0000FFFF0000ull; +			l_var1 =0x0000FFFF0000FFFFull;  +			l_spare = 0xFF00FF00FF00FF00ull; +			 +			rc_num = l_var_data_buffer_64.setDoubleWord(0,l_var);if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;} +			rc_num = l_var1_data_buffer_64.setDoubleWord(0,l_var1);  if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;} +			rc_num = l_spare_data_buffer_64.setDoubleWord(0,l_spare);  if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;} +			 +			rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD0Q_0x030106be, l_var_data_buffer_64); if(rc) return rc; +			rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD1Q_0x030106bf, l_var1_data_buffer_64); if(rc) return rc; +			rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD2Q_0x030106c0, l_var_data_buffer_64); if(rc) return rc; +		rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD3Q_0x030106c1, l_var1_data_buffer_64); if(rc) return rc; +		rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD4Q_0x030106c2, l_var_data_buffer_64); if(rc) return rc; +		rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD5Q_0x030106c3, l_var1_data_buffer_64); if(rc) return rc; +		rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD6Q_0x030106c4, l_var_data_buffer_64); if(rc) return rc;	 +		rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD7Q_0x030106c5, l_var1_data_buffer_64); if(rc) return rc; +		rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFDQ_0x030106c6 , l_spare_data_buffer_64); if(rc) return rc; +		rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFDSPQ_0x030106c7 , l_spare_data_buffer_64); if(rc) return rc; -    } -    	else if (l_mbaPosition == 1) -    	{ -	    	//Writing MBS 23 pattern registers for comparison mod -       +		} +		 +		 +		 +		else if(i_datamode == MCBIST_2D_CUP_PAT8) +		{ +			l_var = 0xFFFFFFFFFFFFFFFFull;                                                                                                                                          +			l_var1 =0x0000000000000000ull;                                                                                                                                                                                                                                             +			l_spare = 0xFFFF0000FFFF0000ull;   +	rc_num = l_var_data_buffer_64.setDoubleWord(0,l_var);  if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}	 +	 rc_num = l_var1_data_buffer_64.setDoubleWord(0,l_var1);  if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}	 +	 rc_num = l_spare_data_buffer_64.setDoubleWord(0,l_spare);  if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;} +			rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD0Q_0x030106be, l_var_data_buffer_64); if(rc) return rc;  +			rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD1Q_0x030106bf, l_var_data_buffer_64); if(rc) return rc;   +		   rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD2Q_0x030106c0, l_var1_data_buffer_64); if(rc) return rc;    +		rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD3Q_0x030106c1, l_var1_data_buffer_64); if(rc) return rc;         +		rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD4Q_0x030106c2, l_var_data_buffer_64); if(rc) return rc;          +		rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD5Q_0x030106c3, l_var_data_buffer_64); if(rc) return rc;         +		rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD6Q_0x030106c4, l_var1_data_buffer_64); if(rc) return rc;	     +		rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD7Q_0x030106c5, l_var1_data_buffer_64); if(rc) return rc;       +		rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFDQ_0x030106c6 , l_spare_data_buffer_64); if(rc) return rc;      +		rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFDSPQ_0x030106c7 , l_spare_data_buffer_64); if(rc) return rc;     +	  +	  +		} +		else if(i_datamode == ABLE_FIVE) +		{ +			  +			// l_var = 0x4B4B4B4B4B4B4B4Bull;                                                                                                                                       +			//l_var1 = 0x9696969696969696ull;      +			 l_var = 0xA5A5A5A5A5A5A5A5ull;                                                                                                                                       +			 l_var1 =0x5A5A5A5A5A5A5A5Aull;                                                                                                                                   +			l_spare = 0xA55AA55AA55AA55Aull;  +			 +			rc_num = l_spare_data_buffer_64.setDoubleWord(0,l_spare);  if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;} +			rc_num = l_var_data_buffer_64.setDoubleWord(0,l_var);  if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;} +			rc_num = l_var1_data_buffer_64.setDoubleWord(0,l_var1);  if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;} +			 +			rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD0Q_0x030106be, l_var_data_buffer_64); if(rc) return rc;  +			rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD1Q_0x030106bf, l_var1_data_buffer_64); if(rc) return rc; +			 rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD2Q_0x030106c0, l_var_data_buffer_64); if(rc) return rc;  +		rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD3Q_0x030106c1, l_var1_data_buffer_64); if(rc) return rc;     +		rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD4Q_0x030106c2, l_var_data_buffer_64); if(rc) return rc;      +		rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD5Q_0x030106c3, l_var1_data_buffer_64); if(rc) return rc;     +		rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD6Q_0x030106c4, l_var_data_buffer_64); if(rc) return rc;	     +		rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD7Q_0x030106c5, l_var1_data_buffer_64); if(rc) return rc;     +		rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFDQ_0x030106c6 , l_spare_data_buffer_64); if(rc) return rc;    +		rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFDSPQ_0x030106c7 , l_spare_data_buffer_64); if(rc) return rc;     +		} -		rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD0Q_0x02011781, l_var_data_buffer_64); if(rc) return rc; -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD1Q_0x02011782, l_var_data_buffer_64); if(rc) return rc; -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD2Q_0x02011783, l_var1_data_buffer_64); if(rc) return rc; -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD3Q_0x02011784, l_var1_data_buffer_64); if(rc) return rc;  -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD4Q_0x02011785, l_var_data_buffer_64); if(rc) return rc;   -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD5Q_0x02011786, l_var_data_buffer_64); if(rc) return rc;  -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD6Q_0x02011787, l_var1_data_buffer_64); if(rc) return rc;    -  	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD7Q_0x02011788, l_var1_data_buffer_64); if(rc) return rc;  -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFDQ_0x02011789,  l_spare_data_buffer_64); if(rc) return rc;  -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFDSPQ_0x0201178A,l_spare_data_buffer_64); if(rc) return rc; -		                                                                                                                                        +		else if((i_datamode == DATA_GEN_DELTA_I) || (i_datamode == MCBIST_2D_CUP_PAT0)) +		{ +		    +																																											 +			l_var = 0xFFFFFFFFFFFFFFFFull;                                                                                                                                     +			l_var1 =0x0000000000000000ull;                                                                                                                                     +			l_spare = 0xFF00FF00FF00FF00ull;                                                                                                                                   +			rc_num = l_spare_data_buffer_64.setDoubleWord(0,l_spare);  if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;} +			rc_num = l_var_data_buffer_64.setDoubleWord(0,l_var);  if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;} +			rc_num = l_var1_data_buffer_64.setDoubleWord(0,l_var1);  if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;} +			 +			rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD0Q_0x030106be, l_var_data_buffer_64); if(rc) return rc;  +			rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD1Q_0x030106bf, l_var1_data_buffer_64); if(rc) return rc; +			 rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD2Q_0x030106c0, l_var_data_buffer_64); if(rc) return rc;  +		rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD3Q_0x030106c1, l_var1_data_buffer_64); if(rc) return rc;     +		rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD4Q_0x030106c2, l_var_data_buffer_64); if(rc) return rc;      +		rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD5Q_0x030106c3, l_var1_data_buffer_64); if(rc) return rc;     +		rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD6Q_0x030106c4, l_var_data_buffer_64); if(rc) return rc;	     +		rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFD7Q_0x030106c5, l_var1_data_buffer_64); if(rc) return rc;     +		rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFDQ_0x030106c6 , l_spare_data_buffer_64); if(rc) return rc;    +		rc = fapiPutScom(i_target_mba, MBA01_MCBIST_MCBFDSPQ_0x030106c7 , l_spare_data_buffer_64); if(rc) return rc;     +																																							   +		} - -        } -    } -    else if(i_datamode == ABLE_FIVE) -    { -	    l_var = 0xA5A5A5A5A5A5A5A5ull;                                                                                                                                       -		l_var1 =0x5A5A5A5A5A5A5A5Aull;                                                                                                                                       -		l_spare = 0xA55AA55AA55AA55Aull;                                                                                                                                     +		else if(i_datamode == PSEUDORANDOM) +		{ +			l_rand_32 = 0xFFFFFFFF;//Hard Coded Temporary Fix till random function is fixed +		  // srand(2); +		   if(i_seed_choice == 1) +		   { +				if(i_seed == 0) +				{ +					i_seed = 0xFFFFFFFF; +				} +				l_rand_32 = i_seed; +		   } +		    +			 +			for (l_index = 0; l_index< (MAX_BYTE) ; l_index++) +			{ +				//l_rand_32 = rand(); +				 +				rc_num =  rc_num| l_data_buffer_32.insertFromRight(l_rand_32,0,32);	 +				rc_num =  rc_num|  l_data_buffer_64.insert(l_data_buffer_32,0,32,0); +				//l_rand_32 = rand(); +				 +				rc_num = rc_num| l_data_buffer_32.insertFromRight(l_rand_32,0,32);           +				rc_num = rc_num| l_data_buffer_64.insert(l_data_buffer_32,32,32,0); +			if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;} +			rc = fapiPutScom(i_target_mba, l_mba01_mcb_pseudo_random[l_index] , l_data_buffer_64); if(rc) return rc; +			} +		} +		else +		{ +			FAPI_ERR("Data generation configuration mcbist_data_gen enum : %d does not exist for centaur printPosData(i_target_mba)",(int)i_datamode); +		    +			FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR); +			return rc; +		} -	rc_num = l_var_data_buffer_64.setDoubleWord(0,l_var);  if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}		 -	rc_num = l_var1_data_buffer_64.setDoubleWord(0,l_var1); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}   -    rc_num = l_spare_data_buffer_64.setDoubleWord(0,l_spare);if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;} +		fapi::Target i_target_centaur ; +		rc = fapiGetParentChip(i_target_mba, i_target_centaur);  +		if (rc) +		{ +		if(l_print == 0)FAPI_INF("Error in getting parent chip!"); return rc; +		} +		 +		if(i_datamode == MCBIST_2D_CUP_PAT5) +		{ +		  l_var = 0xFFFF0000FFFF0000ull;                                                                                                                                       +		  l_var1 =0x0000FFFF0000FFFFull;                                                                                                                                   +		  l_spare = 0xFF00FF00FF00FF00ull;  +		   +		rc_num = l_var_data_buffer_64.setDoubleWord(0,l_var);  if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}		 +		rc_num = l_var1_data_buffer_64.setDoubleWord(0,l_var1); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}   +		rc_num = l_spare_data_buffer_64.setDoubleWord(0,l_spare);if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;} +		   +		   +			if (l_mbaPosition == 0) +		{ +				//Writing MBS 01 pattern registers for comparison mode    +			 +			 +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD0Q_0x02011681, l_var_data_buffer_64); if(rc) return rc; +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD1Q_0x02011682, l_var1_data_buffer_64); if(rc) return rc; +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD2Q_0x02011683, l_var_data_buffer_64); if(rc) return rc; +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD3Q_0x02011684, l_var1_data_buffer_64); if(rc) return rc;  +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD4Q_0x02011685, l_var_data_buffer_64); if(rc) return rc;  +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD5Q_0x02011686, l_var1_data_buffer_64); if(rc) return rc;  +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD6Q_0x02011687, l_var_data_buffer_64); if(rc) return rc;	 +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD7Q_0x02011688, l_var1_data_buffer_64); if(rc) return rc;  +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFDQ_0x02011689,  l_spare_data_buffer_64); if(rc) return rc;  +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFDSPQ_0x0201168A,l_spare_data_buffer_64); if(rc) return rc;  +																																												 +		} +		else if (l_mbaPosition == 1) +		{ +				//Writing MBS 23 pattern registers for comparison mode    +		   +			 +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD0Q_0x02011781, l_var_data_buffer_64); if(rc) return rc; +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD1Q_0x02011782, l_var1_data_buffer_64); if(rc) return rc; +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD2Q_0x02011783, l_var_data_buffer_64); if(rc) return rc; +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD3Q_0x02011784, l_var1_data_buffer_64); if(rc) return rc;  +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD4Q_0x02011785, l_var_data_buffer_64); if(rc) return rc;   +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD5Q_0x02011786, l_var1_data_buffer_64); if(rc) return rc;  +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD6Q_0x02011787, l_var_data_buffer_64); if(rc) return rc;    +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD7Q_0x02011788, l_var1_data_buffer_64); if(rc) return rc;  +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFDQ_0x02011789,  l_spare_data_buffer_64); if(rc) return rc;  +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFDSPQ_0x0201178A,l_spare_data_buffer_64); if(rc) return rc;  +																																												   +		} +		} +		else if(i_datamode == MCBIST_2D_CUP_PAT8) +		{ +		l_var = 0xFFFFFFFFFFFFFFFFull;                                                                                                                                               +		l_var1 =0x0000000000000000ull;                                                                                                                                           +		l_spare = 0xFFFF0000FFFF0000ull;  -         if (l_mbaPosition == 0) -	 { -	    	//Writing MBS 01 pattern registers for comparison mod -	 -	 -        rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD0Q_0x02011681, l_var_data_buffer_64); if(rc) return rc; -        rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD1Q_0x02011682, l_var1_data_buffer_64); if(rc) return rc; -        rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD2Q_0x02011683, l_var_data_buffer_64); if(rc) return rc; -    	rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD3Q_0x02011684, l_var1_data_buffer_64); if(rc) return rc;  -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD4Q_0x02011685, l_var_data_buffer_64); if(rc) return rc;  -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD5Q_0x02011686, l_var1_data_buffer_64); if(rc) return rc;  -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD6Q_0x02011687, l_var_data_buffer_64); if(rc) return rc;	 -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD7Q_0x02011688, l_var1_data_buffer_64); if(rc) return rc;  -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFDQ_0x02011689,  l_spare_data_buffer_64); if(rc) return rc;  -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFDSPQ_0x0201168A,l_spare_data_buffer_64); if(rc) return rc;  -     } -    	 else if (l_mbaPosition == 1) -    	 { -	    	//Writing MBS 23 pattern registers for comparison mod -        	                                                                                                                                                                           	  -		 -		 -		rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD0Q_0x02011781, l_var_data_buffer_64); if(rc) return rc; -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD1Q_0x02011782, l_var1_data_buffer_64); if(rc) return rc; -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD2Q_0x02011783, l_var_data_buffer_64); if(rc) return rc; -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD3Q_0x02011784, l_var1_data_buffer_64); if(rc) return rc;  -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD4Q_0x02011785, l_var_data_buffer_64); if(rc) return rc;   -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD5Q_0x02011786, l_var1_data_buffer_64); if(rc) return rc;  -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD6Q_0x02011787, l_var_data_buffer_64); if(rc) return rc;    -  	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD7Q_0x02011788, l_var1_data_buffer_64); if(rc) return rc;  -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFDQ_0x02011789,  l_spare_data_buffer_64); if(rc) return rc;  -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFDSPQ_0x0201178A,l_spare_data_buffer_64); if(rc) return rc;                                                                                                                                         -		                                                                                                                                                                 	   			 -         } -    } -    else if((i_datamode == DATA_GEN_DELTA_I) || (i_datamode == MCBIST_2D_CUP_PAT0)) -    { -	                                                                                                                                                                    	 -        	l_var = 0xFFFFFFFFFFFFFFFFull;                                                                                                                                    	 -        	l_var1 =0x0000000000000000ull;                                                                                                                                    	 -        	l_spare = 0xFF00FF00FF00FF00ull;   -		 -		    	rc_num = l_var_data_buffer_64.setDoubleWord(0,l_var);  if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}		 -	rc_num = l_var1_data_buffer_64.setDoubleWord(0,l_var1); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}   -    rc_num = l_spare_data_buffer_64.setDoubleWord(0,l_spare);if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}	 -	 +		rc_num = l_var_data_buffer_64.setDoubleWord(0,l_var);  if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}		 +		rc_num = l_var1_data_buffer_64.setDoubleWord(0,l_var1); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}   +		rc_num = l_spare_data_buffer_64.setDoubleWord(0,l_spare);if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}  		if (l_mbaPosition == 0)  		{ -	    	//Writing MBS 01 pattern registers for comparison mod -    -	 -        rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD0Q_0x02011681, l_var_data_buffer_64); if(rc) return rc; -        rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD1Q_0x02011682, l_var1_data_buffer_64); if(rc) return rc; -        rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD2Q_0x02011683, l_var_data_buffer_64); if(rc) return rc; -    	rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD3Q_0x02011684, l_var1_data_buffer_64); if(rc) return rc;  -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD4Q_0x02011685, l_var_data_buffer_64); if(rc) return rc;  -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD5Q_0x02011686, l_var1_data_buffer_64); if(rc) return rc;  -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD6Q_0x02011687, l_var_data_buffer_64); if(rc) return rc;	 -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD7Q_0x02011688, l_var1_data_buffer_64); if(rc) return rc;  -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFDQ_0x02011689,  l_spare_data_buffer_64); if(rc) return rc;  -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFDSPQ_0x0201168A,l_spare_data_buffer_64); if(rc) return rc; 	 -                                                                                                                                       	 -                                                                                                                                                                      	 -	 -    	} -    	else if (l_mbaPosition == 1) -    	{ -	    	//Writing MBS 23 pattern registers for comparison mod -    -	 -        rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD0Q_0x02011781, l_var_data_buffer_64); if(rc) return rc; -        rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD1Q_0x02011782, l_var1_data_buffer_64); if(rc) return rc; -        rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD2Q_0x02011783, l_var_data_buffer_64); if(rc) return rc; -    	rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD3Q_0x02011784, l_var1_data_buffer_64); if(rc) return rc;  -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD4Q_0x02011785, l_var_data_buffer_64); if(rc) return rc;  -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD5Q_0x02011786, l_var1_data_buffer_64); if(rc) return rc;  -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD6Q_0x02011787, l_var_data_buffer_64); if(rc) return rc;	 -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD7Q_0x02011788, l_var1_data_buffer_64); if(rc) return rc;  -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFDQ_0x02011789,  l_spare_data_buffer_64); if(rc) return rc;  -	    rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFDSPQ_0x0201178A,l_spare_data_buffer_64); if(rc) return rc; 	                                                                                                                                                                    	          -	                                                                                                                               	      -		 -    	} -    } -	 -     -    else -    { -        FAPI_ERR("Data generation configuration mcbist_data_gen enum : %d does not exist for centaur printPosData(i_target_mba)",(int)i_datamode); -         -		FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR); -		return rc; -    } -    for(l_index = 0; l_index<MAX_BYTE ;l_index ++) -    { -         -        for(l_index1 = 0; l_index1 < 8; l_index1++) -        { -            //l_rand_8 = rand(); -			l_rand_8 = 0xFF; -            rc_num =  l_data_buffer_64.insert(l_rand_8,8*l_index1,8,24);if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}       // Source start in sn is given as 24 -- need to ask -        } -	rc = fapiPutScom(i_target_mba, l_mba01_mcb_random[l_index] , l_data_buffer_64); if(rc) return rc; -    } +				//Writing MBS 01 pattern registers for comparison mod +	    +	   +		 +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD0Q_0x02011681, l_var_data_buffer_64); if(rc) return rc; +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD1Q_0x02011682, l_var_data_buffer_64); if(rc) return rc; +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD2Q_0x02011683, l_var1_data_buffer_64); if(rc) return rc; +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD3Q_0x02011684, l_var1_data_buffer_64); if(rc) return rc;  +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD4Q_0x02011685, l_var_data_buffer_64); if(rc) return rc;  +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD5Q_0x02011686, l_var_data_buffer_64); if(rc) return rc;  +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD6Q_0x02011687, l_var1_data_buffer_64); if(rc) return rc;	 +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD7Q_0x02011688, l_var1_data_buffer_64); if(rc) return rc;  +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFDQ_0x02011689,  l_spare_data_buffer_64); if(rc) return rc;  +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFDSPQ_0x0201168A,l_spare_data_buffer_64); if(rc) return rc;                                                                                                                                           +			 +		} +			else if (l_mbaPosition == 1) +			{ +				//Writing MBS 23 pattern registers for comparison mod +		   +		   +			 +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD0Q_0x02011781, l_var_data_buffer_64); if(rc) return rc; +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD1Q_0x02011782, l_var_data_buffer_64); if(rc) return rc; +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD2Q_0x02011783, l_var1_data_buffer_64); if(rc) return rc; +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD3Q_0x02011784, l_var1_data_buffer_64); if(rc) return rc;  +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD4Q_0x02011785, l_var_data_buffer_64); if(rc) return rc;   +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD5Q_0x02011786, l_var_data_buffer_64); if(rc) return rc;  +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD6Q_0x02011787, l_var1_data_buffer_64); if(rc) return rc;    +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD7Q_0x02011788, l_var1_data_buffer_64); if(rc) return rc;  +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFDQ_0x02011789,  l_spare_data_buffer_64); if(rc) return rc;  +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFDSPQ_0x0201178A,l_spare_data_buffer_64); if(rc) return rc; +																																				    +			 +			} +		} +		else if(i_datamode == ABLE_FIVE) +		{ +			l_var = 0xA5A5A5A5A5A5A5A5ull;                                                                                                                                       +			l_var1 =0x5A5A5A5A5A5A5A5Aull;                                                                                                                                       +			l_spare = 0xA55AA55AA55AA55Aull;                                                                                                                                     +			 +		rc_num = l_var_data_buffer_64.setDoubleWord(0,l_var);  if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}		 +		rc_num = l_var1_data_buffer_64.setDoubleWord(0,l_var1); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}   +		rc_num = l_spare_data_buffer_64.setDoubleWord(0,l_spare);if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;} +			 +			 +			 if (l_mbaPosition == 0) +		 { +				//Writing MBS 01 pattern registers for comparison mod +		 +		 +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD0Q_0x02011681, l_var_data_buffer_64); if(rc) return rc; +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD1Q_0x02011682, l_var1_data_buffer_64); if(rc) return rc; +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD2Q_0x02011683, l_var_data_buffer_64); if(rc) return rc; +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD3Q_0x02011684, l_var1_data_buffer_64); if(rc) return rc;  +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD4Q_0x02011685, l_var_data_buffer_64); if(rc) return rc;  +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD5Q_0x02011686, l_var1_data_buffer_64); if(rc) return rc;  +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD6Q_0x02011687, l_var_data_buffer_64); if(rc) return rc;	 +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD7Q_0x02011688, l_var1_data_buffer_64); if(rc) return rc;  +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFDQ_0x02011689,  l_spare_data_buffer_64); if(rc) return rc;  +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFDSPQ_0x0201168A,l_spare_data_buffer_64); if(rc) return rc;  +		 } +			 else if (l_mbaPosition == 1) +			 { +				//Writing MBS 23 pattern registers for comparison mod +																																															  +			 +			 +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD0Q_0x02011781, l_var_data_buffer_64); if(rc) return rc; +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD1Q_0x02011782, l_var1_data_buffer_64); if(rc) return rc; +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD2Q_0x02011783, l_var_data_buffer_64); if(rc) return rc; +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD3Q_0x02011784, l_var1_data_buffer_64); if(rc) return rc;  +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD4Q_0x02011785, l_var_data_buffer_64); if(rc) return rc;   +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD5Q_0x02011786, l_var1_data_buffer_64); if(rc) return rc;  +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD6Q_0x02011787, l_var_data_buffer_64); if(rc) return rc;    +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD7Q_0x02011788, l_var1_data_buffer_64); if(rc) return rc;  +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFDQ_0x02011789,  l_spare_data_buffer_64); if(rc) return rc;  +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFDSPQ_0x0201178A,l_spare_data_buffer_64); if(rc) return rc;                                                                                                                                         +																																															 +			 } +		} +		else if((i_datamode == DATA_GEN_DELTA_I) || (i_datamode == MCBIST_2D_CUP_PAT0)) +		{ +																																												 +				l_var = 0xFFFFFFFFFFFFFFFFull;                                                                                                                                    	 +				l_var1 =0x0000000000000000ull;                                                                                                                                    	 +				l_spare = 0xFF00FF00FF00FF00ull;   +			 +					rc_num = l_var_data_buffer_64.setDoubleWord(0,l_var);  if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}		 +		rc_num = l_var1_data_buffer_64.setDoubleWord(0,l_var1); if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}   +		rc_num = l_spare_data_buffer_64.setDoubleWord(0,l_spare);if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}	 +		 +			 +			if (l_mbaPosition == 0) +			{ +				//Writing MBS 01 pattern registers for comparison mod +	    +		 +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD0Q_0x02011681, l_var_data_buffer_64); if(rc) return rc; +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD1Q_0x02011682, l_var1_data_buffer_64); if(rc) return rc; +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD2Q_0x02011683, l_var_data_buffer_64); if(rc) return rc; +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD3Q_0x02011684, l_var1_data_buffer_64); if(rc) return rc;  +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD4Q_0x02011685, l_var_data_buffer_64); if(rc) return rc;  +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD5Q_0x02011686, l_var1_data_buffer_64); if(rc) return rc;  +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD6Q_0x02011687, l_var_data_buffer_64); if(rc) return rc;	 +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFD7Q_0x02011688, l_var1_data_buffer_64); if(rc) return rc;  +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFDQ_0x02011689,  l_spare_data_buffer_64); if(rc) return rc;  +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST01_MBS_MCBFDSPQ_0x0201168A,l_spare_data_buffer_64); if(rc) return rc; 	 +																																			 +																																											 +		 +			} +			else if (l_mbaPosition == 1) +			{ +				//Writing MBS 23 pattern registers for comparison mod +	    +		 +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD0Q_0x02011781, l_var_data_buffer_64); if(rc) return rc; +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD1Q_0x02011782, l_var1_data_buffer_64); if(rc) return rc; +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD2Q_0x02011783, l_var_data_buffer_64); if(rc) return rc; +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD3Q_0x02011784, l_var1_data_buffer_64); if(rc) return rc;  +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD4Q_0x02011785, l_var_data_buffer_64); if(rc) return rc;  +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD5Q_0x02011786, l_var1_data_buffer_64); if(rc) return rc;  +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD6Q_0x02011787, l_var_data_buffer_64); if(rc) return rc;	 +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFD7Q_0x02011788, l_var1_data_buffer_64); if(rc) return rc;  +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFDQ_0x02011789,  l_spare_data_buffer_64); if(rc) return rc;  +			rc = fapiPutScom(i_target_centaur, MBS_MCBIST23_MBS_MCBFDSPQ_0x0201178A,l_spare_data_buffer_64); if(rc) return rc; 	                                                                                                                                                                    	          +																																			  +			 +			} +		} +		 +		 +		else +		{ +			FAPI_ERR("Data generation configuration mcbist_data_gen enum : %d does not exist for centaur printPosData(i_target_mba)",(int)i_datamode); +			 +			FAPI_SET_HWP_ERROR(rc, RC_MSS_INPUT_ERROR); +			return rc; +		} +	} +	 +    if(l_random_flag == 1) +	{ +		for(l_index = 0; l_index<MAX_BYTE ;l_index ++) +		{ +			 +			for(l_index1 = 0; l_index1 < 8; l_index1++) +			{ +				//l_rand_8 = rand(); +				l_rand_8 = 0xFF; +				rc_num =  l_data_buffer_64.insert(l_rand_8,8*l_index1,8,24);if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}       // Source start in sn is given as 24 -- need to ask +			} +		rc = fapiPutScom(i_target_mba, l_mba01_mcb_random[l_index] , l_data_buffer_64); if(rc) return rc; +		 +		if(l_mbaPosition == 0) +		{ +		 +			rc = fapiPutScom(i_target_mba, l_mbs01_mcb_random[l_index] , l_data_buffer_64); if(rc) return rc;//added +		 +		} +		else +		{ +		 +			rc = fapiPutScom(i_target_mba, l_mbs23_mcb_random[l_index] , l_data_buffer_64); if(rc) return rc;//added +		 +		} +		} +	}     // rc = print_pattern(i_target_mba);if(rc)return rc; @@ -580,7 +725,7 @@ rc_num = l_var_data_buffer_64.setDoubleWord(0,l_var);  if (rc_num){ FAPI_ERR( "c      if(i_mcbrotate == 0)      { -        FAPI_INF("i_mcbrotate == 0 , the l_rotnum is set to 13"); +        //if(l_print == 0)FAPI_INF("i_mcbrotate == 0 , the l_rotnum is set to 13");          l_rotnum = 13;   // for random data generation - basic setup      }      else @@ -602,12 +747,18 @@ rc_num = l_var_data_buffer_64.setDoubleWord(0,l_var);  if (rc_num){ FAPI_ERR( "c      rc_num = rc_num| l_data_buffer_64.insert(l_data_buffer_16,4,16,0); -    FAPI_INF("Clearing bit 20 of MBA01_MCBIST_MCBDRCRQ_0x030106bd to avoid inversion of data to the write data flow"); +    if(l_print == 0)FAPI_INF("Clearing bit 20 of MBA01_MCBIST_MCBDRCRQ_0x030106bd to avoid inversion of data to the write data flow");      rc_num =  rc_num|l_data_buffer_64.clearBit(20);  	if (rc_num){ FAPI_ERR( "cfg_mcb_dgen:");rc.setEcmdError(rc_num);return rc;}      rc = fapiPutScom(i_target_mba,MBA01_MCBIST_MCBDRCRQ_0x030106bd,l_data_buffer_64); if(rc) return rc; +  	//if(l_print == 0)FAPI_INF("Function Name: cfg_mcb_dgen"); +    //if(l_print == 0)FAPI_INF("Stop Time"); +     +	      return rc;      } +	 +  } diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist.H b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist.H index b917f4a20..4edf56fa0 100755 --- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist.H +++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist.H @@ -20,7 +20,7 @@  /* Origin: 30                                                             */  /*                                                                        */  /* IBM_PROLOG_END_TAG                                                     */ -// $Id: mss_mcbist.H,v 1.30 2013/04/22 13:01:27 lapietra Exp $ +// $Id: mss_mcbist.H,v 1.37 2013/08/02 09:00:44 sasethur Exp $  // *!***************************************************************************  // *! (C) Copyright International Business Machines Corp. 1997, 1998  // *!           All Rights Reserved -- Property of IBM @@ -38,6 +38,13 @@  //-------------------------------------------------------------------------------  // Version:|Author: | Date:   | Comment:  // --------|--------|---------|-------------------------------------------------- +//   1.37  |aditya  |08/02/13 |Updated parameters in mcb_error_map_print function +//   1.36  |aditya  |07/09/13 |Added l_random_addr_enable and l_fixed_addr_enable for struct Subtest_info +//   1.35  |aditya  |06/11/13 |Added l_random_data_enable and l_fixed_data_enable for struct Subtest_info +//   1.34  |aditya  |05/23/13 |Added TEST_RR and TEST_RF testtypes +//   1.33  |aditya  |05/22/13 |updated parameters for Subtest Printing +//   1.32  |aditya  |05/14/13 |updated parameters for cfg_mcb_dgen and random seed details +//   1.31  |aditya  |05/07/13 |Changed Parameter Passing in Functions  //   1.30  |aditya  |04/22/13 |updated testtypes  //   1.27  |aditya  |02/13/13 |updated testtypes  //   1.25  |aditya  |02/12/13 |updated testtypes @@ -77,10 +84,6 @@ extern "C"  using namespace fapi;  //############### Global variables ################ -/*const uint8_t MAX_PORT = 2; -const uint8_t MAX_BYTE = 10; -const uint8_t MAX_RANK = 8; -const uint8_t MAX_NIBBLE = 1;;;*/  enum mcbist_test_mem  { @@ -122,7 +125,12 @@ enum mcbist_test_mem      R_INFINITE_RF,      MARCH,      SIMPLE_FIX_RF, -	SHMOO_STRESS +	SHMOO_STRESS, +	SIMPLE_RAND_RA, +	SIMPLE_FIX_RA, +	SIMPLE_FIX_RF_RA, +	TEST_RR, +	TEST_RF  };  enum mcbist_data_gen @@ -172,7 +180,7 @@ enum mcbist_data_gen      FIRST_XFER_X4MODE,      MCBIST_LONG,      PSEUDORANDOM, -	CASTLE +    CASTLE  };  enum mcbist_oper_type @@ -261,21 +269,33 @@ enum shmoo_addr_mode     FULL_ADDR = 3  }; +struct Subtest_info +{ +uint8_t l_operation_type; +uint8_t l_data_mode; +uint8_t l_addr_mode; +uint8_t l_random_data_enable; +uint8_t l_fixed_data_enable; +uint8_t l_random_addr_enable; +uint8_t l_fixed_addr_enable; +};    - - - -fapi::ReturnCode poll_mcb(const fapi::Target & i_target_mba,bool i_mcb_stop_on_fail,uint8_t *o_mcb_status,uint64_t i_time); -fapi::ReturnCode mcb_error_map(const fapi::Target & i_target_mba,uint8_t  o_error_map[][8][10][2],uint8_t i_port,uint8_t i_rank); -fapi::ReturnCode mcb_write_test_mem(const fapi::Target & i_target_mba,const uint64_t i_reg_addr,mcbist_oper_type i_operation_type,uint8_t i_cfg_test_123_cmd,mcbist_addr_mode i_addr_mode,mcbist_data_mode i_data_mode,uint8_t i_done,mcbist_data_select_mode i_data_select_mode, mcbist_add_select_mode i_addr_select_mode,uint8_t i_testnumber); -fapi::ReturnCode cfg_mcb_test_mem(const fapi::Target & i_target_mba,mcbist_test_mem i_test_type); +fapi::ReturnCode poll_mcb(const fapi::Target & i_target_mba,bool i_mcb_stop_on_fail,uint8_t *o_mcb_status,struct Subtest_info l_sub_info[30],uint8_t i_flag); +fapi::ReturnCode mcb_error_map(const fapi::Target & i_target_mba,uint8_t  o_error_map[][8][10][2]); +fapi::ReturnCode mcb_write_test_mem(const fapi::Target & i_target_mba,const uint64_t i_reg_addr,mcbist_oper_type i_operation_type,uint8_t i_cfg_test_123_cmd,mcbist_addr_mode i_addr_mode,mcbist_data_mode i_data_mode,uint8_t i_done,mcbist_data_select_mode i_data_select_mode, mcbist_add_select_mode i_addr_select_mode,uint8_t i_testnumber,uint8_t i_testnumber1,uint8_t i_total_no,struct Subtest_info l_sub_info[30]); +fapi::ReturnCode cfg_mcb_test_mem(const fapi::Target & i_target_mba,mcbist_test_mem i_test_type,struct Subtest_info l_sub_info[30]);  fapi::ReturnCode mcb_reset_trap(const fapi::Target & i_target_mba); -fapi::ReturnCode cfg_mcb_dgen(const fapi::Target & i_target_mba,mcbist_data_gen i_datamode,uint8_t i_mcbrotate); -fapi::ReturnCode cfg_byte_mask(const fapi::Target & i_target_mba,uint8_t i_rank,uint8_t i_port); +fapi::ReturnCode cfg_mcb_dgen(const fapi::Target & i_target_mba,mcbist_data_gen i_datamode,uint8_t i_mcbrotate,uint8_t i_seed_choice,uint32_t i_seed); +fapi::ReturnCode cfg_byte_mask(const fapi::Target & i_target_mba);  fapi::ReturnCode start_mcb(const fapi::Target & i_target_mba); -fapi::ReturnCode setup_mcbist(const fapi::Target & i_target_mba, uint8_t i_port,mcbist_data_gen i_mcbpatt,mcbist_test_mem i_mcbtest,mcbist_byte_mask i_mcbbytemask,uint8_t i_mcbrotate,uint8_t i_pattern,uint8_t i_test_type,uint8_t i_rank,uint8_t i_bit32,uint64_t i_start,uint64_t i_end,uint8_t new_address_map); +fapi::ReturnCode setup_mcbist(const fapi::Target & i_target_mba,mcbist_byte_mask i_mcbbytemask,uint8_t i_mcbrotate,uint8_t i_seed_choice,uint32_t i_seed,struct Subtest_info l_sub_info[30]); +//fapi::ReturnCode  mcb_error_map_print(const fapi::Target & i_target_mba,ecmdDataBufferBase & i_mcb_fail_320,uint8_t i_port); +fapi::ReturnCode  mcb_error_map_print(const fapi::Target & i_target_mba,ecmdDataBufferBase & l_mcb_fail_160,uint8_t i_port,uint8_t l_array[200],uint8_t l_number); +fapi::ReturnCode mss_conversion_testtype(const fapi::Target & i_target_mba,uint8_t l_pattern,mcbist_test_mem &i_mcbtest ); +fapi::ReturnCode mss_conversion_data(const fapi::Target & i_target_mba,uint8_t l_pattern,mcbist_data_gen  &i_mcbpatt); + + -fapi::ReturnCode  mcb_error_map_print(const fapi::Target & i_target_mba,uint8_t i_port,uint8_t i_rank,ecmdDataBufferBase & i_mcb_fail_320);  }  #endif diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_address.C b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_address.C index 21f435758..f36b459b8 100644 --- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_address.C +++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_address.C @@ -20,7 +20,7 @@  /* Origin: 30                                                             */  /*                                                                        */  /* IBM_PROLOG_END_TAG                                                     */ -// $Id: mss_mcbist_address.C,v 1.10 2013/04/30 08:56:00 ppcaelab Exp $ +// $Id: mss_mcbist_address.C,v 1.11 2013/05/16 22:00:24 sasethur Exp $  // *!***************************************************************************  // *! (C) Copyright International Business Machines Corp. 1997, 1998, 2013  // *!           All Rights Reserved -- Property of IBM @@ -38,6 +38,8 @@  //-------------------------------------------------------------------------------  // Version:|Author: | Date:   | Comment:  // --------|--------|---------|-------------------------------------------------- +// 1.11	   |preeragh|17-May-13| Fixed FW Review Comments +// 1.10	   |preeragh|30-Apr-13| Fixed FW Review Comment  // 1.9     |bellows |04-Apr-13| Changed program to be Hostboot compliant  // 1.2     |bellows |03-Apr-13| Added Id and cleaned up a warning msg.  // 1.1     |        |xx-Apr-13| Copied from original which is now known as mss_mcbist_address_default/_lab.C @@ -49,15 +51,17 @@ extern "C"  {  using namespace fapi; -#define MAX_STRING_LEN 80 +#define MAX_ADDR_BITS 37 +#define MAX_VALUE_TWO 2 +  #define DELIMITERS ","  fapi::ReturnCode address_generation(const fapi:: Target & i_target_mba,uint8_t i_port,mcbist_addr_mode i_addr_type,interleave_type i_add_inter_type,uint8_t i_rank,uint64_t &io_start_address, uint64_t &io_end_address)  {  fapi::ReturnCode  rc; -uint8_t l_num_ranks_per_dimm[2][2]; -uint8_t l_num_master_ranks[2][2]; +uint8_t l_num_ranks_per_dimm[MAX_VALUE_TWO][MAX_VALUE_TWO]; +uint8_t l_num_master_ranks[MAX_VALUE_TWO][MAX_VALUE_TWO];  uint8_t l_dram_gen=0;  uint8_t l_dram_banks=0;  uint8_t l_dram_rows=0; @@ -104,7 +108,7 @@ FAPI_INF("ATTR_EFF_NUM_RANKS_PER_DIMM is %d ",l_num_ranks_per_dimm[1][1]);  FAPI_INF("ATTR_EFF_NUM_MASTER_RANKS_PER_DIMM l_num_master_p0_dim0 is %d ",l_num_master_ranks[0][0]);  FAPI_INF("ATTR_EFF_NUM_MASTER_RANKS_PER_DIMM l_num_master_p0_dim1 is %d ",l_num_master_ranks[0][1]);  FAPI_INF("ATTR_EFF_NUM_MASTER_RANKS_PER_DIMM l_num_master_p1_dim0 is %d ",l_num_master_ranks[1][0]); -FAPI_INF("ATTR_EFF_NUM_MASTER_RANKS_PER_DIMM is l_num_master_p1_dim1 %d ",l_num_master_ranks[1][1]); +FAPI_INF("ATTR_EFF_NUM_MASTER_RANKS_PER_DIMM l_num_master_p1_dim1 is %d ",l_num_master_ranks[1][1]);  //------------------------------------------------------------------------------- @@ -184,14 +188,14 @@ return rc;  fapi::ReturnCode parse_addr(const fapi:: Target & i_target_mba, char addr_string[],uint8_t mr3_valid,uint8_t mr2_valid,uint8_t mr1_valid,uint8_t l_dram_rows,uint8_t l_dram_cols,uint8_t l_addr_inter)   {  fapi::ReturnCode  rc;  -uint8_t i=37; +uint8_t i=MAX_ADDR_BITS;  uint8_t l_slave_rank = 0;  uint8_t l_value;  uint32_t l_value32 = 0;  uint32_t l_sbit,rc_num;  uint32_t l_start=0; -uint32_t l_len = 6; +uint32_t l_len = 0;  uint64_t l_readscom_value = 0;  uint64_t l_end = 0;  uint64_t l_start_addr = 0; @@ -199,7 +203,7 @@ uint8_t l_value_zero = 0;  uint8_t l_user_end_addr = 0;  ecmdDataBufferBase l_data_buffer_64(64);  ecmdDataBufferBase l_data_buffer_rd64(64);  -uint8_t l_attr_addr_mode = 3; +uint8_t l_attr_addr_mode = 3; //default Value - FULL Address Mode  uint8_t l_num_cols = 0;  uint8_t l_num_rows = 0; @@ -225,17 +229,18 @@ if(l_num_rows == 0 )  rc_num = l_data_buffer_64.flushTo0(); -	l_sbit = 0;l_value =i; -	rc = fapiGetScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc; -	rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function  parse_addr:");rc.setEcmdError(rc_num);return rc;} -	rc = fapiPutScom(i_target_mba,0x030106c9,l_data_buffer_64);  if(rc) return rc; -	i--; +		l_sbit = 0;l_value =i; +		rc = fapiGetScom(i_target_mba,0x030106c9,l_data_buffer_64); if(rc) return rc; +		rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value,l_sbit ,6);if (rc_num){FAPI_ERR( "Error in function  parse_addr:");rc.setEcmdError(rc_num);return rc;} +		rc = fapiPutScom(i_target_mba,0x030106c9,l_data_buffer_64);  if(rc) return rc; +		i--;  		l_sbit = 54;l_value =i;  		rc = fapiGetScom(i_target_mba,0x030106c8,l_data_buffer_64);  		rc_num = rc_num| l_data_buffer_64.insertFromRight(l_value,l_sbit ,6);  		rc = fapiPutScom(i_target_mba,0x030106c8,l_data_buffer_64);  if(rc) return rc;  		i--; +		  		//FAPI_INF("Inside strcmp ba2");  		l_sbit = 48;l_value =i;  		rc = fapiGetScom(i_target_mba,0x030106c8,l_data_buffer_64); if(rc) return rc; @@ -942,7 +947,7 @@ rc = fapiPutScom(i_target_mba,0x030106d3,l_data_buffer_rd64); if(rc) return rc;  else  { -l_attr_addr_mode = 3; +l_attr_addr_mode = 3; //Default it for FW with Full Address Range  if(l_attr_addr_mode == 0)  { diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_common.C b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_common.C index f7de7db2a..614b9a336 100644 --- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_common.C +++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mcbist_common.C @@ -20,7 +20,7 @@  /* Origin: 30                                                             */  /*                                                                        */  /* IBM_PROLOG_END_TAG                                                     */ -// $Id: mss_mcbist_common.C,v 1.38 2013/04/30 08:53:46 ppcaelab Exp $ +// $Id: mss_mcbist_common.C,v 1.50 2013/08/08 07:14:25 sasethur Exp $  // *!***************************************************************************  // *! (C) Copyright International Business Machines Corp. 1997, 1998  // *!           All Rights Reserved -- Property of IBM @@ -38,7 +38,18 @@  //------------------------------------------------------------------------------  // Version:|Author: | Date:  | Comment:  // --------|--------|--------|-------------------------------------------------- -//   1.38  |aditya  |05/30/13|Minor fix for firmware  +//   1.50  |aditya  |08/08/13|Updated for Host Boot Compile +//   1.49  |aditya  |08/02/13|Updated Error Map  function +//   1.48  |aditya  |07/09/13|Added l_random_addr_enable and l_fixed_addr_enable for struct Subtest_info  +//   1.47  |aditya  |06/11/13|Replaced FAPI_INF to FAPI_DBG,Added target details for Prints +//   1.46  |aditya  |06/11/13|Enabled pattern and testtype prints  +//   1.45  |aditya  |06/11/13|Added attributes ATTR_MCBIST_PRINTING_DISABLE  +//   1.44  |aditya  |05/23/13|Added TEST_RR and TEST_RF testtypes +//   1.43  |aditya  |05/22/13|updated parameters for Subtest Printing +//   1.41  |aditya  |05/14/13|updated parameters for random seed details +//   1.40  |aditya  |05/07/13|Small Fix +//   1.39  |aditya  |05/07/13|Moved some parameters to attributes. +//   1.38  |aditya  |04/30/13|Minor fix for firmware   //   1.37  |aditya  |04/22/13|Minor Fix  //   1.36  |aditya  |04/09/13|Updated cfg_byte_mask and setup_mcbist functions  //   1.35  |aditya  |03/18/13|Updated cfg_byte_mask and error map functions @@ -128,37 +139,59 @@ const uint64_t FOUR = 0x0000000000000004ull;  //uint8_t new_address_map				Flag to Enable Custom Address Map    //****************************************************************/ - -fapi::ReturnCode  setup_mcbist(const fapi::Target & i_target_mba, uint8_t i_port,mcbist_data_gen i_mcbpatt,mcbist_test_mem i_mcbtest,mcbist_byte_mask i_mcbbytemask,uint8_t i_mcbrotate,uint8_t i_pattern,uint8_t i_test_type,uint8_t i_rank,uint8_t i_bit32,uint64_t i_start,uint64_t i_end,uint8_t new_address_map) +fapi::ReturnCode setup_mcbist(const fapi::Target & i_target_mba,mcbist_byte_mask i_mcbbytemask,uint8_t i_mcbrotate,uint8_t i_seed_choice,uint32_t i_seed,struct Subtest_info l_sub_info[30]) +//fapi::ReturnCode  setup_mcbist(const fapi::Target & i_target_mba, uint8_t i_port,mcbist_data_gen i_mcbpatt,mcbist_test_mem i_mcbtest,mcbist_byte_mask i_mcbbytemask,uint8_t i_mcbrotate,uint8_t i_pattern,uint8_t i_test_type,uint8_t i_rank,uint8_t i_bit32,uint64_t i_start,uint64_t i_end,uint8_t new_address_map)  {      fapi::ReturnCode  rc;      uint32_t rc_num = 0; -    FAPI_INF("Function Setup_MCBIST"); -    ecmdDataBufferBase l_data_buffer_64(64); +	uint8_t l_bit32 = 0; +       //uint8_t l_print = 0;  +	//rc = FAPI_ATTR_GET(ATTR_MCBIST_PRINTING_DISABLE, &i_target_mba,l_print); if(rc) return rc;	 +	 +	FAPI_DBG("%s:Function Setup_MCBIST",i_target_mba.toEcmdString()); +     +	 +     +	ecmdDataBufferBase l_data_buffer_64(64);      ecmdDataBufferBase l_data_bufferx1_64(64);       ecmdDataBufferBase l_data_bufferx2_64(64);      ecmdDataBufferBase l_data_bufferx3_64(64);       ecmdDataBufferBase l_data_bufferx4_64(64);  	uint64_t io_start_address = 0;  	uint64_t io_end_address = 0; +	uint8_t l_new_addr = 1; +	uint32_t i_mcbpatt,i_mcbtest ; +	 +	mcbist_test_mem i_mcbtest1; +	mcbist_data_gen  i_mcbpatt1; +	i_mcbtest1 = CENSHMOO; +	i_mcbpatt1 = ABLE_FIVE; +	 +	  	//uint8_t l_addr_inter=0;      //ecmdDataBufferBase l_data_buffer_64_1(64); -   // FAPI_INF("Value  of Start is %016llX and end %016llX ",i_start,i_end); +   // FAPI_DBG("%s:Value  of Start is %016llX and end %016llX ",i_start,i_end);  	uint8_t l_index = 0; -	uint8_t l_index1 = 0; +	//uint8_t l_index1 = 0;  	uint8_t l_flag = 0; -	uint8_t l_new_addr = 1; -	uint64_t scom_array[24] = {0x03010440,0x03010441,0x03010442,0x03010443,0x03010444,0x03010445,0x03010446,0x03010447,0x0201145E,0x0201145F,0x02011460,0x02011461,0x02011462,0x02011463,0x02011464,0x02011465,0x0201149E,0x0201149F,0x020114A0,0x020114A1,0x020114A2,0x020114A3,0x020114A4,0x020114A5};	 +	//uint64_t scom_array[24] = {0x03010440,0x03010441,0x03010442,0x03010443,0x03010444,0x03010445,0x03010446,0x03010447,0x0201145E,0x0201145F,0x02011460,0x02011461,0x02011462,0x02011463,0x02011464,0x02011465,0x0201149E,0x0201149F,0x020114A0,0x020114A1,0x020114A2,0x020114A3,0x020114A4,0x020114A5};	 +	uint64_t scom_array[24] = {MBA01_MBABS0_0x03010440,MBA01_MBABS1_0x03010441,MBA01_MBABS2_0x03010442,MBA01_MBABS3_0x03010443,MBA01_MBABS4_0x03010444,MBA01_MBABS5_0x03010445,MBA01_MBABS6_0x03010446 ,MBA01_MBABS7_0x03010447,MBS_ECC0_MBSBS0_0x0201145E  ,MBS_ECC0_MBSBS1_0x0201145F  ,MBS_ECC0_MBSBS2_0x02011460  ,MBS_ECC0_MBSBS3_0x02011461  ,MBS_ECC0_MBSBS4_0x02011462  ,MBS_ECC0_MBSBS5_0x02011463  ,MBS_ECC0_MBSBS6_0x02011464  ,MBS_ECC0_MBSBS7_0x02011465  ,MBS_ECC1_MBSBS0_0x0201149E  ,MBS_ECC1_MBSBS1_0x0201149F  ,MBS_ECC1_MBSBS2_0x020114A0  ,MBS_ECC1_MBSBS3_0x020114A1  ,MBS_ECC1_MBSBS4_0x020114A2  ,MBS_ECC1_MBSBS5_0x020114A3  ,MBS_ECC1_MBSBS6_0x020114A4  ,MBS_ECC1_MBSBS7_0x020114A5 } ; +	rc = FAPI_ATTR_GET(ATTR_MCBIST_PATTERN, &i_target_mba,i_mcbpatt); if(rc) return rc;//-----------i_mcbpatt------->run +	rc = FAPI_ATTR_GET(ATTR_MCBIST_TEST_TYPE, &i_target_mba, i_mcbtest); if(rc) return rc;//---------i_mcbtest------->run + +	rc = mss_conversion_testtype(i_target_mba,i_mcbtest, i_mcbtest1);if(rc) return rc; +    rc = mss_conversion_data(i_target_mba,i_mcbpatt,i_mcbpatt1);if(rc) return rc;      rc = mcb_reset_trap(i_target_mba);       if(rc) return rc; - -	if(i_bit32 == 1) +//shd set attr for this 1st 8 or last 8 +rc = FAPI_ATTR_GET(ATTR_MCBIST_ERROR_CAPTURE, &i_target_mba,l_bit32); if(rc) return rc; +	if(l_bit32 == 1)  	{ -	 +	FAPI_DBG("%s: error capture set to last 8 Bits",i_target_mba.toEcmdString());  	rc = fapiGetScom(i_target_mba,0x02011674,l_data_buffer_64);if(rc) return rc;      rc_num =  l_data_buffer_64.setBit(32);if (rc_num){FAPI_ERR( "Error in function  setup_mcbist:");rc.setEcmdError(rc_num);return rc;} @@ -231,7 +264,7 @@ fapi::ReturnCode  setup_mcbist(const fapi::Target & i_target_mba, uint8_t i_port      */ -	for(l_index = 0;l_index < 24;l_index++) +	/*for(l_index = 0;l_index < 24;l_index++)  	{  		rc = fapiGetScom(i_target_mba,scom_array[l_index],l_data_buffer_64); if(rc) return rc; @@ -246,47 +279,59 @@ fapi::ReturnCode  setup_mcbist(const fapi::Target & i_target_mba, uint8_t i_port  			} 	  		} -	}	 +	}	*/ +	 +	 +	for(l_index = 0;l_index < 24;l_index++) +	{ +		rc = fapiGetScom(i_target_mba,scom_array[l_index],l_data_buffer_64); if(rc) return rc; +		l_flag = (l_data_buffer_64.getDoubleWord(0)) ? 1 : 0; +		if(l_flag == 1) +	    { +			break; +	    } +		 +	} +	 +      	if(l_flag == 1)  	{ -		FAPI_INF("WARNING: Bit Steering  is enabled !!!"); +		FAPI_DBG("%s:WARNING: Bit Steering  is enabled !!!",i_target_mba.toEcmdString());  	}  	else  	{ -	FAPI_INF("steer mode is not enabled"); +	FAPI_DBG("%s:steer mode is not enabled",i_target_mba.toEcmdString());  	} -	rc = cfg_mcb_dgen(i_target_mba,i_mcbpatt,i_mcbrotate); if(rc) return rc; -	 -         -        rc = cfg_mcb_test_mem(i_target_mba,i_mcbtest); if(rc) return rc; +         +        //rc = cfg_mcb_test_mem(i_target_mba,i_mcbtest1); if(rc) return rc; +		rc = cfg_mcb_test_mem(i_target_mba,i_mcbtest1,l_sub_info); if(rc) return rc; +		rc = cfg_mcb_dgen(i_target_mba,i_mcbpatt1,i_mcbrotate,i_seed_choice,i_seed); if(rc) return rc; +	uint8_t i_port = 0; +	uint8_t i_rank = 0;      //preet -	//FAPI_INF("DEBUG-----Print----Address Gen "); +	//FAPI_DBG("%s:DEBUG-----Print----Address Gen ",i_target_mba.toEcmdString());  	rc = FAPI_ATTR_GET(ATTR_MCBIST_ADDR_MODES, &i_target_mba, l_new_addr); if(rc) return rc;  	if (l_new_addr != 0)  	{  		rc = address_generation(i_target_mba,i_port,SF,BANK_RANK,i_rank,io_start_address,io_end_address); -		if(rc) {FAPI_INF("BAD - RC ADDR Generation\n");return rc;} +		if(rc) {FAPI_DBG("%s:BAD - RC ADDR Generation\n",i_target_mba.toEcmdString());return rc;}  	} - - -  	if(i_mcbbytemask != NONE)      { -        rc = cfg_byte_mask(i_target_mba,0,i_port);  if(rc) return rc; +       rc = cfg_byte_mask(i_target_mba);  if(rc) return rc;      } -         return rc;  } @@ -303,58 +348,69 @@ fapi::ReturnCode  mcb_reset_trap(const fapi::Target & i_target_mba)      ecmdDataBufferBase l_data_buffer_64(64);      fapi::ReturnCode  rc;      uint32_t rc_num = 0; +	uint8_t l_mbaPosition = 0; +	//uint8_t l_print = 0;  +	//rc = FAPI_ATTR_GET(ATTR_MCBIST_PRINTING_DISABLE, &i_target_mba,l_print); if(rc) return rc; +	rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, &i_target_mba, l_mbaPosition); -    FAPI_INF("Function - mcb_reset_trap"); -    FAPI_INF("Using MCB Reset Trap Function -- This automatically resets error log RA, error counters, Status Reg and error map"); +    FAPI_DBG("%s:Function - mcb_reset_trap",i_target_mba.toEcmdString()); +    //FAPI_DBG("%s:Using MCB Reset Trap Function -- This automatically resets error log RA, error counters, Status Reg and error map",i_target_mba.toEcmdString());      //Reset MCB Maintanence register -    FAPI_INF("Clearing the MCBIST Maintenance "); -    rc_num =  l_data_buffer_64.flushTo0();if (rc_num){FAPI_ERR( "Error in function  mcb_reset_trap:");rc.setEcmdError(rc_num);return rc;} -    rc = fapiGetScom(i_target_mba,MBA01_MCBIST_MCB_CNTLSTATQ_0x030106dc,l_data_buffer_64);if(rc) return rc; -    rc_num =  l_data_buffer_64.clearBit(0,3);if (rc_num){FAPI_ERR( "Error in function  mcb_reset_trap:");rc.setEcmdError(rc_num);return rc;} -    rc = fapiPutScom(i_target_mba,MBA01_MCBIST_MCB_CNTLSTATQ_0x030106dc,l_data_buffer_64);if(rc) return rc; +    //FAPI_DBG("%s:Clearing the MCBIST Maintenance ",i_target_mba.toEcmdString()); +    //rc_num =  l_data_buffer_64.flushTo0();if (rc_num){FAPI_ERR( "Error in function  mcb_reset_trap:");rc.setEcmdError(rc_num);return rc;} +	 +    //rc = fapiGetScom(i_target_mba,MBA01_MCBIST_MCB_CNTLSTATQ_0x030106dc,l_data_buffer_64);if(rc) return rc;//comment this later +	 +    //rc_num =  l_data_buffer_64.clearBit(0,3);if (rc_num){FAPI_ERR( "Error in function  mcb_reset_trap:");rc.setEcmdError(rc_num);return rc;} +    //rc = fapiPutScom(i_target_mba,MBA01_MCBIST_MCB_CNTLSTATQ_0x030106dc,l_data_buffer_64);if(rc) return rc;       //Reset the MCBIST runtime counter -    FAPI_INF("Clearing the MCBIST Runtime Counter ");      +    FAPI_DBG("%s:Clearing the MCBIST Runtime Counter ",i_target_mba.toEcmdString());           rc_num =  l_data_buffer_64.flushTo0();if (rc_num){FAPI_ERR( "Error in function  mcb_reset_trap:");rc.setEcmdError(rc_num);return rc;}      rc = fapiGetScom(i_target_mba,MBA01_MCBIST_RUNTIMECTRQ_0x030106b0,l_data_buffer_64);if(rc) return rc;      rc_num =  l_data_buffer_64.clearBit(0,37);if (rc_num){FAPI_ERR( "Error in function  mcb_reset_trap:");rc.setEcmdError(rc_num);return rc;}      rc = fapiPutScom(i_target_mba,MBA01_MCBIST_RUNTIMECTRQ_0x030106b0,l_data_buffer_64);if(rc) return rc; -    FAPI_INF("To clear Port error map registers "); +    //FAPI_DBG("%s:To clear Port error map registers ",i_target_mba.toEcmdString());      rc_num =  l_data_buffer_64.flushTo0();if (rc_num){FAPI_ERR( "Error in function  mcb_reset_trap:");rc.setEcmdError(rc_num);return rc;} -    //PORT - A -    rc = fapiPutScom(i_target_mba,MBS_MCBIST01_MCBEMA1Q_0x0201166a,l_data_buffer_64); if(rc) return(rc); -    rc = fapiPutScom(i_target_mba,MBS_MCBIST01_MCBEMA2Q_0x0201166b,l_data_buffer_64); if(rc) return(rc); -    rc = fapiPutScom(i_target_mba,MBS_MCBIST01_MCBEMA3Q_0x0201166c,l_data_buffer_64); if(rc) return(rc); - -    //PORT - B -    rc = fapiPutScom(i_target_mba,MBS_MCBIST01_MCBEMB1Q_0x0201166d,l_data_buffer_64); if(rc) return(rc); -    rc = fapiPutScom(i_target_mba,MBS_MCBIST01_MCBEMB2Q_0x0201166e,l_data_buffer_64); if(rc) return(rc); -    rc = fapiPutScom(i_target_mba,MBS_MCBIST01_MCBEMB3Q_0x0201166f,l_data_buffer_64); if(rc) return(rc); - -	 //MBS23 -	//PORT - A -    rc = fapiPutScom(i_target_mba,0x0201176a,l_data_buffer_64); if(rc) return(rc); -    rc = fapiPutScom(i_target_mba,0x0201176b,l_data_buffer_64); if(rc) return(rc); -    rc = fapiPutScom(i_target_mba,0x0201176c,l_data_buffer_64); if(rc) return(rc); - -    //PORT - B -    rc = fapiPutScom(i_target_mba,0x0201176d,l_data_buffer_64); if(rc) return(rc); -    rc = fapiPutScom(i_target_mba,0x0201176e,l_data_buffer_64); if(rc) return(rc); -    rc = fapiPutScom(i_target_mba,0x0201176f,l_data_buffer_64); if(rc) return(rc); -	 -	rc = fapiPutScom(i_target_mba,0x02011672,l_data_buffer_64); if(rc) return(rc); -    rc = fapiPutScom(i_target_mba,0x02011673,l_data_buffer_64); if(rc) return(rc); -    rc = fapiPutScom(i_target_mba,0x02011674,l_data_buffer_64); if(rc) return(rc); -	 -	rc = fapiPutScom(i_target_mba,0x02011772,l_data_buffer_64); if(rc) return(rc); -    rc = fapiPutScom(i_target_mba,0x02011773,l_data_buffer_64); if(rc) return(rc); -    rc = fapiPutScom(i_target_mba,0x02011774,l_data_buffer_64); if(rc) return(rc); - +	/*if(l_mbaPosition == 0) +	{ +		//PORT - A +		rc = fapiGetScom(i_target_mba,MBS_MCBIST01_MCBEMA1Q_0x0201166a,l_data_buffer_64); if(rc) return(rc);//comment this later +		rc = fapiGetScom(i_target_mba,MBS_MCBIST01_MCBEMA2Q_0x0201166b,l_data_buffer_64); if(rc) return(rc);//comment this later +		rc = fapiGetScom(i_target_mba,MBS_MCBIST01_MCBEMA3Q_0x0201166c,l_data_buffer_64); if(rc) return(rc);//comment this later + +		//PORT - B +		rc = fapiGetScom(i_target_mba,MBS_MCBIST01_MCBEMB1Q_0x0201166d,l_data_buffer_64); if(rc) return(rc);//comment this later +		rc = fapiGetScom(i_target_mba,MBS_MCBIST01_MCBEMB2Q_0x0201166e,l_data_buffer_64); if(rc) return(rc);//comment this later +		rc = fapiGetScom(i_target_mba,MBS_MCBIST01_MCBEMB3Q_0x0201166f,l_data_buffer_64); if(rc) return(rc);//comment this later +    } +    else +	{ +		 //MBS23 +		//PORT - A +		rc = fapiGetScom(i_target_mba,0x0201176a,l_data_buffer_64); if(rc) return(rc);//comment this later +		rc = fapiGetScom(i_target_mba,0x0201176b,l_data_buffer_64); if(rc) return(rc);//comment this later +		rc = fapiGetScom(i_target_mba,0x0201176c,l_data_buffer_64); if(rc) return(rc);//comment this later + +		//PORT - B +		rc = fapiGetScom(i_target_mba,0x0201176d,l_data_buffer_64); if(rc) return(rc);//comment this later +		rc = fapiGetScom(i_target_mba,0x0201176e,l_data_buffer_64); if(rc) return(rc);//comment this later +		rc = fapiGetScom(i_target_mba,0x0201176f,l_data_buffer_64); if(rc) return(rc);//comment this later +		 +	}	*/ +		rc = fapiPutScom(i_target_mba,0x02011672,l_data_buffer_64); if(rc) return(rc); +		rc = fapiPutScom(i_target_mba,0x02011673,l_data_buffer_64); if(rc) return(rc); +		rc = fapiPutScom(i_target_mba,0x02011674,l_data_buffer_64); if(rc) return(rc); +		 +		rc = fapiPutScom(i_target_mba,0x02011772,l_data_buffer_64); if(rc) return(rc); +		rc = fapiPutScom(i_target_mba,0x02011773,l_data_buffer_64); if(rc) return(rc); +		rc = fapiPutScom(i_target_mba,0x02011774,l_data_buffer_64); if(rc) return(rc); +     @@ -375,8 +431,10 @@ fapi::ReturnCode  start_mcb(const fapi::Target & i_target_mba)  	ecmdDataBufferBase l_data_buffer_trap_64(64);      uint8_t l_num_ranks_per_dimm[2][2];      fapi::ReturnCode  rc; -    uint32_t rc_num = 0; -    FAPI_INF("Function - start_mcb"); +    //uint8_t l_print = 0;  +	//rc = FAPI_ATTR_GET(ATTR_MCBIST_PRINTING_DISABLE, &i_target_mba,l_print); if(rc) return rc; +	uint32_t rc_num = 0; +    FAPI_DBG("%s:Function - start_mcb",i_target_mba.toEcmdString());      rc = fapiGetScom(i_target_mba,MBA01_MCBIST_MCBAGRAQ_0x030106d6,l_data_buffer_64); if(rc) return rc;  @@ -385,25 +443,25 @@ fapi::ReturnCode  start_mcb(const fapi::Target & i_target_mba)      if(l_num_ranks_per_dimm[0][0] > 0)      { -        FAPI_INF(" Socket 0 Configured"); +        FAPI_DBG("%s: Socket 0 Configured",i_target_mba.toEcmdString());          rc_num =  l_data_buffer_64.setBit(24);if (rc_num){FAPI_ERR( "Error in function  start_mcb:");rc.setEcmdError(rc_num);return rc;}          rc_num =  l_data_buffer_64.clearBit(25);if (rc_num){FAPI_ERR( "Error in function  start_mcb:");rc.setEcmdError(rc_num);return rc;}      }      else if(l_num_ranks_per_dimm[0][1] > 0)      { -        FAPI_INF(" Socket 1 Configured"); +        FAPI_DBG("%s: Socket 1 Configured",i_target_mba.toEcmdString());          rc_num =  l_data_buffer_64.clearBit(24);if (rc_num){FAPI_ERR( "Error in function  start_mcb:");rc.setEcmdError(rc_num);return rc;}          rc_num =  l_data_buffer_64.setBit(25);if (rc_num){FAPI_ERR( "Error in function  start_mcb:");rc.setEcmdError(rc_num);return rc;}      }      else if((l_num_ranks_per_dimm[0][0] > 0) && (l_num_ranks_per_dimm[0][1] > 0))      { -        FAPI_INF(" Socket 0, 1 Configured"); +        FAPI_DBG("%s: Socket 0, 1 Configured",i_target_mba.toEcmdString());          rc_num =  l_data_buffer_64.setBit(24);if (rc_num){FAPI_ERR( "Error in function  start_mcb:");rc.setEcmdError(rc_num);return rc;}          rc_num =  l_data_buffer_64.setBit(25);if (rc_num){FAPI_ERR( "Error in function  start_mcb:");rc.setEcmdError(rc_num);return rc;}      }      else      { -	    FAPI_INF("No Socket found"); +	    FAPI_DBG("%s:No Socket found",i_target_mba.toEcmdString());      } @@ -411,12 +469,12 @@ fapi::ReturnCode  start_mcb(const fapi::Target & i_target_mba)      //rc = fapiDelay(DELAY_100US, DELAY_2000SIMCYCLES);if(rc) return rc; // wait 2000 simcycles (in sim mode) OR 100 uS (in hw mode)      rc = fapiPutScom(i_target_mba,MBA01_MCBIST_MCBAGRAQ_0x030106d6,l_data_buffer_64); if(rc) return rc;  -    FAPI_INF("STARTING MCBIST for Centaur Target"); +    FAPI_DBG("%s:STARTING MCBIST for Centaur Target",i_target_mba.toEcmdString());      rc = fapiGetScom(i_target_mba,MBA01_MCBIST_MCB_CNTLSTATQ_0x030106dc,l_data_buffer_64); if(rc) return rc;      if(l_data_buffer_64.isBitSet(0))      { -        FAPI_INF("MCBIST already in progess, wait till MCBIST completes"); +        FAPI_DBG("%s:MCBIST already in progess, wait till MCBIST completes",i_target_mba.toEcmdString());  	   return rc; @@ -451,7 +509,8 @@ fapi::ReturnCode  start_mcb(const fapi::Target & i_target_mba)  //    uint32    status  = 1                 MCBIST done with fail or MCBIST not complete (default value)  //                      = 0                 MCBIST Done without fail  //****************************************************************/ -fapi::ReturnCode  poll_mcb(const fapi::Target & i_target_mba,bool i_mcb_stop_on_fail,uint8_t *o_mcb_status,uint64_t i_time) +//fapi::ReturnCode  poll_mcb(const fapi::Target & i_target_mba,bool i_mcb_stop_on_fail,uint8_t *o_mcb_status,uint64_t i_time) +fapi::ReturnCode  poll_mcb(const fapi::Target & i_target_mba,bool i_mcb_stop_on_fail,uint8_t *o_mcb_status,struct Subtest_info l_sub_info[30],uint8_t i_flag)  {      fapi::ReturnCode  rc;             // return value after each SCOM access/buffer modification      uint32_t rc_num = 0; @@ -466,34 +525,123 @@ fapi::ReturnCode  poll_mcb(const fapi::Target & i_target_mba,bool i_mcb_stop_on_      //Time out variables      uint64_t l_mcb_timeout = 0;      uint32_t l_count = 0; -    +   uint64_t l_time = 0; +   uint32_t l_time_count = 0; +   //uint64_t l_reg = 0; +   uint8_t l_index = 0;  +   uint8_t l_Subtest_no = 0; +   uint32_t i_mcbtest = 0; +   uint32_t l_st_ln = 0; +   uint32_t	l_len = 0; +mcbist_test_mem i_mcbtest1; +//uint8_t l_print = 0;  +	//rc = FAPI_ATTR_GET(ATTR_MCBIST_PRINTING_DISABLE, &i_target_mba,l_print); if(rc) return rc; +Target i_target_centaur; +    rc = fapiGetParentChip(i_target_mba, i_target_centaur); if(rc) return rc;      // Clear to register to zero; +//Should get the attributes l_time	 +                    // 0,1,2,3,4,5,6,7,08,09,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,  +uint8_t test_array_count[44] ={0,2,2,1,1,1,6,6,30,30,2,7,4,2,1,5,4,2,1,1,3,1,1,4,2,1,1,1,1,10,0,5,3,3,3,3,9,4,30,1,2,2,3,3};     +    FAPI_DBG("%s:Function Poll_MCBIST",i_target_mba.toEcmdString()); +	rc = FAPI_ATTR_GET(ATTR_MCBIST_MAX_TIMEOUT, &i_target_mba, l_time); if(rc) return rc;  +	/*rc = fapiGetScom(i_target_mba,0x02011670,l_data_buffer_64);  if(rc) return rc; +	l_reg = l_data_buffer_64.getDoubleWord (0); +	FAPI_DBG("%s:Value of register is %016llX",l_reg);//Extract 3-7 . +	//l_Subtest_no = Extracted value from 3 to 7 +	l_index = test_array_count[l_Subtest_no];*/ -    FAPI_INF("Function Poll_MCBIST"); -     -    if(i_time == 0x0000000000000000) + + +	if(l_time == 0x0000000000000000)      { -	i_time = MCB_MAX_TIMEOUT; +	l_time = MCB_MAX_TIMEOUT;      }     -	//FAPI_INF("Value  of max time %016llX",i_time); +	FAPI_DBG("%s:Value  of max time %016llX",i_target_mba.toEcmdString(),l_time); -    while ((l_mcb_done == 0) && (l_mcb_timeout <= i_time)) +    while ((l_mcb_done == 0) && (l_mcb_timeout <= l_time))      {          rc = fapiDelay(DELAY_100US, DELAY_2000SIMCYCLES);if(rc) return rc; // wait 2000 simcycles (in sim mode) OR 100 uS (in hw mode)          rc = fapiGetScom(i_target_mba,MBA01_MCBIST_MCB_CNTLSTATQ_0x030106dc,l_data_buffer_64);  if(rc) return rc;          if(l_data_buffer_64.isBitSet(0))                    { -             +            l_time_count++; +			if(l_time_count == 5000) +			{ +			l_time_count = 0; +			FAPI_DBG("%s:POLLING STATUS:POLLING IN PROGRESS...........",i_target_mba.toEcmdString());  +			//if((i_flag == 0) &&(l_print == 0)) +			if(i_flag == 0) +			{ +					rc = fapiGetScom(i_target_centaur,0x02011670,l_data_buffer_64);  if(rc) return rc; +					l_st_ln = 3; +					l_len = 4; +					rc_num = l_data_buffer_64.extract(&l_Subtest_no,l_st_ln,l_len);if(rc_num)return rc; +					 +					 +					FAPI_DBG("%s:SUBTEST No  %d  ",i_target_mba.toEcmdString(),l_Subtest_no); +					rc = FAPI_ATTR_GET(ATTR_MCBIST_TEST_TYPE, &i_target_mba, i_mcbtest); if(rc) return rc;//---------i_mcbtest------->run +					rc = mss_conversion_testtype(i_target_mba,i_mcbtest, i_mcbtest1);if(rc) return rc; +					 +					//l_Subtest_no = Extracted value from 3 to 7 +					l_index = test_array_count[i_mcbtest]; +					//FAPI_DBG("%s:INDEX No  %d  ",l_index); +					 +					 +						if(l_Subtest_no < l_index) +						{ +							switch(l_sub_info[l_Subtest_no].l_operation_type) +							{ +								case 0 : FAPI_DBG("%s:SUBTEST        :WRITE",i_target_mba.toEcmdString());break;  +								case 1 : FAPI_DBG("%s:SUBTEST        :READ",i_target_mba.toEcmdString());break;  +								case 2 : FAPI_DBG("%s:SUBTEST        :READ - WRITE",i_target_mba.toEcmdString());break;  +								case 3 : FAPI_DBG("%s:SUBTEST        :WRITE - READ",i_target_mba.toEcmdString());break;  +								case 4 : FAPI_DBG("%s:SUBTEST        :READ - WRITE - READ",i_target_mba.toEcmdString());break;  +								case 5 : FAPI_DBG("%s:SUBTEST        :READ - WRITE - WRITE",i_target_mba.toEcmdString());break;  +								case 6 : FAPI_DBG("%s:SUBTEST        :RANDOM COMMAND SEQUENCE",i_target_mba.toEcmdString());break;  +								case 7 : FAPI_DBG("%s:SUBTEST        :GOTO SUBTEST N OR REFRESH ONLY",i_target_mba.toEcmdString());break;  +								default : FAPI_DBG("%s:Wrong Operation selected for Subtest",i_target_mba.toEcmdString()); +							} +							 +							switch(l_sub_info[l_Subtest_no].l_data_mode) +							{ +								case 0 : FAPI_DBG("%s:DATA MODE      :FIXED DATA",i_target_mba.toEcmdString());break;  +								case 1 : FAPI_DBG("%s:DATA MODE      :DATA_RANDOM_FORWARD",i_target_mba.toEcmdString());break;  +								case 2 : FAPI_DBG("%s:DATA MODE      :DATA_RANDOM_REVERSE",i_target_mba.toEcmdString());break;  +								case 3 : FAPI_DBG("%s:DATA MODE      :RANDOM w/ECC FORWARD",i_target_mba.toEcmdString());break;  +								case 4 : FAPI_DBG("%s:DATA MODE      :RANDOM w/ECC REVERSE",i_target_mba.toEcmdString());break;  +								case 5 : FAPI_DBG("%s:DATA MODE      :DATA EQUAL ADDRESS",i_target_mba.toEcmdString());break;  +								case 6 : FAPI_DBG("%s:DATA MODE      :DATA ROTATE LEFT",i_target_mba.toEcmdString());break;  +								case 7 : FAPI_DBG("%s:DATA MODE      :DATA ROTATE RIGHT",i_target_mba.toEcmdString());break;  +								default : FAPI_DBG("%s:Wrong Data Mode selected for Subtest",i_target_mba.toEcmdString()); +							} + +							 +							 +							switch(l_sub_info[l_Subtest_no].l_addr_mode) +							{ +								case 0 : FAPI_DBG("%s:ADDRESS MODE   :SEQUENTIAL FORWARD",i_target_mba.toEcmdString());break;  +								case 1 : FAPI_DBG("%s:ADDRESS MODE   :SEQUENTIAL REVERSE",i_target_mba.toEcmdString());break;  +								case 2 : FAPI_DBG("%s:ADDRESS MODE   :RANDOM FORWARD",i_target_mba.toEcmdString());break;  +								case 3 : FAPI_DBG("%s:ADDRESS MODE   :RANDOM REVERSE",i_target_mba.toEcmdString());break;  +								default : FAPI_DBG("%s:Wrong Address Mode selected for Subtest",i_target_mba.toEcmdString()); +							} +						} +					 +			} +			 +			 +            }              l_mcb_ip = 1;          }          if(l_data_buffer_64.isBitSet(1))                   { -            FAPI_INF("MCBIST is done"); +            {FAPI_DBG("%s:POLLING STATUS:MCBIST POLLING DONE",i_target_mba.toEcmdString()); +			FAPI_DBG("%s:MCBIST is done",i_target_mba.toEcmdString());}  			l_mcb_ip = 0;              l_mcb_done = 1; @@ -505,12 +653,14 @@ fapi::ReturnCode  poll_mcb(const fapi::Target & i_target_mba,bool i_mcb_stop_on_          if(l_data_buffer_64.isBitSet(2))                  {              l_mcb_fail = 1; +			FAPI_DBG("%s:POLLING STATUS:MCBIST FAILED",i_target_mba.toEcmdString()); +			              if(i_mcb_stop_on_fail == true)          //if stop on error is 1, break after the current subtest completes               {                  rc = fapiGetScom(i_target_mba,MBA01_MCBIST_MCBCFGQ_0x030106e0,l_stop_on_fail_buffer_64);  if(rc) return rc;                  rc_num =  l_stop_on_fail_buffer_64.setBit(62);if (rc_num){FAPI_ERR( "Error in function  poll_mcb:");rc.setEcmdError(rc_num);return rc;}                              // Set bit 61 to break after current subtest                  rc = fapiPutScom(i_target_mba,MBA01_MCBIST_MCBCFGQ_0x030106e0,l_stop_on_fail_buffer_64);  if(rc) return rc; -                FAPI_INF("MCBIST will break after Current Subtest"); +                FAPI_DBG("%s:MCBIST will break after Current Subtest",i_target_mba.toEcmdString());                  while(l_mcb_done == 0)                                            // Poll till MCBIST is done                   { @@ -526,7 +676,7 @@ fapi::ReturnCode  poll_mcb(const fapi::Target & i_target_mba,bool i_mcb_stop_on_ -                        FAPI_INF("MCBIST Done"); +                        FAPI_DBG("%s:MCBIST Done",i_target_mba.toEcmdString());                          rc_num =  l_stop_on_fail_buffer_64.clearBit(62);if (rc_num){FAPI_ERR( "Error in function  poll_mcb:");rc.setEcmdError(rc_num);return rc;}         // Clearing bit 61 to avoid breaking after current subtest                          rc = fapiPutScom(i_target_mba,MBA01_MCBIST_MCBCFGQ_0x030106e0,l_stop_on_fail_buffer_64);  if(rc) return rc;                      } @@ -534,7 +684,7 @@ fapi::ReturnCode  poll_mcb(const fapi::Target & i_target_mba,bool i_mcb_stop_on_              }          }          l_mcb_timeout++; -        if (l_mcb_timeout >= i_time) +        if (l_mcb_timeout >= l_time)          {              FAPI_ERR( "poll_mcb:Maximun time out");  	              FAPI_SET_HWP_ERROR(rc,RC_MSS_MCBIST_TIMEOUT_ERROR);		 @@ -542,47 +692,48 @@ fapi::ReturnCode  poll_mcb(const fapi::Target & i_target_mba,bool i_mcb_stop_on_          }  #ifdef MCB_DEBUG_1         -        if(l_count%100 == 0)//Can be changed later -        { -            FAPI_INF("MCB done bit : l_mcb_done"); -            FAPI_INF("MCB fail bit : l_mcb_fail"); -            FAPI_INF("MCB IP   bit : l_mcb_ip"); +        //if((l_count%100 == 0)&&(l_print == 0))//Can be changed later +        if(l_count%100 == 0) +		{ +            FAPI_DBG("%s:MCB done bit : l_mcb_done",i_target_mba.toEcmdString()); +            FAPI_DBG("%s:MCB fail bit : l_mcb_fail",i_target_mba.toEcmdString()); +            FAPI_DBG("%s:MCB IP   bit : l_mcb_ip",i_target_mba.toEcmdString());          }  #endif      l_count++;      } -    if((l_mcb_done == 1) && (l_mcb_fail == 1) && (i_mcb_stop_on_fail == true)) +    if((l_mcb_done == 1) && (l_mcb_fail == 1) && (i_mcb_stop_on_fail == true) )      {          *o_mcb_status = 1;      /// MCB fail          #ifdef MCB_DEBUG_2 -        FAPI_INF("*************************************************"); -        FAPI_INF("MCB done bit : %d",l_mcb_done); -        FAPI_INF("MCB fail bit : %d",l_mcb_fail); -        FAPI_INF("MCB IP   bit : %d",l_mcb_ip); -        FAPI_INF("*************************************************"); +        FAPI_DBG("%s:*************************************************",i_target_mba.toEcmdString()); +        FAPI_DBG("%s:MCB done bit : %d",i_target_mba.toEcmdString(),l_mcb_done); +        FAPI_DBG("%s:MCB fail bit : %d",i_target_mba.toEcmdString(),l_mcb_fail); +        FAPI_DBG("%s:MCB IP   bit : %d",i_target_mba.toEcmdString(),l_mcb_ip); +        FAPI_DBG("%s:*************************************************",i_target_mba.toEcmdString());          #endif      }      else if((l_mcb_done == 1) && (l_mcb_fail == 0))      {          *o_mcb_status = 0;//pass;                  #ifdef MCB_DEBUG2 -        FAPI_INF("*************************************************"); -        FAPI_INF("MCB done bit : %d",l_mcb_done); -        FAPI_INF("MCB fail bit : %d",l_mcb_fail); -        FAPI_INF("MCB IP   bit : %d",l_mcb_ip); -        FAPI_INF("*************************************************"); +        FAPI_DBG("%s:*************************************************",i_target_mba.toEcmdString()); +        FAPI_DBG("%s:MCB done bit : %d",i_target_mba.toEcmdString(),l_mcb_done); +        FAPI_DBG("%s:MCB fail bit : %d",i_target_mba.toEcmdString(),l_mcb_fail); +        FAPI_DBG("%s:MCB IP   bit : %d",i_target_mba.toEcmdString(),l_mcb_ip); +        FAPI_DBG("%s:*************************************************",i_target_mba.toEcmdString());          #endif      } -    else if((l_mcb_done == 0) && (l_mcb_ip == 1) && (l_mcb_timeout == i_time)) +    else if((l_mcb_done == 0) && (l_mcb_ip == 1) && (l_mcb_timeout == l_time) )      {          *o_mcb_status = 1;//fail;                          #ifdef MCB_DEBUG2 -        FAPI_INF("****************************************"); -        FAPI_INF("MCB done bit : %d",l_mcb_done); -        FAPI_INF("MCB fail bit : %d",l_mcb_fail); -        FAPI_INF("MCB IP   bit : %d",l_mcb_ip); -        FAPI_INF("****************************************"); +        FAPI_DBG("%s:****************************************",i_target_mba.toEcmdString()); +        FAPI_DBG("%s:MCB done bit : %d",i_target_mba.toEcmdString(),l_mcb_done); +        FAPI_DBG("%s:MCB fail bit : %d",i_target_mba.toEcmdString(),l_mcb_fail); +        FAPI_DBG("%s:MCB IP   bit : %d",i_target_mba.toEcmdString(),l_mcb_ip); +        FAPI_DBG("%s:****************************************",i_target_mba.toEcmdString());          #endif      } @@ -599,46 +750,33 @@ fapi::ReturnCode  poll_mcb(const fapi::Target & i_target_mba,bool i_mcb_stop_on_      return rc;      } - - - -/****************************************************************/ -// Funtion name :  mcb_error_map_print -// Description  : Prints the error Map of a Rank    -// Input Parameters : -//    const fapi::Target &                  Centaur.mba -//    uint8_t i_port                        Port in use -//    uint8_t i_rank                        Rank in use -//    ecmdDataBufferBase & l_mcb_fail_320   Ecmd Buffer  -// Output Parameter : -//    uint8_t o_error_map[][8][10][2]   Contains the error map       -//****************************************************************/ - -fapi::ReturnCode  mcb_error_map_print(const fapi::Target & i_target_mba,uint8_t i_port,uint8_t i_rank,ecmdDataBufferBase & l_mcb_fail_160) +fapi::ReturnCode  mcb_error_map_print(const fapi::Target & i_target_mba,ecmdDataBufferBase & l_mcb_fail_160,uint8_t i_port,uint8_t l_array[200],uint8_t l_number)  {	  	ReturnCode rc;  	uint8_t l_num_ranks_per_dimm[MAX_PORT][MAX_PORT];  	uint8_t l_rankpair_table[MAX_RANK] ;  	uint8_t l_cur_rank =0;  	uint16_t l_index0,l_index1,l_byte,l_nibble; +	//ecmdDataBufferBase l_data_buffer1_64(64),l_data_buffer2_64(64),l_data_buffer3_64(64),l_data_buffer4_64(64);      uint8_t l_max_rank = 0;  	uint8_t l_rank_pair = 0;  	char l_str1[200] = "";  	ecmdDataBufferBase l_mcb(64); -	i_rank = 0; +	uint8_t i_rank = 0;  	//uint64_t start;  	//uint32_t rc_num;  	uint8_t l_mbaPosition = 0;  	//uint8_t l_attr_eff_dimm_type_u8 = 0; -	 +	//uint8_t l_print = 0;  +	//rc = FAPI_ATTR_GET(ATTR_MCBIST_PRINTING_DISABLE, &i_target_mba,l_print); if(rc) return rc;  	rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, &i_target_mba, l_mbaPosition);  	rc = FAPI_ATTR_GET(ATTR_EFF_NUM_RANKS_PER_DIMM, &i_target_mba, l_num_ranks_per_dimm); if(rc) return rc;         l_max_rank=l_num_ranks_per_dimm[i_port][0]+l_num_ranks_per_dimm[i_port][1]; -	 +	rc = mss_getrankpair(i_target_mba,i_port,0,&l_rank_pair,l_rankpair_table);  if(rc) return rc;  	if(l_max_rank == 0)  	{ -		FAPI_INF(" NO RANK FOUND ON PORT %d ",i_port); +		FAPI_DBG("%s: NO RANK FOUND ON PORT %d ",i_target_mba.toEcmdString(),i_port);  		return rc;  	}  	else @@ -646,6 +784,7 @@ fapi::ReturnCode  mcb_error_map_print(const fapi::Target & i_target_mba,uint8_t  		for(l_cur_rank = 0;l_cur_rank < l_max_rank;l_cur_rank++)  		{  			i_rank = l_rankpair_table[l_cur_rank]; +			//FAPI_DBG("%s:i am rank  %d cur_index %d",i_target_mba.toEcmdString(),i_rank,l_cur_rank);  			if(i_rank>MAX_RANK)  			{	    	  				break; @@ -654,66 +793,297 @@ fapi::ReturnCode  mcb_error_map_print(const fapi::Target & i_target_mba,uint8_t  		}  	} +	  	if(i_port == 0)  	{  		if(l_mbaPosition == 0)  		{ -			FAPI_INF("################# MBA01 ###########################\n"); -			FAPI_INF("################# PORT0  ERROR MAP #################\n"); +			FAPI_DBG("%s:################# MBA01 ###########################\n",i_target_mba.toEcmdString()); +			FAPI_DBG("%s:################# PORT0  ERROR MAP #################\n",i_target_mba.toEcmdString());  		}  		else  		{ -			FAPI_INF("################# MBA23 ###########################\n"); -			FAPI_INF("################# PORT0 ERROR MAP #################\n"); +			FAPI_DBG("%s:################# MBA23 ###########################\n",i_target_mba.toEcmdString()); +			FAPI_DBG("%s:################# PORT0 ERROR MAP #################\n",i_target_mba.toEcmdString());  		}  	} -	else if(i_port == 1) +	//else if(i_port == 1) +	else  	{  		if(l_mbaPosition ==0)  		{ -			FAPI_INF("################# MBA01 ###########################\n"); -			FAPI_INF("################# PORT1 ERROR MAP #################\n"); +			FAPI_DBG("%s:################# MBA01 ###########################\n",i_target_mba.toEcmdString()); +			FAPI_DBG("%s:################# PORT1 ERROR MAP #################\n",i_target_mba.toEcmdString());  		}  		else  		{ -			FAPI_INF("################# MBA23 ###########################\n"); -			FAPI_INF("################# PORT1 ERROR MAP #################\n");	 +			FAPI_DBG("%s:################# MBA23 ###########################\n",i_target_mba.toEcmdString()); +			FAPI_DBG("%s:################# PORT1 ERROR MAP #################\n",i_target_mba.toEcmdString());	  		}  	} -    //FAPI_INF("          --------------------"); -    FAPI_INF("Byte      00112233445566778899"); -    FAPI_INF("Nibble    01010101010101010101"); +	 +	 +	 +	 +	//Modified New Code +	 +	 +//uint8_t l_index,l_i,l_number,l_value,l_value1; +//HB uint8_t l_index,l_i,l_value,l_value1; +uint8_t  l_index,l_value,l_value1; +uint32_t rc_num; +//uint8_t l_array0[200],l_marray0[200]; +uint8_t l_marray0[200]; +ecmdDataBufferBase l_data_buffer1_64(64),l_data_buffer3_64(64); +//HB l_i = 0; + +/* +rc_num =  l_data_buffer1_64.setBit(12);if (rc_num){FAPI_ERR( "Error in function  setup_mcbist:");rc.setEcmdError(rc_num);return rc;} +rc_num =  l_data_buffer1_64.setBit(32);if (rc_num){FAPI_ERR( "Error in function  setup_mcbist:");rc.setEcmdError(rc_num);return rc;} +rc_num =  l_data_buffer1_64.setBit(35);if (rc_num){FAPI_ERR( "Error in function  setup_mcbist:");rc.setEcmdError(rc_num);return rc;} +rc_num =  l_data_buffer1_64.setBit(63);if (rc_num){FAPI_ERR( "Error in function  setup_mcbist:");rc.setEcmdError(rc_num);return rc;} +rc = fapiPutScom(i_target_mba,MBS_MCBIST01_MCBCMA1Q_0x02011672,l_data_buffer1_64); if(rc) return rc; + +rc_num = l_data_buffer1_64.flushTo0(); +rc_num =  l_data_buffer1_64.setBit(13);if (rc_num){FAPI_ERR( "Error in function  setup_mcbist:");rc.setEcmdError(rc_num);return rc;} +rc_num =  l_data_buffer1_64.setBit(45);if (rc_num){FAPI_ERR( "Error in function  setup_mcbist:");rc.setEcmdError(rc_num);return rc;} +rc_num =  l_data_buffer1_64.setBit(39);if (rc_num){FAPI_ERR( "Error in function  setup_mcbist:");rc.setEcmdError(rc_num);return rc;} +rc_num =  l_data_buffer1_64.setBit(56);if (rc_num){FAPI_ERR( "Error in function  setup_mcbist:");rc.setEcmdError(rc_num);return rc;} +rc = fapiPutScom(i_target_mba,0x02011673,l_data_buffer1_64); if(rc) return rc; +rc_num = l_data_buffer1_64.flushTo0(); +rc_num =  l_data_buffer1_64.setBit(5);if (rc_num){FAPI_ERR( "Error in function  setup_mcbist:");rc.setEcmdError(rc_num);return rc;} +rc_num =  l_data_buffer1_64.setBit(34);if (rc_num){FAPI_ERR( "Error in function  setup_mcbist:");rc.setEcmdError(rc_num);return rc;} +rc_num =  l_data_buffer1_64.setBit(23);if (rc_num){FAPI_ERR( "Error in function  setup_mcbist:");rc.setEcmdError(rc_num);return rc;} +rc_num =  l_data_buffer1_64.setBit(55);if (rc_num){FAPI_ERR( "Error in function  setup_mcbist:");rc.setEcmdError(rc_num);return rc;} +rc = fapiPutScom(i_target_mba,0x02011772,l_data_buffer1_64); if(rc) return rc;*/ + +rc_num = l_data_buffer1_64.flushTo0(); +// for HB +if(rc_num) { +  rc.setEcmdError(rc_num); +  return rc; +} +/*if(l_mbaPosition == 0) +{ +	if(i_port == 0) +	{ +		//FAPI_INF("l_array:%d",l_i); +		l_i = 0; +		rc = fapiGetScom(i_target_mba,MBS_MCBIST01_MCBCMA1Q_0x02011672,l_data_buffer1_64); if(rc) return rc; +		rc = fapiGetScom(i_target_mba,MBS_MCBIST01_MCBCMABQ_0x02011674,l_data_buffer3_64); if(rc) return rc; +		for(l_index=0;l_index<64;l_index++) +		{ +			 +			if(l_data_buffer1_64.isBitSet(l_index)) +			{ +			l_array0[l_i] = l_index; +			l_i++; +			//FAPI_INF("l_array:%d",l_i); +			} +		} +		for(l_index=0;l_index<16;l_index++)	 +		{ +			  +			if(l_data_buffer3_64.isBitSet(l_index)) +			{  +			l_array0[l_i] = l_index+64; +			l_i++; +			//FAPI_INF("l_array:%d",l_i); +			} +		} +		 +	} +	else +	{ +	//FAPI_INF("l_array:%d",l_i); +		l_i = 0; +		rc = fapiPutScom(i_target_mba,MBS_MCBIST01_MCBCMB1Q_0x02011673,l_data_buffer1_64); if(rc) return rc; +		rc = fapiGetScom(i_target_mba,MBS_MCBIST01_MCBCMABQ_0x02011674,l_data_buffer3_64); if(rc) return rc; +		for(l_index=0;l_index<64;l_index++) +		{ +			if(l_data_buffer1_64.isBitSet(l_index)) +			{  +			l_array0[l_i] = l_index; +			l_i++;//FAPI_INF("l_array:%d",l_i); +			} +			 +			 +			 +		 +		}	 +		for(l_index=16;l_index<32;l_index++)	 +		{ +			 +			if(l_data_buffer3_64.isBitSet(l_index)) +			{  +			l_array0[l_i] = l_index+64-16; +			l_i++;//FAPI_INF("l_array:%d",l_i); +			} +			 +			 +		} +	} +} +else +{ +	if(i_port == 0) +	{ +		//FAPI_INF("l_array:%d",l_i); +		l_i = 0; +		rc = fapiGetScom(i_target_mba,0x02011774,l_data_buffer3_64); if(rc) return rc; +		rc = fapiGetScom(i_target_mba,0x02011772,l_data_buffer1_64); if(rc) return rc; +		for(l_index=0;l_index<64;l_index++) +		{ +			 +			 +			if(l_data_buffer1_64.isBitSet(l_index)) +			{  +			l_array0[l_i] = l_index; +			l_i++;//FAPI_INF("l_array:%d",l_i); +			} +			 +			 +		 +		} +		for(l_index=0;l_index<16;l_index++)	 +		{ +			if(l_data_buffer3_64.isBitSet(l_index)) +			{  +			l_array0[l_i] = l_index+64; +			l_i++;//FAPI_INF("l_array:%d",l_i); +			} +		}	 +	} +	else +	{ +		l_i = 0; +		//FAPI_INF("l_array:%d",l_i); +		rc = fapiGetScom(i_target_mba,0x02011774,l_data_buffer3_64); if(rc) return rc; +		rc = fapiGetScom(i_target_mba,0x02011773,l_data_buffer1_64); if(rc) return rc; +		for(l_index=0;l_index<64;l_index++) +		{ +			 +			if(l_data_buffer1_64.isBitSet(l_index)) +			{  +			l_array0[l_i] = l_index; +			l_i++;//FAPI_INF("l_array:%d",l_i); +			} +		 +		}	 +		for(l_index=16;l_index<32;l_index++)	 +		{ +			if(l_data_buffer3_64.isBitSet(l_index)) +			{  +			l_array0[l_i] = l_index+64-16; +			l_i++;//FAPI_INF("l_array:%d",l_i); +			} +		}	 +	} +} + +l_number =  l_i;*/ + + +uint8_t l_num,io_num,l_inter,l_num2; +	l_num =0; +	//FAPI_INF("%s:l_max_rank%d",i_target_mba.toEcmdString(),l_max_rank); +	for(l_cur_rank = 0;l_cur_rank < l_max_rank;l_cur_rank++) +	{ +		i_rank = l_rankpair_table[l_cur_rank]; +		 +		 +		//FAPI_INF("%s:rank:%d",i_target_mba.toEcmdString(),i_rank); +		 +		for(l_index=0;l_index<l_number;l_index++) +		{ +		     +			//l_value = l_array0[l_index]; +			l_value = l_array[l_index]; +			l_inter = (l_value/4); +			l_num2 = l_num-1; +				if(l_inter == l_marray0[l_num2] &&(l_num != 0)) +				continue; +			 +			l_value1=(i_rank*20)+l_inter; +			l_marray0[l_num] = l_value1; +			l_num++; +			//FAPI_INF("%s:l_value,l_value1,l_num:%d,%d,%d",i_target_mba.toEcmdString(),l_value,l_value1,l_num); +		} +	} +	//FAPI_INF("%s:l_value,l_value1,l_num:%d,%d,%d",i_target_mba.toEcmdString(),l_value,l_value1,l_num); +	io_num = l_num; + +//To be in error map print function + +//Debug Prints +/* +FAPI_INF("________________________________________________________________________________________________________"); +	for(l_i = 0;l_i < l_number;l_i++) +	{ +	FAPI_INF("%s:INITIAL ARRAY:%d",i_target_mba.toEcmdString(),l_array[l_i] ); +	} +	FAPI_INF("________________________________________________________________________________________________________"); +	for(l_i = 0;l_i < io_num;l_i++) +	{ +	FAPI_INF("%s:FINAL ARRAY:%d",i_target_mba.toEcmdString(),l_marray0[l_i] ); +	} +	FAPI_INF("________________________________________________________________________________________________________"); +	*/ +	 +	 +l_cur_rank = 0; +i_rank = 0; +l_num = 0;	 +l_value = 0;	 +	 +	 +	 +	 +    //FAPI_DBG("%s:          --------------------",i_target_mba.toEcmdString()); +    FAPI_DBG("%s:Byte      00112233445566778899",i_target_mba.toEcmdString()); +    FAPI_DBG("%s:Nibble    01010101010101010101",i_target_mba.toEcmdString());  	rc = mss_getrankpair(i_target_mba,i_port,0,&l_rank_pair,l_rankpair_table);  if(rc) return rc;		      for(l_cur_rank = 0;l_cur_rank < l_max_rank;l_cur_rank++)      {	    	    i_rank = l_rankpair_table[l_cur_rank];	    		 -        sprintf(l_str1,"%-4s%d%5s","RANK",i_rank,"");         +        sprintf(l_str1,"%s:%-4s%d%5s",i_target_mba.toEcmdString(),"RANK",i_rank,"");          	    for(l_byte = 0; l_byte < MAX_BYTE; l_byte++)          {             for(l_nibble = 0; l_nibble < MAX_NIBBLES; l_nibble++)             { -                    			 +            l_value = l_marray0[l_num] ;     +			//FAPI_DBG("%s:l_value %d l_num %d",i_target_mba.toEcmdString(),l_value,l_num);		  			l_index0 = (i_rank*20) + (l_byte*2) + l_nibble;             // l_index1 = l_index0 + 160*(i_port);	              l_index1 = l_index0; -			if(l_mcb_fail_160.isBitSet(l_index1)) -            {            -				strcat(l_str1,"X"); -            } -            else -            {               -				strcat(l_str1,"."); -            }					 +			if((l_value == l_index1) &&(l_num < io_num)) +			{ +			strcat(l_str1,"M"); +			 +			//FAPI_DBG("%s:l_value %d l_num %d",i_target_mba.toEcmdString(),l_value,l_num); +			l_num++; +			} +			else +			{ +				if(l_mcb_fail_160.isBitSet(l_index1)) +				{            +					strcat(l_str1,"X"); +				} +				else +				{               +					strcat(l_str1,"."); +				}	 +			}		  	      }  	   }    -    FAPI_INF("%s",l_str1); +    FAPI_DBG("%s",l_str1);  	} @@ -721,10 +1091,6 @@ return rc;  }	 - - - -  /*****************************************************************/  // Funtion name : mcb_error_map  // Description  : Reads the nibblewise Error map registers into o_error_map    @@ -735,7 +1101,7 @@ return rc;  // Output Parameter :  //    uint8_t o_error_map[][8][10][2]   Contains the error map        //****************************************************************/ -fapi::ReturnCode  mcb_error_map(const fapi::Target & i_target_mba, uint8_t  o_error_map[][8][10][2],uint8_t i_port,uint8_t i_rank) +fapi::ReturnCode  mcb_error_map(const fapi::Target & i_target_mba, uint8_t  o_error_map[][8][10][2])  {      ecmdDataBufferBase l_mcbem1ab(64);      ecmdDataBufferBase l_mcbem2ab(64); @@ -749,7 +1115,7 @@ fapi::ReturnCode  mcb_error_map(const fapi::Target & i_target_mba, uint8_t  o_er      uint8_t l_max_rank0,l_max_rank1; -	 +	uint8_t i_rank,i_port;      //####################      fapi::Target i_target_centaur ;      //#################### @@ -764,6 +1130,8 @@ fapi::ReturnCode  mcb_error_map(const fapi::Target & i_target_mba, uint8_t  o_er      uint8_t l_num_ranks_per_dimm[MAX_PORT][MAX_PORT];  	//uint64_t start;      uint8_t l_mbaPosition = 0; +	//uint8_t l_print = 0;  +	//rc = FAPI_ATTR_GET(ATTR_MCBIST_PRINTING_DISABLE, &i_target_mba,l_print); if(rc) return rc;  	uint8_t rank_pair,i_byte,i_nibble,i_input_index_u8,o_val,i_byte1,i_nibble1;  	input_type l_input_type_e =  ISDIMM_DQ;  	uint8_t valid_rank[MAX_RANK] ; @@ -771,7 +1139,7 @@ fapi::ReturnCode  mcb_error_map(const fapi::Target & i_target_mba, uint8_t  o_er  	uint8_t l_max_bytes=9;  	uint8_t l_max_rank;  	uint8_t l_attr_eff_dimm_type_u8; -    FAPI_INF("Function MCB_ERROR_MAP"); +    FAPI_DBG("%s:Function MCB_ERROR_MAP",i_target_mba.toEcmdString());      rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, &i_target_mba, l_mbaPosition);      if(rc) @@ -894,51 +1262,340 @@ fapi::ReturnCode  mcb_error_map(const fapi::Target & i_target_mba, uint8_t  o_er     rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_TYPE, &i_target_mba, l_attr_eff_dimm_type_u8); if(rc) return rc;     //ISDIMM error map -   //uint8_t l_max_ranks =8; -	  +   //uint8_t l_max_ranks =8;	  +	 	//Modified New Code +	//ReturnCode rc; +uint8_t l_index,l_i,l_number,l_value,l_value1,l_cur_rank,l_number1; +l_number1=0; //HB +uint8_t l_array[200],l_array0[200],l_marray0[200],l_array1[200],l_marray1[200],l_marray[200]; +uint8_t l_rankpair_table[MAX_RANK] ; +ecmdDataBufferBase l_data_buffer1_64(64),l_data_buffer3_64(64); +l_i = 0; + + +/*rc_num =  l_data_buffer1_64.setBit(12);if (rc_num){FAPI_ERR( "Error in function  setup_mcbist:");rc.setEcmdError(rc_num);return rc;} +rc_num =  l_data_buffer1_64.setBit(32);if (rc_num){FAPI_ERR( "Error in function  setup_mcbist:");rc.setEcmdError(rc_num);return rc;} +rc_num =  l_data_buffer1_64.setBit(35);if (rc_num){FAPI_ERR( "Error in function  setup_mcbist:");rc.setEcmdError(rc_num);return rc;} +rc_num =  l_data_buffer1_64.setBit(61);if (rc_num){FAPI_ERR( "Error in function  setup_mcbist:");rc.setEcmdError(rc_num);return rc;} +rc = fapiPutScom(i_target_mba,0x02011772,l_data_buffer1_64); if(rc) return rc;*/ +//rc = fapiPutScom(i_target_mba,0x02011773,l_data_buffer1_64); if(rc) return rc; +rc_num = l_data_buffer1_64.flushTo0(); +i_port = 0; +while(i_port < 2) +{ +rc_num = l_data_buffer1_64.flushTo0(); +rc_num = l_data_buffer3_64.flushTo0(); +	if(l_mbaPosition == 0) +	{ +		if(i_port == 0) +		{ +			//FAPI_INF("l_array:%d",l_i); +			l_i = 0; +			rc = fapiGetScom(i_target_mba,0x02011672,l_data_buffer1_64); if(rc) return rc; +			rc = fapiGetScom(i_target_mba,0x02011674,l_data_buffer3_64); if(rc) return rc; +			for(l_index=0;l_index<64;l_index++) +			{ +				 +				if(l_data_buffer1_64.isBitSet(l_index)) +				{ +				l_array0[l_i] = l_index; +				l_i++; +				//FAPI_INF("l_array:%d",l_i); +				} +			} +			for(l_index=0;l_index<16;l_index++)	 +			{ +				  +				if(l_data_buffer3_64.isBitSet(l_index)) +				{  +				l_array0[l_i] = l_index+64; +				l_i++; +				//FAPI_INF("l_array:%d",l_i); +				} +			} +			l_number1 = l_i; +		} +		 +		else +		{ +		//FAPI_INF("l_array:%d",l_i); +			l_i = 0; +			rc = fapiGetScom(i_target_mba,0x02011673,l_data_buffer1_64); if(rc) return rc; +			rc = fapiGetScom(i_target_mba,0x02011674,l_data_buffer3_64); if(rc) return rc; +			for(l_index=0;l_index<64;l_index++) +			{ +				if(l_data_buffer1_64.isBitSet(l_index)) +				{  +				l_array1[l_i] = l_index; +				l_i++;//FAPI_INF("l_array:%d",l_i); +				} +				 +				 +				 +			 +			}	 +			for(l_index=16;l_index<32;l_index++)	 +			{ +				 +				if(l_data_buffer3_64.isBitSet(l_index)) +				{  +				l_array1[l_i] = l_index+64-16; +				l_i++;//FAPI_INF("l_array:%d",l_i); +				} +				 +				 +			} +			l_number =  l_i; +		} +		 +	} +	else +	{ +		if(i_port == 0) +		{ +			//FAPI_INF("l_array:%d",l_i); +			l_i = 0; +			rc = fapiGetScom(i_target_mba,0x02011774,l_data_buffer3_64); if(rc) return rc; +			rc = fapiGetScom(i_target_mba,0x02011772,l_data_buffer1_64); if(rc) return rc; +			for(l_index=0;l_index<64;l_index++) +			{ +				 +				 +				if(l_data_buffer1_64.isBitSet(l_index)) +				{  +				l_array0[l_i] = l_index; +				l_i++;//FAPI_INF("l_array:%d",l_i); +				} +				 +				 +			 +			} +			for(l_index=0;l_index<16;l_index++)	 +			{ +				if(l_data_buffer3_64.isBitSet(l_index)) +				{  +				l_array0[l_i] = l_index+64; +				l_i++;//FAPI_INF("l_array:%d",l_i); +				} +			} +		 l_number1 =  l_i;		 +		} +		 +		else +		{ +			l_i = 0; +			//FAPI_INF("l_array:%d",l_i); +			rc = fapiGetScom(i_target_mba,0x02011774,l_data_buffer3_64); if(rc) return rc; +			rc = fapiGetScom(i_target_mba,0x02011773,l_data_buffer1_64); if(rc) return rc; +			for(l_index=0;l_index<64;l_index++) +			{ +				 +				if(l_data_buffer1_64.isBitSet(l_index)) +				{  +				l_array1[l_i] = l_index; +				l_i++;//FAPI_INF("l_array:%d",l_i); +				} +			 +			}	 +			for(l_index=16;l_index<32;l_index++)	 +			{ +				if(l_data_buffer3_64.isBitSet(l_index)) +				{  +				l_array1[l_i] = l_index+64-16; +				l_i++;//FAPI_INF("l_array:%d",l_i); +				} +			} +			l_number =  l_i;		 +		} +		 +	} +	i_port++; +} + +uint8_t l_num,io_num,io_num0,io_num1,l_inter,l_flag,l_n; +l_n=0;	 //HB +io_num0=0; +	//FAPI_INF("%s:l_max_rank%d",i_target_mba.toEcmdString(),l_max_rank); +	l_port = 0; +	while(l_port<2) +	{ +	l_num =0; +		if(l_port == 0) +		{ +		 +		for(l_index=0;l_index<l_number1;l_index++) +			{ +				l_array[l_index] = l_array0[l_index]; +			} +			l_n = l_number1; +			rc = mss_getrankpair(i_target_mba,l_port,0,&rank_pair,l_rankpair_table);if(rc) return rc; +		} +		else +		{ +		for(l_index=0;l_index<l_number;l_index++) +			{ +				l_array[l_index] = l_array1[l_index]; +				l_n = l_number; +			} +			rc = mss_getrankpair(i_target_mba,l_port,0,&rank_pair,l_rankpair_table);if(rc) return rc; +		} +		for(l_cur_rank = 0;l_cur_rank < l_max_rank;l_cur_rank++) +		{ +		 +			i_rank = l_rankpair_table[l_cur_rank]; +			 +			//FAPI_INF("%s:rank:%d",i_target_mba.toEcmdString(),i_rank); +			 +			for(l_index=0;l_index<l_n;l_index++) +			{ +				 +				l_value = l_array[l_index]; +				l_inter = (l_value/4); +				//l_value1=(i_rank*20)+l_inter; +				l_value1 = l_num-1; +				if((l_inter*4 == l_marray[l_value1])&&(l_num != 0)) +				continue; +				l_marray[l_num] = l_inter*4; +				l_num++; +				//FAPI_INF("%s:l_value,l_value1,l_num:%d,%d,%d",i_target_mba.toEcmdString(),l_value,l_value1,l_num); +			} +		} +		//FAPI_INF("%s:l_value,l_value1,l_num:%d,%d,%d",i_target_mba.toEcmdString(),l_value,l_value1,l_num); +		//io_num = l_num; +		if(l_port == 0) +		{ +			io_num0 = l_num; +			if(io_num0 >= 21) +			{ +				io_num0 = 21; +			} +			for(l_index=0;l_index<io_num0;l_index++) +			{ +				l_marray0[l_index] = l_marray[l_index]; +			} +		} +		else +		{ +			io_num1 = l_num; +			if(io_num1 >= 21) +			{ +				io_num1 = 21; +			} +			for(l_index=0;l_index<io_num1;l_index++) +			{ +				l_marray1[l_index] = l_marray[l_index]; +			} +			 +			 +		}		 +		l_port++; +	} +//DEBUG PRINTS +/* +FAPI_INF("________________________________________________________________________________________________________"); +	 +	for(l_i = 0;l_i < l_number1;l_i++) +	{ +	FAPI_INF("%s:Port 0 INITIAL ARRAY:%d and index %d",i_target_mba.toEcmdString(),l_array0[l_i],l_i ); +	} +	 +FAPI_INF("________________________________________________________________________________________________________"); + +	for(l_i = 0;l_i < io_num0;l_i++) +	{ +	FAPI_INF("%s:Port 0 FINAL ARRAY:%d and index %d",i_target_mba.toEcmdString(),l_marray0[l_i],l_i ); +	} +	 +FAPI_INF("________________________________________________________________________________________________________"); +	for(l_i = 0;l_i < l_number;l_i++) +	{ +	FAPI_INF("%s:Port 1 INITIAL ARRAY:%d and index %d",i_target_mba.toEcmdString(),l_array1[l_i],l_i ); +	} +	 +	 +FAPI_INF("________________________________________________________________________________________________________"); +	for(l_i = 0;l_i < io_num1;l_i++) +	{ +	FAPI_INF("%s:Port 1 FINAL ARRAY:%d and index %d",i_target_mba.toEcmdString(),l_marray1[l_i],l_i ); +	} +	 +FAPI_INF("________________________________________________________________________________________________________");*/ +//To be in error map print function +    if((l_attr_eff_dimm_type_u8 == 1) || (l_attr_eff_dimm_type_u8 == 3))  //Calling ISDIMM error mAP and LRDIMM      { -	FAPI_INF("#################  Error MAP for ISDIMM #################");    +	FAPI_DBG("%s:#################  Error MAP for ISDIMM #################",i_target_mba.toEcmdString());         for(l_port = 0; l_port < 2; l_port++)  	{  		if(l_port == 0)  		{  		l_max_rank = l_max_rank0; +		 +			io_num = io_num0; +			for(l_index=0;l_index<io_num;l_index++) +			{ +				l_marray[l_index] = l_marray0[l_index]; +			} +		  		}  		else  		{  		l_max_rank = l_max_rank1; +		 +		io_num = io_num1; +			for(l_index=0;l_index<io_num;l_index++) +			{ +				l_marray[l_index] = l_marray1[l_index]; +			} +		  		}  		if(l_max_rank == 0)  		{ -			FAPI_INF(" NO RANKS FOUND ON  PORT  %d",l_port); +			FAPI_DBG("%s: NO RANKS FOUND ON  PORT  %d",i_target_mba.toEcmdString(),l_port);  		}  		else  		{   			if(l_mbaPosition ==0)  			{ -				FAPI_INF("################# MBA01 ###########################\n"); -				FAPI_INF("################# PORT%d ERROR MAP #################\n",l_port); +				{FAPI_DBG("%s:################# MBA01 ###########################\n",i_target_mba.toEcmdString()); +				FAPI_DBG("%s:################# PORT%d ERROR MAP #################\n",i_target_mba.toEcmdString(),l_port);}  			}  			else  			{ -				FAPI_INF("################# MBA23 ###########################\n"); -				FAPI_INF("################# PORT%d ERROR MAP #################\n",l_port); +				{FAPI_DBG("%s:################# MBA23 ###########################\n",i_target_mba.toEcmdString()); +				FAPI_DBG("%s:################# PORT%d ERROR MAP #################\n",i_target_mba.toEcmdString(),l_port);}  			} -			//FAPI_INF("          ------------------"); -			FAPI_INF("Byte      001122334455667788"); -			FAPI_INF("Nibble    010101010101010101");	 +			//FAPI_DBG("%s:          ------------------",i_target_mba.toEcmdString()); +			{FAPI_DBG("%s:Byte      001122334455667788",i_target_mba.toEcmdString()); +			FAPI_DBG("%s:Nibble    010101010101010101",i_target_mba.toEcmdString());	}  			for(l_rank = 0; l_rank < l_max_rank; l_rank++)  			{	 -				//FAPI_INF("Rank %d",i_rank); +				//FAPI_DBG("%s:Rank %d",i_rank); +				l_num = 0;  				rc = mss_getrankpair(i_target_mba,l_port,0,&rank_pair,valid_rank);if(rc) return rc;  				i_rank=valid_rank[l_rank]; -				sprintf(l_str,"%-4s%d%5s","RANK",i_rank,""); +				sprintf(l_str,"%s:%-4s%d%5s",i_target_mba.toEcmdString(),"RANK",i_rank,""); +				l_flag = 0;  				for( i_byte = 0;i_byte < l_max_bytes ;i_byte++)  				{  					for (i_nibble = 0;i_nibble < 2;i_nibble++)  					{	  +					    l_flag = 0; +						l_inter = l_marray[l_num] ; +						  						i_input_index_u8=(8*i_byte)+(4*i_nibble); +						 +						if((l_inter == i_input_index_u8) &&(l_num < io_num)) +						{ +						//FAPI_INF("l_flag %d,l_inter %d,i_input_index_u8 %d",l_flag,l_inter,i_input_index_u8); +						l_num++; +						l_flag = 1; +						} +						 +						 +						 +						 +						//FAPI_INF("l_flag %d,l_inter %d,i_input_index_u8 %d",l_flag,l_inter,i_input_index_u8);  						rc=rosetta_map(i_target_mba,l_port,l_input_type_e,i_input_index_u8,0,o_val);if(rc) return rc;  						i_byte1=o_val/8;  						i_nibble1=o_val%8; @@ -947,18 +1604,26 @@ fapi::ReturnCode  mcb_error_map(const fapi::Target & i_target_mba, uint8_t  o_er  						}else{  						i_nibble1=0;  						}	 -						if( o_error_map[l_port][l_rank][i_byte1][i_nibble1] == 1){ -							 -							strcat(l_str,"X");		  +						if(l_flag == 1) +						{ +							strcat(l_str,"M"); +						  						}  						else -						{        -							 -							strcat(l_str,"."); +						{ +							if( o_error_map[l_port][l_rank][i_byte1][i_nibble1] == 1){ +								 +								strcat(l_str,"X");		  +							} +							else +							{        +								 +								strcat(l_str,"."); +							}  						}  					}  				}	 -				FAPI_INF("%s",l_str); +				FAPI_DBG("%s",l_str);  			}  		}  	} @@ -967,15 +1632,16 @@ fapi::ReturnCode  mcb_error_map(const fapi::Target & i_target_mba, uint8_t  o_er  	else   //Calling CDIMM error Map print  		{  			i_port = 0; -			mcb_error_map_print( i_target_mba ,i_port, i_rank, l_mcb_fail_160); +			mcb_error_map_print( i_target_mba , l_mcb_fail_160, i_port,l_array0,l_number1);  			i_port = 1;    -			mcb_error_map_print(i_target_mba, i_port, i_rank, l_mcb_fail1_160);  +			mcb_error_map_print(i_target_mba, l_mcb_fail1_160, i_port,l_array1,l_number);   		}     //End      return rc;  } +  /*****************************************************************/  // Funtion name : mcb_write_test_mem  // Description  :   : Based on parameters passed we write data into Register being passed   @@ -992,7 +1658,7 @@ fapi::ReturnCode  mcb_error_map(const fapi::Target & i_target_mba, uint8_t  o_er  //    uint8_t i_cfg_test_123_cmd                Integer value  //****************************************************************/ -fapi::ReturnCode  mcb_write_test_mem(const fapi::Target & i_target_mba,const uint64_t i_reg_addr,mcbist_oper_type i_operation_type,uint8_t i_cfg_test_123_cmd,mcbist_addr_mode i_addr_mode,mcbist_data_mode i_data_mode,uint8_t i_done,mcbist_data_select_mode i_data_select_mode, mcbist_add_select_mode i_addr_select_mode,uint8_t i_testnumber) +fapi::ReturnCode  mcb_write_test_mem(const fapi::Target & i_target_mba,const uint64_t i_reg_addr,mcbist_oper_type i_operation_type,uint8_t i_cfg_test_123_cmd,mcbist_addr_mode i_addr_mode,mcbist_data_mode i_data_mode,uint8_t i_done,mcbist_data_select_mode i_data_select_mode, mcbist_add_select_mode i_addr_select_mode,uint8_t i_testnumber,uint8_t i_testnumber1,uint8_t total_subtest_no,struct Subtest_info l_sub_info[30])  {      fapi::ReturnCode  rc;      uint32_t rc_num = 0; @@ -1003,15 +1669,29 @@ fapi::ReturnCode  mcb_write_test_mem(const fapi::Target & i_target_mba,const uin      uint8_t l_data_mode = i_data_mode;      uint8_t l_data_select_mode = i_data_select_mode;      uint8_t l_addr_select_mode = i_addr_select_mode; -	 +	//uint8_t l_print = 0;  +	//rc = FAPI_ATTR_GET(ATTR_MCBIST_PRINTING_DISABLE, &i_target_mba,l_print); if(rc) return rc;      ecmdDataBufferBase l_data_buffer_64(64); -    FAPI_INF("Function mcb_write_test_mem"); +    FAPI_DBG("%s:Function mcb_write_test_mem",i_target_mba.toEcmdString());      rc = fapiGetScom(i_target_mba,i_reg_addr,l_data_buffer_64);if(rc) return rc;      l_index = i_testnumber * (MCB_TEST_NUM) ;  -    // Operation type +	uint8_t l_done_bit ; +	rc = FAPI_ATTR_GET(ATTR_MCBIST_ADDR_BANK, &i_target_mba, l_done_bit); if(rc) return rc; +	if(l_done_bit == 1) +	{ +		return rc; +    } +	 +	 +	l_sub_info[i_testnumber1].l_operation_type = l_operation_type; +	l_sub_info[i_testnumber1].l_data_mode = l_data_mode; +	l_sub_info[i_testnumber1].l_addr_mode = l_addr_mode;  +		 +	 +	// Operation type      rc_num = rc_num| l_data_buffer_64.insertFromRight(l_operation_type,l_index ,3); @@ -1042,9 +1722,83 @@ fapi::ReturnCode  mcb_write_test_mem(const fapi::Target & i_target_mba,const uin      rc = fapiPutScom(i_target_mba,i_reg_addr,l_data_buffer_64); if(rc) return rc;      rc = fapiGetScom(i_target_mba,i_reg_addr,l_data_buffer_64); if(rc) return rc; -        -    return rc; +	 +		FAPI_DBG("%s:SUBTEST %d of %d in Progress.................... ",i_target_mba.toEcmdString(),i_testnumber1,total_subtest_no); +	   //FAPI_DBG("%s:SUBTEST %d  in Progress.................... ",i_testnumber); +		FAPI_DBG("%s:SUBTEST DETAILS",i_target_mba.toEcmdString());    +		 +		switch(l_operation_type) +		{ +			case 0 : FAPI_DBG("%s:SUBTEST        :WRITE",i_target_mba.toEcmdString());break;  +			case 1 : FAPI_DBG("%s:SUBTEST        :READ",i_target_mba.toEcmdString());break;  +			case 2 : FAPI_DBG("%s:SUBTEST        :READ - WRITE",i_target_mba.toEcmdString());break;  +			case 3 : FAPI_DBG("%s:SUBTEST        :WRITE - READ",i_target_mba.toEcmdString());break;  +			case 4 : FAPI_DBG("%s:SUBTEST        :READ - WRITE - READ",i_target_mba.toEcmdString());break;  +			case 5 : FAPI_DBG("%s:SUBTEST        :READ - WRITE - WRITE",i_target_mba.toEcmdString());break;  +			case 6 : FAPI_DBG("%s:SUBTEST        :RANDOM COMMAND SEQUENCE",i_target_mba.toEcmdString());break;  +			case 7 : FAPI_DBG("%s:SUBTEST        :GOTO SUBTEST N OR REFRESH ONLY",i_target_mba.toEcmdString());break;  +			default : FAPI_DBG("%s:Wrong Operation selected for Subtest",i_target_mba.toEcmdString()); +		} +		 +		switch(l_data_mode) +		{ +			case 0 : FAPI_DBG("%s:DATA MODE      :FIXED DATA",i_target_mba.toEcmdString());break;  +			case 1 : FAPI_DBG("%s:DATA MODE      :DATA_RANDOM_FORWARD",i_target_mba.toEcmdString());break;  +			case 2 : FAPI_DBG("%s:DATA MODE      :DATA_RANDOM_REVERSE",i_target_mba.toEcmdString());break;  +			case 3 : FAPI_DBG("%s:DATA MODE      :RANDOM w/ECC FORWARD",i_target_mba.toEcmdString());break;  +			case 4 : FAPI_DBG("%s:DATA MODE      :RANDOM w/ECC REVERSE",i_target_mba.toEcmdString());break;  +			case 5 : FAPI_DBG("%s:DATA MODE      :DATA EQUAL ADDRESS",i_target_mba.toEcmdString());break;  +			case 6 : FAPI_DBG("%s:DATA MODE      :DATA ROTATE LEFT",i_target_mba.toEcmdString());break;  +			case 7 : FAPI_DBG("%s:DATA MODE      :DATA ROTATE RIGHT",i_target_mba.toEcmdString());break;  +			default : FAPI_DBG("%s:Wrong Data Mode selected for Subtest",i_target_mba.toEcmdString()); +		} + +		 +		 +		switch(l_addr_mode) +		{ +			case 0 : FAPI_DBG("%s:ADDRESS MODE   :SEQUENTIAL FORWARD",i_target_mba.toEcmdString());break;  +			case 1 : FAPI_DBG("%s:ADDRESS MODE   :SEQUENTIAL REVERSE",i_target_mba.toEcmdString());break;  +			case 2 : FAPI_DBG("%s:ADDRESS MODE   :RANDOM FORWARD",i_target_mba.toEcmdString());break;  +			case 3 : FAPI_DBG("%s:ADDRESS MODE   :RANDOM REVERSE",i_target_mba.toEcmdString());break;  +			default :FAPI_DBG("%s:Wrong Address Mode selected for Subtest",i_target_mba.toEcmdString()); +		} +	 +		FAPI_DBG("%s:SUBTEST %d of %d done ",i_target_mba.toEcmdString(),i_testnumber1,total_subtest_no); +	 +	 +	 +	//FAPI_DBG("%s:SUBTEST %d  done ",i_testnumber); +	if(i_done == 1) +	{ +		FAPI_DBG("%s:DONE BIT IS SET FOR CURRENT SUBTEST %d",i_target_mba.toEcmdString(),i_testnumber1); +		//FAPI_DBG("%s:DONE BIT IS SET FOR CURRENT SUBTEST %d",i_testnumber); +	} +	if((l_data_mode == 0)||(l_data_mode == 6)||(l_data_mode == 7)||(l_data_mode == 5)) +	{ +		//FAPI_DBG("%s:fixed set and value of datamode is %d",l_data_mode); +		l_sub_info[i_testnumber1].l_fixed_data_enable = 1; +	} +	else if((l_data_mode == 1)||(l_data_mode == 2)||(l_data_mode == 3)||(l_data_mode == 4)) +	{ +		l_sub_info[i_testnumber1].l_random_data_enable = 1; +		//FAPI_DBG("%s:random set and value of datamode is %d",l_data_mode); +    } +	 +	 +	if((l_addr_mode == 0)||(l_addr_mode == 1)) +	{ +		//FAPI_DBG("fixed addr and value of addrmode is %d",l_addr_mode); +		l_sub_info[i_testnumber1].l_fixed_addr_enable = 1; +	} +	else if((l_addr_mode == 2)||(l_addr_mode == 3)) +	{ +		l_sub_info[i_testnumber1].l_random_addr_enable = 1; +		//FAPI_DBG("random addr and value of addrmode is %d",l_addr_mode); +    } +	return rc;  } +  /*****************************************************************/  // Funtion name : cfg_byte_mask  // Description  :      @@ -1055,8 +1809,7 @@ fapi::ReturnCode  mcb_write_test_mem(const fapi::Target & i_target_mba,const uin  //****************************************************************/ - -fapi::ReturnCode  cfg_byte_mask(const fapi::Target & i_target_mba,uint8_t i_rank,uint8_t i_port) +fapi::ReturnCode  cfg_byte_mask(const fapi::Target & i_target_mba)  {  	uint32_t rc_num;  	uint8_t l_port=0; @@ -1079,7 +1832,8 @@ fapi::ReturnCode  cfg_byte_mask(const fapi::Target & i_target_mba,uint8_t i_rank  	uint8_t l_attr_eff_dimm_type_u8 = 0;  	rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_TYPE, &i_target_mba, l_attr_eff_dimm_type_u8); if(rc) return rc;       rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, &i_target_mba, l_mbaPosition); -	 +	//uint8_t l_print = 0;  +	//rc = FAPI_ATTR_GET(ATTR_MCBIST_PRINTING_DISABLE, &i_target_mba,l_print); if(rc) return rc;  	//l_attr_eff_dimm_type_u8=1;  	for(l_port=0;l_port<2;l_port++){ @@ -1094,12 +1848,14 @@ fapi::ReturnCode  cfg_byte_mask(const fapi::Target & i_target_mba,uint8_t i_rank      ecmdDataBufferBase l_data_buffer2_64(64);      ecmdDataBufferBase l_data_buffer3_64(64); +	ecmdDataBufferBase l_data_buffer4_64(64); +	ecmdDataBufferBase l_data_buffer5_64(64);      l_max_0 = num_ranks_per_dimm[0][0]+num_ranks_per_dimm[0][1];  	l_max_1 = num_ranks_per_dimm[1][0]+num_ranks_per_dimm[1][1]; -   // uint32_t rc_num = 0; +    //uint32_t rc_num = 0;      rc_num =  l_data_buffer3_64.flushTo0();if (rc_num){FAPI_ERR( "Error in function  cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;} @@ -1113,7 +1869,7 @@ fapi::ReturnCode  cfg_byte_mask(const fapi::Target & i_target_mba,uint8_t i_rank  	uint16_t l_sp_isdimm=0xff; -    FAPI_INF("Function cfg_byte_mask"); +    FAPI_DBG("%s:Function cfg_byte_mask",i_target_mba.toEcmdString());      if(l_rnk>3)      {  	l_dimm=1; @@ -1131,22 +1887,23 @@ fapi::ReturnCode  cfg_byte_mask(const fapi::Target & i_target_mba,uint8_t i_rank  		{  			l_dq[l_index0]=l_dqBitmap[l_index0];  			if(l_dqBitmap[l_index0]){ -			FAPI_INF("\n the port=%d  bad dq=%x on dq=%d",l_port,l_dqBitmap[l_index0],l_index0); +			FAPI_DBG("%s:\n the port=%d  bad dq=%x on dq=%d",i_target_mba.toEcmdString(),l_port,l_dqBitmap[l_index0],l_index0);  			}  		}  		else  		{  			if(l_dqBitmap[l_index0]){ -			FAPI_INF("\n the port=%d  bad dq=%x on dq=%d",l_port,l_dqBitmap[l_index0],l_index0); +			FAPI_DBG("%s:\n the port=%d  bad dq=%x on dq=%d",i_target_mba.toEcmdString(),l_port,l_dqBitmap[l_index0],l_index0);  			}  			l_sp[l_index_sp]=l_dqBitmap[l_index0];  			l_index_sp++;  		}  	} - +    // rc_num =  l_data_buffer1_64.flushTo0();if (rc_num){FAPI_ERR( "Error in function  cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}      rc_num =  l_data_buffer1_64.insertFromRight(l_dq,0,64);if (rc_num){FAPI_ERR( "Error in function  cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;} +	      //rc_num =  l_data_buffer2_64.insertFromRight(l_sp,0,16);if (rc_num){FAPI_ERR( "Error in function  cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}  	if(l_mbaPosition == 0) @@ -1159,8 +1916,12 @@ fapi::ReturnCode  cfg_byte_mask(const fapi::Target & i_target_mba,uint8_t i_rank  	}else{  	rc_num =  l_data_buffer2_64.insertFromRight(l_sp,0,16);if (rc_num){FAPI_ERR( "Error in function  cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}  	} +	rc = fapiGetScom(i_target_mba,MBS_MCBIST01_MCBCMA1Q_0x02011672,l_data_buffer4_64); if(rc) return rc; +	rc_num =  l_data_buffer1_64.setOr(l_data_buffer4_64,0,64);if (rc_num){FAPI_ERR( "Error in function  cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}  	//rc_num =  l_data_buffer2_64.insertFromRight(l_sp_mask,16,16);if (rc_num){FAPI_ERR( "Error in function  cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}  	rc = fapiPutScom(i_target_mba,MBS_MCBIST01_MCBCMA1Q_0x02011672,l_data_buffer1_64); if(rc) return rc; +	rc = fapiGetScom(i_target_mba,MBS_MCBIST01_MCBCMABQ_0x02011674,l_data_buffer5_64); if(rc) return rc; +	rc_num =  l_data_buffer2_64.setOr(l_data_buffer5_64,0,64);if (rc_num){FAPI_ERR( "Error in function  cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}  	rc = fapiPutScom(i_target_mba,MBS_MCBIST01_MCBCMABQ_0x02011674,l_data_buffer2_64); if(rc) return rc;  	//rc = fapiPutScom(i_target_mba,MBS_MCBIST01_MCBCMB1Q_0x02011673,l_data_buffer3_64); if(rc) return rc;      } @@ -1174,9 +1935,12 @@ fapi::ReturnCode  cfg_byte_mask(const fapi::Target & i_target_mba,uint8_t i_rank  	}else{  	rc_num =  l_data_buffer2_64.insertFromRight(l_sp,16,16);if (rc_num){FAPI_ERR( "Error in function  cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}  	} -	 +	rc = fapiGetScom(i_target_mba,MBS_MCBIST01_MCBCMB1Q_0x02011673,l_data_buffer4_64); if(rc) return rc; +	rc_num =  l_data_buffer1_64.setOr(l_data_buffer4_64,0,64);if (rc_num){FAPI_ERR( "Error in function  cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}  	//rc_num =  l_data_buffer2_64.insertFromRight(l_sp_mask,0,16);if (rc_num){FAPI_ERR( "Error in function  cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}  	rc = fapiPutScom(i_target_mba,MBS_MCBIST01_MCBCMB1Q_0x02011673,l_data_buffer1_64); if(rc) return rc; +	rc = fapiGetScom(i_target_mba,MBS_MCBIST01_MCBCMABQ_0x02011674,l_data_buffer5_64); if(rc) return rc; +	rc_num =  l_data_buffer2_64.setOr(l_data_buffer5_64,0,64);if (rc_num){FAPI_ERR( "Error in function  cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}  	rc = fapiPutScom(i_target_mba,MBS_MCBIST01_MCBCMABQ_0x02011674,l_data_buffer2_64); if(rc) return rc;  	//rc = fapiPutScom(i_target_mba,MBS_MCBIST01_MCBCMA1Q_0x02011672,l_data_buffer3_64); if(rc) return rc;      } @@ -1191,7 +1955,11 @@ fapi::ReturnCode  cfg_byte_mask(const fapi::Target & i_target_mba,uint8_t i_rank  	rc_num =  l_data_buffer2_64.insertFromRight(l_sp,0,16);if (rc_num){FAPI_ERR( "Error in function  cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}  	}  	//rc_num =  l_data_buffer2_64.insertFromRight(l_sp_mask,16,16);if (rc_num){FAPI_ERR( "Error in function  cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;} +	rc = fapiGetScom(i_target_mba,0x02011772,l_data_buffer4_64); if(rc) return rc; +	rc_num =  l_data_buffer1_64.setOr(l_data_buffer4_64,0,64);if (rc_num){FAPI_ERR( "Error in function  cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}  	rc = fapiPutScom(i_target_mba,0x02011772,l_data_buffer1_64); if(rc) return rc; +	rc = fapiGetScom(i_target_mba,0x02011774,l_data_buffer5_64); if(rc) return rc; +	rc_num =  l_data_buffer2_64.setOr(l_data_buffer5_64,0,64);if (rc_num){FAPI_ERR( "Error in function  cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}  	rc = fapiPutScom(i_target_mba,0x02011774,l_data_buffer2_64); if(rc) return rc;  	//rc = fapiPutScom(i_target_mba,0x02011773,l_data_buffer3_64); if(rc) return rc;      } @@ -1206,7 +1974,11 @@ fapi::ReturnCode  cfg_byte_mask(const fapi::Target & i_target_mba,uint8_t i_rank  	}  	//rc_num =  l_data_buffer2_64.insertFromRight(l_sp_mask,0,16);if (rc_num){FAPI_ERR( "Error in function  cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;} +	rc = fapiGetScom(i_target_mba,0x02011773,l_data_buffer4_64); if(rc) return rc; +	rc_num =  l_data_buffer1_64.setOr(l_data_buffer4_64,0,64);if (rc_num){FAPI_ERR( "Error in function  cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}  	rc = fapiPutScom(i_target_mba,0x02011773,l_data_buffer1_64); if(rc) return rc; +	rc = fapiGetScom(i_target_mba,0x02011774,l_data_buffer5_64); if(rc) return rc; +	rc_num =  l_data_buffer2_64.setOr(l_data_buffer5_64,0,64);if (rc_num){FAPI_ERR( "Error in function  cfg_byte_mask:");rc.setEcmdError(rc_num);return rc;}  	rc = fapiPutScom(i_target_mba,0x02011774,l_data_buffer2_64); if(rc) return rc;  	//rc = fapiPutScom(i_target_mba,0x02011772,l_data_buffer3_64); if(rc) return rc;      } @@ -1276,9 +2048,176 @@ fapi::ReturnCode  cfg_byte_mask(const fapi::Target & i_target_mba,uint8_t i_rank      return rc;  } +/*fapi::ReturnCode mss_conversion_testtype( uint8_t l_pattern,mcbist_test_mem &i_mcbtest ) +{ +	ReturnCode rc; +	FAPI_DBG("%s:value of testtype is %d",l_pattern); +	switch(l_pattern) +	{ +case 0 : i_mcbtest = USER_MODE;break; +case 1 : i_mcbtest = CENSHMOO;break; +case 2 : i_mcbtest = SUREFAIL;break; +case 3 : i_mcbtest = MEMWRITE;break; +case 4 : i_mcbtest = MEMREAD;break; +case 5 : i_mcbtest = CBR_REFRESH;break; +case 6 : i_mcbtest = MCBIST_SHORT;break; +case 7 : i_mcbtest = SHORT_SEQ;break; +case 8 : i_mcbtest = DELTA_I;break; +case 9 : i_mcbtest = DELTA_I_LOOP;break; +case 10 : i_mcbtest = SHORT_RAND;break; +case 11 : i_mcbtest = LONG1;break; +case 12 : i_mcbtest = BUS_TAT;break; +case 13 : i_mcbtest = SIMPLE_FIX;break; +case 14 : i_mcbtest = SIMPLE_RAND;break; +case 15 : i_mcbtest = SIMPLE_RAND_2W;break; +case 16 : i_mcbtest = SIMPLE_RAND_FIXD;break; +case 17 : i_mcbtest = SIMPLE_RA_RD_WR;break; +case 18 : i_mcbtest = SIMPLE_RA_RD_R;break; +case 19 : i_mcbtest = SIMPLE_RA_FD_R;break; +case 20 : i_mcbtest = SIMPLE_RA_FD_R_INF;break; +case 21 : i_mcbtest = SIMPLE_SA_FD_R;break; +case 22 : i_mcbtest = SIMPLE_RA_FD_W;break; +case 23 : i_mcbtest = INFINITE;break; +case 24 : i_mcbtest = WR_ONLY;break; +case 25 : i_mcbtest = W_ONLY;break; +case 26 : i_mcbtest = R_ONLY;break; +case 27 : i_mcbtest = W_ONLY_RAND;break; +case 28 : i_mcbtest = R_ONLY_RAND;break; +case 29 : i_mcbtest = R_ONLY_MULTI;break; +case 30 : i_mcbtest = SHORT;break;   +case 31 : i_mcbtest = SIMPLE_RAND_BARI;break;  +case 32 : i_mcbtest = W_R_INFINITE;break;  +case 33 : i_mcbtest = W_R_RAND_INFINITE;break;  +case 34 : i_mcbtest = R_INFINITE1;break;  +case 35 : i_mcbtest = R_INFINITE_RF;break;  +case 36 : i_mcbtest = MARCH;break;  +case 37 : i_mcbtest = SIMPLE_FIX_RF;break; +case 38 : i_mcbtest = SHMOO_STRESS;break; +		default : FAPI_DBG("%s:Wrong Test_type,so using default test_type",i_target_mba.toEcmdString()); +	} +	return rc; +}*/ +fapi::ReturnCode mss_conversion_testtype( const fapi::Target & i_target_mba,uint8_t l_pattern,mcbist_test_mem &i_mcbtest ) +{ +	ReturnCode rc; +	//uint8_t l_print = 0;  +	//rc = FAPI_ATTR_GET(ATTR_MCBIST_PRINTING_DISABLE, &i_target_mba,l_print); if(rc) return rc; +	FAPI_INF("%s:value of testtype is %d",i_target_mba.toEcmdString(),l_pattern); +	switch(l_pattern) +	{ +case 0 : i_mcbtest = USER_MODE;FAPI_INF("%s:TESTTYPE :USER_MODE",i_target_mba.toEcmdString());break; +case 1 : i_mcbtest = CENSHMOO;FAPI_INF("%s:TESTTYPE :CENSHMOO",i_target_mba.toEcmdString());break; +case 2 : i_mcbtest = SUREFAIL;FAPI_INF("%s:TESTTYPE :SUREFAIL",i_target_mba.toEcmdString());break; +case 3 : i_mcbtest = MEMWRITE;FAPI_INF("%s:TESTTYPE :MEMWRITE",i_target_mba.toEcmdString());break; +case 4 : i_mcbtest = MEMREAD;FAPI_INF("%s:TESTTYPE :MEMREAD",i_target_mba.toEcmdString());break; +case 5 : i_mcbtest = CBR_REFRESH;FAPI_INF("%s:TESTTYPE :CBR_REFRESH",i_target_mba.toEcmdString());break; +case 6 : i_mcbtest = MCBIST_SHORT;FAPI_INF("%s:TESTTYPE :MCBIST_SHORT",i_target_mba.toEcmdString());break; +case 7 : i_mcbtest = SHORT_SEQ;FAPI_INF("%s:TESTTYPE :SHORT_SEQ",i_target_mba.toEcmdString());break; +case 8 : i_mcbtest = DELTA_I;FAPI_INF("%s:TESTTYPE :DELTA_I",i_target_mba.toEcmdString());break; +case 9 : i_mcbtest = DELTA_I_LOOP;FAPI_INF("%s:TESTTYPE :DELTA_I_LOOP",i_target_mba.toEcmdString());break; +case 10 : i_mcbtest = SHORT_RAND;FAPI_INF("%s:TESTTYPE :SHORT_RAND",i_target_mba.toEcmdString());break; +case 11 : i_mcbtest = LONG1;FAPI_INF("%s:TESTTYPE :LONG1",i_target_mba.toEcmdString());break; +case 12 : i_mcbtest = BUS_TAT;FAPI_INF("%s:TESTTYPE :BUS_TAT",i_target_mba.toEcmdString());break; +case 13 : i_mcbtest = SIMPLE_FIX;FAPI_INF("%s:TESTTYPE :SIMPLE_FIX",i_target_mba.toEcmdString());break; +case 14 : i_mcbtest = SIMPLE_RAND;FAPI_INF("%s:TESTTYPE :SIMPLE_RAND",i_target_mba.toEcmdString());break; +case 15 : i_mcbtest = SIMPLE_RAND_2W;FAPI_INF("%s:TESTTYPE :SIMPLE_RAND_2W",i_target_mba.toEcmdString());break; +case 16 : i_mcbtest = SIMPLE_RAND_FIXD;FAPI_INF("%s:TESTTYPE :SIMPLE_RAND_FIXD",i_target_mba.toEcmdString());break; +case 17 : i_mcbtest = SIMPLE_RA_RD_WR;FAPI_INF("%s:TESTTYPE :SIMPLE_RA_RD_WR",i_target_mba.toEcmdString());break; +case 18 : i_mcbtest = SIMPLE_RA_RD_R;FAPI_INF("%s:TESTTYPE :SIMPLE_RA_RD_R",i_target_mba.toEcmdString());break; +case 19 : i_mcbtest = SIMPLE_RA_FD_R;FAPI_INF("%s:TESTTYPE :SIMPLE_RA_FD_R",i_target_mba.toEcmdString());break; +case 20 : i_mcbtest = SIMPLE_RA_FD_R_INF;FAPI_INF("%s:TESTTYPE :SIMPLE_RA_FD_R_INF",i_target_mba.toEcmdString());break; +case 21 : i_mcbtest = SIMPLE_SA_FD_R;FAPI_INF("%s:TESTTYPE :SIMPLE_SA_FD_R",i_target_mba.toEcmdString());break; +case 22 : i_mcbtest = SIMPLE_RA_FD_W;FAPI_INF("%s:TESTTYPE :SIMPLE_RA_FD_W",i_target_mba.toEcmdString());break; +case 23 : i_mcbtest = INFINITE;FAPI_INF("%s:TESTTYPE :INFINITE",i_target_mba.toEcmdString());break; +case 24 : i_mcbtest = WR_ONLY;FAPI_INF("%s:TESTTYPE :WR_ONLY",i_target_mba.toEcmdString());break; +case 25 : i_mcbtest = W_ONLY;FAPI_INF("%s:TESTTYPE :W_ONLY",i_target_mba.toEcmdString());break; +case 26 : i_mcbtest = R_ONLY;FAPI_INF("%s:TESTTYPE :R_ONLY",i_target_mba.toEcmdString());break; +case 27 : i_mcbtest = W_ONLY_RAND;FAPI_INF("%s:TESTTYPE :W_ONLY_RAND",i_target_mba.toEcmdString());break; +case 28 : i_mcbtest = R_ONLY_RAND;FAPI_INF("%s:TESTTYPE :R_ONLY_RAND",i_target_mba.toEcmdString());break; +case 29 : i_mcbtest = R_ONLY_MULTI;FAPI_INF("%s:TESTTYPE :R_ONLY_MULTI",i_target_mba.toEcmdString());break; +case 30 : i_mcbtest = SHORT;FAPI_INF("%s:TESTTYPE :SHORT",i_target_mba.toEcmdString());break;   +case 31 : i_mcbtest = SIMPLE_RAND_BARI;FAPI_INF("%s:TESTTYPE :SIMPLE_RAND_BARI",i_target_mba.toEcmdString());break;  +case 32 : i_mcbtest = W_R_INFINITE;FAPI_INF("%s:TESTTYPE :W_R_INFINITE",i_target_mba.toEcmdString());break;  +case 33 : i_mcbtest = W_R_RAND_INFINITE;FAPI_INF("%s:TESTTYPE :W_R_RAND_INFINITE",i_target_mba.toEcmdString());break;  +case 34 : i_mcbtest = R_INFINITE1;FAPI_INF("%s:TESTTYPE :R_INFINITE1",i_target_mba.toEcmdString());break;  +case 35 : i_mcbtest = R_INFINITE_RF;FAPI_INF("%s:TESTTYPE :R_INFINITE_RF",i_target_mba.toEcmdString());break;  +case 36 : i_mcbtest = MARCH;FAPI_INF("%s:TESTTYPE :MARCH",i_target_mba.toEcmdString());break;  +case 37 : i_mcbtest = SIMPLE_FIX_RF;FAPI_INF("%s:TESTTYPE :SIMPLE_FIX_RF",i_target_mba.toEcmdString());break; +case 38 : i_mcbtest = SHMOO_STRESS;FAPI_INF("%s:TESTTYPE :SHMOO_STRESS",i_target_mba.toEcmdString());break; +case 39 : i_mcbtest = SIMPLE_RAND_RA;FAPI_INF("%s:TESTTYPE :SIMPLE_RAND_RA",i_target_mba.toEcmdString());break;  +case 40 : i_mcbtest = SIMPLE_FIX_RA;FAPI_INF("%s:TESTTYPE :SIMPLE_FIX_RA",i_target_mba.toEcmdString());break; +case 41 : i_mcbtest = SIMPLE_FIX_RF_RA;FAPI_INF("%s:TESTTYPE :SIMPLE_FIX_RF_RA",i_target_mba.toEcmdString());break; +case 42 : i_mcbtest = TEST_RR;FAPI_INF("%s:TESTTYPE :TEST_RR",i_target_mba.toEcmdString());break; +case 43 : i_mcbtest = TEST_RF;FAPI_INF("%s:TESTTYPE :TEST_RF",i_target_mba.toEcmdString());break; +	 +default : FAPI_INF("%s:Wrong Test_type,so using default test_type",i_target_mba.toEcmdString()); +	} -    +	return rc;  } +fapi::ReturnCode mss_conversion_data(const fapi::Target & i_target_mba, uint8_t l_pattern,mcbist_data_gen  &i_mcbpatt) +{ +	ReturnCode rc; +	//uint8_t l_print = 0;  +	//rc = FAPI_ATTR_GET(ATTR_MCBIST_PRINTING_DISABLE, &i_target_mba,l_print); if(rc) return rc; +	FAPI_INF("%s:value of pattern is %d",i_target_mba.toEcmdString(),l_pattern); +	switch(l_pattern) +	{ +		case 0 : i_mcbpatt = ABLE_FIVE;FAPI_INF("%s:PATTERN :ABLE_FIVE",i_target_mba.toEcmdString());break; +		case 1 : i_mcbpatt = USR_MODE;FAPI_INF("%s:PATTERN :USER_MODE",i_target_mba.toEcmdString());break; +		case 2 : i_mcbpatt = ONEHOT;FAPI_INF("%s:PATTERN :ONEHOT",i_target_mba.toEcmdString());break; +		case 3 : i_mcbpatt = DQ0_00011111_RESTALLONE;FAPI_INF("%s:PATTERN :DQ0_00011111_RESTALLONE",i_target_mba.toEcmdString());break; +		case 4 : i_mcbpatt = DQ0_11100000_RESTALLZERO;FAPI_INF("%s:PATTERN :DQ0_11100000_RESTALLZERO",i_target_mba.toEcmdString());break; +		case 5 : i_mcbpatt = ALLZERO;FAPI_INF("%s:PATTERN :ALLZERO",i_target_mba.toEcmdString());break; +		case 6 : i_mcbpatt = ALLONE;FAPI_INF("%s:PATTERN :ALLONE",i_target_mba.toEcmdString());break; +		case 7 : i_mcbpatt = BYTE_BURST_SIGNATURE;FAPI_INF("%s:PATTERN :BYTE_BURST_SIGNATURE",i_target_mba.toEcmdString());break; +		case 8 : i_mcbpatt = BYTE_BURST_SIGNATURE_V1;FAPI_INF("%s:PATTERN :BYTE_BURST_SIGNATURE_V1",i_target_mba.toEcmdString());break; +		case 9 : i_mcbpatt = BYTE_BURST_SIGNATURE_V2;FAPI_INF("%s:PATTERN :BYTE_BURST_SIGNATURE_V2",i_target_mba.toEcmdString());break; +		case 10 : i_mcbpatt = BYTE_BURST_SIGNATURE_V3;FAPI_INF("%s:PATTERN :BYTE_BURST_SIGNATURE_V3",i_target_mba.toEcmdString());break; +		case 11 : i_mcbpatt = DATA_GEN_DELTA_I;FAPI_INF("%s:PATTERN :DATA_GEN_DELTA_I",i_target_mba.toEcmdString());break; +		case 12 : i_mcbpatt = MCBIST_2D_CUP_PAT0;FAPI_INF("%s:PATTERN :MCBIST_2D_CUP_PAT0",i_target_mba.toEcmdString());break; +		case 13 : i_mcbpatt = MPR;FAPI_INF("%s:PATTERN :MPR",i_target_mba.toEcmdString());break; +		case 14 : i_mcbpatt = MPR03;FAPI_INF("%s:PATTERN :MPR03",i_target_mba.toEcmdString());break; +		case 15 : i_mcbpatt = MPR25;FAPI_INF("%s:PATTERN :MPR25",i_target_mba.toEcmdString());break; +		case 16 : i_mcbpatt = MPR47;FAPI_INF("%s:PATTERN :MPR47",i_target_mba.toEcmdString());break; +		case 17 : i_mcbpatt = DELTA_I1;FAPI_INF("%s:PATTERN :DELTA_I1",i_target_mba.toEcmdString());break; +		case 18 : i_mcbpatt = MCBIST_2D_CUP_PAT1;FAPI_INF("%s:PATTERN :MCBIST_2D_CUP_PAT1",i_target_mba.toEcmdString());break; +		case 19 : i_mcbpatt = MHC_55;FAPI_INF("%s:PATTERN :MHC_55",i_target_mba.toEcmdString());break; +		case 20 : i_mcbpatt = MHC_DQ_SIM;FAPI_INF("%s:PATTERN :MHC_DQ_SIM",i_target_mba.toEcmdString());break; +		case 21 : i_mcbpatt = MCBIST_2D_CUP_PAT2;FAPI_INF("%s:PATTERN :MCBIST_2D_CUP_PAT2",i_target_mba.toEcmdString());break; +		case 22 : i_mcbpatt = MCBIST_2D_CUP_PAT3;FAPI_INF("%s:PATTERN :MCBIST_2D_CUP_PAT3",i_target_mba.toEcmdString());break; +		case 23 : i_mcbpatt = MCBIST_2D_CUP_PAT4;FAPI_INF("%s:PATTERN :MCBIST_2D_CUP_PAT4",i_target_mba.toEcmdString());break; +		case 24 : i_mcbpatt = MCBIST_2D_CUP_PAT5;FAPI_INF("%s:PATTERN :MCBIST_2D_CUP_PAT5",i_target_mba.toEcmdString());break; +		case 25 : i_mcbpatt = MCBIST_2D_CUP_PAT6;FAPI_INF("%s:PATTERN :MCBIST_2D_CUP_PAT6",i_target_mba.toEcmdString());break; +		case 26 : i_mcbpatt = MCBIST_2D_CUP_PAT7;FAPI_INF("%s:PATTERN :MCBIST_2D_CUP_PAT7",i_target_mba.toEcmdString());break; +		case 27 : i_mcbpatt = MCBIST_2D_CUP_PAT8;FAPI_INF("%s:PATTERN :MCBIST_2D_CUP_PAT8",i_target_mba.toEcmdString());break; +		case 28 : i_mcbpatt = MCBIST_2D_CUP_PAT9;FAPI_INF("%s:PATTERN :MCBIST_2D_CUP_PAT9",i_target_mba.toEcmdString());break; +		case 29 : i_mcbpatt = CWLPATTERN;FAPI_INF("%s:PATTERN :CWLPATTERN",i_target_mba.toEcmdString());break; +		case 30 : i_mcbpatt = GREY1;FAPI_INF("%s:PATTERN :GREY1",i_target_mba.toEcmdString());break; +		case 31 : i_mcbpatt = DC_ONECHANGE;FAPI_INF("%s:PATTERN :DC_ONECHANGE",i_target_mba.toEcmdString());break; +		case 32 : i_mcbpatt = DC_ONECHANGEDIAG;FAPI_INF("%s:PATTERN :DC_ONECHANGEDIAG",i_target_mba.toEcmdString());break; +		case 33 : i_mcbpatt = GREY2;FAPI_INF("%s:PATTERN :GREY2",i_target_mba.toEcmdString());break; +		case 34 : i_mcbpatt = FIRST_XFER;FAPI_INF("%s:PATTERN :FIRST_XFER",i_target_mba.toEcmdString());break; +		case 35 : i_mcbpatt = MCBIST_222_XFER;FAPI_INF("%s:PATTERN :MCBIST_222_XFER",i_target_mba.toEcmdString());break; +		case 36 : i_mcbpatt = MCBIST_333_XFER;FAPI_INF("%s:PATTERN :MCBIST_333_XFER",i_target_mba.toEcmdString());break; +		case 37 : i_mcbpatt = MCBIST_444_XFER;FAPI_INF("%s:PATTERN :MCBIST_444_XFER",i_target_mba.toEcmdString());break; +		case 38 : i_mcbpatt = MCBIST_555_XFER;FAPI_INF("%s:PATTERN :MCBIST_555_XFER",i_target_mba.toEcmdString());break; +		case 39 : i_mcbpatt = MCBIST_666_XFER;FAPI_INF("%s:PATTERN :MCBIST_666_XFER",i_target_mba.toEcmdString());break; +		case 40 : i_mcbpatt = MCBIST_777_XFER;FAPI_INF("%s:PATTERN :MCBIST_777_XFER",i_target_mba.toEcmdString());break; +		case 41 : i_mcbpatt = MCBIST_888_XFER;FAPI_INF("%s:PATTERN :MCBIST_888_XFER",i_target_mba.toEcmdString());break; +		case 42 : i_mcbpatt = FIRST_XFER_X4MODE;FAPI_INF("%s:PATTERN :FIRST_XFER_X4MODE",i_target_mba.toEcmdString());break; +		case 43 : i_mcbpatt = MCBIST_LONG;FAPI_INF("%s:PATTERN :MCBIST_LONG",i_target_mba.toEcmdString());break; +		case 44 : i_mcbpatt = PSEUDORANDOM;FAPI_INF("%s:PATTERN :PSEUDORANDOM",i_target_mba.toEcmdString());break; +		case 45 : i_mcbpatt = CASTLE;FAPI_INF("%s:PATTERN :CASTLE",i_target_mba.toEcmdString());break; + +		default : FAPI_INF("%s:Wrong Data Pattern,so using default pattern",i_target_mba.toEcmdString()); +	} + +	return rc; +} + +    +} diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_shmoo_common.H b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_shmoo_common.H index d6438580e..37e7c9b91 100644 --- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_shmoo_common.H +++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_shmoo_common.H @@ -20,7 +20,7 @@  /* Origin: 30                                                             */  /*                                                                        */  /* IBM_PROLOG_END_TAG                                                     */ -// $Id: mss_shmoo_common.H,v 1.12 2013/03/20 17:18:38 sasethur Exp $ +// $Id: mss_shmoo_common.H,v 1.16 2013/08/08 11:09:15 sasethur Exp $  // *!***************************************************************************  // *! (C) Copyright International Business Machines Corp. 1997, 1998  // *!           All Rights Reserved -- Property of IBM  @@ -38,6 +38,7 @@  // CHANGE HISTORY:  //------------------------------------------------------------------------------  // Version:|Author: | Date:   | Comment: +// 1.15    |abhijit |8/8/12  | Updated Review Comments  // 1.9     |aditya  |12/6/12  | Updated Review Comments  // 1.8     | abhijit| 15/11/12| made changes fw review comments   // 1.7     | abhijit| 22/10/12| made changes to variables @@ -52,7 +53,7 @@ enum shmoo_type_t { TEST_NONE=0,MCBIST=1,WR_EYE=2, WRT_DQS=4,RD_EYE=8,RD_GATE=16  enum shmoo_algorithm_t { SEQ_LIN}; // Parallel bytes/ranks here .. no parallel targets in HB  const uint8_t NINE = 9;  const uint8_t MAX_RPS=4;// 4 Rank pairs in this design -const uint8_t MAX_SHMOO=4; +const uint8_t MAX_SHMOO=18;  const uint8_t MAX_RANK_DIMM=4;  const uint8_t MAX_NIBBLES=2;  const uint8_t MAX_BITS=4; @@ -64,6 +65,11 @@ const uint16_t error_threshold_count=400;  const uint8_t MAX_PORT = 2;  const uint8_t MAX_BYTE = 10;  const uint8_t MAX_RANK = 8; +const uint8_t MAX_CMDS = 3; +const uint8_t MAX_ADDR = 20; +const uint8_t MAX_CNTRL = 20; +const uint8_t MAX_CLK = 8; +  //const uint8_t MAX_NIBBLE = 1;  //! Defines the structure of a knob ..Holds static info regarding a knob @@ -85,7 +91,25 @@ struct shmoo_knob_data_t{      uint32_t rb_regval[MAX_DQ][MAX_RPS];// Right Bound register/Hex value      uint32_t total_margin[MAX_DQ][MAX_RPS]; //Left bound+ right bound value      uint32_t nom_val[MAX_DQ][MAX_RPS]; // nominal value of this instance of the knob +	uint32_t last_pass[MAX_DQ][MAX_RPS]; +	uint32_t last_fail[MAX_DQ][MAX_RPS]; +	uint32_t curr_val[MAX_DQ][MAX_RPS]; +	uint32_t curr_diff[MAX_DQ][MAX_RPS];      uint32_t right_margin_val[MAX_DQ][MAX_RPS];      uint32_t left_margin_val[MAX_DQ][MAX_RPS]; +	uint32_t right_err_cnt[MAX_DQ][MAX_RPS]; +	uint32_t left_err_cnt[MAX_DQ][MAX_RPS]; +	uint32_t cmd_lb_regval[MAX_PORT][MAX_CMDS][SCHMOO_NIBBLES]; // Left Bound register/Hex value +    uint32_t cmd_rb_regval[MAX_PORT][MAX_CMDS][SCHMOO_NIBBLES];// Right Bound register/Hex value +    uint32_t cmd_total_margin[MAX_PORT][MAX_CMDS][SCHMOO_NIBBLES]; //Left bound+ right bound value +    uint32_t cmd_nom_val[MAX_CMDS]; // nominal value of this instance of the knob +    uint32_t cmd_right_margin_val[MAX_PORT][MAX_CMDS][SCHMOO_NIBBLES]; +    uint32_t cmd_left_margin_val[MAX_PORT][MAX_CMDS][SCHMOO_NIBBLES]; +	uint32_t addr_nom_val[MAX_ADDR];  +	uint32_t cntrl_nom_val[MAX_CNTRL];  +	uint32_t clk_nom_val[MAX_CLK];  +	uint32_t datadis_nom_val[MAX_CLK]; +	uint32_t offset[SCHMOO_NIBBLES];  +	  };  #endif diff --git a/src/usr/hwpf/hwp/mc_config/mss_eff_config/mss_eff_config_shmoo.C b/src/usr/hwpf/hwp/mc_config/mss_eff_config/mss_eff_config_shmoo.C index 86037b676..9584518d2 100644 --- a/src/usr/hwpf/hwp/mc_config/mss_eff_config/mss_eff_config_shmoo.C +++ b/src/usr/hwpf/hwp/mc_config/mss_eff_config/mss_eff_config_shmoo.C @@ -20,7 +20,7 @@  /* Origin: 30                                                             */  /*                                                                        */  /* IBM_PROLOG_END_TAG                                                     */ -// $Id: mss_eff_config_shmoo.C,v 1.6 2013/06/06 05:45:16 sauchadh Exp $ +// $Id: mss_eff_config_shmoo.C,v 1.7 2013/08/09 17:54:08 bellows Exp $  // $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/centaur/working/procedures/ipl/fapi/mss_eff_config_shmoo.C,v $  //------------------------------------------------------------------------------  // *! (C) Copyright International Business Machines Corp. 2011 @@ -46,13 +46,12 @@  //   1.4   | sauchadh |10-May-13| Fixed FW comments  //   1.5   | sauchadh |15-May-13| Fixed FW comments  //   1.6   | sauchadh |6-Jun-13 | Added some more attributes +//   1.7   | bellows  |09-Aug-13| Set default pattern to 0, per Sarvanan Req  //----------------------------------------------------------------------  //  My Includes  //---------------------------------------------------------------------- - -  //----------------------------------------------------------------------  //  Includes  //---------------------------------------------------------------------- @@ -71,7 +70,7 @@ fapi::ReturnCode mss_eff_config_shmoo(const fapi::Target & i_target_mba) {     const char * const PROCEDURE_NAME = "mss_eff_config_shmoo";     FAPI_INF("*** Running %s on %s ... ***", PROCEDURE_NAME, i_target_mba.toEcmdString()); -   uint32_t datapattern=8; +   uint32_t datapattern=0; // mdb - type 8 is not valid per Saravanan's Sametime     uint32_t testtype=1;     uint8_t addr_modes=1;     uint8_t  rank=0; | 

