diff --git a/README b/README
index 2e84fbb..81b1f6c 100644
--- a/README
+++ b/README
@@ -11,7 +11,7 @@
 1. Install Ubuntu 14.04 or Debian 7.5 64-bit.
 2. Install the packages necessary for the build:
 > sudo apt-get install cscope ctags libz-dev libexpat-dev \
-  python language-pack-en \
+  python language-pack-en texinfo \
   build-essential g++ git bison flex unzip \
   libxml-simple-perl libxml-sax-perl libxml2-dev libxml2-utils xsltproc
 3. Continue with the clone, environment setup, and build as noted above.
diff --git a/buildroot b/buildroot
index 3b9de68..d4eae63 160000
--- a/buildroot
+++ b/buildroot
@@ -1 +1 @@
-Subproject commit 3b9de683199998918af02d7a5102d5a11c834bd0
+Subproject commit d4eae63a40d6e621b47b9cffd5e936562a64a0e1
diff --git a/openpower/configs/firestone_defconfig b/openpower/configs/firestone_defconfig
index 50f4890..99cc70d 100644
--- a/openpower/configs/firestone_defconfig
+++ b/openpower/configs/firestone_defconfig
@@ -35,11 +35,13 @@
 
 # petitboot requirements
 BR2_ENABLE_LOCALE_PURGE=y
-BR2_ENABLE_LOCALE_WHITELIST="C en_US"
-BR2_GENERATE_LOCALE="en_US.UTF-8"
+BR2_ENABLE_LOCALE_WHITELIST="C de en es fr it ja ko pt_BR ru zh_CN zh_TW"
+BR2_GENERATE_LOCALE="en_US.UTF-8 de_DE.UTF-8 es_ES.UTF-8 fr_FR.UTF-8 it_IT.UTF-8 ja_JP.UTF-8 ko_KR.UTF-8 pt_BR.UTF-8 ru_RU.UTF-8 zh_CN.UTF-8 zh_TW.UTF-8"
 BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y
 BR2_TARGET_GENERIC_GETTY_PORT="hvc0"
-BR2_ROOTFS_OVERLAY="overlay"
+BR2_ROOTFS_OVERLAY="../openpower/overlay"
+BR2_ROOTFS_DEVICE_TABLE="../openpower/device_table.txt"
+BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var"
 BR2_LINUX_KERNEL=y
 BR2_LINUX_KERNEL_VERSION="4.2"
 BR2_KERNEL_HEADERS_4_2=y
@@ -61,5 +63,6 @@
 BR2_PACKAGE_PETITBOOT=y
 BR2_PACKAGE_IPMITOOL=y
 BR2_PACKAGE_POWERPC_UTILS=y
+BR2_PACKAGE_MDADM=y
 BR2_TARGET_ROOTFS_CPIO_XZ=y
 BR2_TARGET_ROOTFS_INITRAMFS=y
diff --git a/openpower/configs/garrison_defconfig b/openpower/configs/garrison_defconfig
index 231af1a..6b70137 100644
--- a/openpower/configs/garrison_defconfig
+++ b/openpower/configs/garrison_defconfig
@@ -4,6 +4,8 @@
 
 BR2_BINUTILS_EXTRA_CONFIG_OPTIONS="--enable-targets=powerpc64-linux"
 BR2_EXTRA_GCC_CONFIG_OPTIONS="--enable-targets=powerpc64-linux"
+BR2_TOOLCHAIN_BUILDROOT_CXX=y
+# BR2_TOOLCHAIN_BUILDROOT_LIBSTDCPP is not set
 
 BR2_OPENPOWER_CONFIG_NAME="garrison"
 BR2_OPENPOWER_XML_PACKAGE="garrison-xml"
@@ -37,7 +39,9 @@
 BR2_GENERATE_LOCALE="en_US.UTF-8"
 BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y
 BR2_TARGET_GENERIC_GETTY_PORT="hvc0"
-BR2_ROOTFS_OVERLAY="overlay"
+BR2_ROOTFS_OVERLAY="../openpower/overlay"
+BR2_ROOTFS_DEVICE_TABLE="../openpower/device_table.txt"
+BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var"
 BR2_LINUX_KERNEL=y
 BR2_LINUX_KERNEL_VERSION="4.2"
 BR2_KERNEL_HEADERS_4_2=y
