diff --git a/openpower/package/hostboot/hostboot-0003-Remove-gard-actions-for-memory-plugging-errors.patch b/openpower/package/hostboot/hostboot-0003-Remove-gard-actions-for-memory-plugging-errors.patch
deleted file mode 100644
index ef2a896..0000000
--- a/openpower/package/hostboot/hostboot-0003-Remove-gard-actions-for-memory-plugging-errors.patch
+++ /dev/null
@@ -1,764 +0,0 @@
-From c53b40e0dcc250d75a159389e099dd40b64e5468 Mon Sep 17 00:00:00 2001
-From: Dan Crowell <dcrowell@us.ibm.com>
-Date: Wed, 27 May 2015 16:39:23 -0500
-Subject: [PATCH] Remove gard actions for memory plugging errors
-
-Modified errors related to unsupported or invalid dimm
-configurations to no longer gard any hardware.
-
-Change-Id: I67459425e973ad1c6f4cf95ccd164b73bdd46a80
----
- .../mss_eff_config/memory_mss_eff_config.xml       | 208 +++++----------------
- .../memory_mss_eff_config_termination.xml          |  69 +------
- 2 files changed, 50 insertions(+), 227 deletions(-)
-
-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..c6a2d37 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.4 2015-05-27 19:56:31 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 -->
-@@ -47,9 +47,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -71,9 +68,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -98,9 +92,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -125,9 +116,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -169,10 +157,10 @@
-     <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>
-@@ -186,10 +174,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--        <priority>HIGH</priority>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -198,10 +182,10 @@
-     <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>
-@@ -216,10 +200,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--        <priority>HIGH</priority>
--    </gard>
- </hwpError>
- 
- 
-@@ -229,10 +209,10 @@
-     <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>
-@@ -247,10 +227,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--        <priority>HIGH</priority>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -259,10 +235,10 @@
-     <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>
-@@ -277,10 +253,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--        <priority>HIGH</priority>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -289,10 +261,10 @@
-     <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>
-@@ -307,10 +279,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--        <priority>HIGH</priority>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -319,10 +287,10 @@
-     <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>
-@@ -337,10 +305,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--        <priority>HIGH</priority>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -349,10 +313,10 @@
-     <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>
-@@ -367,10 +331,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--        <priority>HIGH</priority>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -379,10 +339,10 @@
-     <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>
-@@ -397,10 +357,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--        <priority>HIGH</priority>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -409,10 +365,10 @@
-     <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>
-@@ -427,10 +383,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--        <priority>HIGH</priority>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -439,10 +391,10 @@
-     <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>
-@@ -457,10 +409,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--        <priority>HIGH</priority>
--    </gard>
- </hwpError>
- 
- 
-@@ -483,10 +431,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--        <priority>HIGH</priority>
--    </gard>
- </hwpError>
- 
- 
-@@ -496,10 +440,10 @@
-     <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>
-@@ -514,10 +458,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--        <priority>HIGH</priority>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -540,10 +480,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--        <priority>HIGH</priority>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -566,10 +502,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--        <priority>HIGH</priority>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -591,10 +523,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--        <priority>HIGH</priority>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -616,10 +544,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--        <priority>HIGH</priority>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -641,10 +565,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--        <priority>HIGH</priority>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -666,10 +586,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--        <priority>HIGH</priority>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -691,10 +607,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--        <priority>HIGH</priority>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -716,10 +628,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--        <priority>HIGH</priority>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -741,10 +649,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--        <priority>HIGH</priority>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -766,10 +670,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--        <priority>HIGH</priority>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -791,10 +691,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--        <priority>HIGH</priority>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -816,10 +712,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--        <priority>HIGH</priority>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -841,10 +733,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--        <priority>HIGH</priority>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -866,10 +754,6 @@
-         <target>TARGET_MBA</target>
-     </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_config_termination.xml b/src/usr/hwpf/hwp/mc_config/mss_eff_config/memory_mss_eff_config_termination.xml
-index 9f3c89c..f04b0a6 100644
---- a/src/usr/hwpf/hwp/mc_config/mss_eff_config/memory_mss_eff_config_termination.xml
-+++ b/src/usr/hwpf/hwp/mc_config/mss_eff_config/memory_mss_eff_config_termination.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.       -->
-@@ -20,7 +22,7 @@
- <!-- permissions and limitations under the License.                         -->
- <!--                                                                        -->
- <!-- IBM_PROLOG_END_TAG                                                     -->
--<!-- $Id: memory_mss_eff_config_termination.xml,v 1.2 2014/04/07 23:02:10 lapietra Exp $ -->
-+<!-- $Id: memory_mss_eff_config_termination.xml,v 1.3 2015-05-27 20:02:29 asaetow Exp $ -->
- <!-- For file ../../ipl/fapi/mss_eff_config_termination.C -->
- <!-- // *! OWNER NAME  : Dave Cadigan      Email: dcadiga@us.ibm.com -->
- <!-- // *! BACKUP NAME : Anuwat Saetow     Email: asaetow@us.ibm.com -->
-@@ -195,9 +197,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -220,9 +219,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--    </gard>
- </hwpError>
- <!-- *********************************************************************** -->
-   <hwpError>
-@@ -245,9 +241,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -271,9 +264,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -297,9 +287,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -323,9 +310,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -349,9 +333,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -374,9 +355,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -400,9 +378,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -425,9 +400,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -450,9 +422,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -476,9 +445,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -497,9 +463,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -523,9 +486,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--    </gard>
- </hwpError>
- <!-- *********************************************************************** -->
-   <hwpError>
-@@ -650,9 +610,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -675,9 +632,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -699,9 +653,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--    </gard>
- </hwpError>
- 
- 
-@@ -724,9 +675,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -750,9 +698,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -820,9 +765,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--    </gard>
- </hwpError>
- 
- <!-- *********************************************************************** -->
-@@ -845,9 +787,6 @@
-         <target>TARGET_MBA</target>
-     </deconfigure>
- 
--    <gard>
--        <target>TARGET_MBA</target>
--    </gard>
- </hwpError>
- 
- </hwpErrors>
--- 
-2.3.0
-
diff --git a/openpower/package/hostboot/hostboot-0003-SW309472-INITPROC-HWP-DDR4-and-DS-updates-for-DRAM-i.patch b/openpower/package/hostboot/hostboot-0003-SW309472-INITPROC-HWP-DDR4-and-DS-updates-for-DRAM-i.patch
new file mode 100644
index 0000000..1a8f04e
--- /dev/null
+++ b/openpower/package/hostboot/hostboot-0003-SW309472-INITPROC-HWP-DDR4-and-DS-updates-for-DRAM-i.patch
@@ -0,0 +1,10628 @@
+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
+
