summaryrefslogtreecommitdiffstats
path: root/src/usr/hwpf/hwp
diff options
context:
space:
mode:
authorThi Tran <thi@us.ibm.com>2013-05-29 09:31:29 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2013-06-06 12:50:51 -0500
commit0c7142c97e89976038067d2630bcec192bbeddfc (patch)
tree862382e6b299e6e607818258db5204221caef10e /src/usr/hwpf/hwp
parent5623531a2f9efa10450a5e1e3b1eb6bd4a998357 (diff)
downloadtalos-hostboot-0c7142c97e89976038067d2630bcec192bbeddfc.tar.gz
talos-hostboot-0c7142c97e89976038067d2630bcec192bbeddfc.zip
INITPROC: Hostboot - High Priority HW Init Procedures for week of 5/14
SW203933 Change-Id: Idd78a0c3a4790a84d66725d71149a1dc0b2a13fe Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/4734 Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com> Tested-by: Jenkins Server
Diffstat (limited to 'src/usr/hwpf/hwp')
-rw-r--r--src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_cd.C145
-rw-r--r--src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_cd.H50
-rw-r--r--src/usr/hwpf/hwp/build_winkle_images/p8_slw_build/p8_pore_table_gen_api_fixed.C87
-rw-r--r--src/usr/hwpf/hwp/dram_initialization/makefile1
-rw-r--r--src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/mss_setup_bars.C659
-rw-r--r--src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/mss_setup_bars.H114
-rw-r--r--src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars.C149
-rw-r--r--src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars.H47
-rw-r--r--src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars_errors.xml50
-rw-r--r--src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars_memory_attributes.xml107
-rw-r--r--src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars_mmio_attributes.xml94
-rwxr-xr-xsrc/usr/hwpf/hwp/include/p8_scom_addresses.H46
-rw-r--r--src/usr/hwpf/hwp/mc_config/mss_eff_config/mss_eff_config_termination.C273
-rw-r--r--src/usr/hwpf/hwp/mc_config/mss_eff_config/opt_memmap.C1242
-rw-r--r--src/usr/hwpf/hwp/mc_config/mss_eff_config/opt_memmap.H84
-rw-r--r--src/usr/hwpf/hwp/mc_config/mss_eff_config/opt_memmap_errors.xml64
16 files changed, 2607 insertions, 605 deletions
diff --git a/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_cd.C b/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_cd.C
index 1c4047085..80dc5a4aa 100644
--- a/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_cd.C
+++ b/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_cd.C
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: proc_build_smp_fbc_cd.C,v 1.7 2013/03/04 14:53:51 jmcgill Exp $
+// $Id: proc_build_smp_fbc_cd.C,v 1.8 2013/05/07 22:10:20 jmcgill Exp $
// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/proc_build_smp_fbc_cd.C,v $
//------------------------------------------------------------------------------
// *|
@@ -1252,6 +1252,142 @@ fapi::ReturnCode proc_build_smp_set_sconfig_we1(
}
+//------------------------------------------------------------------------------
+// function: program PB serial SCOM chain (west/east #5)
+// parameters: i_smp_chip => structure encapsulating SMP chip
+// i_smp => structure encapsulating SMP
+// returns: FAPI_RC_SUCCESS if register programming is successful,
+// else error
+//------------------------------------------------------------------------------
+fapi::ReturnCode proc_build_smp_set_sconfig_we5(
+ const proc_build_smp_chip& i_smp_chip,
+ const proc_build_smp_system& i_smp)
+{
+ fapi::ReturnCode rc;
+ uint32_t rc_ecmd = 0x0;
+ ecmdDataBufferBase data(64);
+
+ // mark function entry
+ FAPI_DBG("proc_build_smp_set_sconfig_we5: Start");
+
+ do
+ {
+ // build register content
+ // pb_cfg_lock_on_links
+ rc_ecmd |= data.writeBit(
+ PB_SCONFIG_WE5_LOCK_ON_LINKS_BIT,
+ PB_SCONFIG_WE5_LOCK_ON_LINKS?1:0);
+
+ // pb_cfg_x_on_link_tok_agg_threshold
+ rc_ecmd |= data.insertFromRight(
+ PB_SCONFIG_WE5_X_ON_LINK_TOK_AGG_THRESHOLD,
+ PB_SCONFIG_WE5_X_ON_LINK_TOK_AGG_THRESHOLD_START_BIT,
+ (PB_SCONFIG_WE5_X_ON_LINK_TOK_AGG_THRESHOLD_END_BIT-
+ PB_SCONFIG_WE5_X_ON_LINK_TOK_AGG_THRESHOLD_START_BIT+1));
+
+ // pb_cfg_x_off_link_tok_agg_threshold
+ rc_ecmd |= data.insertFromRight(
+ PB_SCONFIG_WE5_X_OFF_LINK_TOK_AGG_THRESHOLD,
+ PB_SCONFIG_WE5_X_OFF_LINK_TOK_AGG_THRESHOLD_START_BIT,
+ (PB_SCONFIG_WE5_X_OFF_LINK_TOK_AGG_THRESHOLD_END_BIT-
+ PB_SCONFIG_WE5_X_OFF_LINK_TOK_AGG_THRESHOLD_START_BIT+1));
+
+ // pb_cfg_x_a_link_tok_agg_threshold
+ rc_ecmd |= data.insertFromRight(
+ PB_SCONFIG_WE5_A_LINK_TOK_AGG_THRESHOLD,
+ PB_SCONFIG_WE5_A_LINK_TOK_AGG_THRESHOLD_START_BIT,
+ (PB_SCONFIG_WE5_A_LINK_TOK_AGG_THRESHOLD_END_BIT-
+ PB_SCONFIG_WE5_A_LINK_TOK_AGG_THRESHOLD_START_BIT+1));
+
+ // pb_cfg_x_f_link_tok_agg_threshold
+ rc_ecmd |= data.insertFromRight(
+ PB_SCONFIG_WE5_F_LINK_TOK_AGG_THRESHOLD,
+ PB_SCONFIG_WE5_F_LINK_TOK_AGG_THRESHOLD_START_BIT,
+ (PB_SCONFIG_WE5_F_LINK_TOK_AGG_THRESHOLD_END_BIT-
+ PB_SCONFIG_WE5_F_LINK_TOK_AGG_THRESHOLD_START_BIT+1));
+
+ // pb_cfg_x_a_link_tok_ind_threshold
+ rc_ecmd |= data.insertFromRight(
+ PB_SCONFIG_WE5_A_LINK_TOK_IND_THRESHOLD,
+ PB_SCONFIG_WE5_A_LINK_TOK_IND_THRESHOLD_START_BIT,
+ (PB_SCONFIG_WE5_A_LINK_TOK_IND_THRESHOLD_END_BIT-
+ PB_SCONFIG_WE5_A_LINK_TOK_IND_THRESHOLD_START_BIT+1));
+
+ // pb_cfg_passthru_enable
+ rc_ecmd |= data.writeBit(
+ PB_SCONFIG_WE5_PASSTHRU_ENABLE_BIT,
+ PB_SCONFIG_WE5_PASSTHRU_ENABLE?1:0);
+
+ // pb_cfg_passthru_x_priority
+ rc_ecmd |= data.insertFromRight(
+ PB_SCONFIG_WE5_PASSTHRU_X_PRIORITY,
+ PB_SCONFIG_WE5_PASSTHRU_X_PRIORITY_START_BIT,
+ (PB_SCONFIG_WE5_PASSTHRU_X_PRIORITY_END_BIT-
+ PB_SCONFIG_WE5_PASSTHRU_X_PRIORITY_START_BIT+1));
+
+ // pb_cfg_passthru_a_priority
+ rc_ecmd |= data.insertFromRight(
+ PB_SCONFIG_WE5_PASSTHRU_A_PRIORITY,
+ PB_SCONFIG_WE5_PASSTHRU_A_PRIORITY_START_BIT,
+ (PB_SCONFIG_WE5_PASSTHRU_A_PRIORITY_END_BIT-
+ PB_SCONFIG_WE5_PASSTHRU_A_PRIORITY_START_BIT+1));
+
+ // pb_cfg_a_tok_init
+ rc_ecmd |= data.insertFromRight(
+ PB_SCONFIG_WE5_A_TOK_INIT,
+ PB_SCONFIG_WE5_A_TOK_INIT_START_BIT,
+ (PB_SCONFIG_WE5_A_TOK_INIT_END_BIT-
+ PB_SCONFIG_WE5_A_TOK_INIT_START_BIT+1));
+
+ // pb_cfg_f_tok_init
+ rc_ecmd |= data.insertFromRight(
+ PB_SCONFIG_WE5_F_TOK_INIT,
+ PB_SCONFIG_WE5_F_TOK_INIT_START_BIT,
+ (PB_SCONFIG_WE5_F_TOK_INIT_END_BIT-
+ PB_SCONFIG_WE5_F_TOK_INIT_START_BIT+1));
+
+ // pb_cfg_em_fp_enable
+ rc_ecmd |= data.writeBit(
+ PB_SCONFIG_WE5_EM_FP_ENABLE_BIT,
+ PB_SCONFIG_WE5_EM_FP_ENABLE?1:0);
+
+ // spare
+ rc_ecmd |= data.insertFromRight(
+ PB_SCONFIG_WE5_SPARE,
+ PB_SCONFIG_WE5_SPARE_START_BIT,
+ (PB_SCONFIG_WE5_SPARE_END_BIT-
+ PB_SCONFIG_WE5_SPARE_START_BIT+1));
+
+ // pb_cfg_mem_stv_priority
+ rc_ecmd |= data.insertFromRight(
+ PB_SCONFIG_WE5_MEM_STV_PRIORITY,
+ PB_SCONFIG_WE5_MEM_STV_PRIORITY_START_BIT,
+ (PB_SCONFIG_WE5_MEM_STV_PRIORITY_END_BIT-
+ PB_SCONFIG_WE5_MEM_STV_PRIORITY_START_BIT+1));
+
+ if (rc_ecmd)
+ {
+ FAPI_ERR("proc_build_smp_set_sconfig_we5: Error 0x%x setting up PB Serial Configuration load register data buffer",
+ rc_ecmd);
+ rc.setEcmdError(rc_ecmd);
+ break;
+ }
+
+ // call common routine to program chain
+ rc = proc_build_smp_set_sconfig(i_smp_chip, PB_SCONFIG_WE5_DEF, data);
+ if (!rc.ok())
+ {
+ FAPI_ERR("proc_build_smp_set_sconfig_we5: Error from proc_build_smp_set_sconfig");
+ break;
+ }
+ } while(0);
+
+ // mark function exit
+ FAPI_DBG("proc_build_smp_set_sconfig_we5: End");
+ return rc;
+}
+
+
// NOTE: see comments above function prototype in header
fapi::ReturnCode proc_build_smp_set_fbc_cd(
proc_build_smp_system& i_smp)
@@ -1343,6 +1479,13 @@ fapi::ReturnCode proc_build_smp_set_fbc_cd(
break;
}
+ rc = proc_build_smp_set_sconfig_we5(p_iter->second, i_smp);
+ if (!rc.ok())
+ {
+ FAPI_ERR("proc_build_smp_set_fbc_cd: Error from proc_build_smp_set_sconfig_we5");
+ break;
+ }
+
// issue single switch CD to force all updates to occur
rc = proc_build_smp_switch_cd(p_iter->second);
if (!rc.ok())
diff --git a/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_cd.H b/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_cd.H
index a8d831450..03299b2ba 100644
--- a/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_cd.H
+++ b/src/usr/hwpf/hwp/activate_powerbus/proc_build_smp/proc_build_smp_fbc_cd.H
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: proc_build_smp_fbc_cd.H,v 1.5 2013/03/04 14:53:56 jmcgill Exp $
+// $Id: proc_build_smp_fbc_cd.H,v 1.6 2013/05/07 22:10:24 jmcgill Exp $
// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/proc_build_smp_fbc_cd.H,v $
//------------------------------------------------------------------------------
// *|
@@ -406,6 +406,54 @@ const bool PB_SCONFIG_WE1_FP_C2I_HSHAKE = false; // off
const bool PB_SCONFIG_WE1_FP_C2I_SPARE_MODE = false; // spare
+//
+// PBH_DAT_ARB_EM (east/west, chain #5) field/bit definitions
+//
+
+const proc_build_smp_sconfig_def PB_SCONFIG_WE5_DEF = { 0x5, 51, false, { true, false, true } };
+
+const uint32_t PB_SCONFIG_WE5_LOCK_ON_LINKS_BIT = 13;
+const uint32_t PB_SCONFIG_WE5_X_ON_LINK_TOK_AGG_THRESHOLD_START_BIT = 14;
+const uint32_t PB_SCONFIG_WE5_X_ON_LINK_TOK_AGG_THRESHOLD_END_BIT = 17;
+const uint32_t PB_SCONFIG_WE5_X_OFF_LINK_TOK_AGG_THRESHOLD_START_BIT = 18;
+const uint32_t PB_SCONFIG_WE5_X_OFF_LINK_TOK_AGG_THRESHOLD_END_BIT = 21;
+const uint32_t PB_SCONFIG_WE5_A_LINK_TOK_AGG_THRESHOLD_START_BIT = 22;
+const uint32_t PB_SCONFIG_WE5_A_LINK_TOK_AGG_THRESHOLD_END_BIT = 25;
+const uint32_t PB_SCONFIG_WE5_F_LINK_TOK_AGG_THRESHOLD_START_BIT = 26;
+const uint32_t PB_SCONFIG_WE5_F_LINK_TOK_AGG_THRESHOLD_END_BIT = 29;
+const uint32_t PB_SCONFIG_WE5_A_LINK_TOK_IND_THRESHOLD_START_BIT = 30;
+const uint32_t PB_SCONFIG_WE5_A_LINK_TOK_IND_THRESHOLD_END_BIT = 33;
+const uint32_t PB_SCONFIG_WE5_PASSTHRU_ENABLE_BIT = 34;
+const uint32_t PB_SCONFIG_WE5_PASSTHRU_X_PRIORITY_START_BIT = 35;
+const uint32_t PB_SCONFIG_WE5_PASSTHRU_X_PRIORITY_END_BIT = 42;
+const uint32_t PB_SCONFIG_WE5_PASSTHRU_A_PRIORITY_START_BIT = 43;
+const uint32_t PB_SCONFIG_WE5_PASSTHRU_A_PRIORITY_END_BIT = 50;
+const uint32_t PB_SCONFIG_WE5_A_TOK_INIT_START_BIT = 51;
+const uint32_t PB_SCONFIG_WE5_A_TOK_INIT_END_BIT = 54;
+const uint32_t PB_SCONFIG_WE5_F_TOK_INIT_START_BIT = 55;
+const uint32_t PB_SCONFIG_WE5_F_TOK_INIT_END_BIT = 58;
+const uint32_t PB_SCONFIG_WE5_EM_FP_ENABLE_BIT = 59;
+const uint32_t PB_SCONFIG_WE5_SPARE_START_BIT = 60;
+const uint32_t PB_SCONFIG_WE5_SPARE_END_BIT = 61;
+const uint32_t PB_SCONFIG_WE5_MEM_STV_PRIORITY_START_BIT = 62;
+const uint32_t PB_SCONFIG_WE5_MEM_STV_PRIORITY_END_BIT = 63;
+
+const bool PB_SCONFIG_WE5_LOCK_ON_LINKS = true; // lock
+const uint8_t PB_SCONFIG_WE5_X_ON_LINK_TOK_AGG_THRESHOLD = 0x4; // cnt_4
+const uint8_t PB_SCONFIG_WE5_X_OFF_LINK_TOK_AGG_THRESHOLD = 0x4; // cnt_4
+const uint8_t PB_SCONFIG_WE5_A_LINK_TOK_AGG_THRESHOLD = 0x4; // cnt_4
+const uint8_t PB_SCONFIG_WE5_F_LINK_TOK_AGG_THRESHOLD = 0x0; // cnt_0
+const uint8_t PB_SCONFIG_WE5_A_LINK_TOK_IND_THRESHOLD = 0x0; // cnt_0
+const bool PB_SCONFIG_WE5_PASSTHRU_ENABLE = true; // enable
+const uint8_t PB_SCONFIG_WE5_PASSTHRU_X_PRIORITY = 0xFE; // cnt_7to1
+const uint8_t PB_SCONFIG_WE5_PASSTHRU_A_PRIORITY = 0xFE; // cnt_7to1
+const uint8_t PB_SCONFIG_WE5_A_TOK_INIT = 0x8; // cnt_8
+const uint8_t PB_SCONFIG_WE5_F_TOK_INIT = 0x4; // cnt_4
+const bool PB_SCONFIG_WE5_EM_FP_ENABLE = true; // enable
+const uint8_t PB_SCONFIG_WE5_SPARE = 0x0; // spare
+const uint8_t PB_SCONFIG_WE5_MEM_STV_PRIORITY = 0x2; // stv
+
+
extern "C"
{
diff --git a/src/usr/hwpf/hwp/build_winkle_images/p8_slw_build/p8_pore_table_gen_api_fixed.C b/src/usr/hwpf/hwp/build_winkle_images/p8_slw_build/p8_pore_table_gen_api_fixed.C
index e3cd8e8d4..07cb97413 100644
--- a/src/usr/hwpf/hwp/build_winkle_images/p8_slw_build/p8_pore_table_gen_api_fixed.C
+++ b/src/usr/hwpf/hwp/build_winkle_images/p8_slw_build/p8_pore_table_gen_api_fixed.C
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: p8_pore_table_gen_api_fixed.C,v 1.6 2013/03/08 18:18:21 cmolsen Exp $
+// $Id: p8_pore_table_gen_api_fixed.C,v 1.7 2013/05/08 20:16:18 cmolsen Exp $
//
/*------------------------------------------------------------------------------*/
/* *! (C) Copyright International Business Machines Corp. 2012 */
@@ -35,7 +35,7 @@
// Other usages:
//
/* *! COMMENTS : - Start file: p7p_pore_api.c */
-// - The DYNAMIC_RAM_TABLE_PPD was dropped in v1.12 of this
+// - The DYNAMIC_RAM_TABLE_PPD was dropped in v1.12 of this
// code. See v1.12 for explanation and code implementation.
//
/*------------------------------------------------------------------------------*/
@@ -51,16 +51,14 @@
// i_modeBuild - 0: HB/IPL mode, 1: PHYP/Rebuild mode, 2: SRAM mode.
// i_regName - unswizzled enum SPR value (NOT a name)
// i_regData - data to write
-// i_coreIndex - core ID
-// i_threadIndex - thread to operate on, API changes thread num to 0 for shared
-// SPRs, except for HRMOR which is always done on thread 3 to be
-// the last SPR
+// i_coreIndex - core ID = [0:15]
+// i_threadIndex - thread to operate on = [0:7].
*/
uint32_t p8_pore_gen_cpureg_fixed( void *io_image,
uint8_t i_modeBuild,
- uint32_t i_regName,
- uint64_t i_regData,
- uint32_t i_coreId, // [0:15]
+ uint32_t i_regName,
+ uint64_t i_regData,
+ uint32_t i_coreId,
uint32_t i_threadId)
{
uint32_t rc=0, rcLoc=0, iCount=0;
@@ -78,7 +76,7 @@ uint32_t p8_pore_gen_cpureg_fixed( void *io_image,
SbeXipItem xipTocItem;
RamTableEntry ramEntryThis, *ramEntryNext;
uint32_t sprSwiz=0;
-
+
// -------------------------------------------------------------------------
// Validate Ramming parameters.
//
@@ -117,7 +115,7 @@ uint32_t p8_pore_gen_cpureg_fixed( void *io_image,
if (rcLoc)
return IMGBUILD_ERR_RAM_INVALID_PARM;
rcLoc = 0;
-
+
// -------------------------------------------------------------------------
// Get pointer to SLW section where Ram table resides
// NB! Only needed for modeBuild==2 !
@@ -126,11 +124,11 @@ uint32_t p8_pore_gen_cpureg_fixed( void *io_image,
i_modeBuild==P8_SLW_MODEBUILD_REBUILD) { // Fixed image.
// CMO-20130114: Remove this asap. Only for fixed img transition. - Begin
// hostSlwSectionFixed isn't needed for modeBuild=0,1 !
- hostSlwSectionFixed = (void*)( (uintptr_t)io_image +
+ hostSlwSectionFixed = (void*)( (uintptr_t)io_image +
FIXED_SLW_IMAGE_SIZE -
FIXED_FFDC_SECTION_SIZE -
FIXED_SLW_SECTION_SIZE );
- // We may want to continue calling this because it would be practical to
+ // We may want to continue calling this because it would be practical to
// crosscheck the section size. Though, the offset is NOT reliable !
rc = sbe_xip_get_section( io_image, SBE_XIP_SECTION_SLW, &xipSection);
if (rc) {
@@ -165,7 +163,7 @@ uint32_t p8_pore_gen_cpureg_fixed( void *io_image,
return IMGBUILD_ERR_RAM_HDRS_NOT_SYNCED;
}
if (xipSection.iv_size!=FIXED_SLW_SECTION_SIZE) {
- MY_ERR("Fixed SLW table size in *.H header file differs from SLW section size in image.\n");
+ MY_ERR("Fixed SLW table size in *.H header file differs from SLW section size in image.\n");
MY_ERR("Check code or image version.\n");
return IMGBUILD_ERR_RAM_HDRS_NOT_SYNCED;
}
@@ -180,7 +178,7 @@ uint32_t p8_pore_gen_cpureg_fixed( void *io_image,
MY_INF("\tThread ID = %i\n",i_threadId);
MY_INF("Image validation and size checks - OK\n");
MY_INF("\tSLW section size= %i\n",xipSection.iv_size);
-
+
// -------------------------------------------------------------------------
// Locate RAM vector and locate RAM table associated with "This" core ID.
//
@@ -211,7 +209,7 @@ uint32_t p8_pore_gen_cpureg_fixed( void *io_image,
bNewTable = 0;
}
else {
- hostRamTableThis = (void*)( (uintptr_t)hostSlwRamSection +
+ hostRamTableThis = (void*)( (uintptr_t)hostSlwRamSection +
SLW_RAM_TABLE_SPACE_PER_CORE*i_coreId );
bNewTable = 1;
}
@@ -225,8 +223,8 @@ uint32_t p8_pore_gen_cpureg_fixed( void *io_image,
hostRamEntryThis = hostRamTableThis;
if (i_modeBuild==P8_SLW_MODEBUILD_SRAM) {
// Update RAM vector (since it is currently NULL)
- *((uint64_t*)hostRamVector + i_coreId) =
- myRev64( xipSlwRamSection +
+ *((uint64_t*)hostRamVector + i_coreId) =
+ myRev64( xipSlwRamSection +
SLW_RAM_TABLE_SPACE_PER_CORE*i_coreId );
}
bEntryEnd = 1;
@@ -271,21 +269,22 @@ uint32_t p8_pore_gen_cpureg_fixed( void *io_image,
// Create, or modify, the RAM entry.
//
if (i_regName==P8_MSR_MSR) {
- // ...do the MSR header
+ // ...make the MSR header
headerType = 0x1; // MTMSRD header.
ramEntryThis.header = ( ((uint32_t)bEntryEnd) << RAM_HEADER_END_START_C & RAM_HEADER_END_MASK_C ) |
- ( ((uint32_t)headerType) << RAM_HEADER_TYPE_START_C & RAM_HEADER_TYPE_MASK_C );
- // ...do the MSR instr
+ ( ((uint32_t)headerType) << RAM_HEADER_TYPE_START_C & RAM_HEADER_TYPE_MASK_C ) |
+ ( i_threadId << RAM_HEADER_THREAD_START_C & RAM_HEADER_THREAD_MASK_C );
+ // ...make the MSR instr
ramEntryThis.instr = RAM_MTMSRD_INSTR_TEMPL_C;
}
else {
- // ...do the SPR header
+ // ...make the SPR header
headerType = 0x0; // MTSPR header.
ramEntryThis.header = ( ((uint32_t)bEntryEnd) << RAM_HEADER_END_START_C & RAM_HEADER_END_MASK_C ) |
( ((uint32_t)headerType) << RAM_HEADER_TYPE_START_C & RAM_HEADER_TYPE_MASK_C ) |
( i_regName << RAM_HEADER_SPRN_START_C & RAM_HEADER_SPRN_MASK_C ) |
( i_threadId << RAM_HEADER_THREAD_START_C & RAM_HEADER_THREAD_MASK_C );
- // ...do the SPR instr
+ // ...make the SPR instr
sprSwiz = i_regName>>5 | (i_regName & 0x0000001f)<<5;
if (sprSwiz!=SLW_SPR_REGS[iReg].swizzled) {
MY_ERR("Inconsistent swizzle rules implemented. Check code. Dumping data.\n");
@@ -295,7 +294,7 @@ uint32_t p8_pore_gen_cpureg_fixed( void *io_image,
}
ramEntryThis.instr = RAM_MTSPR_INSTR_TEMPL_C | ( ( sprSwiz<<RAM_MTSPR_SPR_START_C ) & RAM_MTSPR_SPR_MASK_C );
}
- // ...do the data
+ // ...make the data
ramEntryThis.data = i_regData;
// ...summarize new table entry data
MY_INF("New table entry data (host format):\n");
@@ -328,7 +327,7 @@ uint32_t p8_pore_gen_cpureg_fixed( void *io_image,
/*
// io_image - Pointer to SLW image.
-// i_modeBuild - 0: HB/IPL mode, 1: PHYP/Rebuild mode, 2: SRAM mode.
+// i_modeBuild - 0: HB/IPL mode, 1: PHYP/Rebuild mode, 2: SRAM mode.
// i_scomAddr - Scom address.
// i_coreId - The core ID [0:15].
// i_scomData - Data to write to scom register.
@@ -338,7 +337,7 @@ uint32_t p8_pore_gen_cpureg_fixed( void *io_image,
uint32_t p8_pore_gen_scom_fixed( void *io_image,
uint8_t i_modeBuild,
uint32_t i_scomAddr,
- uint32_t i_coreId, // [0:15]
+ uint32_t i_coreId, // [0:15]
uint64_t i_scomData,
uint32_t i_operation, // [0:5]
uint32_t i_section) // [0,1,2]
@@ -359,7 +358,7 @@ uint32_t p8_pore_gen_scom_fixed( void *io_image,
SbeXipSection xipSection;
SbeXipItem xipTocItem;
PoreInlineContext ctx;
-
+
// -------------------------------------------------------------------------
// Validate Scom parameters.
//
@@ -388,7 +387,7 @@ uint32_t p8_pore_gen_scom_fixed( void *io_image,
if (rcLoc)
return IMGBUILD_ERR_SCOM_INVALID_PARM;
rcLoc = 0;
-
+
// -------------------------------------------------------------------------
// Get pointer to SLW section where Scom table resides
// NB! Only needed for modeBuild==2 !
@@ -397,11 +396,11 @@ uint32_t p8_pore_gen_scom_fixed( void *io_image,
i_modeBuild==P8_SLW_MODEBUILD_REBUILD) { // Fixed image.
// CMO-20130114: Remove this asap. Only for fixed img transition. - Begin
// hostSlwSectionFixed isn't needed for modeBuild=0,1 !
- hostSlwSectionFixed = (void*)( (uintptr_t)io_image +
+ hostSlwSectionFixed = (void*)( (uintptr_t)io_image +
FIXED_SLW_IMAGE_SIZE -
FIXED_FFDC_SECTION_SIZE -
FIXED_SLW_SECTION_SIZE );
- // We may want to continue calling this because it would be practical to
+ // We may want to continue calling this because it would be practical to
// crosscheck the section size. Though, the offset is NOT reliable !
rc = sbe_xip_get_section( io_image, SBE_XIP_SECTION_SLW, &xipSection);
if (rc) {
@@ -446,9 +445,9 @@ uint32_t p8_pore_gen_scom_fixed( void *io_image,
MY_INF("\tCore ID = %i\n",i_coreId);
MY_INF("Image validation and size checks - OK\n");
MY_INF("\tSLW section size= %i\n",xipSection.iv_size);
-
+
// -------------------------------------------------------------------------
- // Locate Scom vector according to i_section and then locate Scom table
+ // Locate Scom vector according to i_section and then locate Scom table
// associated with "This" core ID.
//
if (i_modeBuild==P8_SLW_MODEBUILD_IPL ||
@@ -531,7 +530,7 @@ uint32_t p8_pore_gen_scom_fixed( void *io_image,
// doesn't include NOP entries.)
// - If no NOP found, insert at first RET.
//
-
+
// First, create search strings for addr, nop and ret.
// Note, the following IIS will also be used in case of
// - i_operation==append
@@ -555,7 +554,7 @@ uint32_t p8_pore_gen_scom_fixed( void *io_image,
MY_ERR("pore_NOP generated rc = %d", ctx.error);
return IMGBUILD_ERR_PORE_INLINE_ASM;
}
-
+
// Second, search for addr and nop in relevant coreId table until first RET.
// Note:
// - We go through ALL entries until first RET instr. We MUST find a RET instr,
@@ -563,7 +562,7 @@ uint32_t p8_pore_gen_scom_fixed( void *io_image,
// - Count number of entries and check for overrun, though we'll continue
// searching until we find an RET. (Should be improved.)
// - The STI(+SCOM_addr) opcode is in the 2nd word of the Scom entry.
- // - For an append operation, if a NOP is found (before a RET obviously), the
+ // - For an append operation, if a NOP is found (before a RET obviously), the
// SCOM is replacing that NNNN sequence.
hostScomEntryNext = hostScomTableThis;
MY_DBG("hostScomEntryNext (addr): 0x%016llx\n ",(uint64_t)hostScomEntryNext);
@@ -581,7 +580,7 @@ uint32_t p8_pore_gen_scom_fixed( void *io_image,
hostScomEntryNext = (void*)((uintptr_t)hostScomEntryNext + XIPSIZE_SCOM_ENTRY);
}
hostScomEntryRET = hostScomEntryNext; // The last EntryNext is always the first RET.
-
+
switch (i_section) {
case P8_SCOM_SECTION_NC:
if (entriesCount>=SLW_MAX_SCOMS_NC) {
@@ -657,7 +656,7 @@ uint32_t p8_pore_gen_scom_fixed( void *io_image,
i_operation, P8_PORE_SCOM_FIRST_OP, P8_PORE_SCOM_LAST_OP);
return IMGBUILD_ERR_SCOM_INVALID_PARM;
}
-
+
// -------------------------------------------------------------------------
// Assuming pre-allocated Scom table (after pre-allocated Ram table):
// - Table is pre-filled with RNNN ISS.
@@ -666,7 +665,7 @@ uint32_t p8_pore_gen_scom_fixed( void *io_image,
// - Remember to check for more than SLW_MAX_SCOMS_NC entries!
switch (operation) {
- case P8_PORE_SCOM_APPEND: // Append a Scom at first occurring NNNN or RNNN,
+ case P8_PORE_SCOM_APPEND: // Append a Scom at first occurring NNNN or RNNN,
if (hostScomEntryNOP) {
// ... replace the NNNN
MY_INF("Append at NOP\n");
@@ -701,7 +700,7 @@ uint32_t p8_pore_gen_scom_fixed( void *io_image,
MY_INF("Replace existing Scom w/NOPs\n");
memcpy(hostScomEntryMatch,(void*)bufIIS,XIPSIZE_SCOM_ENTRY);
}
- else {
+ else {
// do nothing, and assume everything is fine, since we did no damage.
}
break;
@@ -709,10 +708,10 @@ uint32_t p8_pore_gen_scom_fixed( void *io_image,
if (hostScomEntryMatch) {
// ... do an OR on the data (which is the 2nd DWord in the entry)
MY_INF("Overlay existing Scom - OR case\n");
- *((uint64_t*)hostScomEntryMatch+1) =
+ *((uint64_t*)hostScomEntryMatch+1) =
*((uint64_t*)hostScomEntryMatch+1) | myRev64(i_scomData);
}
- else {
+ else {
MY_ERR("No Scom entry found to do OR operation with.\n");
return IMGBUILD_ERR_SCOM_ENTRY_NOT_FOUND;
}
@@ -721,10 +720,10 @@ uint32_t p8_pore_gen_scom_fixed( void *io_image,
if (hostScomEntryMatch) {
// ... do an AND on the data (which is the 2nd DWord in the entry)
MY_INF("Overlay existing Scom - AND case\n");
- *((uint64_t*)hostScomEntryMatch+1) =
+ *((uint64_t*)hostScomEntryMatch+1) =
*((uint64_t*)hostScomEntryMatch+1) & myRev64(i_scomData);
}
- else {
+ else {
MY_ERR("No Scom entry found to do AND operation with.\n");
return IMGBUILD_ERR_SCOM_ENTRY_NOT_FOUND;
}
@@ -740,7 +739,7 @@ uint32_t p8_pore_gen_scom_fixed( void *io_image,
default:
MY_ERR("Impossible value of operation (=%i). Check code.\n",operation);
return IMGBUILD_ERR_CHECK_CODE;
-
+
} // End of switch(operation)
return rc;
diff --git a/src/usr/hwpf/hwp/dram_initialization/makefile b/src/usr/hwpf/hwp/dram_initialization/makefile
index 5b8b2a91f..6f0e9461d 100644
--- a/src/usr/hwpf/hwp/dram_initialization/makefile
+++ b/src/usr/hwpf/hwp/dram_initialization/makefile
@@ -49,6 +49,7 @@ EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/dram_initialization/proc_pcie_config
EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/dram_initialization/host_mpipl_service
EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/dram_initialization/mss_thermal_init
EXTRAINCDIR += ${ROOTPATH}/src/include/usr/hwpf/hwp/dram_initialization/mss_memdiag
+EXTRAINCDIR += ${ROOTPATH}/src/usr/hwpf/hwp/mc_config/mss_eff_config/
## NOTE: add new object files when you add a new HWP
OBJS = dram_initialization.o \
diff --git a/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/mss_setup_bars.C b/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/mss_setup_bars.C
index abb0cebfb..be79c7fb7 100644
--- a/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/mss_setup_bars.C
+++ b/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/mss_setup_bars.C
@@ -5,7 +5,7 @@
/* */
/* IBM CONFIDENTIAL */
/* */
-/* COPYRIGHT International Business Machines Corp. 2012 */
+/* COPYRIGHT International Business Machines Corp. 2012,2013 */
/* */
/* p1 */
/* */
@@ -20,24 +20,25 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: mss_setup_bars.C,v 1.25 2012/12/04 14:47:59 bellows Exp $
+// $Id: mss_setup_bars.C,v 1.27 2013/05/06 15:02:09 jmcgill Exp $
//------------------------------------------------------------------------------
// *! (C) Copyright International Business Machines Corp. 2012
// *! All Rights Reserved -- Property of IBM
// *! *** IBM Confidential ***
//------------------------------------------------------------------------------
+// *!
// *! TITLE : mss_setup_bars.C
-// *! DESCRIPTION : see additional comments below
+// *! DESCRIPTION : Program MCS base address registers (BARs) (FAPI)
+// *!
+// *! OWNER NAME : Girisankar Paulraj Email: gpaulraj@in.ibm.com
+// *! OWNER NAME : Mark Bellows Email: bellows@us.ibm.com
+// *!
//------------------------------------------------------------------------------
-// Don't forget to create CVS comments when you check in your changes!
-//------------------------------------------------------------------------------
-//Owner :- Girisankar paulraj
-//Back-up owner :- Mark bellows
-//
// CHANGE HISTORY:
//------------------------------------------------------------------------------
// Version:| Author: | Date: | Comment:
//---------|----------|---------|-----------------------------------------------
+// 1.26 | jmcgill | 04/22/13| rewrite to line up with attribute changes
// 1.23 | bellows | 12/04/12| more updates
// 1.22 | gpaulraj | 10/03/12| review updates
// 1.21 | gpaulraj | 10/02/12| review updates
@@ -47,282 +48,442 @@
// 1.16 | bellows | 08/29/12| remove compile error, use 32bit group info
// | | | as a temporary fix
// 1.10 | bellows | 07/16/12| added in Id tag
-// 1.4 | bellows | 06-05-12| Updates to Match First Configuration, work for P8 and Murano
+// 1.4 | bellows | 06-05-12| Updates to Match First Configuration, work for
+// | | | P8 and Murano
// 1.3 | gpaulraj | 05-22-12| 2MCS/group supported for 128GB CDIMM
// 1.2 | gpaulraj | 05-07-12| 256 group configuration in
// 1.1 | gpaulraj | 03-19-12| First drop for centaur
-//----------------------------------------------------------------------
+//------------------------------------------------------------------------------
+
+
+//------------------------------------------------------------------------------
// Includes
-//----------------------------------------------------------------------
+//------------------------------------------------------------------------------
#include <mss_setup_bars.H>
+
+//------------------------------------------------------------------------------
+// Function definitions
+//------------------------------------------------------------------------------
+
extern "C" {
- fapi::ReturnCode mss_setup_bars(
- const fapi::Target& i_chip_target)
- {
+
+//------------------------------------------------------------------------------
+// function: write non-mirrored BAR registers (MCFGP/MCFGPA) for a single MCS
+// parameters: i_mcs_target => MCS chiplet target
+// i_pri_valid => true if MCS primary non-mirrored BAR
+// should be marked valid
+// i_group_member_id => group member ID (only valid if
+// i_pri_valid=true)
+// i_group_data => MSS_MCS_GROUP_32 attribute data
+// for member group (only valid if
+// i_pri_valid=true)
+// returns: FAPI_RC_SUCCESS if all register writes are successful,
+// else failing return code
+//------------------------------------------------------------------------------
+fapi::ReturnCode mss_setup_bars_init_nm_bars(
+ const fapi::Target& i_mcs_target,
+ bool i_pri_valid,
+ uint32_t i_group_member_id,
+ uint32_t i_group_data[])
+{
fapi::ReturnCode rc;
- std::vector<fapi::Target> l_mcs_chiplets;
- ecmdDataBufferBase MCFGP_data(64);
- ecmdDataBufferBase MCFGPM_data(64);
- ecmdDataBufferBase MCFGPA_data(64);
- ecmdDataBufferBase MCFGPMA_data(64);
-// uint64_t mem_base;
-// uint64_t mirror_base;
- uint64_t mem_bases[8];
- uint64_t l_memory_sizes[8];
- uint64_t mirror_bases[4];
- uint64_t l_mirror_sizes[4];
-// uint64_t alter_mem_base;
-// uint64_t alter_mirror_base;
- uint32_t groupID[16][16];
- uint8_t groups[8];
+ uint32_t rc_ecmd = 0;
+
+ ecmdDataBufferBase MCFGP(64);
+ ecmdDataBufferBase MCFGPA(64);
+
do
{
- rc = FAPI_ATTR_GET(ATTR_MSS_MCS_GROUP_32, &i_chip_target, groupID);
- if (!rc.ok())
- {
- FAPI_ERR("Error reading ATTR_MSS_MCS_GROUP_32");
- break;
- }
- rc = FAPI_ATTR_GET(ATTR_PROC_MEM_SIZES, &i_chip_target, l_memory_sizes);
- if (!rc.ok())
- {
- FAPI_ERR("Error reading ATTR_PROC_MEM_SIZES");
- break;
- }
- rc = FAPI_ATTR_GET(ATTR_PROC_MEM_BASES, &i_chip_target, mem_bases);
- if (!rc.ok())
- {
- FAPI_ERR("Error reading ATTR_PROC_MEM_BASES");
- break;
- }
- //base addresses for distinct non-mirrored ranges
-
- //
- // process non-mirrored ranges
- //
-
- // read chip base address attribute
- //
- // process mirrored ranges
- //
-
- rc = FAPI_ATTR_GET(ATTR_PROC_MIRROR_BASES, &i_chip_target, mirror_bases);
- if (!rc.ok())
- {
- FAPI_ERR("Error reading ATTR_PROC_MIRROR_BASES");
- break;
- }
- rc = FAPI_ATTR_GET(ATTR_PROC_MIRROR_SIZES, &i_chip_target, l_mirror_sizes);
- if (!rc.ok())
- {
- FAPI_ERR("Error reading ATTR_PROC_MIRROR_SIZES");
- break;
- }
- rc = FAPI_ATTR_GET(ATTR_MSS_MEM_MC_IN_GROUP, &i_chip_target, groups);
- if (!rc.ok())
- {
- FAPI_ERR("Error reading ATTR_MSS_MEM_MC_IN_GROUP");
- break;
- }
-
- //
- // write HW registers
- //
+ // establish base content for MCFGP register
+ rc_ecmd |= MCFGP.setBit(MCFGP_ENABLE_RCMD0_BIT);
+ rc_ecmd |= MCFGP.setBit(MCFGP_ENABLE_RCMD1_BIT);
+ rc_ecmd |= MCFGP.setBit(MCFGP_RSVD_1_BIT);
+ rc_ecmd |= MCFGP.setBit(MCFGP_ENABLE_FASTPATH_BIT);
- // get child MCS chiplets
- rc = fapiGetChildChiplets(i_chip_target,
- fapi::TARGET_TYPE_MCS_CHIPLET,
- l_mcs_chiplets,
- fapi::TARGET_STATE_FUNCTIONAL);
- if (!rc.ok())
- {
- FAPI_ERR("Error from fapiGetChildChiplets");
- break;
- }
-
- // loop through & set configuration of each child
- for (std::vector<fapi::Target>::iterator iter = l_mcs_chiplets.begin();
- iter != l_mcs_chiplets.end() && rc.ok();
- iter++)
- {
- uint8_t mcs_pos = 0x0;
- rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, &(*iter), mcs_pos);
+ if (i_pri_valid)
+ {
+ // MCFGPQ_VALID
+ rc_ecmd |= MCFGP.setBit(MCFGP_VALID_BIT);
+ // MCFGPQ_MCS_UNITS_PER_GROUP
+ rc_ecmd |= MCFGP.insertFromRight(
+ i_group_data[MSS_MCS_GROUP_32_MCS_IN_GROUP_INDEX] / 2,
+ MCFGP_MCS_UNITS_PER_GROUP_START_BIT,
+ (MCFGP_MCS_UNITS_PER_GROUP_END_BIT-
+ MCFGP_MCS_UNITS_PER_GROUP_START_BIT)+1);
+ // MCFGPQ_GROUP_MEMBER_IDENTIFICATION
+ rc_ecmd |= MCFGP.insertFromRight(
+ i_group_member_id,
+ MCFGP_GROUP_MEMBER_ID_START_BIT,
+ (MCFGP_GROUP_MEMBER_ID_END_BIT-
+ MCFGP_GROUP_MEMBER_ID_START_BIT)+1);
+ // MCFGPQ_GROUP_SIZE
+ rc_ecmd |= MCFGP.insertFromRight(
+ (i_group_data[MSS_MCS_GROUP_32_SIZE_INDEX]/4)-1,
+ MCFGP_GROUP_SIZE_START_BIT,
+ (MCFGP_GROUP_SIZE_END_BIT-
+ MCFGP_GROUP_SIZE_START_BIT)+1);
+
+ // MCFGPQ_BASE_ADDRESS_OF_GROUP
+ rc_ecmd |= MCFGP.insertFromRight(
+ i_group_data[MSS_MCS_GROUP_32_BASE_INDEX] >> 2,
+ MCFGP_BASE_ADDRESS_START_BIT,
+ (MCFGP_BASE_ADDRESS_END_BIT-
+ MCFGP_BASE_ADDRESS_START_BIT)+1);
+
+ // check buffer manipulation return codes
+ if (rc_ecmd)
+ {
+ FAPI_ERR("mss_setup_bars_init_nm_bars: Error 0x%X setting up MCFGP data buffer",
+ rc_ecmd);
+ rc.setEcmdError(rc_ecmd);
+ break;
+ }
+
+ bool alt_valid = i_group_data[MSS_MCS_GROUP_32_ALT_VALID_INDEX];
+ if (alt_valid)
+ {
+ // MCFGPAQ_VALID
+ rc_ecmd |= MCFGPA.setBit(MCFGPA_VALID_BIT);
+
+ // MCFGPAQ_GROUP_SIZE
+ rc_ecmd |= MCFGPA.insertFromRight(
+ (i_group_data[MSS_MCS_GROUP_32_ALT_SIZE_INDEX]/4)-1,
+ MCFGPA_GROUP_SIZE_START_BIT,
+ (MCFGPA_GROUP_SIZE_END_BIT-
+ MCFGPA_GROUP_SIZE_START_BIT)+1);
+
+ // MCFGPAQ_BASE_ADDRESS_OF_GROUP
+ rc_ecmd |= MCFGPA.insertFromRight(
+ i_group_data[MSS_MCS_GROUP_32_ALT_BASE_INDEX] >> 2,
+ MCFGPA_BASE_ADDRESS_START_BIT,
+ (MCFGPA_BASE_ADDRESS_END_BIT-
+ MCFGPA_BASE_ADDRESS_START_BIT)+1);
+
+ if (i_group_data[MSS_MCS_GROUP_32_ALT_BASE_INDEX] !=
+ (i_group_data[MSS_MCS_GROUP_32_BASE_INDEX] +
+ (i_group_data[MSS_MCS_GROUP_32_SIZE_INDEX]/2)))
+ {
+ FAPI_ERR("Invalid non-mirrored alternate BAR configuration");
+ FAPI_SET_HWP_ERROR(rc,
+ RC_MSS_SETUP_BARS_NM_ALT_BAR_ERR);
+ break;
+ }
+ }
+
+ // check buffer manipulation return codes
+ if (rc_ecmd)
+ {
+ FAPI_ERR("mss_setup_bars_init_nm_bars: Error 0x%X setting up MCFGPA data buffer",
+ rc_ecmd);
+ rc.setEcmdError(rc_ecmd);
+ break;
+ }
+ }
+
+ // write registers
+ rc = fapiPutScom(i_mcs_target, MCS_MCFGP_0x02011800, MCFGP);
if (!rc.ok())
{
- FAPI_ERR("Error reading ATTR_CHIP_UNIT_POS");
- break;
+ FAPI_ERR("Error from fapiPutScom (MCS_MCFGP_0x02011800)");
+ break;
+ }
+
+ rc = fapiPutScom(i_mcs_target, MCS_MCFGPA_0x02011814, MCFGPA);
+ if (!rc.ok())
+ {
+ FAPI_ERR("Error from fapiPutScom (MCS_MCFGPA_0x02011814)");
+ break;
+ }
+ } while(0);
+
+ return rc;
+}
+
+
+//------------------------------------------------------------------------------
+// function: write mirrored BAR registers (MCFGPM/MCFGPMA) for a single MCS
+// parameters: i_mcs_target => MCS chiplet target
+// i_pri_valid => true if MCS primary mirrored BAR
+// should be marked valid
+// i_group_data => MSS_MCS_GROUP_32 attribute data
+// for member group (only valid if
+// i_pri_valid=true)
+// returns: FAPI_RC_SUCCESS if all register writes are successful,
+// else failing return code
+//------------------------------------------------------------------------------
+fapi::ReturnCode mss_setup_bars_init_m_bars(
+ const fapi::Target& i_mcs_target,
+ bool i_pri_valid,
+ uint32_t i_group_data[])
+{
+ fapi::ReturnCode rc;
+ uint32_t rc_ecmd = 0;
+
+ ecmdDataBufferBase MCFGPM(64);
+ ecmdDataBufferBase MCFGPMA(64);
+
+ do
+ {
+ if (i_pri_valid)
+ {
+ // MCFGPMQ_VALID
+ rc_ecmd |= MCFGPM.setBit(MCFGPM_VALID_BIT);
+ // MCFGPMQ_GROUP_SIZE
+ rc_ecmd |= MCFGPM.insertFromRight(
+ (i_group_data[MSS_MCS_GROUP_32_SIZE_INDEX]/4)-1,
+ MCFGPM_GROUP_SIZE_START_BIT,
+ (MCFGPM_GROUP_SIZE_END_BIT-
+ MCFGPM_GROUP_SIZE_START_BIT)+1);
+
+ // MCFGPMQ_BASE_ADDRESS_OF_GROUP
+ rc_ecmd |= MCFGPM.insertFromRight(
+ i_group_data[MSS_MCS_GROUP_32_BASE_INDEX] >> 2,
+ MCFGPM_BASE_ADDRESS_START_BIT,
+ (MCFGPM_BASE_ADDRESS_END_BIT-
+ MCFGPM_BASE_ADDRESS_START_BIT)+1);
+
+ // check buffer manipulation return codes
+ if (rc_ecmd)
+ {
+ FAPI_ERR("mss_setup_bars_init_m_bars: Error 0x%X setting up MCFGPM data buffer",
+ rc_ecmd);
+ rc.setEcmdError(rc_ecmd);
+ break;
+ }
+
+ bool alt_valid = i_group_data[MSS_MCS_GROUP_32_ALT_VALID_INDEX];
+ if (alt_valid)
+ {
+ // MCFGPMAQ_VALID
+ rc_ecmd |= MCFGPMA.setBit(MCFGPMA_VALID_BIT);
+
+ // MCFGPMAQ_GROUP_SIZE
+ rc_ecmd |= MCFGPMA.insertFromRight(
+ (i_group_data[MSS_MCS_GROUP_32_ALT_SIZE_INDEX]/4)-1,
+ MCFGPMA_GROUP_SIZE_START_BIT,
+ (MCFGPMA_GROUP_SIZE_END_BIT-
+ MCFGPMA_GROUP_SIZE_START_BIT)+1);
+
+ // MCFGPMAQ_BASE_ADDRESS_OF_GROUP
+ rc_ecmd |= MCFGPMA.insertFromRight(
+ i_group_data[MSS_MCS_GROUP_32_ALT_BASE_INDEX] >> 2,
+ MCFGPMA_BASE_ADDRESS_START_BIT,
+ (MCFGPMA_BASE_ADDRESS_END_BIT-
+ MCFGPMA_BASE_ADDRESS_START_BIT)+1);
+
+ if (i_group_data[MSS_MCS_GROUP_32_ALT_BASE_INDEX] !=
+ (i_group_data[MSS_MCS_GROUP_32_BASE_INDEX] +
+ (i_group_data[MSS_MCS_GROUP_32_SIZE_INDEX]/2)))
+ {
+ FAPI_ERR("Invalid mirrored alternate BAR configuration");
+ FAPI_SET_HWP_ERROR(rc,
+ RC_MSS_SETUP_BARS_M_ALT_BAR_ERR);
+ break;
+ }
+ }
+
+ // check buffer manipulation return codes
+ if (rc_ecmd)
+ {
+ FAPI_ERR("mss_setup_bars_init_m_bars: Error 0x%X setting up MCFGPMA data buffer",
+ rc_ecmd);
+ rc.setEcmdError(rc_ecmd);
+ break;
+ }
}
- MCFGP_data.flushTo0();
- MCFGPM_data.flushTo0();
- MCFGPA_data.flushTo0();
- MCFGPMA_data.flushTo0();
- rc = fapiGetScom(*iter, MCS_MCFGP_0x02011800, MCFGP_data);
+ // write registers
+ rc = fapiPutScom(i_mcs_target, MCS_MCFGPM_0x02011801, MCFGPM);
if (!rc.ok())
{
- FAPI_ERR("Error Reading MCS_MCFGP_0x02011800");
- break;
+ FAPI_ERR("Error from fapiPutScom (MCS_MCFGPM_0x02011801)");
+ break;
}
- MCFGP_data.setBit(9);
- MCFGP_data.setBit(10);
- MCFGP_data.setBit(24);
- rc = fapiPutScom(*iter, MCS_MCFGP_0x02011800, MCFGP_data);
+ rc = fapiPutScom(i_mcs_target, MCS_MCFGPMA_0x02011815, MCFGPMA);
+ if (!rc.ok())
+ {
+ FAPI_ERR("Error from fapiPutScom (MCS_MCFGPMA_0x02011815");
+ break;
+ }
+ } while(0);
+
+ return rc;
+}
+
+
+//------------------------------------------------------------------------------
+// function: mss_setup_bars HWP entry point
+// NOTE: see comments above function prototype in header
+//------------------------------------------------------------------------------
+fapi::ReturnCode mss_setup_bars(const fapi::Target& i_pu_target)
+{
+ fapi::ReturnCode rc;
+ std::vector<fapi::Target> l_mcs_chiplets;
+ uint32_t group_data[16][16];
+
+ do
+ {
+ // obtain group configuration attribute for this chip
+ rc = FAPI_ATTR_GET(ATTR_MSS_MCS_GROUP_32, &i_pu_target, group_data);
if (!rc.ok())
{
- FAPI_ERR("Error writing MCS_MCFGP_0x02011800");
- break;
+ FAPI_ERR("Error reading ATTR_MSS_MCS_GROUP_32");
+ break;
}
- rc = fapiGetScom(*iter, MCS_MCFGPM_0x02011801, MCFGPM_data);
+
+ // get child MCS chiplets
+ rc = fapiGetChildChiplets(i_pu_target,
+ fapi::TARGET_TYPE_MCS_CHIPLET,
+ l_mcs_chiplets,
+ fapi::TARGET_STATE_FUNCTIONAL);
if (!rc.ok())
{
- FAPI_ERR("Error Reading MCS_MCFGPM_0x02011801");
- break;
- }
- for(uint8_t i=0; (i<16)&&(rc.ok()); i++)
+ FAPI_ERR("Error from fapiGetChildChiplets");
+ break;
+ }
+
+ // loop through & set configuration of each MCS chiplet
+ for (std::vector<fapi::Target>::iterator iter = l_mcs_chiplets.begin();
+ iter != l_mcs_chiplets.end() && rc.ok();
+ iter++)
{
- uint32_t temp=0;
- temp = groupID[i][1];
- uint32_t b=0;
- for(uint32_t j=4;(j<temp+4)&&(rc.ok());j++)
- {
- if(groupID[i][j]==mcs_pos)
+ // obtain MCS chip unit number
+ uint8_t mcs_pos = 0x0;
+ rc = FAPI_ATTR_GET(ATTR_CHIP_UNIT_POS, &(*iter), mcs_pos);
+ if (!rc.ok())
{
- FAPI_INF(" Group ID of no MCS %d is %d MCS_POS ID found for %d as %d ",temp, i,mcs_pos,(j-4));
- //temp =(temp/2;
- MCFGP_data.insertFromRight(temp/2,1,3);
- MCFGP_data.insertFromRight((j-4),4,5);
-
- b = ((l_memory_sizes[i]>>30) / 4) - 1;
- MCFGP_data.insertFromRight(b,11,13);
- b = mem_bases[i]>>32;
- MCFGP_data.insertFromRight(b,26,18);
- MCFGP_data.setBit(25);
- rc = fapiPutScom(*iter, MCS_MCFGP_0x02011800, MCFGP_data);
- if (!rc.ok())
- {
- FAPI_ERR("Error writing MCS_MCFGP_0x02011800");
- break;
- }
- rc = fapiGetScom(*iter, MCS_MCFGP_0x02011800, MCFGP_data);
- if (!rc.ok())
- {
- FAPI_ERR("Error Reading MCS_MCFGP_0x02011800");
+ FAPI_ERR("Error reading ATTR_CHIP_UNIT_POS");
break;
- }
- MCFGP_data.setBit(0); // Read registers value and set Zero bit as per register specification
- FAPI_DBG("Writing MCS %d MCFGP = 0x%llx",mcs_pos, MCFGP_data.getDoubleWord(0));
- rc = fapiPutScom(*iter, MCS_MCFGP_0x02011800, MCFGP_data);
- if (!rc.ok())
- {
- FAPI_ERR("Error from fapiPutScom MCS_MCFGP_0x02011800");
- break;
- }
-
- if(temp>1)
- {
-
- //setting the MCFGPM register
- b = ((l_mirror_sizes[i]>>30) / 4) - 1;
- MCFGPM_data.insertFromRight(b,11,13);
- b = mirror_bases[i]>>32;
- MCFGPM_data.insertFromRight(b,26,18);
- rc = fapiPutScom(*iter, MCS_MCFGPM_0x02011801, MCFGPM_data);
- if (!rc.ok())
- {
- FAPI_ERR("Error writing MCS_MCFGPM_0x02011801");
- break;
- }
- rc = fapiGetScom(*iter, MCS_MCFGPM_0x02011801, MCFGPM_data);
- if (!rc.ok())
- {
- FAPI_ERR("Error reading MCS_MCFGPM_0x02011801");
- break;
- }
-
- MCFGPM_data.setBit(0);
- FAPI_DBG("Writing MCS %d MCFGPM = 0x%llx",mcs_pos, MCFGPM_data.getDoubleWord(0));
- rc = fapiPutScom(*iter, MCS_MCFGPM_0x02011801, MCFGPM_data);
- if (!rc.ok())
- {
- FAPI_ERR("Error from fapiPutScom MCS_MCFGPM_0x02011801");
- break;
- }
- }
-
- if(groupID[i][12])
-
- {
-
- b = (groupID[i][13] / 4) - 1;
- MCFGPA_data.insertFromRight(b,11,13);
- b = groupID[i][14]>>2;
- MCFGPA_data.insertFromRight(b,26,18);
- rc = fapiPutScom(*iter, MCS_MCFGPA_0x02011814, MCFGPA_data);
- if (!rc.ok())
+ }
+
+ // determine non-mirrored member group
+ bool nm_bar_valid = false;
+ uint8_t nm_bar_group_index = 0x0;
+ uint8_t nm_bar_group_member_id = 0x0;
+ for (size_t i = MSS_MCS_GROUP_32_NM_START_INDEX;
+ (i <= MSS_MCS_GROUP_32_NM_END_INDEX) && rc.ok();
+ i++)
+ {
+ // only process valid groups
+ if (group_data[i][MSS_MCS_GROUP_32_SIZE_INDEX] == 0)
{
- FAPI_ERR("Error writing MCS_MCFGPA_0x02011814");
- break;
- }
- rc = fapiGetScom(*iter, MCS_MCFGPA_0x02011814, MCFGPA_data);
- if (!rc.ok())
+ continue;
+ }
+
+ uint32_t mcs_in_group = group_data[i][MSS_MCS_GROUP_32_MCS_IN_GROUP_INDEX];
+ for (size_t j = MSS_MCS_GROUP_32_MEMBERS_START_INDEX;
+ (j < MSS_MCS_GROUP_32_MEMBERS_START_INDEX+mcs_in_group) &&
+ (rc.ok());
+ j++)
{
- FAPI_ERR("Error reading MCS_MCFGPA_0x02011814");
- break;
- }
- MCFGPA_data.setBit(0); // Read registers value and set Zero bit as per register specification
- FAPI_DBG("Writing MCS %d MCFGPA = 0x%llx",mcs_pos, MCFGPA_data.getDoubleWord(0));
- rc = fapiPutScom(*iter, MCS_MCFGPA_0x02011814, MCFGPA_data);
- if (!rc.ok())
+ if (mcs_pos == group_data[i][j])
+ {
+ if (nm_bar_valid)
+ {
+ const uint8_t& MCS_POS = mcs_pos;
+ const uint8_t& GROUP_INDEX_A = nm_bar_group_index;
+ const uint8_t& GROUP_INDEX_B = i;
+ FAPI_ERR("MCS %d is listed as a member in multiple non-mirrored groups",
+ mcs_pos);
+ FAPI_SET_HWP_ERROR(
+ rc,
+ RC_MSS_SETUP_BARS_MULTIPLE_GROUP_ERR);
+ break;
+ }
+ nm_bar_valid = true;
+ nm_bar_group_index = i;
+ nm_bar_group_member_id =
+ j-MSS_MCS_GROUP_32_MEMBERS_START_INDEX;
+ }
+ }
+ }
+ if (!rc.ok())
+ {
+ break;
+ }
+
+ // write non-mirrored BARs based on group configuration
+ rc = mss_setup_bars_init_nm_bars(
+ *iter,
+ nm_bar_valid,
+ nm_bar_group_member_id,
+ group_data[nm_bar_group_index]);
+ if (!rc.ok())
+ {
+ FAPI_ERR("Error from mss_setup_bars_init_nm_bars");
+ break;
+ }
+
+ // determine mirrored member group
+ bool m_bar_valid = false;
+ uint8_t m_bar_group_index = 0x0;
+ for (size_t i = MSS_MCS_GROUP_32_M_START_INDEX;
+ (i <= MSS_MCS_GROUP_32_M_END_INDEX) && rc.ok();
+ i++)
+ {
+ // only process valid groups
+ if (group_data[i][MSS_MCS_GROUP_32_SIZE_INDEX] == 0)
{
- FAPI_ERR("Error writing MCS_MCFGPA_0x02011814");
- break;
- }
+ continue;
+ }
- if(temp>1)
+ uint32_t mcs_in_group = group_data[i][MSS_MCS_GROUP_32_MCS_IN_GROUP_INDEX];
+ for (size_t j = MSS_MCS_GROUP_32_MEMBERS_START_INDEX;
+ (j < MSS_MCS_GROUP_32_MEMBERS_START_INDEX+mcs_in_group) &&
+ (rc.ok());
+ j++)
{
- //setting MCFGPMA
- b = (groupID[i+8][13]/ 4) - 1;
- MCFGPMA_data.insertFromRight(b,11,13);
- b = groupID[i+8][14]>>2;
- MCFGPMA_data.insertFromRight(b,26,18);
- rc = fapiPutScom(*iter, MCS_MCFGPMA_0x02011815, MCFGPMA_data);
- if (!rc.ok())
- {
- FAPI_ERR("Error writing MCS_MCFpGPMA_0x02011815");
- break;
- }
- rc = fapiGetScom(*iter, MCS_MCFGPMA_0x02011815, MCFGPMA_data);
- if (!rc.ok())
- {
- FAPI_ERR("Error reading MCS_MCFGPMA_0x02011815");
- break;
- }
- MCFGPMA_data.setBit(0); // Read registers value and set Zero bit as per register specification
- FAPI_DBG("Writing MCS %d MCFGPMA = 0x%llx",mcs_pos, MCFGPMA_data.getDoubleWord(0));
- rc = fapiPutScom(*iter, MCS_MCFGPMA_0x02011815, MCFGPMA_data);
- if (!rc.ok())
- {
- FAPI_ERR("Error writing MCS_MCFGPMA_0x02011815");
- break;
- }
- }
- }
+ if (mcs_pos == group_data[i][j])
+ {
+ if (m_bar_valid)
+ {
+ const uint8_t& MCS_POS = mcs_pos;
+ const uint8_t& GROUP_INDEX_A = m_bar_group_index;
+ const uint8_t& GROUP_INDEX_B = i;
+ FAPI_ERR("MCS %d is listed as a member in multiple mirrored groups",
+ mcs_pos);
+ FAPI_SET_HWP_ERROR(
+ rc,
+ RC_MSS_SETUP_BARS_MULTIPLE_GROUP_ERR);
+ break;
+ }
+ m_bar_valid = true;
+ m_bar_group_index = i;
+ }
+ }
+ }
+ if (!rc.ok())
+ {
+ break;
+ }
+
+ // write non-mirrored BARs based on group configuration
+ rc = mss_setup_bars_init_m_bars(
+ *iter,
+ m_bar_valid,
+ group_data[m_bar_group_index]);
+ if (!rc.ok())
+ {
+ FAPI_ERR("Error from mss_setup_bars_init_m_bars");
+ break;
+ }
+
+ // write attribute signifying BARs are valid & MSS inits are finished
+ uint8_t final = 1;
+ rc = FAPI_ATTR_SET(ATTR_MSS_MEM_IPL_COMPLETE, &i_pu_target, final);
+ if (!rc.ok())
+ {
+ FAPI_ERR("Error from FAPI_ATTR_SET (ATTR_MSS_MEM_IPL_COMPLETE)");
+ break;
}
- }
- }
- }
- uint8_t final=1;
- rc=FAPI_ATTR_SET( ATTR_MSS_MEM_IPL_COMPLETE, &i_chip_target ,final);
- if (!rc.ok())
- {
- FAPI_ERR("Error writing TARGET_TYPE_PROC_CHIP");
- break;
}
- }while(0);
+ } while(0);
+
return rc;
- }
+}
+
} // extern "C"
diff --git a/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/mss_setup_bars.H b/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/mss_setup_bars.H
index f86879271..3862438d7 100644
--- a/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/mss_setup_bars.H
+++ b/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/mss_setup_bars.H
@@ -5,7 +5,7 @@
/* */
/* IBM CONFIDENTIAL */
/* */
-/* COPYRIGHT International Business Machines Corp. 2012 */
+/* COPYRIGHT International Business Machines Corp. 2012,2013 */
/* */
/* p1 */
/* */
@@ -20,42 +20,126 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: mss_setup_bars.H,v 1.3 2012/07/17 13:23:32 bellows Exp $
+// $Id: mss_setup_bars.H,v 1.4 2013/04/26 13:57:03 jmcgill Exp $
//------------------------------------------------------------------------------
// *! (C) Copyright International Business Machines Corp. 2011
// *! All Rights Reserved -- Property of IBM
// *! *** IBM Confidential ***
//------------------------------------------------------------------------------
-// *! TITLE : mss_setup_bars.H
-// *! DESCRIPTION : see additional comments below
-// *! OWNER NAME : Girisankar Paulraj Email: gpaulraj@in.ibm.com
-// *! BACKUP NAME : Mark Bellows Email: bellows@us.ibm.com
-// *! ADDITIONAL COMMENTS :
-//
-// Header file for mss_setup_bars.
-//
-//------------------------------------------------------------------------------
-// Don't forget to create CVS comments when you check in your changes!
+// *!
+// *! TITLE : mss_setup_bars.C
+// *! DESCRIPTION : Program MCS base address registers (BARs) (FAPI)
+// *!
+// *! OWNER NAME : Girisankar Paulraj Email: gpaulraj@in.ibm.com
+// *! OWNER NAME : Mark Bellows Email: bellows@us.ibm.com
+// *!
//------------------------------------------------------------------------------
// CHANGE HISTORY:
//------------------------------------------------------------------------------
// Version:| Author: | Date: | Comment:
//---------|----------|---------|-----------------------------------------------
+// 1.3 | bellows | 07/16/12| added in ID tag
// 1.1 | gpaulraj | 03/19/12| Updated
-// 1.3 | bellows | 07/16/12| added in Id tag
+//------------------------------------------------------------------------------
#ifndef MSS_SETUP_BARS_H_
#define MSS_SETUP_BARS_H_
+//------------------------------------------------------------------------------
+// Includes
+//------------------------------------------------------------------------------
+
#include <fapi.H>
#include "p8_scom_addresses.H"
-typedef fapi::ReturnCode (*mss_setup_bars_FP_t)(const fapi::Target&);
+
+//------------------------------------------------------------------------------
+// Constant definitions
+//------------------------------------------------------------------------------
+
+// MCFGP bit/field definitions
+const uint32_t MCFGP_VALID_BIT = 0;
+const uint32_t MCFGP_MCS_UNITS_PER_GROUP_START_BIT = 1;
+const uint32_t MCFGP_MCS_UNITS_PER_GROUP_END_BIT = 3;
+const uint32_t MCFGP_GROUP_MEMBER_ID_START_BIT = 4;
+const uint32_t MCFGP_GROUP_MEMBER_ID_END_BIT = 8;
+const uint32_t MCFGP_ENABLE_RCMD0_BIT = 9;
+const uint32_t MCFGP_ENABLE_RCMD1_BIT = 10;
+const uint32_t MCFGP_GROUP_SIZE_START_BIT = 11;
+const uint32_t MCFGP_GROUP_SIZE_END_BIT = 23;
+const uint32_t MCFGP_RSVD_1_BIT = 24;
+const uint32_t MCFGP_ENABLE_FASTPATH_BIT = 25;
+const uint32_t MCFGP_BASE_ADDRESS_START_BIT = 26;
+const uint32_t MCFGP_BASE_ADDRESS_END_BIT = 43;
+
+// MCFGPA bit/field defintions
+const uint32_t MCFGPA_VALID_BIT = 0;
+const uint32_t MCFGPA_GROUP_SIZE_START_BIT = 11;
+const uint32_t MCFGPA_GROUP_SIZE_END_BIT = 23;
+const uint32_t MCFGPA_BASE_ADDRESS_START_BIT = 26;
+const uint32_t MCFGPA_BASE_ADDRESS_END_BIT = 43;
+
+// MCFGPM bit/field definitions
+const uint32_t MCFGPM_VALID_BIT = 0;
+const uint32_t MCFGPM_GROUP_SIZE_START_BIT = 11;
+const uint32_t MCFGPM_GROUP_SIZE_END_BIT = 23;
+const uint32_t MCFGPM_BASE_ADDRESS_START_BIT = 26;
+const uint32_t MCFGPM_BASE_ADDRESS_END_BIT = 43;
+
+// MCFGPMA bit/field definitions
+const uint32_t MCFGPMA_VALID_BIT = 0;
+const uint32_t MCFGPMA_GROUP_SIZE_START_BIT = 11;
+const uint32_t MCFGPMA_GROUP_SIZE_END_BIT = 23;
+const uint32_t MCFGPMA_BASE_ADDRESS_START_BIT = 26;
+const uint32_t MCFGPMA_BASE_ADDRESS_END_BIT = 43;
+
+// attribute index constants
+// first array dimension (group ID)
+const uint8_t MSS_MCS_GROUP_32_NM_START_INDEX = 0;
+const uint8_t MSS_MCS_GROUP_32_NM_END_INDEX = 7;
+const uint8_t MSS_MCS_GROUP_32_M_START_INDEX = 8;
+const uint8_t MSS_MCS_GROUP_32_M_END_INDEX = 15;
+
+// second array dimension (group definition)
+const uint8_t MSS_MCS_GROUP_32_MCS_SIZE_INDEX = 0;
+const uint8_t MSS_MCS_GROUP_32_MCS_IN_GROUP_INDEX = 1;
+const uint8_t MSS_MCS_GROUP_32_SIZE_INDEX = 2;
+const uint8_t MSS_MCS_GROUP_32_BASE_INDEX = 3;
+const uint8_t MSS_MCS_GROUP_32_MEMBERS_START_INDEX = 4;
+const uint8_t MSS_MCS_GROUP_32_MEMBERS_END_INDEX = 11;
+const uint8_t MSS_MCS_GROUP_32_ALT_VALID_INDEX = 12;
+const uint8_t MSS_MCS_GROUP_32_ALT_SIZE_INDEX = 13;
+const uint8_t MSS_MCS_GROUP_32_ALT_BASE_INDEX = 14;
+const uint8_t MSS_MCS_GROUP_32_LARGEST_MBA_INDEX = 15;
+
+
+//------------------------------------------------------------------------------
+// Structure definitions
+//------------------------------------------------------------------------------
+
+// function pointer typedef definition for HWP call support
+typedef fapi::ReturnCode (*mss_setup_bars_FP_t)(const fapi::Target& i_pu_target);
+
+
+//------------------------------------------------------------------------------
+// Function prototypes
+//------------------------------------------------------------------------------
extern "C"
{
-fapi::ReturnCode mss_setup_bars(const fapi::Target& i_chip_target);
+//------------------------------------------------------------------------------
+// function: program MCS base address registers (BARs)
+// writes non-mirrored (MCFGP/MCFGPA) &
+// mirrored BAR registers (MCFGPM/MCFGPMA)
+// parameters: i_pu_target => chip level target
+// returns: FAPI_RC_SUCCESS if all register writes are successful,
+// RC_MSS_SETUP_BARS_MULTIPLE_GROUP_ERR if a child MCS is listed
+// as a member in multiple groups
+// else failing return code
+//------------------------------------------------------------------------------
+fapi::ReturnCode mss_setup_bars(const fapi::Target& i_pu_target);
+
} // extern "C"
diff --git a/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars.C b/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars.C
index 9396db2c5..2b24bf858 100644
--- a/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars.C
+++ b/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars.C
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: proc_setup_bars.C,v 1.10 2013/04/27 21:48:59 jmcgill Exp $
+// $Id: proc_setup_bars.C,v 1.13 2013/05/09 04:03:25 jmcgill Exp $
// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/proc_setup_bars.C,v $
//------------------------------------------------------------------------------
// *|
@@ -61,6 +61,9 @@ const std::map<uint64_t, uint64_t> proc_setup_bars_fsp_mmio_mask_size::xlate_map
const std::map<uint64_t, uint64_t> proc_setup_bars_nx_mmio_bar_size::xlate_map =
proc_setup_bars_nx_mmio_bar_size::create_map();
+const std::map<uint64_t, uint64_t> proc_setup_bars_as_mmio_bar_size::xlate_map =
+ proc_setup_bars_as_mmio_bar_size::create_map();
+
const std::map<uint64_t, uint64_t> proc_setup_bars_mcd_bar_size::xlate_map =
proc_setup_bars_mcd_bar_size::create_map();
@@ -195,8 +198,7 @@ fapi::ReturnCode proc_setup_bars_memory_get_non_mirrored_attrs(
// return code
fapi::ReturnCode rc;
// temporary attribute storage used to build procedure data structures
- uint64_t non_mirrored_base_attrs[PROC_SETUP_BARS_NUM_NON_MIRRORED_RANGES];
- uint64_t non_mirrored_size_attrs[PROC_SETUP_BARS_NUM_NON_MIRRORED_RANGES];
+ uint32_t mss_mcs_group_32[OPT_MEMMAP_GROUP_32_DIM1][OPT_MEMMAP_GROUP_32_DIM2];
proc_setup_bars_addr_range non_mirrored_ranges[PROC_SETUP_BARS_NUM_NON_MIRRORED_RANGES];
// mark function entry
@@ -205,20 +207,12 @@ fapi::ReturnCode proc_setup_bars_memory_get_non_mirrored_attrs(
do
{
// retrieve non-mirrored memory base address/size attributes
- rc = FAPI_ATTR_GET(ATTR_PROC_MEM_BASES,
- i_target,
- non_mirrored_base_attrs);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_memory_get_non_mirrored_attrs: Error querying ATTR_PROC_MEM_BASES");
- break;
- }
- rc = FAPI_ATTR_GET(ATTR_PROC_MEM_SIZES,
+ rc = FAPI_ATTR_GET(ATTR_MSS_MCS_GROUP_32,
i_target,
- non_mirrored_size_attrs);
+ mss_mcs_group_32);
if (!rc.ok())
{
- FAPI_ERR("proc_setup_bars_memory_get_non_mirrored_attrs: Error querying ATTR_PROC_MEM_SIZES");
+ FAPI_ERR("proc_setup_bars_memory_get_non_mirrored_attrs: Error querying ATTR_MSS_MCS_GROUP_32");
break;
}
@@ -226,10 +220,12 @@ fapi::ReturnCode proc_setup_bars_memory_get_non_mirrored_attrs(
for (uint8_t r = 0; r < PROC_SETUP_BARS_NUM_NON_MIRRORED_RANGES; r++)
{
// build range content
- non_mirrored_ranges[r].base_addr = non_mirrored_base_attrs[r];
- non_mirrored_ranges[r].size = non_mirrored_size_attrs[r];
+ non_mirrored_ranges[r].base_addr =
+ (mss_mcs_group_32[OPT_MEMMAP_GROUP_32_NM_START_INDEX+r][OPT_MEMMAP_GROUP_32_BASE_INDEX])*OPT_MEMMAP_GB;
+ non_mirrored_ranges[r].size =
+ (mss_mcs_group_32[OPT_MEMMAP_GROUP_32_NM_START_INDEX+r][OPT_MEMMAP_GROUP_32_SIZE_INDEX])*OPT_MEMMAP_GB;
// consider range enabled if size is non-zero
- non_mirrored_ranges[r].enabled = (non_mirrored_size_attrs[r] != 0x0);
+ non_mirrored_ranges[r].enabled = (non_mirrored_ranges[r].size != 0x0);
// check attribute content
FAPI_DBG("proc_setup_bars_memory_get_non_mirrored_attrs: Range %d", r);
if (proc_setup_bars_common_check_bar(
@@ -319,8 +315,7 @@ fapi::ReturnCode proc_setup_bars_memory_get_mirrored_attrs(
// return code
fapi::ReturnCode rc;
// temporary attribute storage used to build procedure data structures
- uint64_t mirrored_base_attrs[PROC_SETUP_BARS_NUM_MIRRORED_RANGES];
- uint64_t mirrored_size_attrs[PROC_SETUP_BARS_NUM_MIRRORED_RANGES];
+ uint32_t mss_mcs_group_32[OPT_MEMMAP_GROUP_32_DIM1][OPT_MEMMAP_GROUP_32_DIM2];
proc_setup_bars_addr_range mirrored_ranges[PROC_SETUP_BARS_NUM_MIRRORED_RANGES];
// mark function entry
@@ -329,20 +324,12 @@ fapi::ReturnCode proc_setup_bars_memory_get_mirrored_attrs(
do
{
// retrieve mirrored memory base address/size attributes
- rc = FAPI_ATTR_GET(ATTR_PROC_MIRROR_BASES,
- i_target,
- mirrored_base_attrs);
- if (!rc.ok())
- {
- FAPI_ERR("proc_setup_bars_memory_get_mirrored_attrs: Error querying ATTR_PROC_MIRROR_BASE");
- break;
- }
- rc = FAPI_ATTR_GET(ATTR_PROC_MIRROR_SIZES,
+ rc = FAPI_ATTR_GET(ATTR_MSS_MCS_GROUP_32,
i_target,
- mirrored_size_attrs);
+ mss_mcs_group_32);
if (!rc.ok())
{
- FAPI_ERR("proc_setup_bars_memory_get_mirrored_attrs: Error querying ATTR_PROC_MIRROR_SIZE");
+ FAPI_ERR("proc_setup_bars_memory_get_mirrored_attrs: Error querying ATTR_MSS_MCS_GROUP_32");
break;
}
@@ -350,10 +337,12 @@ fapi::ReturnCode proc_setup_bars_memory_get_mirrored_attrs(
for (uint8_t r = 0; r < PROC_SETUP_BARS_NUM_MIRRORED_RANGES; r++)
{
// build range content
- mirrored_ranges[r].base_addr = mirrored_base_attrs[r];
- mirrored_ranges[r].size = mirrored_size_attrs[r];
+ mirrored_ranges[r].base_addr =
+ (mss_mcs_group_32[OPT_MEMMAP_GROUP_32_M_START_INDEX+r][OPT_MEMMAP_GROUP_32_BASE_INDEX])*OPT_MEMMAP_GB;
+ mirrored_ranges[r].size =
+ (mss_mcs_group_32[OPT_MEMMAP_GROUP_32_M_START_INDEX+r][OPT_MEMMAP_GROUP_32_SIZE_INDEX])*OPT_MEMMAP_GB;
// consider range enabled if size is non-zero
- mirrored_ranges[r].enabled = (mirrored_size_attrs[r] != 0x0);
+ mirrored_ranges[r].enabled = (mirrored_ranges[r].size != 0x0);
// check attribute content
FAPI_DBG("proc_setup_bars_memory_get_mirrored_attrs: Range %d", r);
if (proc_setup_bars_common_check_bar(
@@ -899,6 +888,78 @@ fapi::ReturnCode proc_setup_bars_nx_get_mmio_bar_attrs(
//------------------------------------------------------------------------------
+// function: retrieve attributes defining AS MMIO BAR programming
+// parameters: i_target => pointer to chip target
+// io_addr_range => address range structure encapsulating
+// attribute values
+// returns: FAPI_RC_SUCCESS if all attribute reads are successful & values
+// are valid,
+// RC_PROC_SETUP_BARS_AS_MMIO_BAR_ATTR_ERR if chip AS MMIO range
+// attribute content violates expected behavior,
+// else FAPI_ATTR_GET return code
+//------------------------------------------------------------------------------
+fapi::ReturnCode proc_setup_bars_as_get_mmio_bar_attrs(
+ const fapi::Target* i_target,
+ proc_setup_bars_addr_range& io_addr_range)
+{
+ // return code
+ fapi::ReturnCode rc;
+ uint8_t bar_enabled;
+
+ FAPI_DBG("proc_setup_bars_as_get_mmio_bar_attrs: Start");
+ do
+ {
+ // BAR base address
+ rc = FAPI_ATTR_GET(ATTR_PROC_AS_MMIO_BAR_BASE_ADDR,
+ i_target,
+ io_addr_range.base_addr);
+ if (!rc.ok())
+ {
+ FAPI_ERR("proc_setup_bars_as_get_mmio_bar_attrs: Error querying ATTR_PROC_AS_MMIO_BAR_BASE_ADDR");
+ break;
+ }
+
+ // BAR enable
+ rc = FAPI_ATTR_GET(ATTR_PROC_AS_MMIO_BAR_ENABLE,
+ i_target,
+ bar_enabled);
+ if (!rc.ok())
+ {
+ FAPI_ERR("proc_setup_bars_as_get_mmio_bar_attrs: Error querying ATTR_PROC_AS_MMIO_BAR_ENABLE");
+ break;
+ }
+ io_addr_range.enabled = (bar_enabled == 0x1);
+
+ // BAR size
+ rc = FAPI_ATTR_GET(ATTR_PROC_AS_MMIO_BAR_SIZE,
+ i_target,
+ io_addr_range.size);
+ if (!rc.ok())
+ {
+ FAPI_ERR("proc_setup_bars_as_get_mmio_bar_attrs: Error querying ATTR_PROC_AS_MMIO_BAR_SIZE");
+ break;
+ }
+
+ // check BAR attribute content
+ if (proc_setup_bars_common_check_bar(
+ as_mmio_bar_def,
+ io_addr_range) != false)
+ {
+ FAPI_ERR("proc_setup_bars_as_get_mmio_bar_attrs: Error from proc_setup_bars_common_check_bar");
+ const uint64_t& BASE_ADDR = io_addr_range.base_addr;
+ const uint64_t& SIZE = io_addr_range.size;
+ FAPI_SET_HWP_ERROR(rc,
+ RC_PROC_SETUP_BARS_AS_MMIO_BAR_ATTR_ERR);
+ break;
+ }
+ } while(0);
+
+ FAPI_DBG("proc_setup_bars_as_get_mmio_bar_attrs: End");
+ return rc;
+}
+
+
+//------------------------------------------------------------------------------
// function: retrieve attributes defining PCIe IO BAR programming
// parameters: i_target => pointer to chip target
// io_addr_ranges => 2D array of address range structures
@@ -1105,6 +1166,16 @@ fapi::ReturnCode proc_setup_bars_get_bar_attrs(
break;
}
+ FAPI_DBG("proc_setup_bars_get_bar_attrs: Querying base address/size attributes for AS MMIO address range");
+ rc = proc_setup_bars_as_get_mmio_bar_attrs(
+ &(io_smp_chip.chip->this_chip),
+ io_smp_chip.as_mmio_range);
+ if (!rc.ok())
+ {
+ FAPI_ERR("proc_setup_bars_get_bar_attrs: Error from proc_setup_bars_intp_get_bar_attrs");
+ break;
+ }
+
FAPI_DBG("proc_setup_bars_get_bar_attrs: Querying base address/size attributes for PCIe address ranges");
rc = proc_setup_bars_pcie_get_bar_attrs(
&(io_smp_chip.chip->this_chip),
@@ -2362,6 +2433,18 @@ proc_setup_bars_write_local_chip_region_bars(
FAPI_ERR("proc_setup_bars_write_local_chip_region_bars: Error from proc_setup_bars_common_write_bar_reg");
break;
}
+
+ FAPI_DBG("proc_setup_bars_write_local_chip_region_bars: Writing AS MMIO BAR register");
+ rc = proc_setup_bars_common_write_bar_reg(
+ i_smp_chip.chip->this_chip,
+ NX_AS_MMIO_BAR_0x0201309E,
+ as_mmio_bar_reg_def,
+ i_smp_chip.as_mmio_range);
+ if (!rc.ok())
+ {
+ FAPI_ERR("proc_setup_bars_write_local_chip_region_bars: Error from proc_setup_bars_common_write_bar_reg");
+ break;
+ }
}
// NX (non-mirrored)
diff --git a/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars.H b/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars.H
index 871a79d09..4bd959bb2 100644
--- a/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars.H
+++ b/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars.H
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: proc_setup_bars.H,v 1.6 2013/04/27 21:49:01 jmcgill Exp $
+// $Id: proc_setup_bars.H,v 1.8 2013/05/09 04:03:27 jmcgill Exp $
// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/proc_setup_bars.H,v $
//------------------------------------------------------------------------------
// *|
@@ -98,6 +98,7 @@
#include <map>
#include <fapi.H>
#include "proc_fab_smp.H"
+#include "opt_memmap.H"
#include "p8_scom_addresses.H"
@@ -332,6 +333,7 @@ struct proc_setup_bars_smp_chip
proc_setup_bars_addr_range fsp_mmio_mask_range;
proc_setup_bars_addr_range intp_range;
proc_setup_bars_addr_range nx_mmio_range;
+ proc_setup_bars_addr_range as_mmio_range;
proc_setup_bars_addr_range pcie_ranges[PROC_SETUP_BARS_PCIE_NUM_UNITS][PROC_SETUP_BARS_PCIE_RANGES_PER_UNIT];
};
@@ -470,6 +472,21 @@ struct proc_setup_bars_nx_mmio_bar_size
static const std::map<uint64_t, uint64_t> xlate_map;
};
+// define set of AS MMIO mask sizes
+struct proc_setup_bars_as_mmio_bar_size
+{
+ static std::map<uint64_t, uint64_t> create_map()
+ {
+ std::map<uint64_t, uint64_t> m;
+ m[PROC_SETUP_BARS_SIZE_2_MB] = 0x3;
+ m[PROC_SETUP_BARS_SIZE_1_MB] = 0x2;
+ m[PROC_SETUP_BARS_SIZE_512_KB] = 0x1;
+ m[PROC_SETUP_BARS_SIZE_256_KB] = 0x0;
+ return m;
+ }
+ static const std::map<uint64_t, uint64_t> xlate_map;
+};
+
// define set of MCD BAR sizes
struct proc_setup_bars_mcd_bar_size
{
@@ -844,6 +861,32 @@ const proc_setup_bars_bar_reg_def nx_mmio_bar_reg_def =
0x0ULL
};
+// AS MMIO BAR constants
+const proc_setup_bars_bar_def as_mmio_bar_def =
+{
+ 0xFFFC000000000FFFULL, // base: RA 14:51
+ PROC_SETUP_BARS_SIZE_4_KB, // size (min): 4 KB
+ PROC_SETUP_BARS_SIZE_16_GB, // size (max): 16 GB
+ true
+};
+
+const proc_setup_bars_bar_reg_def as_mmio_bar_reg_def =
+{
+ true, // base: bits 14:51
+ PROC_SETUP_BARS_SHIFT_NONE,
+ 0,
+ 14,
+ 51,
+ true, // enable: bit 52
+ 52,
+ true, // size: bits 53:55
+ 53,
+ 55,
+ &proc_setup_bars_as_mmio_bar_size::xlate_map,
+ 0x0ULL,
+ 0x0ULL
+};
+
// MCD Configuration Register constants
const proc_setup_bars_bar_def mcd_bar_def =
{
@@ -1160,6 +1203,8 @@ extern "C"
// attribute content violates expected behavior,
// RC_PROC_SETUP_BARS_NX_MMIO_BAR_ATTR_ERR if chip NX MMIO range
// attribute content violates expected behavior,
+// RC_PROC_SETUP_BARS_NX_MMIO_BAR_ATTR_ERR if chip AS MMIO range
+// attribute content violates expected behavior,
// RC_PROC_SETUP_BARS_PCIE_BAR_ATTR_ERR if individual chip PCIe IO
// range attribute content violates expected behavior,
// RC_PROC_SETUP_BARS_NODE_ADD_INTERNAL_ERR if node map insert fails,
diff --git a/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars_errors.xml b/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars_errors.xml
index 512fa602d..f61538e2a 100644
--- a/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars_errors.xml
+++ b/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars_errors.xml
@@ -1,25 +1,25 @@
-<!-- IBM_PROLOG_BEGIN_TAG
- This is an automatically generated prolog.
-
- $Source: src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars_errors.xml $
-
- IBM CONFIDENTIAL
-
- COPYRIGHT International Business Machines Corp. 2012
-
- p1
-
- Object Code Only (OCO) source materials
- Licensed Internal Code Source Materials
- IBM HostBoot Licensed Internal Code
-
- The source code for this program is not published or other-
- wise divested of its trade secrets, irrespective of what has
- been deposited with the U.S. Copyright Office.
-
- Origin: 30
-
- IBM_PROLOG_END_TAG -->
+<!-- IBM_PROLOG_BEGIN_TAG -->
+<!-- This is an automatically generated prolog. -->
+<!-- -->
+<!-- $Source: src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars_errors.xml $ -->
+<!-- -->
+<!-- IBM CONFIDENTIAL -->
+<!-- -->
+<!-- COPYRIGHT International Business Machines Corp. 2012,2013 -->
+<!-- -->
+<!-- p1 -->
+<!-- -->
+<!-- Object Code Only (OCO) source materials -->
+<!-- Licensed Internal Code Source Materials -->
+<!-- IBM HostBoot Licensed Internal Code -->
+<!-- -->
+<!-- The source code for this program is not published or otherwise -->
+<!-- divested of its trade secrets, irrespective of what has been -->
+<!-- deposited with the U.S. Copyright Office. -->
+<!-- -->
+<!-- Origin: 30 -->
+<!-- -->
+<!-- IBM_PROLOG_END_TAG -->
<!-- Error definitions for proc_setup_bars -->
<hwpErrors>
<!-- *********************************************************************** -->
@@ -97,6 +97,12 @@
<ffdc>SIZE</ffdc>
</hwpError>
<hwpError>
+ <rc>RC_PROC_SETUP_BARS_AS_MMIO_BAR_ATTR_ERR</rc>
+ <description>Invalid definition for AS MMIO BAR address range (from platform attributes).</description>
+ <ffdc>BASE_ADDR</ffdc>
+ <ffdc>SIZE</ffdc>
+ </hwpError>
+ <hwpError>
<rc>RC_PROC_SETUP_BARS_PCIE_BAR_ATTR_ERR</rc>
<description>Invalid definition for PCIe BAR address range (from platform attributes).</description>
<ffdc>UNIT</ffdc>
diff --git a/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars_memory_attributes.xml b/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars_memory_attributes.xml
index cbfe25851..4046388f3 100644
--- a/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars_memory_attributes.xml
+++ b/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars_memory_attributes.xml
@@ -5,7 +5,7 @@
<!-- -->
<!-- IBM CONFIDENTIAL -->
<!-- -->
-<!-- COPYRIGHT International Business Machines Corp. 2012 -->
+<!-- COPYRIGHT International Business Machines Corp. 2012,2013 -->
<!-- -->
<!-- p1 -->
<!-- -->
@@ -24,6 +24,28 @@
<attributes>
<!-- ********************************************************************* -->
<attribute>
+ <id>ATTR_MEM_MIRROR_PLACEMENT_POLICY</id>
+ <targetType>TARGET_TYPE_SYSTEM</targetType>
+ <description>Define placement policy/scheme for non-mirrored/mirrored memory
+ layout
+ creator: platform
+ consumer: opt_memmap
+ firmware notes:
+ NORMAL = non-mirrored start: 0, mirrored start: 512TB
+ FLIPPED = mirrored start: 0, non-mirrored start: 512TB
+ SELECTIVE = non-mirrored/mirrored start (interleaved): 0
+ </description>
+ <valueType>uint8</valueType>
+ <enum>
+ NORMAL = 0x0,
+ FLIPPED = 0x1,
+ SELECTIVE = 0x2
+ </enum>
+ <platInit/>
+ <persistRuntime/>
+ </attribute>
+ <!-- ********************************************************************* -->
+ <attribute>
<id>ATTR_PROC_MEM_BASE</id>
<targetType>TARGET_TYPE_PROC_CHIP</targetType>
<description>Base address for non-mirrored memory regions
@@ -222,4 +244,87 @@
<persistRuntime/>
</attribute>
<!-- ********************************************************************* -->
+ <attribute>
+ <id>ATTR_PROC_HTM_BAR_SIZE</id>
+ <targetType>TARGET_TYPE_PROC_CHIP</targetType>
+ <description>Desired HTM trace memory size value
+ creator: platform
+ firmware notes:
+ set by platform to request size of per-chip area reserved
+ for HTM trace memory
+ </description>
+ <valueType>uint64</valueType>
+ <enum>
+ 256_GB = 0x0000004000000000,
+ 128_GB = 0x0000002000000000,
+ 64_GB = 0x0000001000000000,
+ 32_GB = 0x0000000800000000,
+ 16_GB = 0x0000000400000000,
+ 8_GB = 0x0000000200000000,
+ 4_GB = 0x0000000100000000,
+ 2_GB = 0x0000000080000000,
+ 1_GB = 0x0000000040000000,
+ 512_MB = 0x0000000020000000,
+ 256_MB = 0x0000000010000000,
+ 128_MB = 0x0000000008000000,
+ 64_MB = 0x0000000004000000,
+ 32_MB = 0x0000000002000000,
+ 16_MB = 0x0000000001000000,
+ ZERO = 0x0000000000000000
+ </enum>
+ <platInit/>
+ <persistRuntime/>
+ </attribute>
+ <!-- ********************************************************************* -->
+ <attribute>
+ <id>ATTR_PROC_HTM_BAR_BASE_ADDR</id>
+ <targetType>TARGET_TYPE_PROC_CHIP</targetType>
+ <description>HTM trace memory base address allocated
+ </description>
+ <valueType>uint64</valueType>
+ <writeable/>
+ <persistRuntime/>
+ </attribute>
+ <!-- ********************************************************************* -->
+ <attribute>
+ <id>ATTR_PROC_OCC_SANDBOX_SIZE</id>
+ <targetType>TARGET_TYPE_PROC_CHIP</targetType>
+ <description>Desired size of OCC sandbox memory region
+ creator: platform
+ firmware notes:
+ set by platform to request size of per-chip area reserved
+ for OCC sandbox function
+ </description>
+ <valueType>uint64</valueType>
+ <enum>
+ 256_GB = 0x0000004000000000,
+ 128_GB = 0x0000002000000000,
+ 64_GB = 0x0000001000000000,
+ 32_GB = 0x0000000800000000,
+ 16_GB = 0x0000000400000000,
+ 8_GB = 0x0000000200000000,
+ 4_GB = 0x0000000100000000,
+ 2_GB = 0x0000000080000000,
+ 1_GB = 0x0000000040000000,
+ 512_MB = 0x0000000020000000,
+ 256_MB = 0x0000000010000000,
+ 128_MB = 0x0000000008000000,
+ 64_MB = 0x0000000004000000,
+ 32_MB = 0x0000000002000000,
+ 16_MB = 0x0000000001000000,
+ ZERO = 0x0000000000000000
+ </enum>
+ <platInit/>
+ <persistRuntime/>
+ </attribute>
+ <!-- ********************************************************************* -->
+ <attribute>
+ <id>ATTR_PROC_OCC_SANDBOX_BASE_ADDR</id>
+ <targetType>TARGET_TYPE_PROC_CHIP</targetType>
+ <description>OCC sandbox base address allocated
+ </description>
+ <valueType>uint64</valueType>
+ <writeable/>
+ <persistRuntime/>
+ </attribute>
</attributes>
diff --git a/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars_mmio_attributes.xml b/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars_mmio_attributes.xml
index efede3a78..aa3423f5f 100644
--- a/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars_mmio_attributes.xml
+++ b/src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars_mmio_attributes.xml
@@ -1,25 +1,25 @@
-<!-- IBM_PROLOG_BEGIN_TAG
- This is an automatically generated prolog.
-
- $Source: src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars_mmio_attributes.xml $
-
- IBM CONFIDENTIAL
-
- COPYRIGHT International Business Machines Corp. 2012
-
- p1
-
- Object Code Only (OCO) source materials
- Licensed Internal Code Source Materials
- IBM HostBoot Licensed Internal Code
-
- The source code for this program is not published or other-
- wise divested of its trade secrets, irrespective of what has
- been deposited with the U.S. Copyright Office.
-
- Origin: 30
-
- IBM_PROLOG_END_TAG -->
+<!-- IBM_PROLOG_BEGIN_TAG -->
+<!-- This is an automatically generated prolog. -->
+<!-- -->
+<!-- $Source: src/usr/hwpf/hwp/dram_initialization/proc_setup_bars/proc_setup_bars_mmio_attributes.xml $ -->
+<!-- -->
+<!-- IBM CONFIDENTIAL -->
+<!-- -->
+<!-- COPYRIGHT International Business Machines Corp. 2012,2013 -->
+<!-- -->
+<!-- p1 -->
+<!-- -->
+<!-- Object Code Only (OCO) source materials -->
+<!-- Licensed Internal Code Source Materials -->
+<!-- IBM HostBoot Licensed Internal Code -->
+<!-- -->
+<!-- The source code for this program is not published or otherwise -->
+<!-- divested of its trade secrets, irrespective of what has been -->
+<!-- deposited with the U.S. Copyright Office. -->
+<!-- -->
+<!-- Origin: 30 -->
+<!-- -->
+<!-- IBM_PROLOG_END_TAG -->
<!-- proc_setup_bars_mmio_attributes.xml -->
<attributes>
<!-- ********************************************************************* -->
@@ -163,6 +163,54 @@
</attribute>
<!-- ********************************************************************* -->
<attribute>
+ <id>ATTR_PROC_AS_MMIO_BAR_ENABLE</id>
+ <targetType>TARGET_TYPE_PROC_CHIP</targetType>
+ <description>AS MMIO BAR enable
+ creator: platform
+ consumer: proc_setup_bars
+ firmware notes: none
+ </description>
+ <valueType>uint8</valueType>
+ <enum>DISABLE = 0x0, ENABLE = 0x1</enum>
+ <platInit/>
+ <persistRuntime/>
+ </attribute>
+ <!-- ********************************************************************* -->
+ <attribute>
+ <id>ATTR_PROC_AS_MMIO_BAR_BASE_ADDR</id>
+ <targetType>TARGET_TYPE_PROC_CHIP</targetType>
+ <description>AS MMIO BAR base address value
+ creator: platform
+ consumer: proc_setup_bars
+ firmware notes:
+ 64-bit address representing BAR RA
+ NOTE: BAR register covers RA 14:51
+ </description>
+ <valueType>uint64</valueType>
+ <platInit/>
+ <persistRuntime/>
+ </attribute>
+ <!-- ********************************************************************* -->
+ <attribute>
+ <id>ATTR_PROC_AS_MMIO_BAR_SIZE</id>
+ <targetType>TARGET_TYPE_PROC_CHIP</targetType>
+ <description>AS MMIO BAR size value
+ creator: platform
+ consumer: proc_setup_bars
+ firmware notes: none
+ </description>
+ <valueType>uint64</valueType>
+ <enum>
+ 2_MB = 0x0000000000200000,
+ 1_MB = 0x0000000000100000,
+ 512_KB = 0x0000000000080000,
+ 256_KB = 0x0000000000040000
+ </enum>
+ <platInit/>
+ <persistRuntime/>
+ </attribute>
+ <!-- ********************************************************************* -->
+ <attribute>
<id>ATTR_PROC_NX_MMIO_BAR_ENABLE</id>
<targetType>TARGET_TYPE_PROC_CHIP</targetType>
<description>NX MMIO BAR enable
@@ -303,4 +351,4 @@
<persistRuntime/>
</attribute>
<!-- ********************************************************************* -->
-</attributes> \ No newline at end of file
+</attributes>
diff --git a/src/usr/hwpf/hwp/include/p8_scom_addresses.H b/src/usr/hwpf/hwp/include/p8_scom_addresses.H
index 95ecceed3..ede10ca8c 100755
--- a/src/usr/hwpf/hwp/include/p8_scom_addresses.H
+++ b/src/usr/hwpf/hwp/include/p8_scom_addresses.H
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: p8_scom_addresses.H,v 1.149 2013/05/09 04:05:36 jmcgill Exp $
+// $Id: p8_scom_addresses.H,v 1.150 2013/05/15 04:22:35 jmcgill Exp $
// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/p8_scom_addresses.H,v $
//------------------------------------------------------------------------------
// *! (C) Copyright International Business Machines Corp. 2011
@@ -1113,9 +1113,16 @@ CONST_UINT64_T( X_TRACE_DATA_LO_T1_0x04010801 , ULL(0x04010801) );
//------------------------------------------------------------------------------
// X-BUS PBEN
//------------------------------------------------------------------------------
-CONST_UINT64_T( PB_X_MODE_0x04010C0A , ULL(0x04010C0A) );
+CONST_UINT64_T( PB_X_FIR_0x04010C00 , ULL(0x04010C00) );
+CONST_UINT64_T( PB_X_FIR_AND_0x04010C01 , ULL(0x04010C01) );
+CONST_UINT64_T( PB_X_FIR_OR_0x04010C02 , ULL(0x04010C02) );
+CONST_UINT64_T( PB_X_FIR_MASK_0x04010803 , ULL(0x04010C03) );
+CONST_UINT64_T( PB_X_FIR_MASK_AND_0x04010804 , ULL(0x04010C04) );
+CONST_UINT64_T( PB_X_FIR_MASK_OR_0x04010805 , ULL(0x04010C05) );
+CONST_UINT64_T( PB_X_FIR_ACTION0_0x04010806 , ULL(0x04010C06) );
+CONST_UINT64_T( PB_X_FIR_ACTION1_0x04010807 , ULL(0x04010C07) );
-CONST_UINT64_T( X_PBEN_MISC_FIR_AND_0x04010C01 , ULL(0x04010C01) );
+CONST_UINT64_T( PB_X_MODE_0x04010C0A , ULL(0x04010C0A) );
//------------------------------------------------------------------------------
// X-BUS IOPSI
@@ -1283,6 +1290,15 @@ CONST_UINT64_T( A_HANG_PRE_0x080F0028 , ULL(0x080F0028) ); // AB
//------------------------------------------------------------------------------
// A-BUS PBES
//------------------------------------------------------------------------------
+CONST_UINT64_T( PB_A_FIR_0x08010800 , ULL(0x08010800) );
+CONST_UINT64_T( PB_A_FIR_AND_0x08010801 , ULL(0x08010801) );
+CONST_UINT64_T( PB_A_FIR_OR_0x08010802 , ULL(0x08010802) );
+CONST_UINT64_T( PB_A_FIR_MASK_0x08010803 , ULL(0x08010803) );
+CONST_UINT64_T( PB_A_FIR_MASK_AND_0x08010804 , ULL(0x08010804) );
+CONST_UINT64_T( PB_A_FIR_MASK_OR_0x08010805 , ULL(0x08010805) );
+CONST_UINT64_T( PB_A_FIR_ACTION0_0x08010806 , ULL(0x08010806) );
+CONST_UINT64_T( PB_A_FIR_ACTION1_0x08010807 , ULL(0x08010807) );
+
CONST_UINT64_T( PB_A_MODE_0x0801080A , ULL(0x0801080A) );
CONST_UINT64_T( PB_A_TRACE_0x08010812 , ULL(0x08010812) );
CONST_UINT64_T( PB_A_FMR_CFG_0x08010813 , ULL(0x08010813) );
@@ -1380,8 +1396,25 @@ CONST_UINT64_T( PCIE_PERV_LFIR_ACT1_0x09040011 , ULL(0x09040011) );
CONST_UINT64_T( ES_PBES_WRAP_TOP_FIR_AND_0x09010801 , ULL(0x09010801) );
-CONST_UINT64_T( PCIE_PLL_CNTL_FIR_AND_0x09011401 , ULL(0x09011401) );
-CONST_UINT64_T( PCIE_PLL1_CNTL_FIR_AND_0x09011841 , ULL(0x09011841) );
+CONST_UINT64_T( PCIE_IOP0_PLL_FIR_0x09011400 , ULL(0x09011400) );
+CONST_UINT64_T( PCIE_IOP0_PLL_FIR_AND_0x09011401 , ULL(0x09011401) );
+CONST_UINT64_T( PCIE_IOP0_PLL_FIR_OR_0x09011402 , ULL(0x09011402) );
+CONST_UINT64_T( PCIE_IOP0_PLL_FIR_MASK_0x09011403 , ULL(0x09011403) );
+CONST_UINT64_T( PCIE_IOP0_PLL_FIR_MASK_AND_0x09011404 , ULL(0x09011404) );
+CONST_UINT64_T( PCIE_IOP0_PLL_FIR_MASK_OR_0x09011405 , ULL(0x09011405) );
+CONST_UINT64_T( PCIE_IOP0_PLL_FIR_ACTION0_0x09011406 , ULL(0x09011406) );
+CONST_UINT64_T( PCIE_IOP0_PLL_FIR_ACTION1_0x09011407 , ULL(0x09011407) );
+CONST_UINT64_T( PCIE_IOP0_PLL_FIR_WOF_0x09011408 , ULL(0x09011408) );
+
+CONST_UINT64_T( PCIE_IOP1_PLL_FIR_0x09011840 , ULL(0x09011840) );
+CONST_UINT64_T( PCIE_IOP1_PLL_FIR_AND_0x09011841 , ULL(0x09011841) );
+CONST_UINT64_T( PCIE_IOP1_PLL_FIR_OR_0x09011842 , ULL(0x09011842) );
+CONST_UINT64_T( PCIE_IOP1_PLL_FIR_MASK_0x09011843 , ULL(0x09011843) );
+CONST_UINT64_T( PCIE_IOP1_PLL_FIR_MASK_AND_0x09011844 , ULL(0x09011844) );
+CONST_UINT64_T( PCIE_IOP1_PLL_FIR_MASK_OR_0x09011845 , ULL(0x09011845) );
+CONST_UINT64_T( PCIE_IOP1_PLL_FIR_ACTION0_0x09011846 , ULL(0x09011846) );
+CONST_UINT64_T( PCIE_IOP1_PLL_FIR_ACTION1_0x09011847 , ULL(0x09011847) );
+CONST_UINT64_T( PCIE_IOP1_PLL_FIR_WOF_0x09011848 , ULL(0x09011848) );
//------------------------------------------------------------------------------
// PLL LOCK
@@ -1892,6 +1925,9 @@ This section is automatically updated by CVS when you check in this file.
Be sure to create CVS comments when you commit so that they can be included here.
$Log: p8_scom_addresses.H,v $
+Revision 1.150 2013/05/15 04:22:35 jmcgill
+add PB X/A, PCI IOP PLL FIR register addresses
+
Revision 1.149 2013/05/09 04:05:36 jmcgill
add AS MMIO BAR
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 0c564c3b4..6a6650ad7 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
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: mss_eff_config_termination.C,v 1.18 2013/04/10 16:31:47 lapietra Exp $
+// $Id: mss_eff_config_termination.C,v 1.21 2013/05/07 23:04:38 lapietra 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
@@ -30,7 +30,7 @@
// *! TITLE : mss_eff_config_termination
// *! DESCRIPTION : see additional comments below
// *! OWNER NAME : Dave Cadigan Email: dcadiga@us.ibm.com
-// *! BACKUP NAME : Mark Bellows Email: bellows@us.ibm.com
+// *! BACKUP NAME : Anuwat Saetow Email: asaetow@us.ibm.com
// *! ADDITIONAL COMMENTS :
//
// This procedure is a place holder for attributes set by the machine parsable workbook.
@@ -42,6 +42,9 @@
//------------------------------------------------------------------------------
// Version:| Author: | Date: | Comment:
//---------|----------|---------|-----------------------------------------------
+// 1.21 | dcadiga |07-MAY-13| Fixed RC/A Clk Drive and Impedance Settings, Added RC B4 and some patches to make it work, Added in fix for AL in 2N mode
+// 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.16 | dcadiga |25-MAR-13| Added in 2N Addressing Mode.
@@ -101,7 +104,7 @@ uint8_t attr_eff_odt_rd[PORT_SIZE][DIMM_SIZE][RANK_SIZE];
uint8_t attr_eff_odt_wr[PORT_SIZE][DIMM_SIZE][RANK_SIZE];
uint32_t attr_eff_cen_rd_vref[PORT_SIZE];
uint32_t attr_eff_dram_wr_vref[PORT_SIZE];
-//uint8_t attr_eff_dram_wrddr4_vref[PORT_SIZE];
+uint8_t attr_eff_dram_wrddr4_vref[PORT_SIZE];
uint8_t attr_eff_cen_rcv_imp_dq_dqs[PORT_SIZE];
uint8_t attr_eff_cen_drv_imp_dq_dqs[PORT_SIZE];
uint8_t attr_eff_cen_drv_imp_cntl[PORT_SIZE];
@@ -162,6 +165,7 @@ uint8_t attr_eff_cen_phase_rot_m1_cntl_csn3[PORT_SIZE];
uint8_t attr_eff_cen_phase_rot_m1_cntl_odt0[PORT_SIZE];
uint8_t attr_eff_cen_phase_rot_m1_cntl_odt1[PORT_SIZE];
uint8_t attr_eff_dram_2n_mode_enabled;
+uint8_t attr_eff_dram_al;
/*
const uint8_t valid_attrs[200] = {
@@ -370,35 +374,35 @@ attr_eff_cen_phase_rot_m1_cntl_odt1[1]
//Declare the different dimms here:
//Cdimm rc_A
uint32_t cdimm_rca_1r_1333_mba0[200] =
-{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_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_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_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,89,0,91,0,13,13,13,8,5,6,8,7,9,13,17,14,14,14,13,17,12,11,17,18,17,18,0,0,19,0,21,0,0,0,0,0,2,0,19,0,0,0,7,0,0,0,3,0,86,0,92,0,17,15,18,8,6,5,7,6,12,12,18,12,16,15,13,16,10,9,17,18,21,19,0,0,19,0,24,0,2,0,0,0,2,0,20,0,0,0,3,0,0,0,0,0,fapi::ENUM_ATTR_EFF_DRAM_2N_MODE_ENABLED_FALSE
+{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_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_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_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,89,0,91,0,13,13,13,8,5,6,8,7,9,13,17,14,14,14,13,17,12,11,17,18,17,18,0,0,19,0,21,0,0,0,0,0,2,0,19,0,0,0,7,0,0,0,3,0,86,0,92,0,17,15,18,8,6,5,7,6,12,12,18,12,16,15,13,16,10,9,17,18,21,19,0,0,19,0,24,0,2,0,0,0,2,0,20,0,0,0,3,0,0,0,0,0,fapi::ENUM_ATTR_EFF_DRAM_2N_MODE_ENABLED_FALSE
};
uint32_t cdimm_rca_1r_1333_mba1[200] =
-{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_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_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_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,87,0,92,0,18,18,18,11,11,11,13,13,15,18,16,18,17,20,18,15,9,11,14,15,18,14,0,0,26,0,32,0,11,0,0,0,3,0,29,0,0,0,2,0,0,0,10,0,86,0,91,0,12,13,15,6,7,9,9,8,9,15,11,15,12,14,15,12,6,7,12,12,11,11,0,0,17,0,31,0,1,0,0,0,0,0,17,0,0,0,6,0,0,0,1,fapi::ENUM_ATTR_EFF_DRAM_2N_MODE_ENABLED_FALSE
+{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_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_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_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,87,0,92,0,18,18,18,11,11,11,13,13,15,18,16,18,17,20,18,15,9,11,14,15,18,14,0,0,26,0,32,0,11,0,0,0,3,0,29,0,0,0,2,0,0,0,10,0,86,0,91,0,12,13,15,6,7,9,9,8,9,15,11,15,12,14,15,12,6,7,12,12,11,11,0,0,17,0,31,0,1,0,0,0,0,0,17,0,0,0,6,0,0,0,1,fapi::ENUM_ATTR_EFF_DRAM_2N_MODE_ENABLED_FALSE
};
uint32_t cdimm_rca_1r_1600_mba0[200] =
-{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_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_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_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,93,0,96,0,15,16,15,10,7,7,10,9,11,15,20,16,17,16,16,20,14,13,21,22,21,21,0,0,24,0,27,0,0,0,0,0,2,0,24,0,0,0,9,0,0,0,4,0,90,0,98,0,20,18,21,10,7,7,9,7,15,14,22,15,20,18,16,20,12,11,21,22,25,23,0,0,24,0,30,0,3,0,0,0,2,0,25,0,0,0,4,0,0,0,0,fapi::ENUM_ATTR_EFF_DRAM_2N_MODE_ENABLED_FALSE
+{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_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_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_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,93,0,96,0,15,16,15,10,7,7,10,9,11,15,20,16,17,16,16,20,14,13,21,22,21,21,0,0,24,0,27,0,0,0,0,0,2,0,24,0,0,0,9,0,0,0,4,0,90,0,98,0,20,18,21,10,7,7,9,7,15,14,22,15,20,18,16,20,12,11,21,22,25,23,0,0,24,0,30,0,3,0,0,0,2,0,25,0,0,0,4,0,0,0,0,fapi::ENUM_ATTR_EFF_DRAM_2N_MODE_ENABLED_FALSE
};
uint32_t cdimm_rca_1r_1600_mba1[200] =
-{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_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_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_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,91,0,97,0,22,22,21,14,13,14,16,15,19,21,19,22,21,24,22,18,11,13,17,18,22,17,0,0,32,0,39,0,13,0,0,0,3,0,35,0,0,0,3,0,0,0,12,0,90,0,96,0,15,16,18,8,9,10,11,10,11,18,13,18,15,17,18,15,8,8,14,15,13,13,0,0,22,0,38,0,1,0,0,0,0,0,22,0,0,0,7,0,0,0,1,fapi::ENUM_ATTR_EFF_DRAM_2N_MODE_ENABLED_FALSE
+{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_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_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_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,91,0,97,0,22,22,21,14,13,14,16,15,19,21,19,22,21,24,22,18,11,13,17,18,22,17,0,0,32,0,39,0,13,0,0,0,3,0,35,0,0,0,3,0,0,0,12,0,90,0,96,0,15,16,18,8,9,10,11,10,11,18,13,18,15,17,18,15,8,8,14,15,13,13,0,0,22,0,38,0,1,0,0,0,0,0,22,0,0,0,7,0,0,0,1,fapi::ENUM_ATTR_EFF_DRAM_2N_MODE_ENABLED_FALSE
};
uint32_t cdimm_rca_2r_1333_mba0[200] =
-{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_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,95,0,103,0,6,7,7,3,0,0,3,2,4,6,11,8,8,7,7,11,6,6,11,12,11,12,0,0,31,0,24,0,12,0,0,0,14,0,31,0,34,0,19,0,0,0,15,0,90,0,99,0,11,9,12,2,0,0,1,0,7,5,12,6,10,9,7,10,4,4,11,12,15,13,0,0,32,0,27,0,14,0,0,0,14,0,33,0,33,0,15,0,0,0,12,fapi::ENUM_ATTR_EFF_DRAM_2N_MODE_ENABLED_FALSE
+{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_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,95,0,103,0,6,7,7,3,0,0,3,2,4,6,11,8,8,7,7,11,6,6,11,12,11,12,0,0,31,0,24,0,12,0,0,0,14,0,31,0,34,0,19,0,0,0,15,0,90,0,99,0,11,9,12,2,0,0,1,0,7,5,12,6,10,9,7,10,4,4,11,12,15,13,0,0,32,0,27,0,14,0,0,0,14,0,33,0,33,0,15,0,0,0,12,fapi::ENUM_ATTR_EFF_DRAM_2N_MODE_ENABLED_FALSE
};
uint32_t cdimm_rca_2r_1333_mba1[200] =
-{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_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,90,0,98,0,11,11,10,5,4,5,6,6,9,10,8,11,10,13,11,8,3,4,7,7,11,7,0,0,38,0,34,0,21,0,0,0,14,0,41,0,34,0,13,0,0,0,21,0,91,0,99,0,7,8,10,2,2,4,4,3,5,10,5,10,7,9,10,7,1,2,6,7,5,5,0,0,31,0,36,0,14,0,0,0,13,0,31,0,32,0,19,0,0,0,13,0,fapi::ENUM_ATTR_EFF_DRAM_2N_MODE_ENABLED_FALSE
+{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_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,90,0,98,0,11,11,10,5,4,5,6,6,9,10,8,11,10,13,11,8,3,4,7,7,11,7,0,0,38,0,34,0,21,0,0,0,14,0,41,0,34,0,13,0,0,0,21,0,91,0,99,0,7,8,10,2,2,4,4,3,5,10,5,10,7,9,10,7,1,2,6,7,5,5,0,0,31,0,36,0,14,0,0,0,13,0,31,0,32,0,19,0,0,0,13,0,fapi::ENUM_ATTR_EFF_DRAM_2N_MODE_ENABLED_FALSE
};
uint32_t cdimm_rca_2r_1600_mba0[200] =
-{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_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,100,0,109,0,9,9,9,3,0,0,3,2,4,8,14,10,10,10,9,14,7,6,14,15,14,15,0,0,37,0,29,0,14,0,0,0,16,0,37,0,40,0,23,0,0,0,17,0,95,0,105,0,13,11,14,3,0,0,2,0,8,7,15,8,13,11,9,13,5,4,14,15,18,16,0,0,38,0,32,0,16,0,0,0,16,0,39,0,40,0,18,0,0,0,14,0,fapi::ENUM_ATTR_EFF_DRAM_2N_MODE_ENABLED_FALSE
+{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_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,100,0,109,0,9,9,9,3,0,0,3,2,4,8,14,10,10,10,9,14,7,6,14,15,14,15,0,0,37,0,29,0,14,0,0,0,16,0,37,0,40,0,23,0,0,0,17,0,95,0,105,0,13,11,14,3,0,0,2,0,8,7,15,8,13,11,9,13,5,4,14,15,18,16,0,0,38,0,32,0,16,0,0,0,16,0,39,0,40,0,18,0,0,0,14,0,fapi::ENUM_ATTR_EFF_DRAM_2N_MODE_ENABLED_FALSE
};
uint32_t cdimm_rca_2r_1600_mba1[200] =
-{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_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,95,0,104,0,14,14,13,6,5,6,8,8,11,13,11,14,12,16,14,10,3,5,9,9,13,9,0,0,44,0,40,0,25,0,0,0,16,0,47,0,41,0,15,0,0,0,24,0,96,0,104,0,9,10,12,2,3,4,5,4,5,12,7,12,8,11,12,9,1,2,8,9,7,7,0,0,37,0,42,0,15,0,0,0,15,0,36,0,38,0,21,0,0,0,15,0,fapi::ENUM_ATTR_EFF_DRAM_2N_MODE_ENABLED_FALSE
+{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_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,95,0,104,0,14,14,13,6,5,6,8,8,11,13,11,14,12,16,14,10,3,5,9,9,13,9,0,0,44,0,40,0,25,0,0,0,16,0,47,0,41,0,15,0,0,0,24,0,96,0,104,0,9,10,12,2,3,4,5,4,5,12,7,12,8,11,12,9,1,2,8,9,7,7,0,0,37,0,42,0,15,0,0,0,15,0,36,0,38,0,21,0,0,0,15,0,fapi::ENUM_ATTR_EFF_DRAM_2N_MODE_ENABLED_FALSE
};
//Cdimm rc_A DD1.0
@@ -433,6 +437,67 @@ uint32_t cdimm_rca_2r_1600_mba1_DD10[200] =
{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_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM30,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,63,0,72,0,0,64,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,12,0,8,0,0,0,0,0,0,0,15,0,9,0,0,0,0,0,0,64,64,0,72,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,10,0,64,0,0,0,64,0,4,0,6,0,0,0,64,0,0,0,fapi::ENUM_ATTR_EFF_DRAM_2N_MODE_ENABLED_FALSE
};
+//RCB
+
+uint32_t cdimm_rcb_2r_1333_mba0[200] =
+{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_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_4V_NS,102,100,100,101,1,2,2,3,0,0,4,2,4,1,7,3,3,2,2,7,8,7,7,8,7,8,0,0,22,0,29,0,19,0,0,0,21,0,22,0,31,0,29,0,0,0,23,0,96,110,98,109,6,4,7,4,1,1,3,1,9,0,7,1,5,4,2,6,6,5,6,8,11,9,0,0,22,0,26,0,23,0,0,0,22,0,24,0,26,0,25,0,0,0,20,0,fapi::ENUM_ATTR_EFF_DRAM_2N_MODE_ENABLED_FALSE,fapi::ENUM_ATTR_EFF_DRAM_2N_MODE_ENABLED_FALSE
+
+};
+
+uint32_t cdimm_rcb_2r_1333_mba1[200] =
+{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_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_4V_NS,98,99,98,100,9,9,9,4,3,4,6,6,10,9,5,9,8,12,10,5,0,3,3,4,9,3,0,0,16,0,44,0,20,0,0,0,1,0,18,0,45,0,1,0,0,0,18,0,100,99,100,99,5,6,9,1,2,3,4,3,4,9,3,9,5,8,9,5,0,1,4,5,3,3,0,0,6,0,40,0,4,0,0,0,4,0,6,0,39,0,14,0,0,0,4,0,fapi::ENUM_ATTR_EFF_DRAM_2N_MODE_ENABLED_FALSE,fapi::ENUM_ATTR_EFF_DRAM_2N_MODE_ENABLED_FALSE
+
+};
+
+uint32_t cdimm_rcb_2r_1600_mba0[200] =
+{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_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_4V_NS,108,106,106,108,2,2,2,3,0,0,4,2,5,1,7,3,4,3,2,7,8,7,8,9,8,8,0,0,29,0,37,0,24,0,0,0,27,0,29,0,39,0,36,0,0,0,29,0,99,119,101,119,7,5,8,4,1,1,3,1,10,0,8,1,6,5,2,6,7,6,7,9,13,10,0,0,28,0,29,0,27,0,0,0,27,0,29,0,30,0,29,0,0,0,23,0,fapi::ENUM_ATTR_EFF_DRAM_2N_MODE_ENABLED_FALSE,fapi::ENUM_ATTR_EFF_DRAM_2N_MODE_ENABLED_FALSE
+
+};
+
+uint32_t cdimm_rcb_2r_1600_mba1[200] =
+{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_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_4V_NS,105,112,105,112,10,10,9,4,3,4,6,6,10,9,6,10,8,13,10,5,0,3,3,4,9,3,0,0,22,0,53,0,26,0,0,0,10,0,25,0,54,0,10,0,0,0,25,0,108,106,109,106,6,7,10,1,2,4,5,4,5,11,4,10,5,9,10,6,0,1,4,6,3,3,0,0,8,0,49,0,7,0,0,0,6,0,8,0,48,0,18,0,0,0,7,0,fapi::ENUM_ATTR_EFF_DRAM_2N_MODE_ENABLED_FALSE,fapi::ENUM_ATTR_EFF_DRAM_2N_MODE_ENABLED_FALSE
+
+};
+
+//RCB4
+
+
+uint32_t cdimm_rcb4_2r_1600_mba0[200] =
+{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_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_4V_NS,108,106,106,108,2,2,2,3,0,0,4,2,5,1,7,3,4,3,2,7,8,7,8,9,8,8,0,9,29,0,37,0,24,0,0,0,27,0,29,0,39,0,36,0,0,0,29,0,99,119,101,119,7,5,8,4,1,1,3,1,10,0,8,1,6,5,2,6,7,6,7,9,13,10,0,3,28,0,29,0,27,0,0,0,27,0,29,0,30,0,29,0,0,0,23,0,fapi::ENUM_ATTR_EFF_DRAM_2N_MODE_ENABLED_FALSE,fapi::ENUM_ATTR_EFF_DRAM_2N_MODE_ENABLED_FALSE
+
+};
+
+uint32_t cdimm_rcb4_2r_1600_mba1[200] =
+{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_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM40,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_4V_NS,105,112,105,112,10,10,9,4,3,4,6,6,10,9,6,10,8,13,10,5,0,3,3,4,9,3,0,4,22,0,53,0,26,0,0,0,10,0,25,0,54,0,10,0,0,0,25,0,108,106,109,106,6,7,10,1,2,4,5,4,5,11,4,10,5,9,10,6,0,1,4,6,3,3,0,3,8,0,49,0,7,0,0,0,6,0,8,0,48,0,18,0,0,0,7,0,fapi::ENUM_ATTR_EFF_DRAM_2N_MODE_ENABLED_FALSE,fapi::ENUM_ATTR_EFF_DRAM_2N_MODE_ENABLED_FALSE
+
+};
+
+
+//RCC
+
+uint32_t cdimm_rcc_2r_1333_mba0[200] =
+{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_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM15,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM15,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM15,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM15,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,94,0,95,0,19,19,19,19,17,16,18,14,19,19,22,20,20,19,19,23,20,18,22,25,24,24,0,0,0,0,64,0,5,0,0,0,8,0,0,0,66,0,16,0,0,0,10,0,91,0,95,0,22,20,23,18,16,15,17,13,22,17,22,17,21,21,18,22,18,16,21,24,27,25,0,0,0,0,63,0,7,0,0,0,6,0,1,0,64,0,9,0,0,0,3,0,fapi::ENUM_ATTR_EFF_DRAM_2N_MODE_ENABLED_FALSE,fapi::ENUM_ATTR_EFF_DRAM_2N_MODE_ENABLED_FALSE
+
+};
+
+uint32_t cdimm_rcc_2r_1333_mba1[200] =
+{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_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM15,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM15,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM15,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM15,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,84,0,86,0,12,12,11,13,13,12,13,10,18,11,9,12,11,14,12,9,8,8,7,9,12,8,0,0,1,0,62,0,12,0,0,0,0,0,4,0,62,0,0,0,0,0,11,0,94,0,96,0,20,21,23,20,21,22,22,18,19,24,17,23,18,20,23,20,16,15,18,20,18,18,0,0,0,0,67,0,2,0,0,0,2,0,0,0,66,0,11,0,0,0,2,0,fapi::ENUM_ATTR_EFF_DRAM_2N_MODE_ENABLED_FALSE,fapi::ENUM_ATTR_EFF_DRAM_2N_MODE_ENABLED_FALSE
+
+};
+
+uint32_t cdimm_rcc_2r_1600_mba0[200] =
+{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_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM15,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM15,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM15,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM15,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,101,0,100,0,21,22,22,22,20,18,21,13,22,21,25,23,23,22,22,26,22,20,25,28,27,27,0,0,0,0,79,0,4,0,0,0,8,0,0,0,82,0,19,0,0,0,10,0,98,0,102,0,27,25,28,23,21,18,20,13,28,21,26,22,26,25,23,26,21,19,26,29,31,29,0,0,0,0,81,0,11,0,0,0,11,0,1,0,82,0,14,0,0,0,7,0,fapi::ENUM_ATTR_EFF_DRAM_2N_MODE_ENABLED_FALSE,fapi::ENUM_ATTR_EFF_DRAM_2N_MODE_ENABLED_FALSE
+
+};
+
+uint32_t cdimm_rcc_2r_1600_mba1[200] =
+{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_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RON_OHM34,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_NOM_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_OHM120,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,fapi::ENUM_ATTR_EFF_DRAM_RTT_WR_DISABLE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,0xA0,0x00,0x00,0x00,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_CEN_RD_VREF_VDD50000,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_DRAM_WR_VREF_VDD500,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_RCV_IMP_DQ_DQS_OHM60,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_DQ_DQS_OHM34_FFE0,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM15,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CNTL_OHM15,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_ADDR_OHM20,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM15,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_CLK_OHM15,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_DRV_IMP_SPCKE_OHM40,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_DQ_DQS_SLEW_4V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CNTL_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_ADDR_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_CLK_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,fapi::ENUM_ATTR_EFF_CEN_SLEW_RATE_SPCKE_SLEW_3V_NS,90,0,91,0,15,15,15,16,16,15,17,11,21,15,12,15,14,18,15,12,8,10,10,12,15,11,0,0,3,0,79,0,17,0,0,0,1,0,6,0,80,0,0,0,0,0,16,0,101,0,102,0,23,24,27,23,25,25,25,18,22,28,21,28,22,24,27,23,18,18,21,23,21,21,0,0,0,0,84,0,4,0,0,0,3,0,0,0,83,0,14,0,0,0,4,0,fapi::ENUM_ATTR_EFF_DRAM_2N_MODE_ENABLED_FALSE,fapi::ENUM_ATTR_EFF_DRAM_2N_MODE_ENABLED_FALSE
+
+};
+
+
+
+
//RDIMM A/B Ports MBA0 Glacier
uint32_t rdimm_glacier_1600_r10_mba0[200] =
@@ -549,6 +614,7 @@ fapi::ReturnCode mss_eff_config_termination(const fapi::Target i_target_mba) {
uint32_t l_mss_volt = 0;
uint8_t l_nwell_misplacement = 0;
uint8_t l_num_ranks_per_dimm_u8array[PORT_SIZE][DIMM_SIZE];
+ uint8_t l_stack_type_u8array[PORT_SIZE][DIMM_SIZE];
// 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,
@@ -566,13 +632,17 @@ fapi::ReturnCode mss_eff_config_termination(const fapi::Target i_target_mba) {
FAPI_ERR("Invalid 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;
}
+ rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_AL, &i_target_mba, attr_eff_dram_al); 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_STACK_TYPE, &i_target_mba, l_stack_type_u8array); if(rc) return rc;
rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_GEN, &i_target_mba, l_dram_gen_u8); 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_CUSTOM_DIMM, &i_target_mba, l_dimm_custom_u8); if(rc) return rc;
rc = FAPI_ATTR_GET(ATTR_EFF_NUM_DROPS_PER_PORT, &i_target_mba, l_num_drops_per_port); if(rc) return rc;
rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_WIDTH, &i_target_mba, l_dram_width_u8); if(rc) return rc;
-
+
+
+
// Fetch impacted attributes
uint64_t l_attr_eff_dimm_rcd_cntl_word_0_15[PORT_SIZE][DIMM_SIZE];
@@ -585,7 +655,8 @@ fapi::ReturnCode mss_eff_config_termination(const fapi::Target i_target_mba) {
// Define local attribute variables
uint8_t l_attr_mss_cal_step_enable = 0xFF;
-
+ //DEBUG MESSAGE!
+ FAPI_INF("DRAM GEN %d WIDTH %d 00R %d 10R %d 01R %d 11R %d DPP %d stack %d\n",l_dram_gen_u8,l_dram_width_u8,l_num_ranks_per_dimm_u8array[0][0],l_num_ranks_per_dimm_u8array[1][0],l_num_ranks_per_dimm_u8array[0][1],l_num_ranks_per_dimm_u8array[1][1],l_num_drops_per_port,l_stack_type_u8array[0][0]);
//Now, Determine The Type Of Dimm We Are Using
//l_target_mba_pos == 0,1 - MBA POS
@@ -613,8 +684,8 @@ fapi::ReturnCode mss_eff_config_termination(const fapi::Target i_target_mba) {
else if( (l_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_UDIMM) || (l_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_CDIMM) ){
if((l_dimm_custom_u8 == fapi::ENUM_ATTR_EFF_CUSTOM_DIMM_YES) || (l_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_CDIMM) ){
//This is a CDIMM!
- if((l_num_ranks_per_dimm_u8array[0][0] == 1) && (l_num_ranks_per_dimm_u8array[1][0] == 1) && (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_SINGLE)){
- //1R Cdimm
+ if((l_num_ranks_per_dimm_u8array[0][0] == 1) && (l_num_ranks_per_dimm_u8array[1][0] == 1) && (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_SINGLE) && (l_dram_width_u8 == 8) && (l_stack_type_u8array[0][0] == 0) && (l_dram_gen_u8 == 1)){
+ //1R Cdimm RCA
if ( l_mss_freq <= 1466 ) { // 1333Mbps
if((l_target_mba_pos == 0) && (l_nwell_misplacement == fapi::ENUM_ATTR_MSS_NWELL_MISPLACEMENT_FALSE)){
memcpy(base_var_array,cdimm_rca_1r_1333_mba0,200*sizeof(uint32_t));
@@ -671,8 +742,8 @@ fapi::ReturnCode mss_eff_config_termination(const fapi::Target i_target_mba) {
}//1600 1R
}//1R CDIMM
- else if((l_num_ranks_per_dimm_u8array[0][0] == 1) && (l_num_ranks_per_dimm_u8array[1][0] == 1) && (l_num_ranks_per_dimm_u8array[0][1] == 1) && (l_num_ranks_per_dimm_u8array[1][1] == 1) && (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_DUAL)){
- //2R Cdimm
+ else if((l_num_ranks_per_dimm_u8array[0][0] == 1) && (l_num_ranks_per_dimm_u8array[1][0] == 1) && (l_num_ranks_per_dimm_u8array[0][1] == 1) && (l_num_ranks_per_dimm_u8array[1][1] == 1) && (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_DUAL) && (l_dram_width_u8 == 8) && (l_stack_type_u8array[0][0] == 0) && (l_dram_gen_u8 == 1)){
+ //2R Cdimm RCA
if ( l_mss_freq <= 1466 ) { // 1333Mbps
if((l_target_mba_pos == 0) && (l_nwell_misplacement == fapi::ENUM_ATTR_MSS_NWELL_MISPLACEMENT_FALSE)){
memcpy(base_var_array,cdimm_rca_2r_1333_mba0,200*sizeof(uint32_t));
@@ -696,7 +767,7 @@ fapi::ReturnCode mss_eff_config_termination(const fapi::Target i_target_mba) {
}
else{
- FAPI_ERR("Invalid Dimm Type CDIMM FREQ %d\n",l_mss_freq);
+ FAPI_ERR("Invalid Dimm Type CDIMM RCA FREQ %d\n",l_mss_freq);
FAPI_SET_HWP_ERROR(rc, RC_MSS_PLACE_HOLDER_ERROR); return rc;
}
} else if ( l_mss_freq <= 1733 ) { // 1600Mbps
@@ -722,16 +793,111 @@ fapi::ReturnCode mss_eff_config_termination(const fapi::Target i_target_mba) {
}
else{
- FAPI_ERR("Invalid Dimm Type CDIMM FREQ %d\n",l_mss_freq);
+ FAPI_ERR("Invalid Dimm Type CDIMM RCA FREQ %d\n",l_mss_freq);
FAPI_SET_HWP_ERROR(rc, RC_MSS_PLACE_HOLDER_ERROR); return rc;
}
}//1600 2R
- }//2R CDIMM
- else{
- FAPI_ERR("Invalid Dimm Type CDIMM FREQ %d\n",l_mss_freq);
- FAPI_SET_HWP_ERROR(rc, RC_MSS_PLACE_HOLDER_ERROR); return rc;
- }
+ }//2R CDIMM RCA
+ else if((l_num_ranks_per_dimm_u8array[0][0] == 1) && (l_num_ranks_per_dimm_u8array[1][0] == 1) && (l_num_ranks_per_dimm_u8array[0][1] == 1) && (l_num_ranks_per_dimm_u8array[1][1] == 1) && (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_DUAL) && (l_dram_width_u8 == 4) && (l_stack_type_u8array[0][0] == 0) && (l_dram_gen_u8 == 1)){
+ //2R Cdimm RCB
+ if ( l_mss_freq <= 1466 ) { // 1333Mbps
+ if(l_target_mba_pos == 0){
+ memcpy(base_var_array,cdimm_rcb_2r_1333_mba0,200*sizeof(uint32_t));
+ FAPI_INF("CDIMM rcb_2r_1333 MBA0 \n");
+
+
+ }
+ else if(l_target_mba_pos == 1){
+ memcpy(base_var_array,cdimm_rcb_2r_1333_mba1,200*sizeof(uint32_t));
+ FAPI_INF("CDIMM rcb_2r_1333 MBA1 \n");
+
+ }
+ else{
+ FAPI_ERR("Invalid Dimm Type CDIMM RCB FREQ %d\n",l_mss_freq);
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_PLACE_HOLDER_ERROR); return rc;
+ }
+
+ } else if ( l_mss_freq <= 1733 ) { // 1600Mbps
+ if(l_target_mba_pos == 0){
+ memcpy(base_var_array,cdimm_rcb_2r_1600_mba0,200*sizeof(uint32_t));
+ FAPI_INF("CDIMM rcb_2r_1600 MBA0 \n");
+
+
+ }
+ else if(l_target_mba_pos == 1){
+ memcpy(base_var_array,cdimm_rcb_2r_1600_mba1,200*sizeof(uint32_t));
+ FAPI_INF("CDIMM rcb_2r_1600 MBA1 \n");
+
+ }
+ else{
+ FAPI_ERR("Invalid Dimm Type CDIMM RCB FREQ %d\n",l_mss_freq);
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_PLACE_HOLDER_ERROR); return rc;
+ }
+ }
+ }//CDIMM RCB
+ else if((l_num_ranks_per_dimm_u8array[0][0] == 1) && (l_num_ranks_per_dimm_u8array[1][0] == 1) && ((l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_DUAL) || (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_SINGLE)) && (l_dram_width_u8 == 4) && (l_stack_type_u8array[0][0] == 0) && (l_dram_gen_u8 == 2)){
+ //2R Cdimm RCB4
+ if ( l_mss_freq <= 1733 ) { // 1600Mbps
+ if(l_target_mba_pos == 0){
+ memcpy(base_var_array,cdimm_rcb4_2r_1600_mba0,200*sizeof(uint32_t));
+ FAPI_INF("CDIMM rcb4_2r_1600 MBA0 \n");
+
+
+ }
+ else if(l_target_mba_pos == 1){
+ memcpy(base_var_array,cdimm_rcb4_2r_1600_mba1,200*sizeof(uint32_t));
+ FAPI_INF("CDIMM rcb4_2r_1600 MBA1 \n");
+
+ }
+ else{
+ FAPI_ERR("Invalid Dimm Type CDIMM RCB4 FREQ %d\n",l_mss_freq);
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_PLACE_HOLDER_ERROR); return rc;
+ }
+ }
+ }//CDIMM RCB4
+ else if((l_num_ranks_per_dimm_u8array[0][0] == 1) && (l_num_ranks_per_dimm_u8array[1][0] == 1) && (l_num_ranks_per_dimm_u8array[0][1] == 1) && (l_num_ranks_per_dimm_u8array[1][1] == 1) && (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_DUAL) && (l_dram_width_u8 == 4) && (l_stack_type_u8array[0][0] == 1) && (l_dram_gen_u8 == 1)){
+ //2R Cdimm RCC
+ if ( l_mss_freq <= 1466 ) { // 1333Mbps
+ if(l_target_mba_pos == 0){
+ memcpy(base_var_array,cdimm_rcc_2r_1333_mba0,200*sizeof(uint32_t));
+ FAPI_INF("CDIMM rcc_2r_1333 MBA0 \n");
+
+
+ }
+ else if(l_target_mba_pos == 1){
+ memcpy(base_var_array,cdimm_rcc_2r_1333_mba1,200*sizeof(uint32_t));
+ FAPI_INF("CDIMM rcc_2r_1333 MBA1 \n");
+
+ }
+ else{
+ FAPI_ERR("Invalid Dimm Type CDIMM RCC FREQ %d\n",l_mss_freq);
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_PLACE_HOLDER_ERROR); return rc;
+ }
+
+ } else if ( l_mss_freq <= 1733 ) { // 1600Mbps
+ if(l_target_mba_pos == 0){
+ memcpy(base_var_array,cdimm_rcc_2r_1600_mba0,200*sizeof(uint32_t));
+ FAPI_INF("CDIMM rcc_2r_1600 MBA0 \n");
+
+
+ }
+ else if(l_target_mba_pos == 1){
+ memcpy(base_var_array,cdimm_rcc_2r_1600_mba1,200*sizeof(uint32_t));
+ FAPI_INF("CDIMM rcc_2r_1600 MBA1 \n");
+
+ }
+ else{
+ FAPI_ERR("Invalid Dimm Type CDIMM RCC FREQ %d\n",l_mss_freq);
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_PLACE_HOLDER_ERROR); return rc;
+ }
+ }
+ }//CDIMM RCC
+ else{
+ FAPI_ERR("Invalid Dimm Type");
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_PLACE_HOLDER_ERROR); return rc;
+
+ }
}//End CDIMM
else{
//This is a UDIMM!
@@ -778,10 +944,16 @@ fapi::ReturnCode mss_eff_config_termination(const fapi::Target i_target_mba) {
else if( l_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_RDIMM ){
if( l_target_mba_pos == 0){
if ( l_mss_freq <= 1466 ) { // 1333Mbps
+
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_glacier_1333_r20e_mba0,200*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] == 1) && (l_num_ranks_per_dimm_u8array[0][1] == 0)){
+ //Removed Width Check, use settings for either x8 or x4, use 1600 settings for 1333!
+ memcpy(base_var_array,rdimm_glacier_1600_r10_mba0,200*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] == 2) && (l_num_ranks_per_dimm_u8array[0][1] == 0) && (l_dram_width_u8 == 8)){
memcpy(base_var_array,rdimm_glacier_1333_r20b_mba0,200*sizeof(uint32_t));
FAPI_INF("RDIMM r20b %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());
@@ -796,18 +968,27 @@ fapi::ReturnCode mss_eff_config_termination(const fapi::Target i_target_mba) {
}
} 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_dram_width_u8 == 8)){
+ if((l_num_ranks_per_dimm_u8array[0][0] == 1) && (l_num_ranks_per_dimm_u8array[0][1] == 0)){
+ //Removed Width Check, use settings for either x8 or x4
memcpy(base_var_array,rdimm_glacier_1600_r10_mba0,200*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] == 2) && (l_num_ranks_per_dimm_u8array[0][1] == 0) && (l_dram_width_u8 == 4)){
+
memcpy(base_var_array,rdimm_glacier_1600_r20e_mba0,200*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_dram_width_u8 == 8)){
memcpy(base_var_array,rdimm_glacier_1600_r20b_mba0,200*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] == 4) && (l_num_ranks_per_dimm_u8array[0][1] == 0)){
+ //USE 1333 settings at 1600
+ memcpy(base_var_array,rdimm_glacier_1333_r40_mba0,200*sizeof(uint32_t));
+ FAPI_INF("RDIMM r40 %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());
+ }
+
else{
FAPI_ERR("Invalid Dimm Type RDIMM FREQ %d MBA0\n",l_mss_freq);
FAPI_SET_HWP_ERROR(rc, RC_MSS_PLACE_HOLDER_ERROR); return rc;
@@ -854,6 +1035,13 @@ fapi::ReturnCode mss_eff_config_termination(const fapi::Target i_target_mba) {
memcpy(base_var_array,rdimm_glacier_1333_r22b_mba1,200*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,200*sizeof(uint32_t));
+ FAPI_INF("RDIMM r40 %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());
+ }
+
+
else{
FAPI_ERR("Invalid Dimm Type RDIMM FREQ %d HERE MBA1\n",l_mss_freq);
FAPI_SET_HWP_ERROR(rc, RC_MSS_PLACE_HOLDER_ERROR); return rc;
@@ -869,8 +1057,9 @@ fapi::ReturnCode mss_eff_config_termination(const fapi::Target i_target_mba) {
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,200*sizeof(uint32_t));
- FAPI_INF("RDIMM r20e %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());
+ memcpy(base_var_array,rdimm_glacier_1600_r20e_mba1,200*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)){
memcpy(base_var_array,rdimm_glacier_1600_r20b_mba1,200*sizeof(uint32_t));
@@ -1048,10 +1237,17 @@ fapi::ReturnCode mss_eff_config_termination(const fapi::Target i_target_mba) {
attr_eff_odt_wr[1][1][3] = base_var_array[i++];
attr_eff_cen_rd_vref[0] = base_var_array[i++];
attr_eff_cen_rd_vref[1] = base_var_array[i++];
- attr_eff_dram_wr_vref[0] = base_var_array[i++];
- attr_eff_dram_wr_vref[1] = base_var_array[i++];
- //attr_eff_dram_wrddr4_vref[0] = base_var_array[i++];
- //attr_eff_dram_wrddr4_vref[1] = base_var_array[i++];
+ if(l_dram_gen_u8 == 1){
+ attr_eff_dram_wr_vref[0] = base_var_array[i++];
+ attr_eff_dram_wr_vref[1] = base_var_array[i++];
+ }
+ else if(l_dram_gen_u8 == 2){
+ attr_eff_dram_wrddr4_vref[0] = base_var_array[i++];
+ attr_eff_dram_wrddr4_vref[1] = base_var_array[i++];
+ //THIS IS A HACK FOR RC B4!!
+ attr_eff_dram_wrddr4_vref[0] = 16;
+ attr_eff_dram_wrddr4_vref[1] = 16;
+ }
attr_eff_cen_rcv_imp_dq_dqs[0] = base_var_array[i++];
attr_eff_cen_rcv_imp_dq_dqs[1] = base_var_array[i++];
attr_eff_cen_drv_imp_dq_dqs[0] = base_var_array[i++];
@@ -1269,6 +1465,9 @@ fapi::ReturnCode mss_eff_config_termination(const fapi::Target i_target_mba) {
rc = FAPI_ATTR_SET(ATTR_EFF_DRAM_RON, &i_target_mba, attr_eff_dram_ron); if(rc) return rc;
rc = FAPI_ATTR_SET(ATTR_EFF_DRAM_RTT_NOM, &i_target_mba, attr_eff_dram_rtt_nom); if(rc) return rc;
rc = FAPI_ATTR_SET(ATTR_EFF_DRAM_RTT_WR, &i_target_mba, attr_eff_dram_rtt_wr); if(rc) return rc;
+ if(l_dram_gen_u8 == 2){
+ rc = FAPI_ATTR_SET(ATTR_EFF_DRAM_WRDDR4_VREF, &i_target_mba, attr_eff_dram_wrddr4_vref); if(rc) return rc;
+ }
rc = FAPI_ATTR_SET(ATTR_EFF_ODT_RD, &i_target_mba, attr_eff_odt_rd); if(rc) return rc;
rc = FAPI_ATTR_SET(ATTR_EFF_ODT_WR, &i_target_mba, attr_eff_odt_wr); if(rc) return rc;
rc = FAPI_ATTR_SET(ATTR_EFF_CEN_PHASE_ROT_M0_CLK_P0, &i_target_mba, attr_eff_cen_phase_rot_m0_clk_p0); if(rc) return rc;
@@ -1320,8 +1519,16 @@ fapi::ReturnCode mss_eff_config_termination(const fapi::Target i_target_mba) {
rc = FAPI_ATTR_SET(ATTR_EFF_CEN_PHASE_ROT_M1_CNTL_ODT0, &i_target_mba, attr_eff_cen_phase_rot_m1_cntl_odt0); if(rc) return rc;
rc = FAPI_ATTR_SET(ATTR_EFF_CEN_PHASE_ROT_M1_CNTL_ODT1, &i_target_mba, attr_eff_cen_phase_rot_m1_cntl_odt1); if(rc) return rc;
rc = FAPI_ATTR_SET(ATTR_EFF_DRAM_2N_MODE_ENABLED, &i_target_mba, attr_eff_dram_2n_mode_enabled); if(rc) return rc;
-
-
+
+ //Set AL to be 1 less IF 2N Mode Is Enabled
+ if(attr_eff_dram_2n_mode_enabled){
+ FAPI_INF("Changing Additive Latency For 2N Mode\nCurrent AL IS %d\n",attr_eff_dram_al);
+ if(attr_eff_dram_al == 1){
+ attr_eff_dram_al = 2;
+ }
+ rc = FAPI_ATTR_SET(ATTR_EFF_DRAM_AL, &i_target_mba, attr_eff_dram_al); if(rc) return rc;
+
+ }
FAPI_INF("%s on %s COMPLETE", PROCEDURE_NAME, i_target_mba.toEcmdString());
return rc;
diff --git a/src/usr/hwpf/hwp/mc_config/mss_eff_config/opt_memmap.C b/src/usr/hwpf/hwp/mc_config/mss_eff_config/opt_memmap.C
index 9725ece00..4dc08f9fd 100644
--- a/src/usr/hwpf/hwp/mc_config/mss_eff_config/opt_memmap.C
+++ b/src/usr/hwpf/hwp/mc_config/mss_eff_config/opt_memmap.C
@@ -20,253 +20,1179 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: opt_memmap.C,v 1.6 2013/02/22 22:27:34 vanlee Exp $
-//------------------------------------------------------------------------------
-// *! (C) Copyright International Business Machines Corp. 2012, 2013
-// *! All Rights Reserved -- Property of IBM
-// *! *** IBM Confidential ***
-//------------------------------------------------------------------------------
-// *! TITLE : opt_memmap.C
-// *! DESCRIPTION : see additional comments below
-//------------------------------------------------------------------------------
-// Don't forget to create CVS comments when you check in your changes!
+// $Id: opt_memmap.C,v 1.8 2013/05/06 15:15:36 jmcgill Exp $
+// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/opt_memmap.C,v $
+
+
//------------------------------------------------------------------------------
-//Owner :- Girisankar paulraj
-//Back-up owner :- Mark bellows
-//
// CHANGE HISTORY:
//------------------------------------------------------------------------------
// Version:| Author: | Date: | Comment:
//---------|----------|---------|-----------------------------------------------
-// 1.1 | vanlee | 12/01/12| First drop
-// 1.4 | vanlee | 01/04/13| Added version string
-// 1.5 | vanlee | 02/20/13| Add init paramter
+// 1.8 | jmcgill | 04/28/13| Add HTM/OCC memory allocation, fix namespace
+// 1.7 | jmcgill | 04/20/13| Rewrite to add additional sorting capabilities
+// | | | desired for exercisor mirroring testing
// 1.6 | vanlee | 02/22/13| Update sort logic of ProcBase class
+// 1.5 | vanlee | 02/20/13| Add init paramter
+// 1.4 | vanlee | 01/04/13| Added version string
+// 1.1 | vanlee | 12/01/12| First drop
+//------------------------------------------------------------------------------
+
//------------------------------------------------------------------------------
-// Design flow
+// Design flow:
//
-// opt_memmap() is run alternatively between two mss_eff_grouping() calls.
+// opt_memmap() interacts with mss_eff_grouping() to define the assignment
+// of non-mirrored/mirrored real address space on each chip in the system
+//
+// opt_memmap() will be called twice in the IPL flow, once before and once
+// after mss_eff_grouping()
//
// 1) Call opt_memmap() with i_init = true
// - Each proc's ATTR_PROC_MEM_BASE attribute is set to 0
// - Each proc's ATTR_PROC_MIRROR_BASE attribute is set to 512TB
-// 2) First mss_eff_grouping() call
+//
+// This provides a basis for mss_eff_grouping() to stack all on-chip
+// groups.
+//
+// 2) mss_eff_grouping() call
// - The HWP updates each proc's ATTR_PROC_MEM_BASES and ATTR_PROC_MEM_SIZES
-// attributes based on installed memory behind each proc
+// attributes based on the address regions allocated for installed memory
+// behind each proc
+// - ATTR_MSS_MCS_GROUP_32 encapsulates the properties of each group formed.
+//
// 3) Call opt_memmap() with i_init = false
-// - Get "effective stackable" size (EffSize) of each proc. Due to (1),
-// (a) EffSize = highest ATTR_PROC_MEM_BASES +
-// its corresponding ATTR_PROC_MEM_SIZES
-// (b) Round up EffSize to a power of 2
-// (c) Save (proc,EffSize) pair to a vector
-// Repeat (a) - (c) for all procs
-// - Sort all (proc,EffSize) pairs of the above vector based on EffSize from
-// smallest to largest
-// - Set the ATTR_PROC_MEM_BASE and ATTR_PROC_MIRROR_BASE attributes for
-// each proc:
-// cur_mem_base = 0
-// cur_mirror_base = 512TB
-// Starting from the last (proc,EffSize) pair of the vector
-// while this (proc,EffSize) pair is not yet processed
-// Begin
-// set this proc ATTR_PROC_MEM_BASE = cur_mem_base
-// set this proc ATTR_PROC_MIRROR_BASE = cur_mirrow_base
-// cur_mem_base += "This proc EffSize"
-// cur_mirrow_base += "This proc EffSize" / 2
-// move backward to preceeding (proc,EffSize) pair
-// End
-// 4) Second mss_eff_grouping() call
-// - The HWP adjusts each proc's ATTR_PROC_MEM_BASES using the updated
-// ATTR_PROC_MEM_BASE value from (3).
+// - Consume mss_eff_grouping() attributes for each proc
+// - Align the per-chip non-mirrored and mirrored stacks on each proc to
+// a common origin (0)
+// - Associate non-mirrored and mirrored partner groups
+// - Resize groups & re-stack if producing selective mirrored config
+// - Get "effective stackable" size of non-mirrored/mirrored regions
+// on each proc
+// - Stack procs based on their effective size and desired placement
+// policy
+// non-mirrored mirrored
+// mirror eff. stacking stacking stacking
+// policy sort criteria origin origin
+// -------- ------------- ------------ --------
+// NORMAL nm 0TB 512TB
+// FLIPPED m 512TB 0TB
+// SELECTIVE nm+m 0TB 0TB
+//
+// - Rewrite all attributes produced by mss_eff_grouping to reflect
+// chip placement
+// - Satisfy requests for HTM/OCC memory reservations on each chip
+// (HTM requests will alter ATTR_PROC_MEM_SIZES/ATTR_PROC_MIRROR_SIZES,
+// as these must reflect the true usable memory allocated for PHYP)
+//------------------------------------------------------------------------------
+
//------------------------------------------------------------------------------
// Includes
//------------------------------------------------------------------------------
#include <opt_memmap.H>
+
+//------------------------------------------------------------------------------
+// Constant definitions
+//------------------------------------------------------------------------------
+
extern "C" {
- using namespace fapi;
+using namespace fapi;
+
+
+//------------------------------------------------------------------------------
+// Function definitions
+//------------------------------------------------------------------------------
+
+
+// round to next largest power of 2
+inline uint64_t PowerOf2Roundedup(uint64_t i_number)
+{
+ if (i_number)
+ {
+ --i_number;
+ i_number |= i_number >> 1;
+ i_number |= i_number >> 2;
+ i_number |= i_number >> 4;
+ i_number |= i_number >> 8;
+ i_number |= i_number >> 16;
+ i_number |= i_number >> 32;
+ ++i_number;
+ }
+ return i_number;
+}
+
+
+// class to represent group of memory controllers
+// shadows attribute data from mss_eff_grouping procedure
+class MemGroup
+{
+
+public:
+
+ // group type (mirrored/non-mirrored)
+ enum group_type { nm = 0, m = 8 };
+
+ // group type
+ group_type iv_group_type;
+ // group ID, 1st dimension index to MSS_MCS_GROUP_32[]
+ uint8_t iv_group_id;
+ // group ID of partner group
+ uint8_t iv_partner_group_id;
+
+ // group parameters
+ uint64_t iv_size_per_mcs;
+ uint8_t iv_group_size;
+ uint64_t iv_size;
+ uint64_t iv_base;
+ uint8_t iv_mcs_member_ids[OPT_MEMMAP_MAX_NM_REGIONS];
+ bool iv_use_alt;
+ uint64_t iv_size_alt;
+ uint64_t iv_base_alt;
+ uint64_t iv_biggest_mba;
+
+ // memory allocation state
+ // portion of size which will be exposed to exerciser/PHYP
+ uint64_t iv_size_exposed;
+
+ // comparison operator for sort
+ bool operator < (MemGroup rhs) const
+ {
+ bool l_lt = true;
+ if (iv_base > rhs.iv_base ||
+ ((iv_base == rhs.iv_base) && (iv_size > rhs.iv_size)))
+ {
+ l_lt = false;
+ }
+ return l_lt;
+ }
+
+ // adjust base address of group (by negative offset)
+ void decBase(const uint64_t& offset)
+ {
+ iv_base -= offset;
+ if (iv_use_alt)
+ {
+ iv_base_alt -= offset;
+ }
+ }
+
+ // adjust base address of group (positive offset)
+ void incBase(const uint64_t& offset)
+ {
+ iv_base += offset;
+ if (iv_use_alt)
+ {
+ iv_base_alt += offset;
+ }
+ }
- class MemRegion
+ // halve size of group
+ // assumes no allocations have been made
+ void halveSize()
{
- public:
- uint64_t iv_base;
- uint64_t iv_size;
- bool operator<(MemRegion rhs) const
- {
- bool l_lt = true;
- if (iv_base > rhs.iv_base ||
- (iv_base == rhs.iv_base && iv_size != 0))
- {
- l_lt = false;
- }
- return l_lt;
+ iv_size /= 2;
+ iv_size_per_mcs /= 2;
+ iv_size_exposed /= 2;
+
+ if (iv_use_alt)
+ {
+ iv_size_alt /= 2;
}
- MemRegion(uint64_t b, uint64_t s) : iv_base(b), iv_size(s) {}
- };
- class ProcBase
+ iv_biggest_mba /= 2;
+ }
+
+ // construct from attribute data array
+ MemGroup(group_type group_type, uint8_t group_id, uint32_t (*group_data)[OPT_MEMMAP_GROUP_32_DIM2])
{
- public:
- fapi::Target *iv_tgt;
- uint64_t iv_size;
- uint32_t iv_pos;
- // sorting in increasing size, and decreasing proc position
- // e.g. proc0 and proc2 have same size, then the order will be
- // proc2 then proc0
- bool operator<(ProcBase rhs) const
+ iv_group_type = group_type;
+ iv_group_id = group_id;
+ iv_partner_group_id = 0xFF;
+
+ // consume data from attributes
+ iv_size_per_mcs = (uint64_t) (group_data[iv_group_type+iv_group_id][OPT_MEMMAP_GROUP_32_MCS_SIZE_INDEX]) * OPT_MEMMAP_GB;
+ iv_group_size = (uint8_t) (group_data[iv_group_type+iv_group_id][OPT_MEMMAP_GROUP_32_MCS_IN_GROUP_INDEX]);
+ iv_size = (uint64_t) (group_data[iv_group_type+iv_group_id][OPT_MEMMAP_GROUP_32_SIZE_INDEX]) * OPT_MEMMAP_GB;
+ iv_base = (uint64_t) (group_data[iv_group_type+iv_group_id][OPT_MEMMAP_GROUP_32_BASE_INDEX]) * OPT_MEMMAP_GB;
+ for (uint8_t i = OPT_MEMMAP_GROUP_32_MEMBERS_START_INDEX;
+ i <= OPT_MEMMAP_GROUP_32_MEMBERS_END_INDEX;
+ i++)
{
- bool l_lt = true;
- if (iv_size > rhs.iv_size ||
- (iv_size == rhs.iv_size && iv_pos < rhs.iv_pos))
+ if (i < (OPT_MEMMAP_GROUP_32_MEMBERS_START_INDEX + iv_group_size))
{
- l_lt = false;
+ iv_mcs_member_ids[i-OPT_MEMMAP_GROUP_32_MEMBERS_START_INDEX] = (uint8_t) (group_data[iv_group_type+iv_group_id][i]);
}
- return l_lt;
+ else
+ {
+ iv_mcs_member_ids[i-OPT_MEMMAP_GROUP_32_MEMBERS_START_INDEX] = 0xFF;
+ }
+ }
+
+ iv_use_alt = group_data[iv_group_type+iv_group_id][OPT_MEMMAP_GROUP_32_ALT_VALID_INDEX]?(true):(false);
+ iv_size_alt = (uint64_t) (group_data[iv_group_type+iv_group_id][OPT_MEMMAP_GROUP_32_ALT_SIZE_INDEX]) * OPT_MEMMAP_GB;
+ iv_base_alt = (uint64_t) (group_data[iv_group_type+iv_group_id][OPT_MEMMAP_GROUP_32_ALT_BASE_INDEX]) * OPT_MEMMAP_GB;
+ iv_biggest_mba = (uint64_t) (group_data[iv_group_type+iv_group_id][OPT_MEMMAP_GROUP_32_LARGEST_MBA_INDEX]) * OPT_MEMMAP_GB;
+
+ // mark all size as exposed
+ iv_size_exposed = iv_size;
+ }
+
+ // debug function
+ void dumpGroup()
+ {
+ FAPI_DBG("Group %d [ %s ]", iv_group_id, (iv_group_type == nm)?("nm"):("m"));
+ FAPI_DBG(" Base: %016llX", iv_base);
+ FAPI_DBG(" Size: %016llX", iv_size);
+ FAPI_DBG(" MCs: %d [ %016llX ]", iv_group_size, iv_size_per_mcs);
+ for (uint8_t i = 0; i < iv_group_size; i++)
+ {
+ FAPI_DBG(" : %d", iv_mcs_member_ids[i]);
+ }
+ FAPI_DBG(" Alt: %s", (iv_use_alt)?("true"):("false"));
+ FAPI_DBG(" ABase: %016llX", iv_base_alt);
+ FAPI_DBG(" ASize: %016llX", iv_size_alt);
+ FAPI_DBG(" Big MBA: %016llX", iv_biggest_mba);
+ }
+
+ // flush back to attribute data array
+ void flushAttributes(uint64_t chip_bases[], uint64_t chip_sizes[], uint32_t (*group_data)[OPT_MEMMAP_GROUP_32_DIM2])
+ {
+ // chip size/range attribute arrays expect addresses in B
+ chip_bases[iv_group_id] = iv_base;
+ chip_sizes[iv_group_id] = iv_size_exposed;
+
+ // group attribute arrays expect addresses in GB
+ group_data[iv_group_type+iv_group_id][OPT_MEMMAP_GROUP_32_MCS_SIZE_INDEX] = (uint32_t) ((iv_size_per_mcs) / OPT_MEMMAP_GB);
+ group_data[iv_group_type+iv_group_id][OPT_MEMMAP_GROUP_32_MCS_IN_GROUP_INDEX] = iv_group_size;
+ group_data[iv_group_type+iv_group_id][OPT_MEMMAP_GROUP_32_SIZE_INDEX] = (uint32_t) ((iv_size) / OPT_MEMMAP_GB);
+ group_data[iv_group_type+iv_group_id][OPT_MEMMAP_GROUP_32_BASE_INDEX] = (uint32_t) ((iv_base) / OPT_MEMMAP_GB);
+
+ for (uint8_t i = OPT_MEMMAP_GROUP_32_MEMBERS_START_INDEX;
+ i <= OPT_MEMMAP_GROUP_32_MEMBERS_END_INDEX;
+ i++)
+ {
+ group_data[iv_group_type+iv_group_id][i] = iv_mcs_member_ids[i-OPT_MEMMAP_GROUP_32_MEMBERS_START_INDEX];
+
+ }
+
+ group_data[iv_group_type+iv_group_id][OPT_MEMMAP_GROUP_32_ALT_VALID_INDEX] = (iv_use_alt)?(1):(0);
+ group_data[iv_group_type+iv_group_id][OPT_MEMMAP_GROUP_32_ALT_SIZE_INDEX] = (uint32_t) ((iv_size_alt) / OPT_MEMMAP_GB);
+ group_data[iv_group_type+iv_group_id][OPT_MEMMAP_GROUP_32_ALT_BASE_INDEX] = (uint32_t) ((iv_base_alt) / OPT_MEMMAP_GB);
+ group_data[iv_group_type+iv_group_id][OPT_MEMMAP_GROUP_32_LARGEST_MBA_INDEX] = (uint32_t) ((iv_biggest_mba) / OPT_MEMMAP_GB);
+ }
+
+ // memory allocation function
+ // returns true if request can be wholly satisfied by this group,
+ // false otherwise
+ bool allocate(uint64_t size_req)
+ {
+ if (size_req <= iv_size_exposed)
+ {
+ iv_size_exposed -= size_req;
+ return true;
+ }
+ else
+ {
+ iv_size_exposed = 0;
+ return false;
}
- ProcBase(fapi::Target* t, uint64_t s, uint32_t p) :
- iv_tgt(t), iv_size(s), iv_pos(p) {}
- };
+ }
+};
+
+
+// class to represent memory map (non-mirrored/mirrored) on one processor chip
+class ProcChipMemmap
+{
+
+public:
+ static const uint8_t PROC_CHIP_MEMMAP_NUM_ALLOCATIONS = 2;
+ static const uint8_t PROC_CHIP_MEMMAP_HTM_ALLOC_INDEX = 0;
+ static const uint8_t PROC_CHIP_MEMMAP_OCC_ALLOC_INDEX = 1;
+
+ // pointer to processor chip target
+ Target *iv_target;
+ // mirroring policy
+ uint8_t iv_mirror_policy;
+
+ // chip location information
+ uint8_t iv_pos;
+ uint8_t iv_node_id;
+ uint8_t iv_chip_id;
- inline uint64_t PowerOf2Roundedup( uint64_t i_number )
+ // chip non-mirrored base, effective size, and member groups
+ uint64_t iv_nm_base;
+ uint64_t iv_nm_eff_size;
+ std::vector<MemGroup> iv_nm_groups;
+
+ // chip mirrored base, effective size, and member groups
+ uint64_t iv_m_base;
+ uint64_t iv_m_eff_size;
+ std::vector<MemGroup> iv_m_groups;
+
+ // base/size for allocated memory areas
+ uint64_t iv_alloc_size[PROC_CHIP_MEMMAP_NUM_ALLOCATIONS];
+ uint64_t iv_alloc_base[PROC_CHIP_MEMMAP_NUM_ALLOCATIONS];
+
+ // comparison operator for sort
+ // sort in increasing size, and decreasing proc position
+ // e.g. proc0 and proc2 have same size, then the order will be
+ // proc2 then proc0
+ bool operator < (ProcChipMemmap rhs) const
{
- if (i_number)
+ bool l_lt = true;
+ uint64_t l_this_eff_size = 0;
+ uint64_t l_rhs_eff_size = 0;
+
+ // compute effective size based on mirror policy
+ // sort by non-mirrored size
+ if ((iv_mirror_policy == ENUM_ATTR_MEM_MIRROR_PLACEMENT_POLICY_NORMAL) &&
+ (rhs.iv_mirror_policy == ENUM_ATTR_MEM_MIRROR_PLACEMENT_POLICY_NORMAL))
+ {
+ l_this_eff_size = iv_nm_eff_size;
+ l_rhs_eff_size = rhs.iv_nm_eff_size;
+ }
+ // sort by mirrored size
+ else if ((iv_mirror_policy == ENUM_ATTR_MEM_MIRROR_PLACEMENT_POLICY_FLIPPED) &&
+ (rhs.iv_mirror_policy == ENUM_ATTR_MEM_MIRROR_PLACEMENT_POLICY_FLIPPED))
+ {
+ l_this_eff_size = iv_m_eff_size;
+ l_rhs_eff_size = rhs.iv_m_eff_size;
+ }
+ // sort by sum of non-mirrored/mirrored sizes
+ else if ((iv_mirror_policy == ENUM_ATTR_MEM_MIRROR_PLACEMENT_POLICY_SELECTIVE) &&
+ (rhs.iv_mirror_policy == ENUM_ATTR_MEM_MIRROR_PLACEMENT_POLICY_SELECTIVE))
+ {
+ l_this_eff_size = PowerOf2Roundedup(iv_nm_eff_size + iv_m_eff_size);
+ l_rhs_eff_size = PowerOf2Roundedup(rhs.iv_nm_eff_size + rhs.iv_m_eff_size);
+ }
+
+ // perform sort comparison
+ if (l_this_eff_size > l_rhs_eff_size ||
+ (l_this_eff_size == l_rhs_eff_size && iv_pos < rhs.iv_pos))
{
- --i_number;
- i_number |= i_number >> 1;
- i_number |= i_number >> 2;
- i_number |= i_number >> 4;
- i_number |= i_number >> 8;
- i_number |= i_number >> 16;
- i_number |= i_number >> 32;
- ++i_number;
+ l_lt = false;
}
- return i_number;
+ return l_lt;
}
- ReturnCode opt_memmap(std::vector<fapi::Target> & i_procs, bool i_init)
+ // constructor
+ ProcChipMemmap(Target* t, uint8_t mirror_policy) :
+ iv_target(t), iv_mirror_policy(mirror_policy) {}
+
+ // process chip data from attributes
+ ReturnCode processAttributes()
{
ReturnCode rc;
- std::vector<ProcBase> l_procBases;
- const size_t l_MCS_per_proc = 8;
- uint64_t l_bases[l_MCS_per_proc];
- uint64_t l_sizes[l_MCS_per_proc];
- uint32_t l_pos = 0;
-
- for (std::vector<fapi::Target>::iterator l_iter = i_procs.begin();
- l_iter != i_procs.end(); ++l_iter)
+ uint64_t l_nm_bases[OPT_MEMMAP_MAX_NM_REGIONS];
+ uint64_t l_nm_sizes[OPT_MEMMAP_MAX_NM_REGIONS];
+ uint64_t l_m_bases[OPT_MEMMAP_MAX_M_REGIONS];
+ uint64_t l_m_sizes[OPT_MEMMAP_MAX_M_REGIONS];
+ uint32_t l_mss_mcs_group_32[OPT_MEMMAP_GROUP_32_DIM1][OPT_MEMMAP_GROUP_32_DIM2];
+
+ do
{
- // If request to initialize MEM_BASE, just do it for each proc
- if (i_init)
+ // obtain node/chip ID
+ rc = FAPI_ATTR_GET(ATTR_FABRIC_NODE_ID,
+ iv_target,
+ iv_node_id);
+ if (!rc.ok())
+ {
+ FAPI_ERR("Error from FAPI_ATTR_GET (ATTR_FABRIC_NODE)");
+ break;
+ }
+
+ rc = FAPI_ATTR_GET(ATTR_FABRIC_CHIP_ID,
+ iv_target,
+ iv_chip_id);
+ if (!rc.ok())
+ {
+ FAPI_ERR("Error from FAPI_ATTR_GET (ATTR_FABRIC_CHIP)");
+ break;
+ }
+ iv_pos = ((4*iv_node_id)+iv_chip_id);
+
+ // retrieve base address for each chip, align to common origin
+ rc = FAPI_ATTR_GET(ATTR_PROC_MEM_BASE,
+ iv_target,
+ iv_nm_base);
+ if (!rc.ok())
+ {
+ FAPI_ERR("Error from FAPI_ATTR_GET (ATTR_PROC_MEM_BASE)");
+ break;
+ }
+ if (iv_nm_base != OPT_MEMMAP_BASE_ORIGIN)
+ {
+ const uint64_t& ADDR = iv_nm_base;
+ FAPI_ERR("Unexpected value returned for ATTR_PROC_MEM_BASE (=%016llX)",
+ iv_nm_base);
+ FAPI_SET_HWP_ERROR(rc, RC_OPT_MEMMAP_MEM_BASE_ERR);
+ break;
+ }
+
+ rc = FAPI_ATTR_GET(ATTR_PROC_MIRROR_BASE,
+ iv_target,
+ iv_m_base);
+ if (!rc.ok())
+ {
+ FAPI_ERR("Error from FAPI_ATTR_GET (ATTR_PROC_MIRROR_BASE)");
+ break;
+ }
+ if (iv_m_base != OPT_MEMMAP_OFFSET_ORIGIN)
+ {
+ const uint64_t& ADDR = iv_m_base;
+ FAPI_ERR("Unexpected value returned for ATTR_PROC_MIRROR_BASE (=%016llX)",
+ iv_m_base);
+ FAPI_SET_HWP_ERROR(rc, RC_OPT_MEMMAP_MIRROR_BASE_ERR);
+ break;
+ }
+ iv_m_base -= OPT_MEMMAP_OFFSET_ORIGIN;
+
+ // retrieve regions (bases and sizes) computed by mss_eff_grouping
+ rc = FAPI_ATTR_GET(ATTR_PROC_MEM_BASES,
+ iv_target,
+ l_nm_bases);
+ if (!rc.ok())
+ {
+ FAPI_ERR("Error from FAPI_ATTR_GET (ATTR_PROC_MEM_BASES)");
+ break;
+ }
+
+ rc = FAPI_ATTR_GET(ATTR_PROC_MEM_SIZES,
+ iv_target,
+ l_nm_sizes);
+ if (!rc.ok())
+ {
+ FAPI_ERR("Error from FAPI_ATTR_GET (ATTR_PROC_MEM_SIZES)");
+ break;
+ }
+ rc = FAPI_ATTR_GET(ATTR_PROC_MIRROR_BASES,
+ iv_target,
+ l_m_bases);
+ if (!rc.ok())
+ {
+ FAPI_ERR("Error from FAPI_ATTR_GET (ATTR_PROC_MIRROR_BASES)");
+ break;
+ }
+
+ rc = FAPI_ATTR_GET(ATTR_PROC_MIRROR_SIZES,
+ iv_target,
+ l_m_sizes);
+ if (!rc.ok())
+ {
+ FAPI_ERR("Error from FAPI_ATTR_GET (ATTR_PROC_MIRROR_SIZES)");
+ break;
+ }
+
+ // retrieve data structure describing groups formed by mss_eff_grouping
+ rc = FAPI_ATTR_GET(ATTR_MSS_MCS_GROUP_32,
+ iv_target,
+ l_mss_mcs_group_32);
+ if (!rc.ok())
+ {
+ FAPI_ERR("Error from FAPI_ATTR_GET (ATTR_MSS_MCS_GROUP_32)");
+ break;
+ }
+
+ // populate non-mirrored groups
+ FAPI_INF("Chip n%d:p%d", iv_node_id, iv_chip_id);
+ for (uint8_t i = 0; i < OPT_MEMMAP_MAX_NM_REGIONS; i++)
{
- uint64_t l_base = 0;
- rc = FAPI_ATTR_SET(ATTR_PROC_MEM_BASE, &(*l_iter), l_base);
- if (rc)
+ if (l_nm_sizes[i] != 0)
{
- break;
+ FAPI_INF(" l_nm_bases[%d] = %016llX", i, l_nm_bases[i]);
+ FAPI_INF(" l_nm_sizes[%d] = %016llX", i, l_nm_sizes[i]);
+ MemGroup g(MemGroup::nm, i, l_mss_mcs_group_32);
+ if ((l_nm_bases[i] != g.iv_base) ||
+ (l_nm_sizes[i] != g.iv_size))
+ {
+ const uint8_t& GROUP = i;
+ const uint64_t& MEM_BASES = l_nm_bases[i];
+ const uint64_t& MEM_SIZES = l_nm_sizes[i];
+ const uint64_t& GROUP_BASE = g.iv_base;
+ const uint64_t& GROUP_SIZE = g.iv_size;
+ FAPI_ERR("Inconsistent non-mirrored group content");
+ FAPI_SET_HWP_ERROR(rc,
+ RC_OPT_MEMMAP_NON_MIRROR_GROUP_ERR);
+ break;
+ }
+ iv_nm_groups.push_back(g);
}
- continue;
+ }
+ if (!rc.ok())
+ {
+ break;
}
- rc = FAPI_ATTR_GET(ATTR_POS, &(*l_iter), l_pos);
- if (rc)
+ // populate mirrored groups
+ for (uint8_t i = 0; i < OPT_MEMMAP_MAX_M_REGIONS; i++)
+ {
+ if (l_m_sizes[i] != 0)
+ {
+ // align to common origin
+ l_m_bases[i] -= OPT_MEMMAP_OFFSET_ORIGIN;
+ FAPI_INF(" l_m_bases[%d] = %016llX", i, l_m_bases[i]);
+ FAPI_INF(" l_m_sizes[%d] = %016llX", i, l_m_sizes[i]);
+ MemGroup g(MemGroup::m, i, l_mss_mcs_group_32);
+ // align to common origin
+ g.decBase(OPT_MEMMAP_OFFSET_ORIGIN);
+ if ((l_m_bases[i] != g.iv_base) ||
+ (l_m_sizes[i] != g.iv_size))
+ {
+ const uint8_t& GROUP = i;
+ const uint64_t& MIRROR_BASES = l_m_bases[i];
+ const uint64_t& MIRROR_SIZES = l_m_sizes[i];
+ const uint64_t& GROUP_BASE = g.iv_base;
+ const uint64_t& GROUP_SIZE = g.iv_size;
+ FAPI_ERR("Inconsistent mirrored group content");
+ FAPI_SET_HWP_ERROR(rc,
+ RC_OPT_MEMMAP_MIRROR_GROUP_ERR);
+ break;
+ }
+ iv_m_groups.push_back(g);
+ }
+ }
+ if (!rc.ok())
{
- FAPI_ERR("Error reading ATTR_POS");
break;
}
- else
+
+ // dump configuration for non-mirrored groups
+ for (uint8_t i = 0; i < iv_nm_groups.size(); i++)
{
- FAPI_INF("Proc %d :", l_pos);
+ iv_nm_groups[i].dumpGroup();
}
+ // link mirrored group with their non-mirrored partner
+ for (uint8_t i = 0; i < iv_m_groups.size(); i++)
+ {
+ // loop through all non-mirrored groups
+ // until a match is found
+ bool match = false;
+ for (uint8_t j = 0; (j < iv_nm_groups.size()) && (!match); j++)
+ {
+ // sizes match?
+ match = ((iv_m_groups[i].iv_group_id ==
+ iv_nm_groups[j].iv_group_id) &&
+ (iv_m_groups[i].iv_size ==
+ (iv_nm_groups[j].iv_size / 2)));
+ if (match)
+ {
+ // set MCS unit parameters for mirrored group
+ for (uint8_t k = 0; k < OPT_MEMMAP_MAX_NM_REGIONS; k++)
+ {
+ iv_m_groups[i].iv_mcs_member_ids[k] =
+ iv_nm_groups[j].iv_mcs_member_ids[k];
+ }
+ iv_m_groups[i].iv_group_size =
+ iv_nm_groups[j].iv_group_size;
+ iv_m_groups[i].iv_size_per_mcs =
+ iv_m_groups[i].iv_size /
+ iv_m_groups[i].iv_group_size;
- // retrieve bases and sizes
- rc = FAPI_ATTR_GET(ATTR_PROC_MEM_BASES, &(*l_iter), l_bases);
- if (rc)
+ // link groups
+ iv_m_groups[i].iv_partner_group_id = iv_nm_groups[j].iv_group_id;
+ iv_nm_groups[j].iv_partner_group_id = iv_m_groups[i].iv_group_id;
+ }
+ }
+ // valid mirrored group, but couldn't find non-mirrored partner
+ if (!match)
+ {
+ const uint8_t& GROUP = i;
+ FAPI_ERR("Unable to find non-mirrored group partner for mirrored group!");
+ FAPI_SET_HWP_ERROR(rc, RC_OPT_MEMMAP_GROUP_PARTNER_ERR);
+ break;
+ }
+ // dump configuration for mirrored group
+ iv_m_groups[i].dumpGroup();
+ }
+ if (!rc.ok())
{
- FAPI_ERR("Error reading ATTR_PROC_MEM_BASES");
break;
}
- else
+
+ // compress/re-stack groups for the selective mirror configuration
+ if (iv_mirror_policy ==
+ ENUM_ATTR_MEM_MIRROR_PLACEMENT_POLICY_SELECTIVE)
{
- for(size_t i = 0; i < l_MCS_per_proc; i++)
+ for (uint8_t i = 0; i < iv_nm_groups.size(); i++)
+ {
+ // only multi-member groups (with a mirrrored partner) will
+ // change in size
+ if ((iv_nm_groups[i].iv_group_size != 1) &&
+ (iv_nm_groups[i].iv_partner_group_id != 0xFF))
+ {
+ iv_nm_groups[i].halveSize();
+ for (uint8_t j = 0; j < iv_m_groups.size(); j++)
+ {
+ if (iv_nm_groups[i].iv_partner_group_id ==
+ iv_m_groups[j].iv_group_id)
+ {
+ iv_m_groups[j].halveSize();
+ }
+ }
+ }
+ }
+
+ // realign each group to origin
+ for (uint8_t i = 0; i < iv_nm_groups.size(); i++)
+ {
+ iv_nm_groups[i].decBase(iv_nm_groups[i].iv_base);
+ }
+ for (uint8_t i = 0; i < iv_m_groups.size(); i++)
{
- FAPI_INF(" l_bases[%d] = %016llX", i, l_bases[i]);
+ iv_m_groups[i].decBase(iv_m_groups[i].iv_base);
}
+
+ // re-stack set of groups, largest->smallest
+ uint64_t l_nm_group_base = OPT_MEMMAP_BASE_ORIGIN;
+ std::sort(iv_nm_groups.begin(), iv_nm_groups.end());
+ for (uint8_t i = iv_nm_groups.size(); i != 0; --i)
+ {
+ iv_nm_groups[i-1].incBase(l_nm_group_base);
+ l_nm_group_base += iv_nm_groups[i-1].iv_size;
+ }
+
+ uint64_t l_m_group_base = OPT_MEMMAP_BASE_ORIGIN;
+ std::sort(iv_m_groups.begin(), iv_m_groups.end());
+ for (uint8_t i = iv_m_groups.size(); i != 0; --i)
+ {
+ iv_m_groups[i-1].incBase(l_m_group_base);
+ l_m_group_base += iv_m_groups[i-1].iv_size;
+ }
+ }
+
+ // sort regions for effective size calculations
+ std::sort(iv_nm_groups.begin(), iv_nm_groups.end());
+ std::sort(iv_m_groups.begin(), iv_m_groups.end());
+
+ // compute effective size of chip address space
+ // this is simply the end address of the last region in
+ // each stack (rounded up to a power of 2)
+ if (iv_nm_groups.size() != 0)
+ {
+ iv_nm_eff_size = iv_nm_groups[iv_nm_groups.size()-1].iv_base;
+ iv_nm_eff_size += iv_nm_groups[iv_nm_groups.size()-1].iv_size;
+ iv_nm_eff_size = PowerOf2Roundedup(iv_nm_eff_size);
+ }
+ else
+ {
+ iv_nm_eff_size = 0;
}
+ FAPI_INF(" nm_eff_size = %016llX", iv_nm_eff_size);
- rc = FAPI_ATTR_GET(ATTR_PROC_MEM_SIZES, &(*l_iter), l_sizes);
- if (rc)
+ if (iv_m_groups.size() != 0)
{
- FAPI_ERR("Error reading ATTR_PROC_MEM_SIZES");
+ iv_m_eff_size = iv_m_groups[iv_m_groups.size()-1].iv_base;
+ iv_m_eff_size += iv_m_groups[iv_m_groups.size()-1].iv_size;
+ iv_m_eff_size = PowerOf2Roundedup(iv_m_eff_size);
+ }
+ else
+ {
+ iv_m_eff_size = 0;
+ }
+ FAPI_INF(" m_eff_size = %016llX", iv_m_eff_size);
+
+ // retrieve request for HTM/OCC address space
+ rc = FAPI_ATTR_GET(ATTR_PROC_HTM_BAR_SIZE,
+ iv_target,
+ iv_alloc_size[PROC_CHIP_MEMMAP_HTM_ALLOC_INDEX]);
+ if (!rc.ok())
+ {
+ FAPI_ERR("Error from FAPI_ATTR_GET (ATTR_PROC_HTM_BAR_SIZE)");
break;
}
+
+ rc = FAPI_ATTR_GET(ATTR_PROC_OCC_SANDBOX_SIZE,
+ iv_target,
+ iv_alloc_size[PROC_CHIP_MEMMAP_OCC_ALLOC_INDEX]);
+ if (!rc.ok())
+ {
+ FAPI_ERR("Error from FAPI_ATTR_GET (ATTR_PROC_OCC_SANDBOX_SIZE)");
+ break;
+ }
+ } while(0);
+
+ return rc;
+ }
+
+ // establish new non-mirrored base address for this chip
+ // and adjust all groups to track
+ void setNMBase(const uint64_t& base)
+ {
+ iv_nm_base = base;
+ for (uint8_t i = 0; i < iv_nm_groups.size(); ++i)
+ {
+ iv_nm_groups[i].incBase(base);
+ }
+ }
+
+ // establish new mirrored base address for this chip
+ // and adjust all groups to track
+ void setMBase(const uint64_t& base)
+ {
+ iv_m_base = base;
+ for (uint8_t i = 0; i < iv_m_groups.size(); ++i)
+ {
+ iv_m_groups[i].incBase(base);
+ }
+ }
+
+ // allocate HTM/OCC memory requests for this chip
+ ReturnCode allocate()
+ {
+ ReturnCode rc;
+
+ // groups have already been sorted for stacking
+ // build ordered list of groups to consider in service of
+ // allocation requests, based on mirroring mode
+ std::vector<MemGroup*> alloc_groups;
+
+ do
+ {
+ if (iv_mirror_policy ==
+ ENUM_ATTR_MEM_MIRROR_PLACEMENT_POLICY_SELECTIVE)
+ {
+ // mirrored groups occupy highest address space,
+ // then non-mirrored, all are independent
+ alloc_groups.resize(iv_m_groups.size()+
+ iv_nm_groups.size());
+ for (uint8_t i = 0; i < iv_m_groups.size(); i++)
+ {
+ alloc_groups[iv_m_groups.size()-1-i] = &(iv_m_groups[i]);
+ }
+ for (uint8_t i = 0; i < iv_nm_groups.size(); i++)
+ {
+ alloc_groups[iv_m_groups.size()+iv_nm_groups.size()-1-i] = &(iv_nm_groups[i]);
+ }
+ }
+ else if (iv_mirror_policy ==
+ ENUM_ATTR_MEM_MIRROR_PLACEMENT_POLICY_FLIPPED)
+ {
+ // perform allocation in mirrored space,
+ // adjust non-mirrored partner group
+ alloc_groups.resize(iv_m_groups.size());
+ for (uint8_t i = 0; i < iv_m_groups.size(); i++)
+ {
+ alloc_groups[iv_m_groups.size()-1-i] = &(iv_m_groups[i]);
+ }
+ }
else
{
- for(size_t i = 0; i < l_MCS_per_proc; i++)
+ // perform allocation in non-mirrored space,
+ // adjust mirrored partner group
+ alloc_groups.resize(iv_nm_groups.size());
+ for (uint8_t i = 0; i < iv_nm_groups.size(); i++)
{
- FAPI_INF(" l_sizes[%d] = %016llX", i, l_sizes[i]);
+ alloc_groups[iv_nm_groups.size()-1-i] = &(iv_nm_groups[i]);
}
}
- // create the l_regions vector and sort it
- std::vector<MemRegion> l_regions;
- for (size_t i = 0; i < l_MCS_per_proc; i++)
+ // perform allocations
+ for (uint8_t r = 0;
+ (r < PROC_CHIP_MEMMAP_NUM_ALLOCATIONS) && rc.ok();
+ r++)
{
- MemRegion l_region(l_bases[i], l_sizes[i]);
- l_regions.push_back(l_region);
- }
+ uint64_t alloc_size_req = iv_alloc_size[r];
+ iv_alloc_base[r] = 0;
- // compute effective size and round up to power of 2
- std::sort( l_regions.begin(), l_regions.end() );
- uint64_t round_size = l_regions[l_regions.size()-1].iv_base;
- round_size += l_regions[l_regions.size()-1].iv_size;
- round_size = PowerOf2Roundedup( round_size );
+ if (alloc_size_req != 0)
+ {
+ bool alloc_done = false;
+ for (uint8_t i = 0;
+ (i < alloc_groups.size()) && !alloc_done;
+ i++)
+ {
+ FAPI_DBG("Searching group %d for allocation %d (remaining size: %016llX)",
+ i, r, alloc_size_req);
+ // allocate from primary group
+ alloc_done = alloc_groups[i]->allocate(alloc_size_req);
+ // take allocation from partner group as well
+ if (iv_mirror_policy ==
+ ENUM_ATTR_MEM_MIRROR_PLACEMENT_POLICY_FLIPPED)
+ {
+ FAPI_DBG("Registering allocation with partner non-mirrored group");
+ for (uint8_t j = 0; j < iv_nm_groups.size(); j++)
+ {
+ if (alloc_groups[i]->iv_partner_group_id ==
+ iv_nm_groups[j].iv_group_id)
+ {
+ (void) iv_nm_groups[j].allocate(
+ alloc_size_req * 2);
+ }
+ }
+ }
+ else if (iv_mirror_policy ==
+ ENUM_ATTR_MEM_MIRROR_PLACEMENT_POLICY_NORMAL)
+ {
+ if (alloc_groups[i]->iv_partner_group_id != 0xFF)
+ {
+ FAPI_DBG("Registering allocation with partner mirrored group");
+ for (uint8_t j = 0; j < iv_m_groups.size(); j++)
+ {
+ if (alloc_groups[i]->iv_partner_group_id ==
+ iv_m_groups[j].iv_group_id)
+ {
+ (void) iv_m_groups[j].allocate(
+ alloc_size_req / 2);
+ }
+ }
+ }
+ }
+ // if allocation is not completely satisfied, compute
+ // size request for next iteration
+ if (!alloc_done)
+ {
+ alloc_size_req -= alloc_groups[i]->iv_size_exposed;
+ }
+ else
+ {
+ iv_alloc_base[r] = alloc_groups[i]->iv_base +
+ alloc_groups[i]->iv_size_exposed;
+ }
+ }
+ if (!alloc_done)
+ {
+ const uint8_t& ALLOC_INDEX = r;
+ FAPI_ERR("Unable to satisfy %s memory request, size requested exceeds available memory!",
+ (r == 0)?("HTM"):("OCC"));
+ FAPI_SET_HWP_ERROR(rc, RC_OPT_MEMMAP_ALLOC_ERR);
+ break;
+ }
+ }
+ }
+ } while(0);
- FAPI_INF(" round_size = %016llX", round_size);
+ return rc;
+ }
- // save the proc's target and effective size
- ProcBase l_procBase(&(*l_iter), round_size, l_pos);
- l_procBases.push_back(l_procBase);
- }
+ // flush group state back to attributes
+ ReturnCode flushAttributes()
+ {
+ ReturnCode rc;
+ uint64_t l_mem_bases[OPT_MEMMAP_MAX_NM_REGIONS];
+ uint64_t l_mem_sizes[OPT_MEMMAP_MAX_NM_REGIONS];
+ uint64_t l_mirror_bases[OPT_MEMMAP_MAX_M_REGIONS];
+ uint64_t l_mirror_sizes[OPT_MEMMAP_MAX_M_REGIONS];
+ uint32_t l_mss_mcs_group_32[OPT_MEMMAP_GROUP_32_DIM1][OPT_MEMMAP_GROUP_32_DIM2];
- while (rc.ok() && !i_init)
+ do
{
- std::sort(l_procBases.begin(), l_procBases.end());
- uint64_t cur_mem_base = 0;
- uint64_t cur_mir_base = 0x0002000000000000LL; // 512TB
+ // init attribute arrays
+ for (uint8_t i = 0; i < OPT_MEMMAP_MAX_NM_REGIONS; i++)
+ {
+ l_mem_bases[i] = 0;
+ l_mem_sizes[i] = 0;
+ }
+ for (uint8_t i = 0; i < OPT_MEMMAP_MAX_M_REGIONS ; i++)
+ {
+ l_mirror_bases[i] = 0;
+ l_mirror_sizes[i] = 0;
+ }
+ for (uint8_t i = 0; i < OPT_MEMMAP_GROUP_32_DIM1; i++)
+ {
- for (size_t i = l_procBases.size(); i != 0; --i)
+ for (uint8_t j = OPT_MEMMAP_GROUP_32_MCS_SIZE_INDEX;
+ j <= OPT_MEMMAP_GROUP_32_BASE_INDEX;
+ j++)
+ {
+ l_mss_mcs_group_32[i][j] = 0;
+ }
+ for (uint8_t j = OPT_MEMMAP_GROUP_32_MEMBERS_START_INDEX;
+ j <= OPT_MEMMAP_GROUP_32_MEMBERS_END_INDEX;
+ j++)
+ {
+ l_mss_mcs_group_32[i][j] = 0xFF;
+ }
+ for (uint8_t j = OPT_MEMMAP_GROUP_32_ALT_VALID_INDEX;
+ j <= OPT_MEMMAP_GROUP_32_LARGEST_MBA_INDEX;
+ j++)
+ {
+ l_mss_mcs_group_32[i][j] = 0;
+ }
+ }
+
+ // flush attribute data for each group
+ for (uint8_t i = 0; i < iv_nm_groups.size(); i++)
+ {
+ iv_nm_groups[i].flushAttributes(l_mem_bases,
+ l_mem_sizes,
+ l_mss_mcs_group_32);
+ }
+ for (uint8_t i = 0; i < iv_m_groups.size(); i++)
{
- fapi::Target * l_tgt = l_procBases[i-1].iv_tgt;
- uint64_t size = l_procBases[i-1].iv_size;
- l_pos = l_procBases[i-1].iv_pos;
+ iv_m_groups[i].flushAttributes(l_mirror_bases,
+ l_mirror_sizes,
+ l_mss_mcs_group_32);
+ }
- FAPI_INF("proc%d MEM_BASE = %016llX", l_pos, cur_mem_base);
- FAPI_INF("proc%d MIRROR_BASE = %016llX", l_pos, cur_mir_base);
+ // set base addresses
+ rc = FAPI_ATTR_SET(ATTR_PROC_MEM_BASE,
+ iv_target,
+ iv_nm_base);
+ if (!rc.ok())
+ {
+ FAPI_ERR("Error from FAPI_ATTR_SET (ATTR_PROC_MEM_BASE)");
+ break;
+ }
+
+ rc = FAPI_ATTR_SET(ATTR_PROC_MIRROR_BASE,
+ iv_target,
+ iv_m_base);
+ if (!rc.ok())
+ {
+ FAPI_ERR("Error from FAPI_ATTR_SET (ATTR_PROC_MIRROR_BASE)");
+ break;
+ }
+
+ // set non-mirrored region attributes
+ rc = FAPI_ATTR_SET(ATTR_PROC_MEM_BASES,
+ iv_target,
+ l_mem_bases);
+ if (!rc.ok())
+ {
+ FAPI_ERR("Error from FAPI_ATTR_SET (ATTR_PROC_MEM_BASES)");
+ break;
+ }
- rc = FAPI_ATTR_SET(ATTR_PROC_MEM_BASE, l_tgt, cur_mem_base);
- if (rc)
+ rc = FAPI_ATTR_SET(ATTR_PROC_MEM_SIZES,
+ iv_target,
+ l_mem_sizes);
+ if (!rc.ok())
+ {
+ FAPI_ERR("Error from FAPI_ATTR_SET (ATTR_PROC_MEM_BASES)");
+ break;
+ }
+
+ // set mirrored region attributes
+ rc = FAPI_ATTR_SET(ATTR_PROC_MIRROR_BASES,
+ iv_target,
+ l_mirror_bases);
+ if (!rc.ok())
+ {
+ FAPI_ERR("Error from FAPI_ATTR_SET (ATTR_PROC_MIRROR_BASES)");
+ break;
+ }
+
+ rc = FAPI_ATTR_SET(ATTR_PROC_MIRROR_SIZES,
+ iv_target,
+ l_mirror_sizes);
+ if (!rc.ok())
+ {
+ FAPI_ERR("Error from FAPI_ATTR_SET (ATTR_PROC_MIRROR_BASES)");
+ break;
+ }
+
+ // set group definition attributes
+ rc = FAPI_ATTR_SET(ATTR_MSS_MCS_GROUP_32,
+ iv_target,
+ l_mss_mcs_group_32);
+ if (!rc.ok())
+ {
+ FAPI_ERR("Error from FAPI_ATTR_SET (ATTR_MSS_MCS_GROUP_32)");
+ break;
+ }
+
+ // set HTM/OCC allocation attributes
+ rc = FAPI_ATTR_SET(ATTR_PROC_HTM_BAR_BASE_ADDR,
+ iv_target,
+ iv_alloc_base[PROC_CHIP_MEMMAP_HTM_ALLOC_INDEX]);
+ if (!rc.ok())
+ {
+ FAPI_ERR("Error from FAPI_ATTR_SET (ATTR_PROC_HTM_BAR_BASE_ADDR)");
+ break;
+ }
+
+ rc = FAPI_ATTR_SET(ATTR_PROC_OCC_SANDBOX_BASE_ADDR,
+ iv_target,
+ iv_alloc_base[PROC_CHIP_MEMMAP_OCC_ALLOC_INDEX]);
+ if (!rc.ok())
+ {
+ FAPI_ERR("Error from FAPI_ATTR_SET (ATTR_PROC_OCC_SANDBOX_BASE_ADDR)");
+ break;
+ }
+ } while(0);
+
+ return rc;
+ }
+};
+
+
+ReturnCode opt_memmap(std::vector<fapi::Target> & i_procs, bool i_init)
+{
+ ReturnCode rc;
+ std::vector<ProcChipMemmap> l_system_memmap;
+ uint8_t l_mirror_policy;
+
+ do
+ {
+ // retrieve mirroring placement policy attribute
+ rc = FAPI_ATTR_GET(ATTR_MEM_MIRROR_PLACEMENT_POLICY,
+ NULL,
+ l_mirror_policy);
+ if (!rc.ok())
+ {
+ FAPI_ERR("Error querying ATTR_MEM_MIRROR_PLACEMENT_POLICY");
+ break;
+ }
+
+ FAPI_INF("opt_memmap called with i_init = %d, mirror_policy: %d",
+ (i_init)?(1):(0), l_mirror_policy);
+
+ // first pass of execution
+ if (i_init)
+ {
+ // loop across all chips in system, set common
+ // base for non-mirrored/mirrored memory on each chip in preparation
+ // for mss_eff_grouping call
+ for (std::vector<fapi::Target>::iterator l_iter = i_procs.begin();
+ l_iter != i_procs.end();
+ ++l_iter)
+ {
+ uint64_t mem_base = OPT_MEMMAP_BASE_ORIGIN;
+ rc = FAPI_ATTR_SET(ATTR_PROC_MEM_BASE,
+ &(*l_iter),
+ mem_base);
+ if (!rc.ok())
{
- FAPI_ERR("Error reading ATTR_PROC_MEM_BASE");
+ FAPI_ERR("Error from FAPI_ATTR_SET (ATTR_PROC_MEM_BASE)!");
break;
}
- rc = FAPI_ATTR_SET(ATTR_PROC_MIRROR_BASE, l_tgt, cur_mir_base);
- if (rc)
+ uint64_t mirror_base = OPT_MEMMAP_OFFSET_ORIGIN;
+ rc = FAPI_ATTR_SET(ATTR_PROC_MIRROR_BASE,
+ &(*l_iter),
+ mirror_base);
+ if (!rc.ok())
{
- FAPI_ERR("Error reading ATTR_PROC_MIRROR_BASE");
+ FAPI_ERR("Error from FAPI_ATTR_SET (ATTR_PROC_MIRROR_BASE)!");
break;
}
- cur_mem_base += size;
- cur_mir_base += size / 2;
+ }
+ if (!rc.ok())
+ {
+ break;
+ }
+ }
+ // second pass of execution
+ // reorder chips based on their effective size
+ else
+ {
+ // loop across all chips in system, consume results of
+ // mss_eff_grouping call
+ for (std::vector<fapi::Target>::iterator l_iter = i_procs.begin();
+ l_iter != i_procs.end();
+ ++l_iter)
+ {
+ ProcChipMemmap p(&(*l_iter), l_mirror_policy);
+ rc = p.processAttributes();
+ if (!rc.ok())
+ {
+ FAPI_ERR("Error from processAttributes");
+ break;
+ }
+ l_system_memmap.push_back(p);
+ }
+ if (!rc.ok())
+ {
+ break;
}
- break;
+ // sort chips based on their effective stackable size
+ std::sort(l_system_memmap.begin(), l_system_memmap.end());
+
+ // establish base for alignment of mirrored/non-mirrored regions
+ uint64_t l_m_base_curr;
+ uint64_t l_nm_base_curr;
+ if (l_mirror_policy ==
+ ENUM_ATTR_MEM_MIRROR_PLACEMENT_POLICY_NORMAL)
+ {
+ // non-mirrored at zero, mirrored at offset
+ l_nm_base_curr = OPT_MEMMAP_BASE_ORIGIN;
+ l_m_base_curr = OPT_MEMMAP_OFFSET_ORIGIN;
+ }
+ else if (l_mirror_policy ==
+ ENUM_ATTR_MEM_MIRROR_PLACEMENT_POLICY_FLIPPED)
+ {
+ // mirrored at zero, non-mirrored at offset
+ l_nm_base_curr = OPT_MEMMAP_OFFSET_ORIGIN;
+ l_m_base_curr = OPT_MEMMAP_BASE_ORIGIN;
+ }
+ else
+ {
+ // start at zero, mirrored region will stack on top
+ // of non-mirrored address space, handle offset in loop
+ l_nm_base_curr = OPT_MEMMAP_BASE_ORIGIN;
+ l_m_base_curr = OPT_MEMMAP_BASE_ORIGIN;
+ }
+
+ // walk through chips, from largest->smallest effective size &
+ // assign base addresses for each group
+ for (uint8_t i = l_system_memmap.size(); i != 0; --i)
+ {
+ FAPI_DBG("Stacking chip n%d:p%d (eff nm size = %lld GB, eff m size = %lld GB)...",
+ l_system_memmap[i-1].iv_node_id,
+ l_system_memmap[i-1].iv_chip_id,
+ l_system_memmap[i-1].iv_nm_eff_size / OPT_MEMMAP_GB,
+ l_system_memmap[i-1].iv_m_eff_size / OPT_MEMMAP_GB);
+
+ if (l_mirror_policy ==
+ ENUM_ATTR_MEM_MIRROR_PLACEMENT_POLICY_SELECTIVE)
+ {
+ l_m_base_curr += l_system_memmap[i-1].iv_nm_eff_size;
+ }
+ // establish base addresses for this chip & realign
+ // all groups on this chip to reflect this
+ l_system_memmap[i-1].setNMBase(l_nm_base_curr);
+ l_system_memmap[i-1].setMBase(l_m_base_curr);
+ FAPI_DBG("nm base: %016llX", l_nm_base_curr);
+ FAPI_DBG("m base: %016llX", l_m_base_curr);
+ if (l_mirror_policy ==
+ ENUM_ATTR_MEM_MIRROR_PLACEMENT_POLICY_NORMAL)
+ {
+ l_nm_base_curr += l_system_memmap[i-1].iv_nm_eff_size;
+ l_m_base_curr += l_system_memmap[i-1].iv_nm_eff_size / 2;
+ }
+ else if (l_mirror_policy ==
+ ENUM_ATTR_MEM_MIRROR_PLACEMENT_POLICY_FLIPPED)
+ {
+ l_nm_base_curr += l_system_memmap[i-1].iv_nm_eff_size;
+ l_m_base_curr += l_system_memmap[i-1].iv_m_eff_size;
+ }
+ else
+ {
+ l_nm_base_curr += PowerOf2Roundedup(
+ l_system_memmap[i-1].iv_nm_eff_size +
+ l_system_memmap[i-1].iv_m_eff_size);
+ l_m_base_curr = l_nm_base_curr;
+ }
+
+ // allocate HTM/OCC memory requests for this chip
+ rc = l_system_memmap[i-1].allocate();
+ if (!rc.ok())
+ {
+ FAPI_ERR("Error from allocate");
+ break;
+ }
+
+ // flush attributes for this chip
+ rc = l_system_memmap[i-1].flushAttributes();
+ if (!rc.ok())
+ {
+ FAPI_ERR("Error from flushAttributes");
+ break;
+ }
+ }
+ if (!rc.ok())
+ {
+ break;
+ }
}
+ } while(0);
+
+ return rc;
+}
- return rc;
- }
} //end extern C
diff --git a/src/usr/hwpf/hwp/mc_config/mss_eff_config/opt_memmap.H b/src/usr/hwpf/hwp/mc_config/mss_eff_config/opt_memmap.H
index db8e96cba..35d0790e8 100644
--- a/src/usr/hwpf/hwp/mc_config/mss_eff_config/opt_memmap.H
+++ b/src/usr/hwpf/hwp/mc_config/mss_eff_config/opt_memmap.H
@@ -20,46 +20,92 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: opt_memmap.H,v 1.3 2013/02/20 23:13:30 vanlee Exp $
-//------------------------------------------------------------------------------
-// *! (C) Copyright International Business Machines Corp. 2012
-// *! All Rights Reserved -- Property of IBM
-// *! *** IBM Confidential ***
-//------------------------------------------------------------------------------
-// *! TITLE : opt_memmap.H
-// *! DESCRIPTION : see additional comments below
-// *! OWNER NAME : Girisankar Paulraj Email: gpaulraj@in.ibm.com
-// *! BACKUP NAME : Mark Bellows Email: bellows@us.ibm.com
-// *! ADDITIONAL COMMENTS :
-//
-// Header file for opt_memmap
-//
-//------------------------------------------------------------------------------
-// Don't forget to create CVS comments when you check in your changes!
+// $Id: opt_memmap.H,v 1.4 2013/05/06 15:14:25 jmcgill Exp $
+// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/p8/working/procedures/ipl/fapi/opt_memmap.H,v $ */
+
+
//------------------------------------------------------------------------------
// CHANGE HISTORY:
//------------------------------------------------------------------------------
// Version:| Author: | Date: | Comment:
//---------|----------|---------|-----------------------------------------------
-// 1.1 | vanlee | 12/01/12| Initial version
-// 1.2 | vanlee | 01/04/13| Added version string
+// 1.4 | jmcgill | 04/28/13| Shift constant definitions
// 1.3 | vanlee | 02/20/13| Added i_init parameter
+// 1.2 | vanlee | 01/04/13| Added version string
+// 1.1 | vanlee | 12/01/12| Initial version
#ifndef MSS_OPT_MEMMAP_H_
#define MSS_OPT_MEMMAP_H_
+
+//------------------------------------------------------------------------------
+// Includes
+//------------------------------------------------------------------------------
+
#include <fapi.H>
+
+//------------------------------------------------------------------------------
+// Constant definitions
+//------------------------------------------------------------------------------
+
+// conversion factor definitions
+const uint64_t OPT_MEMMAP_GB = 0x0000000040000000ULL;
+
+// default origin for non-mirrored/mirrored address regions
+const uint64_t OPT_MEMMAP_BASE_ORIGIN = 0; // 0
+const uint64_t OPT_MEMMAP_OFFSET_ORIGIN = 0x0002000000000000LL; // 512TB
+
+// maximum non-mirrored/mirrored regions supported
+const uint8_t OPT_MEMMAP_MAX_NM_REGIONS = 8;
+const uint8_t OPT_MEMMAP_MAX_M_REGIONS = 4;
+
+// attribute index constants
+// first array dimension (group ID)
+const uint8_t OPT_MEMMAP_GROUP_32_NM_START_INDEX = 0;
+const uint8_t OPT_MEMMAP_GROUP_32_NM_END_INDEX = 7;
+const uint8_t OPT_MEMMAP_GROUP_32_M_START_INDEX = 8;
+const uint8_t OPT_MEMMAP_GROUP_32_M_END_INDEX = 15;
+
+const uint8_t OPT_MEMMAP_GROUP_32_DIM1 = (OPT_MEMMAP_GROUP_32_M_END_INDEX-
+ OPT_MEMMAP_GROUP_32_NM_START_INDEX)+1;
+
+// second array dimension (group definition)
+const uint8_t OPT_MEMMAP_GROUP_32_MCS_SIZE_INDEX = 0;
+const uint8_t OPT_MEMMAP_GROUP_32_MCS_IN_GROUP_INDEX = 1;
+const uint8_t OPT_MEMMAP_GROUP_32_SIZE_INDEX = 2;
+const uint8_t OPT_MEMMAP_GROUP_32_BASE_INDEX = 3;
+const uint8_t OPT_MEMMAP_GROUP_32_MEMBERS_START_INDEX = 4;
+const uint8_t OPT_MEMMAP_GROUP_32_MEMBERS_END_INDEX = 11;
+const uint8_t OPT_MEMMAP_GROUP_32_ALT_VALID_INDEX = 12;
+const uint8_t OPT_MEMMAP_GROUP_32_ALT_SIZE_INDEX = 13;
+const uint8_t OPT_MEMMAP_GROUP_32_ALT_BASE_INDEX = 14;
+const uint8_t OPT_MEMMAP_GROUP_32_LARGEST_MBA_INDEX = 15;
+
+const uint8_t OPT_MEMMAP_GROUP_32_DIM2 = (OPT_MEMMAP_GROUP_32_LARGEST_MBA_INDEX-
+ OPT_MEMMAP_GROUP_32_MCS_SIZE_INDEX)+1;
+
+
+//------------------------------------------------------------------------------
+// Structure definitions
+//------------------------------------------------------------------------------
+
+// function pointer typedef definition for HWP call support
typedef fapi::ReturnCode (*opt_memmap_FP_t)(std::vector<fapi::Target> & i_procs,
- bool i_init);
+ bool i_init);
extern "C"
{
+//------------------------------------------------------------------------------
+// Function prototypes
+//------------------------------------------------------------------------------
+
// i_init = true : initialize all ATTR_PROC_MEM_BASE attributes to 0
// = false : perform memory map optimization
fapi::ReturnCode opt_memmap(std::vector<fapi::Target> & i_procs, bool i_init);
+
} // extern "C"
#endif // MSS_OPT_MEMMAP_H_
diff --git a/src/usr/hwpf/hwp/mc_config/mss_eff_config/opt_memmap_errors.xml b/src/usr/hwpf/hwp/mc_config/mss_eff_config/opt_memmap_errors.xml
new file mode 100644
index 000000000..c87ce3f27
--- /dev/null
+++ b/src/usr/hwpf/hwp/mc_config/mss_eff_config/opt_memmap_errors.xml
@@ -0,0 +1,64 @@
+<!-- IBM_PROLOG_BEGIN_TAG -->
+<!-- This is an automatically generated prolog. -->
+<!-- -->
+<!-- $Source: src/usr/hwpf/hwp/mc_config/mss_eff_config/opt_memmap_errors.xml $ -->
+<!-- -->
+<!-- IBM CONFIDENTIAL -->
+<!-- -->
+<!-- COPYRIGHT International Business Machines Corp. 2013 -->
+<!-- -->
+<!-- p1 -->
+<!-- -->
+<!-- Object Code Only (OCO) source materials -->
+<!-- Licensed Internal Code Source Materials -->
+<!-- IBM HostBoot Licensed Internal Code -->
+<!-- -->
+<!-- The source code for this program is not published or otherwise -->
+<!-- divested of its trade secrets, irrespective of what has been -->
+<!-- deposited with the U.S. Copyright Office. -->
+<!-- -->
+<!-- Origin: 30 -->
+<!-- -->
+<!-- IBM_PROLOG_END_TAG -->
+<!-- Error definitions for proc_setup_bars -->
+<hwpErrors>
+ <!-- *********************************************************************** -->
+ <hwpError>
+ <rc>RC_OPT_MEMMAP_MEM_BASE_ERR</rc>
+ <description>Unexpected value for ATTR_PROC_MEM_BASE returned after mss_eff_grouping execution.</description>
+ <ffdc>ADDR</ffdc>
+ </hwpError>
+ <hwpError>
+ <rc>RC_OPT_MEMMAP_MIRROR_BASE_ERR</rc>
+ <description>Unexpected value for ATTR_PROC_MIRROR_BASE returned after mss_eff_grouping execution.</description>
+ <ffdc>ADDR</ffdc>
+ </hwpError>
+ <hwpError>
+ <rc>RC_OPT_MEMMAP_NON_MIRROR_GROUP_ERR</rc>
+ <description>Inconsistent non-mirrored group content.</description>
+ <ffdc>GROUP</ffdc>
+ <ffdc>MEM_BASES</ffdc>
+ <ffdc>MEM_SIZES</ffdc>
+ <ffdc>GROUP_BASE</ffdc>
+ <ffdc>GROUP_SIZE</ffdc>
+ </hwpError>
+ <hwpError>
+ <rc>RC_OPT_MEMMAP_MIRROR_GROUP_ERR</rc>
+ <description>Inconsistent mirrored group content.</description>
+ <ffdc>GROUP</ffdc>
+ <ffdc>MIRROR_BASES</ffdc>
+ <ffdc>MIRROR_SIZES</ffdc>
+ <ffdc>GROUP_BASE</ffdc>
+ <ffdc>GROUP_SIZE</ffdc>
+ </hwpError>
+ <hwpError>
+ <rc>RC_OPT_MEMMAP_GROUP_PARTNER_ERR</rc>
+ <description>Unable to find find non-mirrored group partner for mirrored group.</description>
+ <ffdc>GROUP</ffdc>
+ </hwpError>
+ <hwpError>
+ <rc>RC_OPT_MEMMAP_ALLOC_ERR</rc>
+ <description>Unable to satisfy allocatio request based on available free memory on this chip.</description>
+ <ffdc>ALLOC_INDEX</ffdc>
+ </hwpError>
+</hwpErrors>
OpenPOWER on IntegriCloud