@@ -59,5 +63,6 @@
 BR2_PACKAGE_PETITBOOT=y
 BR2_PACKAGE_IPMITOOL=y
 BR2_PACKAGE_POWERPC_UTILS=y
+BR2_PACKAGE_MDADM=y
 BR2_TARGET_ROOTFS_CPIO_XZ=y
 BR2_TARGET_ROOTFS_INITRAMFS=y
diff --git a/openpower/configs/habanero_defconfig b/openpower/configs/habanero_defconfig
index f50f6cc..1773cd9 100644
--- a/openpower/configs/habanero_defconfig
+++ b/openpower/configs/habanero_defconfig
@@ -35,11 +35,13 @@
 
 # petitboot requirements
 BR2_ENABLE_LOCALE_PURGE=y
-BR2_ENABLE_LOCALE_WHITELIST="C en_US"
-BR2_GENERATE_LOCALE="en_US.UTF-8"
+BR2_ENABLE_LOCALE_WHITELIST="C de en es fr it ja ko pt_BR ru zh_CN zh_TW"
+BR2_GENERATE_LOCALE="en_US.UTF-8 de_DE.UTF-8 es_ES.UTF-8 fr_FR.UTF-8 it_IT.UTF-8 ja_JP.UTF-8 ko_KR.UTF-8 pt_BR.UTF-8 ru_RU.UTF-8 zh_CN.UTF-8 zh_TW.UTF-8"
 BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y
 BR2_TARGET_GENERIC_GETTY_PORT="hvc0"
-BR2_ROOTFS_OVERLAY="overlay"
+BR2_ROOTFS_OVERLAY="../openpower/overlay"
+BR2_ROOTFS_DEVICE_TABLE="../openpower/device_table.txt"
+BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var"
 BR2_LINUX_KERNEL=y
 BR2_LINUX_KERNEL_VERSION="4.2"
 BR2_KERNEL_HEADERS_4_2=y
@@ -61,5 +63,6 @@
 BR2_PACKAGE_PETITBOOT=y
 BR2_PACKAGE_IPMITOOL=y
 BR2_PACKAGE_POWERPC_UTILS=y
+BR2_PACKAGE_MDADM=y
 BR2_TARGET_ROOTFS_CPIO_XZ=y
 BR2_TARGET_ROOTFS_INITRAMFS=y
diff --git a/openpower/configs/openpower_mambo_defconfig b/openpower/configs/openpower_mambo_defconfig
index 1f2773e..fef2c26 100644
--- a/openpower/configs/openpower_mambo_defconfig
+++ b/openpower/configs/openpower_mambo_defconfig
@@ -27,7 +27,9 @@
 BR2_GENERATE_LOCALE="en_US.UTF-8"
 BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y
 BR2_TARGET_GENERIC_GETTY_PORT="hvc0"
-BR2_ROOTFS_OVERLAY="overlay"
+BR2_ROOTFS_OVERLAY="../openpower/overlay"
+BR2_ROOTFS_DEVICE_TABLE="../openpower/device_table.txt"
+BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var"
 BR2_LINUX_KERNEL=y
 BR2_LINUX_KERNEL_VERSION="4.2"
 BR2_KERNEL_HEADERS_4_2=y
@@ -49,5 +51,6 @@
 BR2_PACKAGE_PETITBOOT=y
 BR2_PACKAGE_IPMITOOL=y
 BR2_PACKAGE_POWERPC_UTILS=y
+BR2_PACKAGE_MDADM=y
 BR2_TARGET_ROOTFS_CPIO_XZ=y
 BR2_TARGET_ROOTFS_INITRAMFS=y
diff --git a/openpower/configs/palmetto_defconfig b/openpower/configs/palmetto_defconfig
index b5545ed..69e66d7 100644
--- a/openpower/configs/palmetto_defconfig
+++ b/openpower/configs/palmetto_defconfig
@@ -38,7 +38,9 @@
 BR2_GENERATE_LOCALE="en_US.UTF-8"
 BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y
 BR2_TARGET_GENERIC_GETTY_PORT="hvc0"
