From 1236933802363af6f4a06436b2e71f7517094903 Mon Sep 17 00:00:00 2001
From: Thi Tran <thi@us.ibm.com>
Date: Wed, 2 Sep 2015 10:57:41 -0500
Subject: [PATCH] SW309472: INITPROC: HWP: DDR4 updates and #DS updates for
 DRAM initialization

CQ:SW309472
Change-Id: Ifddb0ede213eec6583e10a129ed287a543456605
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/19164
Reviewed-by: Thi N. Tran <thi@us.ibm.com>
Tested-by: Thi N. Tran <thi@us.ibm.com>
---
 src/usr/hwpf/hwp/dram_training/makefile            |    2 +
 .../dram_training/mss_draminit/mss_ddr4_funcs.H    |   47 +-
 .../hwp/dram_training/mss_draminit/mss_draminit.C  | 1807 +++++++++------
 .../mss_draminit_trainadv/mss_ddr4_funcs.C         | 2447 ++++++++++++++++++++
 .../mss_draminit_trainadv/mss_mrs6_DDR4.C          |  216 +-
 .../mss_draminit_training/mss_draminit_training.C  |  114 +-
 src/usr/hwpf/hwp/dram_training/mss_funcs.C         |  369 +--
 .../mss_eff_config/memory_mss_eff_config.xml       |  544 +++--
 .../mss_eff_config/memory_mss_eff_grouping.xml     |   18 +-
 .../hwp/mc_config/mss_eff_config/mss_eff_config.C  |  788 ++++++-
 .../mss_eff_config/mss_eff_config_termination.C    |  497 ++--
 src/usr/hwpf/hwp/memory_attributes.xml             |  406 +++-
 .../targeting/common/xmltohb/attribute_types.xml   |  733 +++++-
 src/usr/targeting/common/xmltohb/target_types.xml  |   37 +-
 14 files changed, 6407 insertions(+), 1618 deletions(-)
 create mode 100644 src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_ddr4_funcs.C

diff --git a/src/usr/hwpf/hwp/dram_training/makefile b/src/usr/hwpf/hwp/dram_training/makefile
index 30863cd..fea2d01 100644
--- a/src/usr/hwpf/hwp/dram_training/makefile
+++ b/src/usr/hwpf/hwp/dram_training/makefile
@@ -28,6 +28,7 @@ ROOTPATH = ../../../../..
 MODULE = dram_training
 
 CFLAGS += $(if $(CONFIG_VPD_GETMACRO_USE_EFF_ATTR), -D FAPI_MSSLABONLY -D FAPI_LRDIMM)
+CFLAGS += -DFAPI_DDR4
 
 ##      support for Targeting and fapi
 EXTRAINCDIR += ${ROOTPATH}/src/include/usr/ecmddatabuffer
@@ -79,6 +80,7 @@ OBJS += mss_mcbist_address.o
 OBJS += mss_lrdimm_funcs.o
 OBJS += cen_stopclocks.o
 OBJS += mss_ddr4_pda.o
+OBJS += mss_ddr4_funcs.o
 OBJS += mss_mrs6_DDR4.o
 
 #
diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit/mss_ddr4_funcs.H b/src/usr/hwpf/hwp/dram_training/mss_draminit/mss_ddr4_funcs.H
index 5c71873..327b894 100644
--- a/src/usr/hwpf/hwp/dram_training/mss_draminit/mss_ddr4_funcs.H
+++ b/src/usr/hwpf/hwp/dram_training/mss_draminit/mss_ddr4_funcs.H
@@ -5,7 +5,7 @@
 /*                                                                        */
 /* OpenPOWER HostBoot Project                                             */
 /*                                                                        */
-/* Contributors Listed Below - COPYRIGHT 2013,2014                        */
+/* Contributors Listed Below - COPYRIGHT 2013,2015                        */
 /* [+] International Business Machines Corp.                              */
 /*                                                                        */
 /*                                                                        */
@@ -22,7 +22,7 @@
 /* permissions and limitations under the License.                         */
 /*                                                                        */
 /* IBM_PROLOG_END_TAG                                                     */
-// $Id: mss_ddr4_funcs.H,v 1.3 2013/10/10 20:28:25 bellows Exp $
+// $Id: mss_ddr4_funcs.H,v 1.5 2015/09/04 18:14:20 thi Exp $
 
 //------------------------------------------------------------------------------
 // *! (C) Copyright International Business Machines Corp. 2013
@@ -44,6 +44,8 @@
 // Version:|  Author: |  Date:  | Comment:
 //---------|----------|---------|-----------------------------------------------
 //         |          |         |
+//  1.5    | 09/04/15 | thi     | Fix Doxygen
+//  1.4    | 03/14/14 | kcook   | Added DDR4 Register function support.
 //  1.3    | 10/10/13 | bellows | Added required CVS Id comment
 //  1.2    | 10/09/13 | jdsloat | Fixed argument list in function call
 //  1.1    | 10/04/13 | jdsloat | First revision
@@ -58,15 +60,50 @@
 
 
 //--------------------------------------------------------------
-// mss_mrs_load_ddr4
-// Set MRS1 settings for Rank 0 and Rank 1
-// Target = centaur.mba
+// @brief Set MRS1 settings for Rank 0 and Rank 1
+//
+// @param[in] i_target             Reference to MBA Target.
+// @param[in] i_port_number        MBA port number
+// @param[in/out] io_ccs_inst_cnt  CCS instruction count
+//
+// @return ReturnCode
 //--------------------------------------------------------------
 fapi::ReturnCode mss_mrs_load_ddr4( fapi::Target& i_target,
                                       uint32_t i_port_number,
                                       uint32_t& io_ccs_inst_cnt);
 
+//--------------------------------------------------------------
+// @brief Writes MPR pattern for inverted address location for
+//        training with DDR4 RDIMMs.
+//
+// @param[in] i_target_mba          Reference to MBA Target.
+//
+// @return ReturnCode
+//--------------------------------------------------------------
+fapi::ReturnCode mss_ddr4_invert_mpr_write( fapi::Target& i_target_mba);
 
+//--------------------------------------------------------------
+// @brief Writes RCD control words for DDR4 register.
+//
+// @param[in] i_target             Reference to MBA Target.
+// @param[in] i_port_number        MBA port number
+// @param[in/out] io_ccs_inst_cnt  CCS instruction count
+//
+// @return ReturnCode
+//--------------------------------------------------------------
+fapi::ReturnCode mss_rcd_load_ddr4(
+            fapi::Target& i_target,
+            uint32_t i_port_number,
+            uint32_t& io_ccs_inst_cnt);
+
+//--------------------------------------------------------------
+// @brief Creates RCD_CNTRL_WORD attribute for DDR4 register
+//
+// @param[in] i_target_mba          Reference to MBA Target.
+//
+// @return ReturnCode
+//--------------------------------------------------------------
+fapi::ReturnCode mss_create_rcd_ddr4( const fapi::Target& i_target_mba);
 
 #endif /* _MSS_DDR4_FUNCS_H */
 
diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit/mss_draminit.C b/src/usr/hwpf/hwp/dram_training/mss_draminit/mss_draminit.C
index 26cc023..e95011a 100755
--- a/src/usr/hwpf/hwp/dram_training/mss_draminit/mss_draminit.C
+++ b/src/usr/hwpf/hwp/dram_training/mss_draminit/mss_draminit.C
@@ -5,7 +5,9 @@
 /*                                                                        */
 /* OpenPOWER HostBoot Project                                             */
 /*                                                                        */
-/* COPYRIGHT International Business Machines Corp. 2012,2014              */
+/* Contributors Listed Below - COPYRIGHT 2012,2015                        */
+/* [+] International Business Machines Corp.                              */
+/*                                                                        */
 /*                                                                        */
 /* Licensed under the Apache License, Version 2.0 (the "License");        */
 /* you may not use this file except in compliance with the License.       */
@@ -20,7 +22,7 @@
 /* permissions and limitations under the License.                         */
 /*                                                                        */
 /* IBM_PROLOG_END_TAG                                                     */
-// $Id: mss_draminit.C,v 1.66 2014/05/09 16:40:04 jdsloat Exp $
+// $Id: mss_draminit.C,v 1.70 2015/09/04 01:10:11 kmack Exp $
 //------------------------------------------------------------------------------
 // Don't forget to create CVS comments when you check in your changes!
 //------------------------------------------------------------------------------
@@ -28,6 +30,10 @@
 //------------------------------------------------------------------------------
 // Version:|  Author: |  Date:  | Comment:
 //---------|----------|---------|-----------------------------------------------
+//  1.70   | kmack    |01-Sep-15| Fixed more RCs and removed extraneous comments
+//  1.69   | kmack    |28-Aug-15| Fixed an RC
+//  1.68   | kmack    |10-Aug-15| Moved the mss_lrdimm_ddr4_db_load call to the be included or not included based on def FAPI_LRDIMM
+//  1.67   | kmack    |05-Aug-15| Commented out FAPI_DDR4 code
 //  1.66   | jdsloat  |09-MAY-14| Added an explicit 500us delay before execution of MRS cmds.
 //  1.65   | jdsloat  |09-APL-14| Fixed ifdef around #include mss_lrdimm_ddr4_funcs.H
 //  1.64   | jdsloat  |01-APL-14| RAS review edits/changes
@@ -40,7 +46,7 @@
 //  1.57   | jdsloat  | 10/09/13| Added mrs_load_ddr4 with defines for ddr4 usage, added shadow regs, removed complicated flow
 //  1.56   | bellows  | 09/16/13| Hostboot compile fix
 //  1.55   | kcook    | 09/13/13| Updated define FAPI_LRDIMM token.
-//  1.54   | kcook    | 08/27/13| Removed LRDIMM support to mss_lrdimm_funcs.C. 
+//  1.54   | kcook    | 08/27/13| Removed LRDIMM support to mss_lrdimm_funcs.C.
 //         |          |         | Added check for valid rank when flagging address mirroring.
 //  1.53   | kcook    | 08/16/13| Added LRDIMM support. Use with mss_funcs.C v1.32.
 //  1.52   | jdsloat  | 08/07/13| Added a single rc_num check and edited a debug/error message to make firmware happy.
@@ -145,48 +151,57 @@ ReturnCode mss_lrdimm_mrs_load(Target& i_target, uint32_t i_port_number, uint32_
    return rc;
 
 }
-#endif
-
-#ifndef FAPI_DDR4
-using namespace fapi;
-fapi::ReturnCode mss_mrs_load_ddr4(Target& i_target, uint32_t port_number, uint32_t& ccs_inst_cnt)
+fapi::ReturnCode mss_lrdimm_ddr4_db_load(Target& i_target, uint32_t i_port_number, uint32_t& io_ccs_inst_cnt)
 {
    ReturnCode rc;
 
-   FAPI_ERR("Invalid exec of mrs_load_ddr4  %s!", i_target.toEcmdString());
+   FAPI_ERR("Invalid exec of lrdimm_ddr4_db_load  %s!", i_target.toEcmdString());
    FAPI_SET_HWP_ERROR(rc, RC_MSS_PLACE_HOLDER_ERROR);
    return rc;
 
 }
-fapi::ReturnCode mss_rcd_load_ddr4(Target& i_target, uint32_t i_port_number, uint32_t& io_ccs_inst_cnt)
-{
-   ReturnCode rc;
+#endif
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 
-   FAPI_ERR("Invalid exec of rcd_load_ddr4  %s!", i_target.toEcmdString());
-   FAPI_SET_HWP_ERROR(rc, RC_MSS_PLACE_HOLDER_ERROR);
-   return rc;
 
-}
-fapi::ReturnCode mss_lrdimm_ddr4_db_load(Target& i_target, uint32_t i_port_number, uint32_t& io_ccs_inst_cnt)
-{
-   ReturnCode rc;
 
-   FAPI_ERR("Invalid exec of lrdimm_ddr4_db_load  %s!", i_target.toEcmdString());
-   FAPI_SET_HWP_ERROR(rc, RC_MSS_PLACE_HOLDER_ERROR);
-   return rc;
 
-}
-fapi::ReturnCode mss_ddr4_invert_mpr_write(Target& i_target)
-{
-   ReturnCode rc;
 
-   FAPI_ERR("Invalid exec of ddr4_invert_mpr_write  %s!", i_target.toEcmdString());
-   FAPI_SET_HWP_ERROR(rc, RC_MSS_PLACE_HOLDER_ERROR);
-   return rc;
 
-}
 
-#endif
 
 //----------------------------------------------------------------------
 //  Constants
@@ -197,7 +212,7 @@ const uint8_t MAX_NUM_RANK_PAIR = 4;
 const uint8_t MAX_NUM_LR_RANKS = 8;
 const uint8_t MRS0_BA = 0;
 const uint8_t MRS1_BA = 1;
-const uint8_t MRS2_BA = 2;  
+const uint8_t MRS2_BA = 2;
 const uint8_t MRS3_BA = 3;
 const uint8_t MRS4_BA = 4;
 const uint8_t MRS5_BA = 5;
@@ -233,13 +248,13 @@ ReturnCode mss_draminit(Target& i_target)
 
     rc = mss_draminit_cloned(i_target);
 
-	// If mss_unmask_draminit_errors gets it's own bad rc,
-	// it will commit the passed in rc (if non-zero), and return it's own bad rc.
-	// Else if mss_unmask_draminit_errors runs clean,
-	// it will just return the passed in rc.
-	rc = mss_unmask_draminit_errors(i_target, rc);
+        // If mss_unmask_draminit_errors gets it's own bad rc,
+        // it will commit the passed in rc (if non-zero), and return it's own bad rc.
+        // Else if mss_unmask_draminit_errors runs clean,
+        // it will just return the passed in rc.
+        rc = mss_unmask_draminit_errors(i_target, rc);
 
-	return rc;
+        return rc;
 }
 
 ReturnCode mss_draminit_cloned(Target& i_target)
@@ -257,7 +272,7 @@ ReturnCode mss_draminit_cloned(Target& i_target)
     uint8_t rank_pair_group = 0;
     uint8_t bit_position = 0;
     ecmdDataBufferBase data_buffer_64(64);
-    ecmdDataBufferBase mrs0(16); 
+    ecmdDataBufferBase mrs0(16);
     ecmdDataBufferBase mrs1(16);
     ecmdDataBufferBase mrs2(16);
     ecmdDataBufferBase mrs3(16);
@@ -338,172 +353,244 @@ ReturnCode mss_draminit_cloned(Target& i_target)
 
     // Check to see if any dimm needs address mirror mode.  Set the approriate flag.
     if ( ( address_mirror_map[0][0] ||
-	  address_mirror_map[0][1] ||
-	  address_mirror_map[1][0] ||
-	  address_mirror_map[1][1] )
-	&& (is_sim == 0)   )
+          address_mirror_map[0][1] ||
+          address_mirror_map[1][0] ||
+          address_mirror_map[1][1] )
+        && (is_sim == 0)   )
     {
 
-	FAPI_INF( "Setting Address Mirroring in the PHY on %s ", i_target.toEcmdString());
-
-	//Set the Address and BA bits affected by mirroring
-	if (dram_gen == ENUM_ATTR_EFF_DRAM_GEN_DDR3)
-	{
-		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_P0_0x8000C0110301143F, data_buffer_64);
-		if(rc) return rc;
-		rc_num = rc_num | data_buffer_64.setBit(58);
-		rc_num = rc_num | data_buffer_64.setBit(59);
-		rc_num = rc_num | data_buffer_64.setBit(60);
-		rc_num = rc_num | data_buffer_64.setBit(62);
-		rc = fapiPutScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_P0_0x8000C0110301143F, data_buffer_64);
-		if(rc) return rc;
-
-		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_P1_0x8001C0110301143F, data_buffer_64);
-		if(rc) return rc;
-		rc_num = rc_num | data_buffer_64.setBit(58);
-		rc_num = rc_num | data_buffer_64.setBit(59);
-		rc_num = rc_num | data_buffer_64.setBit(60);
-		rc_num = rc_num | data_buffer_64.setBit(62);
-		rc = fapiPutScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_P1_0x8001C0110301143F, data_buffer_64);
-		if(rc) return rc;
-	}
-	if (dram_gen == ENUM_ATTR_EFF_DRAM_GEN_DDR4)
-	{
-		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_P0_0x8000C0110301143F, data_buffer_64);
-		if(rc) return rc;
-		rc_num = rc_num | data_buffer_64.setBit(58);
-		rc_num = rc_num | data_buffer_64.setBit(59);
-		rc_num = rc_num | data_buffer_64.setBit(60);
-		rc_num = rc_num | data_buffer_64.setBit(61);
-		rc_num = rc_num | data_buffer_64.setBit(62);
-		rc_num = rc_num | data_buffer_64.setBit(63);
+        FAPI_INF( "Setting Address Mirroring in the PHY on %s ", i_target.toEcmdString());
+
+        //Set the Address and BA bits affected by mirroring
+        if (dram_gen == ENUM_ATTR_EFF_DRAM_GEN_DDR3)
+        {
+                rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_P0_0x8000C0110301143F, data_buffer_64);
+                if(rc) return rc;
+                rc_num = rc_num | data_buffer_64.setBit(58);
+                rc_num = rc_num | data_buffer_64.setBit(59);
+                rc_num = rc_num | data_buffer_64.setBit(60);
+                rc_num = rc_num | data_buffer_64.setBit(62);
+                if (rc_num)
+                {
+                    FAPI_ERR( "mss_draminit_cloned: Error setting up buffers for DPHY01_DDRPHY_PC_RANK_GROUP_P0");
+                    rc_buff.setEcmdError(rc_num);
+                    return rc_buff;
+                }
                 rc = fapiPutScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_P0_0x8000C0110301143F, data_buffer_64);
-		if(rc) return rc;
-
-		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_P1_0x8001C0110301143F, data_buffer_64);
-		if(rc) return rc;
-		rc_num = rc_num | data_buffer_64.setBit(58);
-		rc_num = rc_num | data_buffer_64.setBit(59);
-		rc_num = rc_num | data_buffer_64.setBit(60);
-		rc_num = rc_num | data_buffer_64.setBit(61);
-		rc_num = rc_num | data_buffer_64.setBit(62);
-		rc_num = rc_num | data_buffer_64.setBit(63);
-		rc = fapiPutScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_P1_0x8001C0110301143F, data_buffer_64);
-		if(rc) return rc;
-	}
-
-	for ( port_number = 0; port_number < MAX_NUM_PORTS; port_number++)
-	{
-	    for ( rank_pair_group = 0; rank_pair_group < MAX_NUM_RANK_PAIR; rank_pair_group++)
-	    {
-
-	        // dimm 0, dimm_rank 0-3 = ranks 0-3; dimm 1, dimm_rank 0-3 = ranks 4-7
-	        pri_dimm = (primary_ranks_array[rank_pair_group][port_number]) / 4;
-	        pri_dimm_rank = primary_ranks_array[rank_pair_group][port_number] - 4*pri_dimm;
-	        sec_dimm = (secondary_ranks_array[rank_pair_group][port_number]) / 4;
-	        sec_dimm_rank = secondary_ranks_array[rank_pair_group][port_number] - 4*sec_dimm;
-	        ter_dimm = (tertiary_ranks_array[rank_pair_group][port_number]) / 4;
-	        ter_dimm_rank = tertiary_ranks_array[rank_pair_group][port_number] - 4*ter_dimm;
-	        qua_dimm = (quaternary_ranks_array[rank_pair_group][port_number]) / 4;
-	        qua_dimm_rank = quaternary_ranks_array[rank_pair_group][port_number] - 4*qua_dimm;
-		// Set the rank pairs that will be affected.
-		if ( port_number == 0 )
-		{
+                if(rc) return rc;
+
+                rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_P1_0x8001C0110301143F, data_buffer_64);
+                if(rc) return rc;
+                rc_num = rc_num | data_buffer_64.setBit(58);
+                rc_num = rc_num | data_buffer_64.setBit(59);
+                rc_num = rc_num | data_buffer_64.setBit(60);
+                rc_num = rc_num | data_buffer_64.setBit(62);
+                if (rc_num)
+                {
+                    FAPI_ERR( "mss_draminit_cloned: Error setting up buffers for DPHY01_DDRPHY_PC_RANK_GROUP_P1");
+                    rc_buff.setEcmdError(rc_num);
+                    return rc_buff;
+                }
+                rc = fapiPutScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_P1_0x8001C0110301143F, data_buffer_64);
+                if(rc) return rc;
+        }
+        if (dram_gen == ENUM_ATTR_EFF_DRAM_GEN_DDR4)
+        {
+                rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_P0_0x8000C0110301143F, data_buffer_64);
+                if(rc) return rc;
+                rc_num = rc_num | data_buffer_64.setBit(58);
+                rc_num = rc_num | data_buffer_64.setBit(59);
+                rc_num = rc_num | data_buffer_64.setBit(60);
+                rc_num = rc_num | data_buffer_64.setBit(61);
+                rc_num = rc_num | data_buffer_64.setBit(62);
+                rc_num = rc_num | data_buffer_64.setBit(63);
+                if (rc_num)
+                {
+                    FAPI_ERR( "mss_draminit_cloned: Error setting up buffers for DPHY01_DDRPHY_PC_RANK_GROUP_P0");
+                    rc_buff.setEcmdError(rc_num);
+                    return rc_buff;
+                }
+                rc = fapiPutScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_P0_0x8000C0110301143F, data_buffer_64);
+                if(rc) return rc;
+
+                rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_P1_0x8001C0110301143F, data_buffer_64);
+                if(rc) return rc;
+                rc_num = rc_num | data_buffer_64.setBit(58);
+                rc_num = rc_num | data_buffer_64.setBit(59);
+                rc_num = rc_num | data_buffer_64.setBit(60);
+                rc_num = rc_num | data_buffer_64.setBit(61);
+                rc_num = rc_num | data_buffer_64.setBit(62);
+                rc_num = rc_num | data_buffer_64.setBit(63);
+                if (rc_num)
+                {
+                    FAPI_ERR( "mss_draminit_cloned: Error setting up buffers for DPHY01_DDRPHY_PC_RANK_GROUP_P1");
+                    rc_buff.setEcmdError(rc_num);
+                    return rc_buff;
+                }
+                rc = fapiPutScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_P1_0x8001C0110301143F, data_buffer_64);
+                if(rc) return rc;
+        }
+
+        for ( port_number = 0; port_number < MAX_NUM_PORTS; port_number++)
+        {
+            for ( rank_pair_group = 0; rank_pair_group < MAX_NUM_RANK_PAIR; rank_pair_group++)
+            {
+
+                // dimm 0, dimm_rank 0-3 = ranks 0-3; dimm 1, dimm_rank 0-3 = ranks 4-7
+                pri_dimm = (primary_ranks_array[rank_pair_group][port_number]) / 4;
+                pri_dimm_rank = primary_ranks_array[rank_pair_group][port_number] - 4*pri_dimm;
+                sec_dimm = (secondary_ranks_array[rank_pair_group][port_number]) / 4;
+                sec_dimm_rank = secondary_ranks_array[rank_pair_group][port_number] - 4*sec_dimm;
+                ter_dimm = (tertiary_ranks_array[rank_pair_group][port_number]) / 4;
+                ter_dimm_rank = tertiary_ranks_array[rank_pair_group][port_number] - 4*ter_dimm;
+                qua_dimm = (quaternary_ranks_array[rank_pair_group][port_number]) / 4;
+                qua_dimm_rank = quaternary_ranks_array[rank_pair_group][port_number] - 4*qua_dimm;
+                // Set the rank pairs that will be affected.
+                if ( port_number == 0 )
+                {
                     if ( ( ( address_mirror_map[port_number][pri_dimm] & (0x08 >> pri_dimm_rank) ) ) && (primary_ranks_array[rank_pair_group][port_number] != 0xff ) )
-		    {
-			FAPI_INF( "Address Mirroring on %s PORT%d RANKPAIR%d RANK%d", i_target.toEcmdString(), port_number, rank_pair_group, primary_ranks_array[rank_pair_group][port_number]);
-			bit_position = 2 * rank_pair_group + 48;
-			FAPI_INF( "Setting bit %d", bit_position);
-			rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_P0_0x8000C0110301143F, data_buffer_64);
-			if(rc) return rc;
-			rc_num = rc_num | data_buffer_64.setBit(bit_position);
-			rc = fapiPutScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_P0_0x8000C0110301143F, data_buffer_64);
-			if(rc) return rc;
-		    }
-		    if ( ( ( address_mirror_map[port_number][sec_dimm] & (0x08 >> sec_dimm_rank) ) ) && (secondary_ranks_array[rank_pair_group][port_number] != 0xff ) )
                     {
-			FAPI_INF( "Address Mirroring on %s PORT%d RANKPAIR%d RANK%d", i_target.toEcmdString(), port_number, rank_pair_group, primary_ranks_array[rank_pair_group][port_number]);
-			bit_position = 2 * rank_pair_group + 49;
-			FAPI_INF( "Setting bit %d", bit_position);
-			rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_P0_0x8000C0110301143F, data_buffer_64);
-			if(rc) return rc;
-			rc_num = rc_num | data_buffer_64.setBit(bit_position);
-			rc = fapiPutScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_P0_0x8000C0110301143F, data_buffer_64);
-			if(rc) return rc;
-		    }
-		    if ( ( ( address_mirror_map[port_number][ter_dimm] & (0x08 >> ter_dimm_rank) ) ) && (tertiary_ranks_array[rank_pair_group][port_number] != 0xff ) )
-		    {
-			FAPI_INF( "Address Mirroring on %s PORT%d RANKPAIR%d RANK%d", i_target.toEcmdString(), port_number, rank_pair_group, primary_ranks_array[rank_pair_group][port_number]);
-			bit_position = 2 * rank_pair_group + 48;
-			FAPI_INF( "Setting bit %d", bit_position);
-			rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_EXT_P0_0x8000C0350301143F, data_buffer_64);
-			if(rc) return rc;
-			rc_num = rc_num | data_buffer_64.setBit(bit_position);
-			rc = fapiPutScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_EXT_P0_0x8000C0350301143F, data_buffer_64);
-			if(rc) return rc;
-		    }
-		    if ( ( ( address_mirror_map[port_number][qua_dimm] & (0x08 >> qua_dimm_rank) ) ) && (quaternary_ranks_array[rank_pair_group][port_number] != 0xff ) )
+                        FAPI_INF( "Address Mirroring on %s PORT%d RANKPAIR%d RANK%d", i_target.toEcmdString(), port_number, rank_pair_group, primary_ranks_array[rank_pair_group][port_number]);
+                        bit_position = 2 * rank_pair_group + 48;
+                        FAPI_INF( "Setting bit %d", bit_position);
+                        rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_P0_0x8000C0110301143F, data_buffer_64);
+                        if(rc) return rc;
+                        rc_num = rc_num | data_buffer_64.setBit(bit_position);
+                        if (rc_num)
+                        {
+                            FAPI_ERR( "mss_draminit_cloned: Error setting up buffers for DPHY01_DDRPHY_PC_RANK_GROUP_P0");
+                            rc_buff.setEcmdError(rc_num);
+                            return rc_buff;
+                        }
+                        rc = fapiPutScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_P0_0x8000C0110301143F, data_buffer_64);
+                        if(rc) return rc;
+                    }
+                    if ( ( ( address_mirror_map[port_number][sec_dimm] & (0x08 >> sec_dimm_rank) ) ) && (secondary_ranks_array[rank_pair_group][port_number] != 0xff ) )
                     {
-			FAPI_INF( "Address Mirroring on %s PORT%d RANKPAIR%d RANK%d", i_target.toEcmdString(), port_number, rank_pair_group, primary_ranks_array[rank_pair_group][port_number]);
-			bit_position = 2 * rank_pair_group + 49;
-			FAPI_INF( "Setting bit %d", bit_position);
-			rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_EXT_P0_0x8000C0350301143F, data_buffer_64);
-			if(rc) return rc;
-			rc_num = rc_num | data_buffer_64.setBit(bit_position);
-			rc = fapiPutScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_EXT_P0_0x8000C0350301143F, data_buffer_64);
-			if(rc) return rc;
-		    }
-		}
-		if ( port_number == 1 )
-		{
-		    if ( ( ( address_mirror_map[port_number][pri_dimm] & (0x08 >> pri_dimm_rank) ) ) && (primary_ranks_array[rank_pair_group][port_number] != 0xff ) )
-		    {
-			FAPI_INF( "Address Mirroring on %s PORT%d RANKPAIR%d RANK%d", i_target.toEcmdString(), port_number, rank_pair_group, primary_ranks_array[rank_pair_group][port_number]);
-			bit_position = 2 * rank_pair_group + 48;
-			FAPI_INF( "Setting bit %d", bit_position);
-			rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_P1_0x8001C0110301143F, data_buffer_64);
-			if(rc) return rc;
-			rc_num = rc_num | data_buffer_64.setBit(bit_position);
-			rc = fapiPutScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_P1_0x8001C0110301143F, data_buffer_64);
-			if(rc) return rc;
-		    }
-		    if ( ( ( address_mirror_map[port_number][sec_dimm] & (0x08 >> sec_dimm_rank) ) ) && (secondary_ranks_array[rank_pair_group][port_number] != 0xff ) )
+                        FAPI_INF( "Address Mirroring on %s PORT%d RANKPAIR%d RANK%d", i_target.toEcmdString(), port_number, rank_pair_group, primary_ranks_array[rank_pair_group][port_number]);
+                        bit_position = 2 * rank_pair_group + 49;
+                        FAPI_INF( "Setting bit %d", bit_position);
+                        rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_P0_0x8000C0110301143F, data_buffer_64);
+                        if(rc) return rc;
+                        rc_num = rc_num | data_buffer_64.setBit(bit_position);
+                        if (rc_num)
+                        {
+                            FAPI_ERR( "mss_draminit_cloned: Error setting up buffers for DPHY01_DDRPHY_PC_RANK_GROUP_P0");
+                            rc_buff.setEcmdError(rc_num);
+                            return rc_buff;
+                        }
+                        rc = fapiPutScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_P0_0x8000C0110301143F, data_buffer_64);
+                        if(rc) return rc;
+                    }
+                    if ( ( ( address_mirror_map[port_number][ter_dimm] & (0x08 >> ter_dimm_rank) ) ) && (tertiary_ranks_array[rank_pair_group][port_number] != 0xff ) )
                     {
-			FAPI_INF( "Address Mirroring on %s PORT%d RANKPAIR%d RANK%d", i_target.toEcmdString(), port_number, rank_pair_group, primary_ranks_array[rank_pair_group][port_number]);
-			bit_position = 2 * rank_pair_group + 49;
-			FAPI_INF( "Setting bit %d", bit_position);
-			rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_P1_0x8001C0110301143F, data_buffer_64);
-			if(rc) return rc;
-			rc_num = rc_num | data_buffer_64.setBit(bit_position);
-			rc = fapiPutScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_P1_0x8001C0110301143F, data_buffer_64);
-			if(rc) return rc;
-		    }
-		    if ( ( ( address_mirror_map[port_number][ter_dimm] & (0x08 >> ter_dimm_rank) ) ) && (tertiary_ranks_array[rank_pair_group][port_number] != 0xff ) )
-		    {
-			FAPI_INF( "Address Mirroring on %s PORT%d RANKPAIR%d RANK%d", i_target.toEcmdString(), port_number, rank_pair_group, primary_ranks_array[rank_pair_group][port_number]);
-			bit_position = 2 * rank_pair_group + 48;
-			FAPI_INF( "Setting bit %d", bit_position);
-			rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_EXT_P1_0x8001C0350301143F, data_buffer_64);
-			if(rc) return rc;
-			rc_num = rc_num | data_buffer_64.setBit(bit_position);
-			rc = fapiPutScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_EXT_P1_0x8001C0350301143F, data_buffer_64);
-			if(rc) return rc;
-		    }
-		    if ( ( ( address_mirror_map[port_number][qua_dimm] & (0x08 >> qua_dimm_rank) ) ) && (quaternary_ranks_array[rank_pair_group][port_number] != 0xff ) )
+                        FAPI_INF( "Address Mirroring on %s PORT%d RANKPAIR%d RANK%d", i_target.toEcmdString(), port_number, rank_pair_group, primary_ranks_array[rank_pair_group][port_number]);
+                        bit_position = 2 * rank_pair_group + 48;
+                        FAPI_INF( "Setting bit %d", bit_position);
+                        rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_EXT_P0_0x8000C0350301143F, data_buffer_64);
+                        if(rc) return rc;
+                        rc_num = rc_num | data_buffer_64.setBit(bit_position);
+                        if (rc_num)
+                        {
+                            FAPI_ERR( "mss_draminit_cloned: Error setting up buffers for DPHY01_DDRPHY_PC_RANK_GROUP_EXT_P0");
+                            rc_buff.setEcmdError(rc_num);
+                            return rc_buff;
+                        }
+                        rc = fapiPutScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_EXT_P0_0x8000C0350301143F, data_buffer_64);
+                        if(rc) return rc;
+                    }
+                    if ( ( ( address_mirror_map[port_number][qua_dimm] & (0x08 >> qua_dimm_rank) ) ) && (quaternary_ranks_array[rank_pair_group][port_number] != 0xff ) )
                     {
-			FAPI_INF( "Address Mirroring on PORT%d RANKPAIR%d RANK%d", port_number, rank_pair_group, primary_ranks_array[rank_pair_group][port_number]);
-			bit_position = 2 * rank_pair_group + 49;
-			FAPI_INF( "Setting bit %d", bit_position);
-			rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_EXT_P1_0x8001C0350301143F, data_buffer_64);
-			if(rc) return rc;
-			rc_num = rc_num | data_buffer_64.setBit(bit_position);
-			rc = fapiPutScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_EXT_P1_0x8001C0350301143F, data_buffer_64);
-			if(rc) return rc;
-		    }
-		}
-
-	    }
-	}
+                        FAPI_INF( "Address Mirroring on %s PORT%d RANKPAIR%d RANK%d", i_target.toEcmdString(), port_number, rank_pair_group, primary_ranks_array[rank_pair_group][port_number]);
+                        bit_position = 2 * rank_pair_group + 49;
+                        FAPI_INF( "Setting bit %d", bit_position);
+                        rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_EXT_P0_0x8000C0350301143F, data_buffer_64);
+                        if(rc) return rc;
+                        rc_num = rc_num | data_buffer_64.setBit(bit_position);
+                        if (rc_num)
+                        {
+                            FAPI_ERR( "mss_draminit_cloned: Error setting up buffers for DPHY01_DDRPHY_PC_RANK_GROUP_EXT_P0");
+                            rc_buff.setEcmdError(rc_num);
+                            return rc_buff;
+                        }
+                        rc = fapiPutScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_EXT_P0_0x8000C0350301143F, data_buffer_64);
+                        if(rc) return rc;
+                    }
+                }
+                if ( port_number == 1 )
+                {
+                    if ( ( ( address_mirror_map[port_number][pri_dimm] & (0x08 >> pri_dimm_rank) ) ) && (primary_ranks_array[rank_pair_group][port_number] != 0xff ) )
+                    {
+                        FAPI_INF( "Address Mirroring on %s PORT%d RANKPAIR%d RANK%d", i_target.toEcmdString(), port_number, rank_pair_group, primary_ranks_array[rank_pair_group][port_number]);
+                        bit_position = 2 * rank_pair_group + 48;
+                        FAPI_INF( "Setting bit %d", bit_position);
+                        rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_P1_0x8001C0110301143F, data_buffer_64);
+                        if(rc) return rc;
+                        rc_num = rc_num | data_buffer_64.setBit(bit_position);
+                        if (rc_num)
+                        {
+                            FAPI_ERR( "mss_draminit_cloned: Error setting up buffers for DPHY01_DDRPHY_PC_RANK_GROUP_P1");
+                            rc_buff.setEcmdError(rc_num);
+                            return rc_buff;
+                        }
+                        rc = fapiPutScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_P1_0x8001C0110301143F, data_buffer_64);
+                        if(rc) return rc;
+                    }
+                    if ( ( ( address_mirror_map[port_number][sec_dimm] & (0x08 >> sec_dimm_rank) ) ) && (secondary_ranks_array[rank_pair_group][port_number] != 0xff ) )
+                    {
+                        FAPI_INF( "Address Mirroring on %s PORT%d RANKPAIR%d RANK%d", i_target.toEcmdString(), port_number, rank_pair_group, primary_ranks_array[rank_pair_group][port_number]);
+                        bit_position = 2 * rank_pair_group + 49;
+                        FAPI_INF( "Setting bit %d", bit_position);
+                        rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_P1_0x8001C0110301143F, data_buffer_64);
+                        if(rc) return rc;
+                        rc_num = rc_num | data_buffer_64.setBit(bit_position);
+                        if (rc_num)
+                        {
+                            FAPI_ERR( "mss_draminit_cloned: Error setting up buffers for DPHY01_DDRPHY_PC_RANK_GROUP_P1");
+                            rc_buff.setEcmdError(rc_num);
+                            return rc_buff;
+                        }
+                        rc = fapiPutScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_P1_0x8001C0110301143F, data_buffer_64);
+                        if(rc) return rc;
+                    }
+                    if ( ( ( address_mirror_map[port_number][ter_dimm] & (0x08 >> ter_dimm_rank) ) ) && (tertiary_ranks_array[rank_pair_group][port_number] != 0xff ) )
+                    {
+                        FAPI_INF( "Address Mirroring on %s PORT%d RANKPAIR%d RANK%d", i_target.toEcmdString(), port_number, rank_pair_group, primary_ranks_array[rank_pair_group][port_number]);
+                        bit_position = 2 * rank_pair_group + 48;
+                        FAPI_INF( "Setting bit %d", bit_position);
+                        rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_EXT_P1_0x8001C0350301143F, data_buffer_64);
+                        if(rc) return rc;
+                        rc_num = rc_num | data_buffer_64.setBit(bit_position);
+                        if (rc_num)
+                        {
+                            FAPI_ERR( "mss_draminit_cloned: Error setting up buffers for DPHY01_DDRPHY_PC_RANK_GROUP_EXT_P1");
+                            rc_buff.setEcmdError(rc_num);
+                            return rc_buff;
+                        }
+                        rc = fapiPutScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_EXT_P1_0x8001C0350301143F, data_buffer_64);
+                        if(rc) return rc;
+                    }
+                    if ( ( ( address_mirror_map[port_number][qua_dimm] & (0x08 >> qua_dimm_rank) ) ) && (quaternary_ranks_array[rank_pair_group][port_number] != 0xff ) )
+                    {
+                        FAPI_INF( "Address Mirroring on PORT%d RANKPAIR%d RANK%d", port_number, rank_pair_group, primary_ranks_array[rank_pair_group][port_number]);
+                        bit_position = 2 * rank_pair_group + 49;
+                        FAPI_INF( "Setting bit %d", bit_position);
+                        rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_EXT_P1_0x8001C0350301143F, data_buffer_64);
+                        if(rc) return rc;
+                        rc_num = rc_num | data_buffer_64.setBit(bit_position);
+                        if (rc_num)
+                        {
+                            FAPI_ERR( "mss_draminit_cloned: Error setting up buffers for DPHY01_DDRPHY_PC_RANK_GROUP_EXT_P1");
+                            rc_buff.setEcmdError(rc_num);
+                            return rc_buff;
+                        }
+                        rc = fapiPutScom(i_target, DPHY01_DDRPHY_PC_RANK_GROUP_EXT_P1_0x8001C0350301143F, data_buffer_64);
+                        if(rc) return rc;
+                    }
+                }
+
+            }
+        }
     }
 
         //Commented because Master Attention Reg Check not written yet.
@@ -529,7 +616,7 @@ ReturnCode mss_draminit_cloned(Target& i_target)
         }
 
         rc = fapiDelay(DELAY_100US, DELAY_2000SIMCYCLES); // wait 2000 simcycles (in sim mode) OR 100 uS (in hw mode)
-	if(rc) return rc;
+        if(rc) return rc;
 
         rc = mss_assert_resetn(i_target, 1 ); // de-assert a reset
         if(rc)
@@ -544,7 +631,7 @@ ReturnCode mss_draminit_cloned(Target& i_target)
             if (!((dimm_type == ENUM_ATTR_EFF_DIMM_TYPE_UDIMM)||(dimm_type == ENUM_ATTR_EFF_DIMM_TYPE_CDIMM)))
             {
                 // Step three: Load RCD Control Words
-                if (dram_gen == ENUM_ATTR_EFF_DRAM_GEN_DDR4) 
+                if (dram_gen == ENUM_ATTR_EFF_DRAM_GEN_DDR4)
                 {
                    rc = mss_rcd_load_ddr4(i_target, port_number, ccs_inst_cnt);
                    if(rc)
@@ -564,7 +651,7 @@ ReturnCode mss_draminit_cloned(Target& i_target)
                    }
 
                 }
-                else 
+                else
                 {
                    rc = mss_rcd_load(i_target, port_number, ccs_inst_cnt);
                    if(rc)
@@ -583,11 +670,21 @@ ReturnCode mss_draminit_cloned(Target& i_target)
                           return rc;
                       }
                    }
-                } 
+                }
             }
         }
 
-       	rc = fapiDelay(DELAY_500US, DELAY_10000000SIMCYCLES); // wait 10000 simcycles (in sim mode) OR 500 uS (in hw mode)
+        rc = fapiDelay(DELAY_500US, DELAY_10000000SIMCYCLES); // wait 10000 simcycles (in sim mode) OR 500 uS (in hw mode)
+
+        if(rc)
+        {
+            FAPI_ERR(" Delay Failed rc = 0x%08X (creator = %d)", uint32_t(rc), rc.getCreator());
+            return rc;
+        }
+
+
+
+
 
         // Cycle through Ports...
         // Ports 0-1
@@ -595,31 +692,31 @@ ReturnCode mss_draminit_cloned(Target& i_target)
         {
 
             // Step four: Load MRS Setting
-	    if (dram_gen == ENUM_ATTR_EFF_DRAM_GEN_DDR3)
-	    {
-		    rc = mss_mrs_load(i_target, port_number, ccs_inst_cnt);
-		    if(rc)
-		    {
-		        FAPI_ERR(" mrs_load Failed rc = 0x%08X (creator = %d)", uint32_t(rc), rc.getCreator());
-		        return rc;
-		    }
-	    }
-	    else
-	    {
-		    rc = mss_mrs_load_ddr4(i_target, port_number, ccs_inst_cnt);
-		    if(rc)
-		    {
-		        FAPI_ERR(" mrs_load_ddr4 Failed rc = 0x%08X (creator = %d)", uint32_t(rc), rc.getCreator());
-		        return rc;
-		    }
-	    }
+            if (dram_gen == ENUM_ATTR_EFF_DRAM_GEN_DDR3)
+            {
+                    rc = mss_mrs_load(i_target, port_number, ccs_inst_cnt);
+                    if(rc)
+                    {
+                        FAPI_ERR(" mrs_load Failed rc = 0x%08X (creator = %d)", uint32_t(rc), rc.getCreator());
+                        return rc;
+                    }
+            }
+            else
+            {
+                    rc = mss_mrs_load_ddr4(i_target, port_number, ccs_inst_cnt);
+                    if(rc)
+                    {
+                        FAPI_ERR(" mrs_load_ddr4 Failed rc = 0x%08X (creator = %d)", uint32_t(rc), rc.getCreator());
+                        return rc;
+                    }
+            }
 
         }
 
         // Execute the contents of CCS array
         if (ccs_inst_cnt  > 0)
         {
-	    // Set the End bit on the last CCS Instruction
+            // Set the End bit on the last CCS Instruction
             rc = mss_ccs_set_end_bit( i_target, ccs_inst_cnt-1);
             if(rc)
             {
@@ -646,466 +743,802 @@ ReturnCode mss_draminit_cloned(Target& i_target)
         for ( port_number = 0; port_number < MAX_NUM_PORTS; port_number++)
         {
 
-	for ( rank_pair_group = 0; rank_pair_group < MAX_NUM_RANK_PAIR; rank_pair_group++)
-	{
-	//Check if rank group exists
-	    if((primary_ranks_array[rank_pair_group][0] != INVALID) || (primary_ranks_array[rank_pair_group][1] != INVALID))
-	    {
-
-		if (port_number == 0)
-		{
-	    		// Get contents of MRS Shadow Regs and Print it to output
-			if (rank_pair_group == 0)
-			{
-		    		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR0_PRI_RP0_P0_0x8000C01C0301143F, data_buffer_64);
-                                if(rc) return rc;
-		    		rc_num = rc_num | data_buffer_64.reverse();
-		    		rc_num = rc_num | mrs0.insert(data_buffer_64, 0, 16);
-		    		rc_num = rc_num | mrs0.extractPreserve(&MRS0, 0, 16, 0);
-		    		FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 0 RP %d VALUE: 0x%04X", i_target.toEcmdString(), port_number, rank_pair_group, MRS0 );
+        for ( rank_pair_group = 0; rank_pair_group < MAX_NUM_RANK_PAIR; rank_pair_group++)
+        {
+        //Check if rank group exists
+            if((primary_ranks_array[rank_pair_group][0] != INVALID) || (primary_ranks_array[rank_pair_group][1] != INVALID))
+            {
 
-		    		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR1_PRI_RP0_P0_0x8000C01D0301143F, data_buffer_64);
+                if (port_number == 0)
+                {
+                        // Get contents of MRS Shadow Regs and Print it to output
+                        if (rank_pair_group == 0)
+                        {
+                                rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR0_PRI_RP0_P0_0x8000C01C0301143F, data_buffer_64);
                                 if(rc) return rc;
-		    		rc_num = rc_num | data_buffer_64.reverse();
-		    		rc_num = rc_num | mrs1.insert(data_buffer_64, 0, 16);
-		    		rc_num = rc_num | mrs1.extractPreserve(&MRS1, 0, 16, 0);
-		    		FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 1 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS1);
-
-		    		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR2_PRI_RP0_P0_0x8000C01E0301143F, data_buffer_64);
+                                rc_num = rc_num | data_buffer_64.reverse();
+                                rc_num = rc_num | mrs0.insert(data_buffer_64, 0, 16);
+                                rc_num = rc_num | mrs0.extractPreserve(&MRS0, 0, 16, 0);
+                                if (rc_num)
+                                {
+                                    FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                    rc_buff.setEcmdError(rc_num);
+                                    return rc_buff;
+                                }
+                                FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 0 RP %d VALUE: 0x%04X", i_target.toEcmdString(), port_number, rank_pair_group, MRS0 );
+
+                                rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR1_PRI_RP0_P0_0x8000C01D0301143F, data_buffer_64);
                                 if(rc) return rc;
-		    		rc_num = rc_num | data_buffer_64.reverse();
-		    		rc_num = rc_num | mrs2.insert(data_buffer_64, 0, 16);
-		    		rc_num = rc_num | mrs2.extractPreserve(&MRS2, 0, 16, 0);
-		    		FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 2 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS2);
-
-		    		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR3_PRI_RP0_P0_0x8000C01F0301143F, data_buffer_64);
+                                rc_num = rc_num | data_buffer_64.reverse();
+                                rc_num = rc_num | mrs1.insert(data_buffer_64, 0, 16);
+                                rc_num = rc_num | mrs1.extractPreserve(&MRS1, 0, 16, 0);
+                                if (rc_num)
+                                {
+                                    FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                    rc_buff.setEcmdError(rc_num);
+                                    return rc_buff;
+                                }
+                                FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 1 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS1);
+
+                                rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR2_PRI_RP0_P0_0x8000C01E0301143F, data_buffer_64);
                                 if(rc) return rc;
-		    		rc_num = rc_num | data_buffer_64.reverse();
-		    		rc_num = rc_num | mrs3.insert(data_buffer_64, 0, 16);
-		    		rc_num = rc_num | mrs3.extractPreserve(&MRS3, 0, 16, 0);
-		    		FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 3 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS3);
-
-				if (dram_gen == ENUM_ATTR_EFF_DRAM_GEN_DDR4)
-				{
-			    		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR0_SEC_RP0_P0_0x8000C0200301143F, data_buffer_64);
-                                	if(rc) return rc;
-			    		rc_num = rc_num | data_buffer_64.reverse();
-			    		rc_num = rc_num | mrs4.insert(data_buffer_64, 0, 16);
-			    		rc_num = rc_num | mrs4.extractPreserve(&MRS4, 0, 16, 0);
-			    		FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 4 RP %d VALUE: 0x%04X",  i_target.toEcmdString(),  port_number, rank_pair_group, MRS4);
-
-			    		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR1_SEC_RP0_P0_0x8000C0210301143F, data_buffer_64);
-                                	if(rc) return rc;
-			    		rc_num = rc_num | data_buffer_64.reverse();
-			    		rc_num = rc_num | mrs5.insert(data_buffer_64, 0, 16);
-			    		rc_num = rc_num | mrs5.extractPreserve(&MRS5, 0, 16, 0);
-			    		FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 5 RP %d VALUE: 0x%04X",  i_target.toEcmdString(),  port_number, rank_pair_group, MRS5);
-
-			    		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR2_SEC_RP0_P0_0x8000C0220301143F, data_buffer_64);
-                                	if(rc) return rc;
-			    		rc_num = rc_num | data_buffer_64.reverse();
-			    		rc_num = rc_num | mrs6.insert(data_buffer_64, 0, 16);
-			    		rc_num = rc_num | mrs6.extractPreserve(&MRS6, 0, 16, 0);
-			    		FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 6 RP %d VALUE: 0x%04X",  i_target.toEcmdString(),  port_number, rank_pair_group, MRS6);
-				}
-
-			}
-			else if (rank_pair_group == 1)
-			{
-		    		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR0_PRI_RP1_P0_0x8000C11C0301143F, data_buffer_64);
+                                rc_num = rc_num | data_buffer_64.reverse();
+                                rc_num = rc_num | mrs2.insert(data_buffer_64, 0, 16);
+                                rc_num = rc_num | mrs2.extractPreserve(&MRS2, 0, 16, 0);
+                                if (rc_num)
+                                {
+                                    FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                    rc_buff.setEcmdError(rc_num);
+                                    return rc_buff;
+                                }
+                                FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 2 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS2);
+
+                                rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR3_PRI_RP0_P0_0x8000C01F0301143F, data_buffer_64);
                                 if(rc) return rc;
-		    		rc_num = rc_num | data_buffer_64.reverse();
-		    		rc_num = rc_num | mrs0.insert(data_buffer_64, 0, 16);
-		    		rc_num = rc_num | mrs0.extractPreserve(&MRS0, 0, 16, 0);
-		    		FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 0 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS0);
+                                rc_num = rc_num | data_buffer_64.reverse();
+                                rc_num = rc_num | mrs3.insert(data_buffer_64, 0, 16);
+                                rc_num = rc_num | mrs3.extractPreserve(&MRS3, 0, 16, 0);
+                                if (rc_num)
+                                {
+                                    FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                    rc_buff.setEcmdError(rc_num);
+                                    return rc_buff;
+                                }
+                                FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 3 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS3);
+
+                                if (dram_gen == ENUM_ATTR_EFF_DRAM_GEN_DDR4)
+                                {
+                                        rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR0_SEC_RP0_P0_0x8000C0200301143F, data_buffer_64);
+                                        if(rc) return rc;
+                                        rc_num = rc_num | data_buffer_64.reverse();
+                                        rc_num = rc_num | mrs4.insert(data_buffer_64, 0, 16);
+                                        rc_num = rc_num | mrs4.extractPreserve(&MRS4, 0, 16, 0);
+                                        if (rc_num)
+                                        {
+                                            FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                            rc_buff.setEcmdError(rc_num);
+                                            return rc_buff;
+                                        }
+                                        FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 4 RP %d VALUE: 0x%04X",  i_target.toEcmdString(),  port_number, rank_pair_group, MRS4);
+
+                                        rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR1_SEC_RP0_P0_0x8000C0210301143F, data_buffer_64);
+                                        if(rc) return rc;
+                                        rc_num = rc_num | data_buffer_64.reverse();
+                                        rc_num = rc_num | mrs5.insert(data_buffer_64, 0, 16);
+                                        rc_num = rc_num | mrs5.extractPreserve(&MRS5, 0, 16, 0);
+                                        if (rc_num)
+                                        {
+                                            FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                            rc_buff.setEcmdError(rc_num);
+                                            return rc_buff;
+                                        }
+                                        FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 5 RP %d VALUE: 0x%04X",  i_target.toEcmdString(),  port_number, rank_pair_group, MRS5);
+
+                                        rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR2_SEC_RP0_P0_0x8000C0220301143F, data_buffer_64);
+                                        if(rc) return rc;
+                                        rc_num = rc_num | data_buffer_64.reverse();
+                                        rc_num = rc_num | mrs6.insert(data_buffer_64, 0, 16);
+                                        rc_num = rc_num | mrs6.extractPreserve(&MRS6, 0, 16, 0);
+                                        if (rc_num)
+                                        {
+                                            FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                            rc_buff.setEcmdError(rc_num);
+                                            return rc_buff;
+                                        }
+                                        FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 6 RP %d VALUE: 0x%04X",  i_target.toEcmdString(),  port_number, rank_pair_group, MRS6);
+                                }
 
-		    		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR1_PRI_RP1_P0_0x8000C11D0301143F, data_buffer_64);
+                        }
+                        else if (rank_pair_group == 1)
+                        {
+                                rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR0_PRI_RP1_P0_0x8000C11C0301143F, data_buffer_64);
                                 if(rc) return rc;
-		    		rc_num = rc_num | data_buffer_64.reverse();
-		    		rc_num = rc_num | mrs1.insert(data_buffer_64, 0, 16);
-		    		rc_num = rc_num | mrs1.extractPreserve(&MRS1, 0, 16, 0);
-		    		FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 1 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS1);
-
-		    		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR2_PRI_RP1_P0_0x8000C11E0301143F, data_buffer_64);
+                                rc_num = rc_num | data_buffer_64.reverse();
+                                rc_num = rc_num | mrs0.insert(data_buffer_64, 0, 16);
+                                rc_num = rc_num | mrs0.extractPreserve(&MRS0, 0, 16, 0);
+                                if (rc_num)
+                                {
+                                    FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                    rc_buff.setEcmdError(rc_num);
+                                    return rc_buff;
+                                }
+                                FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 0 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS0);
+
+                                rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR1_PRI_RP1_P0_0x8000C11D0301143F, data_buffer_64);
                                 if(rc) return rc;
-		    		rc_num = rc_num | data_buffer_64.reverse();
-		    		rc_num = rc_num | mrs2.insert(data_buffer_64, 0, 16);
-		    		rc_num = rc_num | mrs2.extractPreserve(&MRS2, 0, 16, 0);
-		    		FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 2 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS2);
-
-		    		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR3_PRI_RP1_P0_0x8000C11F0301143F, data_buffer_64);
+                                rc_num = rc_num | data_buffer_64.reverse();
+                                rc_num = rc_num | mrs1.insert(data_buffer_64, 0, 16);
+                                rc_num = rc_num | mrs1.extractPreserve(&MRS1, 0, 16, 0);
+                                if (rc_num)
+                                {
+                                    FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                    rc_buff.setEcmdError(rc_num);
+                                    return rc_buff;
+                                }
+                                FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 1 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS1);
+
+                                rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR2_PRI_RP1_P0_0x8000C11E0301143F, data_buffer_64);
                                 if(rc) return rc;
-		    		rc_num = rc_num | data_buffer_64.reverse();
-		    		rc_num = rc_num | mrs3.insert(data_buffer_64, 0, 16);
-		    		rc_num = rc_num | mrs3.extractPreserve(&MRS3, 0, 16, 0);
-		    		FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 3 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS3);
-
-				if (dram_gen == ENUM_ATTR_EFF_DRAM_GEN_DDR4)
-				{
-			    		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR0_SEC_RP1_P0_0x8000C1200301143F, data_buffer_64);
-                                	if(rc) return rc;
-			    		rc_num = rc_num | data_buffer_64.reverse();
-			    		rc_num = rc_num | mrs4.insert(data_buffer_64, 0, 16);
-			    		rc_num = rc_num | mrs4.extractPreserve(&MRS4, 0, 16, 0);
-			    		FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 4 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS4);
-
-			    		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR1_SEC_RP1_P0_0x8000C1210301143F, data_buffer_64);
-                                	if(rc) return rc;
-			    		rc_num = rc_num | data_buffer_64.reverse();
-			    		rc_num = rc_num | mrs5.insert(data_buffer_64, 0, 16);
-			    		rc_num = rc_num | mrs5.extractPreserve(&MRS5, 0, 16, 0);
-			    		FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 5 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS5);
-
-			    		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR2_SEC_RP1_P0_0x8000C1220301143F, data_buffer_64);
-                                	if(rc) return rc;
-			    		rc_num = rc_num | data_buffer_64.reverse();
-			    		rc_num = rc_num | mrs6.insert(data_buffer_64, 0, 16);
-			    		rc_num = rc_num | mrs6.extractPreserve(&MRS6, 0, 16, 0);
-			    		FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 6 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS6);
-				}
-
-			}
-			else if (rank_pair_group == 2)
-			{
-		   	       rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR0_PRI_RP2_P0_0x8000C21C0301143F, data_buffer_64);
-                               if(rc) return rc;
-		   	       rc_num = rc_num | data_buffer_64.reverse();
-		   	       rc_num = rc_num | mrs0.insert(data_buffer_64, 0, 16);
-		   	       rc_num = rc_num | mrs0.extractPreserve(&MRS0, 0, 16, 0);
-		   	       FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 0 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS0);
+                                rc_num = rc_num | data_buffer_64.reverse();
+                                rc_num = rc_num | mrs2.insert(data_buffer_64, 0, 16);
+                                rc_num = rc_num | mrs2.extractPreserve(&MRS2, 0, 16, 0);
+                                if (rc_num)
+                                {
+                                    FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                    rc_buff.setEcmdError(rc_num);
+                                    return rc_buff;
+                                }
+                                FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 2 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS2);
+
+                                rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR3_PRI_RP1_P0_0x8000C11F0301143F, data_buffer_64);
+                                if(rc) return rc;
+                                rc_num = rc_num | data_buffer_64.reverse();
+                                rc_num = rc_num | mrs3.insert(data_buffer_64, 0, 16);
+                                rc_num = rc_num | mrs3.extractPreserve(&MRS3, 0, 16, 0);
+                                if (rc_num)
+                                {
+                                    FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                    rc_buff.setEcmdError(rc_num);
+                                    return rc_buff;
+                                }
+                                FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 3 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS3);
+
+                                if (dram_gen == ENUM_ATTR_EFF_DRAM_GEN_DDR4)
+                                {
+                                        rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR0_SEC_RP1_P0_0x8000C1200301143F, data_buffer_64);
+                                        if(rc) return rc;
+                                        rc_num = rc_num | data_buffer_64.reverse();
+                                        rc_num = rc_num | mrs4.insert(data_buffer_64, 0, 16);
+                                        rc_num = rc_num | mrs4.extractPreserve(&MRS4, 0, 16, 0);
+                                        if (rc_num)
+                                        {
+                                            FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                            rc_buff.setEcmdError(rc_num);
+                                            return rc_buff;
+                                        }
+                                        FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 4 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS4);
+
+                                        rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR1_SEC_RP1_P0_0x8000C1210301143F, data_buffer_64);
+                                        if(rc) return rc;
+                                        rc_num = rc_num | data_buffer_64.reverse();
+                                        rc_num = rc_num | mrs5.insert(data_buffer_64, 0, 16);
+                                        rc_num = rc_num | mrs5.extractPreserve(&MRS5, 0, 16, 0);
+                                        if (rc_num)
+                                        {
+                                            FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                            rc_buff.setEcmdError(rc_num);
+                                            return rc_buff;
+                                        }
+                                        FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 5 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS5);
+
+                                        rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR2_SEC_RP1_P0_0x8000C1220301143F, data_buffer_64);
+                                        if(rc) return rc;
+                                        rc_num = rc_num | data_buffer_64.reverse();
+                                        rc_num = rc_num | mrs6.insert(data_buffer_64, 0, 16);
+                                        rc_num = rc_num | mrs6.extractPreserve(&MRS6, 0, 16, 0);
+                                        if (rc_num)
+                                        {
+                                            FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                            rc_buff.setEcmdError(rc_num);
+                                            return rc_buff;
+                                        }
+                                        FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 6 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS6);
+                                }
 
-		   	       rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR1_PRI_RP2_P0_0x8000C21D0301143F, data_buffer_64);
+                        }
+                        else if (rank_pair_group == 2)
+                        {
+                               rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR0_PRI_RP2_P0_0x8000C21C0301143F, data_buffer_64);
                                if(rc) return rc;
-		   	       rc_num = rc_num | data_buffer_64.reverse();
-		   	       rc_num = rc_num | mrs1.insert(data_buffer_64, 0, 16);
-		   	       rc_num = rc_num | mrs1.extractPreserve(&MRS1, 0, 16, 0);
-		   	       FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 1 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS1);
-
-		   	       rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR2_PRI_RP2_P0_0x8000C21E0301143F, data_buffer_64);
+                               rc_num = rc_num | data_buffer_64.reverse();
+                               rc_num = rc_num | mrs0.insert(data_buffer_64, 0, 16);
+                               rc_num = rc_num | mrs0.extractPreserve(&MRS0, 0, 16, 0);
+                                if (rc_num)
+                                {
+                                    FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                    rc_buff.setEcmdError(rc_num);
+                                    return rc_buff;
+                                }
+                               FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 0 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS0);
+
+                               rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR1_PRI_RP2_P0_0x8000C21D0301143F, data_buffer_64);
                                if(rc) return rc;
-		   	       rc_num = rc_num | data_buffer_64.reverse();
-		   	       rc_num = rc_num | mrs2.insert(data_buffer_64, 0, 16);
-		   	       rc_num = rc_num | mrs2.extractPreserve(&MRS2, 0, 16, 0);
-		   	       FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 2 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS2);
-
-		   	       rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR3_PRI_RP2_P0_0x8000C21F0301143F, data_buffer_64);
+                               rc_num = rc_num | data_buffer_64.reverse();
+                               rc_num = rc_num | mrs1.insert(data_buffer_64, 0, 16);
+                               rc_num = rc_num | mrs1.extractPreserve(&MRS1, 0, 16, 0);
+                                if (rc_num)
+                                {
+                                    FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                    rc_buff.setEcmdError(rc_num);
+                                    return rc_buff;
+                                }
+                               FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 1 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS1);
+
+                               rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR2_PRI_RP2_P0_0x8000C21E0301143F, data_buffer_64);
                                if(rc) return rc;
-		   	       rc_num = rc_num | data_buffer_64.reverse();
-		   	       rc_num = rc_num | mrs3.insert(data_buffer_64, 0, 16);
-		   	       rc_num = rc_num | mrs3.extractPreserve(&MRS3, 0, 16, 0);
-		   	       FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 3 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS3);
-
-				if (dram_gen == ENUM_ATTR_EFF_DRAM_GEN_DDR4)
-				{
-			    		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR0_SEC_RP2_P0_0x8000C2200301143F, data_buffer_64);
-                                	if(rc) return rc;
-			    		rc_num = rc_num | data_buffer_64.reverse();
-			    		rc_num = rc_num | mrs4.insert(data_buffer_64, 0, 16);
-			    		rc_num = rc_num | mrs4.extractPreserve(&MRS4, 0, 16, 0);
-			    		FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 4 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS4);
-
-			    		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR1_SEC_RP2_P0_0x8000C2210301143F, data_buffer_64);
-                                	if(rc) return rc;
-			    		rc_num = rc_num | data_buffer_64.reverse();
-			    		rc_num = rc_num | mrs5.insert(data_buffer_64, 0, 16);
-			    		rc_num = rc_num | mrs5.extractPreserve(&MRS5, 0, 16, 0);
-			    		FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 5 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS5);
-
-			    		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR2_SEC_RP2_P0_0x8000C2220301143F, data_buffer_64);
-                                	if(rc) return rc;
-			    		rc_num = rc_num | data_buffer_64.reverse();
-			    		rc_num = rc_num | mrs6.insert(data_buffer_64, 0, 16);
-			    		rc_num = rc_num | mrs6.extractPreserve(&MRS6, 0, 16, 0);
-			    		FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 6 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS6);
-				}
-
-			}
-			else if (rank_pair_group == 3)
-			{
-		   	       rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR0_PRI_RP3_P0_0x8000C31C0301143F, data_buffer_64);
+                               rc_num = rc_num | data_buffer_64.reverse();
+                               rc_num = rc_num | mrs2.insert(data_buffer_64, 0, 16);
+                               rc_num = rc_num | mrs2.extractPreserve(&MRS2, 0, 16, 0);
+                                if (rc_num)
+                                {
+                                    FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                    rc_buff.setEcmdError(rc_num);
+                                    return rc_buff;
+                                }
+                               FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 2 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS2);
+
+                               rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR3_PRI_RP2_P0_0x8000C21F0301143F, data_buffer_64);
                                if(rc) return rc;
-		   	       rc_num = rc_num | data_buffer_64.reverse();
-		   	       rc_num = rc_num | mrs0.insert(data_buffer_64, 0, 16);
-		   	       rc_num = rc_num | mrs0.extractPreserve(&MRS0, 0, 16, 0);
-		   	       FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 0 RP %d VALUE: 0x%04X", i_target.toEcmdString(),  port_number, rank_pair_group, MRS0);
+                               rc_num = rc_num | data_buffer_64.reverse();
+                               rc_num = rc_num | mrs3.insert(data_buffer_64, 0, 16);
+                               rc_num = rc_num | mrs3.extractPreserve(&MRS3, 0, 16, 0);
+                                if (rc_num)
+                                {
+                                    FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                    rc_buff.setEcmdError(rc_num);
+                                    return rc_buff;
+                                }
+                               FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 3 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS3);
+
+                                if (dram_gen == ENUM_ATTR_EFF_DRAM_GEN_DDR4)
+                                {
+                                        rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR0_SEC_RP2_P0_0x8000C2200301143F, data_buffer_64);
+                                        if(rc) return rc;
+                                        rc_num = rc_num | data_buffer_64.reverse();
+                                        rc_num = rc_num | mrs4.insert(data_buffer_64, 0, 16);
+                                        rc_num = rc_num | mrs4.extractPreserve(&MRS4, 0, 16, 0);
+                                        if (rc_num)
+                                        {
+                                            FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                            rc_buff.setEcmdError(rc_num);
+                                            return rc_buff;
+                                        }
+                                        FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 4 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS4);
+
+                                        rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR1_SEC_RP2_P0_0x8000C2210301143F, data_buffer_64);
+                                        if(rc) return rc;
+                                        rc_num = rc_num | data_buffer_64.reverse();
+                                        rc_num = rc_num | mrs5.insert(data_buffer_64, 0, 16);
+                                        rc_num = rc_num | mrs5.extractPreserve(&MRS5, 0, 16, 0);
+                                        if (rc_num)
+                                        {
+                                            FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                            rc_buff.setEcmdError(rc_num);
+                                            return rc_buff;
+                                        }
+                                        FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 5 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS5);
+
+                                        rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR2_SEC_RP2_P0_0x8000C2220301143F, data_buffer_64);
+                                        if(rc) return rc;
+                                        rc_num = rc_num | data_buffer_64.reverse();
+                                        rc_num = rc_num | mrs6.insert(data_buffer_64, 0, 16);
+                                        rc_num = rc_num | mrs6.extractPreserve(&MRS6, 0, 16, 0);
+                                        if (rc_num)
+                                        {
+                                            FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                            rc_buff.setEcmdError(rc_num);
+                                            return rc_buff;
+                                        }
+                                        FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 6 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS6);
+                                }
 
-		   	       rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR1_PRI_RP3_P0_0x8000C31D0301143F, data_buffer_64);
+                        }
+                        else if (rank_pair_group == 3)
+                        {
+                               rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR0_PRI_RP3_P0_0x8000C31C0301143F, data_buffer_64);
                                if(rc) return rc;
-		   	       rc_num = rc_num | data_buffer_64.reverse();
-		   	       rc_num = rc_num | mrs1.insert(data_buffer_64, 0, 16);
-		   	       rc_num = rc_num | mrs1.extractPreserve(&MRS1, 0, 16, 0);
-		   	       FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 1 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS1);
-
-		   	       rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR2_PRI_RP3_P0_0x8000C31E0301143F, data_buffer_64);
+                               rc_num = rc_num | data_buffer_64.reverse();
+                               rc_num = rc_num | mrs0.insert(data_buffer_64, 0, 16);
+                               rc_num = rc_num | mrs0.extractPreserve(&MRS0, 0, 16, 0);
+                                if (rc_num)
+                                {
+                                    FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                    rc_buff.setEcmdError(rc_num);
+                                    return rc_buff;
+                                }
+                               FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 0 RP %d VALUE: 0x%04X", i_target.toEcmdString(),  port_number, rank_pair_group, MRS0);
+
+                               rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR1_PRI_RP3_P0_0x8000C31D0301143F, data_buffer_64);
                                if(rc) return rc;
-		   	       rc_num = rc_num | data_buffer_64.reverse();
-		   	       rc_num = rc_num | mrs2.insert(data_buffer_64, 0, 16);
-		   	       rc_num = rc_num | mrs2.extractPreserve(&MRS2, 0, 16, 0);
-		   	       FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 2 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS2);
-
-		   	       rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR3_PRI_RP3_P0_0x8000C31F0301143F, data_buffer_64);
+                               rc_num = rc_num | data_buffer_64.reverse();
+                               rc_num = rc_num | mrs1.insert(data_buffer_64, 0, 16);
+                               rc_num = rc_num | mrs1.extractPreserve(&MRS1, 0, 16, 0);
+                                if (rc_num)
+                                {
+                                    FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                    rc_buff.setEcmdError(rc_num);
+                                    return rc_buff;
+                                }
+                               FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 1 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS1);
+
+                               rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR2_PRI_RP3_P0_0x8000C31E0301143F, data_buffer_64);
                                if(rc) return rc;
-		   	       rc_num = rc_num | data_buffer_64.reverse();
-		   	       rc_num = rc_num | mrs3.insert(data_buffer_64, 0, 16);
-		   	       rc_num = rc_num | mrs3.extractPreserve(&MRS3, 0, 16, 0);
-		   	       FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 3 RP %d VALUE: 0x%04X", i_target.toEcmdString(), port_number, rank_pair_group, MRS3);
-
-				if (dram_gen == ENUM_ATTR_EFF_DRAM_GEN_DDR4)
-				{
-			    		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR0_SEC_RP3_P0_0x8000C3200301143F, data_buffer_64);
-                                	if(rc) return rc;
-			    		rc_num = rc_num | data_buffer_64.reverse();
-			    		rc_num = rc_num | mrs4.insert(data_buffer_64, 0, 16);
-			    		rc_num = rc_num | mrs4.extractPreserve(&MRS4, 0, 16, 0);
-			    		FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 4 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS4);
-
-			    		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR1_SEC_RP3_P0_0x8000C3210301143F, data_buffer_64);
-                                	if(rc) return rc;
-			    		rc_num = rc_num | data_buffer_64.reverse();
-			    		rc_num = rc_num | mrs5.insert(data_buffer_64, 0, 16);
-			    		rc_num = rc_num | mrs5.extractPreserve(&MRS5, 0, 16, 0);
-			    		FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 5 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS5);
-
-			    		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR2_SEC_RP3_P0_0x8000C3220301143F, data_buffer_64);
-                                	if(rc) return rc;
-			    		rc_num = rc_num | data_buffer_64.reverse();
-			    		rc_num = rc_num | mrs6.insert(data_buffer_64, 0, 16);
-			    		rc_num = rc_num | mrs6.extractPreserve(&MRS6, 0, 16, 0);
-			    		FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 6 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS6);
-				}
-
-			}
-		}
-		else if (port_number == 1)
-		{
-			if (rank_pair_group == 0)
-			{
-		    		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR0_PRI_RP0_P1_0x8001C01C0301143F, data_buffer_64);
-                                if(rc) return rc;
-		    		rc_num = rc_num | data_buffer_64.reverse();
-		    		rc_num = rc_num | mrs0.insert(data_buffer_64, 0, 16);
-		    		rc_num = rc_num | mrs0.extractPreserve(&MRS0, 0, 16, 0);
-		    		FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 0 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS0 );
+                               rc_num = rc_num | data_buffer_64.reverse();
+                               rc_num = rc_num | mrs2.insert(data_buffer_64, 0, 16);
+                               rc_num = rc_num | mrs2.extractPreserve(&MRS2, 0, 16, 0);
+                                if (rc_num)
+                                {
+                                    FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                    rc_buff.setEcmdError(rc_num);
+                                    return rc_buff;
+                                }
+                               FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 2 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS2);
+
+                               rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR3_PRI_RP3_P0_0x8000C31F0301143F, data_buffer_64);
+                               if(rc) return rc;
+                               rc_num = rc_num | data_buffer_64.reverse();
+                               rc_num = rc_num | mrs3.insert(data_buffer_64, 0, 16);
+                               rc_num = rc_num | mrs3.extractPreserve(&MRS3, 0, 16, 0);
+                                if (rc_num)
+                                {
+                                    FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                    rc_buff.setEcmdError(rc_num);
+                                    return rc_buff;
+                                }
+                               FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 3 RP %d VALUE: 0x%04X", i_target.toEcmdString(), port_number, rank_pair_group, MRS3);
+
+                                if (dram_gen == ENUM_ATTR_EFF_DRAM_GEN_DDR4)
+                                {
+                                        rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR0_SEC_RP3_P0_0x8000C3200301143F, data_buffer_64);
+                                        if(rc) return rc;
+                                        rc_num = rc_num | data_buffer_64.reverse();
+                                        rc_num = rc_num | mrs4.insert(data_buffer_64, 0, 16);
+                                        rc_num = rc_num | mrs4.extractPreserve(&MRS4, 0, 16, 0);
+                                        if (rc_num)
+                                        {
+                                            FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                            rc_buff.setEcmdError(rc_num);
+                                            return rc_buff;
+                                        }
+                                        FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 4 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS4);
+
+                                        rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR1_SEC_RP3_P0_0x8000C3210301143F, data_buffer_64);
+                                        if(rc) return rc;
+                                        rc_num = rc_num | data_buffer_64.reverse();
+                                        rc_num = rc_num | mrs5.insert(data_buffer_64, 0, 16);
+                                        rc_num = rc_num | mrs5.extractPreserve(&MRS5, 0, 16, 0);
+                                        if (rc_num)
+                                        {
+                                            FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                            rc_buff.setEcmdError(rc_num);
+                                            return rc_buff;
+                                        }
+                                        FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 5 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS5);
+
+                                        rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR2_SEC_RP3_P0_0x8000C3220301143F, data_buffer_64);
+                                        if(rc) return rc;
+                                        rc_num = rc_num | data_buffer_64.reverse();
+                                        rc_num = rc_num | mrs6.insert(data_buffer_64, 0, 16);
+                                        rc_num = rc_num | mrs6.extractPreserve(&MRS6, 0, 16, 0);
+                                        if (rc_num)
+                                        {
+                                            FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                            rc_buff.setEcmdError(rc_num);
+                                            return rc_buff;
+                                        }
+                                        FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 6 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS6);
+                                }
 
-		    		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR1_PRI_RP0_P1_0x8001C01D0301143F, data_buffer_64);
+                        }
+                }
+                else if (port_number == 1)
+                {
+                        if (rank_pair_group == 0)
+                        {
+                                rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR0_PRI_RP0_P1_0x8001C01C0301143F, data_buffer_64);
                                 if(rc) return rc;
-		    		rc_num = rc_num | data_buffer_64.reverse();
-		    		rc_num = rc_num | mrs1.insert(data_buffer_64, 0, 16);
-		    		rc_num = rc_num | mrs1.extractPreserve(&MRS1, 0, 16, 0);
-		    		FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 1 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS1);
-
-		    		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR2_PRI_RP0_P1_0x8001C01E0301143F, data_buffer_64);
+                                rc_num = rc_num | data_buffer_64.reverse();
+                                rc_num = rc_num | mrs0.insert(data_buffer_64, 0, 16);
+                                rc_num = rc_num | mrs0.extractPreserve(&MRS0, 0, 16, 0);
+                                if (rc_num)
+                                {
+                                    FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                    rc_buff.setEcmdError(rc_num);
+                                    return rc_buff;
+                                }
+                                FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 0 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS0 );
+
+                                rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR1_PRI_RP0_P1_0x8001C01D0301143F, data_buffer_64);
                                 if(rc) return rc;
-		    		rc_num = rc_num | data_buffer_64.reverse();
-		    		rc_num = rc_num | mrs2.insert(data_buffer_64, 0, 16);
-		    		rc_num = rc_num | mrs2.extractPreserve(&MRS2, 0, 16, 0);
-		    		FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 2 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS2);
-
-		    		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR3_PRI_RP0_P1_0x8001C01F0301143F, data_buffer_64);
+                                rc_num = rc_num | data_buffer_64.reverse();
+                                rc_num = rc_num | mrs1.insert(data_buffer_64, 0, 16);
+                                rc_num = rc_num | mrs1.extractPreserve(&MRS1, 0, 16, 0);
+                                if (rc_num)
+                                {
+                                    FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                    rc_buff.setEcmdError(rc_num);
+                                    return rc_buff;
+                                }
+                                FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 1 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS1);
+
+                                rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR2_PRI_RP0_P1_0x8001C01E0301143F, data_buffer_64);
                                 if(rc) return rc;
-		    		rc_num = rc_num | data_buffer_64.reverse();
-		    		rc_num = rc_num | mrs3.insert(data_buffer_64, 0, 16);
-		    		rc_num = rc_num | mrs3.extractPreserve(&MRS3, 0, 16, 0);
-		    		FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 3 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS3);
-
-				if (dram_gen == ENUM_ATTR_EFF_DRAM_GEN_DDR4)
-				{
-			    		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR0_SEC_RP0_P1_0x8001C0200301143F, data_buffer_64);
-                                	if(rc) return rc;
-			    		rc_num = rc_num | data_buffer_64.reverse();
-			    		rc_num = rc_num | mrs4.insert(data_buffer_64, 0, 16);
-			    		rc_num = rc_num | mrs4.extractPreserve(&MRS4, 0, 16, 0);
-			    		FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 4 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS4);
-
-			    		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR1_SEC_RP0_P1_0x8001C0210301143F, data_buffer_64);
-                                	if(rc) return rc;
-			    		rc_num = rc_num | data_buffer_64.reverse();
-			    		rc_num = rc_num | mrs5.insert(data_buffer_64, 0, 16);
-			    		rc_num = rc_num | mrs5.extractPreserve(&MRS5, 0, 16, 0);
-			    		FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 5 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS5);
-
-			    		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR2_SEC_RP0_P1_0x8001C0220301143F, data_buffer_64);
-                                	if(rc) return rc;
-			    		rc_num = rc_num | data_buffer_64.reverse();
-			    		rc_num = rc_num | mrs6.insert(data_buffer_64, 0, 16);
-			    		rc_num = rc_num | mrs6.extractPreserve(&MRS6, 0, 16, 0);
-			    		FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 6 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS6);
-				}
-
-			}
-			else if (rank_pair_group == 1)
-			{
-		    		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR0_PRI_RP1_P1_0x8001C11C0301143F, data_buffer_64);
+                                rc_num = rc_num | data_buffer_64.reverse();
+                                rc_num = rc_num | mrs2.insert(data_buffer_64, 0, 16);
+                                rc_num = rc_num | mrs2.extractPreserve(&MRS2, 0, 16, 0);
+                                if (rc_num)
+                                {
+                                    FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                    rc_buff.setEcmdError(rc_num);
+                                    return rc_buff;
+                                }
+                                FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 2 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS2);
+
+                                rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR3_PRI_RP0_P1_0x8001C01F0301143F, data_buffer_64);
                                 if(rc) return rc;
-		    		rc_num = rc_num | data_buffer_64.reverse();
-		    		rc_num = rc_num | mrs0.insert(data_buffer_64, 0, 16);
-		    		rc_num = rc_num | mrs0.extractPreserve(&MRS0, 0, 16, 0);
-		    		FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 0 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS0);
+                                rc_num = rc_num | data_buffer_64.reverse();
+                                rc_num = rc_num | mrs3.insert(data_buffer_64, 0, 16);
+                                rc_num = rc_num | mrs3.extractPreserve(&MRS3, 0, 16, 0);
+                                if (rc_num)
+                                {
+                                    FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                    rc_buff.setEcmdError(rc_num);
+                                    return rc_buff;
+                                }
+                                FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 3 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS3);
+
+                                if (dram_gen == ENUM_ATTR_EFF_DRAM_GEN_DDR4)
+                                {
+                                        rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR0_SEC_RP0_P1_0x8001C0200301143F, data_buffer_64);
+                                        if(rc) return rc;
+                                        rc_num = rc_num | data_buffer_64.reverse();
+                                        rc_num = rc_num | mrs4.insert(data_buffer_64, 0, 16);
+                                        rc_num = rc_num | mrs4.extractPreserve(&MRS4, 0, 16, 0);
+                                        if (rc_num)
+                                        {
+                                            FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                            rc_buff.setEcmdError(rc_num);
+                                            return rc_buff;
+                                        }
+                                        FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 4 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS4);
+
+                                        rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR1_SEC_RP0_P1_0x8001C0210301143F, data_buffer_64);
+                                        if(rc) return rc;
+                                        rc_num = rc_num | data_buffer_64.reverse();
+                                        rc_num = rc_num | mrs5.insert(data_buffer_64, 0, 16);
+                                        rc_num = rc_num | mrs5.extractPreserve(&MRS5, 0, 16, 0);
+                                        if (rc_num)
+                                        {
+                                            FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                            rc_buff.setEcmdError(rc_num);
+                                            return rc_buff;
+                                        }
+                                        FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 5 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS5);
+
+                                        rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR2_SEC_RP0_P1_0x8001C0220301143F, data_buffer_64);
+                                        if(rc) return rc;
+                                        rc_num = rc_num | data_buffer_64.reverse();
+                                        rc_num = rc_num | mrs6.insert(data_buffer_64, 0, 16);
+                                        rc_num = rc_num | mrs6.extractPreserve(&MRS6, 0, 16, 0);
+                                        if (rc_num)
+                                        {
+                                            FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                            rc_buff.setEcmdError(rc_num);
+                                            return rc_buff;
+                                        }
+                                        FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 6 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS6);
+                                }
 
-		    		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR1_PRI_RP1_P1_0x8001C11D0301143F, data_buffer_64);
+                        }
+                        else if (rank_pair_group == 1)
+                        {
+                                rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR0_PRI_RP1_P1_0x8001C11C0301143F, data_buffer_64);
                                 if(rc) return rc;
-		    		rc_num = rc_num | data_buffer_64.reverse();
-		    		rc_num = rc_num | mrs1.insert(data_buffer_64, 0, 16);
-		    		rc_num = rc_num | mrs1.extractPreserve(&MRS1, 0, 16, 0);
-		    		FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 1 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS1);
-
-		    		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR2_PRI_RP1_P1_0x8001C11E0301143F, data_buffer_64);
+                                rc_num = rc_num | data_buffer_64.reverse();
+                                rc_num = rc_num | mrs0.insert(data_buffer_64, 0, 16);
+                                rc_num = rc_num | mrs0.extractPreserve(&MRS0, 0, 16, 0);
+                                if (rc_num)
+                                {
+                                    FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                    rc_buff.setEcmdError(rc_num);
+                                    return rc_buff;
+                                }
+                                FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 0 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS0);
+
+                                rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR1_PRI_RP1_P1_0x8001C11D0301143F, data_buffer_64);
                                 if(rc) return rc;
-		    		rc_num = rc_num | data_buffer_64.reverse();
-		    		rc_num = rc_num | mrs2.insert(data_buffer_64, 0, 16);
-		    		rc_num = rc_num | mrs2.extractPreserve(&MRS2, 0, 16, 0);
-		    		FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 2 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS2);
-
-		    		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR3_PRI_RP1_P1_0x8001C11F0301143F, data_buffer_64);
+                                rc_num = rc_num | data_buffer_64.reverse();
+                                rc_num = rc_num | mrs1.insert(data_buffer_64, 0, 16);
+                                rc_num = rc_num | mrs1.extractPreserve(&MRS1, 0, 16, 0);
+                                if (rc_num)
+                                {
+                                    FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                    rc_buff.setEcmdError(rc_num);
+                                    return rc_buff;
+                                }
+                                FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 1 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS1);
+
+                                rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR2_PRI_RP1_P1_0x8001C11E0301143F, data_buffer_64);
                                 if(rc) return rc;
-		    		rc_num = rc_num | data_buffer_64.reverse();
-		    		rc_num = rc_num | mrs3.insert(data_buffer_64, 0, 16);
-		    		rc_num = rc_num | mrs3.extractPreserve(&MRS3, 0, 16, 0);
-		    		FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 3 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS3);
-
-				if (dram_gen == ENUM_ATTR_EFF_DRAM_GEN_DDR4)
-				{
-			    		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR0_SEC_RP1_P1_0x8001C1200301143F, data_buffer_64);
-                                	if(rc) return rc;
-			    		rc_num = rc_num | data_buffer_64.reverse();
-			    		rc_num = rc_num | mrs4.insert(data_buffer_64, 0, 16);
-			    		rc_num = rc_num | mrs4.extractPreserve(&MRS4, 0, 16, 0);
-			    		FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 4 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS4);
-
-			    		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR1_SEC_RP1_P1_0x8001C1210301143F, data_buffer_64);
-                                	if(rc) return rc;
-			    		rc_num = rc_num | data_buffer_64.reverse();
-			    		rc_num = rc_num | mrs5.insert(data_buffer_64, 0, 16);
-			    		rc_num = rc_num | mrs5.extractPreserve(&MRS5, 0, 16, 0);
-			    		FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 5 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS5);
-
-			    		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR2_SEC_RP1_P1_0x8001C1220301143F, data_buffer_64);
-                                	if(rc) return rc;
-			    		rc_num = rc_num | data_buffer_64.reverse();
-			    		rc_num = rc_num | mrs6.insert(data_buffer_64, 0, 16);
-			    		rc_num = rc_num | mrs6.extractPreserve(&MRS6, 0, 16, 0);
-			    		FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 6 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS6);
-
-				}
-
-			}
-			else if (rank_pair_group == 2)
-		        {
-		   	       rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR0_PRI_RP2_P1_0x8001C21C0301143F, data_buffer_64);
+                                rc_num = rc_num | data_buffer_64.reverse();
+                                rc_num = rc_num | mrs2.insert(data_buffer_64, 0, 16);
+                                rc_num = rc_num | mrs2.extractPreserve(&MRS2, 0, 16, 0);
+                                if (rc_num)
+                                {
+                                    FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                    rc_buff.setEcmdError(rc_num);
+                                    return rc_buff;
+                                }
+                                FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 2 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS2);
+
+                                rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR3_PRI_RP1_P1_0x8001C11F0301143F, data_buffer_64);
                                 if(rc) return rc;
-		   	       rc_num = rc_num | data_buffer_64.reverse();
-		   	       rc_num = rc_num | mrs0.insert(data_buffer_64, 0, 16);
-		   	       rc_num = rc_num | mrs0.extractPreserve(&MRS0, 0, 16, 0);
-		   	       FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 0 RP %d VALUE: 0x%04X", i_target.toEcmdString(), port_number, rank_pair_group, MRS0);
+                                rc_num = rc_num | data_buffer_64.reverse();
+                                rc_num = rc_num | mrs3.insert(data_buffer_64, 0, 16);
+                                rc_num = rc_num | mrs3.extractPreserve(&MRS3, 0, 16, 0);
+                                if (rc_num)
+                                {
+                                    FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                    rc_buff.setEcmdError(rc_num);
+                                    return rc_buff;
+                                }
+                                FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 3 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS3);
+
+                                if (dram_gen == ENUM_ATTR_EFF_DRAM_GEN_DDR4)
+                                {
+                                        rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR0_SEC_RP1_P1_0x8001C1200301143F, data_buffer_64);
+                                        if(rc) return rc;
+                                        rc_num = rc_num | data_buffer_64.reverse();
+                                        rc_num = rc_num | mrs4.insert(data_buffer_64, 0, 16);
+                                        rc_num = rc_num | mrs4.extractPreserve(&MRS4, 0, 16, 0);
+                                        if (rc_num)
+                                        {
+                                            FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                            rc_buff.setEcmdError(rc_num);
+                                            return rc_buff;
+                                        }
+                                        FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 4 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS4);
+
+                                        rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR1_SEC_RP1_P1_0x8001C1210301143F, data_buffer_64);
+                                        if(rc) return rc;
+                                        rc_num = rc_num | data_buffer_64.reverse();
+                                        rc_num = rc_num | mrs5.insert(data_buffer_64, 0, 16);
+                                        rc_num = rc_num | mrs5.extractPreserve(&MRS5, 0, 16, 0);
+                                        if (rc_num)
+                                        {
+                                            FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                            rc_buff.setEcmdError(rc_num);
+                                            return rc_buff;
+                                        }
+                                        FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 5 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS5);
+
+                                        rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR2_SEC_RP1_P1_0x8001C1220301143F, data_buffer_64);
+                                        if(rc) return rc;
+                                        rc_num = rc_num | data_buffer_64.reverse();
+                                        rc_num = rc_num | mrs6.insert(data_buffer_64, 0, 16);
+                                        rc_num = rc_num | mrs6.extractPreserve(&MRS6, 0, 16, 0);
+                                        if (rc_num)
+                                        {
+                                            FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                            rc_buff.setEcmdError(rc_num);
+                                            return rc_buff;
+                                        }
+                                        FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 6 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS6);
+
+                                }
 
-		   	       rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR1_PRI_RP2_P1_0x8001C21D0301143F, data_buffer_64);
+                        }
+                        else if (rank_pair_group == 2)
+                        {
+                               rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR0_PRI_RP2_P1_0x8001C21C0301143F, data_buffer_64);
                                 if(rc) return rc;
-		   	       rc_num = rc_num | data_buffer_64.reverse();
-		   	       rc_num = rc_num | mrs1.insert(data_buffer_64, 0, 16);
-		   	       rc_num = rc_num | mrs1.extractPreserve(&MRS1, 0, 16, 0);
-		   	       FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 1 RP %d VALUE: 0x%04X", i_target.toEcmdString(), port_number, rank_pair_group, MRS1);
-
-		   	       rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR2_PRI_RP2_P1_0x8001C21E0301143F, data_buffer_64);
+                               rc_num = rc_num | data_buffer_64.reverse();
+                               rc_num = rc_num | mrs0.insert(data_buffer_64, 0, 16);
+                               rc_num = rc_num | mrs0.extractPreserve(&MRS0, 0, 16, 0);
+                                if (rc_num)
+                                {
+                                    FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                    rc_buff.setEcmdError(rc_num);
+                                    return rc_buff;
+                                }
+                               FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 0 RP %d VALUE: 0x%04X", i_target.toEcmdString(), port_number, rank_pair_group, MRS0);
+
+                               rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR1_PRI_RP2_P1_0x8001C21D0301143F, data_buffer_64);
                                 if(rc) return rc;
-		   	       rc_num = rc_num | data_buffer_64.reverse();
-		   	       rc_num = rc_num | mrs2.insert(data_buffer_64, 0, 16);
-		   	       rc_num = rc_num | mrs2.extractPreserve(&MRS2, 0, 16, 0);
-		   	       FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 2 RP %d VALUE: 0x%04X", i_target.toEcmdString(), port_number, rank_pair_group, MRS2);
-
-		   	       rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR3_PRI_RP2_P1_0x8001C21F0301143F, data_buffer_64);
+                               rc_num = rc_num | data_buffer_64.reverse();
+                               rc_num = rc_num | mrs1.insert(data_buffer_64, 0, 16);
+                               rc_num = rc_num | mrs1.extractPreserve(&MRS1, 0, 16, 0);
+                                if (rc_num)
+                                {
+                                    FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                    rc_buff.setEcmdError(rc_num);
+                                    return rc_buff;
+                                }
+                               FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 1 RP %d VALUE: 0x%04X", i_target.toEcmdString(), port_number, rank_pair_group, MRS1);
+
+                               rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR2_PRI_RP2_P1_0x8001C21E0301143F, data_buffer_64);
                                 if(rc) return rc;
-		   	       rc_num = rc_num | data_buffer_64.reverse();
-		   	       rc_num = rc_num | mrs3.insert(data_buffer_64, 0, 16);
-		   	       rc_num = rc_num | mrs3.extractPreserve(&MRS3, 0, 16, 0);
-		   	       FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 3 RP %d VALUE: 0x%04X", i_target.toEcmdString(), port_number, rank_pair_group, MRS3);
-
-				if (dram_gen == ENUM_ATTR_EFF_DRAM_GEN_DDR4)
-				{
-			    		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR0_SEC_RP2_P1_0x8001C2200301143F, data_buffer_64);
-                                	if(rc) return rc;
-			    		rc_num = rc_num | data_buffer_64.reverse();
-			    		rc_num = rc_num | mrs4.insert(data_buffer_64, 0, 16);
-			    		rc_num = rc_num | mrs4.extractPreserve(&MRS4, 0, 16, 0);
-			    		FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 4 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS4);
-
-			    		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR1_SEC_RP2_P1_0x8001C2210301143F, data_buffer_64);
-                                	if(rc) return rc;
-			    		rc_num = rc_num | data_buffer_64.reverse();
-			    		rc_num = rc_num | mrs5.insert(data_buffer_64, 0, 16);
-			    		rc_num = rc_num | mrs5.extractPreserve(&MRS5, 0, 16, 0);
-			    		FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 5 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS5);
-
-			    		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR2_SEC_RP2_P1_0x8001C2220301143F, data_buffer_64);
-                                	if(rc) return rc;
-			    		rc_num = rc_num | data_buffer_64.reverse();
-			    		rc_num = rc_num | mrs6.insert(data_buffer_64, 0, 16);
-			    		rc_num = rc_num | mrs6.extractPreserve(&MRS6, 0, 16, 0);
-			    		FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 6 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS6);
-				}
-
-			}
-			else if (rank_pair_group == 3)
-			{
-		   	       rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR0_PRI_RP3_P1_0x8001C31C0301143F, data_buffer_64);
+                               rc_num = rc_num | data_buffer_64.reverse();
+                               rc_num = rc_num | mrs2.insert(data_buffer_64, 0, 16);
+                               rc_num = rc_num | mrs2.extractPreserve(&MRS2, 0, 16, 0);
+                                if (rc_num)
+                                {
+                                    FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                    rc_buff.setEcmdError(rc_num);
+                                    return rc_buff;
+                                }
+                               FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 2 RP %d VALUE: 0x%04X", i_target.toEcmdString(), port_number, rank_pair_group, MRS2);
+
+                               rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR3_PRI_RP2_P1_0x8001C21F0301143F, data_buffer_64);
                                 if(rc) return rc;
-		   	       rc_num = rc_num | data_buffer_64.reverse();
-		   	       rc_num = rc_num | mrs0.insert(data_buffer_64, 0, 16);
-		   	       rc_num = rc_num | mrs0.extractPreserve(&MRS0, 0, 16, 0);
-		   	       FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 0 RP %d VALUE: 0x%04X", i_target.toEcmdString(), port_number, rank_pair_group, MRS0);
+                               rc_num = rc_num | data_buffer_64.reverse();
+                               rc_num = rc_num | mrs3.insert(data_buffer_64, 0, 16);
+                               rc_num = rc_num | mrs3.extractPreserve(&MRS3, 0, 16, 0);
+                                if (rc_num)
+                                {
+                                    FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                    rc_buff.setEcmdError(rc_num);
+                                    return rc_buff;
+                                }
+                               FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 3 RP %d VALUE: 0x%04X", i_target.toEcmdString(), port_number, rank_pair_group, MRS3);
+
+                                if (dram_gen == ENUM_ATTR_EFF_DRAM_GEN_DDR4)
+                                {
+                                        rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR0_SEC_RP2_P1_0x8001C2200301143F, data_buffer_64);
+                                        if(rc) return rc;
+                                        rc_num = rc_num | data_buffer_64.reverse();
+                                        rc_num = rc_num | mrs4.insert(data_buffer_64, 0, 16);
+                                        rc_num = rc_num | mrs4.extractPreserve(&MRS4, 0, 16, 0);
+                                        if (rc_num)
+                                        {
+                                            FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                            rc_buff.setEcmdError(rc_num);
+                                            return rc_buff;
+                                        }
+                                        FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 4 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS4);
+
+                                        rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR1_SEC_RP2_P1_0x8001C2210301143F, data_buffer_64);
+                                        if(rc) return rc;
+                                        rc_num = rc_num | data_buffer_64.reverse();
+                                        rc_num = rc_num | mrs5.insert(data_buffer_64, 0, 16);
+                                        rc_num = rc_num | mrs5.extractPreserve(&MRS5, 0, 16, 0);
+                                        if (rc_num)
+                                        {
+                                            FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                            rc_buff.setEcmdError(rc_num);
+                                            return rc_buff;
+                                        }
+                                        FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 5 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS5);
+
+                                        rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR2_SEC_RP2_P1_0x8001C2220301143F, data_buffer_64);
+                                        if(rc) return rc;
+                                        rc_num = rc_num | data_buffer_64.reverse();
+                                        rc_num = rc_num | mrs6.insert(data_buffer_64, 0, 16);
+                                        rc_num = rc_num | mrs6.extractPreserve(&MRS6, 0, 16, 0);
+                                        if (rc_num)
+                                        {
+                                            FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                            rc_buff.setEcmdError(rc_num);
+                                            return rc_buff;
+                                        }
+                                        FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 6 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS6);
+                                }
 
-		   	       rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR1_PRI_RP3_P1_0x8001C31D0301143F, data_buffer_64);
+                        }
+                        else if (rank_pair_group == 3)
+                        {
+                               rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR0_PRI_RP3_P1_0x8001C31C0301143F, data_buffer_64);
                                 if(rc) return rc;
-		   	       rc_num = rc_num | data_buffer_64.reverse();
-		   	       rc_num = rc_num | mrs1.insert(data_buffer_64, 0, 16);
-		   	       rc_num = rc_num | mrs1.extractPreserve(&MRS1, 0, 16, 0);
-		   	       FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 1 RP %d VALUE: 0x%04X", i_target.toEcmdString(), port_number, rank_pair_group, MRS1);
-
-		   	       rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR2_PRI_RP3_P1_0x8001C31E0301143F, data_buffer_64);
+                               rc_num = rc_num | data_buffer_64.reverse();
+                               rc_num = rc_num | mrs0.insert(data_buffer_64, 0, 16);
+                               rc_num = rc_num | mrs0.extractPreserve(&MRS0, 0, 16, 0);
+                               if (rc_num)
+                               {
+                                   FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                   rc_buff.setEcmdError(rc_num);
+                                   return rc_buff;
+                               }
+                               FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 0 RP %d VALUE: 0x%04X", i_target.toEcmdString(), port_number, rank_pair_group, MRS0);
+
+                               rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR1_PRI_RP3_P1_0x8001C31D0301143F, data_buffer_64);
                                 if(rc) return rc;
-		   	       rc_num = rc_num | data_buffer_64.reverse();
-		   	       rc_num = rc_num | mrs2.insert(data_buffer_64, 0, 16);
-		   	       rc_num = rc_num | mrs2.extractPreserve(&MRS2, 0, 16, 0);
-		   	       FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 2 RP %d VALUE: 0x%04X", i_target.toEcmdString(), port_number, rank_pair_group, MRS2);
-
-		   	       rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR3_PRI_RP3_P1_0x8001C31F0301143F, data_buffer_64);
+                               rc_num = rc_num | data_buffer_64.reverse();
+                               rc_num = rc_num | mrs1.insert(data_buffer_64, 0, 16);
+                               rc_num = rc_num | mrs1.extractPreserve(&MRS1, 0, 16, 0);
+                               if (rc_num)
+                               {
+                                   FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                   rc_buff.setEcmdError(rc_num);
+                                   return rc_buff;
+                               }
+                               FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 1 RP %d VALUE: 0x%04X", i_target.toEcmdString(), port_number, rank_pair_group, MRS1);
+
+                               rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR2_PRI_RP3_P1_0x8001C31E0301143F, data_buffer_64);
                                 if(rc) return rc;
-		   	       rc_num = rc_num | data_buffer_64.reverse();
-		   	       rc_num = rc_num | mrs3.insert(data_buffer_64, 0, 16);
-		   	       rc_num = rc_num | mrs3.extractPreserve(&MRS3, 0, 16, 0);
-		   	       FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 3 RP %d VALUE: 0x%04X", i_target.toEcmdString(), port_number, rank_pair_group, MRS3);
-
-				if (dram_gen == ENUM_ATTR_EFF_DRAM_GEN_DDR4)
-				{
-			    		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR0_SEC_RP3_P1_0x8001C3200301143F, data_buffer_64);
-                                	if(rc) return rc;
-			    		rc_num = rc_num | data_buffer_64.reverse();
-			    		rc_num = rc_num | mrs4.insert(data_buffer_64, 0, 16);
-			    		rc_num = rc_num | mrs4.extractPreserve(&MRS4, 0, 16, 0);
-			    		FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 4 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS4);
-
-			    		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR1_SEC_RP3_P1_0x8001C3210301143F, data_buffer_64);
-                                	if(rc) return rc;
-			    		rc_num = rc_num | data_buffer_64.reverse();
-			    		rc_num = rc_num | mrs5.insert(data_buffer_64, 0, 16);
-			    		rc_num = rc_num | mrs5.extractPreserve(&MRS5, 0, 16, 0);
-			    		FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 5 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS5);
-
-			    		rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR2_SEC_RP3_P1_0x8001C3220301143F, data_buffer_64);
-                                	if(rc) return rc;
-			    		rc_num = rc_num | data_buffer_64.reverse();
-			    		rc_num = rc_num | mrs6.insert(data_buffer_64, 0, 16);
-			    		rc_num = rc_num | mrs6.extractPreserve(&MRS6, 0, 16, 0);
-			    		FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 6 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS6);
-				}
-
-			}
-
-		}
-		}
-	    }
-	}
-
-        if ( (dram_gen == ENUM_ATTR_EFF_DRAM_GEN_DDR4) && (dimm_type == fapi::ENUM_ATTR_EFF_DIMM_TYPE_RDIMM || dimm_type == fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM) ) 
+                               rc_num = rc_num | data_buffer_64.reverse();
+                               rc_num = rc_num | mrs2.insert(data_buffer_64, 0, 16);
+                               rc_num = rc_num | mrs2.extractPreserve(&MRS2, 0, 16, 0);
+                               if (rc_num)
+                               {
+                                   FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                   rc_buff.setEcmdError(rc_num);
+                                   return rc_buff;
+                               }
+                               FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 2 RP %d VALUE: 0x%04X", i_target.toEcmdString(), port_number, rank_pair_group, MRS2);
+
+                               rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR3_PRI_RP3_P1_0x8001C31F0301143F, data_buffer_64);
+                                if(rc) return rc;
+                               rc_num = rc_num | data_buffer_64.reverse();
+                               rc_num = rc_num | mrs3.insert(data_buffer_64, 0, 16);
+                               rc_num = rc_num | mrs3.extractPreserve(&MRS3, 0, 16, 0);
+                               if (rc_num)
+                               {
+                                   FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                   rc_buff.setEcmdError(rc_num);
+                                   return rc_buff;
+                               }
+                               FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 3 RP %d VALUE: 0x%04X", i_target.toEcmdString(), port_number, rank_pair_group, MRS3);
+
+                                if (dram_gen == ENUM_ATTR_EFF_DRAM_GEN_DDR4)
+                                {
+                                        rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR0_SEC_RP3_P1_0x8001C3200301143F, data_buffer_64);
+                                        if(rc) return rc;
+                                        rc_num = rc_num | data_buffer_64.reverse();
+                                        rc_num = rc_num | mrs4.insert(data_buffer_64, 0, 16);
+                                        rc_num = rc_num | mrs4.extractPreserve(&MRS4, 0, 16, 0);
+                                        if (rc_num)
+                                        {
+                                            FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                            rc_buff.setEcmdError(rc_num);
+                                            return rc_buff;
+                                        }
+                                        FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 4 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS4);
+
+                                        rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR1_SEC_RP3_P1_0x8001C3210301143F, data_buffer_64);
+                                        if(rc) return rc;
+                                        rc_num = rc_num | data_buffer_64.reverse();
+                                        rc_num = rc_num | mrs5.insert(data_buffer_64, 0, 16);
+                                        rc_num = rc_num | mrs5.extractPreserve(&MRS5, 0, 16, 0);
+                                        if (rc_num)
+                                        {
+                                            FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                            rc_buff.setEcmdError(rc_num);
+                                            return rc_buff;
+                                        }
+                                        FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 5 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS5);
+
+                                        rc = fapiGetScom(i_target, DPHY01_DDRPHY_PC_MR2_SEC_RP3_P1_0x8001C3220301143F, data_buffer_64);
+                                        if(rc) return rc;
+                                        rc_num = rc_num | data_buffer_64.reverse();
+                                        rc_num = rc_num | mrs6.insert(data_buffer_64, 0, 16);
+                                        rc_num = rc_num | mrs6.extractPreserve(&MRS6, 0, 16, 0);
+                                        if (rc_num)
+                                        {
+                                            FAPI_ERR( "mss_draminit: Error setting up buffers");
+                                            rc_buff.setEcmdError(rc_num);
+                                            return rc_buff;
+                                        }
+                                        FAPI_INF( "%s PORT %d SHADOW REGISTER MRS 6 RP %d VALUE: 0x%04X",  i_target.toEcmdString(), port_number, rank_pair_group, MRS6);
+                                }
+
+                        }
+
+                }
+                }
+            }
+        }
+
+        if ( (dram_gen == ENUM_ATTR_EFF_DRAM_GEN_DDR4) && (dimm_type == fapi::ENUM_ATTR_EFF_DIMM_TYPE_RDIMM || dimm_type == fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM) )
         {
            FAPI_INF("Performing B-side address inversion MPR write pattern");
 
@@ -1113,12 +1546,6 @@ ReturnCode mss_draminit_cloned(Target& i_target)
            if (rc) return rc;
         }
 
-	if (rc_num)
-	{
-	    FAPI_ERR( "mss_draminit: Error setting up buffers");
-	    rc_buff.setEcmdError(rc_num);
-	    return rc_buff;
-	}
 
 
         // TODO:
@@ -1230,7 +1657,7 @@ ReturnCode mss_rcd_load(
     uint8_t num_ranks_array[2][2]; //[port][dimm]
     uint64_t rcd_array[2][2]; //[port][dimm]
     uint8_t dimm_type;
-            
+
     rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_TYPE, &i_target, dimm_type);
     if(rc) return rc;
     rc = FAPI_ATTR_GET(ATTR_EFF_NUM_RANKS_PER_DIMM, &i_target, num_ranks_array);
@@ -1280,7 +1707,7 @@ ReturnCode mss_rcd_load(
         else
         {
             FAPI_INF( "RCD SETTINGS FOR %s PORT%d DIMM%d ", i_target.toEcmdString(), i_port_number, dimm_number);
-	    FAPI_INF( "RCD Control Word: 0x%016llX", rcd_array[i_port_number][dimm_number]);
+            FAPI_INF( "RCD Control Word: 0x%016llX", rcd_array[i_port_number][dimm_number]);
 
             if (rc_num)
             {
@@ -1312,7 +1739,7 @@ ReturnCode mss_rcd_load(
             // Propogate through the 16, 4-bit control words
             for ( rcd_number = 0; rcd_number<= 15; rcd_number++)
             {
-		rc_num = rc_num | bank_3.clearBit(0, 3);
+                rc_num = rc_num | bank_3.clearBit(0, 3);
                 rc_num = rc_num | address_16.clearBit(0, 16);
 
                 rc_num = rc_num | rcd_cntl_wrd_64.setDoubleWord(0, rcd_array[i_port_number][dimm_number]);
@@ -1341,12 +1768,12 @@ ReturnCode mss_rcd_load(
                 }
 
 
-	        if (rc_num)
-	        {
-	           FAPI_ERR( "mss_rcd_load: Error setting up buffers");
-	           rc_buff.setEcmdError(rc_num);
-	           return rc_buff;
-	        }
+                if (rc_num)
+                {
+                   FAPI_ERR( "mss_rcd_load: Error setting up buffers");
+                   rc_buff.setEcmdError(rc_num);
+                   return rc_buff;
+                }
 
                 rc = mss_ccs_inst_arry_0( i_target,
                                           io_ccs_inst_cnt,
@@ -1374,12 +1801,6 @@ ReturnCode mss_rcd_load(
                 if(rc) return rc;
                 io_ccs_inst_cnt ++;
 
-                if (rc_num)
-                {
-                    FAPI_ERR( "mss_rcd_load: Error setting up buffers");
-                    rc_buff.setEcmdError(rc_num);
-                    return rc_buff;
-                }
             }
         }
     }
@@ -1507,7 +1928,7 @@ ReturnCode mss_mrs_load(
 
     if (dram_wr == 16)
     {
-	dram_wr = 0x00;
+        dram_wr = 0x00;
     }
     else if (dram_wr == 5)
     {
@@ -1762,7 +2183,7 @@ ReturnCode mss_mrs_load(
                               csn_8,
                               odt_4,
                               ddr_cal_type_4,
-                              i_port_number);	
+                              i_port_number);
     if(rc) return rc;
     rc = mss_ccs_inst_arry_1( i_target,
                               io_ccs_inst_cnt,
@@ -1787,13 +2208,13 @@ ReturnCode mss_mrs_load(
         }
         else
         {
-          
+
             if (dimm_type == ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM)
             {
                 rc = FAPI_ATTR_GET(ATTR_LRDIMM_RANK_MULT_MODE, &i_target, lrdimm_rank_mult_mode);
                 if(rc) return rc;
 
-                if ( (lrdimm_rank_mult_mode == 4) && (num_ranks == 8) ) 
+                if ( (lrdimm_rank_mult_mode == 4) && (num_ranks == 8) )
                 {
                    num_ranks = 2;
                 }
@@ -1817,7 +2238,7 @@ ReturnCode mss_mrs_load(
                     rc_num = rc_num | mrs0.insert((uint8_t) dll_precharge, 12, 1);
                     rc_num = rc_num | mrs0.insert((uint8_t) 0x00, 13, 3);
 
-	            rc_num = rc_num | mrs0.extractPreserve(&MRS0, 0, 16, 0);
+                    rc_num = rc_num | mrs0.extractPreserve(&MRS0, 0, 16, 0);
 
                     if ( lrdimm_rank_mult_mode != 0 )
                     {
@@ -1849,8 +2270,8 @@ ReturnCode mss_mrs_load(
                     }
                     else
                     {
-			//DECONFIG and FFDC INFO
-			const fapi::Target & TARGET_MBA_ERROR = i_target;
+                        //DECONFIG and FFDC INFO
+                        const fapi::Target & TARGET_MBA_ERROR = i_target;
                         const uint8_t & IMP = dram_rtt_nom[i_port_number][dimm_number][rank_number];
                         const uint32_t & PORT = i_port_number;
                         const uint32_t & DIMM = dimm_number;
@@ -1884,7 +2305,7 @@ ReturnCode mss_mrs_load(
                     rc_num = rc_num | mrs1.insert((uint8_t) q_off, 12, 1, 0);
                     rc_num = rc_num | mrs1.insert((uint8_t) 0x00, 13, 3);
 
-        	    rc_num = rc_num | mrs1.extractPreserve(&MRS1, 0, 16, 0);
+                    rc_num = rc_num | mrs1.extractPreserve(&MRS1, 0, 16, 0);
 
 
                     if ( (lrdimm_rank_mult_mode != 0) && (rank_number > 1) )
@@ -1903,11 +2324,11 @@ ReturnCode mss_mrs_load(
                     {
                         dram_rtt_wr[i_port_number][dimm_number][rank_number] = 0x40;
                     }
-		    else
-		    {
+                    else
+                    {
 
-			//DECONFIG and FFDC INFO
-			const fapi::Target & TARGET_MBA_ERROR = i_target;
+                        //DECONFIG and FFDC INFO
+                        const fapi::Target & TARGET_MBA_ERROR = i_target;
                         const uint8_t & IMP = dram_rtt_nom[i_port_number][dimm_number][rank_number];
                         const uint32_t & PORT = i_port_number;
                         const uint32_t & DIMM = dimm_number;
@@ -1926,16 +2347,16 @@ ReturnCode mss_mrs_load(
                     rc_num = rc_num | mrs2.insert((uint8_t) dram_rtt_wr[i_port_number][dimm_number][rank_number], 9, 2);
                     rc_num = rc_num | mrs2.insert((uint8_t) 0x00, 11, 5);
 
-        	    rc_num = rc_num | mrs2.extractPreserve(&MRS2, 0, 16, 0);
+                    rc_num = rc_num | mrs2.extractPreserve(&MRS2, 0, 16, 0);
 
                     rc_num = rc_num | mrs3.insert((uint8_t) mpr_loc, 0, 2);
                     rc_num = rc_num | mrs3.insert((uint8_t) mpr_op, 2, 1);
                     rc_num = rc_num | mrs3.insert((uint16_t) 0x0000, 3, 13);
 
-        	    rc_num = rc_num | mrs3.extractPreserve(&MRS3, 0, 16, 0);
-        	    FAPI_INF( "MRS 0: 0x%04X", MRS0);
-        	    FAPI_INF( "MRS 1: 0x%04X", MRS1);
-        	    FAPI_INF( "MRS 2: 0x%04X", MRS2);	
+                    rc_num = rc_num | mrs3.extractPreserve(&MRS3, 0, 16, 0);
+                    FAPI_INF( "MRS 0: 0x%04X", MRS0);
+                    FAPI_INF( "MRS 1: 0x%04X", MRS1);
+                    FAPI_INF( "MRS 2: 0x%04X", MRS2);
                     FAPI_INF( "MRS 3: 0x%04X", MRS3);
 
                     if (rc_num)
@@ -1958,28 +2379,28 @@ ReturnCode mss_mrs_load(
                         if (mrs_number == 0)
                         {
                             rc_num = rc_num | address_16.insert(mrs2, 0, 16, 0);
-			    rc_num = rc_num | bank_3.insert((uint8_t) MRS2_BA, 0, 1, 7);
+                            rc_num = rc_num | bank_3.insert((uint8_t) MRS2_BA, 0, 1, 7);
                             rc_num = rc_num | bank_3.insert((uint8_t) MRS2_BA, 1, 1, 6);
                             rc_num = rc_num | bank_3.insert((uint8_t) MRS2_BA, 2, 1, 5);
                         }
                         else if ( mrs_number == 1)
                         {
                             rc_num = rc_num | address_16.insert(mrs3, 0, 16, 0);
-			    rc_num = rc_num | bank_3.insert((uint8_t) MRS3_BA, 0, 1, 7);
+                            rc_num = rc_num | bank_3.insert((uint8_t) MRS3_BA, 0, 1, 7);
                             rc_num = rc_num | bank_3.insert((uint8_t) MRS3_BA, 1, 1, 6);
                             rc_num = rc_num | bank_3.insert((uint8_t) MRS3_BA, 2, 1, 5);
                         }
                         else if ( mrs_number == 2)
                         {
                             rc_num = rc_num | address_16.insert(mrs1, 0, 16, 0);
-			    rc_num = rc_num | bank_3.insert((uint8_t) MRS1_BA, 0, 1, 7);
+                            rc_num = rc_num | bank_3.insert((uint8_t) MRS1_BA, 0, 1, 7);
                             rc_num = rc_num | bank_3.insert((uint8_t) MRS1_BA, 1, 1, 6);
                             rc_num = rc_num | bank_3.insert((uint8_t) MRS1_BA, 2, 1, 5);
                         }
                         else if ( mrs_number == 3)
                         {
                             rc_num = rc_num | address_16.insert(mrs0, 0, 16, 0);
-			    rc_num = rc_num | bank_3.insert((uint8_t) MRS0_BA, 0, 1, 7);
+                            rc_num = rc_num | bank_3.insert((uint8_t) MRS0_BA, 0, 1, 7);
                             rc_num = rc_num | bank_3.insert((uint8_t) MRS0_BA, 1, 1, 6);
                             rc_num = rc_num | bank_3.insert((uint8_t) MRS0_BA, 2, 1, 5);
                         }
@@ -1991,15 +2412,15 @@ ReturnCode mss_mrs_load(
                             return rc_buff;
                         }
 
-		        if (( address_mirror_map[i_port_number][dimm_number] & (0x08 >> rank_number) ) && (is_sim == 0))
-			{
-		            rc = mss_address_mirror_swizzle(i_target, i_port_number, dimm_number, rank_number, address_16, bank_3);
+                        if (( address_mirror_map[i_port_number][dimm_number] & (0x08 >> rank_number) ) && (is_sim == 0))
+                        {
+                            rc = mss_address_mirror_swizzle(i_target, i_port_number, dimm_number, rank_number, address_16, bank_3);
                             if(rc) return rc;
-			}
+                        }
 
 
-			if (dram_2n_mode  == ENUM_ATTR_VPD_DRAM_2N_MODE_ENABLED_TRUE)
-			{
+                        if (dram_2n_mode  == ENUM_ATTR_VPD_DRAM_2N_MODE_ENABLED_TRUE)
+                        {
 
                         // Send out to the CCS array a "setup" cycle
                         rc = mss_ccs_inst_arry_0( i_target,
@@ -2029,7 +2450,7 @@ ReturnCode mss_mrs_load(
 
                         io_ccs_inst_cnt ++;
 
-			}
+                        }
 
                         // Send out to the CCS array
                         rc = mss_ccs_inst_arry_0( i_target,
diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_ddr4_funcs.C b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_ddr4_funcs.C
new file mode 100644
index 0000000..9454c34
--- /dev/null
+++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_ddr4_funcs.C
@@ -0,0 +1,2447 @@
+/* IBM_PROLOG_BEGIN_TAG                                                   */
+/* This is an automatically generated prolog.                             */
+/*                                                                        */
+/* $Source: src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_ddr4_funcs.C $ */
+/*                                                                        */
+/* OpenPOWER HostBoot Project                                             */
+/*                                                                        */
+/* Contributors Listed Below - COPYRIGHT 2015                             */
+/* [+] International Business Machines Corp.                              */
+/*                                                                        */
+/*                                                                        */
+/* Licensed under the Apache License, Version 2.0 (the "License");        */
+/* you may not use this file except in compliance with the License.       */
+/* You may obtain a copy of the License at                                */
+/*                                                                        */
+/*     http://www.apache.org/licenses/LICENSE-2.0                         */
+/*                                                                        */
+/* Unless required by applicable law or agreed to in writing, software    */
+/* distributed under the License is distributed on an "AS IS" BASIS,      */
+/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or        */
+/* implied. See the License for the specific language governing           */
+/* permissions and limitations under the License.                         */
+/*                                                                        */
+/* IBM_PROLOG_END_TAG                                                     */
+// $Id: mss_ddr4_funcs.C,v 1.15 2015/08/28 18:15:08 sglancy Exp $
+//------------------------------------------------------------------------------
+// *! (C) Copyright International Business Machines Corp. 2013
+// *! All Rights Reserved -- Property of IBM
+// *! ***  ***
+//------------------------------------------------------------------------------
+// *! TITLE : mss_ddr4_funcs.C
+// *! DESCRIPTION : Tools for DDR4 DIMMs centaur procedures
+// *! OWNER NAME : jdsloat@us.ibm.com
+// *! BACKUP NAME : sglancy@us.ibm.com
+// #! ADDITIONAL COMMENTS :
+//
+
+//------------------------------------------------------------------------------
+// Don't forget to create CVS comments when you check in your changes!
+//------------------------------------------------------------------------------
+// CHANGE HISTORY:
+//------------------------------------------------------------------------------
+// Version:|  Author: |  Date:  | Comment:
+//---------|----------|---------|-----------------------------------------------
+//         |          |         |
+//  1.15   | 08/28/15 | sglancy | Added RCs - addressed FW comments
+//  1.14   | 08/21/15 | sglancy | Fixed ODT initialization bug - ODT must be held low through ZQ cal 
+//  1.13   | 08/05/15 | kmack   | Commented out FAPI_DDR4 code
+//  1.12   | 07/31/15 | kmack   | Mostly removed and changed comments.  Reviewed some questions about the code. No real functional changes
+//         |          |         | Need new ATTRIBUTE, see comments with FIXME
+//  1.11   | 07/15/15 | sglancy | Addeded DDR4 Register functions and changes for DDR4 LRDIMM
+//  1.10   | 05/14/15 | sglancy | Addeded DDR4 Register functions and changes for DDR4 3DS
+//  1.7    | 03/14/14 | kcook   | Addeded DDR4 Register functions
+//  1.6    | 01/10/14 | kcook   | Updated Address mirroring swizzle (removed DIMM_TYPE_CDIMM) and
+//         |          |         | added DDR4 RDIMM support
+//  1.5    | 12/03/13 | kcook   | Updated VPD attributes.
+//  1.4    | 11/27/13 | bellows | Added using namespace fapi
+//  1.3    | 10/10/13 | bellows | Added required cvs id tag
+//  1.2    | 10/09/13 | jdsloat | Added CONSTs
+//  1.1    | 10/04/13 | jdsloat | First revision
+
+
+//----------------------------------------------------------------------
+//  Includes
+//----------------------------------------------------------------------
+#include <fapi.H>
+#include <mss_funcs.H>
+#include <cen_scom_addresses.H>
+#include <mss_ddr4_funcs.H>
+
+using namespace fapi;
+
+//#ifdef FAPI_DDR4
+
+const uint8_t MAX_NUM_DIMMS = 2;
+const uint8_t MRS0_BA = 0;
+const uint8_t MRS1_BA = 1;
+const uint8_t MRS2_BA = 2;
+const uint8_t MRS3_BA = 3;
+const uint8_t MRS4_BA = 4;
+const uint8_t MRS5_BA = 5;
+const uint8_t MRS6_BA = 6;
+
+const uint8_t PORT_SIZE = 2;
+
+ReturnCode mss_ddr4_invert_mpr_write( Target& i_target_mba) {
+   ReturnCode rc;
+    uint32_t rank_number;
+
+    ReturnCode rc_buff;
+    uint32_t rc_num = 0;
+
+    ecmdDataBufferBase address_16(16);
+    ecmdDataBufferBase bank_3(3);
+    ecmdDataBufferBase activate_1(1);
+    rc_num = rc_num | activate_1.setBit(0);
+    ecmdDataBufferBase rasn_1(1);
+    rc_num = rc_num | rasn_1.clearBit(0);
+    ecmdDataBufferBase casn_1(1);
+    rc_num = rc_num | casn_1.clearBit(0);
+    ecmdDataBufferBase wen_1(1);
+    rc_num = rc_num | wen_1.clearBit(0);
+    ecmdDataBufferBase cke_4(4);
+    rc_num = rc_num | cke_4.setBit(0,4);
+    ecmdDataBufferBase csn_8(8);
+    rc_num = rc_num | csn_8.setBit(0,8);
+    ecmdDataBufferBase odt_4(4);
+    rc_num = rc_num | odt_4.clearBit(0,4);
+    ecmdDataBufferBase ddr_cal_type_4(4);
+
+    ecmdDataBufferBase num_idles_16(16);
+    ecmdDataBufferBase num_repeat_16(16);
+    ecmdDataBufferBase data_20(20);
+    ecmdDataBufferBase read_compare_1(1);
+    ecmdDataBufferBase rank_cal_4(4);
+    ecmdDataBufferBase ddr_cal_enable_1(1);
+    ecmdDataBufferBase ccs_end_1(1);
+
+    ecmdDataBufferBase mrs3(16);
+    uint16_t MRS3 = 0;
+    uint8_t mpr_op; // MPR Op
+
+    ecmdDataBufferBase data_buffer(64);
+
+    uint32_t io_ccs_inst_cnt = 0;
+
+    uint16_t num_ranks = 0;
+    uint8_t mpr_pattern = 0xAA;
+    
+    if(rc_num)
+    {
+    	rc.setEcmdError(rc_num);
+    	return rc;
+    }
+    
+    uint8_t num_ranks_array[2][2]; //[port][dimm]
+    rc = FAPI_ATTR_GET(ATTR_EFF_NUM_RANKS_PER_DIMM, &i_target_mba, num_ranks_array);
+    if(rc) return rc;
+
+    uint8_t num_master_ranks_array[2][2]; //[port][dimm]
+    rc = FAPI_ATTR_GET(ATTR_EFF_NUM_MASTER_RANKS_PER_DIMM, &i_target_mba, num_master_ranks_array);
+    if(rc) return rc;
+
+    uint8_t is_sim = 0;
+    rc = FAPI_ATTR_GET(ATTR_IS_SIMULATION, NULL, is_sim);
+    if(rc) return rc;
+
+    uint8_t address_mirror_map[2][2]; //address_mirror_map[port][dimm]
+    rc = FAPI_ATTR_GET(ATTR_VPD_DRAM_ADDRESS_MIRRORING, &i_target_mba, address_mirror_map);
+    if(rc) return rc;
+
+   uint8_t dram_stack[2][2];
+    rc = FAPI_ATTR_GET(ATTR_EFF_STACK_TYPE, &i_target_mba, dram_stack);
+    if(rc) return rc;
+
+   for (uint8_t l_port = 0; l_port < PORT_SIZE; l_port++) {
+      // Raise CKE high with NOPS, waiting min Reset CKE exit time (tXPR) - 400 cycles
+      rc_num = rc_num | csn_8.setBit(0,8);
+      rc_num = rc_num | address_16.clearBit(0, 16);
+      rc_num = rc_num | num_idles_16.insertFromRight((uint32_t) 400, 0, 16);
+
+       FAPI_INF( "Stack Type in mss_ddr4_invert_mpr_write : %d\n", dram_stack[0][0]);
+      if (dram_stack[0][0] == ENUM_ATTR_EFF_STACK_TYPE_STACK_3DS)
+      {
+         FAPI_INF( "=============  Got in the 3DS stack loop =====================\n");
+         rc_num = rc_num | csn_8.clearBit(2,2);
+         rc_num = rc_num | csn_8.clearBit(6,2);
+        // COMMENT IN LATER!!!!!! rc_num = rc_num | cke_4.clearBit(1);
+      }
+
+      if(rc_num)
+      {
+          rc.setEcmdError(rc_num);
+          return rc;
+      }
+      rc = mss_ccs_inst_arry_0( i_target_mba,
+                                io_ccs_inst_cnt,
+                                address_16,
+                                bank_3,
+                                activate_1,
+                                rasn_1,
+                                casn_1,
+                                wen_1,
+                                cke_4,
+                                csn_8,
+                                odt_4,
+                                ddr_cal_type_4,
+                                l_port);
+      if(rc) return rc;
+      rc = mss_ccs_inst_arry_1( i_target_mba,
+                                io_ccs_inst_cnt,
+                                num_idles_16,
+                                num_repeat_16,
+                                data_20,
+                                read_compare_1,
+                                rank_cal_4,
+                                ddr_cal_enable_1,
+                                ccs_end_1);
+      if(rc) return rc;
+      io_ccs_inst_cnt ++;
+
+      for (uint8_t l_dimm = 0; l_dimm < MAX_NUM_DIMMS; l_dimm++) {
+         if (dram_stack[0][0] == ENUM_ATTR_EFF_STACK_TYPE_STACK_3DS)
+         {
+            num_ranks = num_master_ranks_array[l_port][l_dimm];
+         }
+         else {
+            num_ranks = num_ranks_array[l_port][l_dimm];
+         }
+
+         if (num_ranks == 0)
+         {
+            FAPI_INF( "PORT%d DIMM%d not configured. Num_ranks: %d ", l_port, l_dimm, num_ranks);
+         }
+         else
+         {
+            // Rank 0-3
+            for ( rank_number = 0; rank_number < num_ranks; rank_number++)
+            {
+
+                rc_num = rc_num | csn_8.setBit(0,8);
+                rc_num = rc_num | csn_8.clearBit(rank_number+4*l_dimm);
+                rc_num = rc_num | address_16.clearBit(0, 16);
+
+                // MRS CMD to CMD spacing = 12 cycles
+                rc_num = rc_num | num_idles_16.insertFromRight((uint32_t) 24, 0, 16);
+                if(rc_num)
+                {
+                    rc.setEcmdError(rc_num);
+                    return rc;
+                }
+
+                if (l_port == 0) {
+                    rc = fapiGetScom(i_target_mba, DPHY01_DDRPHY_PC_MR3_PRI_RP0_P0_0x8000C01F0301143F, data_buffer); // Need to look up Rank Group???
+		    if(rc) return rc;
+                }
+                else if ( l_port == 1 ) {
+                    rc = fapiGetScom(i_target_mba, DPHY01_DDRPHY_PC_MR3_PRI_RP0_P1_0x8001C01F0301143F, data_buffer); // Need to look up Rank Group???
+		    if(rc) return rc;
+                }
+
+                rc_num = rc_num | data_buffer.reverse();
+                rc_num = rc_num | mrs3.insert(data_buffer, 0, 16, 0);
+                rc_num = rc_num | mrs3.extractPreserve(&MRS3, 0, 16, 0);
+
+                if(rc_num)
+                {
+                    rc.setEcmdError(rc_num);
+                    return rc;
+                }
+
+                FAPI_INF( "CURRENT MRS 3: 0x%04X", MRS3);
+
+                mpr_op = 0xff;
+
+                rc_num = rc_num | mrs3.insert((uint8_t) mpr_op, 2, 1);
+
+                rc_num = rc_num | mrs3.extractPreserve(&MRS3, 0, 16, 0);
+                FAPI_INF( "Set data flow from MPR, New MRS 3: 0x%04X", MRS3);
+
+                if (rc_num)
+                {
+                    FAPI_ERR( " Error setting up buffers");
+                    rc_buff.setEcmdError(rc_num);
+                    return rc_buff;
+                }
+
+
+                rc_num = rc_num | address_16.insert(mrs3, 0, 16, 0);
+                rc_num = rc_num | bank_3.insert((uint8_t) MRS3_BA, 0, 1, 7);
+                rc_num = rc_num | bank_3.insert((uint8_t) MRS3_BA, 1, 1, 6);
+                rc_num = rc_num | bank_3.insert((uint8_t) MRS3_BA, 2, 1, 5);
+
+                // Indicate B-Side DRAMS BG1=1
+                rc_num = rc_num | address_16.setBit(15);  // Set BG1 = 1
+
+                rc_num = rc_num | address_16.flipBit(3,7); // Invert A3:A9
+                rc_num = rc_num | address_16.flipBit(11);  // Invert A11
+                rc_num = rc_num | address_16.flipBit(13);  // Invert A13
+                rc_num = rc_num | address_16.flipBit(14);  // Invert A17
+                rc_num = rc_num | bank_3.flipBit(0,3);     // Invert BA0,BA1,BG0
+
+                if (rc_num)
+                {
+                    FAPI_ERR( " Error setting up buffers");
+                    rc_buff.setEcmdError(rc_num);
+                    return rc_buff;
+                }
+
+
+                if (( address_mirror_map[l_port][l_dimm] & (0x08 >> rank_number) ) && (is_sim == 0))
+                {
+                    rc = mss_address_mirror_swizzle(i_target_mba, l_port, l_dimm, rank_number, address_16, bank_3);
+                    if(rc) return rc;
+                }
+
+                // Send out to the CCS array
+                rc = mss_ccs_inst_arry_0( i_target_mba,
+                                  io_ccs_inst_cnt,
+                                  address_16,
+                                  bank_3,
+                                  activate_1,
+                                  rasn_1,
+                                  casn_1,
+                                  wen_1,
+                                  cke_4,
+                                  csn_8,
+                                  odt_4,
+                                  ddr_cal_type_4,
+                                  l_port);
+                if(rc) return rc;
+                rc = mss_ccs_inst_arry_1( i_target_mba,
+                                  io_ccs_inst_cnt,
+                                  num_idles_16,
+                                  num_repeat_16,
+                                  data_20,
+                                  read_compare_1,
+                                  rank_cal_4,
+                                  ddr_cal_enable_1,
+                                  ccs_end_1);
+                if(rc) return rc;
+                io_ccs_inst_cnt ++;
+
+
+                // Write pattern to MPR register
+                //Command structure setup
+                rc_num = rc_num | cke_4.flushTo1();
+                rc_num = rc_num | rasn_1.setBit(0);
+                rc_num = rc_num | casn_1.clearBit(0);
+                rc_num = rc_num | wen_1.clearBit(0);
+
+
+                //Final setup
+                rc_num = rc_num | odt_4.flushTo0();
+                rc_num = rc_num | ddr_cal_type_4.flushTo0();
+                rc_num = rc_num | activate_1.setBit(0);
+
+
+                //CCS Array 1 Setup
+                rc_num = rc_num | num_idles_16.insertFromRight((uint32_t) 24, 0, 16);
+                rc_num = rc_num | num_repeat_16.flushTo0();
+                rc_num = rc_num | data_20.flushTo0();
+                rc_num = rc_num | read_compare_1.flushTo0();
+                rc_num = rc_num | rank_cal_4.flushTo0();
+                rc_num = rc_num | ddr_cal_enable_1.flushTo0();
+                rc_num = rc_num | ccs_end_1.flushTo0();
+
+                rc_num = rc_num | address_16.clearBit(0, 16);
+                rc_num = rc_num | address_16.insertFromRight(mpr_pattern,0, 8);
+
+                rc_num = rc_num | bank_3.insert((uint8_t) MRS3_BA, 0, 1, 7);
+                rc_num = rc_num | bank_3.insert((uint8_t) MRS3_BA, 1, 1, 6);
+                rc_num = rc_num | bank_3.insert((uint8_t) MRS3_BA, 2, 1, 5);
+
+                // Indicate B-Side DRAMS BG1=1
+                rc_num = rc_num | address_16.setBit(15);  // Set BG1 = 1
+
+                rc_num = rc_num | address_16.flipBit(3,7); // Invert A3:A9
+                rc_num = rc_num | address_16.flipBit(11);  // Invert A11
+                rc_num = rc_num | address_16.flipBit(13);  // Invert A13
+                rc_num = rc_num | address_16.flipBit(14);  // Invert A17
+                rc_num = rc_num | bank_3.flipBit(0,3);     // Invert BA0,BA1,BG0
+
+                if (rc_num)
+                {
+                    FAPI_ERR( " Error setting up buffers");
+                    rc_buff.setEcmdError(rc_num);
+                    return rc_buff;
+                }
+
+
+                if (( address_mirror_map[l_port][l_dimm] & (0x08 >> rank_number) ) && (is_sim == 0))
+                {
+                    rc = mss_address_mirror_swizzle(i_target_mba, l_port, l_dimm, rank_number, address_16, bank_3);
+                    if(rc) return rc;
+                }
+
+                FAPI_INF( "Writing MPR register with 0101 pattern");
+                // Send out to the CCS array
+                rc = mss_ccs_inst_arry_0( i_target_mba,
+                                  io_ccs_inst_cnt,
+                                  address_16,
+                                  bank_3,
+                                  activate_1,
+                                  rasn_1,
+                                  casn_1,
+                                  wen_1,
+                                  cke_4,
+                                  csn_8,
+                                  odt_4,
+                                  ddr_cal_type_4,
+                                  l_port);
+                if(rc) return rc;
+                rc = mss_ccs_inst_arry_1( i_target_mba,
+                                  io_ccs_inst_cnt,
+                                  num_idles_16,
+                                  num_repeat_16,
+                                  data_20,
+                                  read_compare_1,
+                                  rank_cal_4,
+                                  ddr_cal_enable_1,
+                                  ccs_end_1);
+                if(rc) return rc;
+                io_ccs_inst_cnt ++;
+
+                // Restore MR3 to normal MPR operation
+                //Command structure setup
+                rc_num = rc_num | cke_4.flushTo1();
+                rc_num = rc_num | rasn_1.clearBit(0);
+                rc_num = rc_num | casn_1.clearBit(0);
+                rc_num = rc_num | wen_1.clearBit(0);
+
+                rc_num = rc_num | read_compare_1.clearBit(0);
+
+                rc_num = rc_num | odt_4.flushTo0();
+                rc_num = rc_num | ddr_cal_type_4.flushTo0();
+                rc_num = rc_num | activate_1.setBit(0);
+
+                rc_num = rc_num | num_repeat_16.flushTo0();
+                rc_num = rc_num | data_20.flushTo0();
+                rc_num = rc_num | read_compare_1.flushTo0();
+                rc_num = rc_num | rank_cal_4.flushTo0();
+                rc_num = rc_num | ddr_cal_enable_1.flushTo0();
+                rc_num = rc_num | ccs_end_1.flushTo0();
+
+                rc_num = rc_num | address_16.clearBit(0, 16);
+
+                // MRS CMD to CMD spacing = 12 cycles
+                rc_num = rc_num | num_idles_16.insertFromRight((uint32_t) 24, 0, 16);
+                if(rc_num)
+                {
+                    rc.setEcmdError(rc_num);
+                    return rc;
+                }
+
+                if (l_port == 0) {
+                    rc = fapiGetScom(i_target_mba, DPHY01_DDRPHY_PC_MR3_PRI_RP0_P0_0x8000C01F0301143F, data_buffer); // Need to look up Rank Group???
+		    if(rc) return rc;
+                }
+                else if ( l_port == 1 ) {
+                    rc = fapiGetScom(i_target_mba, DPHY01_DDRPHY_PC_MR3_PRI_RP0_P1_0x8001C01F0301143F, data_buffer); // Need to look up Rank Group???
+		    if(rc) return rc;
+                }
+
+                rc_num = rc_num | data_buffer.reverse();
+                rc_num = rc_num | mrs3.insert(data_buffer, 0, 16, 0);
+                rc_num = rc_num | mrs3.extractPreserve(&MRS3, 0, 16, 0);
+
+                if(rc_num)
+                {
+                    rc.setEcmdError(rc_num);
+                    return rc;
+                }
+
+                FAPI_INF( "CURRENT MRS 3: 0x%04X", MRS3);
+
+                mpr_op = 0x00;
+
+                rc_num = rc_num | mrs3.insert((uint8_t) mpr_op, 2, 1);
+
+                rc_num = rc_num | mrs3.extractPreserve(&MRS3, 0, 16, 0);
+                FAPI_INF( "Set data flow from MPR, New MRS 3: 0x%04X", MRS3);
+
+                if (rc_num)
+                {
+                    FAPI_ERR( " Error setting up buffers");
+                    rc_buff.setEcmdError(rc_num);
+                    return rc_buff;
+                }
+
+
+                rc_num = rc_num | address_16.insert(mrs3, 0, 16, 0);
+                rc_num = rc_num | bank_3.insert((uint8_t) MRS3_BA, 0, 1, 7);
+                rc_num = rc_num | bank_3.insert((uint8_t) MRS3_BA, 1, 1, 6);
+                rc_num = rc_num | bank_3.insert((uint8_t) MRS3_BA, 2, 1, 5);
+
+                // Indicate B-Side DRAMS BG1=1
+                rc_num = rc_num | address_16.setBit(15);  // Set BG1 = 1
+
+                rc_num = rc_num | address_16.flipBit(3,7); // Invert A3:A9
+                rc_num = rc_num | address_16.flipBit(11);  // Invert A11
+                rc_num = rc_num | address_16.flipBit(13);  // Invert A13
+                rc_num = rc_num | address_16.flipBit(14);  // Invert A17
+                rc_num = rc_num | bank_3.flipBit(0,3);     // Invert BA0,BA1,BG0
+
+
+                if (( address_mirror_map[l_port][l_dimm] & (0x08 >> rank_number) ) && (is_sim == 0))
+                {
+                    rc = mss_address_mirror_swizzle(i_target_mba, l_port, l_dimm, rank_number, address_16, bank_3);
+                    if(rc) return rc;
+                }
+
+
+                if (rc_num)
+                {
+                    FAPI_ERR( " Error setting up buffers");
+                    rc_buff.setEcmdError(rc_num);
+                    return rc_buff;
+                }
+
+                // Send out to the CCS array
+                rc = mss_ccs_inst_arry_0( i_target_mba,
+                                  io_ccs_inst_cnt,
+                                  address_16,
+                                  bank_3,
+                                  activate_1,
+                                  rasn_1,
+                                  casn_1,
+                                  wen_1,
+                                  cke_4,
+                                  csn_8,
+                                  odt_4,
+                                  ddr_cal_type_4,
+                                  l_port);
+                if(rc) return rc;
+                rc = mss_ccs_inst_arry_1( i_target_mba,
+                                  io_ccs_inst_cnt,
+                                  num_idles_16,
+                                  num_repeat_16,
+                                  data_20,
+                                  read_compare_1,
+                                  rank_cal_4,
+                                  ddr_cal_enable_1,
+                                  ccs_end_1);
+                if(rc) return rc;
+                io_ccs_inst_cnt ++;
+
+             }
+          }
+      }
+   }
+
+   uint32_t NUM_POLL = 100;
+   rc = mss_execute_ccs_inst_array( i_target_mba, NUM_POLL, 60);
+
+   return rc;
+}
+
+ReturnCode mss_create_rcd_ddr4(const Target& i_target_mba) {
+   ReturnCode rc;
+   uint32_t rc_num = 0;
+
+   uint8_t l_rcd_cntl_word_0_1;
+   uint8_t l_rcd_cntl_word_2;
+   uint8_t l_rcd_cntl_word_3;
+   uint8_t l_rcd_cntl_word_4;
+   uint8_t l_rcd_cntl_word_5;
+   uint8_t l_rcd_cntl_word_6_7;
+   uint8_t l_rcd_cntl_word_8_9;
+   uint8_t l_rcd_cntl_word_10;
+   uint8_t l_rcd_cntl_word_11;
+   uint8_t l_rcd_cntl_word_12;
+   uint8_t l_rcd_cntl_word_13;
+   uint8_t l_rcd_cntl_word_14;
+   uint8_t l_rcd_cntl_word_15;
+   uint64_t l_rcd_cntl_word_0_15;
+   uint8_t stack_type[PORT_SIZE][MAX_NUM_DIMMS];
+   uint64_t l_attr_eff_dimm_rcd_cntl_word_0_15[PORT_SIZE][MAX_NUM_DIMMS];
+   uint8_t l_num_ranks_per_dimm_u8array[PORT_SIZE][MAX_NUM_DIMMS];
+   uint8_t l_num_master_ranks_per_dimm_u8array[PORT_SIZE][MAX_NUM_DIMMS];
+   uint8_t l_dimm_type_u8;
+   uint8_t l_dram_width_u8;
+   ecmdDataBufferBase data_buffer_8(8);
+   ecmdDataBufferBase data_buffer_64(64);
+
+
+   rc = FAPI_ATTR_GET(ATTR_EFF_NUM_MASTER_RANKS_PER_DIMM,&i_target_mba, l_num_master_ranks_per_dimm_u8array); if(rc) return rc;
+   rc = FAPI_ATTR_GET(ATTR_EFF_STACK_TYPE, &i_target_mba, stack_type); if(rc) return rc;
+   rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_TYPE, &i_target_mba, l_dimm_type_u8); if(rc) return rc;
+   rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_RCD_CNTL_WORD_0_15, &i_target_mba, l_attr_eff_dimm_rcd_cntl_word_0_15); if(rc) return rc;
+   rc = FAPI_ATTR_GET(ATTR_EFF_NUM_RANKS_PER_DIMM, &i_target_mba, l_num_ranks_per_dimm_u8array); if(rc) return rc;
+   rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_WIDTH, &i_target_mba, l_dram_width_u8); if(rc) return rc;
+
+   uint64_t l_attr_eff_dimm_cntl_word_x;
+
+   uint8_t l_rcd_cntl_word_1x;
+   uint8_t l_rcd_cntl_word_2x;
+   uint8_t l_rcd_cntl_word_3x;
+   uint8_t l_rcd_cntl_word_7x;
+   uint8_t l_rcd_cntl_word_8x;
+   uint8_t l_rcd_cntl_word_9x;
+   uint8_t l_rcd_cntl_word_Ax;
+   uint8_t l_rcd_cntl_word_Bx;
+
+   //FIXME: ATTR_MCBIST_MAX_TIMEOUT is being used until firmware is ready with a new attribute, ATTR_EFF_LRDIMM_WORD_X (subject to change)
+   rc = FAPI_ATTR_GET(ATTR_MCBIST_MAX_TIMEOUT, &i_target_mba, l_attr_eff_dimm_cntl_word_x); if(rc) return rc;
+
+   fapi::Target l_target_centaur;
+   uint32_t l_mss_freq = 0;
+   uint32_t l_mss_volt = 0;
+   rc = fapiGetParentChip(i_target_mba, l_target_centaur); if(rc) return rc;
+   rc = FAPI_ATTR_GET(ATTR_MSS_FREQ, &l_target_centaur, l_mss_freq); if(rc) return rc;
+   rc = FAPI_ATTR_GET(ATTR_MSS_VOLT, &l_target_centaur, l_mss_volt); if(rc) return rc;
+
+   for (uint8_t l_port = 0; l_port < PORT_SIZE; l_port++) {
+      for (uint8_t l_dimm = 0; l_dimm < MAX_NUM_DIMMS; l_dimm++) {
+
+         // Global Features, Clock Driver Enable Control Words
+         l_rcd_cntl_word_0_1   = 0x00;
+
+         // Timing and IBT Control Word
+         l_rcd_cntl_word_2 = 0;
+
+         // CA and CS Signals Driver Characteristics Control Word
+         if (l_num_ranks_per_dimm_u8array[l_port][l_dimm] > 1) {
+            l_rcd_cntl_word_3   = 6; // QxCS0_n...QxCS3_n Outputs strong drive, Address/Command moderate drive
+         } else {
+            l_rcd_cntl_word_3   = 5; // QxCS0_n...QxCS3_n Outputs moderate drive, Address/Command moderate drive
+         }
+
+         l_rcd_cntl_word_4     = 5;    // QxODT0...QxODT1 and QxCKE0...QxCKE1 Output Drivers moderate drive
+         l_rcd_cntl_word_5     = 5;    // Clock Y1_t, Y1_c, Y3_t, Y3_c and Y0_t, Y0_c, Y2_t, Y2_c Output Drivers moderate drive
+
+         // Command Space Control Word
+         l_rcd_cntl_word_6_7 = 0xf0; // No op
+         // Input/Output Configuration, Power Saving Settings Control Words
+         if(stack_type[l_port][l_dimm] == ENUM_ATTR_EFF_STACK_TYPE_STACK_3DS) {
+            //no master ranks found, then program to disable all CIDs
+            //master ranks should always be found so this is a bit weird - might want to throw an error here
+            if(l_num_master_ranks_per_dimm_u8array[l_port][l_dimm] == 0) {
+               l_rcd_cntl_word_8_9 = 0x30;
+            }
+            //determine stack density - 2H, 4H, or 8H
+            else {
+               uint8_t stack_height = l_num_ranks_per_dimm_u8array[l_port][l_dimm] / l_num_master_ranks_per_dimm_u8array[l_port][l_dimm];
+               FAPI_INF("3DS RCD set stack_height: %d",stack_height);
+               if(stack_height == 8) {
+                  l_rcd_cntl_word_8_9 = 0x00;
+               }
+               else if(stack_height == 4) {
+                  l_rcd_cntl_word_8_9 = 0x10;
+               }
+               else if(stack_height == 2) {
+                  l_rcd_cntl_word_8_9 = 0x20;
+               }
+               //weird, we shouldn't have 1H stacks
+               else {
+                  l_rcd_cntl_word_8_9 = 0x30;
+               }
+            }
+         }
+
+         //LR DIMM and 4 ranks
+         else if(l_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM && l_num_ranks_per_dimm_u8array[l_port][l_dimm] == 4) {
+            FAPI_INF("Creating RCD value for F0rC08 - LRDDIMM and 4 ranks -> 0x10");
+            l_rcd_cntl_word_8_9 = 0x10;
+         }
+         else {
+            l_rcd_cntl_word_8_9 = 0x30;
+         }
+
+         // RDIMM Operating Speed Control Word
+         if ( l_mss_freq <= 1733 ) {        // 1600
+            l_rcd_cntl_word_10 = 0;
+         } else if ( l_mss_freq <= 2000 ) { // 1866
+            l_rcd_cntl_word_10 = 1;
+         } else if ( l_mss_freq <= 2266 ) { // 2133
+            l_rcd_cntl_word_10 = 2;
+         } else if ( l_mss_freq <= 2533 ) { // 2400
+            l_rcd_cntl_word_10 = 3;
+         } else if ( l_mss_freq <= 2800 ) { // 2666
+            l_rcd_cntl_word_10 = 4;
+         } else if ( l_mss_freq <= 3333 ) { // 3200
+            l_rcd_cntl_word_10 = 5;
+         } else {
+            FAPI_ERR("Invalid LRDIMM ATTR_MSS_FREQ = %d on %s!", l_mss_freq, i_target_mba.toEcmdString());
+            FAPI_SET_HWP_ERROR(rc, RC_MSS_PLACE_HOLDER_ERROR); return rc;
+         }
+
+         // Operating Voltage VDD and VREFCA Source Control Word
+         if ( l_mss_volt >= 1120 ) {        // 1.2V
+            l_rcd_cntl_word_11 = 14;
+         } else if ( l_mss_volt >= 1020 ) { // 1.0xV
+            l_rcd_cntl_word_11 = 15;
+         } else {
+            FAPI_ERR("Invalid LRDIMM ATTR_MSS_VOLT = %d on %s!", l_mss_volt, i_target_mba.toEcmdString());
+            FAPI_SET_HWP_ERROR(rc, RC_MSS_PLACE_HOLDER_ERROR); return rc;
+         }
+
+         // Training Control Word
+         l_rcd_cntl_word_12 = 0;
+
+         // DIMM Configuration Control words
+         data_buffer_8.clearBit(0,8);
+         if ( l_num_ranks_per_dimm_u8array[l_port][l_dimm] == 4 ) {
+            rc_num |= data_buffer_8.setBit(3); // Direct QuadCS mode
+         }
+         if ( l_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_RDIMM  ) {
+            rc_num |= data_buffer_8.setBit(1);
+         }
+         if ( l_num_ranks_per_dimm_u8array[l_port][l_dimm] > 1 ) {
+            rc_num |= data_buffer_8.setBit(0); // Address mirroring for MRS commands
+         }
+
+         rc_num |= data_buffer_8.extractToRight( &l_rcd_cntl_word_13, 0, 4);
+
+         // Parity Control Word
+         l_rcd_cntl_word_14 = 0;
+
+         // Command Latency Adder Control Word
+         if ( l_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_RDIMM  ) {
+            l_rcd_cntl_word_15 = 4; // 0nCk latency adder
+         }
+         else {
+            l_rcd_cntl_word_15 = 0; // 1nCk latency adder with DB control bus
+         }
+
+         rc_num |= data_buffer_64.insertFromRight(&l_rcd_cntl_word_0_1, 0 , 8);
+         rc_num |= data_buffer_64.insertFromRight(&l_rcd_cntl_word_2,   8 , 4);
+         rc_num |= data_buffer_64.insertFromRight(&l_rcd_cntl_word_3,   12, 4);
+         rc_num |= data_buffer_64.insertFromRight(&l_rcd_cntl_word_4,   16, 4);
+         rc_num |= data_buffer_64.insertFromRight(&l_rcd_cntl_word_5,   20, 4);
+         rc_num |= data_buffer_64.insertFromRight(&l_rcd_cntl_word_6_7, 24, 8);
+         rc_num |= data_buffer_64.insertFromRight(&l_rcd_cntl_word_8_9, 32, 8);
+         rc_num |= data_buffer_64.insertFromRight(&l_rcd_cntl_word_10,  40, 4);
+         rc_num |= data_buffer_64.insertFromRight(&l_rcd_cntl_word_11,  44, 4);
+         rc_num |= data_buffer_64.insertFromRight(&l_rcd_cntl_word_12,  48, 4);
+         rc_num |= data_buffer_64.insertFromRight(&l_rcd_cntl_word_13,  52, 4);
+         rc_num |= data_buffer_64.insertFromRight(&l_rcd_cntl_word_14,  56, 4);
+         rc_num |= data_buffer_64.insertFromRight(&l_rcd_cntl_word_15,  60, 4);
+	 
+	 if(rc_num)
+         {
+             rc.setEcmdError(rc_num);
+             return rc;
+         }
+	 
+         l_rcd_cntl_word_0_15 = data_buffer_64.getDoubleWord(0); if(rc) return rc;
+         l_attr_eff_dimm_rcd_cntl_word_0_15[l_port][l_dimm] =  l_rcd_cntl_word_0_15;
+
+         // Set RCD control word x
+
+         // RC1x Internal VREF CW
+         l_rcd_cntl_word_1x = 0;
+
+         // RC2x I2C Bus Control Word
+         l_rcd_cntl_word_2x = 0;
+
+         // RC3x Fine Granularity  RDIMM Operating Speed Control Word
+         if ( l_mss_freq > 1240 && l_mss_freq < 3200 ) {
+            l_rcd_cntl_word_3x = int ((l_mss_freq - 1250) / 20);
+         } else {
+            FAPI_ERR("Invalid DIMM ATTR_MSS_FREQ = %d on %s!", l_mss_freq, i_target_mba.toEcmdString());
+            FAPI_SET_HWP_ERROR(rc, RC_MSS_PLACE_HOLDER_ERROR); return rc;
+         }
+
+         // RC7x IBT Control Word
+         l_rcd_cntl_word_7x = 0;
+
+         // RC8x ODT Input Buffer/IBT, QxODT Output Buffer and Timing Control Word
+         l_rcd_cntl_word_8x = 0;
+
+         // RC9x QxODT[1:0] Write Pattern CW
+         l_rcd_cntl_word_9x = 0;
+
+         // RCAx QxODT[1:0] Read Pattern CW
+         l_rcd_cntl_word_Ax = 0;
+
+         // RCBx IBT and MRS Snoop CW
+         if ( l_num_ranks_per_dimm_u8array[l_port][l_dimm] == 4 ) {
+            l_rcd_cntl_word_Bx = 4;
+         } else {
+            l_rcd_cntl_word_Bx = 7;
+         }
+
+
+         rc_num |= data_buffer_64.insertFromRight(&l_rcd_cntl_word_1x, 0 , 8);
+         rc_num |= data_buffer_64.insertFromRight(&l_rcd_cntl_word_2x, 8 , 8);
+         rc_num |= data_buffer_64.insertFromRight(&l_rcd_cntl_word_3x, 16, 8);
+         rc_num |= data_buffer_64.insertFromRight(&l_rcd_cntl_word_7x, 24, 8);
+         rc_num |= data_buffer_64.insertFromRight(&l_rcd_cntl_word_8x, 32, 8);
+         rc_num |= data_buffer_64.insertFromRight(&l_rcd_cntl_word_9x, 40, 8);
+         rc_num |= data_buffer_64.insertFromRight(&l_rcd_cntl_word_Ax, 48, 8);
+         rc_num |= data_buffer_64.insertFromRight(&l_rcd_cntl_word_Bx, 56, 8);
+	 if(rc_num)
+         {
+             rc.setEcmdError(rc_num);
+             return rc;
+         }
+
+         l_attr_eff_dimm_cntl_word_x = data_buffer_64.getDoubleWord(0); if(rc) return rc;
+         FAPI_INF("from data buffer: rcd control word X %llX", l_attr_eff_dimm_cntl_word_x );
+
+      } // end dimm loop
+   } // end port loop
+
+   rc = FAPI_ATTR_SET(ATTR_EFF_DIMM_RCD_CNTL_WORD_0_15, &i_target_mba, l_attr_eff_dimm_rcd_cntl_word_0_15); if(rc) return rc;
+
+   //FIXME: ATTR_MCBIST_MAX_TIMEOUT is being used until firmware is ready with a new attribute, ATTR_EFF_LRDIMM_WORD_X (subject to change)
+   rc = FAPI_ATTR_SET(ATTR_MCBIST_MAX_TIMEOUT, &i_target_mba, l_attr_eff_dimm_cntl_word_x); if(rc) return rc;
+
+   return rc;
+
+}
+
+ReturnCode mss_rcd_load_ddr4(
+            Target& i_target,
+            uint32_t i_port_number,
+            uint32_t& io_ccs_inst_cnt
+            )    {
+
+    ReturnCode rc;
+    ReturnCode rc_buff;
+    uint32_t rc_num = 0;
+    uint32_t dimm_number;
+    uint32_t rcd_number;
+
+    ecmdDataBufferBase rcd_cntl_wrd_4(8);
+    ecmdDataBufferBase rcd_cntl_wrd_8(8);
+    ecmdDataBufferBase rcd_cntl_wrd_64(64);
+    uint16_t num_ranks;
+
+    ecmdDataBufferBase address_16(16);
+    ecmdDataBufferBase bank_3(3);
+    ecmdDataBufferBase activate_1(1);
+    ecmdDataBufferBase rasn_1(1);
+    rc_num = rc_num | rasn_1.setBit(0);
+    ecmdDataBufferBase casn_1(1);
+    rc_num = rc_num | casn_1.setBit(0);
+    ecmdDataBufferBase wen_1(1);
+    rc_num = rc_num | wen_1.setBit(0);
+    ecmdDataBufferBase cke_4(4);
+    rc_num = rc_num | cke_4.setBit(0,4);
+    ecmdDataBufferBase csn_8(8);
+    rc_num = rc_num | csn_8.setBit(0,8);
+    ecmdDataBufferBase odt_4(4);
+    rc_num = rc_num | odt_4.clearBit(0,4);
+    ecmdDataBufferBase ddr_cal_type_4(4);
+
+    ecmdDataBufferBase num_idles_16(16);
+    ecmdDataBufferBase num_repeat_16(16);
+    ecmdDataBufferBase data_20(20);
+    ecmdDataBufferBase read_compare_1(1);
+    ecmdDataBufferBase rank_cal_4(4);
+    ecmdDataBufferBase ddr_cal_enable_1(1);
+    ecmdDataBufferBase ccs_end_1(1);
+    
+    if(rc_num)
+    {
+    	rc.setEcmdError(rc_num);
+    	return rc;
+    }
+	 
+    uint8_t num_ranks_array[2][2]; //[port][dimm]
+    uint64_t rcd_array[2][2]; //[port][dimm]
+    uint8_t dimm_type;
+
+    rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_TYPE, &i_target, dimm_type);
+    if(rc) return rc;
+    rc = FAPI_ATTR_GET(ATTR_EFF_NUM_RANKS_PER_DIMM, &i_target, num_ranks_array);
+    if(rc) return rc;
+    rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_RCD_CNTL_WORD_0_15, &i_target, rcd_array);
+    if(rc) return rc;
+
+    uint32_t cntlx_offset[]= {1,2,3,7,8,9,10,11};
+    // Dummy attribute for addtitional cntl words
+    uint64_t rcdx_array;
+    // uint64_t rcdx_array[2][2];
+
+    //FIXME: ATTR_MCBIST_MAX_TIMEOUT is being used until firmware is ready with a new attribute, ATTR_EFF_LRDIMM_WORD_X (subject to change)
+    rc = FAPI_ATTR_GET(ATTR_MCBIST_MAX_TIMEOUT, &i_target, rcdx_array);
+    if(rc) return rc;
+
+    // Raise CKE high with NOPS, waiting min Reset CKE exit time (tXPR) - 400 cycles
+    rc_num = rc_num | address_16.clearBit(0, 16);
+    rc_num = rc_num | num_idles_16.insertFromRight((uint32_t) 400, 0, 16);
+    rc = mss_ccs_inst_arry_0( i_target,
+                              io_ccs_inst_cnt,
+                              address_16,
+                              bank_3,
+                              activate_1,
+                              rasn_1,
+                              casn_1,
+                              wen_1,
+                              cke_4,
+                              csn_8,
+                              odt_4,
+                              ddr_cal_type_4,
+                              i_port_number);
+    if(rc) return rc;
+    rc = mss_ccs_inst_arry_1( i_target,
+                              io_ccs_inst_cnt,
+                              num_idles_16,
+                              num_repeat_16,
+                              data_20,
+                              read_compare_1,
+                              rank_cal_4,
+                              ddr_cal_enable_1,
+                              ccs_end_1);
+    if(rc) return rc;
+    io_ccs_inst_cnt ++;
+
+    FAPI_INF( "+++++++++++++++++++++ LOADING RCD CONTROL WORDS FOR %s PORT %d +++++++++++++++++++++", i_target.toEcmdString(), i_port_number);
+
+    for ( dimm_number = 0; dimm_number < MAX_NUM_DIMMS; dimm_number++)
+    {
+        num_ranks = num_ranks_array[i_port_number][dimm_number];
+
+        if (num_ranks == 0)
+        {
+            FAPI_INF( "PORT%d DIMM%d not configured. Num_ranks: %d", i_port_number, dimm_number, num_ranks);
+        }
+        else
+        {
+            FAPI_INF( "RCD SETTINGS FOR %s PORT%d DIMM%d ", i_target.toEcmdString(), i_port_number, dimm_number);
+            FAPI_INF( "RCD Control Word: 0x%016llX", rcd_array[i_port_number][dimm_number]);
+            //FAPI_INF( "RCD Control Word X: 0x%016llX", rcdx_array[i_port_number][dimm_number]);
+            FAPI_INF( "RCD Control Word X: 0x%016llX", rcdx_array);
+
+            if (rc_num)
+            {
+                FAPI_ERR( "mss_rcd_load: Error setting up buffers");
+                rc_buff.setEcmdError(rc_num);
+                return rc_buff;
+            }
+
+            // ALL active CS lines at a time.
+            rc_num = rc_num | csn_8.setBit(0,8);
+            rc_num = rc_num | csn_8.clearBit(0); //DCS0_n is LOW
+
+            // DBG1, DBG0, DBA1, DBA0 = 4`b0111
+            rc_num = rc_num | bank_3.setBit(0, 3);
+            // DACT_n is HIGH
+            rc_num = rc_num | activate_1.setBit(0);
+            // RAS_n/CAS_n/WE_n are LOW
+            rc_num = rc_num | rasn_1.clearBit(0);
+            rc_num = rc_num | casn_1.clearBit(0);
+            rc_num = rc_num | wen_1.clearBit(0);
+
+            // Propogate through the 16, 4-bit control words
+            for ( rcd_number = 0; rcd_number<= 15; rcd_number++)
+            {
+                //rc_num = rc_num | bank_3.clearBit(0, 3);
+                rc_num = rc_num | address_16.clearBit(0, 16);
+
+                rc_num = rc_num | rcd_cntl_wrd_64.setDoubleWord(0, rcd_array[i_port_number][dimm_number]);
+                rc_num = rc_num | rcd_cntl_wrd_64.extract(rcd_cntl_wrd_4, 4*rcd_number, 4);
+
+                //control word number code bits A[7:4]
+                rc_num = rc_num | address_16.insert(rcd_number, 7, 1, 28);
+                rc_num = rc_num | address_16.insert(rcd_number, 6, 1, 29);
+                rc_num = rc_num | address_16.insert(rcd_number, 5, 1, 30);
+                rc_num = rc_num | address_16.insert(rcd_number, 4, 1, 31);
+
+                //control word values RCD0 = A0, RCD1 = A1, RCD2 = A2, RCD3 = A3
+                rc_num = rc_num | address_16.insert(rcd_cntl_wrd_4, 0, 1, 3);
+                rc_num = rc_num | address_16.insert(rcd_cntl_wrd_4, 1, 1, 2);
+                rc_num = rc_num | address_16.insert(rcd_cntl_wrd_4, 2, 1, 1);
+                rc_num = rc_num | address_16.insert(rcd_cntl_wrd_4, 3, 1, 0);
+
+                // Send out to the CCS array
+                //if ( dimm_type == ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM && (rcd_number == 2 || rcd_number == 10) )
+                if ( rcd_number == 2 || rcd_number == 10 )
+                {
+                   rc_num = rc_num | num_idles_16.insertFromRight((uint32_t) 4000, 0 , 16 ); // wait tStab for clock timing rcd words
+                }
+                else
+                {
+                   rc_num = rc_num | num_idles_16.insertFromRight((uint32_t) 12, 0, 16);
+                }
+
+
+                if (rc_num)
+                {
+                   FAPI_ERR( "mss_rcd_load: Error setting up buffers");
+                   rc_buff.setEcmdError(rc_num);
+                   return rc_buff;
+                }
+
+                rc = mss_ccs_inst_arry_0( i_target,
+                                          io_ccs_inst_cnt,
+                                          address_16,
+                                          bank_3,
+                                          activate_1,
+                                          rasn_1,
+                                          casn_1,
+                                          wen_1,
+                                          cke_4,
+                                          csn_8,
+                                          odt_4,
+                                          ddr_cal_type_4,
+                                          i_port_number);
+                if(rc) return rc;
+                rc = mss_ccs_inst_arry_1( i_target,
+                                          io_ccs_inst_cnt,
+                                          num_idles_16,
+                                          num_repeat_16,
+                                          data_20,
+                                          read_compare_1,
+                                          rank_cal_4,
+                                          ddr_cal_enable_1,
+                                          ccs_end_1);
+                if(rc) return rc;
+                io_ccs_inst_cnt ++;
+
+                if (rc_num)
+                {
+                    FAPI_ERR( "mss_rcd_load: Error setting up buffers");
+                    rc_buff.setEcmdError(rc_num);
+                    return rc_buff;
+                }
+            }
+
+            // 8-bit Control words
+            for ( rcd_number = 0; rcd_number<= 7; rcd_number++)
+            {
+                //rc_num = rc_num | bank_3.clearBit(0, 3);
+                rc_num = rc_num | address_16.clearBit(0, 16);
+
+                //rc_num = rc_num | rcd_cntl_wrd_64.setDoubleWord(0, rcdx_array[i_port_number][dimm_number]);
+                rc_num = rc_num | rcd_cntl_wrd_64.setDoubleWord(0, rcdx_array);
+                rc_num = rc_num | rcd_cntl_wrd_64.extract(rcd_cntl_wrd_8, 8*rcd_number, 8);
+
+                //control word number code bits A[11:8]
+                rc_num = rc_num | address_16.insert(cntlx_offset[rcd_number], 11, 1, 28);
+                rc_num = rc_num | address_16.insert(cntlx_offset[rcd_number], 10, 1, 29);
+                rc_num = rc_num | address_16.insert(cntlx_offset[rcd_number],  9, 1, 30);
+                rc_num = rc_num | address_16.insert(cntlx_offset[rcd_number],  8, 1, 31);
+
+                //control word values RCD0 = A0, RCD1 = A1, RCD2 = A2, RCD3 = A3, RCD4=A4, RCD5=A5, RCD6=A6, RCD7=A7
+                rc_num = rc_num | address_16.insert(rcd_cntl_wrd_8, 0, 1, 7);
+                rc_num = rc_num | address_16.insert(rcd_cntl_wrd_8, 1, 1, 6);
+                rc_num = rc_num | address_16.insert(rcd_cntl_wrd_8, 2, 1, 5);
+                rc_num = rc_num | address_16.insert(rcd_cntl_wrd_8, 3, 1, 4);
+                rc_num = rc_num | address_16.insert(rcd_cntl_wrd_8, 4, 1, 3);
+                rc_num = rc_num | address_16.insert(rcd_cntl_wrd_8, 5, 1, 2);
+                rc_num = rc_num | address_16.insert(rcd_cntl_wrd_8, 6, 1, 1);
+                rc_num = rc_num | address_16.insert(rcd_cntl_wrd_8, 7, 1, 0);
+
+                // Send out to the CCS array
+                if ( rcd_number == 2 ) // CW RC3x
+                {
+                   rc_num = rc_num | num_idles_16.insertFromRight((uint32_t) 4000, 0 , 16 ); // wait tStab for clock timing rcd words
+                }
+                else
+                {
+                   rc_num = rc_num | num_idles_16.insertFromRight((uint32_t) 12, 0, 16);
+                }
+
+                if (rc_num)
+                {
+                   FAPI_ERR( "mss_rcd_load: Error setting up buffers");
+                   rc_buff.setEcmdError(rc_num);
+                   return rc_buff;
+                }
+
+                rc = mss_ccs_inst_arry_0( i_target,
+                                          io_ccs_inst_cnt,
+                                          address_16,
+                                          bank_3,
+                                          activate_1,
+                                          rasn_1,
+                                          casn_1,
+                                          wen_1,
+                                          cke_4,
+                                          csn_8,
+                                          odt_4,
+                                          ddr_cal_type_4,
+                                          i_port_number);
+                if(rc) return rc;
+                rc = mss_ccs_inst_arry_1( i_target,
+                                          io_ccs_inst_cnt,
+                                          num_idles_16,
+                                          num_repeat_16,
+                                          data_20,
+                                          read_compare_1,
+                                          rank_cal_4,
+                                          ddr_cal_enable_1,
+                                          ccs_end_1);
+                if(rc) return rc;
+                io_ccs_inst_cnt ++;
+
+                if (rc_num)
+                {
+                    FAPI_ERR( "mss_rcd_load: Error setting up buffers");
+                    rc_buff.setEcmdError(rc_num);
+                    return rc_buff;
+                }
+            }
+        }
+    }
+    
+    rc = mss_ccs_set_end_bit( i_target, io_ccs_inst_cnt-1);
+    if(rc)
+    {
+        FAPI_ERR("CCS_SET_END_BIT FAILED rc = 0x%08X (creator = %d)", uint32_t(rc), rc.getCreator());
+        return rc;
+    }
+    io_ccs_inst_cnt = 0;
+    
+    rc = mss_execute_ccs_inst_array(i_target, 10, 10);
+    if(rc)
+    {
+        FAPI_ERR(" EXECUTE_CCS_INST_ARRAY FAILED rc = 0x%08X (creator = %d)", uint32_t(rc), rc.getCreator());
+        return rc;
+    }
+    
+    
+    return rc;
+}
+
+ReturnCode mss_mrs_load_ddr4(
+            Target& i_target,
+            uint32_t i_port_number,
+            uint32_t& io_ccs_inst_cnt
+            )
+{
+
+    uint32_t dimm_number;
+    uint32_t rank_number;
+    uint32_t mrs_number;
+    ReturnCode rc;
+    ReturnCode rc_buff;
+    uint32_t rc_num = 0;
+    ecmdDataBufferBase data_buffer_64(64);
+    ecmdDataBufferBase address_16(16);
+    ecmdDataBufferBase bank_3(3);
+    ecmdDataBufferBase activate_1(1);
+    rc_num = rc_num | activate_1.setBit(0);
+    ecmdDataBufferBase rasn_1(1);
+    rc_num = rc_num | rasn_1.clearBit(0);
+    ecmdDataBufferBase casn_1(1);
+    rc_num = rc_num | casn_1.clearBit(0);
+    ecmdDataBufferBase wen_1(1);
+    rc_num = rc_num | wen_1.clearBit(0);
+    ecmdDataBufferBase cke_4(4);
+    rc_num = rc_num | cke_4.clearBit(0,4);
+    ecmdDataBufferBase csn_8(8);
+    rc_num = rc_num | csn_8.clearBit(0,8);
+    ecmdDataBufferBase odt_4(4);
+    rc_num = rc_num | odt_4.clearBit(0,4);
+    ecmdDataBufferBase ddr_cal_type_4(4);
+
+    ecmdDataBufferBase num_idles_16(16);
+    ecmdDataBufferBase num_idles_16_vref_train(16);
+    rc_num = rc_num | num_idles_16_vref_train.insertFromRight((uint32_t) 160, 0, 16);
+
+    if(rc_num) {
+       rc.setEcmdError(rc_num);
+       return rc;
+    }
+
+    ecmdDataBufferBase num_repeat_16(16);
+    ecmdDataBufferBase data_20(20);
+    ecmdDataBufferBase read_compare_1(1);
+    ecmdDataBufferBase rank_cal_4(4);
+    ecmdDataBufferBase ddr_cal_enable_1(1);
+    ecmdDataBufferBase ccs_end_1(1);
+
+    ecmdDataBufferBase mrs0(16);
+    ecmdDataBufferBase mrs1(16);
+    ecmdDataBufferBase mrs2(16);
+    ecmdDataBufferBase mrs3(16);
+    ecmdDataBufferBase mrs4(16);
+    ecmdDataBufferBase mrs5(16);
+    ecmdDataBufferBase mrs6(16);
+    ecmdDataBufferBase mrs6_train_on(16);
+    uint16_t MRS0 = 0;
+    uint16_t MRS1 = 0;
+    uint16_t MRS2 = 0;
+    uint16_t MRS3 = 0;
+    uint16_t MRS4 = 0;
+    uint16_t MRS5 = 0;
+    uint16_t MRS6 = 0;
+
+    ecmdDataBufferBase data_buffer(64);
+
+
+    uint16_t num_ranks = 0;
+
+    FAPI_INF( "+++++++++++++++++++++ LOADING MRS SETTINGS FOR PORT %d +++++++++++++++++++++", i_port_number);
+
+    uint8_t num_ranks_array[2][2]; //[port][dimm]
+    rc = FAPI_ATTR_GET(ATTR_EFF_NUM_RANKS_PER_DIMM, &i_target, num_ranks_array);
+    if(rc) return rc;
+
+    uint8_t num_master_ranks_array[2][2]; //[port][dimm]
+    rc = FAPI_ATTR_GET(ATTR_EFF_NUM_MASTER_RANKS_PER_DIMM, &i_target, num_master_ranks_array);
+    if(rc) return rc;
+
+    uint8_t dimm_type;
+    rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_TYPE, &i_target, dimm_type);
+    if(rc) return rc;
+
+    uint8_t is_sim = 0;
+    rc = FAPI_ATTR_GET(ATTR_IS_SIMULATION, NULL, is_sim);
+    if(rc) return rc;
+
+    uint8_t address_mirror_map[2][2]; //address_mirror_map[port][dimm]
+    rc = FAPI_ATTR_GET(ATTR_VPD_DRAM_ADDRESS_MIRRORING, &i_target, address_mirror_map);
+    if(rc) return rc;
+
+
+    // WORKAROUNDS
+    rc = fapiGetScom(i_target, CCS_MODEQ_AB_REG_0x030106A7, data_buffer);
+    if(rc) return rc;
+    //Setting up CCS mode
+    rc_num = rc_num | data_buffer.setBit(51);
+    if(rc_num) {
+       rc.setEcmdError(rc_num);
+       return rc;
+    }
+    rc = fapiPutScom(i_target, CCS_MODEQ_AB_REG_0x030106A7, data_buffer);
+    if(rc) return rc;
+
+    rc = fapiGetScom(i_target,  DPHY01_DDRPHY_WC_CONFIG3_P0_0x8000CC050301143F, data_buffer);
+    if(rc) return rc;
+    //Setting up CCS mode
+    rc_num = rc_num | data_buffer.clearBit(48);
+    if(rc_num) {
+       rc.setEcmdError(rc_num);
+       return rc;
+    }
+    rc = fapiPutScom(i_target,  DPHY01_DDRPHY_WC_CONFIG3_P0_0x8000CC050301143F, data_buffer);
+    if(rc) return rc;
+
+
+    uint8_t dram_stack[2][2];
+    rc = FAPI_ATTR_GET(ATTR_EFF_STACK_TYPE, &i_target, dram_stack);
+    if(rc) return rc;
+
+    FAPI_INF( "Stack Type: %d\n", dram_stack[0][0]);
+    if (dram_stack[0][0] == ENUM_ATTR_EFF_STACK_TYPE_STACK_3DS)
+    {
+       FAPI_INF( "=============  Got in the 3DS stack loop CKE !!!!! =====================\n");
+       rc_num = rc_num | csn_8.clearBit(2,2);
+       rc_num = rc_num | csn_8.clearBit(6,2);
+       // COMMENT IN LATER!!!! rc_num = rc_num | cke_4.clearBit(1);
+       if(rc_num) {
+          rc.setEcmdError(rc_num);
+          return rc;
+       }
+    }
+
+    //Lines commented out in the following section are waiting for xml attribute adds
+    //MRS0
+    uint8_t dram_bl;
+    rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_BL, &i_target, dram_bl);
+    if(rc) return rc;
+    uint8_t read_bt; //Read Burst Type
+    rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_RBT, &i_target, read_bt);
+    if(rc) return rc;
+    uint8_t dram_cl;
+    rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_CL, &i_target, dram_cl);
+    if(rc) return rc;
+    uint8_t test_mode; //TEST MODE
+    rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_TM, &i_target, test_mode);
+    if(rc) return rc;
+    uint8_t dll_reset; //DLL Reset
+    rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_DLL_RESET, &i_target, dll_reset);
+    if(rc) return rc;
+    uint8_t dram_wr; //DRAM write recovery
+    rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_WR, &i_target, dram_wr);
+    if(rc) return rc;
+    uint8_t dram_rtp; //DRAM RTP - read to precharge
+    rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_WR, &i_target, dram_rtp);
+    if(rc) return rc;
+    uint8_t dll_precharge; //DLL Control For Precharge
+    rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_DLL_PPD, &i_target, dll_precharge);
+    if(rc) return rc;
+
+    if (dram_bl == ENUM_ATTR_EFF_DRAM_BL_BL8)
+    {
+        dram_bl = 0x00;
+    }
+    else if (dram_bl == ENUM_ATTR_EFF_DRAM_BL_OTF)
+    {
+        dram_bl = 0x80;
+    }
+    else if (dram_bl == ENUM_ATTR_EFF_DRAM_BL_BC4)
+    {
+        dram_bl = 0x40;
+    }
+
+    uint8_t dram_wr_rtp = 0x00;
+    if ( (dram_wr == 10) )//&& (dram_rtp == 5) )
+    {
+        dram_wr_rtp = 0x00;
+    }
+    else if ( (dram_wr == 12) )//&& (dram_rtp == 6) )
+    {
+        dram_wr_rtp = 0x80;
+    }
+    else if ( (dram_wr == 13) )//&& (dram_rtp == 7) )
+    {
+        dram_wr_rtp = 0x40;
+    }
+    else if ( (dram_wr == 14) )//&& (dram_rtp == 8) )
+    {
+        dram_wr_rtp = 0xC0;
+    }
+    else if ( (dram_wr == 18) )//&& (dram_rtp == 9) )
+    {
+        dram_wr_rtp = 0x20;
+    }
+    else if ( (dram_wr == 20) )//&& (dram_rtp == 10) )
+    {
+        dram_wr_rtp = 0xA0;
+    }
+    else if ( (dram_wr == 24) )//&& (dram_rtp == 12) )
+    {
+        dram_wr_rtp = 0x60;
+    }
+
+    if (read_bt == ENUM_ATTR_EFF_DRAM_RBT_SEQUENTIAL)
+    {
+        read_bt = 0x00;
+    }
+    else if (read_bt == ENUM_ATTR_EFF_DRAM_RBT_INTERLEAVE)
+    {
+        read_bt = 0xFF;
+    }
+
+    if ((dram_cl > 8)&&(dram_cl < 17))
+    {
+        dram_cl = dram_cl - 9;
+    }
+    else if ((dram_cl > 17)&&(dram_cl < 25))
+    {
+        dram_cl = (dram_cl >> 1) - 1;
+    }
+    dram_cl = mss_reverse_8bits(dram_cl);
+
+    if (test_mode == ENUM_ATTR_EFF_DRAM_TM_NORMAL)
+    {
+        test_mode = 0x00;
+    }
+    else if (test_mode == ENUM_ATTR_EFF_DRAM_TM_TEST)
+    {
+        test_mode = 0xFF;
+    }
+
+    if (dll_reset == ENUM_ATTR_EFF_DRAM_DLL_RESET_YES)
+    {
+        dll_reset = 0xFF;
+    }
+    else if (dll_reset == ENUM_ATTR_EFF_DRAM_DLL_RESET_NO)
+    {
+        dll_reset = 0x00;
+    }
+
+    if (dll_precharge == ENUM_ATTR_EFF_DRAM_DLL_PPD_SLOWEXIT)
+    {
+        dll_precharge = 0x00;
+    }
+    else if (dll_precharge == ENUM_ATTR_EFF_DRAM_DLL_PPD_FASTEXIT)
+    {
+        dll_precharge = 0xFF;
+    }
+
+    //MRS1
+    uint8_t dll_enable; //DLL Enable
+    rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_DLL_ENABLE, &i_target, dll_enable);
+    if(rc) return rc;
+    uint8_t out_drv_imp_cntl[2][2];
+    rc = FAPI_ATTR_GET(ATTR_VPD_DRAM_RON, &i_target, out_drv_imp_cntl);
+    if(rc) return rc;
+    uint8_t dram_rtt_nom[2][2][4];
+    rc = FAPI_ATTR_GET(ATTR_VPD_DRAM_RTT_NOM, &i_target, dram_rtt_nom);
+    if(rc) return rc;
+    uint8_t dram_al;
+    rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_AL, &i_target, dram_al);
+    if(rc) return rc;
+    uint8_t wr_lvl; //write leveling enable
+    rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_WR_LVL_ENABLE, &i_target, wr_lvl);
+    if(rc) return rc;
+    uint8_t tdqs_enable; //TDQS Enable
+    rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_TDQS, &i_target, tdqs_enable);
+    if(rc) return rc;
+    uint8_t q_off; //Qoff - Output buffer Enable
+    rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_OUTPUT_BUFFER, &i_target, q_off);
+    if(rc) return rc;
+
+    if (dll_enable == ENUM_ATTR_EFF_DRAM_DLL_ENABLE_DISABLE)
+    {
+        dll_enable = 0x00;
+    }
+    else if (dll_enable == ENUM_ATTR_EFF_DRAM_DLL_ENABLE_ENABLE)
+    {
+        dll_enable = 0xFF;
+    }
+
+    if (dram_al == ENUM_ATTR_EFF_DRAM_AL_DISABLE)
+    {
+        dram_al = 0x00;
+    }
+    else if (dram_al == ENUM_ATTR_EFF_DRAM_AL_CL_MINUS_1)
+    {
+        dram_al = 0x80;
+    }
+    else if (dram_al == ENUM_ATTR_EFF_DRAM_AL_CL_MINUS_2)
+    {
+        dram_al = 0x40;
+    }
+
+    if (wr_lvl == ENUM_ATTR_EFF_DRAM_WR_LVL_ENABLE_DISABLE)
+    {
+        wr_lvl = 0x00;
+    }
+    else if (wr_lvl == ENUM_ATTR_EFF_DRAM_WR_LVL_ENABLE_ENABLE)
+    {
+        wr_lvl = 0xFF;
+    }
+
+    if (tdqs_enable == ENUM_ATTR_EFF_DRAM_TDQS_DISABLE)
+    {
+        tdqs_enable = 0x00;
+    }
+    else if (tdqs_enable == ENUM_ATTR_EFF_DRAM_TDQS_ENABLE)
+    {
+        tdqs_enable = 0xFF;
+    }
+
+    if (q_off == ENUM_ATTR_EFF_DRAM_OUTPUT_BUFFER_DISABLE)
+    {
+        q_off = 0xFF;
+    }
+    else if (q_off == ENUM_ATTR_EFF_DRAM_OUTPUT_BUFFER_ENABLE)
+    {
+        q_off = 0x00;
+    }
+
+    //MRS2
+
+    uint8_t lpasr; // Low Power Auto Self-Refresh -- new not yet supported
+    rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_LPASR, &i_target, lpasr);
+    if(rc) return rc;
+    uint8_t cwl; // CAS Write Latency
+    rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_CWL, &i_target, cwl);
+    if(rc) return rc;
+    uint8_t dram_rtt_wr[2][2][4];
+    rc = FAPI_ATTR_GET(ATTR_VPD_DRAM_RTT_WR, &i_target, dram_rtt_wr);
+    if(rc) return rc;
+    uint8_t write_crc; // CAS Write Latency
+    rc = FAPI_ATTR_GET(ATTR_EFF_WRITE_CRC, &i_target, write_crc);
+    if(rc) return rc;
+
+    if (lpasr == ENUM_ATTR_EFF_DRAM_LPASR_MANUAL_NORMAL)
+    {
+        lpasr = 0x00;
+    }
+    else if (lpasr == ENUM_ATTR_EFF_DRAM_LPASR_MANUAL_REDUCED)
+    {
+        lpasr = 0x80;
+    }
+    else if (lpasr == ENUM_ATTR_EFF_DRAM_LPASR_MANUAL_EXTENDED)
+    {
+        lpasr = 0x40;
+    }
+    else if (lpasr == ENUM_ATTR_EFF_DRAM_LPASR_ASR)
+    {
+        lpasr = 0xFF;
+    }
+
+    if ((cwl > 8)&&(cwl < 13))
+    {
+        cwl = cwl - 9;
+    }
+    else if ((cwl > 13)&&(cwl < 19))
+    {
+        cwl = (cwl >> 1) - 3;
+    }
+    else
+    {
+       //no correcct value for CWL was found
+       FAPI_INF("ERROR: Improper CWL value found. Setting CWL to 9 and continuing...");
+       cwl = 0;
+    }
+    cwl = mss_reverse_8bits(cwl);
+
+    if ( write_crc == ENUM_ATTR_EFF_WRITE_CRC_ENABLE)
+    {
+        write_crc = 0xFF;
+    }
+    else if (write_crc == ENUM_ATTR_EFF_WRITE_CRC_DISABLE)
+    {
+        write_crc = 0x00;
+    }
+
+    //MRS3
+    uint8_t mpr_op; // MPR Op
+    rc = FAPI_ATTR_GET(ATTR_EFF_MPR_MODE, &i_target, mpr_op);
+    if(rc) return rc;
+    uint8_t mpr_page; // MPR Page Selection  - NEW
+    rc = FAPI_ATTR_GET(ATTR_EFF_MPR_PAGE, &i_target, mpr_page);
+    if(rc) return rc;
+    uint8_t geardown_mode; // Gear Down Mode  - NEW
+    rc = FAPI_ATTR_GET(ATTR_EFF_GEARDOWN_MODE, &i_target, geardown_mode);
+    if(rc) return rc;
+    uint8_t dram_access; // per dram accessibility  - NEW
+    rc = FAPI_ATTR_GET(ATTR_EFF_PER_DRAM_ACCESS, &i_target, dram_access);
+    if(rc) return rc;
+    uint8_t temp_readout; // Temperature sensor readout  - NEW
+    rc = FAPI_ATTR_GET(ATTR_EFF_TEMP_READOUT, &i_target, temp_readout);
+    if(rc) return rc;
+    uint8_t fine_refresh; // fine refresh mode  - NEW
+    rc = FAPI_ATTR_GET(ATTR_EFF_FINE_REFRESH_MODE, &i_target, fine_refresh);
+    if(rc) return rc;
+    uint8_t wr_latency; // write latency for CRC and DM  - NEW
+    rc = FAPI_ATTR_GET(ATTR_EFF_CRC_WR_LATENCY, &i_target, wr_latency);
+    if(rc) return rc;
+    uint8_t read_format; // MPR READ FORMAT  - NEW
+    rc = FAPI_ATTR_GET(ATTR_EFF_MPR_RD_FORMAT, &i_target, read_format);
+    if(rc) return rc;
+
+    if (mpr_op == ENUM_ATTR_EFF_MPR_MODE_ENABLE)
+    {
+        mpr_op = 0xFF;
+    }
+    else if (mpr_op == ENUM_ATTR_EFF_MPR_MODE_DISABLE)
+    {
+        mpr_op = 0x00;
+    }
+
+    mpr_page = mss_reverse_8bits(mpr_page);
+
+    if (dram_access == ENUM_ATTR_EFF_PER_DRAM_ACCESS_ENABLE)
+    {
+        dram_access = 0xFF;
+    }
+    else if (dram_access == ENUM_ATTR_EFF_PER_DRAM_ACCESS_DISABLE)
+    {
+        dram_access = 0x00;
+    }
+
+    if ( geardown_mode == ENUM_ATTR_EFF_GEARDOWN_MODE_HALF)
+    {
+         geardown_mode = 0x00;
+    }
+    else if ( geardown_mode == ENUM_ATTR_EFF_GEARDOWN_MODE_QUARTER)
+    {
+         geardown_mode = 0xFF;
+    }
+
+    if (temp_readout == ENUM_ATTR_EFF_TEMP_READOUT_ENABLE)
+    {
+        temp_readout = 0xFF;
+    }
+    else if (temp_readout == ENUM_ATTR_EFF_TEMP_READOUT_DISABLE)
+    {
+        temp_readout = 0x00;
+    }
+
+    if (fine_refresh == ENUM_ATTR_EFF_FINE_REFRESH_MODE_NORMAL)
+    {
+        fine_refresh = 0x00;
+    }
+    else if (fine_refresh == ENUM_ATTR_EFF_FINE_REFRESH_MODE_FIXED_2X)
+    {
+        fine_refresh = 0x80;
+    }
+    else if (fine_refresh == ENUM_ATTR_EFF_FINE_REFRESH_MODE_FIXED_4X)
+    {
+        fine_refresh = 0x40;
+    }
+    else if (fine_refresh == ENUM_ATTR_EFF_FINE_REFRESH_MODE_FLY_2X)
+    {
+        fine_refresh = 0xA0;
+    }
+    else if (fine_refresh == ENUM_ATTR_EFF_FINE_REFRESH_MODE_FLY_4X)
+    {
+        fine_refresh = 0x60;
+    }
+
+    if (wr_latency == ENUM_ATTR_EFF_CRC_WR_LATENCY_4NCK)
+    {
+        wr_latency = 0x00;
+    }
+    else if (wr_latency == ENUM_ATTR_EFF_CRC_WR_LATENCY_5NCK)
+    {
+        wr_latency = 0x80;
+    }
+    else if (wr_latency == ENUM_ATTR_EFF_CRC_WR_LATENCY_6NCK)
+    {
+        wr_latency = 0xC0;
+    }
+
+    if (read_format == ENUM_ATTR_EFF_MPR_RD_FORMAT_SERIAL)
+    {
+        read_format = 0x00;
+    }
+    else if (read_format == ENUM_ATTR_EFF_MPR_RD_FORMAT_PARALLEL)
+    {
+        read_format = 0x80;
+    }
+    else if (read_format == ENUM_ATTR_EFF_MPR_RD_FORMAT_STAGGERED)
+    {
+        read_format = 0x40;
+    }
+    else if (read_format == ENUM_ATTR_EFF_MPR_RD_FORMAT_RESERVED_TEMP)
+    {
+        read_format = 0xC0;
+    }
+
+    //MRS4
+    uint8_t max_pd_mode; // Max Power down mode -  NEW
+    rc = FAPI_ATTR_GET(ATTR_EFF_MAX_POWERDOWN_MODE, &i_target, max_pd_mode);
+    if(rc) return rc;
+    uint8_t temp_ref_range; // Temp ref range -  NEW
+    rc = FAPI_ATTR_GET(ATTR_EFF_TEMP_REF_RANGE, &i_target, temp_ref_range);
+    if(rc) return rc;
+    uint8_t temp_ref_mode; // Temp controlled ref mode -  NEW
+    rc = FAPI_ATTR_GET(ATTR_EFF_TEMP_REF_MODE, &i_target, temp_ref_mode);
+    if(rc) return rc;
+    uint8_t vref_mon; // Internal Vref Monitor -  NEW
+    rc = FAPI_ATTR_GET(ATTR_EFF_INT_VREF_MON, &i_target, vref_mon);
+    if(rc) return rc;
+    uint8_t cs_cmd_latency; // CS to CMD/ADDR Latency -  NEW
+    rc = FAPI_ATTR_GET(ATTR_EFF_CS_CMD_LATENCY, &i_target, cs_cmd_latency);
+    if(rc) return rc;
+    uint8_t ref_abort; // Self Refresh Abort -  NEW
+    rc = FAPI_ATTR_GET(ATTR_EFF_SELF_REF_ABORT, &i_target, ref_abort);
+    if(rc) return rc;
+    uint8_t rd_pre_train_mode; // Read Pre amble Training Mode -  NEW
+    rc = FAPI_ATTR_GET(ATTR_EFF_RD_PREAMBLE_TRAIN, &i_target, rd_pre_train_mode);
+    if(rc) return rc;
+    uint8_t rd_preamble; // Read Pre amble -  NEW
+    rc = FAPI_ATTR_GET(ATTR_EFF_RD_PREAMBLE, &i_target, rd_preamble);
+    if(rc) return rc;
+    uint8_t wr_preamble; // Write Pre amble -  NEW
+    rc = FAPI_ATTR_GET(ATTR_EFF_WR_PREAMBLE, &i_target, wr_preamble);
+    if(rc) return rc;
+
+    if ( max_pd_mode == ENUM_ATTR_EFF_MAX_POWERDOWN_MODE_ENABLE)
+    {
+        max_pd_mode = 0xF0;
+    }
+    else if ( max_pd_mode == ENUM_ATTR_EFF_MAX_POWERDOWN_MODE_DISABLE)
+    {
+        max_pd_mode = 0x00;
+    }
+
+    if (temp_ref_range == ENUM_ATTR_EFF_TEMP_REF_RANGE_NORMAL)
+    {
+        temp_ref_range = 0x00;
+    }
+    else if ( temp_ref_range== ENUM_ATTR_EFF_TEMP_REF_RANGE_EXTEND)
+    {
+        temp_ref_range = 0xFF;
+    }
+
+    if (temp_ref_mode == ENUM_ATTR_EFF_TEMP_REF_MODE_ENABLE)
+    {
+        temp_ref_mode = 0x80;
+    }
+    else if (temp_ref_mode == ENUM_ATTR_EFF_TEMP_REF_MODE_DISABLE)
+    {
+        temp_ref_mode = 0x00;
+    }
+
+    if ( vref_mon == ENUM_ATTR_EFF_INT_VREF_MON_ENABLE)
+    {
+        vref_mon = 0xFF;
+    }
+    else if ( vref_mon == ENUM_ATTR_EFF_INT_VREF_MON_DISABLE)
+    {
+        vref_mon = 0x00;
+    }
+
+
+    if ( cs_cmd_latency == 3)
+    {
+        cs_cmd_latency = 0x80;
+    }
+    else if (cs_cmd_latency == 4)
+    {
+        cs_cmd_latency = 0x40;
+    }
+    else if (cs_cmd_latency == 5)
+    {
+        cs_cmd_latency = 0xC0;
+    }
+    else if (cs_cmd_latency == 6)
+    {
+        cs_cmd_latency = 0x20;
+    }
+    else if (cs_cmd_latency == 8)
+    {
+        cs_cmd_latency = 0xA0;
+    }
+
+    if (ref_abort == ENUM_ATTR_EFF_SELF_REF_ABORT_ENABLE)
+    {
+        ref_abort = 0xFF;
+    }
+    else if (ref_abort == ENUM_ATTR_EFF_SELF_REF_ABORT_DISABLE)
+    {
+        ref_abort = 0x00;
+    }
+
+    if (rd_pre_train_mode == ENUM_ATTR_EFF_RD_PREAMBLE_TRAIN_ENABLE)
+    {
+        rd_pre_train_mode = 0xFF;
+    }
+    else if (rd_pre_train_mode == ENUM_ATTR_EFF_RD_PREAMBLE_TRAIN_DISABLE)
+    {
+        rd_pre_train_mode = 0x00;
+    }
+
+    if (rd_preamble == ENUM_ATTR_EFF_RD_PREAMBLE_1NCLK)
+    {
+        rd_preamble = 0x00;
+    }
+    else if (rd_preamble == ENUM_ATTR_EFF_RD_PREAMBLE_2NCLK)
+    {
+        rd_preamble = 0xFF;
+    }
+
+    if (wr_preamble == ENUM_ATTR_EFF_WR_PREAMBLE_1NCLK)
+    {
+        wr_preamble = 0x00;
+    }
+    else if (wr_preamble == ENUM_ATTR_EFF_WR_PREAMBLE_2NCLK)
+    {
+        wr_preamble = 0xFF;
+    }
+
+
+    //MRS5
+    uint8_t ca_parity_latency; //C/A Parity Latency Mode  -  NEW
+    rc = FAPI_ATTR_GET(ATTR_EFF_CA_PARITY_LATENCY , &i_target, ca_parity_latency);
+    if(rc) return rc;
+    uint8_t crc_error_clear; //CRC Error Clear  -  NEW
+    rc = FAPI_ATTR_GET(ATTR_EFF_CRC_ERROR_CLEAR , &i_target, crc_error_clear);
+    if(rc) return rc;
+    uint8_t ca_parity_error_status; //C/A Parity Error Status  -  NEW
+    rc = FAPI_ATTR_GET(ATTR_EFF_CA_PARITY_ERROR_STATUS , &i_target, ca_parity_error_status);
+    if(rc) return rc;
+    uint8_t odt_input_buffer; //ODT Input Buffer during power down  -  NEW
+    rc = FAPI_ATTR_GET(ATTR_EFF_ODT_INPUT_BUFF , &i_target, odt_input_buffer);
+    if(rc) return rc;
+    uint8_t rtt_park[2][2][4]; //RTT_Park value  -  NEW
+    rc = FAPI_ATTR_GET(ATTR_EFF_RTT_PARK , &i_target, rtt_park);
+    if(rc) return rc;
+    uint8_t ca_parity; //CA Parity Persistance Error  -  NEW
+    rc = FAPI_ATTR_GET(ATTR_EFF_CA_PARITY , &i_target, ca_parity);
+    if(rc) return rc;
+    uint8_t data_mask; //Data Mask  -  NEW
+    rc = FAPI_ATTR_GET(ATTR_EFF_DATA_MASK , &i_target, data_mask);
+    if(rc) return rc;
+    uint8_t write_dbi; //Write DBI  -  NEW
+    rc = FAPI_ATTR_GET(ATTR_EFF_WRITE_DBI , &i_target, write_dbi);
+    if(rc) return rc;
+    uint8_t read_dbi; //Read DBI  -  NEW
+    rc = FAPI_ATTR_GET(ATTR_EFF_READ_DBI , &i_target, read_dbi);
+    if(rc) return rc;
+
+
+    if (ca_parity_latency == 4)
+    {
+        ca_parity_latency = 0x80;
+    }
+    else if (ca_parity_latency == 5)
+    {
+        ca_parity_latency = 0x40;
+    }
+    else if (ca_parity_latency == 6)
+    {
+        ca_parity_latency = 0xC0;
+    }
+    else if (ca_parity_latency == 8)
+    {
+        ca_parity_latency = 0x20;
+    }
+    else if (ca_parity_latency == ENUM_ATTR_EFF_CA_PARITY_LATENCY_DISABLE)
+    {
+        ca_parity_latency = 0x00;
+    }
+
+    if (crc_error_clear == ENUM_ATTR_EFF_CRC_ERROR_CLEAR_ERROR)
+    {
+        crc_error_clear = 0xFF;
+    }
+    else if (crc_error_clear == ENUM_ATTR_EFF_CRC_ERROR_CLEAR_CLEAR)
+    {
+        crc_error_clear = 0x00;
+    }
+
+    if (ca_parity_error_status == ENUM_ATTR_EFF_CA_PARITY_ERROR_STATUS_ERROR)
+    {
+        ca_parity_error_status = 0xFF;
+    }
+    else if (ca_parity_error_status == ENUM_ATTR_EFF_CA_PARITY_ERROR_STATUS_CLEAR)
+    {
+        ca_parity_error_status = 0x00;
+    }
+
+    if (odt_input_buffer == ENUM_ATTR_EFF_ODT_INPUT_BUFF_ACTIVATED)
+    {
+        odt_input_buffer = 0x00;
+    }
+    else if (odt_input_buffer == ENUM_ATTR_EFF_ODT_INPUT_BUFF_DEACTIVATED)
+    {
+        odt_input_buffer = 0xFF;
+    }
+
+
+    if (ca_parity == ENUM_ATTR_EFF_CA_PARITY_ENABLE)
+    {
+        ca_parity = 0xFF;
+    }
+    else if (ca_parity == ENUM_ATTR_EFF_CA_PARITY_DISABLE)
+    {
+        ca_parity = 0x00;
+    }
+
+    if (data_mask == ENUM_ATTR_EFF_DATA_MASK_DISABLE)
+    {
+        data_mask = 0x00;
+    }
+    else if (data_mask == ENUM_ATTR_EFF_DATA_MASK_ENABLE)
+    {
+        data_mask = 0xFF;
+    }
+
+    if (write_dbi == ENUM_ATTR_EFF_WRITE_DBI_DISABLE)
+    {
+        write_dbi = 0x00;
+    }
+    else if (write_dbi == ENUM_ATTR_EFF_WRITE_DBI_ENABLE)
+    {
+        write_dbi = 0xFF;
+    }
+
+    if (read_dbi == ENUM_ATTR_EFF_READ_DBI_DISABLE)
+    {
+        read_dbi = 0x00;
+    }
+    else if (read_dbi == ENUM_ATTR_EFF_READ_DBI_ENABLE)
+    {
+        read_dbi = 0xFF;
+    }
+
+    //MRS6
+    uint8_t vrefdq_train_value[2][2][4]; //vrefdq_train value   -  NEW
+    rc = FAPI_ATTR_GET( ATTR_VREF_DQ_TRAIN_VALUE, &i_target, vrefdq_train_value);
+    if(rc) return rc;
+    uint8_t vrefdq_train_range[2][2][4]; //vrefdq_train range   -  NEW
+    rc = FAPI_ATTR_GET( ATTR_VREF_DQ_TRAIN_RANGE, &i_target, vrefdq_train_range);
+    if(rc) return rc;
+    uint8_t vrefdq_train_enable[2][2][4]; //vrefdq_train enable  -  NEW
+    rc = FAPI_ATTR_GET( ATTR_VREF_DQ_TRAIN_ENABLE, &i_target, vrefdq_train_enable);
+    if(rc) return rc;
+    uint8_t tccd_l; //tccd_l  -  NEW
+    rc = FAPI_ATTR_GET( ATTR_TCCD_L, &i_target, tccd_l);
+    if(rc) return rc;
+    if (tccd_l == 4)
+    {
+        tccd_l = 0x00;
+    }
+    else if (tccd_l == 5)
+    {
+        tccd_l = 0x80;
+    }
+    else if (tccd_l == 6)
+    {
+        tccd_l = 0x40;
+    }
+    else if (tccd_l == 7)
+    {
+        tccd_l = 0xC0;
+    }
+    else if (tccd_l == 8)
+    {
+        tccd_l = 0x20;
+    }
+
+    // Raise CKE high with NOPS, waiting min Reset CKE exit time (tXPR) - 400 cycles
+    rc_num = rc_num | cke_4.setBit(0,4);
+    rc_num = rc_num | csn_8.setBit(0,8);
+    rc_num = rc_num | address_16.clearBit(0, 16);
+    rc_num = rc_num | odt_4.clearBit(0,4);
+    rc_num = rc_num | num_idles_16.insertFromRight((uint32_t) 400, 0, 16);
+    if(rc_num) {
+       rc.setEcmdError(rc_num);
+       return rc;
+    }
+    rc = mss_ccs_inst_arry_0( i_target,
+                              io_ccs_inst_cnt,
+                              address_16,
+                              bank_3,
+                              activate_1,
+                              rasn_1,
+                              casn_1,
+                              wen_1,
+                              cke_4,
+                              csn_8,
+                              odt_4,
+                              ddr_cal_type_4,
+                              i_port_number);
+    if(rc) return rc;
+    rc = mss_ccs_inst_arry_1( i_target,
+                              io_ccs_inst_cnt,
+                              num_idles_16,
+                              num_repeat_16,
+                              data_20,
+                              read_compare_1,
+                              rank_cal_4,
+                              ddr_cal_enable_1,
+                              ccs_end_1);
+    if(rc) return rc;
+    io_ccs_inst_cnt ++;
+
+    // Dimm 0-1
+    for ( dimm_number = 0; dimm_number < MAX_NUM_DIMMS; dimm_number++)
+    {
+        //if the dram stack type is a 3DS dimm
+        if(dram_stack[i_port_number][dimm_number]  == ENUM_ATTR_EFF_STACK_TYPE_STACK_3DS) {
+           FAPI_INF("DIMM is a 3DS type, using num_masetr_ranks_array");
+           num_ranks = num_master_ranks_array[i_port_number][dimm_number];
+        }
+        else {
+           num_ranks = num_ranks_array[i_port_number][dimm_number];
+        }
+
+        if (num_ranks == 0)
+        {
+            FAPI_INF( "PORT%d DIMM%d not configured. Num_ranks: %d ", i_port_number, dimm_number, num_ranks);
+        }
+        else
+        {
+            // Rank 0-3
+            for ( rank_number = 0; rank_number < num_ranks; rank_number++)
+            {
+                    FAPI_INF( "MRS SETTINGS FOR PORT%d DIMM%d RANK%d", i_port_number, dimm_number, rank_number);
+
+                    rc_num = rc_num | csn_8.setBit(0,8);
+                    rc_num = rc_num | address_16.clearBit(0, 16);
+
+                    //For DDR4:
+                    //Address 14 = Address 17, Address 15 = BG1
+                    rc_num = rc_num | mrs0.insert((uint8_t) dram_bl, 0, 2, 0);
+                    rc_num = rc_num | mrs0.insert((uint8_t) dram_cl, 2, 1, 0);
+                    rc_num = rc_num | mrs0.insert((uint8_t) read_bt, 3, 1, 0);
+                    rc_num = rc_num | mrs0.insert((uint8_t) dram_cl, 4, 3, 1);
+                    rc_num = rc_num | mrs0.insert((uint8_t) test_mode, 7, 1);
+                    rc_num = rc_num | mrs0.insert((uint8_t) dll_reset, 8, 1);
+                    rc_num = rc_num | mrs0.insert((uint8_t) dram_wr_rtp, 9, 3);
+                    rc_num = rc_num | mrs0.insert((uint8_t) 0x00, 12, 4);
+
+                    rc_num = rc_num | mrs0.extractPreserve(&MRS0, 0, 16, 0);
+		    if(rc_num) {
+		       rc.setEcmdError(rc_num);
+                       return rc;
+		    }
+
+                    if (dram_rtt_nom[i_port_number][dimm_number][rank_number] == ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE)
+                    {
+                        dram_rtt_nom[i_port_number][dimm_number][rank_number] = 0x00;
+                    }
+                    else if (dram_rtt_nom[i_port_number][dimm_number][rank_number] == ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM240) //not supported
+                    {
+                        dram_rtt_nom[i_port_number][dimm_number][rank_number] = 0x20;
+                        FAPI_INF("DRAM RTT_NOM is configured for 240 OHM which is not supported.");
+                    }
+                    else if (dram_rtt_nom[i_port_number][dimm_number][rank_number] == ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM48) //not supported
+                    {
+                        dram_rtt_nom[i_port_number][dimm_number][rank_number] = 0xA0;
+                        FAPI_INF("DRAM RTT_NOM is configured for 48 OHM which is not supported.");
+                    }
+                    else if (dram_rtt_nom[i_port_number][dimm_number][rank_number] == ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40)
+                    {
+                        dram_rtt_nom[i_port_number][dimm_number][rank_number] = 0xC0;
+                    }
+                    else if (dram_rtt_nom[i_port_number][dimm_number][rank_number] == ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM60)
+                    {
+                        dram_rtt_nom[i_port_number][dimm_number][rank_number] = 0x80;
+                    }
+                    else if (dram_rtt_nom[i_port_number][dimm_number][rank_number] == ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM120)
+                    {
+                        dram_rtt_nom[i_port_number][dimm_number][rank_number] = 0x40;
+                    }
+                    else if (dram_rtt_nom[i_port_number][dimm_number][rank_number] == ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM80) // not supported
+                    {
+                        dram_rtt_nom[i_port_number][dimm_number][rank_number] = 0x60;
+                        FAPI_INF("DRAM RTT_NOM is configured for 80 OHM which is not supported.");
+                    }
+                    else if (dram_rtt_nom[i_port_number][dimm_number][rank_number] == ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM34) // not supported
+                    {
+                        dram_rtt_nom[i_port_number][dimm_number][rank_number] = 0xE0;
+                        FAPI_INF("DRAM RTT_NOM is configured for 34 OHM which is not supported.");
+                    }
+
+                    if (out_drv_imp_cntl[i_port_number][dimm_number] == ENUM_ATTR_VPD_DRAM_RON_OHM34)
+                    {
+                        out_drv_imp_cntl[i_port_number][dimm_number] = 0x00;
+                    }
+                    // Not currently supported
+                    else if (out_drv_imp_cntl[i_port_number][dimm_number] == ENUM_ATTR_VPD_DRAM_RON_OHM48) //not supported
+                    {
+                        out_drv_imp_cntl[i_port_number][dimm_number] = 0x80;
+                        FAPI_INF("DRAM RON is configured for 48 OHM which is not supported.");
+                    }
+
+                    //For DDR4:
+                    //Address 14 = Address 17, Address 15 = BG1
+                    rc_num = rc_num | mrs1.insert((uint8_t) dll_enable, 0, 1, 0);
+                    rc_num = rc_num | mrs1.insert((uint8_t) out_drv_imp_cntl[i_port_number][dimm_number], 1, 2, 0);
+                    rc_num = rc_num | mrs1.insert((uint8_t) dram_al, 3, 2, 0);
+                    rc_num = rc_num | mrs1.insert((uint8_t) 0x00, 5, 2);
+                    rc_num = rc_num | mrs1.insert((uint8_t) wr_lvl, 7, 1, 0);
+                    rc_num = rc_num | mrs1.insert((uint8_t) dram_rtt_nom[i_port_number][dimm_number][rank_number], 8, 3, 0);
+                    rc_num = rc_num | mrs1.insert((uint8_t) tdqs_enable, 11, 1, 0);
+                    rc_num = rc_num | mrs1.insert((uint8_t) q_off, 12, 1, 0);
+                    rc_num = rc_num | mrs1.insert((uint8_t) 0x00, 13, 3);
+
+
+                    rc_num = rc_num | mrs1.extractPreserve(&MRS1, 0, 16, 0);
+		    if(rc_num) {
+		       rc.setEcmdError(rc_num);
+                       return rc;
+		    }
+
+
+                    if (dram_rtt_wr[i_port_number][dimm_number][rank_number] == ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE)
+                    {
+                        dram_rtt_wr[i_port_number][dimm_number][rank_number] = 0x00;
+                    }
+                    else if (dram_rtt_wr[i_port_number][dimm_number][rank_number] == ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120)
+                    {
+                        dram_rtt_wr[i_port_number][dimm_number][rank_number] = 0x80;
+                    }
+                    else if (dram_rtt_wr[i_port_number][dimm_number][rank_number] == 240)//ENUM_ATTR_EFF_DRAM_RTT_WR_OHM240)
+                    {
+                        dram_rtt_wr[i_port_number][dimm_number][rank_number] = 0x40;
+                    }
+                    else if (dram_rtt_wr[i_port_number][dimm_number][rank_number] == 0xFF)//ENUM_ATTR_EFF_DRAM_RTT_WR_HIGHZ)
+                    {
+                        dram_rtt_wr[i_port_number][dimm_number][rank_number] = 0xFF;
+                    }
+
+                    rc_num = rc_num | mrs2.insert((uint8_t) 0x00, 0, 3);
+                    rc_num = rc_num | mrs2.insert((uint8_t) cwl, 3, 3);
+                    rc_num = rc_num | mrs2.insert((uint8_t) lpasr, 6, 2);
+                    rc_num = rc_num | mrs2.insert((uint8_t) 0x00, 8, 1);
+                    rc_num = rc_num | mrs2.insert((uint8_t) dram_rtt_wr[i_port_number][dimm_number][rank_number], 9, 2);
+                    rc_num = rc_num | mrs2.insert((uint8_t) 0x00, 11, 1);
+                    rc_num = rc_num | mrs2.insert((uint8_t) write_crc, 12, 1);
+                    rc_num = rc_num | mrs2.insert((uint8_t) 0x00, 13, 2);
+
+                    rc_num = rc_num | mrs2.extractPreserve(&MRS2, 0, 16, 0);
+		    if(rc_num) {
+		       rc.setEcmdError(rc_num);
+                       return rc;
+		    }
+
+                    rc_num = rc_num | mrs3.insert((uint8_t) mpr_page, 0, 2);
+                    rc_num = rc_num | mrs3.insert((uint8_t) mpr_op, 2, 1);
+                    rc_num = rc_num | mrs3.insert((uint8_t) geardown_mode, 3, 1);
+                    rc_num = rc_num | mrs3.insert((uint8_t) dram_access, 4, 1);
+                    rc_num = rc_num | mrs3.insert((uint8_t) temp_readout, 5, 1);
+                    rc_num = rc_num | mrs3.insert((uint8_t) fine_refresh, 6, 3);
+                    rc_num = rc_num | mrs3.insert((uint8_t) wr_latency, 9, 2);
+                    rc_num = rc_num | mrs3.insert((uint8_t) read_format, 11, 2);
+                    rc_num = rc_num | mrs3.insert((uint8_t) 0x00, 13, 2);
+
+
+                    rc_num = rc_num | mrs3.extractPreserve(&MRS3, 0, 16, 0);
+		    if(rc_num) {
+		       rc.setEcmdError(rc_num);
+                       return rc;
+		    }
+
+                    rc_num = rc_num | mrs4.insert((uint8_t) 0x00, 0, 1);
+                    rc_num = rc_num | mrs4.insert((uint8_t) max_pd_mode, 1, 1);
+                    rc_num = rc_num | mrs4.insert((uint8_t) temp_ref_range, 2, 1);
+                    rc_num = rc_num | mrs4.insert((uint8_t) temp_ref_mode, 3, 1);
+                    rc_num = rc_num | mrs4.insert((uint8_t) vref_mon, 4, 1);
+                    rc_num = rc_num | mrs4.insert((uint8_t) 0x00, 5, 1);
+                    rc_num = rc_num | mrs4.insert((uint8_t) cs_cmd_latency, 6, 3);
+                    rc_num = rc_num | mrs4.insert((uint8_t) ref_abort, 9, 1);
+                    rc_num = rc_num | mrs4.insert((uint8_t) rd_pre_train_mode, 10, 1);
+                    rc_num = rc_num | mrs4.insert((uint8_t) rd_preamble, 11, 1);
+                    rc_num = rc_num | mrs4.insert((uint8_t) wr_preamble, 12, 1);
+                    rc_num = rc_num | mrs4.extractPreserve(&MRS4, 0, 16, 0);
+		    if(rc_num) {
+		       rc.setEcmdError(rc_num);
+                       return rc;
+		    }
+
+
+                    //MRS5
+                    if (rtt_park[i_port_number][dimm_number][rank_number] == ENUM_ATTR_EFF_RTT_PARK_DISABLE)
+                    {
+                        rtt_park[i_port_number][dimm_number][rank_number] = 0x00;
+                    }
+                    else if (rtt_park[i_port_number][dimm_number][rank_number] == ENUM_ATTR_EFF_RTT_PARK_60OHM)
+                    {
+                        rtt_park[i_port_number][dimm_number][rank_number] = 0x80;
+                    }
+                    else if (rtt_park[i_port_number][dimm_number][rank_number] == ENUM_ATTR_EFF_RTT_PARK_40OHM)
+                    {
+                        rtt_park[i_port_number][dimm_number][rank_number] = 0xC0;
+                    }
+                    else if (rtt_park[i_port_number][dimm_number][rank_number] == ENUM_ATTR_EFF_RTT_PARK_120OHM)
+                    {
+                        rtt_park[i_port_number][dimm_number][rank_number] = 0x40;
+                    }
+                    else if (rtt_park[i_port_number][dimm_number][rank_number] == ENUM_ATTR_EFF_RTT_PARK_240OHM)
+                    {
+                        rtt_park[i_port_number][dimm_number][rank_number] = 0x20;
+                    }
+                    else if (rtt_park[i_port_number][dimm_number][rank_number] == ENUM_ATTR_EFF_RTT_PARK_48OHM)
+                    {
+                        rtt_park[i_port_number][dimm_number][rank_number] = 0xA0;
+                    }
+                    else if (rtt_park[i_port_number][dimm_number][rank_number] == ENUM_ATTR_EFF_RTT_PARK_80OHM)
+                    {
+                        rtt_park[i_port_number][dimm_number][rank_number] = 0x60;
+                    }
+                    else if (rtt_park[i_port_number][dimm_number][rank_number] == ENUM_ATTR_EFF_RTT_PARK_34OHM)
+                    {
+                        rtt_park[i_port_number][dimm_number][rank_number] = 0xE0;
+                    }
+
+                    rc_num = rc_num | mrs5.insert((uint8_t) ca_parity_latency, 0, 2);
+                    rc_num = rc_num | mrs5.insert((uint8_t) crc_error_clear, 3, 1);
+                    rc_num = rc_num | mrs5.insert((uint8_t) ca_parity_error_status, 4, 1);
+                    rc_num = rc_num | mrs5.insert((uint8_t) odt_input_buffer, 5, 1);
+                    rc_num = rc_num | mrs5.insert((uint8_t) rtt_park[i_port_number][dimm_number][rank_number], 6, 3);
+                    rc_num = rc_num | mrs5.insert((uint8_t) ca_parity, 9, 1);
+                    rc_num = rc_num | mrs5.insert((uint8_t) data_mask, 10, 1);
+                    rc_num = rc_num | mrs5.insert((uint8_t) write_dbi, 11, 1);
+                    rc_num = rc_num | mrs5.insert((uint8_t) read_dbi, 12, 1);
+                    rc_num = rc_num | mrs5.insert((uint8_t) 0x00, 13, 2);
+
+
+                    rc_num = rc_num | mrs5.extractPreserve(&MRS5, 0, 16, 0);
+		    if(rc_num) {
+		       rc.setEcmdError(rc_num);
+                       return rc;
+		    }
+
+                    //MRS6
+
+                    vrefdq_train_value[i_port_number][dimm_number][rank_number] = mss_reverse_8bits(vrefdq_train_value[i_port_number][dimm_number][rank_number]);
+
+                    if (vrefdq_train_range[i_port_number][dimm_number][rank_number] == ENUM_ATTR_VREF_DQ_TRAIN_RANGE_RANGE1)
+                    {
+                        vrefdq_train_range[i_port_number][dimm_number][rank_number] = 0x00;
+                    }
+                    else if (vrefdq_train_range[i_port_number][dimm_number][rank_number] == ENUM_ATTR_VREF_DQ_TRAIN_RANGE_RANGE2)
+                    {
+                        vrefdq_train_range[i_port_number][dimm_number][rank_number] = 0xFF;
+                    }
+
+                    if (vrefdq_train_enable[i_port_number][dimm_number][rank_number] == ENUM_ATTR_VREF_DQ_TRAIN_ENABLE_ENABLE)
+                    {
+                        vrefdq_train_enable[i_port_number][dimm_number][rank_number] = 0xFF;
+                    }
+                    else if (vrefdq_train_enable[i_port_number][dimm_number][rank_number] == ENUM_ATTR_VREF_DQ_TRAIN_ENABLE_DISABLE)
+                    {
+                        vrefdq_train_enable[i_port_number][dimm_number][rank_number] = 0x00;
+                    }
+
+                    rc_num = rc_num | mrs6.insert((uint8_t) vrefdq_train_value[i_port_number][dimm_number][rank_number], 0, 6);
+                    rc_num = rc_num | mrs6.insert((uint8_t) vrefdq_train_range[i_port_number][dimm_number][rank_number], 6, 1);
+                    rc_num = rc_num | mrs6.insert((uint8_t) vrefdq_train_enable[i_port_number][dimm_number][rank_number], 7, 1);
+                    rc_num = rc_num | mrs6.insert((uint8_t) 0x00, 8, 2);
+                    rc_num = rc_num | mrs6.insert((uint8_t) tccd_l, 10, 3);
+                    rc_num = rc_num | mrs6.insert((uint8_t) 0x00, 13, 2);
+
+                    rc_num = rc_num | mrs6_train_on.insert((uint8_t) vrefdq_train_value[i_port_number][dimm_number][rank_number], 0, 6);
+                    rc_num = rc_num | mrs6_train_on.insert((uint8_t) vrefdq_train_range[i_port_number][dimm_number][rank_number], 6, 1);
+                    rc_num = rc_num | mrs6_train_on.insert((uint8_t) 0xff, 7, 1);
+                    rc_num = rc_num | mrs6_train_on.insert((uint8_t) 0x00, 8, 2);
+                    rc_num = rc_num | mrs6_train_on.insert((uint8_t) tccd_l, 10, 3);
+                    rc_num = rc_num | mrs6_train_on.insert((uint8_t) 0x00, 13, 2);
+
+
+                    rc_num = rc_num | mrs6.extractPreserve(&MRS6, 0, 16, 0);
+
+                    FAPI_INF( "MRS 0: 0x%04X", MRS0);
+                    FAPI_INF( "MRS 1: 0x%04X", MRS1);
+                    FAPI_INF( "MRS 2: 0x%04X", MRS2);
+                    FAPI_INF( "MRS 3: 0x%04X", MRS3);
+                    FAPI_INF( "MRS 4: 0x%04X", MRS4);
+                    FAPI_INF( "MRS 5: 0x%04X", MRS5);
+                    FAPI_INF( "MRS 6: 0x%04X", MRS6);
+
+                    if (rc_num)
+                    {
+                        FAPI_ERR( "mss_mrs_load: Error setting up buffers");
+                        rc_buff.setEcmdError(rc_num);
+                        return rc_buff;
+                    }
+
+                    // Only corresponding CS to rank
+                    rc_num = rc_num | csn_8.setBit(0,8);
+                    rc_num = rc_num | csn_8.clearBit(rank_number+4*dimm_number);
+		    
+		    if(rc_num) {
+		       rc.setEcmdError(rc_num);
+                       return rc;
+		    }
+		    
+                     uint8_t dram_stack[2][2];
+                    rc = FAPI_ATTR_GET(ATTR_EFF_STACK_TYPE, &i_target, dram_stack);
+                    if(rc) return rc;
+
+                    FAPI_INF( "Stack Type: %d\n", dram_stack[0][0]);
+                    if (dram_stack[0][0] == ENUM_ATTR_EFF_STACK_TYPE_STACK_3DS)
+                    {
+                       FAPI_INF( "=============  Got in the 3DS stack loop CKE !!!!=====================\n");
+                       rc_num = rc_num | csn_8.clearBit(2+4*dimm_number,2);
+                       // COMMENT IN LATER!!!! rc_num = rc_num | cke_4.clearBit(1);
+		       if(rc_num) {
+		          rc.setEcmdError(rc_num);
+                          return rc;
+		       }
+                    }
+
+                    // Propogate through the 4 MRS cmds
+                    for ( mrs_number = 0; mrs_number < 7; mrs_number++)
+                    {
+                        //mrs_number = 1;
+                        // Copying the current MRS into address buffer matching the MRS_array order
+                        // Setting the bank address
+                        if (mrs_number == 0)
+                        {
+                            rc_num = rc_num | address_16.insert(mrs3, 0, 16, 0);
+                            rc_num = rc_num | bank_3.insert((uint8_t) MRS3_BA, 0, 1, 7);
+                            rc_num = rc_num | bank_3.insert((uint8_t) MRS3_BA, 1, 1, 6);
+                            rc_num = rc_num | bank_3.insert((uint8_t) MRS3_BA, 2, 1, 5);
+                        }
+                        else if ( mrs_number == 1)
+                        {
+
+                            rc_num = rc_num | address_16.insert(mrs6, 0, 16, 0);
+                            rc_num = rc_num | bank_3.insert((uint8_t) MRS6_BA, 0, 1, 7);
+                            rc_num = rc_num | bank_3.insert((uint8_t) MRS6_BA, 1, 1, 6);
+                            rc_num = rc_num | bank_3.insert((uint8_t) MRS6_BA, 2, 1, 5);
+                        }
+                        else if ( mrs_number == 2)
+                        {
+                            rc_num = rc_num | address_16.insert(mrs5, 0, 16, 0);
+                            rc_num = rc_num | bank_3.insert((uint8_t) MRS5_BA, 0, 1, 7);
+                            rc_num = rc_num | bank_3.insert((uint8_t) MRS5_BA, 1, 1, 6);
+                            rc_num = rc_num | bank_3.insert((uint8_t) MRS5_BA, 2, 1, 5);
+                        }
+                        else if ( mrs_number == 3)
+                        {
+                            rc_num = rc_num | address_16.insert(mrs4, 0, 16, 0);
+                            rc_num = rc_num | bank_3.insert((uint8_t) MRS4_BA, 0, 1, 7);
+                            rc_num = rc_num | bank_3.insert((uint8_t) MRS4_BA, 1, 1, 6);
+                            rc_num = rc_num | bank_3.insert((uint8_t) MRS4_BA, 2, 1, 5);
+                        }
+                        else if ( mrs_number == 4)
+                        {
+                            rc_num = rc_num | address_16.insert(mrs2, 0, 16, 0);
+                            rc_num = rc_num | bank_3.insert((uint8_t) MRS2_BA, 0, 1, 7);
+                            rc_num = rc_num | bank_3.insert((uint8_t) MRS2_BA, 1, 1, 6);
+                            rc_num = rc_num | bank_3.insert((uint8_t) MRS2_BA, 2, 1, 5);
+                        }
+                        else if ( mrs_number == 5)
+                        {
+                            rc_num = rc_num | address_16.insert(mrs1, 0, 16, 0);
+                            rc_num = rc_num | bank_3.insert((uint8_t) MRS1_BA, 0, 1, 7);
+                            rc_num = rc_num | bank_3.insert((uint8_t) MRS1_BA, 1, 1, 6);
+                            rc_num = rc_num | bank_3.insert((uint8_t) MRS1_BA, 2, 1, 5);
+                        }
+                        else if ( mrs_number == 6)
+                        {
+                            rc_num = rc_num | address_16.insert(mrs0, 0, 16, 0);
+                            rc_num = rc_num | bank_3.insert((uint8_t) MRS0_BA, 0, 1, 7);
+                            rc_num = rc_num | bank_3.insert((uint8_t) MRS0_BA, 1, 1, 6);
+                            rc_num = rc_num | bank_3.insert((uint8_t) MRS0_BA, 2, 1, 5);
+                        }
+                        //mrs_number = 7;
+
+                       if (( address_mirror_map[i_port_number][dimm_number] & (0x08 >> rank_number) ) && (is_sim == 0))
+                       {
+                           rc = mss_address_mirror_swizzle(i_target, i_port_number, dimm_number, rank_number, address_16, bank_3);
+                           if(rc) return rc;
+                       }
+
+
+                        if (rc_num)
+                        {
+                            FAPI_ERR( "mss_mrs_load: Error setting up buffers");
+                            rc_buff.setEcmdError(rc_num);
+                            return rc_buff;
+                        }
+
+                        // Send out to the CCS array
+                        rc = mss_ccs_inst_arry_0( i_target,
+                                          io_ccs_inst_cnt,
+                                          address_16,
+                                          bank_3,
+                                          activate_1,
+                                          rasn_1,
+                                          casn_1,
+                                          wen_1,
+                                          cke_4,
+                                          csn_8,
+                                          odt_4,
+                                          ddr_cal_type_4,
+                                          i_port_number);
+                        if(rc) return rc;
+                        rc = mss_ccs_inst_arry_1( i_target,
+                                          io_ccs_inst_cnt,
+                                          num_idles_16,
+                                          num_repeat_16,
+                                          data_20,
+                                          read_compare_1,
+                                          rank_cal_4,
+                                          ddr_cal_enable_1,
+                                          ccs_end_1);
+                        if(rc) return rc;
+                        io_ccs_inst_cnt ++;
+
+
+
+                    }
+
+                    // Address inversion for RCD
+                    if ( (dimm_type == ENUM_ATTR_EFF_DIMM_TYPE_RDIMM) || (dimm_type == ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM) )
+                    {
+                       FAPI_INF( "Sending out MRS with Address Inversion to B-side DRAMs\n");
+
+
+                       // Propogate through the 4 MRS cmds
+                       for ( mrs_number = 0; mrs_number < 7; mrs_number++)
+                       {
+                           //mrs_number = 1;
+                           // Copying the current MRS into address buffer matching the MRS_array order
+                           // Setting the bank address
+                           if (mrs_number == 0)
+                           {
+                               rc_num = rc_num | address_16.insert(mrs3, 0, 16, 0);
+                               rc_num = rc_num | bank_3.insert((uint8_t) MRS3_BA, 0, 1, 7);
+                               rc_num = rc_num | bank_3.insert((uint8_t) MRS3_BA, 1, 1, 6);
+                               rc_num = rc_num | bank_3.insert((uint8_t) MRS3_BA, 2, 1, 5);
+                           }
+                           else if ( mrs_number == 1)
+                           {
+
+
+                               rc_num = rc_num | address_16.insert(mrs6, 0, 16, 0);
+                               rc_num = rc_num | bank_3.insert((uint8_t) MRS6_BA, 0, 1, 7);
+                               rc_num = rc_num | bank_3.insert((uint8_t) MRS6_BA, 1, 1, 6);
+                               rc_num = rc_num | bank_3.insert((uint8_t) MRS6_BA, 2, 1, 5);
+                           }
+                           else if ( mrs_number == 2)
+                           {
+                               rc_num = rc_num | address_16.insert(mrs5, 0, 16, 0);
+                               rc_num = rc_num | bank_3.insert((uint8_t) MRS5_BA, 0, 1, 7);
+                               rc_num = rc_num | bank_3.insert((uint8_t) MRS5_BA, 1, 1, 6);
+                               rc_num = rc_num | bank_3.insert((uint8_t) MRS5_BA, 2, 1, 5);
+                           }
+                           else if ( mrs_number == 3)
+                           {
+                               rc_num = rc_num | address_16.insert(mrs4, 0, 16, 0);
+                               rc_num = rc_num | bank_3.insert((uint8_t) MRS4_BA, 0, 1, 7);
+                               rc_num = rc_num | bank_3.insert((uint8_t) MRS4_BA, 1, 1, 6);
+                               rc_num = rc_num | bank_3.insert((uint8_t) MRS4_BA, 2, 1, 5);
+                           }
+                           else if ( mrs_number == 4)
+                           {
+                               rc_num = rc_num | address_16.insert(mrs2, 0, 16, 0);
+                               rc_num = rc_num | bank_3.insert((uint8_t) MRS2_BA, 0, 1, 7);
+                               rc_num = rc_num | bank_3.insert((uint8_t) MRS2_BA, 1, 1, 6);
+                               rc_num = rc_num | bank_3.insert((uint8_t) MRS2_BA, 2, 1, 5);
+                           }
+                           else if ( mrs_number == 5)
+                           {
+                               rc_num = rc_num | address_16.insert(mrs1, 0, 16, 0);
+                               rc_num = rc_num | bank_3.insert((uint8_t) MRS1_BA, 0, 1, 7);
+                               rc_num = rc_num | bank_3.insert((uint8_t) MRS1_BA, 1, 1, 6);
+                               rc_num = rc_num | bank_3.insert((uint8_t) MRS1_BA, 2, 1, 5);
+                           }
+                           else if ( mrs_number == 6)
+                           {
+                               rc_num = rc_num | address_16.insert(mrs0, 0, 16, 0);
+                               rc_num = rc_num | bank_3.insert((uint8_t) MRS0_BA, 0, 1, 7);
+                               rc_num = rc_num | bank_3.insert((uint8_t) MRS0_BA, 1, 1, 6);
+                               rc_num = rc_num | bank_3.insert((uint8_t) MRS0_BA, 2, 1, 5);
+                           }
+
+                           // Indicate B-Side DRAMS BG1=1
+                           rc_num = rc_num | address_16.setBit(15);  // Set BG1 = 1
+
+                           rc_num = rc_num | address_16.flipBit(3,7); // Invert A3:A9
+                           rc_num = rc_num | address_16.flipBit(11);  // Invert A11
+                           rc_num = rc_num | address_16.flipBit(13);  // Invert A13
+                           rc_num = rc_num | address_16.flipBit(14);  // Invert A17
+                           rc_num = rc_num | bank_3.flipBit(0,3);     // Invert BA0,BA1,BG0
+
+
+                           if (( address_mirror_map[i_port_number][dimm_number] & (0x08 >> rank_number) ) && (is_sim == 0))
+                           {
+                               rc = mss_address_mirror_swizzle(i_target, i_port_number, dimm_number, rank_number, address_16, bank_3);
+                               if(rc) return rc;
+                           }
+
+
+                           if (rc_num)
+                           {
+                               FAPI_ERR( " Error setting up buffers");
+                               rc_buff.setEcmdError(rc_num);
+                               return rc_buff;
+                           }
+
+                           // Send out to the CCS array
+                           rc = mss_ccs_inst_arry_0( i_target,
+                                             io_ccs_inst_cnt,
+                                             address_16,
+                                             bank_3,
+                                             activate_1,
+                                             rasn_1,
+                                             casn_1,
+                                             wen_1,
+                                             cke_4,
+                                             csn_8,
+                                             odt_4,
+                                             ddr_cal_type_4,
+                                             i_port_number);
+                           if(rc) return rc;
+                           rc = mss_ccs_inst_arry_1( i_target,
+                                             io_ccs_inst_cnt,
+                                             num_idles_16,
+                                             num_repeat_16,
+                                             data_20,
+                                             read_compare_1,
+                                             rank_cal_4,
+                                             ddr_cal_enable_1,
+                                             ccs_end_1);
+                           if(rc) return rc;
+                           io_ccs_inst_cnt ++;
+
+                       }
+                 }
+
+            }
+        }
+    }
+
+    return rc;
+}
+
+//#endif
+
+
+
+
+
+
diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mrs6_DDR4.C b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mrs6_DDR4.C
index b7e0e25..36892a7 100644
--- a/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mrs6_DDR4.C
+++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mrs6_DDR4.C
@@ -1,7 +1,7 @@
 /* IBM_PROLOG_BEGIN_TAG                                                   */
 /* This is an automatically generated prolog.                             */
 /*                                                                        */
-/* $Source: src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv//mss_mrs6_DDR4.C $ */
+/* $Source: src/usr/hwpf/hwp/dram_training/mss_draminit_trainadv/mss_mrs6_DDR4.C $ */
 /*                                                                        */
 /* OpenPOWER HostBoot Project                                             */
 /*                                                                        */
@@ -22,14 +22,12 @@
 /* permissions and limitations under the License.                         */
 /*                                                                        */
 /* IBM_PROLOG_END_TAG                                                     */
-// $Id: mss_mrs6_DDR4.C,v 1.4 2015/08/05 15:06:03 sglancy Exp $
+// $Id: mss_mrs6_DDR4.C,v 1.6 2015/09/04 02:03:31 kmack Exp $
 
 
 //------------------------------------------------------------------------------
 // *! (C) Copyright International Business Machines Corp. 2007
 // *! All Rights Reserved -- Property of IBM
-// *! ***  ***
-
 
 //------------------------------------------------------------------------------
 // Don't forget to create CVS comments when you check in your changes!
@@ -38,6 +36,7 @@
 //------------------------------------------------------------------------------
 // Version:|  Author: |  Date:  | Comment:
 //---------|----------|---------|-----------------------------------------------
+//  1.05   | 09/03/15 | kmack   | RC updates
 //  1.04   | 08/05/15 | sglancy | Fixed FW compile error
 //  1.03   | 08/04/15 | sglancy | Changed to address FW comments
 //  1.02   | 05/07/15 | sglancy | Fixed enable disable bug and added 3DS support
@@ -75,11 +74,11 @@ for ( port_number = 0; port_number < 2; port_number++)
             }
 
         }
-		
+
 // Execute the contents of CCS array
         if (ccs_inst_cnt  > 0)
         {
-	    // Set the End bit on the last CCS Instruction
+            // Set the End bit on the last CCS Instruction
             rc = mss_ccs_set_end_bit( i_target, ccs_inst_cnt-1);
             if(rc)
             {
@@ -95,9 +94,9 @@ for ( port_number = 0; port_number < 2; port_number++)
             }
 
             ccs_inst_cnt = 0;
-        }		
-		
-	  return rc;
+        }
+
+          return rc;
 
 }
 
@@ -133,7 +132,7 @@ fapi::ReturnCode add_nop_to_ccs(fapi::Target& i_target_mba, ecmdDataBufferBase &
    //Buffer conversions from inputs
    l_ecmd_rc |= addr_16.reverse();
    l_ecmd_rc |= bank_3.insertFromRight(bank, 0, 3);
-   l_ecmd_rc |= bank_3.reverse();  //Banks are 0:2 
+   l_ecmd_rc |= bank_3.reverse();  //Banks are 0:2
    l_ecmd_rc |= csn_8.flushTo1();
    l_ecmd_rc |= csn_8.clearBit(rank);
 
@@ -142,7 +141,7 @@ fapi::ReturnCode add_nop_to_ccs(fapi::Target& i_target_mba, ecmdDataBufferBase &
    l_ecmd_rc |= rasn_1.setBit(0);
    l_ecmd_rc |= casn_1.setBit(0);
    l_ecmd_rc |= wen_1.setBit(0);
-   
+
    l_ecmd_rc |= read_compare_1.clearBit(0);
 
    //Final setup
@@ -185,13 +184,13 @@ fapi::ReturnCode add_nop_to_ccs(fapi::Target& i_target_mba, ecmdDataBufferBase &
 ReturnCode mss_mr6_loader( fapi::Target& i_target,uint32_t i_port_number,uint32_t& io_ccs_inst_cnt)
 {
 
-    const uint8_t MRS6_BA = 6;    
+    const uint8_t MRS6_BA = 6;
     uint32_t dimm_number;
     uint32_t rank_number;
-    ReturnCode rc;  
+    ReturnCode rc;
     ReturnCode rc_buff;
     uint32_t rc_num = 0;
-	uint8_t tmod_delay = 12; 
+        uint8_t tmod_delay = 12;
     ecmdDataBufferBase data_buffer_64(64);
     ecmdDataBufferBase address_16(16);
     ecmdDataBufferBase bank_3(3);
@@ -210,7 +209,8 @@ ReturnCode mss_mr6_loader( fapi::Target& i_target,uint32_t i_port_number,uint32_
     ecmdDataBufferBase odt_4(4);
     rc_num = rc_num | odt_4.clearBit(0,4);
     ecmdDataBufferBase ddr_cal_type_4(4);
-	uint32_t instruction_number;
+
+    uint32_t instruction_number;
     ecmdDataBufferBase num_idles_16(16);
     ecmdDataBufferBase num_repeat_16(16);
     ecmdDataBufferBase data_20(20);
@@ -218,18 +218,18 @@ ReturnCode mss_mr6_loader( fapi::Target& i_target,uint32_t i_port_number,uint32_
     ecmdDataBufferBase rank_cal_4(4);
     ecmdDataBufferBase ddr_cal_enable_1(1);
     ecmdDataBufferBase ccs_end_1(1);
-    ecmdDataBufferBase mrs0(16); 
+    ecmdDataBufferBase mrs0(16);
     ecmdDataBufferBase mrs1(16);
     ecmdDataBufferBase mrs2(16);
     ecmdDataBufferBase mrs3(16);
     ecmdDataBufferBase mrs4(16);
     ecmdDataBufferBase mrs5(16);
     ecmdDataBufferBase mrs6(16);
-    
+
     uint16_t MRS6 = 0;
 
     ecmdDataBufferBase data_buffer(64);
-	instruction_number = 0;
+    instruction_number = 0;
 
     uint16_t num_ranks = 0;
 
@@ -252,30 +252,49 @@ ReturnCode mss_mr6_loader( fapi::Target& i_target,uint32_t i_port_number,uint32_
     if(rc) return rc;
 
 
-    // WORKAROUNDS 
+    // WORKAROUNDS
     rc = fapiGetScom(i_target, CCS_MODEQ_AB_REG_0x030106A7, data_buffer);
     if(rc) return rc;
     //Setting up CCS mode
     rc_num = rc_num | data_buffer.setBit(51);
+    if (rc_num)
+    {
+        FAPI_ERR( "mss_mr6_loader: Error setting up buffers");
+        rc_buff.setEcmdError(rc_num);
+        return rc_buff;
+    }
     rc = fapiPutScom(i_target, CCS_MODEQ_AB_REG_0x030106A7, data_buffer);
     if(rc) return rc;
 
-	if(i_port_number==0){
+        if(i_port_number==0){
     rc = fapiGetScom(i_target,DPHY01_DDRPHY_WC_CONFIG3_P0_0x8000CC050301143F, data_buffer);
     if(rc) return rc;
     //Setting up CCS mode
     rc_num = rc_num | data_buffer.clearBit(48);
+    if (rc_num)
+    {
+        FAPI_ERR( "mss_mr6_loader: Error setting up buffers");
+        rc_buff.setEcmdError(rc_num);
+        return rc_buff;
+    }
     rc = fapiPutScom(i_target,DPHY01_DDRPHY_WC_CONFIG3_P0_0x8000CC050301143F, data_buffer);
     if(rc) return rc;
-	}else{
-	
-	rc = fapiGetScom(i_target,DPHY01_DDRPHY_WC_CONFIG3_P1_0x8001CC050301143F, data_buffer);
+        }
+        else{
+
+        rc = fapiGetScom(i_target,DPHY01_DDRPHY_WC_CONFIG3_P1_0x8001CC050301143F, data_buffer);
     if(rc) return rc;
     //Setting up CCS mode
     rc_num = rc_num | data_buffer.clearBit(48);
+    if (rc_num)
+    {
+        FAPI_ERR( "mss_mr6_loader: Error setting up buffers");
+        rc_buff.setEcmdError(rc_num);
+        return rc_buff;
+    }
     rc = fapiPutScom(i_target,DPHY01_DDRPHY_WC_CONFIG3_P1_0x8001CC050301143F, data_buffer);
     if(rc) return rc;
-	}
+        }
 
     //Lines commented out in the following section are waiting for xml attribute adds
 
@@ -284,8 +303,8 @@ ReturnCode mss_mr6_loader( fapi::Target& i_target,uint32_t i_port_number,uint32_
     if(rc) return rc;
 
     FAPI_INF( "Stack Type: %d\n", dram_stack[0][0]);
-    
-	
+
+
     //MRS6
     uint8_t vrefdq_train_value[2][2][4]; //vrefdq_train value   -  NEW
     rc = FAPI_ATTR_GET( ATTR_VREF_DQ_TRAIN_VALUE, &i_target, vrefdq_train_value);
@@ -296,7 +315,7 @@ ReturnCode mss_mr6_loader( fapi::Target& i_target,uint32_t i_port_number,uint32_
     uint8_t vrefdq_train_enable[2][2][4]; //vrefdq_train enable  -  NEW
     rc = FAPI_ATTR_GET( ATTR_VREF_DQ_TRAIN_ENABLE, &i_target, vrefdq_train_enable);
     if(rc) return rc;
-    
+
     FAPI_INF("enable attribute %d",vrefdq_train_enable[0][0][0]);
 
 
@@ -306,23 +325,23 @@ ReturnCode mss_mr6_loader( fapi::Target& i_target,uint32_t i_port_number,uint32_
     if(rc) return rc;
     if (tccd_l == 4)
     {
-	tccd_l = 0x00;
+        tccd_l = 0x00;
     }
     else if (tccd_l == 5)
     {
-	tccd_l = 0x80;
+        tccd_l = 0x80;
     }
     else if (tccd_l == 6)
     {
-	tccd_l = 0x40;
-    }    
+        tccd_l = 0x40;
+    }
     else if (tccd_l == 7)
     {
-	tccd_l = 0xC0;
+        tccd_l = 0xC0;
     }
     else if (tccd_l == 8)
     {
-	tccd_l = 0x20;
+        tccd_l = 0x20;
     }
 
     // Raise CKE high with NOPS, waiting min Reset CKE exit time (tXPR) - 400 cycles
@@ -331,6 +350,14 @@ ReturnCode mss_mr6_loader( fapi::Target& i_target,uint32_t i_port_number,uint32_
     rc_num = rc_num | address_16.clearBit(0, 16);
     rc_num = rc_num | odt_4.clearBit(0,4);
     rc_num = rc_num | num_idles_16.insertFromRight((uint32_t) 400, 0, 16);
+
+    if (rc_num)
+    {
+        FAPI_ERR( "mss_mr6_loader: Error setting up buffers");
+        rc_buff.setEcmdError(rc_num);
+        return rc_buff;
+    }
+
     rc = mss_ccs_inst_arry_0( i_target,
                               io_ccs_inst_cnt,
                               address_16,
@@ -343,7 +370,7 @@ ReturnCode mss_mr6_loader( fapi::Target& i_target,uint32_t i_port_number,uint32_
                               csn_8,
                               odt_4,
                               ddr_cal_type_4,
-                              i_port_number);	     
+                              i_port_number);
     if(rc) return rc;
     rc = mss_ccs_inst_arry_1( i_target,
                               io_ccs_inst_cnt,
@@ -353,7 +380,7 @@ ReturnCode mss_mr6_loader( fapi::Target& i_target,uint32_t i_port_number,uint32_
                               read_compare_1,
                               rank_cal_4,
                               ddr_cal_enable_1,
-                              ccs_end_1);  
+                              ccs_end_1);
     if(rc) return rc;
     io_ccs_inst_cnt ++;
 
@@ -376,38 +403,38 @@ ReturnCode mss_mr6_loader( fapi::Target& i_target,uint32_t i_port_number,uint32_
                     rc_num = rc_num | csn_8.setBit(0,8);
                     rc_num = rc_num | address_16.clearBit(0, 16);
 
-		    //MRS6
+                    //MRS6
 
-		    vrefdq_train_value[i_port_number][dimm_number][rank_number] = mss_reverse_8bits(vrefdq_train_value[i_port_number][dimm_number][rank_number]);
+                    vrefdq_train_value[i_port_number][dimm_number][rank_number] = mss_reverse_8bits(vrefdq_train_value[i_port_number][dimm_number][rank_number]);
 
-		    if (vrefdq_train_range[i_port_number][dimm_number][rank_number] == ENUM_ATTR_VREF_DQ_TRAIN_RANGE_RANGE1)
-		    {
-			vrefdq_train_range[i_port_number][dimm_number][rank_number] = 0x00;
-		    }
-		    else if (vrefdq_train_range[i_port_number][dimm_number][rank_number] == ENUM_ATTR_VREF_DQ_TRAIN_RANGE_RANGE2)
-		    {
-			vrefdq_train_range[i_port_number][dimm_number][rank_number] = 0xFF;
-		    }	
+                    if (vrefdq_train_range[i_port_number][dimm_number][rank_number] == ENUM_ATTR_VREF_DQ_TRAIN_RANGE_RANGE1)
+                    {
+                        vrefdq_train_range[i_port_number][dimm_number][rank_number] = 0x00;
+                    }
+                    else if (vrefdq_train_range[i_port_number][dimm_number][rank_number] == ENUM_ATTR_VREF_DQ_TRAIN_RANGE_RANGE2)
+                    {
+                        vrefdq_train_range[i_port_number][dimm_number][rank_number] = 0xFF;
+                    }
 
-		    if (vrefdq_train_enable[i_port_number][dimm_number][rank_number] == ENUM_ATTR_VREF_DQ_TRAIN_ENABLE_ENABLE)
-		    {
-			vrefdq_train_enable[i_port_number][dimm_number][rank_number] = 0xff;FAPI_INF("ENABLE is enabled");
-		    }
-		    else if (vrefdq_train_enable[i_port_number][dimm_number][rank_number] == ENUM_ATTR_VREF_DQ_TRAIN_ENABLE_DISABLE)
-		    {
-			vrefdq_train_enable[i_port_number][dimm_number][rank_number] = 0x00;FAPI_INF("DISABLE is enabled");
-		    }	
+                    if (vrefdq_train_enable[i_port_number][dimm_number][rank_number] == ENUM_ATTR_VREF_DQ_TRAIN_ENABLE_ENABLE)
+                    {
+                        vrefdq_train_enable[i_port_number][dimm_number][rank_number] = 0xff;FAPI_INF("ENABLE is enabled");
+                    }
+                    else if (vrefdq_train_enable[i_port_number][dimm_number][rank_number] == ENUM_ATTR_VREF_DQ_TRAIN_ENABLE_DISABLE)
+                    {
+                        vrefdq_train_enable[i_port_number][dimm_number][rank_number] = 0x00;FAPI_INF("DISABLE is enabled");
+                    }
 
                     rc_num = rc_num | mrs6.insert((uint8_t) vrefdq_train_value[i_port_number][dimm_number][rank_number], 0, 6);
                     rc_num = rc_num | mrs6.insert((uint8_t) vrefdq_train_range[i_port_number][dimm_number][rank_number], 6, 1);
                     rc_num = rc_num | mrs6.insertFromRight((uint8_t) vrefdq_train_enable[i_port_number][dimm_number][rank_number], 7, 1);
-		    
-		    rc_num = rc_num | mrs6.insert((uint8_t) 0x00, 8, 2);
+
+                    rc_num = rc_num | mrs6.insert((uint8_t) 0x00, 8, 2);
                     rc_num = rc_num | mrs6.insert((uint8_t) tccd_l, 10, 3);
-		    rc_num = rc_num | mrs6.insert((uint8_t) 0x00, 13, 2);
+                    rc_num = rc_num | mrs6.insert((uint8_t) 0x00, 13, 2);
+
+                    rc_num = rc_num | mrs6.extractPreserve(&MRS6, 0, 16, 0);
 
-        	    rc_num = rc_num | mrs6.extractPreserve(&MRS6, 0, 16, 0);
-	
                    FAPI_INF( "MRS 6: 0x%04X", MRS6);
 
                     if (rc_num)
@@ -418,31 +445,24 @@ ReturnCode mss_mr6_loader( fapi::Target& i_target,uint32_t i_port_number,uint32_
                     }
 
                     // Only corresponding CS to rank
-                    rc_num = rc_num | csn_8.setBit(0,8); 
+                    rc_num = rc_num | csn_8.setBit(0,8);
                     rc_num = rc_num | csn_8.clearBit(rank_number+4*dimm_number);
-		    
-		    if (dram_stack[0][0] == ENUM_ATTR_EFF_STACK_TYPE_STACK_3DS)
-		    {
-		       FAPI_INF( "=============  Got in the 3DS stack loop CKE !!!!=====================\n");		    
+
+                    if (dram_stack[0][0] == ENUM_ATTR_EFF_STACK_TYPE_STACK_3DS)
+                    {
+                       FAPI_INF( "=============  Got in the 3DS stack loop CKE !!!!=====================\n");
                        rc_num = rc_num | csn_8.clearBit(2+4*dimm_number,2);
                        // I'm leaving this commented out - I need to double check it with Luke Mulkey to see which CS's are wired to which CKE's
-		       // rc_num = rc_num | cke_4.clearBit(1);
-		    }
-              
+                       // rc_num = rc_num | cke_4.clearBit(1);
+                    }
+
                     // Propogate through the 4 MRS cmds
                         // Copying the current MRS into address buffer matching the MRS_array order
-                        // Setting the bank address    
+                        // Setting the bank address
                             rc_num = rc_num | address_16.insert(mrs6, 0, 16, 0);
-			    rc_num = rc_num | bank_3.insert((uint8_t) MRS6_BA, 0, 1, 7);
+                            rc_num = rc_num | bank_3.insert((uint8_t) MRS6_BA, 0, 1, 7);
                             rc_num = rc_num | bank_3.insert((uint8_t) MRS6_BA, 1, 1, 6);
                             rc_num = rc_num | bank_3.insert((uint8_t) MRS6_BA, 2, 1, 5);
-                        
-			
-			if (( address_mirror_map[i_port_number][dimm_number] & (0x08 >> rank_number) ) && (is_sim == 0))
-			{
-                            rc = mss_address_mirror_swizzle(i_target, i_port_number, dimm_number, rank_number, address_16, bank_3);
-				if(rc) return rc;
-			}
 
                         if (rc_num)
                         {
@@ -450,7 +470,14 @@ ReturnCode mss_mr6_loader( fapi::Target& i_target,uint32_t i_port_number,uint32_
                             rc_buff.setEcmdError(rc_num);
                             return rc_buff;
                         }
-                        // Send out to the CCS array 
+
+                        if (( address_mirror_map[i_port_number][dimm_number] & (0x08 >> rank_number) ) && (is_sim == 0))
+                        {
+                            rc = mss_address_mirror_swizzle(i_target, i_port_number, dimm_number, rank_number, address_16, bank_3);
+                                if(rc) return rc;
+                        }
+
+                        // Send out to the CCS array
                         rc = mss_ccs_inst_arry_0( i_target,
                                           io_ccs_inst_cnt,
                                           address_16,
@@ -476,9 +503,9 @@ ReturnCode mss_mr6_loader( fapi::Target& i_target,uint32_t i_port_number,uint32_
                                           ccs_end_1);
                         if(rc) return rc;
                         io_ccs_inst_cnt ++;
-					
-				                    // Address inversion for RCD
-                    if ( (dimm_type == ENUM_ATTR_EFF_DIMM_TYPE_RDIMM) || (dimm_type == ENUM_ATTR_EFF_DIMM_TYPE_RDIMM || dimm_type == ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM) )  
+
+                                                    // Address inversion for RCD
+                    if ( (dimm_type == ENUM_ATTR_EFF_DIMM_TYPE_RDIMM) || (dimm_type == ENUM_ATTR_EFF_DIMM_TYPE_RDIMM || dimm_type == ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM) )
                     {
                        FAPI_INF( "Sending out MRS with Address Inversion to B-side DRAMs\n");
 
@@ -487,35 +514,34 @@ ReturnCode mss_mr6_loader( fapi::Target& i_target,uint32_t i_port_number,uint32_
                            // Copying the current MRS into address buffer matching the MRS_array order
                            // Setting the bank address
                                rc_num = rc_num | address_16.insert(mrs6, 0, 16, 0);
-   			       rc_num = rc_num | bank_3.insert((uint8_t) MRS6_BA, 0, 1, 7);
+                               rc_num = rc_num | bank_3.insert((uint8_t) MRS6_BA, 0, 1, 7);
                                rc_num = rc_num | bank_3.insert((uint8_t) MRS6_BA, 1, 1, 6);
                                rc_num = rc_num | bank_3.insert((uint8_t) MRS6_BA, 2, 1, 5);
 
-                           // Indicate B-Side DRAMS BG1=1 
+                           // Indicate B-Side DRAMS BG1=1
                            rc_num = rc_num | address_16.setBit(15);  // Set BG1 = 1
- 
+
                            rc_num = rc_num | address_16.flipBit(3,7); // Invert A3:A9
                            rc_num = rc_num | address_16.flipBit(11);  // Invert A11
                            rc_num = rc_num | address_16.flipBit(13);  // Invert A13
                            rc_num = rc_num | address_16.flipBit(14);  // Invert A17
                            rc_num = rc_num | bank_3.flipBit(0,3);     // Invert BA0,BA1,BG0
 
-   
-                           if (( address_mirror_map[i_port_number][dimm_number] & (0x08 >> rank_number) ) && (is_sim == 0))
-                           {
-                               rc = mss_address_mirror_swizzle(i_target, i_port_number, dimm_number, rank_number, address_16, bank_3);
-                               if(rc) return rc;
-                           }
-  
-   
+
                            if (rc_num)
                            {
                                FAPI_ERR( " Error setting up buffers");
                                rc_buff.setEcmdError(rc_num);
                                return rc_buff;
                            }
-                   
-                           // Send out to the CCS array 
+
+                           if (( address_mirror_map[i_port_number][dimm_number] & (0x08 >> rank_number) ) && (is_sim == 0))
+                           {
+                               rc = mss_address_mirror_swizzle(i_target, i_port_number, dimm_number, rank_number, address_16, bank_3);
+                               if(rc) return rc;
+                           }
+
+                           // Send out to the CCS array
                            rc = mss_ccs_inst_arry_0( i_target,
                                              io_ccs_inst_cnt,
                                              address_16,
@@ -542,7 +568,7 @@ ReturnCode mss_mr6_loader( fapi::Target& i_target,uint32_t i_port_number,uint32_
                            if(rc) return rc;
                            io_ccs_inst_cnt ++;
 
-					   
+
                  }
 instruction_number = io_ccs_inst_cnt;
 
@@ -550,11 +576,11 @@ rc = add_nop_to_ccs (i_target, address_16,instruction_number,rank_number,MRS6_BA
 io_ccs_inst_cnt = instruction_number;
 io_ccs_inst_cnt++;
 if (rc) return rc;
-				 
+
             }
         }
     }
-	
+
 
 
 
diff --git a/src/usr/hwpf/hwp/dram_training/mss_draminit_training/mss_draminit_training.C b/src/usr/hwpf/hwp/dram_training/mss_draminit_training/mss_draminit_training.C
index fcd2595..bf18b79 100644
--- a/src/usr/hwpf/hwp/dram_training/mss_draminit_training/mss_draminit_training.C
+++ b/src/usr/hwpf/hwp/dram_training/mss_draminit_training/mss_draminit_training.C
@@ -22,7 +22,7 @@
 /* permissions and limitations under the License.                         */
 /*                                                                        */
 /* IBM_PROLOG_END_TAG                                                     */
-// $Id: mss_draminit_training.C,v 1.94 2015/01/27 23:23:40 jdsloat Exp $
+// $Id: mss_draminit_training.C,v 1.101 2015/07/14 17:42:00 sglancy Exp $
 //------------------------------------------------------------------------------
 // Don't forget to create CVS comments when you check in your changes!
 //------------------------------------------------------------------------------
@@ -30,6 +30,13 @@
 //------------------------------------------------------------------------------
 // Version:|  Author: |  Date:  | Comment:
 //---------|----------|---------|------------------------------------------------
+//  1.101  | sglancy  |14-JUL-15| Fixed compile issue
+//  1.100  | sglancy  |13-JUL-15| Fixed compile issue
+//  1.99   | sglancy  |13-JUL-15| Fixed LR DIMM order of operations and addressed FW comments
+//  1.98   | sglancy  |24-JUN-15| Added call to DQS offset function
+//  1.97   | sglancy  |10-JUN-15| Fixed BBM set code call - removed comment of code
+//  1.96   | sglancy  |27-MAY-15| Added changes for DDR4 3DS
+//  1.95   | sglancy  |12-MAY-15| Added DDR4 WR VREF set
 //  1.94   | jdsloat  |27-JAN-14| Addressed FW concerns from gerrit.
 //  1.93   | jdsloat  |22-JAN-14| Moved the initialization of rank_invalid within BYTE DISABLE WORKAROUND
 //  1.92   | jdsloat  |20-JAN-14| Added new workaround for BYTE DISABLE and for WR LVL DISABLE.  This affects  RAS/BBM work.  
@@ -176,7 +183,7 @@
 #include <mss_unmask_errors.H>
 #include <mss_lrdimm_funcs.H>
 #include "mss_access_delay_reg.H"
-
+#include <mss_mrs6_DDR4.H>
 #ifdef FAPI_LRDIMM
 #include <mss_lrdimm_ddr4_funcs.H>
 #endif
@@ -221,7 +228,6 @@ fapi::ReturnCode mss_dram_write_leveling(Target& i_target, uint32_t port)
 }
 #endif
 
-
 //------------End My Includes-------------------------------------------
 
 //----------------------------------------------------------------------
@@ -253,6 +259,10 @@ enum mss_draminit_training_result
 
 extern "C" {
 
+
+//Sets the DQS offset to be 16 instead of 8, recommended training settings
+fapi::ReturnCode mss_setup_dqs_offset(Target &i_target);
+
 using namespace fapi;
 
 ReturnCode mss_draminit_training(Target& i_target);
@@ -488,7 +498,6 @@ ReturnCode mss_draminit_training_cloned(Target& i_target)
 
 
 
-
     if ( ( cal_steps_8.isBitSet(0) ) ||
 	 ( (cal_steps_8.isBitClear(0)) && (cal_steps_8.isBitClear(1)) &&
 	   (cal_steps_8.isBitClear(2)) && (cal_steps_8.isBitClear(3)) &&
@@ -503,15 +512,6 @@ ReturnCode mss_draminit_training_cloned(Target& i_target)
 	    rc = mss_execute_zq_cal(i_target, port);
 	    if(rc) return rc;
 
-            // Should only be called for DDR4 LRDIMMs, training code is in development. Does not effect any other configs
-	    if ( (dram_gen == ENUM_ATTR_EFF_DRAM_GEN_DDR4) &&
-                 (dimm_type == fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM) )
-            {
-                 rc = mss_mrep_training(i_target, port);
-		 if(rc) return rc;
-		 rc = mss_mxd_training(i_target,port,0);
-		 if(rc) return rc;
-            }
 	}
 
         if ( (dram_gen == ENUM_ATTR_EFF_DRAM_GEN_DDR3) && 
@@ -523,7 +523,55 @@ ReturnCode mss_draminit_training_cloned(Target& i_target)
             rc = mss_execute_lrdimm_mb_dram_training(i_target);
             if (rc) return rc;
         }
+	//executes the following to ensure that DRAMS have a good intial WR VREF DQ
+	//1) enter training mode w/ old value (nominal VREF DQ)
+	//2) set value in training mode (nominal VREF DQ)
+	//3) exit training mode (nominal VREF DQ)
+	else if(dram_gen == ENUM_ATTR_EFF_DRAM_GEN_DDR4) {
+	   FAPI_INF("For DDR4, setting VREFDQ to have an initial value!!!!");
+	   uint8_t train_enable[2][2][4];
+	   uint8_t train_enable_override_on[2][2][4] ={{{ENUM_ATTR_VREF_DQ_TRAIN_ENABLE_ENABLE,ENUM_ATTR_VREF_DQ_TRAIN_ENABLE_ENABLE,ENUM_ATTR_VREF_DQ_TRAIN_ENABLE_ENABLE,ENUM_ATTR_VREF_DQ_TRAIN_ENABLE_ENABLE},{ENUM_ATTR_VREF_DQ_TRAIN_ENABLE_ENABLE,ENUM_ATTR_VREF_DQ_TRAIN_ENABLE_ENABLE,ENUM_ATTR_VREF_DQ_TRAIN_ENABLE_ENABLE,ENUM_ATTR_VREF_DQ_TRAIN_ENABLE_ENABLE}},{{ENUM_ATTR_VREF_DQ_TRAIN_ENABLE_ENABLE,ENUM_ATTR_VREF_DQ_TRAIN_ENABLE_ENABLE,ENUM_ATTR_VREF_DQ_TRAIN_ENABLE_ENABLE,ENUM_ATTR_VREF_DQ_TRAIN_ENABLE_ENABLE},{ENUM_ATTR_VREF_DQ_TRAIN_ENABLE_ENABLE,ENUM_ATTR_VREF_DQ_TRAIN_ENABLE_ENABLE,ENUM_ATTR_VREF_DQ_TRAIN_ENABLE_ENABLE,ENUM_ATTR_VREF_DQ_TRAIN_ENABLE_ENABLE}}};
+	   
+	   rc = FAPI_ATTR_GET( ATTR_VREF_DQ_TRAIN_ENABLE, &i_target, train_enable);
+           if(rc) return rc;
+	   
+	   rc = FAPI_ATTR_SET(ATTR_VREF_DQ_TRAIN_ENABLE, &i_target, train_enable_override_on);
+	   if(rc) return rc;
+	   
+	   //runs new values w/ train enable forces on
+	   FAPI_INF("RUN MRS6 1ST");
+	   rc = mss_mrs6_DDR4(  i_target);
+	   if(rc) return rc;
+	   FAPI_INF("RUN MRS6 2ND");
+	   rc = mss_mrs6_DDR4( i_target);
+	   if(rc) return rc;
+	   
+	   //set old train enable value
+	   rc = FAPI_ATTR_SET(ATTR_VREF_DQ_TRAIN_ENABLE, &i_target, train_enable);
+	   if(rc) return rc;
+	   
+	   FAPI_INF("RUN MRS6 3RD");
+	   rc = mss_mrs6_DDR4( i_target);
+	   if(rc) return rc;
+	   
+	   //sets up the DQS offset to be 16 instead of 8
+	   rc = mss_setup_dqs_offset(i_target);
+	   if(rc) return rc;
+	}
+	//have to do ZQ cal, then DDR4 training mode for initial VREF setup, then do LR training
+	for(port = 0; port < MAX_NUM_PORT; port++)
+	{
 
+            // Should only be called for DDR4 LRDIMMs, training code is in development. Does not effect any other configs
+	    if ( (dram_gen == ENUM_ATTR_EFF_DRAM_GEN_DDR4) &&
+                 (dimm_type == fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM) )
+            {
+                 rc = mss_mrep_training(i_target, port);
+		 if(rc) return rc;
+		 rc = mss_mxd_training(i_target,port,0);
+		 if(rc) return rc;
+            }
+	}
     }
 
     for(port = 0; port < MAX_NUM_PORT; port++)
@@ -7019,7 +7067,7 @@ ReturnCode getC4dq2reg(const Target & i_mba, const uint8_t i_port,
     }
 
     // get Centaur dq bitmap (C4 signal) order=[0:79], array of bytes
-    rc = dimmGetBadDqBitmap(i_mba, i_port, i_dimm, i_rank, l_bbm);
+    rc = dimmGetBadDqBitmap(i_mba, i_port, i_dimm, i_rank, l_bbm); 
     if (rc)
     {
 		FAPI_ERR("Error from dimmGetBadDqBitmap on port %i: "
@@ -7161,7 +7209,7 @@ ReturnCode setC4dq2reg(const Target &i_mba, const uint8_t i_port,
 
 
     // get Centaur dq bitmap (C4 signal) order=[0:79], array of bytes
-    rc = dimmGetBadDqBitmap(i_mba, i_port, i_dimm, i_rank, l_bbm);
+    rc = dimmGetBadDqBitmap(i_mba, i_port, i_dimm, i_rank, l_bbm); 
     if (rc)
     {
 		FAPI_ERR("Error from dimmGetBadDqBitmap on port %i: "
@@ -7264,4 +7312,40 @@ ReturnCode setC4dq2reg(const Target &i_mba, const uint8_t i_port,
 } //end setC4dq2reg
 
 
+//Sets the DQS offset to be 16 instead of 8, recommended training settings
+fapi::ReturnCode mss_setup_dqs_offset(Target &i_target) {
+   fapi::ReturnCode rc;
+   uint32_t rc_num = 0;
+   ecmdDataBufferBase buffer(64);
+   uint64_t scom_addr_array[10] = {DPHY01_DDRPHY_DP18_DQSCLK_OFFSET_P0_0_0x800000370301143F , 
+      DPHY01_DDRPHY_DP18_DQSCLK_OFFSET_P0_1_0x800004370301143F , 
+      DPHY01_DDRPHY_DP18_DQSCLK_OFFSET_P0_2_0x800008370301143F , 
+      DPHY01_DDRPHY_DP18_DQSCLK_OFFSET_P0_3_0x80000C370301143F , 
+      DPHY01_DDRPHY_DP18_DQSCLK_OFFSET_P0_4_0x800010370301143F , 
+      DPHY01_DDRPHY_DP18_DQSCLK_OFFSET_P1_0_0x800100370301143F , 
+      DPHY01_DDRPHY_DP18_DQSCLK_OFFSET_P1_1_0x800104370301143F , 
+      DPHY01_DDRPHY_DP18_DQSCLK_OFFSET_P1_2_0x800108370301143F , 
+      DPHY01_DDRPHY_DP18_DQSCLK_OFFSET_P1_3_0x80010C370301143F , 
+      DPHY01_DDRPHY_DP18_DQSCLK_OFFSET_P1_4_0x800110370301143F};
+      
+   FAPI_INF("DDR4: setting up DQS offset to be 16");
+   for(uint8_t scom_addr = 0; scom_addr < 10; ++scom_addr) {
+      rc = fapiGetScom(i_target, scom_addr_array[scom_addr], buffer);
+      if(rc) return rc;
+      //Setting up CCS mode
+      rc_num = rc_num | buffer.insertFromRight ((uint32_t)16, 49, 7);
+      if (rc_num)
+      {
+         FAPI_ERR( "mss_setup_dqs: Error setting up buffers");
+    	 rc.setEcmdError(rc_num);
+    	 return rc;
+      }
+      rc = fapiPutScom(i_target, scom_addr_array[scom_addr], buffer);
+      if(rc) return rc;
+   }
+   
+   return rc;
+}
+
+
 } //end extern C
diff --git a/src/usr/hwpf/hwp/dram_training/mss_funcs.C b/src/usr/hwpf/hwp/dram_training/mss_funcs.C
index da6ea0f..2c1accb 100644
--- a/src/usr/hwpf/hwp/dram_training/mss_funcs.C
+++ b/src/usr/hwpf/hwp/dram_training/mss_funcs.C
@@ -5,7 +5,7 @@
 /*                                                                        */
 /* OpenPOWER HostBoot Project                                             */
 /*                                                                        */
-/* Contributors Listed Below - COPYRIGHT 2012,2014                        */
+/* Contributors Listed Below - COPYRIGHT 2012,2015                        */
 /* [+] International Business Machines Corp.                              */
 /*                                                                        */
 /*                                                                        */
@@ -22,13 +22,12 @@
 /* permissions and limitations under the License.                         */
 /*                                                                        */
 /* IBM_PROLOG_END_TAG                                                     */
-// $Id: mss_funcs.C,v 1.38 2014/04/01 15:24:50 jdsloat Exp $
+// $Id: mss_funcs.C,v 1.43 2015/09/10 14:57:26 thi Exp $
 /* File mss_funcs.C created by SLOAT JACOB D. (JAKE),2D3970 on Fri Apr 22 2011. */
 
 //------------------------------------------------------------------------------
 // *! (C) Copyright International Business Machines Corp. 2007
 // *! All Rights Reserved -- Property of IBM
-// *! ***  ***
 //------------------------------------------------------------------------------
 // *! TITLE : mss_funcs.C
 // *! DESCRIPTION : Tools for centaur procedures
@@ -45,6 +44,11 @@
 //------------------------------------------------------------------------------
 // Version:|  Author: |  Date:  | Comment:
 //---------|----------|---------|-----------------------------------------------
+//  1.43   | thi      |10-SEP-15| Fixed more RC stuff
+//  1.42   | kmack    |03-SEP-15| Fixed up some RC stuff
+//  1.41   | sglancy  |21-AUG-15| Fixed ODT initialization bug - ODT must be held low through ZQ cal
+//  1.40   | sglancy  |09-JUL-15| Added fixes to ZQ cal bug
+//  1.39   | sglancy  |27-MAY-15| Added fixes to ZQ cal for 3DS DIMMs
 //  1.38   | jdsloat  |01-APL-14| RAS review edits/changes
 //  1.37   | jdsloat  |28-MAR-14| RAS review edits/changes
 //  1.36   | kcook    | 03/12/14| Added check for DDR3 LRDIMM during mss_execut_zq_cal.
@@ -66,12 +70,12 @@
 //  1.20   | jdsloat  | 2/16/12 | Initialize rc_num
 //  1.19   | 2/14/12  |  jdsloat| MBA translation, elminate unnecesary RC returns, got rid of some port arguments
 //  1.18   | 2/08/12  |  jdsloat| Target to Target&, Added Error reporting
-//  1.17   | 2/02/12  |  jdsloat| Initialized reg_address to 0 
+//  1.17   | 2/02/12  |  jdsloat| Initialized reg_address to 0
 //  1.16   | 1/19/12  |  jdsloat| tabs to 4 spaces - properly, cke fix in mss_ccs_inst_arry_0
 //  1.15   | 1/16/12  |  jdsloat| tabs to 4 spaces
 //  1.14   | 1/13/12  |  jdsloat| Capatilization, curley brackets, "mss_" prefix, adding rc checks, argument prefixes, includes, RC checks
 //  1.13   | 1/6/12   |  jdsloat| Got rid of Globals
-//  1.12   | 12/23/11 | bellows | Printout poll count 
+//  1.12   | 12/23/11 | bellows | Printout poll count
 //  1.11   | 12/20/11 | bellows | Fixed up ODT default value of 00 for CCS
 //  1.10   | 12/16/11 | bellows | Bit number correction for ras,cas,wen and cal_type
 //  1.9    | 12/14/11 | bellows | Fixed Bank and Address bit reversals restored others
@@ -132,12 +136,12 @@ ReturnCode mss_ccs_set_end_bit(
     i_instruction_number = i_instruction_number + 1;
 
     FAPI_INF( "Setting End Bit on instruction (NOP): %d.", i_instruction_number);
- 
+
     // Single NOP with CKE raised high and the end bit set high
     rc_num = rc_num | csn_8.setBit(0,8);
     rc_num = rc_num | address_16.clearBit(0, 16);
     rc_num = rc_num | num_idles_16.clearBit(0, 16);
-    rc_num = rc_num | odt_4.setBit(0,4);
+    rc_num = rc_num | odt_4.clearBit(0,4);
     rc_num = rc_num | csn_8.setBit(0,8);
     rc_num = rc_num | cke_4.setBit(0,4);
     rc_num = rc_num | wen_1.clearBit(0);
@@ -145,8 +149,12 @@ ReturnCode mss_ccs_set_end_bit(
     rc_num = rc_num | rasn_1.clearBit(0);
     rc_num = rc_num | ccs_end_1.setBit(0);
 
-    rc.setEcmdError(rc_num);
-    if(rc) return rc;
+    if (rc_num)
+    {
+        FAPI_ERR( "Error setting up buffers");
+        rc.setEcmdError(rc_num);
+        return rc;
+    }
 
     rc = mss_ccs_inst_arry_0( i_target,
                               i_instruction_number,
@@ -160,7 +168,7 @@ ReturnCode mss_ccs_set_end_bit(
                               csn_8,
                               odt_4,
                               ddr_cal_type_4,
-                              l_port_number);	
+                              l_port_number);
     if(rc) return rc;
     rc = mss_ccs_inst_arry_1( i_target,
                               i_instruction_number,
@@ -180,8 +188,8 @@ ReturnCode mss_ccs_set_end_bit(
 ReturnCode mss_address_mirror_swizzle(
             Target& i_target,
             uint32_t i_port,
-	    uint32_t i_dimm,
-	    uint32_t i_rank,
+            uint32_t i_dimm,
+            uint32_t i_rank,
             ecmdDataBufferBase& io_address,
             ecmdDataBufferBase& io_bank
               )
@@ -198,77 +206,97 @@ ReturnCode mss_address_mirror_swizzle(
     rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_GEN, &i_target, dram_gen);
     if(rc) return rc;
 
-	FAPI_INF( "ADDRESS MIRRORING ON %s PORT%d DIMM%d RANK%d", i_target.toEcmdString(), i_port, i_dimm, i_rank);
-
-	rc_num = rc_num | io_address.extractPreserve(&mirror_mode_ad, 0, 16, 0);
-	FAPI_INF( "PRE - MIRROR MODE ADDRESS: 0x%04X", mirror_mode_ad);
-	rc_num = rc_num | io_bank.extractPreserve(&mirror_mode_ba, 0, 3, 0);
-	FAPI_INF( "PRE - MIRROR MODE BANK ADDRESS: 0x%04X", mirror_mode_ba);
-
-	//Initialize address and bank address as the same pre mirror mode swizzle
-	rc_num = rc_num | address_post_swizzle_16.insert(io_address, 0, 16, 0);
-	rc_num = rc_num | bank_post_swizzle_3.insert(io_bank, 0, 3, 0);
-
-	if (dram_gen == ENUM_ATTR_EFF_DRAM_GEN_DDR3) 
-	{
-		//Swap A3 and A4
-		rc_num = rc_num | address_post_swizzle_16.insert(io_address, 4, 1, 3);
-		rc_num = rc_num | address_post_swizzle_16.insert(io_address, 3, 1, 4);
-
-		//Swap A5 and A6
-		rc_num = rc_num | address_post_swizzle_16.insert(io_address, 6, 1, 5);
-		rc_num = rc_num | address_post_swizzle_16.insert(io_address, 5, 1, 6);
-
-		//Swap A7 and A8
-		rc_num = rc_num | address_post_swizzle_16.insert(io_address, 8, 1, 7);
-		rc_num = rc_num | address_post_swizzle_16.insert(io_address, 7, 1, 8);
-
-		//Swap BA0 and BA1
-		rc_num = rc_num | bank_post_swizzle_3.insert(io_bank, 1, 1, 0);
-		rc_num = rc_num | bank_post_swizzle_3.insert(io_bank, 0, 1, 1);
-	}
-	else if (dram_gen == ENUM_ATTR_EFF_DRAM_GEN_DDR4)
-	{
-		//Swap A3 and A4
-		rc_num = rc_num | address_post_swizzle_16.insert(io_address, 4, 1, 3);
-		rc_num = rc_num | address_post_swizzle_16.insert(io_address, 3, 1, 4);
-
-		//Swap A5 and A6
-		rc_num = rc_num | address_post_swizzle_16.insert(io_address, 6, 1, 5);
-		rc_num = rc_num | address_post_swizzle_16.insert(io_address, 5, 1, 6);
-
-		//Swap A7 and A8
-		rc_num = rc_num | address_post_swizzle_16.insert(io_address, 8, 1, 7);
-		rc_num = rc_num | address_post_swizzle_16.insert(io_address, 7, 1, 8);
-
-		//Swap A11 and A13
-		rc_num = rc_num | address_post_swizzle_16.insert(io_address, 13, 1, 11);
-		rc_num = rc_num | address_post_swizzle_16.insert(io_address, 11, 1, 13);
-
-		//Swap BA0 and BA1
-		rc_num = rc_num | bank_post_swizzle_3.insert(io_bank, 1, 1, 0);
-		rc_num = rc_num | bank_post_swizzle_3.insert(io_bank, 0, 1, 1);
-
-		//Swap BG0 and BG1 (BA2 and ADDR 15)
-		rc_num = rc_num | bank_post_swizzle_3.insert(io_address, 2, 1, 15);
-		rc_num = rc_num | address_post_swizzle_16.insert(io_bank, 15, 1, 2);
-	}
-
-	rc_num = rc_num | address_post_swizzle_16.extractPreserve(&mirror_mode_ad, 0, 16, 0);
-	FAPI_INF( "POST - MIRROR MODE ADDRESS: 0x%04X", mirror_mode_ad);
-	rc_num = rc_num | bank_post_swizzle_3.extractPreserve(&mirror_mode_ba, 0, 3, 0);
-	FAPI_INF( "POST - MIRROR MODE BANK ADDRESS: 0x%04X", mirror_mode_ba);
-
-	//copy address and bank address back to the IO variables
-	rc_num = rc_num | io_address.insert(address_post_swizzle_16, 0, 16, 0);
-	rc_num = rc_num | io_bank.insert(bank_post_swizzle_3, 0, 3, 0);
+        FAPI_INF( "ADDRESS MIRRORING ON %s PORT%d DIMM%d RANK%d", i_target.toEcmdString(), i_port, i_dimm, i_rank);
 
-    if (rc_num)
-    {
-        FAPI_ERR( "Error setting up buffers");
-        rc_buff.setEcmdError(rc_num);
-        return rc_buff;
-    }
+        rc_num = rc_num | io_address.extractPreserve(&mirror_mode_ad, 0, 16, 0);
+        FAPI_INF( "PRE - MIRROR MODE ADDRESS: 0x%04X", mirror_mode_ad);
+        rc_num = rc_num | io_bank.extractPreserve(&mirror_mode_ba, 0, 3, 0);
+        FAPI_INF( "PRE - MIRROR MODE BANK ADDRESS: 0x%04X", mirror_mode_ba);
+
+        //Initialize address and bank address as the same pre mirror mode swizzle
+        rc_num = rc_num | address_post_swizzle_16.insert(io_address, 0, 16, 0);
+        rc_num = rc_num | bank_post_swizzle_3.insert(io_bank, 0, 3, 0);
+
+        if (rc_num)
+        {
+            FAPI_ERR( "mss_address_mirror_swizzle: Error setting up buffers");
+            rc_buff.setEcmdError(rc_num);
+            return rc_buff;
+        }
+        if (dram_gen == ENUM_ATTR_EFF_DRAM_GEN_DDR3)
+        {
+                //Swap A3 and A4
+                rc_num = rc_num | address_post_swizzle_16.insert(io_address, 4, 1, 3);
+                rc_num = rc_num | address_post_swizzle_16.insert(io_address, 3, 1, 4);
+
+                //Swap A5 and A6
+                rc_num = rc_num | address_post_swizzle_16.insert(io_address, 6, 1, 5);
+                rc_num = rc_num | address_post_swizzle_16.insert(io_address, 5, 1, 6);
+
+                //Swap A7 and A8
+                rc_num = rc_num | address_post_swizzle_16.insert(io_address, 8, 1, 7);
+                rc_num = rc_num | address_post_swizzle_16.insert(io_address, 7, 1, 8);
+
+                //Swap BA0 and BA1
+                rc_num = rc_num | bank_post_swizzle_3.insert(io_bank, 1, 1, 0);
+                rc_num = rc_num | bank_post_swizzle_3.insert(io_bank, 0, 1, 1);
+
+                if (rc_num)
+                {
+                    FAPI_ERR( "mss_address_mirror_swizzle: Error setting up buffers");
+                    rc_buff.setEcmdError(rc_num);
+                    return rc_buff;
+                }
+        }
+        else if (dram_gen == ENUM_ATTR_EFF_DRAM_GEN_DDR4)
+        {
+                //Swap A3 and A4
+                rc_num = rc_num | address_post_swizzle_16.insert(io_address, 4, 1, 3);
+                rc_num = rc_num | address_post_swizzle_16.insert(io_address, 3, 1, 4);
+
+                //Swap A5 and A6
+                rc_num = rc_num | address_post_swizzle_16.insert(io_address, 6, 1, 5);
+                rc_num = rc_num | address_post_swizzle_16.insert(io_address, 5, 1, 6);
+
+                //Swap A7 and A8
+                rc_num = rc_num | address_post_swizzle_16.insert(io_address, 8, 1, 7);
+                rc_num = rc_num | address_post_swizzle_16.insert(io_address, 7, 1, 8);
+
+                //Swap A11 and A13
+                rc_num = rc_num | address_post_swizzle_16.insert(io_address, 13, 1, 11);
+                rc_num = rc_num | address_post_swizzle_16.insert(io_address, 11, 1, 13);
+
+                //Swap BA0 and BA1
+                rc_num = rc_num | bank_post_swizzle_3.insert(io_bank, 1, 1, 0);
+                rc_num = rc_num | bank_post_swizzle_3.insert(io_bank, 0, 1, 1);
+
+                //Swap BG0 and BG1 (BA2 and ADDR 15)
+                rc_num = rc_num | bank_post_swizzle_3.insert(io_address, 2, 1, 15);
+                rc_num = rc_num | address_post_swizzle_16.insert(io_bank, 15, 1, 2);
+
+                if (rc_num)
+                {
+                    FAPI_ERR( "mss_address_mirror_swizzle: Error setting up buffers");
+                    rc_buff.setEcmdError(rc_num);
+                    return rc_buff;
+                }
+        }
+
+        rc_num = rc_num | address_post_swizzle_16.extractPreserve(&mirror_mode_ad, 0, 16, 0);
+        FAPI_INF( "POST - MIRROR MODE ADDRESS: 0x%04X", mirror_mode_ad);
+        rc_num = rc_num | bank_post_swizzle_3.extractPreserve(&mirror_mode_ba, 0, 3, 0);
+        FAPI_INF( "POST - MIRROR MODE BANK ADDRESS: 0x%04X", mirror_mode_ba);
+
+        //copy address and bank address back to the IO variables
+        rc_num = rc_num | io_address.insert(address_post_swizzle_16, 0, 16, 0);
+        rc_num = rc_num | io_bank.insert(bank_post_swizzle_3, 0, 3, 0);
+
+        if (rc_num)
+        {
+            FAPI_ERR( "mss_address_mirror_swizzle: Error setting up buffers");
+            rc_buff.setEcmdError(rc_num);
+            return rc_buff;
+        }
 
     return rc;
 }
@@ -310,11 +338,12 @@ ReturnCode mss_ccs_inst_arry_0(
 
     if (i_port == 0xFFFFFFFF)
     {
-	i_port = 0;
+        i_port = 0;
     }
 
     reg_address = io_instruction_number + CCS_INST_ARRY0_AB_REG0_0x03010615;
 
+    rc_num = rc_num | data_buffer.flushTo0();
     rc_num = rc_num | data_buffer.insert(i_cke, 24, 4, 0);
     rc_num = rc_num | data_buffer.insert(i_cke, 28, 4, 0);
 
@@ -371,7 +400,7 @@ ReturnCode mss_ccs_inst_arry_1(
     //CCS_INST_ARRY_1( i_target, io_instruction_number, i_num_idles, i_num_repeat, i_data, i_read_compare, i_rank_cal, i_ddr_cal_enable, i_ccs_end);
     ReturnCode rc;
     ReturnCode rc_buff;
-    uint32_t rc_num = 0; 
+    uint32_t rc_num = 0;
     uint32_t reg_address = 0;
     ecmdDataBufferBase goto_inst(5);
 
@@ -418,7 +447,7 @@ ReturnCode mss_ccs_inst_arry_1(
 ReturnCode mss_ccs_load_data_pattern(
             Target& i_target,
             uint32_t io_instruction_number,
-	    mss_ccs_data_pattern data_pattern)
+            mss_ccs_data_pattern data_pattern)
 {
     //Example Use:
     //
@@ -426,19 +455,19 @@ ReturnCode mss_ccs_load_data_pattern(
 
     if (data_pattern == MSS_CCS_DATA_PATTERN_00)
       {
-	rc = mss_ccs_load_data_pattern(i_target, io_instruction_number, 0x00000000);
+        rc = mss_ccs_load_data_pattern(i_target, io_instruction_number, 0x00000000);
       }
     else if (data_pattern == MSS_CCS_DATA_PATTERN_0F)
       {
-	rc = mss_ccs_load_data_pattern(i_target, io_instruction_number, 0x00055555);
+        rc = mss_ccs_load_data_pattern(i_target, io_instruction_number, 0x00055555);
       }
     else if (data_pattern == MSS_CCS_DATA_PATTERN_F0)
       {
-	rc = mss_ccs_load_data_pattern(i_target, io_instruction_number, 0x000aaaaa);
+        rc = mss_ccs_load_data_pattern(i_target, io_instruction_number, 0x000aaaaa);
       }
     else if (data_pattern == MSS_CCS_DATA_PATTERN_FF)
       {
-	rc = mss_ccs_load_data_pattern(i_target, io_instruction_number, 0x000fffff);
+        rc = mss_ccs_load_data_pattern(i_target, io_instruction_number, 0x000fffff);
       }
 
     return rc;
@@ -448,13 +477,13 @@ ReturnCode mss_ccs_load_data_pattern(
 ReturnCode mss_ccs_load_data_pattern(
             Target& i_target,
             uint32_t io_instruction_number,
-	    uint32_t data_pattern)
+            uint32_t data_pattern)
 {
     //Example Use:
     //
     ReturnCode rc;
     ReturnCode rc_buff;
-    uint32_t rc_num = 0; 
+    uint32_t rc_num = 0;
     uint32_t reg_address = 0;
 
     if (io_instruction_number > 31)
@@ -469,16 +498,16 @@ ReturnCode mss_ccs_load_data_pattern(
       //read current array1 reg
       rc = fapiGetScom(i_target, reg_address, data_buffer);
       if(rc) return rc;
-      
+
       //modify data bits for specified pattern
       rc_num = rc_num | data_buffer.insertFromRight(data_pattern, 32, 20);
       if (rc_num)
-	{
+        {
         FAPI_ERR( "mss_ccs_load_data_pattern: Error setting up buffers");
         rc_buff.setEcmdError(rc_num);
         return rc_buff;
-	}
-      
+        }
+
       //write array1 back out
       rc = fapiPutScom(i_target, reg_address, data_buffer);
       if(rc) return rc;
@@ -595,7 +624,7 @@ ReturnCode mss_ccs_status_query( Target& i_target, mss_ccs_status_query_result&
     {
         io_status = MSS_STAT_QUERY_PASS;
     }
-    else 
+    else
     {
         FAPI_INF("CCS Status Undetermined.");
     }
@@ -614,27 +643,27 @@ ReturnCode mss_ccs_fail_type(
 
     if (data_buffer.getBit(3))
     {
-	//DECONFIG and FFDC INFO
-	const fapi::Target & TARGET_MBA_ERROR = i_target;
-	const ecmdDataBufferBase & REG_CONTENTS = data_buffer;
+        //DECONFIG and FFDC INFO
+        const fapi::Target & TARGET_MBA_ERROR = i_target;
+        const ecmdDataBufferBase & REG_CONTENTS = data_buffer;
 
         FAPI_ERR("CCS returned a FAIL condtion of \"Read Miscompare\" ");
         FAPI_SET_HWP_ERROR(rc, RC_MSS_CCS_READ_MISCOMPARE);
-    } 
+    }
     else if (data_buffer.getBit(4))
     {
-	//DECONFIG and FFDC INFO
-	const fapi::Target & TARGET_MBA_ERROR = i_target;
-	const ecmdDataBufferBase & REG_CONTENTS = data_buffer;
+        //DECONFIG and FFDC INFO
+        const fapi::Target & TARGET_MBA_ERROR = i_target;
+        const ecmdDataBufferBase & REG_CONTENTS = data_buffer;
 
         FAPI_ERR("CCS returned a FAIL condition of \"UE or SUE Error\" ");
         FAPI_SET_HWP_ERROR(rc, RC_MSS_CCS_UE_SUE);
     }
     else if (data_buffer.getBit(5))
     {
-	//DECONFIG and FFDC INFO
-	const fapi::Target & TARGET_MBA_ERROR = i_target;
-	const ecmdDataBufferBase & REG_CONTENTS = data_buffer;
+        //DECONFIG and FFDC INFO
+        const fapi::Target & TARGET_MBA_ERROR = i_target;
+        const ecmdDataBufferBase & REG_CONTENTS = data_buffer;
 
         FAPI_ERR("CCS returned a FAIL condition of \"Calibration Operation Time Out\" ");
         FAPI_SET_HWP_ERROR(rc, RC_MSS_CCS_CAL_TIMEOUT);
@@ -668,35 +697,35 @@ ReturnCode mss_execute_ccs_inst_array(
 
     if (status == MSS_STAT_QUERY_FAIL)
     {
-        FAPI_ERR("CCS FAILED");    
+        FAPI_ERR("CCS FAILED");
         rc = mss_ccs_fail_type(i_target);
         if(rc) return rc;
         FAPI_ERR("CCS has returned a fail.");
     }
     else if (status == MSS_STAT_QUERY_IN_PROGRESS)
-    {        
+    {
         FAPI_ERR("CCS Operation Hung");
         FAPI_ERR("CCS has returned a IN_PROGRESS status and considered Hung.");
         rc = mss_ccs_fail_type(i_target);
         if(rc)
-	{
-	    return rc;
-	}
-	else
-	{
-	    //DECONFIG and FFDC INFO
-	    const fapi::Target & TARGET_MBA_ERROR = i_target;
+        {
+            return rc;
+        }
+        else
+        {
+            //DECONFIG and FFDC INFO
+            const fapi::Target & TARGET_MBA_ERROR = i_target;
 
             FAPI_ERR("Returning a CCS HUNG RC Value.");
-	    FAPI_SET_HWP_ERROR(rc, RC_MSS_CCS_HUNG);
-	    return rc;
-	}
+            FAPI_SET_HWP_ERROR(rc, RC_MSS_CCS_HUNG);
+            return rc;
+        }
     }
     else if (status == MSS_STAT_QUERY_PASS)
     {
         FAPI_INF("CCS Executed Successfully.");
     }
-    else 
+    else
     {
         FAPI_INF("CCS Status Undetermined.");
     }
@@ -759,24 +788,24 @@ ReturnCode mss_rcd_parity_check(
 
     if (rcd_parity_fail)
     {
-	//DECONFIG and FFDC INFO
-	const fapi::Target & TARGET_MBA_ERROR = i_target;
+        //DECONFIG and FFDC INFO
+        const fapi::Target & TARGET_MBA_ERROR = i_target;
 
         FAPI_ERR("Ports 0 and 1 has exceeded a maximum number of RCD Parity Errors.");
         FAPI_SET_HWP_ERROR(rc, RC_MSS_RCD_PARITY_ERROR_LIMIT);
     }
     else if ((port_0_error) && (i_port == 0))
     {
-	//DECONFIG and FFDC INFO
-	const fapi::Target & TARGET_MBA_ERROR = i_target;
+        //DECONFIG and FFDC INFO
+        const fapi::Target & TARGET_MBA_ERROR = i_target;
 
         FAPI_ERR("Port 0 has recorded an RCD Parity Error. ");
         FAPI_SET_HWP_ERROR(rc, RC_MSS_RCD_PARITY_ERROR_PORT0);
     }
     else if ((port_1_error) && (i_port == 1))
     {
-	//DECONFIG and FFDC INFO
-	const fapi::Target & TARGET_MBA_ERROR = i_target;
+        //DECONFIG and FFDC INFO
+        const fapi::Target & TARGET_MBA_ERROR = i_target;
 
         FAPI_ERR("Port 1 has recorded an RCD Parity Error. ");
         FAPI_SET_HWP_ERROR(rc, RC_MSS_RCD_PARITY_ERROR_PORT1);
@@ -805,23 +834,26 @@ ReturnCode mss_execute_zq_cal(
 
     uint32_t instruction_number = 0;
     ReturnCode rc;
+    ReturnCode rc_buff;
     uint32_t rc_num = 0;
 
+    //adds a NOP before ZQ cal
     ecmdDataBufferBase address_buffer_16(16);
-    rc_num = rc_num | address_buffer_16.setHalfWord(0, 0x0020); //Set A10 bit for ZQCal Long
+    rc_num = rc_num | address_buffer_16.setHalfWord(0, 0x0000); //Set A10 bit for ZQCal Long
     ecmdDataBufferBase bank_buffer_8(8);
     rc_num = rc_num | bank_buffer_8.flushTo0();
     ecmdDataBufferBase activate_buffer_1(1);
     rc_num = rc_num | activate_buffer_1.flushTo1();
     ecmdDataBufferBase rasn_buffer_1(1);
-    rc_num = rc_num | rasn_buffer_1.flushTo1(); //For ZQCal rasn = 1; casn = 1; wen = 0;
+    rc_num = rc_num | rasn_buffer_1.flushTo1(); //For NOP rasn = 1; casn = 1; wen = 1;
     ecmdDataBufferBase casn_buffer_1(1);
     rc_num = rc_num | casn_buffer_1.flushTo1();
     ecmdDataBufferBase wen_buffer_1(1);
-    rc_num = rc_num | wen_buffer_1.flushTo0();
+    rc_num = rc_num | wen_buffer_1.flushTo1();
     ecmdDataBufferBase cke_buffer_8(8);
     rc_num = rc_num | cke_buffer_8.flushTo1();
     ecmdDataBufferBase csn_buffer_8(8);
+    rc_num = rc_num | csn_buffer_8.flushTo1();;
     ecmdDataBufferBase odt_buffer_8(8);
     rc_num = rc_num | odt_buffer_8.flushTo0();
     ecmdDataBufferBase test_buffer_4(4);
@@ -840,7 +872,7 @@ ReturnCode mss_execute_zq_cal(
     ecmdDataBufferBase ddr_cal_enable_buffer_1(1);
     rc_num = rc_num | ddr_cal_enable_buffer_1.flushTo0();
     ecmdDataBufferBase ccs_end_buffer_1(1);
-    rc_num = rc_num | ccs_end_buffer_1.flushTo1();
+    rc_num = rc_num | ccs_end_buffer_1.flushTo0();
 
     ecmdDataBufferBase stop_on_err_buffer_1(1);
     rc_num = rc_num | stop_on_err_buffer_1.flushTo0();
@@ -849,18 +881,79 @@ ReturnCode mss_execute_zq_cal(
     ecmdDataBufferBase data_buffer_64(64);
     rc_num = rc_num | data_buffer_64.flushTo0();
 
+    if (rc_num)
+    {
+        FAPI_ERR( "mss_execute_zq_cal: Error setting up buffers");
+        rc_buff.setEcmdError(rc_num);
+        return rc_buff;
+    }
+
+    rc = mss_ccs_inst_arry_0(i_target, instruction_number, address_buffer_16, bank_buffer_8, activate_buffer_1, rasn_buffer_1, casn_buffer_1, wen_buffer_1, cke_buffer_8, csn_buffer_8, odt_buffer_8, test_buffer_4, i_port);
+    if(rc) return rc; //Error handling for mss_ccs_inst built into mss_funcs
+    rc = mss_ccs_inst_arry_1(i_target, instruction_number, num_idles_buffer_16, num_repeat_buffer_16, data_buffer_20, read_compare_buffer_1, rank_cal_buffer_3, ddr_cal_enable_buffer_1, ccs_end_buffer_1);
+    if(rc) return rc; //Error handling for mss_ccs_inst built into mss_funcs
+
+    rc = mss_ccs_inst_arry_0(i_target, instruction_number, address_buffer_16, bank_buffer_8, activate_buffer_1, rasn_buffer_1, casn_buffer_1, wen_buffer_1, cke_buffer_8, csn_buffer_8, odt_buffer_8, test_buffer_4, i_port);
+    if(rc) return rc; //Error handling for mss_ccs_inst built into mss_funcs
+    rc = mss_ccs_inst_arry_1(i_target, instruction_number, num_idles_buffer_16, num_repeat_buffer_16, data_buffer_20, read_compare_buffer_1, rank_cal_buffer_3, ddr_cal_enable_buffer_1, ccs_end_buffer_1);
+    if(rc) return rc; //Error handling for mss_ccs_inst built into mss_funcs
+
+    rc = mss_ccs_inst_arry_0(i_target, instruction_number, address_buffer_16, bank_buffer_8, activate_buffer_1, rasn_buffer_1, casn_buffer_1, wen_buffer_1, cke_buffer_8, csn_buffer_8, odt_buffer_8, test_buffer_4, i_port);
+    if(rc) return rc; //Error handling for mss_ccs_inst built into mss_funcs
+    rc = mss_ccs_inst_arry_1(i_target, instruction_number, num_idles_buffer_16, num_repeat_buffer_16, data_buffer_20, read_compare_buffer_1, rank_cal_buffer_3, ddr_cal_enable_buffer_1, ccs_end_buffer_1);
+    if(rc) return rc; //Error handling for mss_ccs_inst built into mss_funcs
+
+    instruction_number = 1;
+
+    //now sets up for ZQ CAL
+    rc_num = rc_num | address_buffer_16.setHalfWord(0, 0x0020); //Set A10 bit for ZQCal Long
+    rc_num = rc_num | bank_buffer_8.flushTo0();
+    rc_num = rc_num | activate_buffer_1.flushTo1();
+    rc_num = rc_num | rasn_buffer_1.flushTo1(); //For ZQCal rasn = 1; casn = 1; wen = 0;
+    rc_num = rc_num | casn_buffer_1.flushTo1();
+    rc_num = rc_num | wen_buffer_1.flushTo0();
+    rc_num = rc_num | cke_buffer_8.flushTo1();
+    rc_num = rc_num | odt_buffer_8.flushTo0();
+    rc_num = rc_num | test_buffer_4.flushTo0(); // 01XX:External ZQ calibration
+    rc_num = rc_num | test_buffer_4.setBit(1);
+    rc_num = rc_num | num_idles_buffer_16.setHalfWord(0, 0x0400); //1024 for ZQCal
+    rc_num = rc_num | num_repeat_buffer_16.flushTo0();
+    rc_num = rc_num | data_buffer_20.flushTo0();
+    rc_num = rc_num | read_compare_buffer_1.flushTo0();
+    rc_num = rc_num | rank_cal_buffer_3.flushTo0();
+    rc_num = rc_num | ddr_cal_enable_buffer_1.flushTo0();
+    rc_num = rc_num | ccs_end_buffer_1.flushTo0();
+    rc_num = rc_num | stop_on_err_buffer_1.flushTo0();
+    rc_num = rc_num | resetn_buffer_1.setBit(0);
+    rc_num = rc_num | data_buffer_64.flushTo0();
+
+    if (rc_num)
+    {
+        FAPI_ERR( "mss_execute_zq_cal: Error setting up buffers");
+        rc_buff.setEcmdError(rc_num);
+        return rc_buff;
+    }
+
+
     uint8_t current_rank = 0;
     uint8_t start_rank = 0;
+    uint8_t num_master_ranks_array[2][2];
     uint8_t num_ranks_array[2][2]; //num_ranks_array[port][dimm]
+    uint8_t stack_type[2][2];
     uint8_t dimm_type;
     uint8_t lrdimm_rank_mult_mode;
     uint8_t dram_gen = 0;
+    uint8_t rank_end = 0;
 
     rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_GEN, &i_target, dram_gen);
     if(rc) return rc;
 
     rc = FAPI_ATTR_GET(ATTR_EFF_NUM_RANKS_PER_DIMM, &i_target, num_ranks_array);
     if(rc) return rc;
+    rc = FAPI_ATTR_GET(ATTR_EFF_STACK_TYPE, &i_target, stack_type);
+    if(rc) return rc;
+    rc = FAPI_ATTR_GET(ATTR_EFF_NUM_MASTER_RANKS_PER_DIMM, &i_target, num_master_ranks_array);
+    if(rc) return rc;
     rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_TYPE, &i_target, dimm_type);
     if(rc) return rc;
 
@@ -882,18 +975,24 @@ ReturnCode mss_execute_zq_cal(
     {
         start_rank=(4 * dimm);
 
-        if ( (dimm_type == ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM) && (dram_gen == ENUM_ATTR_EFF_DRAM_GEN_DDR3) ) 
+        if ( (dimm_type == ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM) && (dram_gen == ENUM_ATTR_EFF_DRAM_GEN_DDR3) )
         {
            rc = FAPI_ATTR_GET(ATTR_LRDIMM_RANK_MULT_MODE, &i_target, lrdimm_rank_mult_mode);
            if(rc) return rc;
-           
+
            if ( num_ranks_array[i_port][dimm] == 8 && lrdimm_rank_mult_mode == 4)
            { // For LRDIMM 8 Rank, RM=4, CS0 and CS1 to execute ZQ cal
-              num_ranks_array[i_port][dimm] = 2;
+              rank_end = 2;
            }
         }
+        else if(stack_type[i_port][dimm] == ENUM_ATTR_EFF_STACK_TYPE_STACK_3DS) {
+           rank_end = num_master_ranks_array[i_port][dimm];
+        }
+        else {
+           rank_end = num_ranks_array[i_port][dimm];
+        }
 
-        for(current_rank = start_rank; current_rank < start_rank + num_ranks_array[i_port][dimm]; current_rank++) {
+        for(current_rank = start_rank; current_rank < start_rank + rank_end; current_rank++) {
             FAPI_INF( "+++++++++++++++ Sending zqcal to port: %d rank: %d +++++++++++++++", i_port, current_rank);
             rc_num = rc_num | csn_buffer_8.flushTo1();
             rc_num = rc_num | csn_buffer_8.clearBit(current_rank);
@@ -909,8 +1008,10 @@ ReturnCode mss_execute_zq_cal(
             if(rc) return rc; //Error handling for mss_ccs_inst built into mss_funcs
             rc = mss_ccs_inst_arry_1(i_target, instruction_number, num_idles_buffer_16, num_repeat_buffer_16, data_buffer_20, read_compare_buffer_1, rank_cal_buffer_3, ddr_cal_enable_buffer_1, ccs_end_buffer_1);
             if(rc) return rc; //Error handling for mss_ccs_inst built into mss_funcs
+            rc = mss_ccs_set_end_bit(i_target,instruction_number);
+            if(rc) return rc;
             rc = mss_execute_ccs_inst_array(i_target, NUM_POLL, 60);
-	    instruction_number = 0;
+            instruction_number = 1;
             if(rc) return rc; //Error handling for mss_ccs_inst built into mss_funcs
         }
     }
diff --git a/src/usr/hwpf/hwp/mc_config/mss_eff_config/memory_mss_eff_config.xml b/src/usr/hwpf/hwp/mc_config/mss_eff_config/memory_mss_eff_config.xml
index ed1de55..a0cb54b 100644
--- a/src/usr/hwpf/hwp/mc_config/mss_eff_config/memory_mss_eff_config.xml
+++ b/src/usr/hwpf/hwp/mc_config/mss_eff_config/memory_mss_eff_config.xml
@@ -5,7 +5,7 @@
 <!--                                                                        -->
 <!-- OpenPOWER HostBoot Project                                             -->
 <!--                                                                        -->
-<!-- Contributors Listed Below - COPYRIGHT 2013,2014                        -->
+<!-- Contributors Listed Below - COPYRIGHT 2013,2015                        -->
 <!-- [+] International Business Machines Corp.                              -->
 <!--                                                                        -->
 <!--                                                                        -->
@@ -22,7 +22,7 @@
 <!-- permissions and limitations under the License.                         -->
 <!--                                                                        -->
 <!-- IBM_PROLOG_END_TAG                                                     -->
-<!-- $Id: memory_mss_eff_config.xml,v 1.3 2014/10/20 22:12:59 asaetow Exp $ -->
+<!-- $Id: memory_mss_eff_config.xml,v 1.6 2015/08/04 21:30:25 asaetow Exp $ -->
 <!-- For file ../../ipl/fapi/mss_eff_config.C -->
 <!-- // *! OWNER NAME  : Anuwat Saetow     Email: asaetow@us.ibm.com -->
 <!-- // *! BACKUP NAME : Mark Bellows      Email: bellows@us.ibm.com -->
@@ -30,6 +30,42 @@
 
 <!-- *********************************************************************** -->
   <hwpError>
+    <rc>RC_MSS_EFF_CONFIG_INVALID_DDR4_SPD_TB</rc>
+    <description>Invalid DDR4 MTB/FTB Timebase received from SPD attribute</description>
+    <FFDC>TARGET_DIMM</FFDC>
+    <callout>
+        <procedure>CODE</procedure>
+        <priority>HIGH</priority>
+    </callout>
+    <callout>
+        <target>TARGET_DIMM</target>
+        <priority>LOW</priority>
+    </callout>
+    <deconfigure>
+        <target>TARGET_DIMM</target>
+    </deconfigure>
+  </hwpError>
+
+<!-- *********************************************************************** -->
+  <hwpError>
+    <rc>RC_MSS_EFF_CONFIG_INCOMPATABLE_SPD_DRAM_GEN</rc>
+    <description>Incompatable SPD DRAM generation</description>
+    <FFDC>TARGET_DIMM</FFDC>
+    <callout>
+        <procedure>CODE</procedure>
+        <priority>HIGH</priority>
+    </callout>
+    <callout>
+        <target>TARGET_DIMM</target>
+        <priority>LOW</priority>
+    </callout>
+    <deconfigure>
+        <target>TARGET_DIMM</target>
+    </deconfigure>
+  </hwpError>
+
+<!-- *********************************************************************** -->
+  <hwpError>
     <rc>RC_MSS_EFF_CONFIG_INVALID_RDIMM_FREQ</rc>
     <description>Invalid RDIMM ATTR_MSS_FREQ, freq is higher than 1600Mbps</description>
     <FFDC>TARGET_MBA</FFDC>
@@ -39,17 +75,20 @@
         <priority>HIGH</priority>
     </callout>
     <callout>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
         <priority>LOW</priority>
     </callout>
 
     <deconfigure>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
     </deconfigure>
 
-    <gard>
-        <target>TARGET_MBA</target>
-    </gard>
 </hwpError>
 
 <!-- *********************************************************************** -->
@@ -63,17 +102,20 @@
         <priority>HIGH</priority>
     </callout>
     <callout>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
         <priority>LOW</priority>
     </callout>
 
     <deconfigure>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
     </deconfigure>
 
-    <gard>
-        <target>TARGET_MBA</target>
-    </gard>
 </hwpError>
 
 <!-- *********************************************************************** -->
@@ -90,17 +132,20 @@
         <priority>HIGH</priority>
     </callout>
     <callout>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
         <priority>LOW</priority>
     </callout>
 
     <deconfigure>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
     </deconfigure>
 
-    <gard>
-        <target>TARGET_MBA</target>
-    </gard>
 </hwpError>
 
 <!-- *********************************************************************** -->
@@ -117,17 +162,20 @@
         <priority>HIGH</priority>
     </callout>
     <callout>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
         <priority>LOW</priority>
     </callout>
 
     <deconfigure>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
     </deconfigure>
 
-    <gard>
-        <target>TARGET_MBA</target>
-    </gard>
 </hwpError>
 
 <!-- *********************************************************************** -->
@@ -169,27 +217,29 @@
     <description>Plug rule violation, one position is empty but other are present
         </description>
     <FFDC>TARGET_MBA</FFDC>
-    <ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_0_0</ffdc>
-    <ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_0_1</ffdc>
-    <ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_1_0</ffdc>
-    <ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_1_1</ffdc>
+	<ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_0_0</ffdc>
+	<ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_0_1</ffdc>
+	<ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_1_0</ffdc>
+	<ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_1_1</ffdc>
     <callout>
         <procedure>MEMORY_PLUGGING_ERROR</procedure>
         <priority>HIGH</priority>
     </callout>
     <callout>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
         <priority>HIGH</priority>
     </callout>
 
     <deconfigure>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
     </deconfigure>
 
-    <gard>
-        <target>TARGET_MBA</target>
-        <priority>HIGH</priority>
-    </gard>
 </hwpError>
 
 <!-- *********************************************************************** -->
@@ -198,28 +248,30 @@
     <description>Plug rule violation, sides do not match
         </description>
     <FFDC>TARGET_MBA</FFDC>
-    <ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_0_0</ffdc>
-    <ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_0_1</ffdc>
-    <ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_1_0</ffdc>
-    <ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_1_1</ffdc>
+	<ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_0_0</ffdc>
+	<ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_0_1</ffdc>
+	<ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_1_0</ffdc>
+	<ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_1_1</ffdc>
 
     <callout>
         <procedure>MEMORY_PLUGGING_ERROR</procedure>
         <priority>HIGH</priority>
     </callout>
     <callout>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
         <priority>HIGH</priority>
     </callout>
 
     <deconfigure>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
     </deconfigure>
 
-    <gard>
-        <target>TARGET_MBA</target>
-        <priority>HIGH</priority>
-    </gard>
 </hwpError>
 
 
@@ -229,28 +281,30 @@
     <description>Plug rule violation,  top and bottom do not match
         </description>
     <FFDC>TARGET_MBA</FFDC>
-    <ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_0_0</ffdc>
-    <ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_0_1</ffdc>
-    <ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_1_0</ffdc>
-    <ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_1_1</ffdc>
+	<ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_0_0</ffdc>
+	<ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_0_1</ffdc>
+	<ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_1_0</ffdc>
+	<ffdc>CUR_DIMM_SPD_VALID_U8ARRAY_1_1</ffdc>
 
     <callout>
         <procedure>MEMORY_PLUGGING_ERROR</procedure>
         <priority>HIGH</priority>
     </callout>
     <callout>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
         <priority>HIGH</priority>
     </callout>
 
     <deconfigure>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
     </deconfigure>
 
-    <gard>
-        <target>TARGET_MBA</target>
-        <priority>HIGH</priority>
-    </gard>
 </hwpError>
 
 <!-- *********************************************************************** -->
@@ -259,28 +313,30 @@
     <description>Incompatable DRAM generation 
         </description>
     <FFDC>TARGET_MBA</FFDC>
-    <ffdc>DRAM_DEVICE_TYPE_0_0</ffdc>
-    <ffdc>DRAM_DEVICE_TYPE_0_1</ffdc>
-    <ffdc>DRAM_DEVICE_TYPE_1_0</ffdc>
-    <ffdc>DRAM_DEVICE_TYPE_1_1</ffdc>
+	<ffdc>DRAM_DEVICE_TYPE_0_0</ffdc>
+	<ffdc>DRAM_DEVICE_TYPE_0_1</ffdc>
+	<ffdc>DRAM_DEVICE_TYPE_1_0</ffdc>
+	<ffdc>DRAM_DEVICE_TYPE_1_1</ffdc>
 
     <callout>
         <procedure>MEMORY_PLUGGING_ERROR</procedure>
         <priority>HIGH</priority>
     </callout>
     <callout>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
         <priority>HIGH</priority>
     </callout>
 
     <deconfigure>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
     </deconfigure>
 
-    <gard>
-        <target>TARGET_MBA</target>
-        <priority>HIGH</priority>
-    </gard>
 </hwpError>
 
 <!-- *********************************************************************** -->
@@ -289,28 +345,30 @@
     <description>Incompatable DIMM type
         </description>
     <FFDC>TARGET_MBA</FFDC>
-    <ffdc>MODULE_TYPE_0_0</ffdc>
-    <ffdc>MODULE_TYPE_0_1</ffdc>
-    <ffdc>MODULE_TYPE_1_0</ffdc>
-    <ffdc>MODULE_TYPE_1_1</ffdc>
+	<ffdc>MODULE_TYPE_0_0</ffdc>
+	<ffdc>MODULE_TYPE_0_1</ffdc>
+	<ffdc>MODULE_TYPE_1_0</ffdc>
+	<ffdc>MODULE_TYPE_1_1</ffdc>
 
     <callout>
         <procedure>MEMORY_PLUGGING_ERROR</procedure>
         <priority>HIGH</priority>
     </callout>
     <callout>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
         <priority>HIGH</priority>
     </callout>
 
     <deconfigure>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
     </deconfigure>
 
-    <gard>
-        <target>TARGET_MBA</target>
-        <priority>HIGH</priority>
-    </gard>
 </hwpError>
 
 <!-- *********************************************************************** -->
@@ -319,28 +377,30 @@
     <description>Incompatable DIMM ranks
         </description>
     <FFDC>TARGET_MBA</FFDC>
-    <ffdc>NUM_RANKS_0_0</ffdc>
-    <ffdc>NUM_RANKS_0_1</ffdc>
-    <ffdc>NUM_RANKS_1_0</ffdc>
-    <ffdc>NUM_RANKS_1_1</ffdc>
+	<ffdc>NUM_RANKS_0_0</ffdc>
+	<ffdc>NUM_RANKS_0_1</ffdc>
+	<ffdc>NUM_RANKS_1_0</ffdc>
+	<ffdc>NUM_RANKS_1_1</ffdc>
 
     <callout>
         <procedure>MEMORY_PLUGGING_ERROR</procedure>
         <priority>HIGH</priority>
     </callout>
     <callout>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
         <priority>HIGH</priority>
     </callout>
 
     <deconfigure>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
     </deconfigure>
 
-    <gard>
-        <target>TARGET_MBA</target>
-        <priority>HIGH</priority>
-    </gard>
 </hwpError>
 
 <!-- *********************************************************************** -->
@@ -349,28 +409,30 @@
     <description>Incompatable DIMM banks
         </description>
     <FFDC>TARGET_MBA</FFDC>
-    <ffdc>SDRAM_BANKS_0_0</ffdc>
-    <ffdc>SDRAM_BANKS_0_1</ffdc>
-    <ffdc>SDRAM_BANKS_1_0</ffdc>
-    <ffdc>SDRAM_BANKS_1_1</ffdc>
+	<ffdc>SDRAM_BANKS_0_0</ffdc>
+	<ffdc>SDRAM_BANKS_0_1</ffdc>
+	<ffdc>SDRAM_BANKS_1_0</ffdc>
+	<ffdc>SDRAM_BANKS_1_1</ffdc>
 
     <callout>
         <procedure>MEMORY_PLUGGING_ERROR</procedure>
         <priority>HIGH</priority>
     </callout>
     <callout>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
         <priority>HIGH</priority>
     </callout>
 
     <deconfigure>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
     </deconfigure>
 
-    <gard>
-        <target>TARGET_MBA</target>
-        <priority>HIGH</priority>
-    </gard>
 </hwpError>
 
 <!-- *********************************************************************** -->
@@ -379,28 +441,30 @@
     <description>Incompatable DIMM rows
         </description>
     <FFDC>TARGET_MBA</FFDC>
-    <ffdc>SDRAM_ROWS_0_0</ffdc>
-    <ffdc>SDRAM_ROWS_0_1</ffdc>
-    <ffdc>SDRAM_ROWS_1_0</ffdc>
-    <ffdc>SDRAM_ROWS_1_1</ffdc>
+	<ffdc>SDRAM_ROWS_0_0</ffdc>
+	<ffdc>SDRAM_ROWS_0_1</ffdc>
+	<ffdc>SDRAM_ROWS_1_0</ffdc>
+	<ffdc>SDRAM_ROWS_1_1</ffdc>
 
     <callout>
         <procedure>MEMORY_PLUGGING_ERROR</procedure>
         <priority>HIGH</priority>
     </callout>
     <callout>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
         <priority>HIGH</priority>
     </callout>
 
     <deconfigure>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
     </deconfigure>
 
-    <gard>
-        <target>TARGET_MBA</target>
-        <priority>HIGH</priority>
-    </gard>
 </hwpError>
 
 <!-- *********************************************************************** -->
@@ -409,28 +473,30 @@
     <description>Incompatable DIMM columns
         </description>
     <FFDC>TARGET_MBA</FFDC>
-    <ffdc>SDRAM_COLS_0_0</ffdc>
-    <ffdc>SDRAM_COLS_0_1</ffdc>
-    <ffdc>SDRAM_COLS_1_0</ffdc>
-    <ffdc>SDRAM_COLS_1_1</ffdc>
+	<ffdc>SDRAM_COLS_0_0</ffdc>
+	<ffdc>SDRAM_COLS_0_1</ffdc>
+	<ffdc>SDRAM_COLS_1_0</ffdc>
+	<ffdc>SDRAM_COLS_1_1</ffdc>
 
     <callout>
         <procedure>MEMORY_PLUGGING_ERROR</procedure>
         <priority>HIGH</priority>
     </callout>
     <callout>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
         <priority>HIGH</priority>
     </callout>
 
     <deconfigure>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
     </deconfigure>
 
-    <gard>
-        <target>TARGET_MBA</target>
-        <priority>HIGH</priority>
-    </gard>
 </hwpError>
 
 <!-- *********************************************************************** -->
@@ -439,28 +505,30 @@
     <description>Incompatable DRAM primary bus width
         </description>
     <FFDC>TARGET_MBA</FFDC>
-    <ffdc>BUS_WIDTH_0_0</ffdc>
-    <ffdc>BUS_WIDTH_0_1</ffdc>
-    <ffdc>BUS_WIDTH_1_0</ffdc>
-    <ffdc>BUS_WIDTH_1_1</ffdc>
+	<ffdc>BUS_WIDTH_0_0</ffdc>
+	<ffdc>BUS_WIDTH_0_1</ffdc>
+	<ffdc>BUS_WIDTH_1_0</ffdc>
+	<ffdc>BUS_WIDTH_1_1</ffdc>
 
     <callout>
         <procedure>MEMORY_PLUGGING_ERROR</procedure>
         <priority>HIGH</priority>
     </callout>
     <callout>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
         <priority>HIGH</priority>
     </callout>
 
     <deconfigure>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
     </deconfigure>
 
-    <gard>
-        <target>TARGET_MBA</target>
-        <priority>HIGH</priority>
-    </gard>
 </hwpError>
 
 
@@ -476,17 +544,19 @@
         <priority>LOW</priority>
     </callout>
     <callout>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
         <priority>HIGH</priority>
     </callout>
     <deconfigure>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
     </deconfigure>
 
-    <gard>
-        <target>TARGET_MBA</target>
-        <priority>HIGH</priority>
-    </gard>
 </hwpError>
 
 
@@ -496,28 +566,30 @@
     <description>Incompatable DRAM width
         </description>
     <FFDC>TARGET_MBA</FFDC>
-    <ffdc>DRAM_WIDTH_0_0</ffdc>
-    <ffdc>DRAM_WIDTH_0_1</ffdc>
-    <ffdc>DRAM_WIDTH_1_0</ffdc>
-    <ffdc>DRAM_WIDTH_1_1</ffdc>
+	<ffdc>DRAM_WIDTH_0_0</ffdc>
+	<ffdc>DRAM_WIDTH_0_1</ffdc>
+	<ffdc>DRAM_WIDTH_1_0</ffdc>
+	<ffdc>DRAM_WIDTH_1_1</ffdc>
 
     <callout>
         <procedure>MEMORY_PLUGGING_ERROR</procedure>
         <priority>HIGH</priority>
     </callout>
     <callout>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
         <priority>HIGH</priority>
     </callout>
 
     <deconfigure>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
     </deconfigure>
 
-    <gard>
-        <target>TARGET_MBA</target>
-        <priority>HIGH</priority>
-    </gard>
 </hwpError>
 
 <!-- *********************************************************************** -->
@@ -532,18 +604,20 @@
         <priority>LOW</priority>
     </callout>
     <callout>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
         <priority>HIGH</priority>
     </callout>
 
     <deconfigure>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
     </deconfigure>
 
-    <gard>
-        <target>TARGET_MBA</target>
-        <priority>HIGH</priority>
-    </gard>
 </hwpError>
 
 <!-- *********************************************************************** -->
@@ -558,18 +632,20 @@
         <priority>LOW</priority>
     </callout>
     <callout>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
         <priority>HIGH</priority>
     </callout>
 
     <deconfigure>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
     </deconfigure>
 
-    <gard>
-        <target>TARGET_MBA</target>
-        <priority>HIGH</priority>
-    </gard>
 </hwpError>
 
 <!-- *********************************************************************** -->
@@ -584,17 +660,19 @@
         <priority>LOW</priority>
     </callout>
     <callout>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
         <priority>HIGH</priority>
     </callout>
     <deconfigure>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
     </deconfigure>
 
-    <gard>
-        <target>TARGET_MBA</target>
-        <priority>HIGH</priority>
-    </gard>
 </hwpError>
 
 <!-- *********************************************************************** -->
@@ -609,17 +687,19 @@
         <priority>LOW</priority>
     </callout>
     <callout>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
         <priority>HIGH</priority>
     </callout>
     <deconfigure>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
     </deconfigure>
 
-    <gard>
-        <target>TARGET_MBA</target>
-        <priority>HIGH</priority>
-    </gard>
 </hwpError>
 
 <!-- *********************************************************************** -->
@@ -634,17 +714,19 @@
         <priority>LOW</priority>
     </callout>
     <callout>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
         <priority>HIGH</priority>
     </callout>
     <deconfigure>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
     </deconfigure>
 
-    <gard>
-        <target>TARGET_MBA</target>
-        <priority>HIGH</priority>
-    </gard>
 </hwpError>
 
 <!-- *********************************************************************** -->
@@ -659,17 +741,19 @@
         <priority>LOW</priority>
     </callout>
     <callout>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
         <priority>HIGH</priority>
     </callout>
     <deconfigure>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
     </deconfigure>
 
-    <gard>
-        <target>TARGET_MBA</target>
-        <priority>HIGH</priority>
-    </gard>
 </hwpError>
 
 <!-- *********************************************************************** -->
@@ -684,17 +768,19 @@
         <priority>LOW</priority>
     </callout>
     <callout>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
         <priority>HIGH</priority>
     </callout>
     <deconfigure>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
     </deconfigure>
 
-    <gard>
-        <target>TARGET_MBA</target>
-        <priority>HIGH</priority>
-    </gard>
 </hwpError>
 
 <!-- *********************************************************************** -->
@@ -709,17 +795,19 @@
         <priority>LOW</priority>
     </callout>
     <callout>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
         <priority>HIGH</priority>
     </callout>
     <deconfigure>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
     </deconfigure>
 
-    <gard>
-        <target>TARGET_MBA</target>
-        <priority>HIGH</priority>
-    </gard>
 </hwpError>
 
 <!-- *********************************************************************** -->
@@ -734,17 +822,19 @@
         <priority>LOW</priority>
     </callout>
     <callout>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
         <priority>HIGH</priority>
     </callout>
     <deconfigure>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
     </deconfigure>
 
-    <gard>
-        <target>TARGET_MBA</target>
-        <priority>HIGH</priority>
-    </gard>
 </hwpError>
 
 <!-- *********************************************************************** -->
@@ -759,17 +849,19 @@
         <priority>LOW</priority>
     </callout>
     <callout>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
         <priority>HIGH</priority>
     </callout>
     <deconfigure>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
     </deconfigure>
 
-    <gard>
-        <target>TARGET_MBA</target>
-        <priority>HIGH</priority>
-    </gard>
 </hwpError>
 
 <!-- *********************************************************************** -->
@@ -784,17 +876,19 @@
         <priority>LOW</priority>
     </callout>
     <callout>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
         <priority>HIGH</priority>
     </callout>
     <deconfigure>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
     </deconfigure>
 
-    <gard>
-        <target>TARGET_MBA</target>
-        <priority>HIGH</priority>
-    </gard>
 </hwpError>
 
 <!-- *********************************************************************** -->
@@ -809,17 +903,19 @@
         <priority>LOW</priority>
     </callout>
     <callout>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
         <priority>HIGH</priority>
     </callout>
     <deconfigure>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
     </deconfigure>
 
-    <gard>
-        <target>TARGET_MBA</target>
-        <priority>HIGH</priority>
-    </gard>
 </hwpError>
 
 <!-- *********************************************************************** -->
@@ -834,17 +930,19 @@
         <priority>LOW</priority>
     </callout>
     <callout>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
         <priority>HIGH</priority>
     </callout>
     <deconfigure>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
     </deconfigure>
 
-    <gard>
-        <target>TARGET_MBA</target>
-        <priority>HIGH</priority>
-    </gard>
 </hwpError>
 
 <!-- *********************************************************************** -->
@@ -859,17 +957,19 @@
         <priority>LOW</priority>
     </callout>
     <callout>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
         <priority>HIGH</priority>
     </callout>
     <deconfigure>
-        <target>TARGET_MBA</target>
+        <childTargets>
+        <parent>TARGET_MBA</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
     </deconfigure>
 
-    <gard>
-        <target>TARGET_MBA</target>
-        <priority>HIGH</priority>
-    </gard>
 </hwpError>
 
 
diff --git a/src/usr/hwpf/hwp/mc_config/mss_eff_config/memory_mss_eff_grouping.xml b/src/usr/hwpf/hwp/mc_config/mss_eff_config/memory_mss_eff_grouping.xml
index 204694a..bb8a0ac 100644
--- a/src/usr/hwpf/hwp/mc_config/mss_eff_config/memory_mss_eff_grouping.xml
+++ b/src/usr/hwpf/hwp/mc_config/mss_eff_config/memory_mss_eff_grouping.xml
@@ -5,7 +5,9 @@
 <!--                                                                        -->
 <!-- OpenPOWER HostBoot Project                                             -->
 <!--                                                                        -->
-<!-- COPYRIGHT International Business Machines Corp. 2013,2014              -->
+<!-- Contributors Listed Below - COPYRIGHT 2013,2015                        -->
+<!-- [+] International Business Machines Corp.                              -->
+<!--                                                                        -->
 <!--                                                                        -->
 <!-- Licensed under the Apache License, Version 2.0 (the "License");        -->
 <!-- you may not use this file except in compliance with the License.       -->
@@ -21,7 +23,7 @@
 <!--                                                                        -->
 <!-- IBM_PROLOG_END_TAG                                                     -->
 <hwpErrors>
-<!-- $Id: memory_mss_eff_grouping.xml,v 1.3 2014/04/10 18:51:55 jdsloat Exp $ -->
+<!-- $Id: memory_mss_eff_grouping.xml,v 1.6 2015/07/15 21:41:12 asaetow Exp $ -->
 <!-- For file ../../ipl/fapi/mss_eff_grouping.C -->
 
 <hwpError>
@@ -95,8 +97,18 @@
         <procedure>MEMORY_PLUGGING_ERROR</procedure>
         <priority>HIGH</priority>
     </callout>
+    <callout>
+        <childTargets>
+        <parent>MEMBUF</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets> 
+        <priority>LOW</priority>
+    </callout>
     <deconfigure>
-        <target>MEMBUF</target>
+        <childTargets>
+        <parent>MEMBUF</parent>
+        <childType>TARGET_TYPE_DIMM</childType>
+        </childTargets>
     </deconfigure>
 </hwpError>
 
diff --git a/src/usr/hwpf/hwp/mc_config/mss_eff_config/mss_eff_config.C b/src/usr/hwpf/hwp/mc_config/mss_eff_config/mss_eff_config.C
index 525ef5d..ef02bd4 100644
--- a/src/usr/hwpf/hwp/mc_config/mss_eff_config/mss_eff_config.C
+++ b/src/usr/hwpf/hwp/mc_config/mss_eff_config/mss_eff_config.C
@@ -22,7 +22,7 @@
 /* permissions and limitations under the License.                         */
 /*                                                                        */
 /* IBM_PROLOG_END_TAG                                                     */
-// $Id: mss_eff_config.C,v 1.51 2015/03/13 19:13:44 asaetow Exp $
+// $Id: mss_eff_config.C,v 1.54 2015/08/13 15:08:17 asaetow Exp $
 // $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/
 //          centaur/working/procedures/ipl/fapi/mss_eff_config.C,v $
 //------------------------------------------------------------------------------
@@ -32,7 +32,7 @@
 // *! TITLE       : mss_eff_config
 // *! DESCRIPTION : see additional comments below
 // *! OWNER NAME  : Anuwat Saetow     Email: asaetow@us.ibm.com
-// *! BACKUP NAME : Mark Bellows      Email: bellows@us.ibm.com
+// *! BACKUP NAME : Briana Foxworth   Email: beforwor@us.ibm.com
 // *! ADDITIONAL COMMENTS :
 //
 // The purpose of this procedure is to setup attributes used in other mss
@@ -45,6 +45,16 @@
 //------------------------------------------------------------------------------
 // Version:|  Author: |  Date:  | Comment:
 //---------|----------|---------|-----------------------------------------------
+//   1.54  | asaetow  |13-AUG-15| Added ATTR_SPD_SDRAM_ROWS=R17 and ATTR_SPD_SDRAM_ROWS=R18 for DDR4.
+//   1.53  | asaetow  |31-JUL-15| Changed code based on FW code review.
+//         |          |         | Added RC_MSS_EFF_CONFIG_INVALID_DDR4_SPD_TB and RC_MSS_EFF_CONFIG_INCOMPATABLE_SPD_DRAM_GEN.
+//         |          |         | Fixed attribute naming convension from ATTR_TCCD_L to ATTR_EFF_DRAM_TCCD_L and ATTR_LRDIMM_ADDITIONAL_CNTL_WORDS to ATTR_EFF_LRDIMM_ADDITIONAL_CNTL_WORDS.
+//         |          |         | NOTE: DO NOT pickup w/o memory_attributes.xml v1.153 or newer
+//         |          |         | NOTE: DO NOT pickup w/o memory_mss_eff_config.xml v1.6 or newer
+//   1.52  | asaetow  |10-MAY-15| Added initial official DDR4 support to mainline.
+//         |          |         | NOTE: Merge of mss_eff_config_ddr4.C v1.1 from Menlo.
+//         |          |         | NOTE: LRDIMM and TSV not fully supported in this version.
+//         |          |         | Changed backup owner.
 //   1.51  | asaetow  |13-MAR-15| Changed DRAM_AL to be CL-2 in 2N/2T mode and CL-1 in 1N/1T mode.
 //   1.50  | jdsloat  |03-DEC-14| Removed string data types that are not supported.
 //   1.49  | asaetow  |01-DEC-14| Added RDIMM SPD/VPD support for ATTR_EFF_DIMM_RCD_CNTL_WORD_0_15 to take in SPD bits69:76 thru new VPD attribute ATTR_VPD_DIMM_RCD_CNTL_WORD_0_15.
@@ -197,9 +207,6 @@
 #include <mss_lrdimm_funcs.H>
 #endif
 
-#ifdef FAPI_DDR4
-#include <mss_eff_config_ddr4.H>
-#endif
 
 
 //------------------------------------------------------------------------------
@@ -245,17 +252,6 @@ fapi::ReturnCode mss_eff_config_termination( const Target& i_target_mba)
 }
 #endif
 
-#ifndef FAPI_DDR4
-fapi::ReturnCode mss_eff_config_ddr4( const Target& i_target_mba)
-{
-   ReturnCode rc;
-
-   FAPI_ERR("Invalid exec of DDR4 function on %s!", i_target_mba.toEcmdString());
-   FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_DDR4_INVALID_EXEC);
-   return rc;
-
-}
-#endif
 
 
 //------------------------------------------------------------------------------
@@ -285,6 +281,9 @@ struct mss_eff_config_data
     uint8_t dram_trtp;
     uint8_t dram_twtr;
     uint8_t dram_wr;
+    uint8_t dram_trrdl;
+    uint8_t dram_tccdl;
+    uint8_t dram_twtrl;
 };
 
 //------------------------------------------------------------------------------
@@ -315,15 +314,25 @@ struct mss_eff_config_spd_data
     //uint8_t taamin[PORT_SIZE][DIMM_SIZE];
     uint8_t twrmin[PORT_SIZE][DIMM_SIZE];
     uint8_t trcdmin[PORT_SIZE][DIMM_SIZE];
-    uint8_t trrdmin[PORT_SIZE][DIMM_SIZE];
+    uint8_t trrdmin[PORT_SIZE][DIMM_SIZE]; // DDR3 only
     uint8_t trpmin[PORT_SIZE][DIMM_SIZE];
     uint32_t trasmin[PORT_SIZE][DIMM_SIZE];
     uint32_t trcmin[PORT_SIZE][DIMM_SIZE];
-    uint32_t trfcmin[PORT_SIZE][DIMM_SIZE];
-    uint8_t twtrmin[PORT_SIZE][DIMM_SIZE];
+    uint32_t trfcmin[PORT_SIZE][DIMM_SIZE]; // DDR3 only
+    uint8_t twtrmin[PORT_SIZE][DIMM_SIZE]; // DDR3 only
     uint8_t trtpmin[PORT_SIZE][DIMM_SIZE];
     uint32_t tfawmin[PORT_SIZE][DIMM_SIZE];
 
+    // DDR4 only
+    uint8_t trrdsmin[PORT_SIZE][DIMM_SIZE];
+    uint8_t trrdlmin[PORT_SIZE][DIMM_SIZE];
+    uint8_t tccdlmin[PORT_SIZE][DIMM_SIZE];
+    uint32_t trfc1min[PORT_SIZE][DIMM_SIZE];
+    uint32_t trfc2min[PORT_SIZE][DIMM_SIZE];
+    uint32_t trfc4min[PORT_SIZE][DIMM_SIZE];
+    uint8_t twtrsmin[PORT_SIZE][DIMM_SIZE];
+    uint8_t twtrlmin[PORT_SIZE][DIMM_SIZE];
+
     // Not needed for GA1 CDIMM, will need to enable check for ISDIMM.
     //uint8_t sdram_optional_features[PORT_SIZE][DIMM_SIZE];
     //uint8_t sdram_thermal_and_refresh_options[PORT_SIZE][DIMM_SIZE];
@@ -369,6 +378,7 @@ struct mss_eff_config_atts
     uint8_t eff_dimm_ranks_configed[PORT_SIZE][DIMM_SIZE];
     // Using SPD byte68,69:76, enabled in GA2 for full RDIMM support
     uint64_t eff_dimm_rcd_cntl_word_0_15[PORT_SIZE][DIMM_SIZE];
+    uint64_t eff_lrdimm_additional_cntl_words[PORT_SIZE][DIMM_SIZE]; // LRDIMMs only
     uint8_t eff_dimm_size[PORT_SIZE][DIMM_SIZE];
     uint8_t eff_dimm_type;
     uint8_t eff_custom_dimm;
@@ -415,14 +425,14 @@ struct mss_eff_config_atts
     uint8_t eff_mpr_loc;
     uint8_t eff_mpr_mode;
 
-    // AST HERE: Needs SPD byte33[6:4], currently hard coded to 0, removed for GA1
-    //uint8_t eff_num_dies_per_package[PORT_SIZE][DIMM_SIZE];
+    // AST HERE: Needs SPD DDR3 byte33[6:4], DDR4 byte6[6:4] currently hard coded to 0
+    uint8_t eff_num_dies_per_package[PORT_SIZE][DIMM_SIZE];
 
     uint8_t eff_num_drops_per_port;
     uint8_t eff_num_master_ranks_per_dimm[PORT_SIZE][DIMM_SIZE];
 
-    // AST HERE: Needs source data, currently hard coded to 0, removed for GA1
-    //uint8_t eff_num_packages_per_rank[PORT_SIZE][DIMM_SIZE];
+    // AST HERE: Needs source data, currently hard coded to 0
+    uint8_t eff_num_packages_per_rank[PORT_SIZE][DIMM_SIZE];
 
     uint8_t eff_num_ranks_per_dimm[PORT_SIZE][DIMM_SIZE];
     uint8_t eff_schmoo_mode;
@@ -453,7 +463,9 @@ struct mss_eff_config_atts
     uint8_t dimm_functional_vector;
     uint8_t mss_cal_step_enable; // Always run all cal steps
     uint32_t eff_vpd_version;
-
+    uint8_t eff_dram_trrdl;
+    uint8_t eff_dram_tccdl;
+    uint8_t eff_dram_twtrl;
 };
 
 //------------------------------------------------------------------------------
@@ -549,6 +561,7 @@ fapi::ReturnCode mss_eff_config_read_spd_data(fapi::Target i_target_dimm,
                                         uint8_t i_port, uint8_t i_dimm)
 {
     fapi::ReturnCode rc;
+    const fapi::Target& TARGET_DIMM = i_target_dimm;
     // Grab DIMM/SPD data.
     do
     {
@@ -591,18 +604,6 @@ fapi::ReturnCode mss_eff_config_read_spd_data(fapi::Target i_target_dimm,
         rc = FAPI_ATTR_GET(ATTR_SPD_MODULE_MEMORY_BUS_WIDTH, &i_target_dimm,
             p_o_spd_data->module_memory_bus_width[i_port][i_dimm]);
         if(rc) break;
-        rc = FAPI_ATTR_GET(ATTR_SPD_FTB_DIVIDEND, &i_target_dimm,
-            p_o_spd_data->ftb_dividend[i_port][i_dimm]);
-        if(rc) break;
-        rc = FAPI_ATTR_GET(ATTR_SPD_FTB_DIVISOR, &i_target_dimm,
-            p_o_spd_data->ftb_divisor[i_port][i_dimm]);
-        if(rc) break;
-        rc = FAPI_ATTR_GET(ATTR_SPD_MTB_DIVIDEND, &i_target_dimm,
-            p_o_spd_data->mtb_dividend[i_port][i_dimm]);
-        if(rc) break;
-        rc = FAPI_ATTR_GET(ATTR_SPD_MTB_DIVISOR, &i_target_dimm,
-            p_o_spd_data->mtb_divisor[i_port][i_dimm]);
-        if(rc) break;
 
         // See mss_freq.C
         //rc = FAPI_ATTR_GET(ATTR_SPD_TCKMIN, &i_target_dimm,
@@ -614,16 +615,150 @@ fapi::ReturnCode mss_eff_config_read_spd_data(fapi::Target i_target_dimm,
         //rc = FAPI_ATTR_GET(ATTR_SPD_TAAMIN, &i_target_dimm,
             //p_o_spd_data->taamin[i_port][i_dimm]);
         //if(rc) break;
+        
+        if (p_o_spd_data->dram_device_type[i_port][i_dimm] == fapi::ENUM_ATTR_SPD_DRAM_DEVICE_TYPE_DDR3) {
+           // DDR3 only
+           rc = FAPI_ATTR_GET(ATTR_SPD_FTB_DIVIDEND, &i_target_dimm,
+               p_o_spd_data->ftb_dividend[i_port][i_dimm]);
+           if(rc) break;
+           rc = FAPI_ATTR_GET(ATTR_SPD_FTB_DIVISOR, &i_target_dimm,
+               p_o_spd_data->ftb_divisor[i_port][i_dimm]);
+           if(rc) break;
+           rc = FAPI_ATTR_GET(ATTR_SPD_MTB_DIVIDEND, &i_target_dimm,
+               p_o_spd_data->mtb_dividend[i_port][i_dimm]);
+           if(rc) break;
+           rc = FAPI_ATTR_GET(ATTR_SPD_MTB_DIVISOR, &i_target_dimm,
+               p_o_spd_data->mtb_divisor[i_port][i_dimm]);
+           if(rc) break;
+           rc = FAPI_ATTR_GET(ATTR_SPD_TRRDMIN, &i_target_dimm,
+               p_o_spd_data->trrdmin[i_port][i_dimm]);
+           if(rc) break;
+           rc = FAPI_ATTR_GET(ATTR_SPD_TRFCMIN, &i_target_dimm,
+               p_o_spd_data->trfcmin[i_port][i_dimm]);
+           if(rc) break;
+           rc = FAPI_ATTR_GET(ATTR_SPD_TWTRMIN, &i_target_dimm,
+               p_o_spd_data->twtrmin[i_port][i_dimm]);
+           if(rc) break;
+           
+           rc = FAPI_ATTR_GET(ATTR_SPD_TWRMIN, &i_target_dimm,
+               p_o_spd_data->twrmin[i_port][i_dimm]);
+           if(rc) break;
+           rc = FAPI_ATTR_GET(ATTR_SPD_TRTPMIN, &i_target_dimm,
+               p_o_spd_data->trtpmin[i_port][i_dimm]);
+           if(rc) break;
+
+        } else if (p_o_spd_data->dram_device_type[i_port][i_dimm] == fapi::ENUM_ATTR_SPD_DRAM_DEVICE_TYPE_DDR4) {
+           // DDR4 only
+                        uint8_t l_spd_tb_mtb_ddr4, l_spd_tb_ftb_ddr4;
+                        rc = FAPI_ATTR_GET(ATTR_SPD_TIMEBASE_MTB_DDR4, &i_target_dimm,
+                                        l_spd_tb_mtb_ddr4);
+                        if (rc) break;
+
+                        rc = FAPI_ATTR_GET(ATTR_SPD_TIMEBASE_FTB_DDR4, &i_target_dimm,
+                                        l_spd_tb_ftb_ddr4);
+                        if (rc) break;
+
+                        if ( (l_spd_tb_mtb_ddr4 != 0)||(l_spd_tb_ftb_ddr4 != 0) )
+                        {
+                                FAPI_ERR("Invalid DDR4 MTB/FTB Timebase received from SPD attribute on %s!", i_target_dimm.toEcmdString());
+                                FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_INVALID_DDR4_SPD_TB);
+                                break;
+                        }
+            // AST HERE: !If DDR4 spec changes to include other values, this section needs to be updated!
+                        // for 1000fs = 1ps = 1000 * 1 / 1
+                        p_o_spd_data->ftb_dividend[i_port][i_dimm] = 1;
+                        p_o_spd_data->ftb_divisor[i_port][i_dimm] = 1;
+                        // for 125ps = 1000 * 1 / 8
+                        p_o_spd_data->mtb_dividend[i_port][i_dimm] = 1;
+                        p_o_spd_data->mtb_divisor[i_port][i_dimm] = 8;
+
+                        // not available in ddr4 spd, these are replacements.  need to double check
+                        // 15 ns for all speeds
+                        p_o_spd_data->twrmin[i_port][i_dimm] = 15000 / (
+                                (p_o_spd_data->mtb_dividend[i_port][i_dimm] * 1000) /
+                        p_o_spd_data->mtb_divisor[i_port][i_dimm]);
+
+                        // 7.5ns = 7500ps; work backwards to figure out value.  no FTB
+                        p_o_spd_data->trtpmin[i_port][i_dimm] = 7500 / (
+                                (p_o_spd_data->mtb_dividend[i_port][i_dimm] * 1000) /
+                        p_o_spd_data->mtb_divisor[i_port][i_dimm]);
+
+                        // 3 trfc values, 1x, 2x, 4x
+                        rc = FAPI_ATTR_GET(ATTR_SPD_TRFC1MIN_DDR4, &i_target_dimm,
+                                p_o_spd_data->trfc1min[i_port][i_dimm]);
+                        if(rc) break;
+
+// FW is reading out and giving the data in big endian format for some reason.
+// need to fix this...  XML is documented correctly.
+/* //                   if (p_o_spd_data->trfc1min[i_port][i_dimm] > 0xFFF) {
+                                p_o_spd_data->trfc1min[i_port][i_dimm] |= 
+                                        (p_o_spd_data->trfc1min[i_port][i_dimm] & 0xFF) << 16;
+                                p_o_spd_data->trfc1min[i_port][i_dimm] =
+                                        p_o_spd_data->trfc1min[i_port][i_dimm] >> 8;
+//                      }
+*/
+//  need to look at this more sometimes the bytes are swapped in SPD...
+                        switch(p_o_spd_data->trfc1min[i_port][i_dimm])
+                        {
+                        case 0x0005:
+                            p_o_spd_data->trfc1min[i_port][i_dimm] = 0x0500;
+                            break;
+                        case 0x2008:
+                            p_o_spd_data->trfc1min[i_port][i_dimm] = 0x0820;
+                            break;
+                        case 0xF00A:
+                            p_o_spd_data->trfc1min[i_port][i_dimm] = 0x0AF0;
+                            break;
+                        }
+
+                        rc = FAPI_ATTR_GET(ATTR_SPD_TRFC2MIN_DDR4, &i_target_dimm,
+                                p_o_spd_data->trfc2min[i_port][i_dimm]);
+                        if(rc) break;
+                        rc = FAPI_ATTR_GET(ATTR_SPD_TRFC4MIN_DDR4, &i_target_dimm,
+                                p_o_spd_data->trfc4min[i_port][i_dimm]);
+                        if(rc) break;
+
+                        // ddr4 has 's' (short; different bank group) and
+                        // 'l' (long; same bank group) values
+                        // tRRD needs to be used by Yuen's mba initfile...
+                        rc = FAPI_ATTR_GET(ATTR_SPD_TRRDSMIN_DDR4, &i_target_dimm,
+                                p_o_spd_data->trrdsmin[i_port][i_dimm]);
+                        if(rc) break;
+                        rc = FAPI_ATTR_GET(ATTR_SPD_TRRDLMIN_DDR4, &i_target_dimm,
+                                p_o_spd_data->trrdlmin[i_port][i_dimm]);
+                        if(rc) break;
+
+                        // tccdl
+                        rc = FAPI_ATTR_GET(ATTR_SPD_TCCDLMIN_DDR4, &i_target_dimm,
+                                p_o_spd_data->tccdlmin[i_port][i_dimm]);
+                        if(rc) break;
+
+                        // should be constant based on MTB and FTB after calculations
+                        // where is this used??
+/*                              SPD attributes not available yet
+                        rc = FAPI_ATTR_GET(ATTR_SPD_TWTRSMIN_DDR4, &i_target_dimm,
+                                p_o_spd_data->twtrsmin[i_port][i_dimm]);        // 2.5ns
+                        if(rc) break;
+                        rc = FAPI_ATTR_GET(ATTR_SPD_TWTRLMIN_DDR4, &i_target_dimm,
+                                p_o_spd_data->twtrlmin[i_port][i_dimm]);        // 7.5ns
+                        if(rc) break;
+*/
+                        p_o_spd_data->twtrsmin[i_port][i_dimm] = 2500 / (       // 2.5 ns
+                (p_o_spd_data->mtb_dividend[i_port][i_dimm] * 1000) /
+                                            p_o_spd_data->mtb_divisor[i_port][i_dimm]);
+                        p_o_spd_data->twtrlmin[i_port][i_dimm] = 7500 / (       // 7.5 ns
+                (p_o_spd_data->mtb_dividend[i_port][i_dimm] * 1000) /
+                                            p_o_spd_data->mtb_divisor[i_port][i_dimm]);
+        } else {
+           FAPI_ERR("Incompatable SPD DRAM generation on %s!", i_target_dimm.toEcmdString());
+           FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_INCOMPATABLE_SPD_DRAM_GEN);
+           return rc;
+        }
 
-        rc = FAPI_ATTR_GET(ATTR_SPD_TWRMIN, &i_target_dimm,
-            p_o_spd_data->twrmin[i_port][i_dimm]);
-        if(rc) break;
+        // Common for DDR3 and DDR4
         rc = FAPI_ATTR_GET(ATTR_SPD_TRCDMIN, &i_target_dimm,
             p_o_spd_data->trcdmin[i_port][i_dimm]);
         if(rc) break;
-        rc = FAPI_ATTR_GET(ATTR_SPD_TRRDMIN, &i_target_dimm,
-            p_o_spd_data->trrdmin[i_port][i_dimm]);
-        if(rc) break;
         rc = FAPI_ATTR_GET(ATTR_SPD_TRPMIN, &i_target_dimm,
             p_o_spd_data->trpmin[i_port][i_dimm]);
         if(rc) break;
@@ -633,15 +768,6 @@ fapi::ReturnCode mss_eff_config_read_spd_data(fapi::Target i_target_dimm,
         rc = FAPI_ATTR_GET(ATTR_SPD_TRCMIN, &i_target_dimm,
             p_o_spd_data->trcmin[i_port][i_dimm]);
         if(rc) break;
-        rc = FAPI_ATTR_GET(ATTR_SPD_TRFCMIN, &i_target_dimm,
-            p_o_spd_data->trfcmin[i_port][i_dimm]);
-        if(rc) break;
-        rc = FAPI_ATTR_GET(ATTR_SPD_TWTRMIN, &i_target_dimm,
-            p_o_spd_data->twtrmin[i_port][i_dimm]);
-        if(rc) break;
-        rc = FAPI_ATTR_GET(ATTR_SPD_TRTPMIN, &i_target_dimm,
-            p_o_spd_data->trtpmin[i_port][i_dimm]);
-        if(rc) break;
         rc = FAPI_ATTR_GET(ATTR_SPD_TFAWMIN, &i_target_dimm,
             p_o_spd_data->tfawmin[i_port][i_dimm]);
         if(rc) break;
@@ -1331,6 +1457,9 @@ fapi::ReturnCode mss_eff_config_setup_eff_atts(
 //------------------------------------------------------------------------------
     switch(p_i_data->sdram_banks[0][0])
     {
+        case fapi::ENUM_ATTR_SPD_SDRAM_BANKS_B4:
+            p_o_atts->eff_dram_banks = 4;                       // DDR4 only
+            break;
         case fapi::ENUM_ATTR_SPD_SDRAM_BANKS_B8:
             p_o_atts->eff_dram_banks = 8;
             break;
@@ -1367,6 +1496,12 @@ fapi::ReturnCode mss_eff_config_setup_eff_atts(
         case fapi::ENUM_ATTR_SPD_SDRAM_ROWS_R16:
             p_o_atts->eff_dram_rows = 16;
             break;
+        case fapi::ENUM_ATTR_SPD_SDRAM_ROWS_R17:
+            p_o_atts->eff_dram_rows = 17;
+            break;
+        case fapi::ENUM_ATTR_SPD_SDRAM_ROWS_R18:
+            p_o_atts->eff_dram_rows = 18;
+            break;
         default:
             FAPI_ERR("Unknown DRAM rows on %s!", i_target_mba.toEcmdString());
                         uint8_t& SDRAM_ROWS= p_i_data->sdram_rows[0][0];
@@ -1555,6 +1690,8 @@ fapi::ReturnCode mss_eff_config_setup_eff_atts(
                     p_i_mss_eff_config_data->dram_trcd;
             }
 //------------------------------------------------------------------------------
+         if (p_i_data->dram_device_type[0][0] == fapi::ENUM_ATTR_SPD_DRAM_DEVICE_TYPE_DDR3) {
+            // DDR3
             p_i_mss_eff_config_data->dram_trrd = calc_timing_in_clk
                 (
                     p_i_mss_eff_config_data->mtb_in_ps_u32array[l_cur_mba_port]
@@ -1572,6 +1709,165 @@ fapi::ReturnCode mss_eff_config_setup_eff_atts(
                 p_o_atts->eff_dram_trrd =
                     p_i_mss_eff_config_data->dram_trrd;
             }
+         } else if (p_i_data->dram_device_type[0][0] == fapi::ENUM_ATTR_SPD_DRAM_DEVICE_TYPE_DDR4) { 
+            // DDR4
+            FAPI_INF("DDR4 Check: spd tRRDs=0x%x, tRRDl=0x%x, mtb=%i, ftb=%i, width=%i",
+                    p_i_data->trrdsmin[l_cur_mba_port][l_cur_mba_dimm],
+                    p_i_data->trrdlmin[l_cur_mba_port][l_cur_mba_dimm],
+                    p_i_mss_eff_config_data->mtb_in_ps_u32array[l_cur_mba_port][l_cur_mba_dimm],
+                    p_i_mss_eff_config_data->ftb_in_fs_u32array[l_cur_mba_port][l_cur_mba_dimm],
+                    p_o_atts->eff_dram_width);
+                    const uint8_t min_delay_clocks = 4;
+                    uint32_t max_delay;             // in ps
+                    // bool is_2K_page = 0;    
+
+                    // get the spd min trrd in clocks
+                    p_i_mss_eff_config_data->dram_trrd = calc_timing_in_clk
+                    (
+                       p_i_mss_eff_config_data->mtb_in_ps_u32array[l_cur_mba_port][l_cur_mba_dimm],
+                       p_i_mss_eff_config_data->ftb_in_fs_u32array[l_cur_mba_port][l_cur_mba_dimm],
+                       p_i_data->trrdsmin[l_cur_mba_port][l_cur_mba_dimm],
+                       0,  // need to put in the trrdsmin_ftb here...
+                       p_i_mss_eff_config_data->mss_freq
+                    );
+
+                    // trrdsmin from SPD is absolute min of DIMM.
+                    // need to know page size, then use 6ns for (2k page) otherwise 5ns
+
+                    FAPI_INF("DDR4 Check:  p_i_tRRD_s(nCK) = %i",  p_i_mss_eff_config_data->dram_trrd);
+                    FAPI_INF("Attribute p_o_eff_dram_trrd = %i",  p_o_atts->eff_dram_trrd);
+                    // need a table here for other speeds/page sizes
+
+                    // trrd_s = 2K page @ 1600, max(4nCK,6ns)       since min nCK=1.25ns, const 6ns
+                    // 1/2 or 1K   page @ 1600, max(4nCK, 5ns)
+
+                    // 1600 1866 2133 2400 (data rate)
+                    // 6,   5.3, 5.3, 5.3 ns        for 2k page size (x16)
+                    // 5,   4.2, 3.7, 3.3 ns        for 0.5k or 1k page size (x8)
+                    // !! NOTE !!  NOT supporting 2k page size (with check for width above should cause error out).
+
+                    if (p_i_mss_eff_config_data->mss_freq < 1733)           // 1600
+                    {
+                       max_delay = 5000;       // in ps
+                    }
+                    else if (p_i_mss_eff_config_data->mss_freq < 2000)      // 1866
+                    {
+                       max_delay = 4200;       // in ps
+                    }
+                    else if (p_i_mss_eff_config_data->mss_freq < 2267)      // 2133
+                    {
+                       max_delay = 3700;       // in ps
+                    }
+                    else // if (p_i_mss_eff_config_data->mss_freq < 2533)   // 2400
+                    {
+                       max_delay = 3300;       // in ps
+                    }
+/*                  else if (p_i_mss_eff_config_data->mss_freq < 2933)      // 2666
+                    {
+                       max_delay = ??00;       // in ps
+                    }
+                    else // if (p_i_mss_eff_config_data->mss_freq < ????)   // 3200
+                    {
+                       max_delay = ??00;       // in ps
+                    }
+                                        
+*/
+                    uint8_t max_delay_clocks = calc_timing_in_clk
+                         (1, 0, max_delay, 0, p_i_mss_eff_config_data->mss_freq);
+
+                    // find max between min_delay_clocks, max_delay_clocks and dev_min
+
+                    if (min_delay_clocks > max_delay_clocks)
+                       max_delay_clocks = min_delay_clocks;
+
+                    if (p_i_mss_eff_config_data->dram_trrd > max_delay_clocks)
+                       max_delay_clocks = p_i_mss_eff_config_data->dram_trrd;
+
+                    if (max_delay_clocks > p_o_atts->eff_dram_trrd)
+                       p_o_atts->eff_dram_trrd = max_delay_clocks;
+
+//---------------------------------------------------------------------------------------
+// trrd_l = max(4nCK,7.5ns)
+        // 1600 1866 2133 2400 (data rate)
+        // 7.5  6.4, 6.4, 6.4 ns        for 2k page size (x16)
+        // 6,   5.3, 5.3, 4.9 ns        for 0.5k or 1k page size (x8)
+        // !! NOTE !!  NOT supporting 2k page size (with check for width above should cause error out).
+                p_i_mss_eff_config_data->dram_trrdl = calc_timing_in_clk
+                (
+                    p_i_mss_eff_config_data->mtb_in_ps_u32array[l_cur_mba_port][l_cur_mba_dimm],
+                    p_i_mss_eff_config_data->ftb_in_fs_u32array[l_cur_mba_port][l_cur_mba_dimm],
+                    p_i_data->trrdlmin[l_cur_mba_port][l_cur_mba_dimm],
+                    0, // need to put in the trrdlmin_ftb here...
+                    p_i_mss_eff_config_data->mss_freq
+                );
+
+                                // condense this later with the if/else above...
+                                if (p_i_mss_eff_config_data->mss_freq < 1733)           // 1600
+                                {
+                                        max_delay = 6000;       // in ps
+                                }
+                                else if (p_i_mss_eff_config_data->mss_freq < 2000)      // 1866
+                                {
+                                        max_delay = 5300;       // in ps
+                                }
+                                else if (p_i_mss_eff_config_data->mss_freq < 2267)      // 2133
+                                {
+                                        max_delay = 5300;       // in ps
+                                }
+                                else // if (p_i_mss_eff_config_data->mss_freq < 2533)   // 2400
+                                {
+                                        max_delay = 4900;       // in ps
+                                }
+/*                              else if (p_i_mss_eff_config_data->mss_freq < 2933)      // 2666
+                                {
+                                        max_delay = ??00;       // in ps
+                                }
+                                else // if (p_i_mss_eff_config_data->mss_freq < ????)   // 3200
+                                {
+                                        max_delay = ??00;       // in ps
+                                }
+                                        
+*/
+                max_delay_clocks = calc_timing_in_clk
+                                        (1, 0, max_delay, 0, p_i_mss_eff_config_data->mss_freq);
+                                if (max_delay_clocks > p_o_atts->eff_dram_trrdl)
+                                {
+                                        p_o_atts->eff_dram_trrdl = max_delay_clocks;
+                                }
+                                else if (p_i_mss_eff_config_data->dram_trrdl > p_o_atts->eff_dram_trrdl)
+                                {
+                                        p_o_atts->eff_dram_trrdl = p_i_mss_eff_config_data->dram_trrdl;
+                                }
+                FAPI_INF("DDR4 tRRDs = %i, tRRDl = %i", p_o_atts->eff_dram_trrd, p_o_atts->eff_dram_trrdl);
+         } else {
+            FAPI_ERR("Incompatable DRAM generation on %s!",i_target_mba.toEcmdString());
+            uint8_t& DRAM_DEVICE_TYPE_0_0 = p_i_data->dram_device_type[0][0];
+            uint8_t& DRAM_DEVICE_TYPE_0_1 = p_i_data->dram_device_type[0][1];
+            uint8_t& DRAM_DEVICE_TYPE_1_0 = p_i_data->dram_device_type[1][0];
+            uint8_t& DRAM_DEVICE_TYPE_1_1 = p_i_data->dram_device_type[1][1];
+            FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_INCOMPATABLE_DRAM_GEN);
+            return rc;
+         }
+//------------------------------------------------------------------------------
+         if (p_i_data->dram_device_type[0][0] == fapi::ENUM_ATTR_SPD_DRAM_DEVICE_TYPE_DDR4) { 
+            p_i_mss_eff_config_data->dram_tccdl = calc_timing_in_clk
+                (
+                    p_i_mss_eff_config_data->mtb_in_ps_u32array[l_cur_mba_port]
+                    [l_cur_mba_dimm],
+                    p_i_mss_eff_config_data->ftb_in_fs_u32array[l_cur_mba_port]
+                    [l_cur_mba_dimm],
+                    p_i_data->tccdlmin[l_cur_mba_port]
+                    [l_cur_mba_dimm],
+                    0,
+                    p_i_mss_eff_config_data->mss_freq
+                );
+            if (p_i_mss_eff_config_data->dram_tccdl >
+                    p_o_atts->eff_dram_tccdl)
+            {
+                p_o_atts->eff_dram_tccdl =
+                    p_i_mss_eff_config_data->dram_tccdl;
+            }
+         }
 //------------------------------------------------------------------------------
             p_i_mss_eff_config_data->dram_trp = calc_timing_in_clk
                 (
@@ -1590,6 +1886,7 @@ fapi::ReturnCode mss_eff_config_setup_eff_atts(
                 p_o_atts->eff_dram_trp = p_i_mss_eff_config_data->dram_trp;
             }
 //------------------------------------------------------------------------------
+         if (p_i_data->dram_device_type[l_cur_mba_port][l_cur_mba_dimm] == fapi::ENUM_ATTR_SPD_DRAM_DEVICE_TYPE_DDR3) {
             p_i_mss_eff_config_data->dram_twtr = calc_timing_in_clk
                 (
                     p_i_mss_eff_config_data->mtb_in_ps_u32array[l_cur_mba_port]
@@ -1601,12 +1898,55 @@ fapi::ReturnCode mss_eff_config_setup_eff_atts(
                     0,
                     p_i_mss_eff_config_data->mss_freq
                 );
-            if (p_i_mss_eff_config_data->dram_twtr >
-                    p_o_atts->eff_dram_twtr)
+            if (p_i_mss_eff_config_data->dram_twtr > p_o_atts->eff_dram_twtr)
             {
-                p_o_atts->eff_dram_twtr =
-                    p_i_mss_eff_config_data->dram_twtr;
+               p_o_atts->eff_dram_twtr = p_i_mss_eff_config_data->dram_twtr;
+            }
+         } else if (p_i_data->dram_device_type[l_cur_mba_port][l_cur_mba_dimm] == fapi::ENUM_ATTR_SPD_DRAM_DEVICE_TYPE_DDR4) {
+            p_i_mss_eff_config_data->dram_twtr = calc_timing_in_clk
+                (
+                    p_i_mss_eff_config_data->mtb_in_ps_u32array[l_cur_mba_port]
+                    [l_cur_mba_dimm],
+                    p_i_mss_eff_config_data->ftb_in_fs_u32array[l_cur_mba_port]
+                    [l_cur_mba_dimm],
+                    p_i_data->twtrsmin[l_cur_mba_port]
+                    [l_cur_mba_dimm],
+                    0,
+                    p_i_mss_eff_config_data->mss_freq
+                );
+            // twtr_s = max(2nCK,2.5ns)   since min nCK=1.25ns, const 2.5ns
+            //FAPI_INF("DDR4 Check:  tWTR in CLKS = %i (2.5ns)",  p_i_mss_eff_config_data->dram_twtr);
+            //FAPI_INF("Attribute eff_dram_twtr = %i",  p_o_atts->eff_dram_twtr);
+            p_o_atts->eff_dram_twtr = p_i_mss_eff_config_data->dram_twtr;
+
+            // twtr_l = max(4nCK,7.5ns)
+            p_i_mss_eff_config_data->dram_twtrl = calc_timing_in_clk
+                (
+                    p_i_mss_eff_config_data->mtb_in_ps_u32array[l_cur_mba_port]
+                    [l_cur_mba_dimm],
+                    p_i_mss_eff_config_data->ftb_in_fs_u32array[l_cur_mba_port]
+                    [l_cur_mba_dimm],
+                    p_i_data->twtrlmin[l_cur_mba_port]
+                    [l_cur_mba_dimm],
+                    0,
+                    p_i_mss_eff_config_data->mss_freq
+                );
+
+            if (p_i_mss_eff_config_data->dram_twtrl < 4) {
+               p_o_atts->eff_dram_twtrl = 4;
+            } else {
+               p_o_atts->eff_dram_twtrl = p_i_mss_eff_config_data->dram_twtrl;
             }
+            FAPI_INF("DDR4 twtrs = %i, twtrl = %i", p_o_atts->eff_dram_twtr, p_o_atts->eff_dram_twtrl);
+         } else {
+            FAPI_ERR("Incompatable DRAM generation on %s!",i_target_mba.toEcmdString());
+            uint8_t& DRAM_DEVICE_TYPE_0_0 = p_i_data->dram_device_type[0][0];
+            uint8_t& DRAM_DEVICE_TYPE_0_1 = p_i_data->dram_device_type[0][1];
+            uint8_t& DRAM_DEVICE_TYPE_1_0 = p_i_data->dram_device_type[1][0];
+            uint8_t& DRAM_DEVICE_TYPE_1_1 = p_i_data->dram_device_type[1][1];
+            FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_INCOMPATABLE_DRAM_GEN);
+            return rc;
+         }
 //------------------------------------------------------------------------------
             p_i_mss_eff_config_data->dram_trtp = calc_timing_in_clk
                 (
@@ -1619,12 +1959,30 @@ fapi::ReturnCode mss_eff_config_setup_eff_atts(
                     0,
                     p_i_mss_eff_config_data->mss_freq
                 );
-            if (p_i_mss_eff_config_data->dram_trtp >
-                    p_o_atts->eff_dram_trtp)
+         if (p_i_data->dram_device_type[l_cur_mba_port][l_cur_mba_dimm] == fapi::ENUM_ATTR_SPD_DRAM_DEVICE_TYPE_DDR3) {
+            if (p_i_mss_eff_config_data->dram_trtp > p_o_atts->eff_dram_trtp) {
+               p_o_atts->eff_dram_trtp = p_i_mss_eff_config_data->dram_trtp;
+            }
+         } else if (p_i_data->dram_device_type[l_cur_mba_port][l_cur_mba_dimm] == fapi::ENUM_ATTR_SPD_DRAM_DEVICE_TYPE_DDR4) {
+            // max (4nCK, 7.5ns), 7.5ns=
+            //FAPI_INF("DDR4 Check:  tRTP in CLKS = %i (should be 6)",  p_i_mss_eff_config_data->dram_trtp);
+            //FAPI_INF("Attribute eff_dram_trtp= %i",  p_o_atts->eff_dram_trtp);
+            if (p_i_mss_eff_config_data->dram_trtp < 4)
             {
-                p_o_atts->eff_dram_trtp =
-                    p_i_mss_eff_config_data->dram_trtp;
+               p_o_atts->eff_dram_trtp = 4;
+            } else {
+               p_o_atts->eff_dram_trtp = p_i_mss_eff_config_data->dram_trtp;
             }
+         } else {
+            FAPI_ERR("Incompatable DRAM generation on %s!",i_target_mba.toEcmdString());
+            uint8_t& DRAM_DEVICE_TYPE_0_0 = p_i_data->dram_device_type[0][0];
+            uint8_t& DRAM_DEVICE_TYPE_0_1 = p_i_data->dram_device_type[0][1];
+            uint8_t& DRAM_DEVICE_TYPE_1_0 = p_i_data->dram_device_type[1][0];
+            uint8_t& DRAM_DEVICE_TYPE_1_1 = p_i_data->dram_device_type[1][1];
+            FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_INCOMPATABLE_DRAM_GEN);
+            return rc;
+         }
+
 //------------------------------------------------------------------------------
             p_i_mss_eff_config_data->dram_tras = calc_timing_in_clk
                 (
@@ -1663,6 +2021,7 @@ fapi::ReturnCode mss_eff_config_setup_eff_atts(
                     p_i_mss_eff_config_data->dram_trc;
             }
 //------------------------------------------------------------------------------
+         if (p_i_data->dram_device_type[l_cur_mba_port][l_cur_mba_dimm] == fapi::ENUM_ATTR_SPD_DRAM_DEVICE_TYPE_DDR3) {
             p_i_mss_eff_config_data->dram_trfc = calc_timing_in_clk
                 (
                     p_i_mss_eff_config_data->mtb_in_ps_u32array[l_cur_mba_port]
@@ -1680,7 +2039,42 @@ fapi::ReturnCode mss_eff_config_setup_eff_atts(
                 p_o_atts->eff_dram_trfc =
                     p_i_mss_eff_config_data->dram_trfc;
             }
+         } else if (p_i_data->dram_device_type[l_cur_mba_port][l_cur_mba_dimm] == fapi::ENUM_ATTR_SPD_DRAM_DEVICE_TYPE_DDR4) {
+            p_i_mss_eff_config_data->dram_trfc = calc_timing_in_clk
+                (
+                    p_i_mss_eff_config_data->mtb_in_ps_u32array[l_cur_mba_port]
+                    [l_cur_mba_dimm],
+                    p_i_mss_eff_config_data->ftb_in_fs_u32array[l_cur_mba_port]
+                    [l_cur_mba_dimm],
+                    p_i_data->trfc1min[l_cur_mba_port]
+                    [l_cur_mba_dimm],
+                    0,
+                    p_i_mss_eff_config_data->mss_freq
+                );
+            FAPI_INF("DDR4 Check: spd trfc = 0x%x (%i clks), o_attr=0x%x",
+               p_i_data->trfc1min[l_cur_mba_port][l_cur_mba_dimm],
+               p_i_mss_eff_config_data->dram_trfc,
+               p_o_atts->eff_dram_trfc
+            );
+            if (p_i_mss_eff_config_data->dram_trfc >
+                    p_o_atts->eff_dram_trfc)
+            {
+                p_o_atts->eff_dram_trfc =
+                    p_i_mss_eff_config_data->dram_trfc;
+            }
+            // AST HERE: Need DDR4 attributes for other refresh rates, 2x, 4x
+
+         } else {
+            FAPI_ERR("Incompatable DRAM generation on %s!",i_target_mba.toEcmdString());
+            uint8_t& DRAM_DEVICE_TYPE_0_0 = p_i_data->dram_device_type[0][0];
+            uint8_t& DRAM_DEVICE_TYPE_0_1 = p_i_data->dram_device_type[0][1];
+            uint8_t& DRAM_DEVICE_TYPE_1_0 = p_i_data->dram_device_type[1][0];
+            uint8_t& DRAM_DEVICE_TYPE_1_1 = p_i_data->dram_device_type[1][1];
+            FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_INCOMPATABLE_DRAM_GEN);
+            return rc;
+         }
 //------------------------------------------------------------------------------
+         if (p_i_data->dram_device_type[l_cur_mba_port][l_cur_mba_dimm] == fapi::ENUM_ATTR_SPD_DRAM_DEVICE_TYPE_DDR3) {
             p_i_mss_eff_config_data->dram_tfaw = calc_timing_in_clk
                 (
                     p_i_mss_eff_config_data->mtb_in_ps_u32array[l_cur_mba_port]
@@ -1698,49 +2092,181 @@ fapi::ReturnCode mss_eff_config_setup_eff_atts(
                 p_o_atts->eff_dram_tfaw_u32 =
                     p_i_mss_eff_config_data->dram_tfaw;
             }
+         } else if (p_i_data->dram_device_type[l_cur_mba_port][l_cur_mba_dimm] == fapi::ENUM_ATTR_SPD_DRAM_DEVICE_TYPE_DDR4) {
+            p_i_mss_eff_config_data->dram_tfaw = calc_timing_in_clk
+                (
+                    p_i_mss_eff_config_data->mtb_in_ps_u32array[l_cur_mba_port][l_cur_mba_dimm],
+                    p_i_mss_eff_config_data->ftb_in_fs_u32array[l_cur_mba_port][l_cur_mba_dimm],
+                    p_i_data->tfawmin[l_cur_mba_port][l_cur_mba_dimm],
+                    0,
+                    p_i_mss_eff_config_data->mss_freq
+                );
+FAPI_DBG("DDR4 Check:  SPD=0x%x, p_i_tFAWmin (nCK) = %i",
+                p_i_data->tfawmin[l_cur_mba_port][l_cur_mba_dimm], p_i_mss_eff_config_data->dram_tfaw);
+
+                                // example x8, 1600, min= 25ns => 25/1.25 = 20 clocks
+                                const uint8_t min_clks [][6] = {        // width, data rate
+                                // NOTE: 2666 and 3200 are TBD, using guess values
+                                // 1600 1866 2133 2400 2666 3200
+                                  { 16,  16,  16,  16,  16,  16},               // x4 (page size = 1/2K)
+                                  { 20,  22,  23,  26,  29,  32}                // x8 (page size = 1K)
+                                //{ xx,  xx,  xx,  xx,  TBD, TBD},              // x16(page size = 2K)
+                                };
+
+                                uint8_t speed_idx;
+                                uint8_t width_idx;
+
+                                if (p_i_data->dram_width[l_cur_mba_port][l_cur_mba_dimm] == fapi::ENUM_ATTR_SPD_DRAM_WIDTH_W4)
+                                {
+                                                width_idx = 0;
+                                }
+                                else //(p_i_data->dram_width[l_cur_mba_port][l_cur_mba_dimm] == fapi::ENUM_ATTR_SPD_DRAM_WIDTH_W8)
+                                {
+                                                width_idx = 1;
+                                }
+                                //else (p_i_data->dram_width == fapi::ENUM_ATTR_SPD_DRAM_WIDTH_W16)
+
+
+                                if (p_i_mss_eff_config_data->mss_freq < 1733)           // 1600
+                                {
+                                        speed_idx  = 0;                 // 1.25ns
+                                }
+                                else if (p_i_mss_eff_config_data->mss_freq < 2000)      // 1866
+                                {
+                                        speed_idx  = 1;                 // 1.0718ns
+                                }
+                                else if (p_i_mss_eff_config_data->mss_freq < 2267)      // 2133
+                                {
+                                        speed_idx  = 2;                 // 0.9376ns
+                                }
+                                else // if (p_i_mss_eff_config_data->mss_freq < 2533)   // 2400
+                                {
+                                        speed_idx  = 3;                 // 0.8333ns
+                                }
+        //                      else if (p_i_mss_eff_config_data->mss_freq < 2933)      // 2666
+        //                      {
+        //                              speed_idx  = 4;                 // 0.7502ns
+        //                      }
+        //                      else // if (p_i_mss_eff_config_data->mss_freq < ????)   // 3200
+        //                      {
+        //                              speed_idx  = 5;                 // 0.625ns
+        //                      }
+
+                                if (p_o_atts->eff_dram_tfaw_u32 < min_clks[width_idx][speed_idx])
+                                {
+                                        p_o_atts->eff_dram_tfaw_u32 =  min_clks[width_idx][speed_idx];
+                                }
+/*                              
+    fapi::Target l_target_centaur;
+        rc = fapiGetParentChip(i_target_mba, l_target_centaur);
+    if(rc) break;
+        uint8_t ec_tfaw_16_problem;
+        // need ATTRIBUTE for this....
+    rc = FAPI_ATTR_GET(ATTR_MSS_DISABLE1_REG_FIXED, &i_target_centaur, ec_tfaw_16_problem);
+    if(rc) break;
+*/
+                                if (p_o_atts->eff_dram_tfaw_u32 == 16)  // due to logic bug above
+                                {
+                                        p_o_atts->eff_dram_tfaw_u32 = 15;
+                                        FAPI_INF("setting tFAW to 15 due to bug");
+                                }
+                        FAPI_DBG("Attribute p_o_eff_dram_tfaw = %i",  p_o_atts->eff_dram_tfaw_u32);
+         } else {
+            FAPI_ERR("Incompatable DRAM generation on %s!",i_target_mba.toEcmdString());
+            uint8_t& DRAM_DEVICE_TYPE_0_0 = p_i_data->dram_device_type[0][0];
+            uint8_t& DRAM_DEVICE_TYPE_0_1 = p_i_data->dram_device_type[0][1];
+            uint8_t& DRAM_DEVICE_TYPE_1_0 = p_i_data->dram_device_type[1][0];
+            uint8_t& DRAM_DEVICE_TYPE_1_1 = p_i_data->dram_device_type[1][1];
+            FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_INCOMPATABLE_DRAM_GEN);
+            return rc;
+         }
 //------------------------------------------------------------------------------
         } // inner for loop
     } // outter for loop
 
     // Calculate CWL
-    if ((TWO_MHZ/p_i_mss_eff_config_data->mss_freq) >= 2500)
-    {
-        p_o_atts->eff_dram_cwl = 5;
-    }
-    else if ((TWO_MHZ/p_i_mss_eff_config_data->mss_freq) >= 1875)
-    {
-        p_o_atts->eff_dram_cwl = 6;
-    }
-    else if ((TWO_MHZ/p_i_mss_eff_config_data->mss_freq) >= 1500)
-    {
-        p_o_atts->eff_dram_cwl = 7;
-    }
-    else if ((TWO_MHZ/p_i_mss_eff_config_data->mss_freq) >= 1250)
-    {
-        p_o_atts->eff_dram_cwl = 8;
-    }
-    else if ((TWO_MHZ/p_i_mss_eff_config_data->mss_freq) >= 1070)
-    {
-        p_o_atts->eff_dram_cwl = 9;
-    }
-    else if ((TWO_MHZ/p_i_mss_eff_config_data->mss_freq) >= 935)
-    {
-        p_o_atts->eff_dram_cwl = 10;
-    }
-    else if ((TWO_MHZ/p_i_mss_eff_config_data->mss_freq) >= 833)
-    {
-        p_o_atts->eff_dram_cwl = 11;
-    }
-    else if ((TWO_MHZ/p_i_mss_eff_config_data->mss_freq) >= 750)
-    {
-        p_o_atts->eff_dram_cwl = 12;
-    }
-    else
-    {
-                const uint16_t& CWL_VAL = (TWO_MHZ/p_i_mss_eff_config_data->mss_freq);
-        FAPI_ERR("Error calculating CWL");
-        FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_CWL_CALC_ERR);
-        return rc;
+    if (p_i_data->dram_device_type[0][0] == fapi::ENUM_ATTR_SPD_DRAM_DEVICE_TYPE_DDR3) {
+       if ((TWO_MHZ/p_i_mss_eff_config_data->mss_freq) >= 2500)
+       {
+           p_o_atts->eff_dram_cwl = 5;
+       }
+       else if ((TWO_MHZ/p_i_mss_eff_config_data->mss_freq) >= 1875)
+       {
+           p_o_atts->eff_dram_cwl = 6;
+       }
+       else if ((TWO_MHZ/p_i_mss_eff_config_data->mss_freq) >= 1500)
+       {
+           p_o_atts->eff_dram_cwl = 7;
+       }
+       else if ((TWO_MHZ/p_i_mss_eff_config_data->mss_freq) >= 1250)
+       {
+           p_o_atts->eff_dram_cwl = 8;
+       }
+       else if ((TWO_MHZ/p_i_mss_eff_config_data->mss_freq) >= 1070)
+       {
+           p_o_atts->eff_dram_cwl = 9;
+       }
+       else if ((TWO_MHZ/p_i_mss_eff_config_data->mss_freq) >= 935)
+       {
+           p_o_atts->eff_dram_cwl = 10;
+       }
+       else if ((TWO_MHZ/p_i_mss_eff_config_data->mss_freq) >= 833)
+       {
+           p_o_atts->eff_dram_cwl = 11;
+       }
+       else if ((TWO_MHZ/p_i_mss_eff_config_data->mss_freq) >= 750)
+       {
+           p_o_atts->eff_dram_cwl = 12;
+       }
+       else
+       {
+           const uint16_t& CWL_VAL = (TWO_MHZ/p_i_mss_eff_config_data->mss_freq);
+           FAPI_ERR("Error calculating CWL");
+           FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_CWL_CALC_ERR);
+           return rc;
+       }
+    } else if (p_i_data->dram_device_type[0][0] == fapi::ENUM_ATTR_SPD_DRAM_DEVICE_TYPE_DDR4) {
+                // 1st set only
+                // need to look at this again...
+                if (p_i_mss_eff_config_data->mss_freq <= (1600 * 1.05)) // 1600 
+                {
+                        p_o_atts->eff_dram_cwl = 9;
+                }
+                else if (p_i_mss_eff_config_data->mss_freq <= (1866 * 1.05))    // 1866
+                {
+                        p_o_atts->eff_dram_cwl = 10;
+                }
+                else if (p_i_mss_eff_config_data->mss_freq <= (2133 * 1.05))    // 2133
+                {
+                        p_o_atts->eff_dram_cwl = 11;
+                }
+                else if (p_i_mss_eff_config_data->mss_freq <= (2400 * 1.05))    // 2400
+                {
+                        p_o_atts->eff_dram_cwl = 12;
+                }
+                else if (p_i_mss_eff_config_data->mss_freq <= (2666 * 1.05))    // 2666
+                {
+                        p_o_atts->eff_dram_cwl = 14;
+                }
+                else if (p_i_mss_eff_config_data->mss_freq <= (3200 * 1.05))    // 2666
+                {
+                        p_o_atts->eff_dram_cwl = 16;
+                }
+                else
+                {
+                   const uint16_t& CWL_VAL = (TWO_MHZ/p_i_mss_eff_config_data->mss_freq);
+                   FAPI_ERR("Error calculating CWL");
+                   FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_CWL_CALC_ERR);
+                   return rc;
+                }
+    } else {
+         FAPI_ERR("Incompatable DRAM generation on %s!",i_target_mba.toEcmdString());
+         uint8_t& DRAM_DEVICE_TYPE_0_0 = p_i_data->dram_device_type[0][0];
+         uint8_t& DRAM_DEVICE_TYPE_0_1 = p_i_data->dram_device_type[0][1];
+         uint8_t& DRAM_DEVICE_TYPE_1_0 = p_i_data->dram_device_type[1][0];
+         uint8_t& DRAM_DEVICE_TYPE_1_1 = p_i_data->dram_device_type[1][1];
+         FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_INCOMPATABLE_DRAM_GEN);
+         return rc;
     }
 //------------------------------------------------------------------------------
     // Calculate ZQCAL Interval based on the following equation from Ken:
@@ -1849,8 +2375,23 @@ fapi::ReturnCode mss_eff_config_setup_eff_atts(
                   FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_UDIMM_UNSUPPORTED_TYPE); return rc;
                }
             } else if ( p_o_atts->eff_dimm_type == fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM ) {
-               FAPI_INF("Will set LR atts after orig eff_config functions");
-
+               if (p_o_atts->eff_dram_gen == fapi::ENUM_ATTR_EFF_DRAM_GEN_DDR3) {
+                  FAPI_INF("Will set LR atts after orig eff_config functions");
+               } else if (p_o_atts->eff_dram_gen == fapi::ENUM_ATTR_EFF_DRAM_GEN_DDR4) {   // need to update this later...
+                  if (p_o_atts->eff_num_ranks_per_dimm[l_cur_mba_port][l_cur_mba_dimm] == 4) {
+                        p_o_atts->eff_ibm_type[l_cur_mba_port][l_cur_mba_dimm] = fapi::ENUM_ATTR_EFF_IBM_TYPE_TYPE_5C;
+                  } else {
+                     FAPI_INF("Will set LR atts after orig eff_config functions");
+                  }
+               } else {
+                  FAPI_ERR("Incompatable DRAM generation on %s!",i_target_mba.toEcmdString());
+                  uint8_t& DRAM_DEVICE_TYPE_0_0 = p_i_data->dram_device_type[0][0];
+                  uint8_t& DRAM_DEVICE_TYPE_0_1 = p_i_data->dram_device_type[0][1];
+                  uint8_t& DRAM_DEVICE_TYPE_1_0 = p_i_data->dram_device_type[1][0];
+                  uint8_t& DRAM_DEVICE_TYPE_1_1 = p_i_data->dram_device_type[1][1];
+                  FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_INCOMPATABLE_DRAM_GEN);
+                  return rc;
+               }
             } else {
                p_o_atts->eff_ibm_type[l_cur_mba_port][l_cur_mba_dimm] = fapi::ENUM_ATTR_EFF_IBM_TYPE_UNDEFINED;
                FAPI_ERR("Currently unsupported DIMM_TYPE on %s!", i_target_mba.toEcmdString());
@@ -2057,6 +2598,12 @@ fapi::ReturnCode mss_eff_config_write_eff_atts(
         rc = FAPI_ATTR_SET(ATTR_EFF_DIMM_RANKS_CONFIGED, &i_target_mba,
                 p_i_atts->eff_dimm_ranks_configed);
         if(rc) break;
+        rc = FAPI_ATTR_SET(ATTR_LRDIMM_ADDITIONAL_CNTL_WORDS, &i_target_mba,
+                p_i_atts->eff_lrdimm_additional_cntl_words);
+        if(rc) break;
+        rc = FAPI_ATTR_SET(ATTR_EFF_LRDIMM_ADDITIONAL_CNTL_WORDS, &i_target_mba,
+                p_i_atts->eff_lrdimm_additional_cntl_words);
+        if(rc) break;
         rc = FAPI_ATTR_SET(ATTR_EFF_DIMM_RCD_CNTL_WORD_0_15, &i_target_mba,
                 p_i_atts->eff_dimm_rcd_cntl_word_0_15);
         if(rc) break;
@@ -2153,12 +2700,31 @@ fapi::ReturnCode mss_eff_config_write_eff_atts(
         rc = FAPI_ATTR_SET(ATTR_EFF_DRAM_TRRD, &i_target_mba,
                 p_i_atts->eff_dram_trrd);
         if(rc) break;
+        // DDR4 only
+        // AST HERE: Need ATTR added
+        //rc = FAPI_ATTR_SET(ATTR_EFF_DRAM_TRRD_L, &i_target_mba,
+        //        p_i_atts->eff_dram_trrd);
+        //if(rc) break;
+        // DDR4 only
+        rc = FAPI_ATTR_SET(ATTR_TCCD_L, &i_target_mba,
+                p_i_atts->eff_dram_tccdl);
+        if(rc) break;
+
+        rc = FAPI_ATTR_SET(ATTR_EFF_DRAM_TCCD_L, &i_target_mba,
+                p_i_atts->eff_dram_tccdl);
+        if(rc) break;
+
         rc = FAPI_ATTR_SET(ATTR_EFF_DRAM_TRTP, &i_target_mba,
                 p_i_atts->eff_dram_trtp);
         if(rc) break;
         rc = FAPI_ATTR_SET(ATTR_EFF_DRAM_TWTR, &i_target_mba,
                 p_i_atts->eff_dram_twtr);
         if(rc) break;
+        // DDR4 only
+        // AST HERE: Need ATTR added
+        //rc = FAPI_ATTR_SET(ATTR_EFF_DRAM_TWTRL, &i_target_mba,
+        //p_i_atts->eff_dram_twtrl);
+        //if(rc) break;
         rc = FAPI_ATTR_SET(ATTR_EFF_DRAM_WIDTH, &i_target_mba,
                 p_i_atts->eff_dram_width);
         if(rc) break;
@@ -2182,9 +2748,9 @@ fapi::ReturnCode mss_eff_config_write_eff_atts(
         if(rc) break;
 
         // AST HERE: Needs SPD byte33[6:4], currently hard coded to 0, removed for GA1
-        //rc = FAPI_ATTR_SET(ATTR_EFF_NUM_DIES_PER_PACKAGE, &i_target_mba,
-        //        p_i_atts->eff_num_dies_per_package);
-        //if(rc) break;
+        rc = FAPI_ATTR_SET(ATTR_EFF_NUM_DIES_PER_PACKAGE, &i_target_mba,
+                p_i_atts->eff_num_dies_per_package);
+        if(rc) break;
 
         rc = FAPI_ATTR_SET(ATTR_EFF_NUM_DROPS_PER_PORT, &i_target_mba,
                 p_i_atts->eff_num_drops_per_port);
@@ -2194,9 +2760,9 @@ fapi::ReturnCode mss_eff_config_write_eff_atts(
         if(rc) break;
 
         // AST HERE: Needs source data, currently hard coded to 0, removed for GA1
-        //rc = FAPI_ATTR_SET(ATTR_EFF_NUM_PACKAGES_PER_RANK, &i_target_mba,
-        //        p_i_atts->eff_num_packages_per_rank);
-        //if(rc) break;
+        rc = FAPI_ATTR_SET(ATTR_EFF_NUM_PACKAGES_PER_RANK, &i_target_mba,
+                p_i_atts->eff_num_packages_per_rank);
+        if(rc) break;
 
         rc = FAPI_ATTR_SET(ATTR_EFF_NUM_RANKS_PER_DIMM, &i_target_mba,
                 p_i_atts->eff_num_ranks_per_dimm);
@@ -2305,16 +2871,6 @@ fapi::ReturnCode mss_eff_config_write_eff_atts(
 //------------------------------------------------------------------------------
 fapi::ReturnCode mss_eff_config(const fapi::Target i_target_mba)
 {
-#ifdef FAPI_DDR4
-	fapi::ReturnCode rc;
-	rc = mss_eff_config_ddr4(i_target_mba);
-	if(rc)
-    {
-        FAPI_ERR("Error from mss_eff_config_ddr4()");
-        return rc;
-    }
-#endif
-#ifndef FAPI_DDR4
     /* Initialize Variables */
     const fapi::Target& TARGET_MBA = i_target_mba;
     fapi::ReturnCode rc;
@@ -2492,7 +3048,7 @@ fapi::ReturnCode mss_eff_config(const fapi::Target i_target_mba)
     delete p_l_mss_eff_config_data;
     delete p_l_spd_data;
     delete p_l_atts;
-#endif
+
     return rc;
 } // end mss_eff_config()
 } // extern "C"
diff --git a/src/usr/hwpf/hwp/mc_config/mss_eff_config/mss_eff_config_termination.C b/src/usr/hwpf/hwp/mc_config/mss_eff_config/mss_eff_config_termination.C
index e49f809..fa71f04 100644
--- a/src/usr/hwpf/hwp/mc_config/mss_eff_config/mss_eff_config_termination.C
+++ b/src/usr/hwpf/hwp/mc_config/mss_eff_config/mss_eff_config_termination.C
@@ -22,7 +22,7 @@
 /* permissions and limitations under the License.                         */
 /*                                                                        */
 /* IBM_PROLOG_END_TAG                                                     */
-// $Id: mss_eff_config_termination.C,v 1.48 2014/10/01 22:32:38 asaetow Exp $
+// $Id: mss_eff_config_termination.C,v 1.51 2015/09/04 18:16:24 thi Exp $
 // $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/centaur/working/procedures/ipl/fapi/mss_eff_config_termination.C,v $
 //------------------------------------------------------------------------------
 // *! (C) Copyright International Business Machines Corp. 2011
@@ -44,13 +44,15 @@
 //------------------------------------------------------------------------------
 // Version:|  Author: |  Date:  | Comment:
 //---------|----------|---------|-----------------------------------------------
+//   1.50  | sglancy  |28-Aug-15| Added RC checks - addressed FW comments
+//   1.49  | kmack    |05-Aug-15| Commented out FAPI_DDR4 code
 //   1.48  | asaetow  |01-OCT-14| Added setting for single-drop 4G1Rx8 and 16G2Rx4 from Ken/Anil for habanero at 1333Mbps under "rdimm_habanero_1333_r10_mba0", "rdimm_habanero_1333_r10_mba1", "rdimm_habanero_1333_r20_mba0", and "rdimm_habanero_1333_r20_mba1".
 //         |          |         | Added place holder setting for dual-drop 4G1Rx8 and 16G2Rx4 for habanero at 1333Mbps under "rdimm_habanero_1333_r11_mba0", "rdimm_habanero_1333_r11_mba1", "rdimm_habanero_1333_r22_mba0", and "rdimm_habanero_1333_r22_mba1".
 //   1.47  | dcadiga  |07-APR-14| FFDC Updates
 //   1.46  | kcook    |14-MAR-14| Fixed create_db_ddr4 stub function definition
 //   1.45  | kcook    |14-MAR-14| Added DDR4 support
 //   1.44  | mjjones  |07-MAR-14| Only compile if FAPI_MSSLABONLY defined
-//   1.43  | dcadiga  |04-MAR-14| Added in ISDimm support for KG 
+//   1.43  | dcadiga  |04-MAR-14| Added in ISDimm support for KG
 //   1.42  | asaetow  |22-JAN-14| Fixed target "const fapi::Target" to "const fapi::Target&" for mss_eff_config.C v1.38 and mss_eff_config_termination.H v1.2
 //   1.41  | dcadiga  |13-JAN-14| Removed checking of dimm type attribute for CDIMM, replaced with custom dimm type attribute
 //   1.40  | bellows  |02-JAN-14| VPD attribute removal
@@ -61,8 +63,8 @@
 //   1.35  | bellows  |16-SEP-13| Hostboot compile update.
 //   1.34  | kcook    |13-SEP-13| Updated define FAPI_LRDIMM token.
 //   1.33  | bellows  |12-SEP-13| set_vpd_dimm_spare function added before AM keyword shows up
-//   1.32  | kcook    |27-AUG-13| Removed LRDIMM support to mss_lrdimm_funcs.C.       
-//   1.31  | kcook    |16-AUG-13| Added LRDIMM support.       
+//   1.32  | kcook    |27-AUG-13| Removed LRDIMM support to mss_lrdimm_funcs.C.
+//   1.31  | kcook    |16-AUG-13| Added LRDIMM support.
 //   1.30  | dcadiga  |07-AUG-13| Fixed hostboot compile issue
 //   1.29  | dcadiga  |05-AUG-13| KG3 allowed, ifdef removed for lab card uint declaration, added 4R support to 1600, changed 4Rx4 / 4Rx8 RCD Drive Settings
 //   1.28  | asaetow  |05-AUG-13| Added temp workaround for incorrect byte33 SPD data in early lab OLD 16G/32G CDIMMs.
@@ -77,7 +79,7 @@
 //   1.20  | dcadiga  |30-APR-13| Fixed Hostboot Compile Error LN 972
 //   1.19  | dcadiga  |19-APR-13| Added Cdimm RCB/RCC, changed RDIMM settings for MBA0 so that a 1R card will work and a 4R card will work
 //   1.18  | dcadiga  |10-APR-13| Added UDIMM for ICICLE DDR4, fixed DD0 Clk shift
-//   1.17  | asaetow  |26-MAR-13| Removed width check for RDIMM MBA0 4Rank 1333. 
+//   1.17  | asaetow  |26-MAR-13| Removed width check for RDIMM MBA0 4Rank 1333.
 //   1.16  | dcadiga  |25-MAR-13| Added in 2N Addressing Mode.
 //   1.15  | dcadiga  |14-MAR-13| Fixed simulation issue.
 //   1.14  | dcadiga  |12-MAR-13| Code re-write for new dimms.  Confirmed working on all systems
@@ -90,11 +92,11 @@
 //         |          |         | Fixed (l_attr_is_simulation || 1) to (l_attr_is_simulation != 0) from v1.8 and v1.9.
 //   1.9   | bellows  |12-DEC-12| Changed phase rotators for sim to 0x40 for clocks
 //   1.8   | bellows  |06-DEC-12| Added sim leg for rotator values
-//   1.7   | asaetow  |18-NOV-12| Changed ATTR_MSS_CAL_STEP_ENABLE from 0x7F back to 0xFF. 
+//   1.7   | asaetow  |18-NOV-12| Changed ATTR_MSS_CAL_STEP_ENABLE from 0x7F back to 0xFF.
 //   1.6   | asaetow  |17-NOV-12| Fixed uint8_t attr_eff_odt_wr for 4R RDIMMs.
 //   1.5   | asaetow  |17-NOV-12| Added PR settings.
 //         |          |         | Fixed RCD settings for RDIMM.
-//   1.4   | asaetow  |17-NOV-12| Changed ATTR_MSS_CAL_STEP_ENABLE from 0xFF to 0x7F. 
+//   1.4   | asaetow  |17-NOV-12| Changed ATTR_MSS_CAL_STEP_ENABLE from 0xFF to 0x7F.
 //   1.3   | asaetow  |05-NOV-12| Added Paul's SI value for pre-machine parsable workbook.
 //         |          |         | NOTE: DO NOT pick-up without memory_attributes.xml v1.45 or newer.
 //   1.2   | asaetow  |05-SEP-12| Added ATTR_MSS_CAL_STEP_ENABLE.
@@ -128,16 +130,16 @@ fapi::ReturnCode mss_lrdimm_rewrite_odt( const Target& i_target_mba,
                                   uint32_t *var_array_p_array[5])
 {
    ReturnCode rc;
-   
+
    FAPI_ERR("Invalid exec of LRDIMM function on %s!", i_target_mba.toEcmdString());
    FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_LRDIMM_REWRITE_INVALID_EXEC);
    return rc;
 
 }
-ReturnCode mss_lrdimm_term_atts(const Target& i_target_mba) 
+ReturnCode mss_lrdimm_term_atts(const Target& i_target_mba)
 {
    ReturnCode rc;
-   
+
 
    FAPI_ERR("Invalid exec of LRDIMM function on %s!", i_target_mba.toEcmdString());
    FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_LRDIMM_TERM_INVALID_EXEC);
@@ -146,38 +148,6 @@ ReturnCode mss_lrdimm_term_atts(const Target& i_target_mba)
 }
 #endif
 
-#ifndef FAPI_DDR4
-fapi::ReturnCode mss_create_rcd_ddr4(const Target& i_target_mba)
-{
-   ReturnCode rc;
-   
-   FAPI_ERR("Invalid exec of mss_create_rcd_ddr4 on %s!", i_target_mba.toEcmdString());
-   FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_CREATE_RCD_DDR4_INVALID_EXEC);
-   return rc;
-
-}
-fapi::ReturnCode mss_create_db_ddr4(const Target& i_target_mba)
-{
-   ReturnCode rc;
-   
-
-   FAPI_ERR("Invalid exec of mss_create_db_ddr4 on %s!", i_target_mba.toEcmdString());
-   FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_CREATE_DB_DDR4_INVALID_EXEC);
-   return rc;
-
-}
-fapi::ReturnCode mss_lrdimm_ddr4_term_atts(const Target& i_target_mba)
-{
-   ReturnCode rc;
-  
-
-   FAPI_ERR("Invalid exec of mss_lrdimm_ddr4_term_atts on %s!", i_target_mba.toEcmdString());
-   FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_DDR4_TERM_ATTS_INVALID_EXEC);
-   return rc;
-
-}
-#endif
-
 //----------------------------------------------------------------------
 // ENUMs and CONSTs
 //----------------------------------------------------------------------
@@ -277,7 +247,7 @@ uint8_t attr_vpd_cen_phase_rot_m1_cntl_odt1[PORT_SIZE];
 
 //Declare the different dimms here:
 //Cdimm rc_A
-uint32_t cdimm_default[STORE_ARRAY_SIZE] = 
+uint32_t cdimm_default[STORE_ARRAY_SIZE] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF
 };
 
@@ -285,7 +255,7 @@ uint32_t cdimm_rca_1r_1333_mba1[STORE_ARRAY_SIZE] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF
 };
 
-uint32_t cdimm_rca_1r_1600_mba0[STORE_ARRAY_SIZE] = 
+uint32_t cdimm_rca_1r_1600_mba0[STORE_ARRAY_SIZE] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF
 };
 
@@ -308,100 +278,100 @@ uint32_t cdimm_rcb4_2r_1600_mba1[210] =
 /*
 
 //RDIMM A/B Ports MBA0 Glacier
-uint32_t rdimm_glacier_1600_r10_mba0[STORE_ARRAY_SIZE] = 
+uint32_t rdimm_glacier_1600_r10_mba0[STORE_ARRAY_SIZE] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON
 };
 
-uint32_t rdimm_glacier_1333_r20e_mba0[STORE_ARRAY_SIZE] = 
+uint32_t rdimm_glacier_1333_r20e_mba0[STORE_ARRAY_SIZE] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON
 };
 
-uint32_t rdimm_glacier_1600_r20e_mba0[STORE_ARRAY_SIZE] = 
+uint32_t rdimm_glacier_1600_r20e_mba0[STORE_ARRAY_SIZE] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON
 };
 
-uint32_t rdimm_glacier_1333_r20b_mba0[STORE_ARRAY_SIZE] = 
+uint32_t rdimm_glacier_1333_r20b_mba0[STORE_ARRAY_SIZE] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON
 };
 
-uint32_t rdimm_glacier_1600_r20b_mba0[STORE_ARRAY_SIZE] = 
+uint32_t rdimm_glacier_1600_r20b_mba0[STORE_ARRAY_SIZE] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON
 };
 
-uint32_t rdimm_glacier_1333_r40_mba0[STORE_ARRAY_SIZE] = 
+uint32_t rdimm_glacier_1333_r40_mba0[STORE_ARRAY_SIZE] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON
 };
 
 
 //RDIMM C/D Ports MBA1 Glacier
 
-uint32_t rdimm_glacier_1333_r10_mba1[STORE_ARRAY_SIZE] = 
+uint32_t rdimm_glacier_1333_r10_mba1[STORE_ARRAY_SIZE] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON
 };
 
-uint32_t rdimm_glacier_1600_r10_mba1[STORE_ARRAY_SIZE] = 
+uint32_t rdimm_glacier_1600_r10_mba1[STORE_ARRAY_SIZE] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON
 };
 
-uint32_t rdimm_glacier_1333_r20e_mba1[STORE_ARRAY_SIZE] = 
+uint32_t rdimm_glacier_1333_r20e_mba1[STORE_ARRAY_SIZE] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON
 };
 
-uint32_t rdimm_glacier_1600_r20e_mba1[STORE_ARRAY_SIZE] = 
+uint32_t rdimm_glacier_1600_r20e_mba1[STORE_ARRAY_SIZE] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON
 };
 
-uint32_t rdimm_glacier_1333_r20b_mba1[STORE_ARRAY_SIZE] = 
+uint32_t rdimm_glacier_1333_r20b_mba1[STORE_ARRAY_SIZE] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON
 };
 
-uint32_t rdimm_glacier_1600_r20b_mba1[STORE_ARRAY_SIZE] = 
+uint32_t rdimm_glacier_1600_r20b_mba1[STORE_ARRAY_SIZE] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON
 };
 
-uint32_t rdimm_glacier_1066_r40_mba1[STORE_ARRAY_SIZE] = 
+uint32_t rdimm_glacier_1066_r40_mba1[STORE_ARRAY_SIZE] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON
 };
 
-uint32_t rdimm_glacier_1333_r11_mba1[STORE_ARRAY_SIZE] = 
+uint32_t rdimm_glacier_1333_r11_mba1[STORE_ARRAY_SIZE] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON
 };
 
-uint32_t rdimm_glacier_1600_r11_mba1[STORE_ARRAY_SIZE] = 
+uint32_t rdimm_glacier_1600_r11_mba1[STORE_ARRAY_SIZE] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON
 };
 
-uint32_t rdimm_glacier_1333_r22e_mba1[STORE_ARRAY_SIZE] = 
+uint32_t rdimm_glacier_1333_r22e_mba1[STORE_ARRAY_SIZE] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON
 };
 
-uint32_t rdimm_glacier_1600_r22e_mba1[STORE_ARRAY_SIZE] = 
+uint32_t rdimm_glacier_1600_r22e_mba1[STORE_ARRAY_SIZE] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON
 };
 
-uint32_t rdimm_glacier_1333_r22b_mba1[STORE_ARRAY_SIZE] = 
+uint32_t rdimm_glacier_1333_r22b_mba1[STORE_ARRAY_SIZE] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON
 };
 
-uint32_t rdimm_glacier_1600_r22b_mba1[STORE_ARRAY_SIZE] = 
+uint32_t rdimm_glacier_1600_r22b_mba1[STORE_ARRAY_SIZE] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON
 };
 
-uint32_t rdimm_glacier_1066_r44_mba1[STORE_ARRAY_SIZE] = 
+uint32_t rdimm_glacier_1066_r44_mba1[STORE_ARRAY_SIZE] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF
 };
 
 //UDIMM TEMP FOR JAKE ICICLE
-uint32_t udimm_glacier_1600_r10_mba0[STORE_ARRAY_SIZE] = 
+uint32_t udimm_glacier_1600_r10_mba0[STORE_ARRAY_SIZE] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF
 };
 
-uint32_t udimm_glacier_1600_r10_mba1[STORE_ARRAY_SIZE] = 
+uint32_t udimm_glacier_1600_r10_mba1[STORE_ARRAY_SIZE] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF
 };
 
 
-//KG3 
+//KG3
 
 uint32_t rdimm_kg3_1333_r1_mba0[STORE_ARRAY_SIZE] = {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON
 };
@@ -456,99 +426,99 @@ uint32_t rdimm_kg3_1600_r4_mba1[STORE_ARRAY_SIZE] = {fapi::ENUM_ATTR_EFF_DIMM_RC
 
 
 //RDIMM A/B Ports MBA0 Glacier
-uint32_t rdimm_glacier_1600_r10_mba0[210] = 
+uint32_t rdimm_glacier_1600_r10_mba0[210] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM60,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM60,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,63,0,0,0,2,3,2,5,0,1,4,3,6,2,8,3,4,3,3,8,8,8,8,9,8,9,8,0,3,12,0,0,0,12,2,12,3,11,0,0,0,0,0,0,0,0,0,0,70,0,0,0,8,6,9,4,2,0,3,2,10,1,9,3,7,6,3,6,6,5,7,9,11,10,4,0,3,5,0,0,4,10,3,12,3,12,0,0,0,0,0,0,0,0,0,0,fapi::ENUM_ATTR_VPD_DRAM_2N_MODE_ENABLED_FALSE
 };
 
-uint32_t rdimm_glacier_1333_r20e_mba0[210] = 
+uint32_t rdimm_glacier_1333_r20e_mba0[210] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM60,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM60,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM60,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM60,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x00,0x00,0x00,0x00,0x00,0x00,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,67,0,0,0,1,2,2,4,0,1,3,2,5,2,6,3,3,3,2,7,7,7,6,8,6,7,7,0,2,10,0,0,0,10,2,10,2,9,0,0,0,0,0,0,0,0,0,0,71,0,0,0,7,5,7,3,2,0,2,1,8,1,8,2,6,5,3,5,5,4,6,7,9,9,3,0,1,3,0,0,3,7,2,9,1,10,0,0,0,0,0,0,0,0,0,0,fapi::ENUM_ATTR_VPD_DRAM_2N_MODE_ENABLED_FALSE
 };
 
-uint32_t rdimm_glacier_1600_r20e_mba0[210] = 
+uint32_t rdimm_glacier_1600_r20e_mba0[210] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM60,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM60,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM60,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM60,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x00,0x00,0x00,0x00,0x00,0x00,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,66,0,0,0,2,3,2,5,0,1,4,3,6,2,8,3,4,3,3,8,8,8,8,9,8,9,8,0,3,12,0,0,0,12,2,12,3,11,0,0,0,0,0,0,0,0,0,0,75,0,0,0,8,6,9,4,2,0,3,2,10,1,9,3,7,6,3,6,6,5,8,9,11,11,4,0,3,5,0,0,4,10,3,12,3,12,0,0,0,0,0,0,0,0,0,0,fapi::ENUM_ATTR_VPD_DRAM_2N_MODE_ENABLED_FALSE
 };
 
-uint32_t rdimm_glacier_1333_r20b_mba0[210] = 
+uint32_t rdimm_glacier_1333_r20b_mba0[210] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM60,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM60,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM60,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM60,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x00,0x00,0x00,0x00,0x00,0x00,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,63,0,0,0,2,2,2,4,0,1,3,2,5,2,6,3,3,3,2,6,7,7,6,8,6,7,7,0,2,10,0,0,0,10,2,10,2,9,0,0,0,0,0,0,0,0,0,0,68,0,0,0,7,5,7,3,2,0,2,1,8,1,8,2,6,5,3,5,5,4,6,7,9,9,3,0,2,4,0,0,4,8,3,10,2,10,0,0,0,0,0,0,0,0,0,0,fapi::ENUM_ATTR_VPD_DRAM_2N_MODE_ENABLED_FALSE
 };
 
-uint32_t rdimm_glacier_1600_r20b_mba0[210] = 
+uint32_t rdimm_glacier_1600_r20b_mba0[210] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM60,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM60,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM60,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM60,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x00,0x00,0x00,0x00,0x00,0x00,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,63,0,0,0,2,3,2,5,0,1,4,3,6,2,8,3,4,3,3,8,8,8,8,9,8,9,8,0,3,12,0,0,0,12,2,12,3,11,0,0,0,0,0,0,0,0,0,0,70,0,0,0,8,6,9,4,2,0,3,2,10,1,9,3,7,6,3,6,6,5,8,9,11,11,4,0,3,5,0,0,5,10,3,12,3,13,0,0,0,0,0,0,0,0,0,0,fapi::ENUM_ATTR_VPD_DRAM_2N_MODE_ENABLED_FALSE
 };
 
-uint32_t rdimm_glacier_1333_r40_mba0[210] = 
+uint32_t rdimm_glacier_1333_r40_mba0[210] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM30,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM30,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM30,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM30,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,0x40,0x40,0x80,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x80,0x80,0x00,0x00,0x00,0x00,0xC0,0x40,0xC0,0x40,0x00,0x00,0x00,0x00,0xC0,0x40,0xC0,0x40,0x00,0x00,0x00,0x00,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,63,0,0,0,2,3,2,4,1,1,4,3,5,2,7,3,4,3,3,7,7,7,7,8,7,8,7,0,3,11,0,0,1,11,3,11,3,10,0,0,0,0,0,0,0,0,0,0,71,0,0,0,7,5,7,3,2,0,2,1,8,1,8,2,6,5,3,5,5,4,6,7,9,9,3,0,2,4,0,0,4,8,3,10,3,11,0,0,0,0,0,0,0,0,0,0,fapi::ENUM_ATTR_VPD_DRAM_2N_MODE_ENABLED_FALSE
 };
 
 //RDIMM C/D Ports MBA1 Glacier
 
-uint32_t rdimm_glacier_1333_r10_mba1[210] = 
+uint32_t rdimm_glacier_1333_r10_mba1[210] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM60,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM60,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,69,0,0,0,12,11,12,11,8,12,13,13,16,12,9,12,11,14,12,7,9,10,7,8,11,6,9,0,8,1,0,0,10,1,10,4,3,1,0,0,0,0,0,0,0,0,0,0,69,0,0,0,10,10,13,10,11,13,13,12,13,13,9,13,10,12,13,10,10,10,9,10,8,8,12,0,4,11,0,0,4,12,4,11,3,9,0,0,0,0,0,0,0,0,0,0,fapi::ENUM_ATTR_VPD_DRAM_2N_MODE_ENABLED_FALSE
 };
 
-uint32_t rdimm_glacier_1600_r10_mba1[210] = 
+uint32_t rdimm_glacier_1600_r10_mba1[210] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM60,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM60,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,71,0,0,0,15,13,15,14,10,15,16,17,21,15,11,15,13,18,15,9,11,13,8,10,14,7,11,0,10,2,0,0,13,2,12,5,4,2,0,0,0,0,0,0,0,0,0,0,71,0,0,0,12,13,16,13,13,16,16,15,16,17,11,16,12,15,17,12,12,13,11,12,9,10,15,0,4,14,0,0,4,15,4,13,4,12,0,0,0,0,0,0,0,0,0,0,fapi::ENUM_ATTR_VPD_DRAM_2N_MODE_ENABLED_FALSE
 };
 
-uint32_t rdimm_glacier_1333_r20e_mba1[210] = 
+uint32_t rdimm_glacier_1333_r20e_mba1[210] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,73,0,0,0,12,11,12,11,8,12,13,13,16,12,9,12,11,14,12,7,9,10,7,8,11,6,9,0,8,1,0,0,10,1,10,4,3,1,0,0,0,0,0,0,0,0,0,0,73,0,0,0,10,10,13,11,11,13,13,12,13,13,9,13,10,12,13,10,10,10,9,10,8,8,12,0,4,11,0,0,4,12,4,11,3,9,0,0,0,0,0,0,0,0,0,0,fapi::ENUM_ATTR_VPD_DRAM_2N_MODE_ENABLED_FALSE
 };
 
-uint32_t rdimm_glacier_1600_r20e_mba1[210] = 
+uint32_t rdimm_glacier_1600_r20e_mba1[210] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,77,0,0,0,15,13,15,14,10,15,16,17,21,15,11,15,13,18,15,9,11,13,8,10,14,7,11,0,9,1,0,0,13,2,12,5,4,1,0,0,0,0,0,0,0,0,0,0,77,0,0,0,12,13,16,13,13,16,16,15,16,17,11,16,13,15,17,12,12,13,11,12,9,10,15,0,4,14,0,0,4,15,4,13,3,11,0,0,0,0,0,0,0,0,0,0,fapi::ENUM_ATTR_VPD_DRAM_2N_MODE_ENABLED_FALSE
 };
 
-uint32_t rdimm_glacier_1333_r20b_mba1[210] = 
+uint32_t rdimm_glacier_1333_r20b_mba1[210] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,69,0,0,0,12,10,12,11,8,11,13,13,16,12,9,12,10,14,12,7,9,10,7,8,11,6,9,0,8,1,0,0,10,1,10,4,3,1,0,0,0,0,0,0,0,0,0,0,69,0,0,0,10,10,13,10,10,13,13,12,13,13,8,13,10,12,13,10,9,10,9,10,8,8,12,0,4,11,0,0,4,12,4,11,3,9,0,0,0,0,0,0,0,0,0,0,fapi::ENUM_ATTR_VPD_DRAM_2N_MODE_ENABLED_FALSE
 };
 
-uint32_t rdimm_glacier_1600_r20b_mba1[210] = 
+uint32_t rdimm_glacier_1600_r20b_mba1[210] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,71,0,0,0,14,13,15,14,10,14,16,17,21,15,11,15,13,17,15,9,11,13,8,10,14,7,11,0,10,1,0,0,13,2,12,5,4,1,0,0,0,0,0,0,0,0,0,0,71,0,0,0,12,13,16,13,13,16,16,15,16,16,10,16,12,15,17,12,12,12,11,12,9,9,15,0,4,14,0,0,4,15,4,13,4,12,0,0,0,0,0,0,0,0,0,0,fapi::ENUM_ATTR_VPD_DRAM_2N_MODE_ENABLED_FALSE
 };
 
-uint32_t rdimm_glacier_1066_r40_mba1[210] = 
+uint32_t rdimm_glacier_1066_r40_mba1[210] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM30,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM30,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM30,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM30,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,0x40,0x40,0x80,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x80,0x80,0x00,0x00,0x00,0x00,0xC0,0x40,0xC0,0x40,0x00,0x00,0x00,0x00,0xC0,0x40,0xC0,0x40,0x00,0x00,0x00,0x00,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,69,0,0,0,10,9,10,9,7,10,11,11,14,10,7,10,9,12,10,6,7,8,5,7,9,5,7,0,7,1,0,0,9,1,8,3,3,1,0,0,0,0,0,0,0,0,0,0,69,0,0,0,8,8,11,8,9,10,11,10,11,11,7,11,8,10,11,8,8,8,7,8,6,6,10,0,3,10,0,0,3,10,3,9,2,8,0,0,0,0,0,0,0,0,0,0,fapi::ENUM_ATTR_VPD_DRAM_2N_MODE_ENABLED_FALSE
 };
 
-uint32_t rdimm_glacier_1333_r11_mba1[210] = 
+uint32_t rdimm_glacier_1333_r11_mba1[210] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM30,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM30,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM30,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM30,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,0x20,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,73,0,69,0,18,17,18,17,14,18,19,19,22,18,15,18,17,20,18,13,15,16,13,14,17,12,15,0,11,5,0,0,14,5,13,7,7,5,11,2,0,0,3,3,5,3,8,2,73,0,69,0,16,16,19,16,17,19,19,18,19,19,15,19,16,18,19,16,16,16,15,16,14,14,18,0,7,15,0,0,7,15,7,14,6,13,4,12,0,0,9,14,9,11,4,11,fapi::ENUM_ATTR_VPD_DRAM_2N_MODE_ENABLED_FALSE
 };
 
-uint32_t rdimm_glacier_1600_r11_mba1[210] = 
+uint32_t rdimm_glacier_1600_r11_mba1[210] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM30,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM30,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM30,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM30,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,0x20,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,76,0,71,0,21,20,22,20,17,21,23,23,27,22,18,22,20,24,21,15,18,20,15,17,20,14,18,0,14,6,0,0,17,6,17,10,9,6,13,2,0,0,4,3,5,3,10,3,76,0,71,0,19,20,23,20,20,23,23,22,23,23,17,23,19,22,23,19,19,19,18,19,16,16,22,0,9,19,0,0,9,20,9,18,8,16,4,15,0,0,11,17,10,13,5,13,fapi::ENUM_ATTR_VPD_DRAM_2N_MODE_ENABLED_FALSE
 };
 
-uint32_t rdimm_glacier_1333_r22e_mba1[210] = 
+uint32_t rdimm_glacier_1333_r22e_mba1[210] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,0x20,0x10,0x00,0x00,0x80,0x40,0x00,0x00,0x20,0x10,0x00,0x00,0x80,0x40,0x00,0x00,0xA0,0x50,0x00,0x00,0xA0,0x50,0x00,0x00,0xA0,0x50,0x00,0x00,0xA0,0x50,0x00,0x00,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,77,0,72,0,17,16,18,17,14,17,18,19,22,18,15,18,16,19,17,13,14,16,12,14,17,11,14,0,12,5,0,0,14,5,14,8,7,5,11,2,0,0,3,3,5,3,8,2,77,0,72,0,16,16,19,16,16,18,19,18,19,19,14,18,16,18,19,16,15,16,15,16,13,13,18,0,8,15,0,0,8,16,8,15,7,13,4,12,0,0,9,14,9,11,4,11,fapi::ENUM_ATTR_VPD_DRAM_2N_MODE_ENABLED_FALSE
 };
 
-uint32_t rdimm_glacier_1600_r22e_mba1[210] = 
+uint32_t rdimm_glacier_1600_r22e_mba1[210] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,0x20,0x10,0x00,0x00,0x80,0x40,0x00,0x00,0x20,0x10,0x00,0x00,0x80,0x40,0x00,0x00,0xA0,0x50,0x00,0x00,0xA0,0x50,0x00,0x00,0xA0,0x50,0x00,0x00,0xA0,0x50,0x00,0x00,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,81,0,77,0,21,19,21,20,16,21,22,23,27,22,17,21,19,23,21,15,17,19,14,16,20,13,17,0,13,5,0,0,16,5,15,8,7,5,13,2,0,0,4,3,5,3,10,2,81,0,77,0,19,19,23,19,19,22,23,21,23,23,17,22,19,21,23,19,18,19,18,19,16,16,22,0,7,17,0,0,8,18,8,16,7,15,4,15,0,0,11,17,10,13,5,13,fapi::ENUM_ATTR_VPD_DRAM_2N_MODE_ENABLED_FALSE
 };
 
-uint32_t rdimm_glacier_1333_r22b_mba1[210] = 
+uint32_t rdimm_glacier_1333_r22b_mba1[210] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,0x20,0x10,0x00,0x00,0x80,0x40,0x00,0x00,0x20,0x10,0x00,0x00,0x80,0x40,0x00,0x00,0xA0,0x50,0x00,0x00,0xA0,0x50,0x00,0x00,0xA0,0x50,0x00,0x00,0xA0,0x50,0x00,0x00,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,73,0,69,0,16,14,16,15,12,16,17,17,21,16,12,16,14,18,16,10,12,14,10,12,15,9,12,0,12,6,0,0,15,6,14,8,8,6,11,2,0,0,3,3,5,3,8,2,73,0,69,0,14,14,17,14,14,17,17,16,17,17,12,17,14,16,17,13,13,14,13,14,11,11,16,0,8,16,0,0,8,17,8,15,7,14,4,12,0,0,9,14,9,11,4,10,fapi::ENUM_ATTR_VPD_DRAM_2N_MODE_ENABLED_FALSE
 };
 
-uint32_t rdimm_glacier_1600_r22b_mba1[210] = 
+uint32_t rdimm_glacier_1600_r22b_mba1[210] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,0x20,0x10,0x00,0x00,0x80,0x40,0x00,0x00,0x20,0x10,0x00,0x00,0x80,0x40,0x00,0x00,0xA0,0x50,0x00,0x00,0xA0,0x50,0x00,0x00,0xA0,0x50,0x00,0x00,0xA0,0x50,0x00,0x00,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,78,0,71,0,20,18,20,19,15,20,21,22,26,21,16,21,18,23,20,14,16,18,13,15,19,12,16,0,16,8,0,0,20,8,19,12,11,8,14,2,0,0,4,3,6,3,10,3,78,0,71,0,17,18,22,18,18,21,22,20,22,22,15,21,17,20,22,17,17,17,16,17,14,14,21,0,11,21,0,0,11,22,11,20,10,18,4,15,0,0,11,17,11,13,5,13,fapi::ENUM_ATTR_VPD_DRAM_2N_MODE_ENABLED_FALSE
 };
 
-uint32_t rdimm_glacier_1066_r44_mba1[210] = 
+uint32_t rdimm_glacier_1066_r44_mba1[210] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_200,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM20,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM20,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM20,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM20,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM20,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM20,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM20,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_OHM20,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,0x20,0x20,0x20,0x20,0x80,0x80,0x80,0x80,0x20,0x20,0x20,0x20,0x80,0x80,0x80,0x80,0xA0,0x20,0x60,0x20,0xA0,0x80,0x90,0x80,0xA0,0x20,0x60,0x20,0xA0,0x80,0x90,0x80,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,74,0,68,0,15,14,15,14,12,15,16,16,19,15,12,15,14,17,15,11,12,14,10,12,14,9,12,0,12,7,0,0,15,7,14,9,9,7,9,1,0,0,3,2,4,3,7,2,74,0,68,0,13,14,16,14,14,16,16,15,16,16,12,16,13,15,16,13,13,13,12,13,11,11,15,0,9,15,0,0,9,16,9,15,8,14,3,10,0,0,8,12,7,9,3,9,fapi::ENUM_ATTR_VPD_DRAM_2N_MODE_ENABLED_FALSE
 };
 
 //UDIMM TEMP FOR JAKE ICICLE
-uint32_t udimm_glacier_1600_r10_mba0[210] = 
+uint32_t udimm_glacier_1600_r10_mba0[210] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM60,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM60,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM40_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM40_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,63,0,0,0,2,3,2,5,0,1,4,3,6,2,8,3,4,3,3,8,8,8,8,9,8,9,8,0,3,12,0,0,0,12,2,12,3,11,0,0,0,0,0,0,0,0,0,0,70,0,0,0,8,6,9,4,2,0,3,2,10,1,9,3,7,6,3,6,6,5,7,9,11,10,4,0,3,5,0,0,4,10,3,12,3,12,0,0,0,0,0,0,0,0,0,0,fapi::ENUM_ATTR_VPD_DRAM_2N_MODE_ENABLED_FALSE
 };
 
-uint32_t udimm_glacier_1600_r10_mba1[210] = 
+uint32_t udimm_glacier_1600_r10_mba1[210] =
 {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM60,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM60,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM40_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM40_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,71,0,0,0,15,13,15,14,10,15,16,17,21,15,11,15,13,18,15,9,11,13,8,10,14,7,11,0,10,2,0,0,13,2,12,5,4,2,0,0,0,0,0,0,0,0,0,0,71,0,0,0,12,13,16,13,13,16,16,15,16,17,11,16,12,15,17,12,12,13,11,12,9,10,15,0,4,14,0,0,4,15,4,13,4,12,0,0,0,0,0,0,0,0,0,0,fapi::ENUM_ATTR_VPD_DRAM_2N_MODE_ENABLED_FALSE
 };
 
 
-//KG3 
+//KG3
 
 uint32_t rdimm_kg3_1333_r1_mba0[210] = {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM60,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM60,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,70,0,0,0,2,2,2,3,1,1,4,2,4,2,7,3,3,3,2,7,7,7,7,8,7,8,0,0,2,11,0,0,0,11,2,12,2,10,0,0,0,0,0,0,0,0,0,0,66,0,0,0,6,4,7,3,0,0,2,0,8,0,7,1,6,4,2,6,5,5,7,8,11,9,0,0,1,4,0,0,2,10,1,11,1,11,0,0,0,0,0,0,0,0,0,0,fapi::ENUM_ATTR_VPD_DRAM_2N_MODE_ENABLED_FALSE,fapi::ENUM_ATTR_VPD_DRAM_2N_MODE_ENABLED_FALSE
 };
@@ -636,7 +606,7 @@ uint32_t rdimm_habanero_1333_r20_mba0[210] = {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_I
 uint32_t rdimm_habanero_1333_r20_mba1[210] = {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x00,0x00,0x00,0x00,0x00,0x00,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,82,0,0,0,15,15,15,12,15,15,16,16,16,15,13,16,12,12,15,13,13,12,11,6,15,11,12,0,20,7,0,0,11,11,11,9,11,10,0,0,0,0,0,0,0,0,0,0,85,0,0,0,9,13,18,14,11,16,17,17,18,19,0,18,14,17,18,15,14,4,13,11,11,12,16,0,14,25,0,0,11,22,3,20,10,19,0,0,0,0,0,0,0,0,0,0,fapi::ENUM_ATTR_VPD_DRAM_2N_MODE_ENABLED_FALSE,fapi::ENUM_ATTR_VPD_DRAM_2N_MODE_ENABLED_FALSE};
 
 // habanero_1333 dual-drop
-uint32_t rdimm_habanero_1333_r11_mba0[210] = {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM60,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM60,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,86,0,0,0,7,7,7,7,7,9,7,8,10,6,14,8,9,2,3,15,15,14,12,15,17,16,14,0,12,19,0,0,9,18,4,22,7,17,0,0,0,0,0,0,0,0,0,0,80,0,0,0,12,10,13,12,9,10,11,10,14,10,13,10,14,5,12,15,12,11,12,9,13,11,9,0,10,14,0,0,11,9,11,12,10,12,0,0,0,0,0,0,0,0,0,0,fapi::ENUM_ATTR_VPD_DRAM_2N_MODE_ENABLED_FALSE,fapi::ENUM_ATTR_VPD_DRAM_2N_MODE_ENABLED_FALSE}; 
+uint32_t rdimm_habanero_1333_r11_mba0[210] = {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM60,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM60,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,86,0,0,0,7,7,7,7,7,9,7,8,10,6,14,8,9,2,3,15,15,14,12,15,17,16,14,0,12,19,0,0,9,18,4,22,7,17,0,0,0,0,0,0,0,0,0,0,80,0,0,0,12,10,13,12,9,10,11,10,14,10,13,10,14,5,12,15,12,11,12,9,13,11,9,0,10,14,0,0,11,9,11,12,10,12,0,0,0,0,0,0,0,0,0,0,fapi::ENUM_ATTR_VPD_DRAM_2N_MODE_ENABLED_FALSE,fapi::ENUM_ATTR_VPD_DRAM_2N_MODE_ENABLED_FALSE};
 
 uint32_t rdimm_habanero_1333_r11_mba1[210] = {fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100,fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_ON,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RON_OHM34,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM60,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_OHM60,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_VPD_DRAM_RTT_WR_DISABLE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CNTL_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_ADDR_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_CLK_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_VPD_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,82,0,0,0,15,15,15,12,15,15,16,16,16,15,13,16,12,12,15,13,13,12,11,6,15,11,12,0,20,7,0,0,11,11,11,9,11,10,0,0,0,0,0,0,0,0,0,0,85,0,0,0,9,13,18,14,11,16,17,17,18,19,0,18,14,17,18,15,14,4,13,11,11,12,16,0,14,25,0,0,11,22,3,20,10,19,0,0,0,0,0,0,0,0,0,0,fapi::ENUM_ATTR_VPD_DRAM_2N_MODE_ENABLED_FALSE,fapi::ENUM_ATTR_VPD_DRAM_2N_MODE_ENABLED_FALSE};
 
@@ -669,7 +639,7 @@ extern "C" {
     uint8_t l_num_ranks_per_dimm_u8array[PORT_SIZE][DIMM_SIZE];
     uint8_t l_stack_type_u8array[PORT_SIZE][DIMM_SIZE];
     uint8_t l_dimm_size_u8array[PORT_SIZE][DIMM_SIZE];
-   // ATTR_EFF_DRAM_GEN: EMPTY = 0, DDR3 = 1, DDR4 = 2, 
+   // ATTR_EFF_DRAM_GEN: EMPTY = 0, DDR3 = 1, DDR4 = 2,
     uint8_t l_dram_gen_u8;
    // ATTR_EFF_DIMM_TYPE: CDIMM = 0, RDIMM = 1, UDIMM = 2, LRDIMM = 3,
     uint8_t l_dimm_type_u8;
@@ -728,7 +698,7 @@ extern "C" {
         if ((l_dimm_custom_u8 == fapi::ENUM_ATTR_EFF_CUSTOM_DIMM_YES) && (l_stack_type_u8array[cur_port][cur_dimm] == fapi::ENUM_ATTR_EFF_STACK_TYPE_DDP_QDP) && (l_dram_width_u8 == fapi::ENUM_ATTR_EFF_DRAM_WIDTH_X8) && (l_dimm_size_u8array[cur_port][cur_dimm] == 4)) {
           FAPI_INF("WARNING: Wrong Byte33 SPD detected for OLD 16G/32G CDIMM on %s PORT%d DIMM%d!", i_target_mba.toEcmdString(), cur_port, cur_dimm);
           FAPI_INF("WARNING: Implimenting workaround on %s PORT%d DIMM%d!", i_target_mba.toEcmdString(), cur_port, cur_dimm);
-          l_stack_type_modified = 1; 
+          l_stack_type_modified = 1;
           l_stack_type_u8array[cur_port][cur_dimm] = fapi::ENUM_ATTR_EFF_STACK_TYPE_NONE;
         }
       }
@@ -765,12 +735,12 @@ extern "C" {
 
       }
       else if(l_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_RDIMM){
-        memcpy(base_var_array,rdimm_glacier_1600_r22e_mba1,STORE_ARRAY_SIZE*sizeof(uint32_t));  
+        memcpy(base_var_array,rdimm_glacier_1600_r22e_mba1,STORE_ARRAY_SIZE*sizeof(uint32_t));
 
       }
       else{
         FAPI_ERR("Invalid Dimm SIM This Should Never Happen!\n");
-	FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_DIMM_USE_ERROR); return rc;
+        FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_DIMM_USE_ERROR); return rc;
 
       }
 
@@ -784,7 +754,7 @@ extern "C" {
       //FAPI_SET_HWP_ERROR(rc, RC_MSS_PLACE_HOLDER_ERROR); return rc;
       if( l_target_mba_pos == 0){
         if ( l_mss_freq <= 1466 ) { // 1333Mbps
-          if( l_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM ) {     
+          if( l_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM ) {
                //Removed Width Check, use settings for either x8 or x4, use 1600 settings for 1333!
             memcpy(base_var_array,rdimm_kg3_1333_r1_mba0,210*sizeof(uint32_t));
             FAPI_INF("LRDIMM: Base - KG3 RDIMM r10 %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());
@@ -808,15 +778,15 @@ extern "C" {
           }
           else{
             FAPI_ERR("Invalid Dimm Type KG3 FREQ %d MBA0\n",l_mss_freq);
-	    FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_KG3_FREQ_1333Mbps); return rc;
-            
+            FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_KG3_FREQ_1333Mbps); return rc;
+
           }
 
 
         } else if ( l_mss_freq <= 1733 ) { // 1600Mbps
-          if( l_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM ) {     
+          if( l_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM ) {
                //Removed Width Check, use settings for either x8 or x4
-            memcpy(base_var_array,rdimm_kg3_1600_r1_mba0,210*sizeof(uint32_t)); 
+            memcpy(base_var_array,rdimm_kg3_1600_r1_mba0,210*sizeof(uint32_t));
             FAPI_INF("LRDIMM: Base - KG3 LRDIMM r10 %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());
           }
           else if((l_num_ranks_per_dimm_u8array[0][0] == 1) && (l_num_ranks_per_dimm_u8array[0][1] == 0)){
@@ -841,18 +811,18 @@ extern "C" {
 
           else{
             FAPI_ERR("Invalid Dimm Type KG3 FREQ %d MBA0\n",l_mss_freq);
-	    FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_KG3_FREQ_1600Mbps); return rc;
-            
+            FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_KG3_FREQ_1600Mbps); return rc;
+
           }
-        }//1600      
+        }//1600
       }//MBA0
       else{
         if ( l_mss_freq <= 1466 ) { // 1333Mbps
-          if( l_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM ) {     
+          if( l_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM ) {
                //Removed Width Check, use settings for either x8 or x4,
             memcpy(base_var_array,rdimm_kg3_1333_r1_mba1,210*sizeof(uint32_t));
             FAPI_INF("LRDIMM: Base - KG3 RDIMM r10 %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());
-          } 
+          }
           else if((l_num_ranks_per_dimm_u8array[0][0] == 2) && (l_num_ranks_per_dimm_u8array[0][1] == 0)  && (l_dram_width_u8 == 4)){
             memcpy(base_var_array,rdimm_kg3_1333_r2e_mba1,210*sizeof(uint32_t));
             FAPI_INF("KG3 r2e %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());
@@ -872,13 +842,13 @@ extern "C" {
           }
           else{
             FAPI_ERR("Invalid Dimm Type KG3 FREQ %d MBA0\n",l_mss_freq);
-	    FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_KG3_FREQ_1333Mbps_MBA1); return rc;
-            
+            FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_KG3_FREQ_1333Mbps_MBA1); return rc;
+
           }
 
 
         } else if ( l_mss_freq <= 1733 ) { // 1600Mbps
-          if( l_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM ) {     
+          if( l_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM ) {
                //Removed Width Check, use settings for either x8 or x4
             memcpy(base_var_array,rdimm_kg3_1600_r1_mba1,210*sizeof(uint32_t));
             FAPI_INF("LRDIMM: Base - KG3 RDIMM r10 %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());
@@ -905,10 +875,10 @@ extern "C" {
 
           else{
             FAPI_ERR("Invalid Dimm Type KG3 FREQ %d MBA0\n",l_mss_freq);
-	    FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_KG3_FREQ_1600Mbps_MBA1); return rc;
-            
+            FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_KG3_FREQ_1600Mbps_MBA1); return rc;
+
           }
-        }//1600      
+        }//1600
       }//MBA1
     }
 #endif
@@ -944,8 +914,8 @@ extern "C" {
 
             else{
                FAPI_ERR("Invalid Dimm Type KG4 FREQ %d MBA0\n",l_mss_freq);
-               
-	       FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_KG4_FREQ_1333Mbps); return rc;
+
+               FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_KG4_FREQ_1333Mbps); return rc;
             }
               //    memcpy(base_var_array,cdimm_rcb4_2r_1600_mba0,210*sizeof(uint32_t));
               //    FAPI_INF("CDIMM rcb4_2r_1600 MBA0 \n");
@@ -980,15 +950,15 @@ extern "C" {
 
             else{
                FAPI_ERR("Invalid Dimm Type KG4 FREQ %d MBA0\n",l_mss_freq);
-               
-	       FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_KG4_FREQ_1600Mbps); return rc;
+
+               FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_KG4_FREQ_1600Mbps); return rc;
             }
          }//1600
       }//MBA1
    }
 
 
-    else if((l_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_UDIMM) || (l_dimm_custom_u8 == fapi::ENUM_ATTR_EFF_CUSTOM_DIMM_YES)){ 
+    else if((l_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_UDIMM) || (l_dimm_custom_u8 == fapi::ENUM_ATTR_EFF_CUSTOM_DIMM_YES)){
       if(l_dimm_custom_u8 == fapi::ENUM_ATTR_EFF_CUSTOM_DIMM_YES) {
 
          //This is a CDIMM!
@@ -1013,8 +983,8 @@ extern "C" {
                }
               else{
                  FAPI_ERR("Invalid Dimm Type CDIMM RCB4 FREQ %d\n",l_mss_freq);
-                
-		 FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_B4_1600Mbps); return rc;
+
+                 FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_B4_1600Mbps); return rc;
               }
             }
          }//CDIMM RCB4
@@ -1033,15 +1003,15 @@ extern "C" {
             }
             else{
               FAPI_ERR("Invalid Dimm Type UDIMM FREQ %d MBA0\n",l_mss_freq);
-              
-	      FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_UDIMM_1600Mbps_MBA0); return rc;
+
+              FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_UDIMM_1600Mbps_MBA0); return rc;
 
             }
           }
           else{
             FAPI_ERR("Invalid Dimm Type UDIMM FREQ %d MBA0\n",l_mss_freq);
-            
-	    FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_UDIMM_1600Mbps_MBA0); return rc;
+
+            FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_UDIMM_1600Mbps_MBA0); return rc;
           }
         }
         else{
@@ -1052,15 +1022,15 @@ extern "C" {
             }
             else{
               FAPI_ERR("Invalid Dimm Type UDIMM FREQ %d MBA1\n",l_mss_freq);
-              
-	      FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_UDIMM_1600Mbps_MBA1); return rc;
+
+              FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_UDIMM_1600Mbps_MBA1); return rc;
 
             }
           }
           else{
             FAPI_ERR("Invalid Dimm Type UDIMM FREQ %d MBA1\n",l_mss_freq);
-            
-	    FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_UDIMM_1600Mbps_MBA1); return rc;
+
+            FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_UDIMM_1600Mbps_MBA1); return rc;
           }
         }
 
@@ -1093,8 +1063,8 @@ extern "C" {
           }
           else{
             FAPI_ERR("Invalid Dimm Type RDIMM FREQ %d MBA0\n",l_mss_freq);
-	    FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_RDIMM_MBA0_1333Mbps); return rc;
-            
+            FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_RDIMM_MBA0_1333Mbps); return rc;
+
           }
 
         } else if ( l_mss_freq <= 1733 ) { // 1600Mbps
@@ -1121,52 +1091,52 @@ extern "C" {
 
           else{
             FAPI_ERR("Invalid Dimm Type RDIMM FREQ %d MBA0\n",l_mss_freq);
-	    FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_RDIMM_MBA0_1600Mbps); return rc;
-            
+            FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_RDIMM_MBA0_1600Mbps); return rc;
+
           }
-        }//1600      
+        }//1600
       }//MBA0
       else{
         if ( l_mss_freq <= 1200 ) { // 1066Mbps
-          if( ( ((l_num_ranks_per_dimm_u8array[0][0] == 4) && (l_num_ranks_per_dimm_u8array[0][1] == 4)) || ((l_num_ranks_per_dimm_u8array[1][0] == 4) && (l_num_ranks_per_dimm_u8array[1][1] == 4)) ) && (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_DUAL)){  
+          if( ( ((l_num_ranks_per_dimm_u8array[0][0] == 4) && (l_num_ranks_per_dimm_u8array[0][1] == 4)) || ((l_num_ranks_per_dimm_u8array[1][0] == 4) && (l_num_ranks_per_dimm_u8array[1][1] == 4)) ) && (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_DUAL)){
             memcpy(base_var_array,rdimm_glacier_1066_r44_mba1,210*sizeof(uint32_t));
-            FAPI_INF("RDIMM r44 %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());  
-          }        
-          else if( ( ((l_num_ranks_per_dimm_u8array[0][0] == 4) && (l_num_ranks_per_dimm_u8array[0][1] == 0)) || ((l_num_ranks_per_dimm_u8array[1][0] == 4) && (l_num_ranks_per_dimm_u8array[1][1] == 0)) ) && (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_SINGLE)){  
-            memcpy(base_var_array,rdimm_glacier_1066_r40_mba1,210*sizeof(uint32_t));  
             FAPI_INF("RDIMM r44 %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());
-          }        
+          }
+          else if( ( ((l_num_ranks_per_dimm_u8array[0][0] == 4) && (l_num_ranks_per_dimm_u8array[0][1] == 0)) || ((l_num_ranks_per_dimm_u8array[1][0] == 4) && (l_num_ranks_per_dimm_u8array[1][1] == 0)) ) && (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_SINGLE)){
+            memcpy(base_var_array,rdimm_glacier_1066_r40_mba1,210*sizeof(uint32_t));
+            FAPI_INF("RDIMM r44 %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());
+          }
           else{
             FAPI_ERR("Invalid Dimm Type RDIMM FREQ %d MBA1\n",l_mss_freq);
-	    FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_RDIMM_MBA1_1066Mbps); return rc;
-            
+            FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_RDIMM_MBA1_1066Mbps); return rc;
+
           }
 
         } else if ( l_mss_freq <= 1466 ) { // 1333Mbps
-          if( ( ((l_num_ranks_per_dimm_u8array[0][0] == 1) && (l_num_ranks_per_dimm_u8array[0][1] == 0)) || ((l_num_ranks_per_dimm_u8array[1][0] == 1) && (l_num_ranks_per_dimm_u8array[1][1] == 0)) ) && (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_SINGLE)){  
-            memcpy(base_var_array,rdimm_glacier_1333_r10_mba1,210*sizeof(uint32_t));  
+          if( ( ((l_num_ranks_per_dimm_u8array[0][0] == 1) && (l_num_ranks_per_dimm_u8array[0][1] == 0)) || ((l_num_ranks_per_dimm_u8array[1][0] == 1) && (l_num_ranks_per_dimm_u8array[1][1] == 0)) ) && (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_SINGLE)){
+            memcpy(base_var_array,rdimm_glacier_1333_r10_mba1,210*sizeof(uint32_t));
             FAPI_INF("RDIMM r10 %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());
-          }        
-          else if( ( ((l_num_ranks_per_dimm_u8array[0][0] == 1) && (l_num_ranks_per_dimm_u8array[0][1] == 1)) || ((l_num_ranks_per_dimm_u8array[1][0] == 1) && (l_num_ranks_per_dimm_u8array[1][1] == 1)) ) && (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_DUAL)){  
-            memcpy(base_var_array,rdimm_glacier_1333_r11_mba1,210*sizeof(uint32_t));  
+          }
+          else if( ( ((l_num_ranks_per_dimm_u8array[0][0] == 1) && (l_num_ranks_per_dimm_u8array[0][1] == 1)) || ((l_num_ranks_per_dimm_u8array[1][0] == 1) && (l_num_ranks_per_dimm_u8array[1][1] == 1)) ) && (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_DUAL)){
+            memcpy(base_var_array,rdimm_glacier_1333_r11_mba1,210*sizeof(uint32_t));
             FAPI_INF("RDIMM r11 %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());
-          }        
-          else if( ( ((l_num_ranks_per_dimm_u8array[0][0] == 2) && (l_num_ranks_per_dimm_u8array[0][1] == 0)) || ((l_num_ranks_per_dimm_u8array[1][0] == 2) && (l_num_ranks_per_dimm_u8array[1][1] == 0)) ) && (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_SINGLE) && (l_dram_width_u8 == 4)){  
-            memcpy(base_var_array,rdimm_glacier_1333_r20e_mba1,210*sizeof(uint32_t));  
+          }
+          else if( ( ((l_num_ranks_per_dimm_u8array[0][0] == 2) && (l_num_ranks_per_dimm_u8array[0][1] == 0)) || ((l_num_ranks_per_dimm_u8array[1][0] == 2) && (l_num_ranks_per_dimm_u8array[1][1] == 0)) ) && (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_SINGLE) && (l_dram_width_u8 == 4)){
+            memcpy(base_var_array,rdimm_glacier_1333_r20e_mba1,210*sizeof(uint32_t));
             FAPI_INF("RDIMM r20e %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());
-          }        
-          else if( ( ((l_num_ranks_per_dimm_u8array[0][0] == 2) && (l_num_ranks_per_dimm_u8array[0][1] == 0)) || ((l_num_ranks_per_dimm_u8array[1][0] == 2) && (l_num_ranks_per_dimm_u8array[1][1] == 0)) ) && (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_SINGLE) && (l_dram_width_u8 == 8)){  
+          }
+          else if( ( ((l_num_ranks_per_dimm_u8array[0][0] == 2) && (l_num_ranks_per_dimm_u8array[0][1] == 0)) || ((l_num_ranks_per_dimm_u8array[1][0] == 2) && (l_num_ranks_per_dimm_u8array[1][1] == 0)) ) && (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_SINGLE) && (l_dram_width_u8 == 8)){
             memcpy(base_var_array,rdimm_glacier_1333_r20b_mba1,210*sizeof(uint32_t));
-            FAPI_INF("RDIMM r20b %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());  
-          }        
-          else if( ( ((l_num_ranks_per_dimm_u8array[0][0] == 2) && (l_num_ranks_per_dimm_u8array[0][1] == 2)) || ((l_num_ranks_per_dimm_u8array[1][0] == 2) && (l_num_ranks_per_dimm_u8array[1][1] == 2)) ) && (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_DUAL) && (l_dram_width_u8 == 4)){  
-            memcpy(base_var_array,rdimm_glacier_1333_r22e_mba1,210*sizeof(uint32_t)); 
-            FAPI_INF("RDIMM r22e %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString()); 
-          }        
-          else if( ( ((l_num_ranks_per_dimm_u8array[0][0] == 2) && (l_num_ranks_per_dimm_u8array[0][1] == 2)) || ((l_num_ranks_per_dimm_u8array[1][0] == 2) && (l_num_ranks_per_dimm_u8array[1][1] == 2)) ) && (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_DUAL) && (l_dram_width_u8 == 8)){  
-            memcpy(base_var_array,rdimm_glacier_1333_r22b_mba1,210*sizeof(uint32_t)); 
-            FAPI_INF("RDIMM r22b %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString()); 
-          }        
+            FAPI_INF("RDIMM r20b %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());
+          }
+          else if( ( ((l_num_ranks_per_dimm_u8array[0][0] == 2) && (l_num_ranks_per_dimm_u8array[0][1] == 2)) || ((l_num_ranks_per_dimm_u8array[1][0] == 2) && (l_num_ranks_per_dimm_u8array[1][1] == 2)) ) && (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_DUAL) && (l_dram_width_u8 == 4)){
+            memcpy(base_var_array,rdimm_glacier_1333_r22e_mba1,210*sizeof(uint32_t));
+            FAPI_INF("RDIMM r22e %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());
+          }
+          else if( ( ((l_num_ranks_per_dimm_u8array[0][0] == 2) && (l_num_ranks_per_dimm_u8array[0][1] == 2)) || ((l_num_ranks_per_dimm_u8array[1][0] == 2) && (l_num_ranks_per_dimm_u8array[1][1] == 2)) ) && (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_DUAL) && (l_dram_width_u8 == 8)){
+            memcpy(base_var_array,rdimm_glacier_1333_r22b_mba1,210*sizeof(uint32_t));
+            FAPI_INF("RDIMM r22b %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());
+          }
           else if((((l_num_ranks_per_dimm_u8array[0][0] == 4) && (l_num_ranks_per_dimm_u8array[0][1] == 0)) || ((l_num_ranks_per_dimm_u8array[1][0] == 4) && (l_num_ranks_per_dimm_u8array[1][1] == 0))) && (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_SINGLE)){
                //Use 4R MBA0 settings for CD only!
             memcpy(base_var_array,rdimm_glacier_1333_r40_mba0,210*sizeof(uint32_t));
@@ -1176,36 +1146,36 @@ extern "C" {
 
           else{
             FAPI_ERR("Invalid Dimm Type RDIMM FREQ %d HERE MBA1\n",l_mss_freq);
-	    FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_RDIMM_MBA1_1333Mbps); return rc;
-            
+            FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_RDIMM_MBA1_1333Mbps); return rc;
+
           }
         } else if ( l_mss_freq <= 1733 ) { // 1600Mbps
 
-          if( ( ((l_num_ranks_per_dimm_u8array[0][0] == 1) && (l_num_ranks_per_dimm_u8array[0][1] == 0)) || ((l_num_ranks_per_dimm_u8array[1][0] == 1) && (l_num_ranks_per_dimm_u8array[1][1] == 0)) ) && (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_SINGLE)){  
-            memcpy(base_var_array,rdimm_glacier_1600_r10_mba1,210*sizeof(uint32_t));  
+          if( ( ((l_num_ranks_per_dimm_u8array[0][0] == 1) && (l_num_ranks_per_dimm_u8array[0][1] == 0)) || ((l_num_ranks_per_dimm_u8array[1][0] == 1) && (l_num_ranks_per_dimm_u8array[1][1] == 0)) ) && (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_SINGLE)){
+            memcpy(base_var_array,rdimm_glacier_1600_r10_mba1,210*sizeof(uint32_t));
             FAPI_INF("RDIMM r10 %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());
-          }        
-          else if( ( ((l_num_ranks_per_dimm_u8array[0][0] == 1) && (l_num_ranks_per_dimm_u8array[0][1] == 1)) || ((l_num_ranks_per_dimm_u8array[1][0] == 1) && (l_num_ranks_per_dimm_u8array[1][1] == 1)) ) && (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_DUAL)){  
-            memcpy(base_var_array,rdimm_glacier_1600_r11_mba1,210*sizeof(uint32_t));  
+          }
+          else if( ( ((l_num_ranks_per_dimm_u8array[0][0] == 1) && (l_num_ranks_per_dimm_u8array[0][1] == 1)) || ((l_num_ranks_per_dimm_u8array[1][0] == 1) && (l_num_ranks_per_dimm_u8array[1][1] == 1)) ) && (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_DUAL)){
+            memcpy(base_var_array,rdimm_glacier_1600_r11_mba1,210*sizeof(uint32_t));
             FAPI_INF("RDIMM r11 %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());
-          }        
-          else if( ( ((l_num_ranks_per_dimm_u8array[0][0] == 2) && (l_num_ranks_per_dimm_u8array[0][1] == 0)) || ((l_num_ranks_per_dimm_u8array[1][0] == 2) && (l_num_ranks_per_dimm_u8array[1][1] == 0)) ) && (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_SINGLE) && (l_dram_width_u8 == 4)){  
-            memcpy(base_var_array,rdimm_glacier_1600_r20e_mba1,210*sizeof(uint32_t)); 
+          }
+          else if( ( ((l_num_ranks_per_dimm_u8array[0][0] == 2) && (l_num_ranks_per_dimm_u8array[0][1] == 0)) || ((l_num_ranks_per_dimm_u8array[1][0] == 2) && (l_num_ranks_per_dimm_u8array[1][1] == 0)) ) && (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_SINGLE) && (l_dram_width_u8 == 4)){
+            memcpy(base_var_array,rdimm_glacier_1600_r20e_mba1,210*sizeof(uint32_t));
             FAPI_INF("RDIMM r20e %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());
 
-          }        
-          else if( ( ((l_num_ranks_per_dimm_u8array[0][0] == 2) && (l_num_ranks_per_dimm_u8array[0][1] == 0)) || ((l_num_ranks_per_dimm_u8array[1][0] == 2) && (l_num_ranks_per_dimm_u8array[1][1] == 0)) ) && (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_SINGLE) && (l_dram_width_u8 == 8)){  
+          }
+          else if( ( ((l_num_ranks_per_dimm_u8array[0][0] == 2) && (l_num_ranks_per_dimm_u8array[0][1] == 0)) || ((l_num_ranks_per_dimm_u8array[1][0] == 2) && (l_num_ranks_per_dimm_u8array[1][1] == 0)) ) && (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_SINGLE) && (l_dram_width_u8 == 8)){
             memcpy(base_var_array,rdimm_glacier_1600_r20b_mba1,210*sizeof(uint32_t));
-            FAPI_INF("RDIMM r20b %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());  
-          }        
-          else if( ( ((l_num_ranks_per_dimm_u8array[0][0] == 2) && (l_num_ranks_per_dimm_u8array[0][1] == 2)) || ((l_num_ranks_per_dimm_u8array[1][0] == 2) && (l_num_ranks_per_dimm_u8array[1][1] == 2)) ) && (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_DUAL) && (l_dram_width_u8 == 4)){  
-            memcpy(base_var_array,rdimm_glacier_1600_r22e_mba1,210*sizeof(uint32_t));  
+            FAPI_INF("RDIMM r20b %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());
+          }
+          else if( ( ((l_num_ranks_per_dimm_u8array[0][0] == 2) && (l_num_ranks_per_dimm_u8array[0][1] == 2)) || ((l_num_ranks_per_dimm_u8array[1][0] == 2) && (l_num_ranks_per_dimm_u8array[1][1] == 2)) ) && (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_DUAL) && (l_dram_width_u8 == 4)){
+            memcpy(base_var_array,rdimm_glacier_1600_r22e_mba1,210*sizeof(uint32_t));
             FAPI_INF("RDIMM r22e %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());
-          }        
-          else if( ( ((l_num_ranks_per_dimm_u8array[0][0] == 2) && (l_num_ranks_per_dimm_u8array[0][1] == 2)) || ((l_num_ranks_per_dimm_u8array[1][0] == 2) && (l_num_ranks_per_dimm_u8array[1][1] == 2)) ) && (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_DUAL) && (l_dram_width_u8 == 8)){  
-            memcpy(base_var_array,rdimm_glacier_1600_r22b_mba1,210*sizeof(uint32_t));  
+          }
+          else if( ( ((l_num_ranks_per_dimm_u8array[0][0] == 2) && (l_num_ranks_per_dimm_u8array[0][1] == 2)) || ((l_num_ranks_per_dimm_u8array[1][0] == 2) && (l_num_ranks_per_dimm_u8array[1][1] == 2)) ) && (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_DUAL) && (l_dram_width_u8 == 8)){
+            memcpy(base_var_array,rdimm_glacier_1600_r22b_mba1,210*sizeof(uint32_t));
             FAPI_INF("RDIMM r22b %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());
-          } 
+          }
           else if((((l_num_ranks_per_dimm_u8array[0][0] == 4) && (l_num_ranks_per_dimm_u8array[0][1] == 0)) || ((l_num_ranks_per_dimm_u8array[1][0] == 4) && (l_num_ranks_per_dimm_u8array[1][1] == 0))) && (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_SINGLE)){
                //Use 4R MBA0 1333 settings for CD only!
             memcpy(base_var_array,rdimm_glacier_1333_r40_mba0,210*sizeof(uint32_t));
@@ -1213,8 +1183,8 @@ extern "C" {
           }
           else{
             FAPI_ERR("Invalid Dimm Type RDIMM FREQ %d MBA1\n",l_mss_freq);
-	    FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_RDIMM_MBA1_1600Mbps); return rc;
-            
+            FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_RDIMM_MBA1_1600Mbps); return rc;
+
           }
         }//1600
       }//MBA1
@@ -1246,8 +1216,8 @@ extern "C" {
           }
           else{
             FAPI_ERR("Invalid Dimm Type LRDIMM FREQ %d HERE MBA1\n",l_mss_freq);
-	    FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_LRDIMM_MBA1_1333Mbps); return rc;
-            
+            FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_LRDIMM_MBA1_1333Mbps); return rc;
+
           }
         } else if ( l_mss_freq <= 1733 ) { // 1600Mbps
 
@@ -1261,8 +1231,8 @@ extern "C" {
           }
           else{
             FAPI_ERR("Invalid Dimm Type LRDIMM FREQ %d MBA1\n",l_mss_freq);
-	    FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_LRDIMM_MBA1_1600Mbps); return rc;
-            
+            FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_LRDIMM_MBA1_1600Mbps); return rc;
+
           }
         }
       }//MBA1
@@ -1279,7 +1249,7 @@ extern "C" {
 
         uint32_t *p_b_var_array = &base_var_array[0];
 
-        uint32_t *var_array_p_array[] = {p_1066_mba1_array, p_1333_x4_mba1_array, p_1333_x8_mba1_array, 
+        uint32_t *var_array_p_array[] = {p_1066_mba1_array, p_1333_x4_mba1_array, p_1333_x8_mba1_array,
         p_1600_x4_mba1_array, p_1600_x8_mba1_array};
 
         rc = mss_lrdimm_rewrite_odt(i_target_mba, p_b_var_array, var_array_p_array);
@@ -1287,15 +1257,15 @@ extern "C" {
         if(rc)
         {
           FAPI_ERR("FAILED LRDIMM rewrite ODT_RD");
-          
-	  FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_LRDIMM_ODT_RD); return rc;
+
+          FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_LRDIMM_ODT_RD); return rc;
         }
       }
     } // LRDIMM
     else{
       FAPI_ERR("Invalid Dimm Type of %d", l_dimm_type_u8);
       FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_DIMM_TYPE); return rc;
-      
+
     }
 
    // Now Set All The Attributes
@@ -1303,14 +1273,14 @@ extern "C" {
     attr_eff_dimm_rcd_ibt[0][0] = base_var_array[i++];             // keep 0
     attr_eff_dimm_rcd_ibt[0][1] = base_var_array[i++];             // keep 1
     attr_eff_dimm_rcd_ibt[1][0] = base_var_array[i++];             // keep 2
-    attr_eff_dimm_rcd_ibt[1][1] = base_var_array[i++];             // keep 3 
+    attr_eff_dimm_rcd_ibt[1][1] = base_var_array[i++];             // keep 3
     attr_eff_dimm_rcd_mirror_mode[0][0] = base_var_array[i++];     // keep 4
     attr_eff_dimm_rcd_mirror_mode[0][1] = base_var_array[i++];     // keep 5
     attr_eff_dimm_rcd_mirror_mode[1][0] = base_var_array[i++];     // keep 6
     attr_eff_dimm_rcd_mirror_mode[1][1] = base_var_array[i++];     // keep 7
 
 
-   //Fix for VPD Mode for lab rdimm 
+   //Fix for VPD Mode for lab rdimm
     if(((l_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_RDIMM) || (l_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM) || ( l_dram_gen_u8 == fapi::ENUM_ATTR_EFF_DRAM_GEN_DDR4) ) && (l_lab_raw_card_u8 != fapi::ENUM_ATTR_LAB_ONLY_RAW_CARD_KG3)){
       FAPI_INF("RON i %d SHOULD NOT BE HERE\n",i);
       attr_vpd_dram_ron[0][0] = base_var_array[i++];
@@ -1740,11 +1710,17 @@ extern "C" {
 
   //Now Setup the RCD - Done Here to Steal Code From Anuwats Version Of Eff Config Termination
 
-    if ( l_dram_gen_u8 == fapi::ENUM_ATTR_EFF_DRAM_GEN_DDR4 && 
-         ( (l_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_RDIMM) || 
+    if ( l_dram_gen_u8 == fapi::ENUM_ATTR_EFF_DRAM_GEN_DDR4 &&
+         ( (l_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_RDIMM) ||
            (l_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM) ) ) {
 
       rc = mss_create_rcd_ddr4(i_target_mba);
+      
+      if (rc)
+      {
+        FAPI_ERR("Setting DDR4 RCD words failed \n");
+        return rc;
+      }
 
       if (l_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM) {
          rc = mss_create_db_ddr4(i_target_mba);
@@ -1753,8 +1729,7 @@ extern "C" {
       if (rc)
       {
         FAPI_ERR("Setting DDR4 RCD words failed \n");
-        
-	FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_DDR4_RCD); return rc;
+        return rc;
       }
 
     }
@@ -1769,7 +1744,7 @@ extern "C" {
             if(l_dram_width_u8 == 4){
               l_attr_eff_dimm_rcd_cntl_word_0_15[l_port][l_dimm] = 0x0005050080210000LL;
             }
-            else {						       
+            else {
               l_attr_eff_dimm_rcd_cntl_word_0_15[l_port][l_dimm] = 0x0005550080210000LL;
 
             }
@@ -1780,10 +1755,10 @@ extern "C" {
           } else {
             l_attr_eff_dimm_rcd_cntl_word_0_15[l_port][l_dimm] = 0x0000000000000000LL;
           }
-          l_attr_eff_dimm_rcd_cntl_word_0_15[l_port][l_dimm] = l_attr_eff_dimm_rcd_cntl_word_0_15[l_port][l_dimm] & l_mss_freq_mask; 
-          l_attr_eff_dimm_rcd_cntl_word_0_15[l_port][l_dimm] = l_attr_eff_dimm_rcd_cntl_word_0_15[l_port][l_dimm] & l_mss_volt_mask; 
-          l_attr_eff_dimm_rcd_cntl_word_0_15[l_port][l_dimm] = l_attr_eff_dimm_rcd_cntl_word_0_15[l_port][l_dimm] & l_rcd_ibt_mask; 
-          l_attr_eff_dimm_rcd_cntl_word_0_15[l_port][l_dimm] = l_attr_eff_dimm_rcd_cntl_word_0_15[l_port][l_dimm] & l_rcd_mirror_mode_mask; 
+          l_attr_eff_dimm_rcd_cntl_word_0_15[l_port][l_dimm] = l_attr_eff_dimm_rcd_cntl_word_0_15[l_port][l_dimm] & l_mss_freq_mask;
+          l_attr_eff_dimm_rcd_cntl_word_0_15[l_port][l_dimm] = l_attr_eff_dimm_rcd_cntl_word_0_15[l_port][l_dimm] & l_mss_volt_mask;
+          l_attr_eff_dimm_rcd_cntl_word_0_15[l_port][l_dimm] = l_attr_eff_dimm_rcd_cntl_word_0_15[l_port][l_dimm] & l_rcd_ibt_mask;
+          l_attr_eff_dimm_rcd_cntl_word_0_15[l_port][l_dimm] = l_attr_eff_dimm_rcd_cntl_word_0_15[l_port][l_dimm] & l_rcd_mirror_mode_mask;
           if ( l_mss_freq <= 933 ) {         // 800Mbps
             l_mss_freq_mask = 0x0000000000000000LL;
           } else if ( l_mss_freq <= 1200 ) { // 1066Mbps
@@ -1794,17 +1769,17 @@ extern "C" {
             l_mss_freq_mask = 0x0000000000300000LL;
           } else {                           // 1866Mbps
             FAPI_ERR("Invalid RDIMM ATTR_MSS_FREQ = %d on %s!", l_mss_freq, i_target_mba.toEcmdString());
-	    FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_RDIMM_FREQ); return rc;
+            FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_RDIMM_FREQ); return rc;
           }
           if ( l_mss_volt >= 1420 ) {        // 1.5V
             l_mss_volt_mask = 0x0000000000000000LL;
           } else if ( l_mss_volt >= 1270 ) { // 1.35V
             l_mss_volt_mask = 0x0000000000010000LL;
-          } else {                           // 1.2V 
+          } else {                           // 1.2V
             FAPI_ERR("Invalid RDIMM ATTR_MSS_VOLT = %d on %s!", l_mss_volt, i_target_mba.toEcmdString());
-	    FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_RDIMM_VOLT); return rc;
-            
-          } 
+            FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_RDIMM_VOLT); return rc;
+
+          }
           if ( attr_eff_dimm_rcd_ibt[l_port][l_dimm] == fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_OFF ) {
             l_rcd_ibt_mask = 0x0000000070000000LL;
           } else if ( attr_eff_dimm_rcd_ibt[l_port][l_dimm] == fapi::ENUM_ATTR_EFF_DIMM_RCD_IBT_IBT_100 ) {
@@ -1817,8 +1792,8 @@ extern "C" {
             l_rcd_ibt_mask = 0x0000000040000000LL;
           } else {
             FAPI_ERR("Invalid DIMM_RCD_IBT on %s!", i_target_mba.toEcmdString());
-	    FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_DIMM_RCD_IBT); return rc;
-            
+            FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_DIMM_RCD_IBT); return rc;
+
           }
           if ( attr_eff_dimm_rcd_mirror_mode[l_port][l_dimm] == fapi::ENUM_ATTR_EFF_DIMM_RCD_MIRROR_MODE_IBT_BACK_OFF ) {
             l_rcd_mirror_mode_mask = 0x0000000000000000LL;
@@ -1826,47 +1801,47 @@ extern "C" {
             l_rcd_mirror_mode_mask = 0x0000000080000000LL;
           } else {
             FAPI_ERR("Invalid DIMM_RCD_MIRROR_MODE on %s!", i_target_mba.toEcmdString());
-	    FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_DIMM_RCD_MIRROR_MODE); return rc;
-	    
-            
-          }
-          l_attr_eff_dimm_rcd_cntl_word_0_15[l_port][l_dimm] = l_attr_eff_dimm_rcd_cntl_word_0_15[l_port][l_dimm] | l_mss_freq_mask; 
-          l_attr_eff_dimm_rcd_cntl_word_0_15[l_port][l_dimm] = l_attr_eff_dimm_rcd_cntl_word_0_15[l_port][l_dimm] | l_mss_volt_mask; 
-          l_attr_eff_dimm_rcd_cntl_word_0_15[l_port][l_dimm] = l_attr_eff_dimm_rcd_cntl_word_0_15[l_port][l_dimm] | l_rcd_ibt_mask; 
-          l_attr_eff_dimm_rcd_cntl_word_0_15[l_port][l_dimm] = l_attr_eff_dimm_rcd_cntl_word_0_15[l_port][l_dimm] | l_rcd_mirror_mode_mask; 
+            FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_DIMM_RCD_MIRROR_MODE); return rc;
+
+
+          }
+          l_attr_eff_dimm_rcd_cntl_word_0_15[l_port][l_dimm] = l_attr_eff_dimm_rcd_cntl_word_0_15[l_port][l_dimm] | l_mss_freq_mask;
+          l_attr_eff_dimm_rcd_cntl_word_0_15[l_port][l_dimm] = l_attr_eff_dimm_rcd_cntl_word_0_15[l_port][l_dimm] | l_mss_volt_mask;
+          l_attr_eff_dimm_rcd_cntl_word_0_15[l_port][l_dimm] = l_attr_eff_dimm_rcd_cntl_word_0_15[l_port][l_dimm] | l_rcd_ibt_mask;
+          l_attr_eff_dimm_rcd_cntl_word_0_15[l_port][l_dimm] = l_attr_eff_dimm_rcd_cntl_word_0_15[l_port][l_dimm] | l_rcd_mirror_mode_mask;
         }
       }
     }
 
 
    // For DDR4
-    uint8_t l_attr_eff_dram_lpasr = ENUM_ATTR_EFF_DRAM_LPASR_MANUAL_NORMAL;	// 0
-    uint8_t l_attr_eff_write_crc = ENUM_ATTR_EFF_WRITE_CRC_DISABLE;			// 0; change ENUMS: DISABLE=0, ENABLE=1
-    uint8_t l_attr_eff_mpr_page = 0;									// 0; maybe add ENUMS: PG0=0, PG1=1, PG2=2, PG3=3	for more readability?
-    uint8_t l_attr_eff_geardown_mode = ENUM_ATTR_EFF_GEARDOWN_MODE_HALF;		// 0
-    uint8_t l_attr_eff_per_dram_access = ENUM_ATTR_EFF_PER_DRAM_ACCESS_DISABLE;	// 1; change ENUMS: DISABLE=0; ENABLE=1
-    uint8_t l_attr_eff_temp_readout = ENUM_ATTR_EFF_TEMP_READOUT_DISABLE;		// 1; change ENUMS: DISABLE=0; ENABLE=1
-    uint8_t l_attr_eff_fine_refresh_mode = ENUM_ATTR_EFF_FINE_REFRESH_MODE_NORMAL;	// 4; maybe change ENUMS: NORMAL=0; FIXED_2X=1, FIXED_4X=2, FLY_2X=5, FLY_4X=6   to align with spec better
-    uint8_t l_attr_eff_crc_wr_latency = ENUM_ATTR_EFF_CRC_WR_LATENCY_4NCK;		// 0; change ENUMS:  4NCK=4, 5NCK=5, 6NCK=6		following convention
-    uint8_t l_attr_eff_mpr_rd_format = ENUM_ATTR_EFF_MPR_RD_FORMAT_SERIAL;		// 0
-    uint8_t l_attr_eff_max_powerdown_mode = ENUM_ATTR_EFF_MAX_POWERDOWN_MODE_DISABLE;	// 1; change ENUMS: DISABLE=0, ENABLE=1
-    uint8_t l_attr_eff_temp_ref_range = ENUM_ATTR_EFF_TEMP_REF_RANGE_NORMAL;	// 0
-    uint8_t l_attr_eff_temp_ref_mode = ENUM_ATTR_EFF_TEMP_REF_MODE_ENABLE;		// 0; change ENUMS: DISABLE=0, ENABLE=1
-    uint8_t l_attr_eff_int_vref_mon = ENUM_ATTR_EFF_INT_VREF_MON_DISABLE;		// change to disable; change ENUMS: DISABLE=0, ENABLE=1
-    uint8_t l_attr_eff_cs_cmd_latency = 0;								// 0; maybe add ENUMS: DISABLE=0, 3CYC=3, 4CYC=4, 5CYC=5, 6CYC=6, 8CYC=8   for better readability
-    uint8_t l_attr_eff_self_ref_abort = ENUM_ATTR_EFF_SELF_REF_ABORT_DISABLE;		// 1; change ENUMS: DISABLE=0, ENABLE=1
-    uint8_t l_attr_eff_rd_preamble_train = ENUM_ATTR_EFF_RD_PREAMBLE_TRAIN_DISABLE;	// 1; change ENUMS: DISABLE=0, ENABLE=1
-    uint8_t l_attr_eff_rd_preamble = ENUM_ATTR_EFF_RD_PREAMBLE_1NCLK;			// 0; change ENUMS:  1NCK=1, 2NCK=2		following convention
-    uint8_t l_attr_eff_wr_preamble = ENUM_ATTR_EFF_WR_PREAMBLE_1NCLK;			// 0; change ENUMS:  1NCK=1, 2NCK=2		following convention
-    uint8_t l_attr_eff_ca_parity_latency = ENUM_ATTR_EFF_CA_PARITY_LATENCY_DISABLE;	// 0; add ENUMS: PL4=4, PL5=5, PL6=6, PL8=8,    for better readability
-    uint8_t l_attr_eff_crc_error_clear = ENUM_ATTR_EFF_CRC_ERROR_CLEAR_ERROR;		// 0; change ENUMS: CLEAR=0, ERROR=1 	to match spec.
-    uint8_t l_attr_eff_ca_parity_error_status = ENUM_ATTR_EFF_CA_PARITY_ERROR_STATUS_ERROR;	// 0; change ENUMS: CLEAR=0, ERROR=1	to match spec
-    uint8_t l_attr_eff_odt_input_buff = ENUM_ATTR_EFF_ODT_INPUT_BUFF_ACTIVATED;	// 0; change ENUMS: DEACTIVATED=0, ACTIVATED=1
-    uint8_t l_attr_eff_ca_parity = ENUM_ATTR_EFF_CA_PARITY_DISABLE;			// change to disable;  change ENUMS: DISABLE=0, ENABLE=1	to match spec
-    uint8_t l_attr_eff_data_mask = ENUM_ATTR_EFF_DATA_MASK_DISABLE;			// 0
-    uint8_t l_attr_eff_write_dbi = ENUM_ATTR_EFF_WRITE_DBI_DISABLE;			// 0
-    uint8_t l_attr_eff_read_dbi = ENUM_ATTR_EFF_READ_DBI_DISABLE;				// 0
-//   uint8_t l_attr_tccd_l = ENUM_ATTR_TCCD_L_5NCK;						// 5; maybe add ENUMS: 4NCK=4, 5NCK=5, 6NCK=6; 7NCK=7, 8NCK=8 for better readability
+    uint8_t l_attr_eff_dram_lpasr = ENUM_ATTR_EFF_DRAM_LPASR_MANUAL_NORMAL;     // 0
+    uint8_t l_attr_eff_write_crc = ENUM_ATTR_EFF_WRITE_CRC_DISABLE;                     // 0; change ENUMS: DISABLE=0, ENABLE=1
+    uint8_t l_attr_eff_mpr_page = 0;                                                                    // 0; maybe add ENUMS: PG0=0, PG1=1, PG2=2, PG3=3       for more readability?
+    uint8_t l_attr_eff_geardown_mode = ENUM_ATTR_EFF_GEARDOWN_MODE_HALF;                // 0
+    uint8_t l_attr_eff_per_dram_access = ENUM_ATTR_EFF_PER_DRAM_ACCESS_DISABLE; // 1; change ENUMS: DISABLE=0; ENABLE=1
+    uint8_t l_attr_eff_temp_readout = ENUM_ATTR_EFF_TEMP_READOUT_DISABLE;               // 1; change ENUMS: DISABLE=0; ENABLE=1
+    uint8_t l_attr_eff_fine_refresh_mode = ENUM_ATTR_EFF_FINE_REFRESH_MODE_NORMAL;      // 4; maybe change ENUMS: NORMAL=0; FIXED_2X=1, FIXED_4X=2, FLY_2X=5, FLY_4X=6   to align with spec better
+    uint8_t l_attr_eff_crc_wr_latency = ENUM_ATTR_EFF_CRC_WR_LATENCY_4NCK;              // 0; change ENUMS:  4NCK=4, 5NCK=5, 6NCK=6             following convention
+    uint8_t l_attr_eff_mpr_rd_format = ENUM_ATTR_EFF_MPR_RD_FORMAT_SERIAL;              // 0
+    uint8_t l_attr_eff_max_powerdown_mode = ENUM_ATTR_EFF_MAX_POWERDOWN_MODE_DISABLE;   // 1; change ENUMS: DISABLE=0, ENABLE=1
+    uint8_t l_attr_eff_temp_ref_range = ENUM_ATTR_EFF_TEMP_REF_RANGE_NORMAL;    // 0
+    uint8_t l_attr_eff_temp_ref_mode = ENUM_ATTR_EFF_TEMP_REF_MODE_ENABLE;              // 0; change ENUMS: DISABLE=0, ENABLE=1
+    uint8_t l_attr_eff_int_vref_mon = ENUM_ATTR_EFF_INT_VREF_MON_DISABLE;               // change to disable; change ENUMS: DISABLE=0, ENABLE=1
+    uint8_t l_attr_eff_cs_cmd_latency = 0;                                                              // 0; maybe add ENUMS: DISABLE=0, 3CYC=3, 4CYC=4, 5CYC=5, 6CYC=6, 8CYC=8   for better readability
+    uint8_t l_attr_eff_self_ref_abort = ENUM_ATTR_EFF_SELF_REF_ABORT_DISABLE;           // 1; change ENUMS: DISABLE=0, ENABLE=1
+    uint8_t l_attr_eff_rd_preamble_train = ENUM_ATTR_EFF_RD_PREAMBLE_TRAIN_DISABLE;     // 1; change ENUMS: DISABLE=0, ENABLE=1
+    uint8_t l_attr_eff_rd_preamble = ENUM_ATTR_EFF_RD_PREAMBLE_1NCLK;                   // 0; change ENUMS:  1NCK=1, 2NCK=2             following convention
+    uint8_t l_attr_eff_wr_preamble = ENUM_ATTR_EFF_WR_PREAMBLE_1NCLK;                   // 0; change ENUMS:  1NCK=1, 2NCK=2             following convention
+    uint8_t l_attr_eff_ca_parity_latency = ENUM_ATTR_EFF_CA_PARITY_LATENCY_DISABLE;     // 0; add ENUMS: PL4=4, PL5=5, PL6=6, PL8=8,    for better readability
+    uint8_t l_attr_eff_crc_error_clear = ENUM_ATTR_EFF_CRC_ERROR_CLEAR_ERROR;           // 0; change ENUMS: CLEAR=0, ERROR=1    to match spec.
+    uint8_t l_attr_eff_ca_parity_error_status = ENUM_ATTR_EFF_CA_PARITY_ERROR_STATUS_ERROR;     // 0; change ENUMS: CLEAR=0, ERROR=1    to match spec
+    uint8_t l_attr_eff_odt_input_buff = ENUM_ATTR_EFF_ODT_INPUT_BUFF_ACTIVATED; // 0; change ENUMS: DEACTIVATED=0, ACTIVATED=1
+    uint8_t l_attr_eff_ca_parity = ENUM_ATTR_EFF_CA_PARITY_DISABLE;                     // change to disable;  change ENUMS: DISABLE=0, ENABLE=1        to match spec
+    uint8_t l_attr_eff_data_mask = ENUM_ATTR_EFF_DATA_MASK_DISABLE;                     // 0
+    uint8_t l_attr_eff_write_dbi = ENUM_ATTR_EFF_WRITE_DBI_DISABLE;                     // 0
+    uint8_t l_attr_eff_read_dbi = ENUM_ATTR_EFF_READ_DBI_DISABLE;                               // 0
+//   uint8_t l_attr_tccd_l = ENUM_ATTR_TCCD_L_5NCK;                                             // 5; maybe add ENUMS: 4NCK=4, 5NCK=5, 6NCK=6; 7NCK=7, 8NCK=8 for better readability
    // uint8_t l_attr_tccd_l = 5;                                             // 5; maybe add ENUMS: 4NCK=4, 5NCK=5, 6NCK=6; 7NCK=7, 8NCK=8 for better readability
 
 /*
@@ -1948,7 +1923,7 @@ extern "C" {
           attr_eff_wlo[1] = (uint8_t)0;
           attr_eff_gpo[0] = (uint8_t)5;
           attr_eff_gpo[1] = (uint8_t)5;
-*/     
+*/
       if ( l_dram_gen_u8 == fapi::ENUM_ATTR_EFF_DRAM_GEN_DDR4 ) {
       // Set for CDIMM B4
           attr_eff_rlo[0] = (uint8_t)0;
@@ -1978,13 +1953,13 @@ extern "C" {
          attr_eff_rlo[0] = (uint8_t)5;
          attr_eff_rlo[1] = (uint8_t)5;
          attr_eff_wlo[0] = (uint8_t)1;
-         attr_eff_wlo[1] = (uint8_t)1; 
-       } 
+         attr_eff_wlo[1] = (uint8_t)1;
+       }
        else {
          attr_eff_rlo[0] = (uint8_t)6;
          attr_eff_rlo[1] = (uint8_t)6;
          attr_eff_wlo[0] = (uint8_t)255; // WLO = -1, 2's complement
-         attr_eff_wlo[1] = (uint8_t)255; 
+         attr_eff_wlo[1] = (uint8_t)255;
       }
       attr_eff_gpo[0] = (uint8_t)7;
       attr_eff_gpo[1] = (uint8_t)7;
@@ -1993,9 +1968,9 @@ extern "C" {
     else{
       FAPI_ERR("Invalid Card Type RLO Settings \n");
       FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_INVALID_CARD_TYPE_RLO); return rc;
-      
 
-    } 
+
+    }
 
 
 
@@ -2037,9 +2012,9 @@ extern "C" {
 
    // Set attributes
     rc = FAPI_ATTR_SET(ATTR_MSS_CAL_STEP_ENABLE, &i_target_mba, l_attr_mss_cal_step_enable); if(rc) return rc;
-    if(l_dram_gen_u8 == fapi::ENUM_ATTR_EFF_DRAM_GEN_DDR3) { // do not override DDR4 RCD 
+    if(l_dram_gen_u8 == fapi::ENUM_ATTR_EFF_DRAM_GEN_DDR3) { // do not override DDR4 RCD
        rc = FAPI_ATTR_SET(ATTR_EFF_DIMM_RCD_CNTL_WORD_0_15, &i_target_mba, l_attr_eff_dimm_rcd_cntl_word_0_15); if(rc) return rc;
-    } 
+    }
     rc = FAPI_ATTR_SET(ATTR_EFF_DIMM_RCD_IBT, &i_target_mba, attr_eff_dimm_rcd_ibt); if(rc) return rc;
     rc = FAPI_ATTR_SET(ATTR_EFF_DIMM_RCD_MIRROR_MODE, &i_target_mba, attr_eff_dimm_rcd_mirror_mode); if(rc) return rc;
     rc = FAPI_ATTR_SET(ATTR_EFF_CEN_RD_VREF, &i_target_mba, attr_eff_cen_rd_vref); if(rc) return rc;
@@ -2076,7 +2051,7 @@ extern "C" {
        || (l_dram_gen_u8 == fapi::ENUM_ATTR_EFF_DRAM_GEN_DDR4) ){
       FAPI_INF("IN RDIMM ATTR SETTING\n");
       rc = FAPI_ATTR_SET(ATTR_MSS_CAL_STEP_ENABLE, &i_target_mba, l_attr_mss_cal_step_enable); if(rc) return rc;
-      if(l_dram_gen_u8 == fapi::ENUM_ATTR_EFF_DRAM_GEN_DDR3) { // do not override DDR4 RCD 
+      if(l_dram_gen_u8 == fapi::ENUM_ATTR_EFF_DRAM_GEN_DDR3) { // do not override DDR4 RCD
         rc = FAPI_ATTR_SET(ATTR_EFF_DIMM_RCD_CNTL_WORD_0_15, &i_target_mba, l_attr_eff_dimm_rcd_cntl_word_0_15); if(rc) return rc;
       }
       rc = FAPI_ATTR_SET(ATTR_EFF_DIMM_RCD_IBT, &i_target_mba, attr_eff_dimm_rcd_ibt); if(rc) return rc;
@@ -2236,12 +2211,12 @@ extern "C" {
 
 
     if(l_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM)
-    {  
+    {
        if(l_dram_gen_u8 == fapi::ENUM_ATTR_EFF_DRAM_GEN_DDR3)
-       { 
+       {
           rc = mss_lrdimm_term_atts(i_target_mba);
        }
-       else 
+       else
        {
           rc = mss_lrdimm_ddr4_term_atts(i_target_mba);
        }
@@ -2249,18 +2224,10 @@ extern "C" {
       if (rc)
       {
         FAPI_ERR("Setting LR term atts failed \n");
-        
-	FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_SETTING_LRDIMM_TERM_ATTRS); return rc;
+        return rc;
       }
     }
 
-
-
-
-
-
-
-
     FAPI_INF("%s on %s COMPLETE", PROCEDURE_NAME, i_target_mba.toEcmdString());
     return rc;
 
@@ -2284,9 +2251,7 @@ extern "C" {
       if(rc)
       {
         FAPI_ERR("Error retrieving assodiated dimms");
-	FAPI_SET_HWP_ERROR(rc, RC_MSS_EFF_CONFIG_TERMINATION_ERROR_RETRIEVING_DIMMS); return rc;
-        
-        break;
+        return rc;
       }
 //------------------------------------------------------------------------------
       for (uint8_t l_dimm_index = 0; l_dimm_index <
diff --git a/src/usr/hwpf/hwp/memory_attributes.xml b/src/usr/hwpf/hwp/memory_attributes.xml
index 80fa1fb..b4059a2 100644
--- a/src/usr/hwpf/hwp/memory_attributes.xml
+++ b/src/usr/hwpf/hwp/memory_attributes.xml
@@ -23,7 +23,7 @@
 <!--                                                                        -->
 <!-- IBM_PROLOG_END_TAG                                                     -->
 <attributes>
-<!-- $Id: memory_attributes.xml,v 1.154 2015/08/26 03:14:17 eliner Exp $ -->
+<!-- $Id: memory_attributes.xml,v 1.159 2015/09/09 18:10:53 thi Exp $ -->
 <!-- DO NOT EDIT THIS FILE DIRECTLY PLEASE UPDATE THE ODS FILE AND FOLLOW THE INSTRUCTION TAB -->
 <!-- PLEASE SEE MARK BELLOWS (BELLOWS.IBM.COM) OR OTHERS ON MEMORY TEAM FOR HELP -->
 <!-- *********************************************************************** -->
@@ -99,7 +99,7 @@ Set by: PLL settings written by Dave Cadigan</description>
 <id>ATTR_MSS_VREF_CAL_CNTL</id>
     <targetType>TARGET_TYPE_MEMBUF_CHIP</targetType>
     <description>Training Control over IPL - ENUM - 0x00=DISABLE /Skip V-ref Train; 0x01=DRAM - Enable V-Ref Train DRAM Level; 0x02=RANK Level Training; 0x03=PORT Level Training; 0x04=MBA Level; 0x05=CENTAUR level;
-	Default Value = 0x01;
+        Default Value = 0x01;
 </description>
     <valueType>uint8</valueType>
     <platInit/>
@@ -108,7 +108,7 @@ Set by: PLL settings written by Dave Cadigan</description>
     <odmChangeable/>
     <persistRuntime/>
 </attribute>
-	
+        
 <attribute>
     <id>ATTR_MSS_DIMM_MFG_ID_CODE</id>
     <targetType>TARGET_TYPE_MBA_CHIPLET</targetType>
@@ -1174,6 +1174,401 @@ firmware notes: none</description>
 </attribute>
 
 <attribute>
+    <id>ATTR_EFF_DIMM_DDR4_RC00</id>
+    <targetType>TARGET_TYPE_MBA_CHIPLET</targetType>
+    <description>F0RC00: Global Features Control Word.For normal operation, output inversion is always enabled. For DIMM vendor test purpose, output inversion can be disabled. 
+When disabled, register tPDM is not guaranteed to be met. NOTE: Default value - 0x00. Values Range from 0-8.
+00 - Normal Operation; 01 - Output Inversion Disabled; 02 - Weak Drive Enabled; 04 - A outputs disabled; 08 - B outputs disabled; So on.
+No need to calculate; User can override with desired experimental value.
+creator: mss_eff_cnfg
+consumer: mss_dram_init
+firmware notes: none</description>
+    <valueType>uint8</valueType>
+    <writeable/>
+    <platInit/>
+    <odmVisable/>
+    <odmChangeable/>
+    <array> 2 2</array>
+</attribute>
+
+<attribute>
+    <id>ATTR_EFF_DIMM_DDR4_RC01</id>
+    <targetType>TARGET_TYPE_MBA_CHIPLET</targetType>
+    <description>F0RC01 - Clock Driver Enable Control Word.1. Output clocks may be individually turned on or off to conserve power. The system must read the module SPD to determine which clock outputs are used by the module. The PLL remains locked on CK_t/CK_c unless the system stops the clock inputs to the DDR4RCD02 to enter the lowest power mode.
+        Default value - 0x00. Values Range from 0-8. No need to calculate; User can override with desired experimental value.
+creator: mss_eff_cnfg
+consumer: mss_dram_init
+firmware notes: none</description>
+    <valueType>uint8</valueType>
+    <writeable/>
+    <platInit/>
+    <odmVisable/>
+    <odmChangeable/>
+    <array> 2 2</array>
+</attribute>
+
+<attribute>
+    <id>ATTR_EFF_DIMM_DDR4_RC02</id>
+    <targetType>TARGET_TYPE_MBA_CHIPLET</targetType>
+    <description>F0RC02: Timing and IBT Control Word; Default value - 0x00. Values Range from 0-8. No need to calculate; User can override with desired experimental value.
+creator: mss_eff_cnfg
+consumer: mss_dram_init
+firmware notes: none</description>
+    <valueType>uint8</valueType>
+    <writeable/>
+    <platInit/>
+    <odmVisable/>
+    <odmChangeable/>
+    <array> 2 2</array>
+</attribute>
+
+<attribute>
+    <id>ATTR_EFF_DIMM_DDR4_RC03</id>
+    <targetType>TARGET_TYPE_MBA_CHIPLET</targetType>
+    <description>F0RC03 - CA and CS Signals Driver Characteristics Control Word;  Default value - 0x05 (Moderate Drive). Values Range from 00 to 0F. Has to be picked up from SPD byte 137, 1st Nibble for CS and CA.
+creator: mss_eff_cnfg
+consumer: mss_dram_init
+firmware notes: none</description>
+    <valueType>uint8</valueType>
+    <writeable/>
+    <platInit/>
+    <odmVisable/>
+    <odmChangeable/>
+    <array> 2 2</array>
+</attribute>
+
+<attribute>
+    <id>ATTR_EFF_DIMM_DDR4_RC04</id>
+    <targetType>TARGET_TYPE_MBA_CHIPLET</targetType>
+    <description>F0RC04 - ODT and CKE Signals Driver Characteristics Control Word;  Default value - 0x05 (Moderate Drive). Values Range from 00 to 0F. Has to be picked up from SPD byte 137, 2nd Nibble for ODT and CKE.
+creator: mss_eff_cnfg
+consumer: mss_dram_init
+firmware notes: none</description>
+    <valueType>uint8</valueType>
+    <writeable/>
+    <platInit/>
+    <odmVisable/>
+    <odmChangeable/>
+    <array> 2 2</array>
+</attribute>
+
+<attribute>
+    <id>ATTR_EFF_DIMM_DDR4_RC05</id>
+    <targetType>TARGET_TYPE_MBA_CHIPLET</targetType>
+    <description>F0RC05 - Clock Driver Characteristics Control Word;  Default value - 0x05 (Moderate Drive). Values Range from 00 to 0F. Has to be picked up from SPD byte 138, 2nd Nibble for CK.
+creator: mss_eff_cnfg
+consumer: mss_dram_init
+firmware notes: none</description>
+    <valueType>uint8</valueType>
+    <writeable/>
+    <platInit/>
+    <odmVisable/>
+    <odmChangeable/>
+    <array> 2 2</array>
+</attribute>
+
+<attribute>
+    <id>ATTR_EFF_DIMM_DDR4_RC06_07</id>
+    <targetType>TARGET_TYPE_MBA_CHIPLET</targetType>
+    <description>F0RC06: Command Space Control Word definition;  Default value - 0xF0 (NOP). Values Range from 00 to F0. F0RC07 not used. RDIMM
+creator: mss_eff_cnfg
+consumer: mss_dram_init
+firmware notes: none</description>
+    <valueType>uint8</valueType>
+    <writeable/>
+    <platInit/>
+    <odmVisable/>
+    <odmChangeable/>
+    <array> 2 2</array>
+</attribute>
+
+<attribute>
+    <id>ATTR_EFF_DIMM_DDR4_RC08</id>
+    <targetType>TARGET_TYPE_MBA_CHIPLET</targetType>
+    <description>F0RC08: Input/Output Configuration Control Word; Default value - 0x03. Values Range from 00 to 08 decimal. Check the stack height and calculate dynamically; 00 = Stack height_8; 01 = Stack height_4;
+        02 = Stack height_2;
+creator: mss_eff_cnfg
+consumer: mss_dram_init
+firmware notes: none</description>
+    <valueType>uint8</valueType>
+    <writeable/>
+    <platInit/>
+    <odmVisable/>
+    <odmChangeable/>
+    <array> 2 2</array>
+</attribute>
+
+<attribute>
+    <id>ATTR_EFF_DIMM_DDR4_RC09</id>
+    <targetType>TARGET_TYPE_MBA_CHIPLET</targetType>
+    <description>F0RC09: Power Saving Settings Control Word; Default value - 0xF0 (NOP). Values Range from 00 to F0. No need to calculate; User can override with desired experimental value.
+creator: mss_eff_cnfg
+consumer: mss_dram_init
+firmware notes: none</description>
+    <valueType>uint8</valueType>
+    <writeable/>
+    <platInit/>
+    <odmVisable/>
+    <odmChangeable/>
+    <array> 2 2</array>
+</attribute>
+
+<attribute>
+    <id>ATTR_EFF_DIMM_DDR4_RC10</id>
+    <targetType>TARGET_TYPE_MBA_CHIPLET</targetType>
+    <description>RDIMM Operating Speed;  Read from ATTR_MSS_FREQ; Default value - 00. Values Range from 00 to 09. No need to calculate; User can override with desired experimental value.
+creator: mss_eff_cnfg
+consumer: mss_dram_init
+firmware notes: none</description>
+    <valueType>uint8</valueType>
+    <writeable/>
+    <platInit/>
+    <odmVisable/>
+    <odmChangeable/>
+    <array> 2 2</array>
+</attribute>
+
+<attribute>
+    <id>ATTR_EFF_DIMM_DDR4_RC11</id>
+    <targetType>TARGET_TYPE_MBA_CHIPLET</targetType>
+    <description>Operating Voltage VDD and VrefCA Source Control Word; Read from ATTR_MSS_VOLT. Default value - 14. Values Range from 00 to 15 decimal.  No need to calculate; User can override with desired experimental value.
+creator: mss_eff_cnfg
+consumer: mss_dram_init
+firmware notes: none</description>
+    <valueType>uint8</valueType>
+    <writeable/>
+    <platInit/>
+    <odmVisable/>
+    <odmChangeable/>
+    <array> 2 2</array>
+</attribute>
+
+<attribute>
+    <id>ATTR_EFF_DIMM_DDR4_RC12</id>
+    <targetType>TARGET_TYPE_MBA_CHIPLET</targetType>
+    <description>F0RC0C - Training Control Word; Default value - 00. Values Range from 00 to 07 decimal.No need to calculate; User can override with desired experimental value. 
+creator: mss_eff_cnfg
+consumer: mss_dram_init
+firmware notes: none</description>
+    <valueType>uint8</valueType>
+    <writeable/>
+    <platInit/>
+    <odmVisable/>
+    <odmChangeable/>
+    <array> 2 2</array>
+</attribute>
+
+<attribute>
+    <id>ATTR_EFF_DIMM_DDR4_RC13</id>
+    <targetType>TARGET_TYPE_MBA_CHIPLET</targetType>
+    <description>F0RC0D - DIMM Configuration Control Word; Default value - 0B. Values Range from 00 to 15 decimal. Dynamically calculated using 4 bits[0:3] Bit 0 - Address Mirroring; Bit 1 - Rdimm(1)/Lrdimm (0) ; Bit 2 - N/A ; Bit 3 - CS Mode (Direct / Quad CS mode etc); 
+creator: mss_eff_cnfg
+consumer: mss_dram_init
+firmware notes: none</description>
+    <valueType>uint8</valueType>
+    <writeable/>
+    <platInit/>
+    <odmVisable/>
+    <odmChangeable/>
+    <array> 2 2</array>
+</attribute>
+
+<attribute>
+    <id>ATTR_EFF_DIMM_DDR4_RC14</id>
+    <targetType>TARGET_TYPE_MBA_CHIPLET</targetType>
+    <description>F0RC0E - Parity Control Word;  Default value - 00. Check from ATTR_EFF_CA_PARITY and assign; Values Range from 00 to 0F. 
+creator: mss_eff_cnfg
+consumer: mss_dram_init
+firmware notes: none</description>
+    <valueType>uint8</valueType>
+    <writeable/>
+    <platInit/>
+    <odmVisable/>
+    <odmChangeable/>
+    <array> 2 2</array>
+</attribute>
+
+<attribute>
+    <id>ATTR_EFF_DIMM_DDR4_RC15</id>
+    <targetType>TARGET_TYPE_MBA_CHIPLET</targetType>
+    <description>F0RC0F - Command Latency Adder Control Word;  Default value - 04. Values Range from 00 to 04. No need to calculate; User can override with desired experimental value.
+creator: mss_eff_cnfg
+consumer: mss_dram_init
+firmware notes: none</description>
+    <valueType>uint8</valueType>
+    <writeable/>
+    <platInit/>
+    <odmVisable/>
+    <odmChangeable/>
+    <array> 2 2</array>
+</attribute>
+
+<attribute>
+    <id>ATTR_EFF_DIMM_DDR4_RC_1x</id>
+    <targetType>TARGET_TYPE_MBA_CHIPLET</targetType>
+    <description>F0RC1x - Internal VrefCA Control Word; Default value - 00. Values Range from 00 to 3F.No need to calculate; User can override with desired experimental value. 
+creator: mss_eff_cnfg
+consumer: mss_dram_init
+firmware notes: none</description>
+    <valueType>uint8</valueType>
+    <writeable/>
+    <platInit/>
+    <odmVisable/>
+    <odmChangeable/>
+    <array> 2 2</array>
+</attribute>
+
+<attribute>
+    <id>ATTR_EFF_DIMM_DDR4_RC_2x</id>
+    <targetType>TARGET_TYPE_MBA_CHIPLET</targetType>
+    <description>F0RC2x: I2C Bus Control Word; Default value - 00. Values Range from 00 to FF.No need to calculate; User can override with desired experimental value. 
+creator: mss_eff_cnfg
+consumer: mss_dram_init
+firmware notes: none</description>
+    <valueType>uint8</valueType>
+    <writeable/>
+    <platInit/>
+    <odmVisable/>
+    <odmChangeable/>
+    <array> 2 2</array>
+</attribute>
+
+<attribute>
+    <id>ATTR_EFF_DIMM_DDR4_RC_3x</id>
+    <targetType>TARGET_TYPE_MBA_CHIPLET</targetType>
+    <description>F0RC3x - Fine Granularity RDIMM Operating Speed;  Default value = (Operating Freq - 1250)/20. Values Range from 00 to 61 Hex. 
+creator: mss_eff_cnfg
+consumer: mss_dram_init
+firmware notes: none</description>
+    <valueType>uint8</valueType>
+    <writeable/>
+    <platInit/>
+    <odmVisable/>
+    <odmChangeable/>
+    <array> 2 2</array>
+</attribute>
+
+<attribute>
+    <id>ATTR_EFF_DIMM_DDR4_RC_4x</id>
+    <targetType>TARGET_TYPE_MBA_CHIPLET</targetType>
+    <description>F0RC4x: CW Source Selection Control Word; Default value - 00. Values Range from 00 to FF. No need to calculate; User can override with desired experimental value.
+creator: mss_eff_cnfg
+consumer: mss_dram_init
+firmware notes: none</description>
+    <valueType>uint8</valueType>
+    <writeable/>
+    <platInit/>
+    <odmVisable/>
+    <odmChangeable/>
+    <array> 2 2</array>
+</attribute>
+
+<attribute>
+    <id>ATTR_EFF_DIMM_DDR4_RC_5x</id>
+    <targetType>TARGET_TYPE_MBA_CHIPLET</targetType>
+    <description>F0RC5x: CW Destination Selection and Write/Read Additional QxODT[1:0] Signal High; Default value - 00. Values Range from 00 to FF. No need to calculate; User can override with desired experimental value.
+creator: mss_eff_cnfg
+consumer: mss_dram_init
+firmware notes: none</description>
+    <valueType>uint8</valueType>
+    <writeable/>
+    <platInit/>
+    <odmVisable/>
+    <odmChangeable/>
+    <array> 2 2</array>
+</attribute>
+
+<attribute>
+    <id>ATTR_EFF_DIMM_DDR4_RC_6x</id>
+    <targetType>TARGET_TYPE_MBA_CHIPLET</targetType>
+    <description>F0RC6x: CW Data Control Word;  Default value - 00. Values Range from 00 to FF.No need to calculate; User can override with desired experimental value. 
+creator: mss_eff_cnfg
+consumer: mss_dram_init
+firmware notes: none</description>
+    <valueType>uint8</valueType>
+    <writeable/>
+    <platInit/>
+    <odmVisable/>
+    <odmChangeable/>
+    <array> 2 2</array>
+</attribute>
+
+<attribute>
+    <id>ATTR_EFF_DIMM_DDR4_RC_7x</id>
+    <targetType>TARGET_TYPE_MBA_CHIPLET</targetType>
+    <description>F0RC7x: IBT Control Word; Default value - 00. Values Range from 00 to FF.No need to calculate; User can override with desired experimental value.
+creator: mss_eff_cnfg
+consumer: mss_dram_init
+firmware notes: none</description>
+    <valueType>uint8</valueType>
+    <writeable/>
+    <platInit/>
+    <odmVisable/>
+    <odmChangeable/>
+    <array> 2 2</array>
+</attribute>
+
+<attribute>
+    <id>ATTR_EFF_DIMM_DDR4_RC_8x</id>
+    <targetType>TARGET_TYPE_MBA_CHIPLET</targetType>
+    <description>F0RC8x: ODT Input Buffer/IBT, QxODT Output Buffer and Timing Control Word;  Default value - 00. Values Range from 00 to FF. No need to calculate; User can override with desired experimental value.
+creator: mss_eff_cnfg
+consumer: mss_dram_init
+firmware notes: none</description>
+    <valueType>uint8</valueType>
+    <writeable/>
+    <platInit/>
+    <odmVisable/>
+    <odmChangeable/>
+    <array> 2 2</array>
+</attribute>
+
+<attribute>
+    <id>ATTR_EFF_DIMM_DDR4_RC_9x</id>
+    <targetType>TARGET_TYPE_MBA_CHIPLET</targetType>
+    <description>F0RC9x1: QxODT[1:0] Write Pattern Control Word; Default value - 00. Values Range from 00 to FF.No need to calculate; User can override with desired experimental value. 
+creator: mss_eff_cnfg
+consumer: mss_dram_init
+firmware notes: none</description>
+    <valueType>uint8</valueType>
+    <writeable/>
+    <platInit/>
+    <odmVisable/>
+    <odmChangeable/>
+    <array> 2 2</array>
+</attribute>
+
+<attribute>
+    <id>ATTR_EFF_DIMM_DDR4_RC_Ax</id>
+    <targetType>TARGET_TYPE_MBA_CHIPLET</targetType>
+    <description>F0RCAx1: QxODT[1:0] Read Pattern Control Word; Default value - 00. Values Range from 00 to FF. No need to calculate; User can override with desired experimental value. 
+creator: mss_eff_cnfg
+consumer: mss_dram_init
+firmware notes: none</description>
+    <valueType>uint8</valueType>
+    <writeable/>
+    <platInit/>
+    <odmVisable/>
+    <odmChangeable/>
+    <array> 2 2</array>
+</attribute>
+
+<attribute>
+    <id>ATTR_EFF_DIMM_DDR4_RC_Bx</id>
+    <targetType>TARGET_TYPE_MBA_CHIPLET</targetType>
+    <description>F0RCBx: IBT and MRS Snoop Control Word;  Default value - 07. Values Range from 00 to FF. No need to calculate; User can override with desired experimental value. 
+creator: mss_eff_cnfg
+consumer: mss_dram_init
+firmware notes: none</description>
+    <valueType>uint8</valueType>
+    <writeable/>
+    <platInit/>
+    <odmVisable/>
+    <odmChangeable/>
+    <array> 2 2</array>
+</attribute>
+
+<attribute>
     <id>ATTR_EFF_DIMM_RCD_IBT</id>
     <targetType>TARGET_TYPE_MBA_CHIPLET</targetType>
     <description>RCD IBT. Used in mss_dram_init and is computed in mss_eff_cnfg. Can be overwritten by ODM vendors if done from the PNOR or odm_eff_cnfg.  Each memory channel will have a value.
@@ -2478,7 +2873,7 @@ Firmware shares some code with the processor, so the attribute is named so they
     <writeable/>
     <odmVisable/>
     <odmChangeable/>
-	<array> 2 2</array>
+        <array> 2 2</array>
 </attribute>
 
 <attribute>
@@ -2906,18 +3301,15 @@ Will be set at an MBA level with one policy to be used</description>
     <odmVisable/>
 </attribute>
 
-<!-- TODO Thi
 <attribute>
     <id>ATTR_MRW_MCS_PREFETCH_RETRY_THRESHOLD</id>
     <targetType>TARGET_TYPE_SYSTEM</targetType>
     <description>Option to control MCS prefetch retry threshold, for performance optimization. This attribute controls the number of retries in the prefetch engine. Retry threshold available ranges from 16 to 30. Note: Values outside those ranges will default to 30. In MRW.</description>
     <valueType>uint8</valueType>
     <platInit/>
-    <writeable/>
     <odmVisable/>
     <odmChangeable/>
 </attribute>
--->
 
 <attribute>
     <id>ATTR_MRW_POWER_CONTROL_REQUESTED</id>
diff --git a/src/usr/targeting/common/xmltohb/attribute_types.xml b/src/usr/targeting/common/xmltohb/attribute_types.xml
index 833f278..3ea0425 100644
--- a/src/usr/targeting/common/xmltohb/attribute_types.xml
+++ b/src/usr/targeting/common/xmltohb/attribute_types.xml
@@ -8410,7 +8410,7 @@ firmware notes: Used as override attribute for pstate procedure
 
 <attribute>
     <id>MSS_POWER_INT2</id>
-    <description>DIMM Power intercept value. Initialized and used by HWPs.</description>
+    <description>Supplier Power intercept value for dimm</description>
     <simpleType>
         <uint32_t>
         </uint32_t>
@@ -8426,6 +8426,74 @@ firmware notes: Used as override attribute for pstate procedure
 </attribute>
 
 <attribute>
+    <id>MSS_TOTAL_POWER_SLOPE</id>
+    <description>Master Total Power slope value for dimm</description>
+    <simpleType>
+        <uint32_t>
+        </uint32_t>
+        <array>2,2</array><!-- [drop][port] -->
+    </simpleType>
+    <persistency>volatile-zeroed</persistency>
+    <readable/>
+    <writeable/>
+    <hwpfToHbAttrMap>
+        <id>ATTR_MSS_TOTAL_POWER_SLOPE</id>
+        <macro>DIRECT</macro>
+    </hwpfToHbAttrMap>
+</attribute>
+
+<attribute>
+    <id>MSS_TOTAL_POWER_SLOPE2</id>
+    <description>Supplier Total Power slope value for dimm</description>
+    <simpleType>
+        <uint32_t>
+        </uint32_t>
+        <array>2,2</array><!-- [drop][port] -->
+    </simpleType>
+    <persistency>volatile-zeroed</persistency>
+    <readable/>
+    <writeable/>
+    <hwpfToHbAttrMap>
+        <id>ATTR_MSS_TOTAL_POWER_SLOPE2</id>
+        <macro>DIRECT</macro>
+    </hwpfToHbAttrMap>
+</attribute>
+
+<attribute>
+    <id>MSS_TOTAL_POWER_INT</id>
+    <description>Master Total Power intercept value for dimm</description>
+    <simpleType>
+        <uint32_t>
+        </uint32_t>
+        <array>2,2</array><!-- [drop][port] -->
+    </simpleType>
+    <persistency>volatile-zeroed</persistency>
+    <readable/>
+    <writeable/>
+    <hwpfToHbAttrMap>
+        <id>ATTR_MSS_TOTAL_POWER_INT</id>
+        <macro>DIRECT</macro>
+    </hwpfToHbAttrMap>
+</attribute>
+
+<attribute>
+    <id>MSS_TOTAL_POWER_INT2</id>
+    <description>Supplier Total Power intercept value for dimm</description>
+    <simpleType>
+        <uint32_t>
+        </uint32_t>
+        <array>2,2</array><!-- [drop][port] -->
+    </simpleType>
+    <persistency>volatile-zeroed</persistency>
+    <readable/>
+    <writeable/>
+    <hwpfToHbAttrMap>
+        <id>ATTR_MSS_TOTAL_POWER_INT2</id>
+        <macro>DIRECT</macro>
+    </hwpfToHbAttrMap>
+</attribute>
+
+<attribute>
     <id>MSS_DIMM_MAXBANDWIDTH_GBS</id>
     <description>DIMM Max Bandwidth in GBs. Initialized and used by HWPs.</description>
     <simpleType>
@@ -15799,16 +15867,17 @@ firmware notes: Platforms should initialize this attribute to AUTO (0)</descript
 
 <attribute>
     <id>MSS_VREF_CAL_CNTL</id>
-    <description>
-    Training Control over IPL - ENUM - 0x00=DISABLE /Skip V-ref Train;
-    0x01=DRAM - Enable V-Ref Train DRAM Level; 0x02=RANK Level Training;
-    0x03=PORT Level Training; 0x0     4=MBA Level; 0x05=CENTAUR level;
-    Default Value = 0x01;
+    <description>Training Control over IPL
+         - ENUM - 0x00=DISABLE /Skip V-ref Train; 0x01=DRAM - Enable V-Ref Train DRAM Level; 0x02=RANK Level Training;
+                  0x03=PORT Level Training; 0x04=MBA Level; 0x05=CENTAUR level;
+         Default Value = 0x01;
     </description>
     <simpleType>
-        <uint8_t></uint8_t>
+        <uint8_t>
+            <default>0x01</default>
+        </uint8_t>
     </simpleType>
-    <persistency>volatile-zeroed</persistency>
+    <persistency>volatile</persistency>
     <readable/>
     <writeable/>
     <hwpfToHbAttrMap>
@@ -15819,17 +15888,15 @@ firmware notes: Platforms should initialize this attribute to AUTO (0)</descript
 
 <attribute>
     <id>EFF_DIMM_RCD_CNTL_WORD_X</id>
-    <description>
-    Additional RCD Control Word for DDR4. Used in mss_dram_init and is computed
-    in mss_eff_cnfg. Can be overwritten by ODM vendors if done from the PNOR or
-    odm_eff_cnfg. Each memory channel will have a value.
-    creator: mss_eff_cnfg
-    consumer: mss_dram_init
-    firmware notes: none
+    <description>Additional RCD Control Word for DDR4. Used in mss_dram_init and is computed in mss_eff_cnfg.
+                 Can be overwritten by ODM vendors if done from the PNOR or odm_eff_cnfg.  Each memory channel will have a value.
+                 creator: mss_eff_cnfg
+                 consumer: mss_dram_init
+                 firmware notes: none
     </description>
     <simpleType>
         <uint64_t></uint64_t>
-        <array>2, 2</array>
+        <array>2,2</array>
     </simpleType>
     <persistency>volatile-zeroed</persistency>
     <readable/>
@@ -15841,76 +15908,615 @@ firmware notes: Platforms should initialize this attribute to AUTO (0)</descript
 </attribute>
 
 <attribute>
-    <id>MSS_TOTAL_POWER_SLOPE</id>
-    <description>Master Total Power slope value for dimm</description>
+    <id>EFF_DIMM_DDR4_RC00</id>
+    <description>F0RC00: Global Features Control Word.For normal operation, output inversion is always enabled. For DIMM vendor test purpose, output
+                 inversion can be disabled. When disabled, register tPDM is not guaranteed to be met.
+                 NOTE: Default value - 0x00. Values Range from 0-8.
+                 00 - Normal Operation; 01 - Output Inversion Disabled; 02 - Weak Drive Enabled; 04 - A outputs disabled; 08 - B outputs disabled; So on.
+                 No need to calculate; User can override with desired experimental value.
+                 creator: mss_eff_cnfg
+                 consumer: mss_dram_init
+                 firmware notes: none
+     </description>
     <simpleType>
-        <uint32_t></uint32_t>
-        <array>2, 2</array>
+        <uint8_t>
+            <default>0</default>
+        </uint8_t>
+        <array>2,2</array>
     </simpleType>
     <persistency>volatile-zeroed</persistency>
     <readable/>
     <writeable/>
     <hwpfToHbAttrMap>
-        <id>ATTR_MSS_TOTAL_POWER_SLOPE</id>
+        <id>ATTR_EFF_DIMM_DDR4_RC00</id>
         <macro>DIRECT</macro>
     </hwpfToHbAttrMap>
 </attribute>
 
 <attribute>
-    <id>MSS_TOTAL_POWER_SLOPE2</id>
-    <description>Supplier Total Power slope value for dimm</description>
+    <id>EFF_DIMM_DDR4_RC01</id>
+    <description>F0RC01 - Clock Driver Enable Control Word.1. Output clocks may be individually turned on or off to conserve power.
+                 The system must read the module SPD to determine which clock outputs are used by the module. The PLL remains locked
+                 on CK_t/CK_c unless the system stops the clock inputs to the DDR4RCD02 to enter the lowest power mode.
+                 Default value - 0x00. Values Range from 0-8. No need to calculate; User can override with desired experimental value.
+                 creator: mss_eff_cnfg
+                 consumer: mss_dram_init
+                 firmware notes: none
+    </description>
     <simpleType>
-        <uint32_t></uint32_t>
-        <array>2, 2</array>
+        <uint8_t>
+            <default>0</default>
+        </uint8_t>
+        <array>2,2</array>
     </simpleType>
     <persistency>volatile-zeroed</persistency>
     <readable/>
     <writeable/>
     <hwpfToHbAttrMap>
-        <id>ATTR_MSS_TOTAL_POWER_SLOPE2</id>
+        <id>ATTR_EFF_DIMM_DDR4_RC01</id>
         <macro>DIRECT</macro>
     </hwpfToHbAttrMap>
 </attribute>
 
 <attribute>
-    <id>MSS_TOTAL_POWER_INT</id>
-    <description>Master total power intercept value for dimm</description>
+    <id>EFF_DIMM_DDR4_RC02</id>
+    <description>F0RC02: Timing and IBT Control Word;
+                 Default value - 0x00. Values Range from 0-8. No need to calculate; User can override with desired experimental value.
+                 creator: mss_eff_cnfg
+                 consumer: mss_dram_init
+                 firmware notes: none
+    </description>
     <simpleType>
-        <uint32_t></uint32_t>
-        <array>2, 2</array>
+        <uint8_t>
+            <default>0</default>
+        </uint8_t>
+        <array>2,2</array>
     </simpleType>
     <persistency>volatile-zeroed</persistency>
     <readable/>
     <writeable/>
     <hwpfToHbAttrMap>
-        <id>ATTR_MSS_TOTAL_POWER_INT</id>
+        <id>ATTR_EFF_DIMM_DDR4_RC02</id>
         <macro>DIRECT</macro>
     </hwpfToHbAttrMap>
 </attribute>
 
 <attribute>
-    <id>MSS_TOTAL_POWER_INT2</id>
-    <description>Supplier total power intercept value for dimm</description>
+    <id>EFF_DIMM_DDR4_RC03</id>
+    <description>F0RC03 - CA and CS Signals Driver Characteristics Control Word;
+                 Default value - 0x05 (Moderate Drive). Values Range from 00 to 0F. Has to be picked up from SPD byte 137, 1st Nibble for CS and CA.
+                 creator: mss_eff_cnfg
+                 consumer: mss_dram_init
+                 firmware notes: none
+    </description>
     <simpleType>
-        <uint32_t></uint32_t>
-        <array>2, 2</array>
+        <uint8_t>
+            <default>5</default>
+        </uint8_t>
+        <array>2,2</array>
+    </simpleType>
+    <persistency>volatile</persistency>
+    <readable/>
+    <writeable/>
+    <hwpfToHbAttrMap>
+        <id>ATTR_EFF_DIMM_DDR4_RC03</id>
+        <macro>DIRECT</macro>
+    </hwpfToHbAttrMap>
+</attribute>
+
+<attribute>
+    <id>EFF_DIMM_DDR4_RC04</id>
+    <description>F0RC04 - ODT and CKE Signals Driver Characteristics Control Word;
+                 Default value - 0x05 (Moderate Drive). Values Range from 00 to 0F. Has to be picked up from SPD byte 137, 2nd Nibble for ODT and CKE.
+                 creator: mss_eff_cnfg
+                 consumer: mss_dram_init
+                 firmware notes: none
+    </description>
+    <simpleType>
+        <uint8_t>
+            <default>5</default>
+        </uint8_t>
+        <array>2,2</array>
+    </simpleType>
+    <persistency>volatile</persistency>
+    <readable/>
+    <writeable/>
+    <hwpfToHbAttrMap>
+        <id>ATTR_EFF_DIMM_DDR4_RC04</id>
+        <macro>DIRECT</macro>
+    </hwpfToHbAttrMap>
+</attribute>
+
+<attribute>
+    <id>EFF_DIMM_DDR4_RC05</id>
+    <description>F0RC05 - Clock Driver Characteristics Control Word;
+                 Default value - 0x05 (Moderate Drive). Values Range from 00 to 0F. Has to be picked up from SPD byte 138, 2nd Nibble for CK.
+                 creator: mss_eff_cnfg
+                 consumer: mss_dram_init
+                 firmware notes: none
+    </description>
+    <simpleType>
+        <uint8_t>
+            <default>5</default>
+        </uint8_t>
+        <array>2,2</array>
+    </simpleType>
+    <persistency>volatile</persistency>
+    <readable/>
+    <writeable/>
+    <hwpfToHbAttrMap>
+        <id>ATTR_EFF_DIMM_DDR4_RC05</id>
+        <macro>DIRECT</macro>
+    </hwpfToHbAttrMap>
+</attribute>
+
+<attribute>
+    <id>EFF_DIMM_DDR4_RC06_07</id>
+    <description>F0RC06: Command Space Control Word definition;
+                 Default value - 0xF0 (NOP). Values Range from 00 to F0. F0RC07 not used. RDIMM
+                 creator: mss_eff_cnfg
+                 consumer: mss_dram_init
+                 firmware notes: none
+    </description>
+    <simpleType>
+        <uint8_t>
+            <default>0xF0</default>
+        </uint8_t>
+        <array>2,2</array>
+    </simpleType>
+    <persistency>volatile</persistency>
+    <readable/>
+    <writeable/>
+    <hwpfToHbAttrMap>
+        <id>ATTR_EFF_DIMM_DDR4_RC06_07</id>
+        <macro>DIRECT</macro>
+    </hwpfToHbAttrMap>
+</attribute>
+
+<attribute>
+    <id>EFF_DIMM_DDR4_RC08</id>
+    <description>F0RC08: Command Space Control Word definition;
+                 Default value - 0x03. Values Range from 00 to 08 decimal. Check the stack height and calculate dynamically;
+                 00 = Stack height_8; 01 = Stack height_4; 02 = Stack height_2;
+                 creator: mss_eff_cnfg
+                 consumer: mss_dram_init
+                 firmware notes: none
+    </description>
+    <simpleType>
+        <uint8_t>
+            <default>0x03</default>
+        </uint8_t>
+        <array>2,2</array>
+    </simpleType>
+    <persistency>volatile</persistency>
+    <readable/>
+    <writeable/>
+    <hwpfToHbAttrMap>
+        <id>ATTR_EFF_DIMM_DDR4_RC08</id>
+        <macro>DIRECT</macro>
+    </hwpfToHbAttrMap>
+</attribute>
+
+<attribute>
+    <id>EFF_DIMM_DDR4_RC09</id>
+    <description>F0RC09: Command Space Control Word definition;
+                 Default value - 0xF0 (NOP). Values Range from 00 to F0. No need to calculate; User can override with desired experimental value.
+                 creator: mss_eff_cnfg
+                 consumer: mss_dram_init
+                 firmware notes: none
+    </description>
+    <simpleType>
+        <uint8_t>
+            <default>0xF0</default>
+        </uint8_t>
+        <array>2,2</array>
+    </simpleType>
+    <persistency>volatile</persistency>
+    <readable/>
+    <writeable/>
+    <hwpfToHbAttrMap>
+        <id>ATTR_EFF_DIMM_DDR4_RC09</id>
+        <macro>DIRECT</macro>
+    </hwpfToHbAttrMap>
+</attribute>
+
+<attribute>
+    <id>EFF_DIMM_DDR4_RC10</id>
+    <description>RDIMM Operating Speed;  Read from ATTR_MSS_FREQ;
+                 Default value - 00. Values Range from 00 to 09. No need to calculate; User can override with desired experimental value.
+                 creator: mss_eff_cnfg
+                 consumer: mss_dram_init
+                 firmware notes: none
+    </description>
+    <simpleType>
+        <uint8_t>
+            <default>0</default>
+        </uint8_t>
+        <array>2,2</array>
     </simpleType>
     <persistency>volatile-zeroed</persistency>
     <readable/>
     <writeable/>
     <hwpfToHbAttrMap>
-        <id>ATTR_MSS_TOTAL_POWER_INT2</id>
+        <id>ATTR_EFF_DIMM_DDR4_RC10</id>
+        <macro>DIRECT</macro>
+    </hwpfToHbAttrMap>
+</attribute>
+
+<attribute>
+    <id>EFF_DIMM_DDR4_RC11</id>
+    <description>Operating Voltage VDD and VrefCA Source Control Word; Read from ATTR_MSS_VOLT.
+                 Default value - 14. Values Range from 00 to 15 decimal.  No need to calculate; User can override with desired experimental value.
+                 creator: mss_eff_cnfg
+                 consumer: mss_dram_init
+                 firmware notes: none
+    </description>
+    <simpleType>
+        <uint8_t>
+            <default>14</default>
+        </uint8_t>
+        <array>2,2</array>
+    </simpleType>
+    <persistency>volatile</persistency>
+    <readable/>
+    <writeable/>
+    <hwpfToHbAttrMap>
+        <id>ATTR_EFF_DIMM_DDR4_RC11</id>
+        <macro>DIRECT</macro>
+    </hwpfToHbAttrMap>
+</attribute>
+
+<attribute>
+    <id>EFF_DIMM_DDR4_RC12</id>
+    <description>F0RC0C - Training Control Word;
+                 Default value - 00. Values Range from 00 to 07 decimal.No need to calculate; User can override with desired experimental value. 
+                 creator: mss_eff_cnfg
+                 consumer: mss_dram_init
+                 firmware notes: none
+    </description>
+    <simpleType>
+        <uint8_t>
+            <default>0</default>
+        </uint8_t>
+        <array>2,2</array>
+    </simpleType>
+    <persistency>volatile-zeroed</persistency>
+    <readable/>
+    <writeable/>
+    <hwpfToHbAttrMap>
+        <id>ATTR_EFF_DIMM_DDR4_RC12</id>
+        <macro>DIRECT</macro>
+    </hwpfToHbAttrMap>
+</attribute>
+
+<attribute>
+    <id>EFF_DIMM_DDR4_RC13</id>
+    <description>F0RC0D - DIMM Configuration Control Word;
+                 Default value - 0x0B. Values Range from 00 to 15 decimal.
+                 Dynamically calculated using 4 bits[0:3] Bit 0 - Address Mirroring; Bit 1 - Rdimm(1)/Lrdimm (0) ; Bit 2 - N/A ; Bit 3 - CS Mode (Direct / Quad CS mode etc); 
+                 creator: mss_eff_cnfg
+                 consumer: mss_dram_init
+                 firmware notes: none
+    </description>
+    <simpleType>
+        <uint8_t>
+            <default>0x0B</default>
+        </uint8_t>
+        <array>2,2</array>
+    </simpleType>
+    <persistency>volatile</persistency>
+    <readable/>
+    <writeable/>
+    <hwpfToHbAttrMap>
+        <id>ATTR_EFF_DIMM_DDR4_RC13</id>
+        <macro>DIRECT</macro>
+    </hwpfToHbAttrMap>
+</attribute>
+
+<attribute>
+    <id>EFF_DIMM_DDR4_RC14</id>
+    <description>F0RC0E - Parity Control Word;  Default value - 00. Check from ATTR_EFF_CA_PARITY and assign; Values Range from 00 to 0F. 
+                 creator: mss_eff_cnfg
+                 consumer: mss_dram_init
+                 firmware notes: none
+    </description>
+    <simpleType>
+        <uint8_t>
+            <default>0</default>
+        </uint8_t>
+        <array>2,2</array>
+    </simpleType>
+    <persistency>volatile-zeroed</persistency>
+    <readable/>
+    <writeable/>
+    <hwpfToHbAttrMap>
+        <id>ATTR_EFF_DIMM_DDR4_RC14</id>
+        <macro>DIRECT</macro>
+    </hwpfToHbAttrMap>
+</attribute>
+
+<attribute>
+    <id>EFF_DIMM_DDR4_RC15</id>
+    <description>F0RC0F - Command Latency Adder Control Word;
+                 Default value - 04. Values Range from 00 to 04. No need to calculate; User can override with desired experimental value.
+                 creator: mss_eff_cnfg
+                 consumer: mss_dram_init
+                 firmware notes: none
+    </description>
+    <simpleType>
+        <uint8_t>
+            <default>0x04</default>
+        </uint8_t>
+        <array>2,2</array>
+    </simpleType>
+    <persistency>volatile</persistency>
+    <readable/>
+    <writeable/>
+    <hwpfToHbAttrMap>
+        <id>ATTR_EFF_DIMM_DDR4_RC15</id>
+        <macro>DIRECT</macro>
+    </hwpfToHbAttrMap>
+</attribute>
+
+
+<attribute>
+    <id>EFF_DIMM_DDR4_RC_1x</id>
+    <description>F0RC1x - Internal VrefCA Control Word;
+                 Default value - 00. Values Range from 00 to 3F.No need to calculate; User can override with desired experimental value. 
+                 creator: mss_eff_cnfg
+                 consumer: mss_dram_init
+                 firmware notes: none
+    </description>
+    <simpleType>
+        <uint8_t>
+            <default>0</default>
+        </uint8_t>
+        <array>2,2</array>
+    </simpleType>
+    <persistency>volatile-zeroed</persistency>
+    <readable/>
+    <writeable/>
+    <hwpfToHbAttrMap>
+        <id>ATTR_EFF_DIMM_DDR4_RC_1x</id>
+        <macro>DIRECT</macro>
+    </hwpfToHbAttrMap>
+</attribute>
+
+<attribute>
+    <id>EFF_DIMM_DDR4_RC_2x</id>
+    <description>F0RC2x: I2C Bus Control Word;
+                 Default value - 00. Values Range from 00 to FF.No need to calculate; User can override with desired experimental value. 
+                 creator: mss_eff_cnfg
+                 consumer: mss_dram_init
+                 firmware notes: none
+    </description>
+    <simpleType>
+        <uint8_t>
+            <default>0</default>
+        </uint8_t>
+        <array>2,2</array>
+    </simpleType>
+    <persistency>volatile-zeroed</persistency>
+    <readable/>
+    <writeable/>
+    <hwpfToHbAttrMap>
+        <id>ATTR_EFF_DIMM_DDR4_RC_2x</id>
+        <macro>DIRECT</macro>
+    </hwpfToHbAttrMap>
+</attribute>
+
+<attribute>
+    <id>EFF_DIMM_DDR4_RC_3x</id>
+    <description>F0RC3x - Fine Granularity RDIMM Operating Speed;
+                 Default value = (Operating Freq - 1250)/20. Values Range from 00 to 61 Hex. 
+                 creator: mss_eff_cnfg
+                 consumer: mss_dram_init
+                 firmware notes: none
+    </description>
+    <simpleType>
+        <uint8_t>
+            <default>0</default>
+        </uint8_t>
+        <array>2,2</array>
+    </simpleType>
+    <persistency>volatile-zeroed</persistency>
+    <readable/>
+    <writeable/>
+    <hwpfToHbAttrMap>
+        <id>ATTR_EFF_DIMM_DDR4_RC_3x</id>
+        <macro>DIRECT</macro>
+    </hwpfToHbAttrMap>
+</attribute>
+
+<attribute>
+    <id>EFF_DIMM_DDR4_RC_4x</id>
+    <description>F0RC4x: CW Source Selection Control Word;
+                 Default value - 00. Values Range from 00 to FF. No need to calculate; User can override with desired experimental value.
+                 creator: mss_eff_cnfg
+                 consumer: mss_dram_init
+                 firmware notes: none
+    </description>
+    <simpleType>
+        <uint8_t>
+            <default>0</default>
+        </uint8_t>
+        <array>2,2</array>
+    </simpleType>
+    <persistency>volatile-zeroed</persistency>
+    <readable/>
+    <writeable/>
+    <hwpfToHbAttrMap>
+        <id>ATTR_EFF_DIMM_DDR4_RC_4x</id>
+        <macro>DIRECT</macro>
+    </hwpfToHbAttrMap>
+</attribute>
+
+<attribute>
+    <id>EFF_DIMM_DDR4_RC_5x</id>
+    <description>F0RC5x: CW Destination Selection and Write/Read Additional QxODT[1:0] Signal High;
+                 Default value - 00. Values Range from 00 to FF. No need to calculate; User can override with desired experimental value.
+                 creator: mss_eff_cnfg
+                 consumer: mss_dram_init
+                 firmware notes: none
+    </description>
+    <simpleType>
+        <uint8_t>
+            <default>0</default>
+        </uint8_t>
+        <array>2,2</array>
+    </simpleType>
+    <persistency>volatile-zeroed</persistency>
+    <readable/>
+    <writeable/>
+    <hwpfToHbAttrMap>
+        <id>ATTR_EFF_DIMM_DDR4_RC_5x</id>
+        <macro>DIRECT</macro>
+    </hwpfToHbAttrMap>
+</attribute>
+
+<attribute>
+    <id>EFF_DIMM_DDR4_RC_6x</id>
+    <description>F0RC6x: CW Data Control Word;
+                 Default value - 00. Values Range from 00 to FF.No need to calculate; User can override with desired experimental value. 
+                 creator: mss_eff_cnfg
+                 consumer: mss_dram_init
+                 firmware notes: none
+    </description>
+    <simpleType>
+        <uint8_t>
+            <default>0</default>
+        </uint8_t>
+        <array>2,2</array>
+    </simpleType>
+    <persistency>volatile-zeroed</persistency>
+    <readable/>
+    <writeable/>
+    <hwpfToHbAttrMap>
+        <id>ATTR_EFF_DIMM_DDR4_RC_6x</id>
+        <macro>DIRECT</macro>
+    </hwpfToHbAttrMap>
+</attribute>
+
+<attribute>
+    <id>EFF_DIMM_DDR4_RC_7x</id>
+    <description>F0RC7x: IBT Control Word;
+                 Default value - 00. Values Range from 00 to FF.No need to calculate; User can override with desired experimental value.
+                 creator: mss_eff_cnfg
+                 consumer: mss_dram_init
+                 firmware notes: none
+    </description>
+    <simpleType>
+        <uint8_t>
+            <default>0</default>
+        </uint8_t>
+        <array>2,2</array>
+    </simpleType>
+    <persistency>volatile-zeroed</persistency>
+    <readable/>
+    <writeable/>
+    <hwpfToHbAttrMap>
+        <id>ATTR_EFF_DIMM_DDR4_RC_7x</id>
+        <macro>DIRECT</macro>
+    </hwpfToHbAttrMap>
+</attribute>
+
+<attribute>
+    <id>EFF_DIMM_DDR4_RC_8x</id>
+    <description>F0RC8x: ODT Input Buffer/IBT, QxODT Output Buffer and Timing Control Word;
+                 Default value - 00. Values Range from 00 to FF. No need to calculate; User can override with desired experimental value.
+                 creator: mss_eff_cnfg
+                 consumer: mss_dram_init
+                 firmware notes: none
+    </description>
+    <simpleType>
+        <uint8_t>
+            <default>0</default>
+        </uint8_t>
+        <array>2,2</array>
+    </simpleType>
+    <persistency>volatile-zeroed</persistency>
+    <readable/>
+    <writeable/>
+    <hwpfToHbAttrMap>
+        <id>ATTR_EFF_DIMM_DDR4_RC_8x</id>
+        <macro>DIRECT</macro>
+    </hwpfToHbAttrMap>
+</attribute>
+
+<attribute>
+    <id>EFF_DIMM_DDR4_RC_9x</id>
+    <description>F0RC9x1: QxODT[1:0] Write Pattern Control Word;
+                 Default value - 00. Values Range from 00 to FF.No need to calculate; User can override with desired experimental value. 
+                 creator: mss_eff_cnfg
+                 consumer: mss_dram_init
+                 firmware notes: none
+    </description>
+    <simpleType>
+        <uint8_t>
+            <default>0</default>
+        </uint8_t>
+        <array>2,2</array>
+    </simpleType>
+    <persistency>volatile-zeroed</persistency>
+    <readable/>
+    <writeable/>
+    <hwpfToHbAttrMap>
+        <id>ATTR_EFF_DIMM_DDR4_RC_9x</id>
+        <macro>DIRECT</macro>
+    </hwpfToHbAttrMap>
+</attribute>
+
+<attribute>
+    <id>EFF_DIMM_DDR4_RC_Ax</id>
+    <description>F0RCAx1: QxODT[1:0] Read Pattern Control Word;
+                 Default value - 00. Values Range from 00 to FF. No need to calculate; User can override with desired experimental value. 
+                 creator: mss_eff_cnfg
+                 consumer: mss_dram_init
+                 firmware notes: none
+    </description>
+    <simpleType>
+        <uint8_t>
+            <default>0</default>
+        </uint8_t>
+        <array>2,2</array>
+    </simpleType>
+    <persistency>volatile-zeroed</persistency>
+    <readable/>
+    <writeable/>
+    <hwpfToHbAttrMap>
+        <id>ATTR_EFF_DIMM_DDR4_RC_Ax</id>
+        <macro>DIRECT</macro>
+    </hwpfToHbAttrMap>
+</attribute>
+
+<attribute>
+    <id>EFF_DIMM_DDR4_RC_Bx</id>
+    <description>F0RCBx: IBT and MRS Snoop Control Word;  Default value - 07. Values Range from 00 to FF. No need to calculate; User can override with desired experimental value. 
+                 creator: mss_eff_cnfg
+                 consumer: mss_dram_init
+                 firmware notes: none
+    </description>
+    <simpleType>
+        <uint8_t>
+            <default>0</default>
+        </uint8_t>
+        <array>2,2</array>
+    </simpleType>
+    <persistency>volatile-zeroed</persistency>
+    <readable/>
+    <writeable/>
+    <hwpfToHbAttrMap>
+        <id>ATTR_EFF_DIMM_DDR4_RC_Bx</id>
         <macro>DIRECT</macro>
     </hwpfToHbAttrMap>
 </attribute>
 
 <attribute>
     <id>EFF_DRAM_TCCD_L</id>
-    <description>tccd_l. This is for DDR4 MRS6.  Computed in mss_eff_cnfg.
-    Each memory channel will have a value.
-    Creator: mss_eff_cnfg
-    Consumer:various
-    Firmware notes: none
+    <description>tccd_l. This is for DDR4 MRS6.  Computed in mss_eff_cnfg. Each memory channel will have a value.
+                 Creator: mss_eff_cnfg
+                 Consumer:various
+                 Firmware notes: none
     </description>
     <simpleType>
         <uint8_t></uint8_t>
@@ -15926,12 +16532,10 @@ firmware notes: Platforms should initialize this attribute to AUTO (0)</descript
 
 <attribute>
     <id>EFF_LRDIMM_WORD_X</id>
-    <description>
-    Additional buffer control word for LRDIMM building of the BCW
-    </description>
+    <description>Additional buffer control word for LRDIMM building of the BCW</description>
     <simpleType>
         <uint64_t></uint64_t>
-        <array>2, 2</array>
+        <array>2,2</array>
     </simpleType>
     <persistency>volatile-zeroed</persistency>
     <readable/>
@@ -15944,16 +16548,15 @@ firmware notes: Platforms should initialize this attribute to AUTO (0)</descript
 
 <attribute>
     <id>EFF_LRDIMM_ADDITIONAL_CNTL_WORDS</id>
-    <description>
-    LRDIMM additional RCD control words as set by DIMM SPD:
-    F[3,4]RC10, F[3,4]RC11, F[5,6]RC10, F[5,6]RC11, F[7,8]RC10,
-    F[7,8]RC11, F[9,10]RC10, F[9,10]RC11,F[1]RC8, F[3]RC9, F[3]RC8,
-    F[1]RC11, F[1]RC12, F[1]RC13, F[1]RC14, F[1]RC15.
-    Eff config should set this up
+    <description>LRDIMM additional RCD control words as set by DIMM SPD:
+                 F[3,4]RC10, F[3,4]RC11, F[5,6]RC10, F[5,6]RC11, F[7,8]RC10,
+                 F[7,8]RC11, F[9,10]RC10, F[9,10]RC11, F[1]RC8, F[3]RC9,
+                 F[3]RC8, F[1]RC11, F[1]RC12, F[1]RC13, F[1]RC14, F[1]RC15.
+                 Eff config should set this up.
     </description>
     <simpleType>
         <uint64_t></uint64_t>
-        <array>2, 2</array>
+        <array>2,2</array>
     </simpleType>
     <persistency>volatile-zeroed</persistency>
     <readable/>
@@ -15966,10 +16569,7 @@ firmware notes: Platforms should initialize this attribute to AUTO (0)</descript
 
 <attribute>
     <id>MCBIST_DDR4_PDA_ENABLE</id>
-    <description>
-        Controls PDA train enable or PBA. 00 - Disable;
-        01 - PDA; 02 - PBA(Lrdimm)
-    </description>
+    <description>Controls PDA train enable or PBA. 00 - Disable; 01 - PDA; 02 - PBA(Lrdimm)</description>
     <simpleType>
         <uint8_t></uint8_t>
     </simpleType>
@@ -15982,6 +16582,23 @@ firmware notes: Platforms should initialize this attribute to AUTO (0)</descript
     </hwpfToHbAttrMap>
 </attribute>
 
-</attributes>
-
+<attribute>
+    <id>MRW_MCS_PREFETCH_RETRY_THRESHOLD</id>
+    <description>
+    Option to control MCS prefetch retry threshold, for performance
+    optimization. This attribute controls the number of retries in the
+    prefetch engine. Retry threshold available ranges from 16 to 30. Note:
+    Values outside those ranges will default to 30. In MRW.
+    </description>
+    <simpleType>
+        <uint8_t></uint8_t>
+    </simpleType>
+    <persistency>non-volatile</persistency>
+    <readable/>
+    <hwpfToHbAttrMap>
+        <id>ATTR_MRW_MCS_PREFETCH_RETRY_THRESHOLD</id>
+        <macro>DIRECT</macro>
+    </hwpfToHbAttrMap>
+</attribute>
 
+</attributes>
diff --git a/src/usr/targeting/common/xmltohb/target_types.xml b/src/usr/targeting/common/xmltohb/target_types.xml
index 1884c63..0b45bb0 100644
--- a/src/usr/targeting/common/xmltohb/target_types.xml
+++ b/src/usr/targeting/common/xmltohb/target_types.xml
@@ -308,6 +308,7 @@
     <attribute><id>SBE_MASTER_INTR_SERVICE_DELAY_CYCLES</id></attribute>
     <attribute><id>SBE_MASTER_INTR_SERVICE_DELAY_US</id></attribute>
     <attribute><id>CLEAR_DIMM_SPD_ENABLE</id></attribute>
+    <attribute><id>MRW_MCS_PREFETCH_RETRY_THRESHOLD</id></attribute>
 </targetType>
 
 <targetType>
@@ -1181,6 +1182,10 @@
     <attribute><id>MSS_POWER_SLOPE2</id></attribute>
     <attribute><id>MSS_POWER_INT</id></attribute>
     <attribute><id>MSS_POWER_INT2</id></attribute>
+    <attribute><id>MSS_TOTAL_POWER_SLOPE</id></attribute>
+    <attribute><id>MSS_TOTAL_POWER_SLOPE2</id></attribute>
+    <attribute><id>MSS_TOTAL_POWER_INT</id></attribute>
+    <attribute><id>MSS_TOTAL_POWER_INT2</id></attribute>
     <attribute><id>MSS_DIMM_MAXBANDWIDTH_GBS</id></attribute>
     <attribute><id>MSS_DIMM_MAXBANDWIDTH_MRS</id></attribute>
     <attribute><id>MSS_CHANNEL_MAXBANDWIDTH_GBS</id></attribute>
@@ -1330,10 +1335,32 @@
     <attribute><id>MSS_EFF_VPD_VERSION</id></attribute>
     <attribute><id>CDM_DOMAIN</id><default>MEM</default></attribute>
     <attribute><id>EFF_DIMM_RCD_CNTL_WORD_X</id></attribute>
-    <attribute><id>MSS_TOTAL_POWER_SLOPE</id></attribute>
-    <attribute><id>MSS_TOTAL_POWER_SLOPE2</id></attribute>
-    <attribute><id>MSS_TOTAL_POWER_INT</id></attribute>
-    <attribute><id>MSS_TOTAL_POWER_INT2</id></attribute>
+    <attribute><id>EFF_DIMM_DDR4_RC00</id></attribute>
+    <attribute><id>EFF_DIMM_DDR4_RC01</id></attribute>
+    <attribute><id>EFF_DIMM_DDR4_RC02</id></attribute>
+    <attribute><id>EFF_DIMM_DDR4_RC03</id></attribute>
+    <attribute><id>EFF_DIMM_DDR4_RC04</id></attribute>
+    <attribute><id>EFF_DIMM_DDR4_RC05</id></attribute>
+    <attribute><id>EFF_DIMM_DDR4_RC06_07</id></attribute>
+    <attribute><id>EFF_DIMM_DDR4_RC08</id></attribute>
+    <attribute><id>EFF_DIMM_DDR4_RC09</id></attribute>
+    <attribute><id>EFF_DIMM_DDR4_RC10</id></attribute>
+    <attribute><id>EFF_DIMM_DDR4_RC11</id></attribute>
+    <attribute><id>EFF_DIMM_DDR4_RC12</id></attribute>
+    <attribute><id>EFF_DIMM_DDR4_RC13</id></attribute>
+    <attribute><id>EFF_DIMM_DDR4_RC14</id></attribute>
+    <attribute><id>EFF_DIMM_DDR4_RC15</id></attribute>
+    <attribute><id>EFF_DIMM_DDR4_RC_1x</id></attribute>
+    <attribute><id>EFF_DIMM_DDR4_RC_2x</id></attribute>
+    <attribute><id>EFF_DIMM_DDR4_RC_3x</id></attribute>
+    <attribute><id>EFF_DIMM_DDR4_RC_4x</id></attribute>
+    <attribute><id>EFF_DIMM_DDR4_RC_5x</id></attribute>
+    <attribute><id>EFF_DIMM_DDR4_RC_6x</id></attribute>
+    <attribute><id>EFF_DIMM_DDR4_RC_7x</id></attribute>
+    <attribute><id>EFF_DIMM_DDR4_RC_8x</id></attribute>
+    <attribute><id>EFF_DIMM_DDR4_RC_9x</id></attribute>
+    <attribute><id>EFF_DIMM_DDR4_RC_Ax</id></attribute>
+    <attribute><id>EFF_DIMM_DDR4_RC_Bx</id></attribute>
     <attribute><id>EFF_DRAM_TCCD_L</id></attribute>
     <attribute><id>EFF_LRDIMM_WORD_X</id></attribute>
     <attribute><id>EFF_LRDIMM_ADDITIONAL_CNTL_WORDS</id></attribute>
@@ -1517,7 +1544,9 @@
     </attribute>
     <attribute><id>CDM_DOMAIN</id><default>MEM</default></attribute>
     <attribute><id>FRU_ID</id></attribute>
+
     <attribute><id>MSS_VREF_CAL_CNTL</id></attribute>
+
 </targetType>
 
 <!-- Centaur L4 -->
-- 
1.8.2.2