-BR2_ROOTFS_OVERLAY="overlay"
+BR2_ROOTFS_OVERLAY="../openpower/overlay"
+BR2_ROOTFS_DEVICE_TABLE="../openpower/device_table.txt"
+BR2_ROOTFS_POST_BUILD_SCRIPT="../openpower/scripts/fixup-target-var"
 BR2_LINUX_KERNEL=y
 BR2_LINUX_KERNEL_VERSION="4.2"
 BR2_KERNEL_HEADERS_4_2=y
@@ -60,6 +62,7 @@
 BR2_PACKAGE_PETITBOOT=y
 BR2_PACKAGE_IPMITOOL=y
 BR2_PACKAGE_POWERPC_UTILS=y
+BR2_PACKAGE_MDADM=y
 BR2_TARGET_ROOTFS_CPIO_XZ=y
 BR2_TARGET_ROOTFS_INITRAMFS=y
 
diff --git a/openpower/device_table.txt b/openpower/device_table.txt
new file mode 100644
index 0000000..450aab6
--- /dev/null
+++ b/openpower/device_table.txt
@@ -0,0 +1,23 @@
+# See package/makedevs/README for details
+#
+# This device table is used to assign proper ownership and permissions
+# on various files. It doesn't create any device file, as it is used
+# in both static device configurations (where /dev/ is static) and in
+# dynamic configurations (where devtmpfs, mdev or udev are used).
+#
+# <name>				<type>	<mode>	<uid>	<gid>	<major>	<minor>	<start>	<inc>	<count>
+/dev					d	755	0	0	-	-	-	-	-
+/etc					d	755	0	0	-	-	-	-	-
+/root					d	700	0	0	-	-	-	-	-
+/var/www				d	755	33	33	-	-	-	-	-
+/etc/random-seed			f	600	0	0	-	-	-	-	-
+/etc/shadow				f	600	0	0	-	-	-	-	-
+/etc/passwd				f	644	0	0	-	-	-	-	-
+/etc/network/if-up.d			d	755	0	0	-	-	-	-	-
+/etc/network/if-pre-up.d		d	755	0	0	-	-	-	-	-
+/etc/network/if-post-up.d		d	755	0	0	-	-	-	-	-
+/etc/network/if-down.d			d	755	0	0	-	-	-	-	-
+/etc/network/if-pre-down.d		d	755	0	0	-	-	-	-	-
+/etc/network/if-post-down.d		d	755	0	0	-	-	-	-	-
+# uncomment this to allow starting x as non-root
+#/usr/X11R6/bin/Xfbdev		     	f	4755	0	0	-	-	-	-	-
diff --git a/openpower/overlay/etc/fstab b/openpower/overlay/etc/fstab
new file mode 100644
index 0000000..d373dc6
--- /dev/null
+++ b/openpower/overlay/etc/fstab
@@ -0,0 +1,6 @@
+# <file system>	<mount pt>	<type>	<options>	<dump>	<pass>
+/dev/root	/		ext2	rw,noauto	0	1
+proc		/proc		proc	defaults	0	0
+devpts		/dev/pts	devpts	defaults,gid=5,mode=620	0	0
+tmpfs		/dev/shm	tmpfs	mode=0777	0	0
+sysfs		/sys		sysfs	defaults	0	0
diff --git a/openpower/overlay/etc/inittab b/openpower/overlay/etc/inittab
new file mode 100644
index 0000000..235c835
--- /dev/null
+++ b/openpower/overlay/etc/inittab
@@ -0,0 +1,34 @@
+# /etc/inittab
+#
+# Copyright (C) 2001 Erik Andersen <andersen@codepoet.org>
+#
+# Note: BusyBox init doesn't support runlevels.  The runlevels field is
+# completely ignored by BusyBox init. If you want runlevels, use
+# sysvinit.
+#
+# Format for each entry: <id>:<runlevels>:<action>:<process>
+#
+# id        == tty to run on, or empty for /dev/console
+# runlevels == ignored
+# action    == one of sysinit, respawn, askfirst, wait, and once
+# process   == program to run
+
+# Startup the system
+null::sysinit:/bin/mount -t proc proc /proc
+null::sysinit:/bin/mount -o remount,rw / # REMOUNT_ROOTFS_RW
+null::sysinit:/bin/mkdir -p /dev/pts
+null::sysinit:/bin/mkdir -p /dev/shm
+null::sysinit:/bin/mount -a
+null::sysinit:/bin/hostname -F /etc/hostname
+# now run any rc scripts
+null::sysinit:/etc/init.d/rcS
+
+# Stuff to do for the 3-finger salute
+::ctrlaltdel:/sbin/reboot
+
+# Stuff to do before rebooting
+null::shutdown:/etc/init.d/rcK
+null::shutdown:/bin/umount -a -r
+null::shutdown:/sbin/swapoff -a
+
+null::restart:/usr/sbin/kexec-restart
diff --git a/openpower/overlay/etc/locale b/openpower/overlay/etc/locale
new file mode 100644
index 0000000..6737e87
--- /dev/null
+++ b/openpower/overlay/etc/locale
@@ -0,0 +1 @@
+LANG=en_US.utf8
diff --git a/openpower/package/firestone-xml/firestone.mk b/openpower/package/firestone-xml/firestone.mk
index 3c85118..3210344 100644
--- a/openpower/package/firestone-xml/firestone.mk
+++ b/openpower/package/firestone-xml/firestone.mk
@@ -4,7 +4,7 @@
 #
 ################################################################################
 
-FIRESTONE_XML_VERSION ?= 9163bac79c29546ff567d958914b52ac308ea4c2
+FIRESTONE_XML_VERSION ?= 4db5666e5356fbc9d612fbedb93f95a93322dcd3
 FIRESTONE_XML_SITE ?= $(call github,open-power,firestone-xml,$(FIRESTONE_XML_VERSION))
 
 FIRESTONE_XML_LICENSE = Apache-2.0
diff --git a/openpower/package/garrison-xml/garrison.mk b/openpower/package/garrison-xml/garrison.mk
index 8553443..48e873f 100644
--- a/openpower/package/garrison-xml/garrison.mk
+++ b/openpower/package/garrison-xml/garrison.mk
@@ -4,7 +4,7 @@
 #
 ################################################################################
 
-GARRISON_XML_VERSION ?= 2cda1b188d2dcd853e9c3ade40139ab5507dd053
+GARRISON_XML_VERSION ?= 7f55731b2777f2a1f52dabfb03b7512cc0d365f8
 GARRISON_XML_SITE ?= $(call github,open-power,garrison-xml,$(GARRISON_XML_VERSION))
 
 GARRISON_XML_LICENSE = Apache-2.0
diff --git a/openpower/package/habanero-xml/habanero-xml.mk b/openpower/package/habanero-xml/habanero-xml.mk
index 095ffd0..a862044 100644
--- a/openpower/package/habanero-xml/habanero-xml.mk
+++ b/openpower/package/habanero-xml/habanero-xml.mk
@@ -4,7 +4,7 @@
 #
 ################################################################################
 
-HABANERO_XML_VERSION ?= f73630d727dcae2496c3f69e47b6b83ff96aab0f
+HABANERO_XML_VERSION ?= a71550e65d7377d2aa5d50c21369c80409ee4edd
 HABANERO_XML_SITE ?= $(call github,open-power,habanero-xml,$(HABANERO_XML_VERSION))
 
 HABANERO_XML_LICENSE = Apache-2.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
deleted file mode 100644
index 1a8f04e..0000000
--- a/openpower/package/hostboot/hostboot-0003-SW309472-INITPROC-HWP-DDR4-and-DS-updates-for-DRAM-i.patch
+++ /dev/null
@@ -1,10628 +0,0 @@
-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
-
diff --git a/openpower/package/hostboot/hostboot.mk b/openpower/package/hostboot/hostboot.mk
index f6a5fd8..d960a15 100644
--- a/openpower/package/hostboot/hostboot.mk
+++ b/openpower/package/hostboot/hostboot.mk
@@ -4,7 +4,7 @@
 #
 ################################################################################
 
-HOSTBOOT_VERSION ?= 66921b4bc0df457e3ea44b804c8450b3d120e3b7
+HOSTBOOT_VERSION ?= e3842169002e9a28947489f5a62764880898437a
 HOSTBOOT_SITE ?= $(call github,open-power,hostboot,$(HOSTBOOT_VERSION))
 
 HOSTBOOT_LICENSE = Apache-2.0
diff --git a/openpower/package/occ/occ.mk b/openpower/package/occ/occ.mk
index 0dd5d48..f0bf819 100644
--- a/openpower/package/occ/occ.mk
+++ b/openpower/package/occ/occ.mk
@@ -4,7 +4,7 @@
 #
 ################################################################################
 
-OCC_VERSION ?= 94276061f084a3dcad0d6cb8877799706fdebed1
+OCC_VERSION ?= 0362706b9b9eac5af36ba5b41c5d93a108ccd90d
 OCC_SITE ?= $(call github,open-power,occ,$(OCC_VERSION))
 OCC_LICENSE = Apache-2.0
 OCC_DEPENDENCIES = host-binutils host-p8-pore-binutils
diff --git a/openpower/package/palmetto-xml/palmetto-xml.mk b/openpower/package/palmetto-xml/palmetto-xml.mk
index 771574b..bcdee08 100644
--- a/openpower/package/palmetto-xml/palmetto-xml.mk
+++ b/openpower/package/palmetto-xml/palmetto-xml.mk
@@ -4,7 +4,7 @@
 #
 ################################################################################
 
-PALMETTO_XML_VERSION = 92fe7abe1ab5cb328390762e3437e39f3a812839
+PALMETTO_XML_VERSION = 8ce36f33a1b4f3467488a57bba733c16bfc161f8
 PALMETTO_XML_SITE = $(call github,open-power,palmetto-xml,$(PALMETTO_XML_VERSION))
 
 PALMETTO_XML_LICENSE = Apache-2.0
diff --git a/openpower/package/petitboot/63-md-raid-arrays.rules b/openpower/package/petitboot/63-md-raid-arrays.rules
new file mode 100644
index 0000000..385a8da
--- /dev/null
+++ b/openpower/package/petitboot/63-md-raid-arrays.rules
@@ -0,0 +1,41 @@
+# do not edit this file, it will be overwritten on update
+
+SUBSYSTEM!="block", GOTO="md_end"
+
+# handle md arrays
+ACTION!="add|change", GOTO="md_end"
+KERNEL!="md*", GOTO="md_end"
+
+# partitions have no md/{array_state,metadata_version}, but should not
+# for that reason be ignored.
+ENV{DEVTYPE}=="partition", GOTO="md_ignore_state"
+
+# container devices have a metadata version of e.g. 'external:ddf' and
+# never leave state 'inactive'
+ATTR{md/metadata_version}=="external:[A-Za-z]*", ATTR{md/array_state}=="inactive", GOTO="md_ignore_state"
+TEST!="md/array_state", ENV{SYSTEMD_READY}="0", GOTO="md_end"
+ATTR{md/array_state}=="|clear|inactive", ENV{SYSTEMD_READY}="0", GOTO="md_end"
+LABEL="md_ignore_state"
+
+IMPORT{program}="/usr/sbin/mdadm --detail --export $devnode"
+ENV{DEVTYPE}=="disk", ENV{MD_NAME}=="?*", SYMLINK+="disk/by-id/md-name-$env{MD_NAME}", OPTIONS+="string_escape=replace"
+ENV{DEVTYPE}=="disk", ENV{MD_UUID}=="?*", SYMLINK+="disk/by-id/md-uuid-$env{MD_UUID}"
+ENV{DEVTYPE}=="disk", ENV{MD_DEVNAME}=="?*", SYMLINK+="md/$env{MD_DEVNAME}"
+ENV{DEVTYPE}=="partition", ENV{MD_NAME}=="?*", SYMLINK+="disk/by-id/md-name-$env{MD_NAME}-part%n", OPTIONS+="string_escape=replace"
+ENV{DEVTYPE}=="partition", ENV{MD_UUID}=="?*", SYMLINK+="disk/by-id/md-uuid-$env{MD_UUID}-part%n"
+ENV{DEVTYPE}=="partition", ENV{MD_DEVNAME}=="*[^0-9]", SYMLINK+="md/$env{MD_DEVNAME}%n"
+ENV{DEVTYPE}=="partition", ENV{MD_DEVNAME}=="*[0-9]", SYMLINK+="md/$env{MD_DEVNAME}p%n"
+
+IMPORT{builtin}="blkid"
+OPTIONS+="link_priority=100"
+OPTIONS+="watch"
+ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}"
+ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}"
+
+ENV{MD_LEVEL}=="raid[1-9]*", ENV{SYSTEMD_WANTS}+="mdmonitor.service"
+
+# Tell systemd to run mdmon for our container, if we need it.
+ENV{MD_LEVEL}=="raid[1-9]*", ENV{MD_CONTAINER}=="?*", PROGRAM="/usr/bin/readlink $env{MD_CONTAINER}", ENV{MD_MON_THIS}="%c"
+ENV{MD_MON_THIS}=="?*", PROGRAM="/usr/bin/basename $env{MD_MON_THIS}", ENV{SYSTEMD_WANTS}+="mdmon@%c.service"
+
+LABEL="md_end"
diff --git a/openpower/package/petitboot/65-md-incremental.rules b/openpower/package/petitboot/65-md-incremental.rules
new file mode 100644
index 0000000..a8ad636
--- /dev/null
+++ b/openpower/package/petitboot/65-md-incremental.rules
@@ -0,0 +1,69 @@
+# This file causes block devices with Linux RAID (mdadm) signatures to
+# automatically cause mdadm to be run.
+# See udev(8) for syntax
+
+# Don't process any events if anaconda is running as anaconda brings up
+# raid devices manually
+ENV{ANACONDA}=="?*", GOTO="md_end"
+
+# Also don't process disks that are slated to be a multipath device
+ENV{DM_MULTIPATH_DEVICE_PATH}=="?*", GOTO="md_end"
+
+# We process add events on block devices (since they are ready as soon as
+# they are added to the system), but we must process change events as well
+# on any dm devices (like LUKS partitions or LVM logical volumes) and on
+# md devices because both of these first get added, then get brought live
+# and trigger a change event.  The reason we don't process change events
+# on bare hard disks is because if you stop all arrays on a disk, then
+# run fdisk on the disk to change the partitions, when fdisk exits it
+# triggers a change event, and we want to wait until all the fdisks on
+# all member disks are done before we do anything.  Unfortunately, we have
+# no way of knowing that, so we just have to let those arrays be brought
+# up manually after fdisk has been run on all of the disks.
+
+# First, process all add events (md and dm devices will not really do
+# anything here, just regular disks, and this also won't get any imsm
+# array members either)
+SUBSYSTEM=="block", ACTION=="add|change", ENV{ID_FS_TYPE}=="linux_raid_member", \
+	RUN+="/usr/sbin/mdadm -I --export $env{DEVNAME}"
+
+# Next, check to make sure the BIOS raid stuff wasn't turned off via cmdline
+IMPORT{cmdline}="noiswmd"
+IMPORT{cmdline}="nodmraid"
+ENV{noiswmd}=="?*", GOTO="md_imsm_inc_end"
+ENV{nodmraid}=="?*", GOTO="md_imsm_inc_end"
+SUBSYSTEM=="block", ACTION=="add", ENV{ID_FS_TYPE}=="isw_raid_member", \
+	RUN+="/usr/sbin/mdadm -I $env{DEVNAME}"
+LABEL="md_imsm_inc_end"
+
+SUBSYSTEM=="block", ACTION=="remove", ENV{ID_PATH}=="?*", \
+	RUN+="/usr/sbin/mdadm -If $name --path $env{ID_PATH}"
+SUBSYSTEM=="block", ACTION=="remove", ENV{ID_PATH}!="?*", \
+	RUN+="/usr/sbin/mdadm -If $name"
+
+# Next make sure that this isn't a dm device we should skip for some reason
+ENV{DM_UDEV_RULES_VSN}!="?*", GOTO="dm_change_end"
+ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}=="1", GOTO="dm_change_end"
+ENV{DM_SUSPENDED}=="1", GOTO="dm_change_end"
+KERNEL=="dm-*", SUBSYSTEM=="block", ENV{ID_FS_TYPE}=="linux_raid_member", \
+	ACTION=="change", RUN+="/usr/sbin/mdadm -I $env{DEVNAME}"
+LABEL="dm_change_end"
+
+# Finally catch any nested md raid arrays.  If we brought up an md raid
+# array that's part of another md raid array, it won't be ready to be used
+# until the change event that occurs when it becomes live
+KERNEL=="md*", SUBSYSTEM=="block", ENV{ID_FS_TYPE}=="linux_raid_member", \
+	ACTION=="change", RUN+="/usr/sbin/mdadm -I $env{DEVNAME}"
+
+# In case the initramfs only started some of the arrays in our container,
+# run incremental assembly on the container itself.  Note: we ran mdadm
+# on the container in 64-md-raid.rules, and that's how the MD_LEVEL
+# environment variable is already set.  If that disappears from the other
+# file, we will need to add this line into the middle of the next rule:
+#	IMPORT{program}="/usr/sbin/mdadm -D --export $tempnode", \
+
+SUBSYSTEM=="block", ACTION=="add|change", KERNEL=="md*", \
+	ENV{MD_LEVEL}=="container", RUN+="/usr/sbin/mdadm -I $env{DEVNAME}"
+
+
+LABEL="md_end"
diff --git a/openpower/package/petitboot/S15pb-discover b/openpower/package/petitboot/S15pb-discover
index 58472ba..8f9638c 100755
--- a/openpower/package/petitboot/S15pb-discover
+++ b/openpower/package/petitboot/S15pb-discover
@@ -16,6 +16,7 @@
     start)
         ulimit -c unlimited
         mkdir -p $(dirname $LOGFILE)
+        export $(cat /etc/locale)
         pb-discover -l $LOGFILE $verbose &
         echo $! > $PIDFILE
         ;;
diff --git a/openpower/package/petitboot/petitboot.mk b/openpower/package/petitboot/petitboot.mk
index fab13eb..c586874 100644
--- a/openpower/package/petitboot/petitboot.mk
+++ b/openpower/package/petitboot/petitboot.mk
@@ -4,7 +4,7 @@
 #
 ################################################################################
 
-PETITBOOT_VERSION = 5acb43464206348b7cced9508852fdd2989aea58
+PETITBOOT_VERSION = 804a112a34aed2d20021f7ae1750d8545bb0149e
 PETITBOOT_SITE = git://github.com/open-power/petitboot.git
 PETITBOOT_DEPENDENCIES = ncurses udev host-bison host-flex lvm2
 PETITBOOT_LICENSE = GPLv2
@@ -48,9 +48,15 @@
 		$(TARGET_DIR)/etc/udev/rules.d/
 	$(INSTALL) -D -m 0755 $(BR2_EXTERNAL)/package/petitboot/removable-event-poll.rules \
 		$(TARGET_DIR)/etc/udev/rules.d/
+	$(INSTALL) -D -m 0755 $(BR2_EXTERNAL)/package/petitboot/63-md-raid-arrays.rules \
+		$(TARGET_DIR)/etc/udev/rules.d/
+	$(INSTALL) -D -m 0755 $(BR2_EXTERNAL)/package/petitboot/65-md-incremental.rules \
+		$(TARGET_DIR)/etc/udev/rules.d/
 
 	ln -sf /usr/sbin/pb-udhcpc \
 		$(TARGET_DIR)/usr/share/udhcpc/default.script.d/
+
+	$(MAKE) -C $(@D)/po install
 endef
 
 PETITBOOT_POST_INSTALL_TARGET_HOOKS += PETITBOOT_POST_INSTALL
diff --git a/openpower/scripts/fixup-target-var b/openpower/scripts/fixup-target-var
new file mode 100755
index 0000000..171b916
--- /dev/null
+++ b/openpower/scripts/fixup-target-var
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+# replace /var/* symlinks with actual directories
+
+find $TARGET_DIR/var/ -type l |
+while read path
+do
+    target=$(realpath $path)
+    [ -d "$target" ] || continue
+    rm $path
+    mkdir $path
+done
