summaryrefslogtreecommitdiffstats
path: root/src/usr/hwpf/hwp/mc_config/mss_eff_config
diff options
context:
space:
mode:
authorThi Tran <thi@us.ibm.com>2013-09-16 16:09:48 -0500
committerA. Patrick Williams III <iawillia@us.ibm.com>2013-09-18 10:46:25 -0500
commit44933fc2a399c991c7ef31b1a29219f808c4395e (patch)
treef6fa7ad0b47c91bf7d5c37bd88f24fa72654270b /src/usr/hwpf/hwp/mc_config/mss_eff_config
parentaf0bcac5124a4c54ec38e6d00d14f2cec19d5c77 (diff)
downloadtalos-hostboot-44933fc2a399c991c7ef31b1a29219f808c4395e.tar.gz
talos-hostboot-44933fc2a399c991c7ef31b1a29219f808c4395e.zip
Hostboot - Updated HWPs from defect SW223817 lrdimm supports
Change-Id: I80e5f13a59fb3d1e882435d8a457f3a806885063 CQ: SW223817 Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/6187 Tested-by: Jenkins Server Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/hwpf/hwp/mc_config/mss_eff_config')
-rw-r--r--src/usr/hwpf/hwp/mc_config/mss_eff_config/mss_eff_config.C92
-rw-r--r--src/usr/hwpf/hwp/mc_config/mss_eff_config/mss_eff_config_termination.C196
2 files changed, 242 insertions, 46 deletions
diff --git a/src/usr/hwpf/hwp/mc_config/mss_eff_config/mss_eff_config.C b/src/usr/hwpf/hwp/mc_config/mss_eff_config/mss_eff_config.C
index 10668787a..5c346d576 100644
--- a/src/usr/hwpf/hwp/mc_config/mss_eff_config/mss_eff_config.C
+++ b/src/usr/hwpf/hwp/mc_config/mss_eff_config/mss_eff_config.C
@@ -20,7 +20,7 @@
/* Origin: 30 */
/* */
/* IBM_PROLOG_END_TAG */
-// $Id: mss_eff_config.C,v 1.28 2013/08/06 23:38:34 asaetow Exp $
+// $Id: mss_eff_config.C,v 1.33 2013/09/16 13:56:33 bellows Exp $
// $Source: /afs/awd/projects/eclipz/KnowledgeBase/.cvsroot/eclipz/chips/
// centaur/working/procedures/ipl/fapi/mss_eff_config.C,v $
//------------------------------------------------------------------------------
@@ -44,7 +44,11 @@
//------------------------------------------------------------------------------
// Version:| Author: | Date: | Comment:
//---------|----------|---------|-----------------------------------------------
-// 1.29 | | |
+// 1.33 | bellows |16-SEP-13| Hostboot compile update
+// 1.32 | kcook |13-SEP-13| Added using namespace fapi.
+// 1.31 | kcook |13-SEP-13| Updated define FAPI_LRDIMM token.
+// 1.30 | kcook |27-AUG-13| Removed LRDIMM support to mss_lrdimm_funcs.C.
+// 1.29 | kcook |16-AUG-13| Added LRDIMM support.
// 1.28 | asaetow |06-AUG-13| Added call to mss_eff_pre_config().
// | | | Removed call to mss_eff_config_thermal().
// | | | NOTE: Do NOT pickup without mss_eff_pre_config.C v1.1 or newer.
@@ -136,6 +140,7 @@
// 1.1 | asaetow |01-NOV-11| First Draft.
//------------------------------------------------------------------------------
+#include <fapi.H>
//------------------------------------------------------------------------------
// My Includes
@@ -143,15 +148,18 @@
#include <mss_eff_config.H>
#include <mss_eff_config_rank_group.H>
#include <mss_eff_config_cke_map.H>
-#include <mss_eff_config_termination.H>
#include <mss_eff_pre_config.H>
#include <mss_eff_config_shmoo.H>
+#include <mss_lrdimm_funcs.H>
+
+#include <mss_eff_config_termination.H>
+
+
//------------------------------------------------------------------------------
// Includes
//------------------------------------------------------------------------------
-#include <fapi.H>
//------------------------------------------------------------------------------
// Constants
@@ -163,6 +171,22 @@ const uint8_t PORT_SIZE = 2;
const uint8_t DIMM_SIZE = 2;
const uint8_t RANK_SIZE = 4;
+#ifndef FAPI_LRDIMM
+using namespace fapi;
+fapi::ReturnCode mss_lrdimm_eff_config( const Target& i_target_mba,
+ uint8_t cur_dimm_spd_valid_u8array[PORT_SIZE][DIMM_SIZE],
+ uint32_t mss_freq,
+ uint8_t eff_num_ranks_per_dimm[PORT_SIZE][DIMM_SIZE])
+{
+ ReturnCode rc;
+
+ FAPI_ERR("Invalid exec of LRDIMM function on %s!", i_target_mba.toEcmdString());
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_PLACE_HOLDER_ERROR);
+ return rc;
+
+}
+#endif
+
//------------------------------------------------------------------------------
// Structure
// @brief struct mss_eff_config_data
@@ -236,8 +260,8 @@ struct mss_eff_config_spd_data
uint8_t fine_offset_trcdmin[PORT_SIZE][DIMM_SIZE];
uint8_t fine_offset_trpmin[PORT_SIZE][DIMM_SIZE];
uint8_t fine_offset_trcmin[PORT_SIZE][DIMM_SIZE];
- // HERE uint8_t module_specific_section[PORT_SIZE][DIMM_SIZE]
- // [SPD_ATTR_SIZE_57];
+
+ //uint8_t module_specific_section[PORT_SIZE][DIMM_SIZE][57];
//uint32_t module_id_module_manufacturers_jedec_id_code
// [PORT_SIZE][DIMM_SIZE];
//uint8_t module_id_module_manufacturing_location[PORT_SIZE]
@@ -554,7 +578,9 @@ fapi::ReturnCode mss_eff_config_read_spd_data(fapi::Target i_target_dimm,
rc = FAPI_ATTR_GET(ATTR_SPD_FINE_OFFSET_TRCMIN, &i_target_dimm,
p_o_spd_data->fine_offset_trcmin[i_port][i_dimm]);
if(rc) break;
- // HERE rc = FAPI_ATTR_GET(ATTR_SPD_MODULE_SPECIFIC_SECTION,
+
+
+ //rc = FAPI_ATTR_GET(ATTR_SPD_MODULE_SPECIFIC_SECTION, // LRDIMM needed.
//&i_target_dimm,
//p_o_spd_data->module_specific_section[i_port][i_dimm]);
//if(rc) break;
@@ -1574,7 +1600,16 @@ fapi::ReturnCode mss_eff_config_setup_eff_atts(
if (p_i_mss_eff_config_data->
cur_dimm_spd_valid_u8array[l_cur_mba_port][l_cur_mba_dimm] == MSS_EFF_VALID)
{
- if (p_i_data->num_ranks[l_cur_mba_port]
+ if (p_i_data->num_ranks[l_cur_mba_port]
+ [l_cur_mba_dimm] == 0x04) // for 8R LRDIMM since no ENUM defined yet for SPD of 8R
+// [l_cur_mba_dimm] == fapi::ENUM_ATTR_SPD_NUM_RANKS_R8)
+ {
+ p_o_atts->eff_num_ranks_per_dimm[l_cur_mba_port]
+ [l_cur_mba_dimm] = 8;
+ p_o_atts->eff_dimm_ranks_configed[l_cur_mba_port]
+ [l_cur_mba_dimm] = 0x80; // DD0/1: 1 master rank
+ }
+ else if (p_i_data->num_ranks[l_cur_mba_port]
[l_cur_mba_dimm] == fapi::ENUM_ATTR_SPD_NUM_RANKS_R4)
{
p_o_atts->eff_num_ranks_per_dimm[l_cur_mba_port]
@@ -1654,6 +1689,9 @@ fapi::ReturnCode mss_eff_config_setup_eff_atts(
FAPI_ERR("Currently unsupported IBM_TYPE on %s!", i_target_mba.toEcmdString());
FAPI_SET_HWP_ERROR(rc, RC_MSS_PLACE_HOLDER_ERROR); return rc;
}
+ } else if ( p_o_atts->eff_dimm_type == fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM ) {
+ FAPI_INF("Will set LR atts after orig eff_config functions");
+
} else {
p_o_atts->eff_ibm_type[l_cur_mba_port][l_cur_mba_dimm] = fapi::ENUM_ATTR_EFF_IBM_TYPE_UNDEFINED;
FAPI_ERR("Currently unsupported DIMM_TYPE on %s!", i_target_mba.toEcmdString());
@@ -1722,12 +1760,24 @@ fapi::ReturnCode mss_eff_config_setup_eff_atts(
[l_cur_mba_dimm] = 0;
}
- // AST HERE: Needs SPD byte33[7,1:0],
- // currently hard coded to no stacking
- p_o_atts->eff_num_master_ranks_per_dimm[l_cur_mba_port]
- [l_cur_mba_dimm] =
- p_o_atts->eff_num_ranks_per_dimm[l_cur_mba_port]
- [l_cur_mba_dimm];
+
+ if ( (p_o_atts->eff_dimm_type == fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM) &&
+ (p_i_data->dram_device_type[l_cur_mba_port][l_cur_mba_dimm] ==
+ fapi::ENUM_ATTR_SPD_DRAM_DEVICE_TYPE_DDR3) &&
+ (p_o_atts->eff_num_ranks_per_dimm[l_cur_mba_port][l_cur_mba_dimm] == 8) )
+ {
+ p_o_atts->eff_num_master_ranks_per_dimm[l_cur_mba_port]
+ [l_cur_mba_dimm] = 1;
+ }
+ else
+ {
+ // AST HERE: Needs SPD byte33[7,1:0],
+ // currently hard coded to no stacking
+ p_o_atts->eff_num_master_ranks_per_dimm[l_cur_mba_port]
+ [l_cur_mba_dimm] =
+ p_o_atts->eff_num_ranks_per_dimm[l_cur_mba_port]
+ [l_cur_mba_dimm];
+ }
// DEBUG HERE:
//FAPI_INF("size=%d density=%d ranks=%d width=%d on %s",
@@ -2113,6 +2163,20 @@ fapi::ReturnCode mss_eff_config(const fapi::Target i_target_mba)
break;
}
+ // LRDIMM attributes
+ if ( p_l_atts->eff_dimm_type == fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM )
+ {
+ rc = mss_lrdimm_eff_config(i_target_mba, p_l_mss_eff_config_data->cur_dimm_spd_valid_u8array,
+ p_l_mss_eff_config_data->mss_freq, p_l_atts->eff_num_ranks_per_dimm);
+ if(rc)
+ {
+ FAPI_ERR("Error from mss_lrdimm_eff_config()");
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_PLACE_HOLDER_ERROR);
+ break;
+ }
+
+ }
+
// Calls to sub-procedures
rc = mss_eff_config_rank_group(i_target_mba); if(rc) break;
rc = mss_eff_config_cke_map(i_target_mba); if(rc) break;
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 674535c78..62b76a038 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.30 2013/08/07 15:57:38 lapietra Exp $
+// $Id: mss_eff_config_termination.C,v 1.32 2013/08/27 22:25:29 kcook 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
@@ -42,6 +42,8 @@
//------------------------------------------------------------------------------
// Version:| Author: | Date: | Comment:
//---------|----------|---------|-----------------------------------------------
+// 1.32 | kcook |27-AUG-13| Removed LRDIMM support to mss_lrdimm_funcs.C.
+// 1.31 | kcook |16-AUG-13| Added LRDIMM support.
// 1.30 | dcadiga |07-AUG-13| Fixed hostboot compile issue
// 1.29 | dcadiga |05-AUG-13| KG3 allowed, ifdef removed for lab card uint declaration, added 4R support to 1600, changed 4Rx4 / 4Rx8 RCD Drive Settings
// 1.28 | asaetow |05-AUG-13| Added temp workaround for incorrect byte33 SPD data in early lab OLD 16G/32G CDIMMs.
@@ -90,8 +92,35 @@
//----------------------------------------------------------------------
#include <fapi.H>
+#include <mss_lrdimm_funcs.H>
+
+
+#ifndef LRDIMM
+using namespace fapi;
+ReturnCode mss_lrdimm_rewrite_odt( const Target& i_target_mba,
+ uint32_t *p_b_var_array,
+ uint32_t *var_array_p_array[5])
+{
+ ReturnCode rc;
+
+ FAPI_ERR("Invalid exec of LRDIMM function on %s!", i_target_mba.toEcmdString());
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_PLACE_HOLDER_ERROR);
+ return rc;
+
+}
+ReturnCode mss_lrdimm_term_atts(const Target& i_target_mba)
+{
+ ReturnCode rc;
+
+ FAPI_ERR("Invalid exec of LRDIMM function on %s!", i_target_mba.toEcmdString());
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_PLACE_HOLDER_ERROR);
+ return rc;
+
+}
+#endif
+
//----------------------------------------------------------------------
// ENUMs and CONSTs
//----------------------------------------------------------------------
@@ -690,6 +719,8 @@ fapi::ReturnCode mss_eff_config_termination(const fapi::Target i_target_mba) {
uint8_t l_dimm_custom_u8;
uint8_t l_num_drops_per_port;
uint8_t l_dram_width_u8;
+
+// this statement makes only lab version of this code have a raw card attribute
#ifdef FAPIECMD
uint8_t l_lab_raw_card_u8 = 0;
#endif
@@ -721,7 +752,6 @@ fapi::ReturnCode mss_eff_config_termination(const fapi::Target i_target_mba) {
rc = FAPI_ATTR_GET(ATTR_EFF_DRAM_WIDTH, &i_target_mba, l_dram_width_u8); if(rc) return rc;
rc = FAPI_ATTR_GET(ATTR_EFF_DIMM_SIZE, &i_target_mba, l_dimm_size_u8array); if(rc) return rc;
-
// Temp workaround for incorrect byte33 SPD data "ATTR_EFF_STACK_TYPE" in early lab CDIMMs.
uint8_t l_stack_type_modified = 0;
for (uint8_t cur_port = 0; cur_port < PORT_SIZE; cur_port += 1) {
@@ -783,16 +813,19 @@ fapi::ReturnCode mss_eff_config_termination(const fapi::Target i_target_mba) {
//KG3
//FAPI_ERR("RUNNING AS KG3 LAB CARD TYPE, KG3 IS DISABLED UNTIL THE INITIAL SETTINGS ARE VERIFIED\n");
//FAPI_SET_HWP_ERROR(rc, RC_MSS_PLACE_HOLDER_ERROR); return rc;
-
if( l_target_mba_pos == 0){
if ( l_mss_freq <= 1466 ) { // 1333Mbps
-
- if((l_num_ranks_per_dimm_u8array[0][0] == 2) && (l_num_ranks_per_dimm_u8array[0][1] == 0) && (l_dram_width_u8 == 4)){
+ if( l_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM ) {
+ //Removed Width Check, use settings for either x8 or x4, use 1600 settings for 1333!
+ memcpy(base_var_array,rdimm_kg3_1333_r1_mba0,210*sizeof(uint32_t));
+ FAPI_INF("LRDIMM: Base - KG3 RDIMM r10 %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());
+ }
+ else if((l_num_ranks_per_dimm_u8array[0][0] == 2) && (l_num_ranks_per_dimm_u8array[0][1] == 0) && (l_dram_width_u8 == 4)){
memcpy(base_var_array,rdimm_kg3_1333_r2e_mba0,210*sizeof(uint32_t));
FAPI_INF("KG3 r2e %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!
+ 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_kg3_1333_r1_mba0,210*sizeof(uint32_t));
FAPI_INF("KG3 r1 %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());
}
@@ -811,23 +844,28 @@ 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)){
- //Removed Width Check, use settings for either x8 or x4
+ if( l_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM ) {
+ //Removed Width Check, use settings for either x8 or x4
+ memcpy(base_var_array,rdimm_kg3_1600_r1_mba0,210*sizeof(uint32_t));
+ FAPI_INF("LRDIMM: Base - KG3 LRDIMM r10 %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());
+ }
+ else if((l_num_ranks_per_dimm_u8array[0][0] == 1) && (l_num_ranks_per_dimm_u8array[0][1] == 0)){
+ //Removed Width Check, use settings for either x8 or x4
memcpy(base_var_array,rdimm_kg3_1600_r1_mba0,210*sizeof(uint32_t));
FAPI_INF("KG3 r10 %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());
}
else if((l_num_ranks_per_dimm_u8array[0][0] == 2) && (l_num_ranks_per_dimm_u8array[0][1] == 0) && (l_dram_width_u8 == 4)){
-
+
memcpy(base_var_array,rdimm_kg3_1600_r2e_mba0,210*sizeof(uint32_t));
FAPI_INF("KG3 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_kg3_1600_r2b_mba0,210*sizeof(uint32_t));
FAPI_INF("KG3 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)){
- memcpy(base_var_array,rdimm_kg3_1600_r4_mba0,210*sizeof(uint32_t));
+ else if((l_num_ranks_per_dimm_u8array[0][0] == 4) && (l_num_ranks_per_dimm_u8array[0][1] == 0)){
+ memcpy(base_var_array,rdimm_kg3_1600_r4_mba0,210*sizeof(uint32_t));
FAPI_INF("KG3 r40 %d MBA%s Using 1333 Settings\n",l_mss_freq,i_target_mba.toEcmdString());
}
@@ -839,13 +877,17 @@ fapi::ReturnCode mss_eff_config_termination(const fapi::Target i_target_mba) {
}//MBA0
else{
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)){
+ if( l_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM ) {
+ //Removed Width Check, use settings for either x8 or x4,
+ memcpy(base_var_array,rdimm_kg3_1333_r1_mba1,210*sizeof(uint32_t));
+ FAPI_INF("LRDIMM: Base - KG3 RDIMM r10 %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());
+ }
+ else if((l_num_ranks_per_dimm_u8array[0][0] == 2) && (l_num_ranks_per_dimm_u8array[0][1] == 0) && (l_dram_width_u8 == 4)){
memcpy(base_var_array,rdimm_kg3_1333_r2e_mba1,210*sizeof(uint32_t));
FAPI_INF("KG3 r2e %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());
}
- 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!
+ 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_kg3_1333_r1_mba1,210*sizeof(uint32_t));
FAPI_INF("KG3 r1 %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());
}
@@ -864,23 +906,28 @@ 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)){
- //Removed Width Check, use settings for either x8 or x4
+ if( l_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM ) {
+ //Removed Width Check, use settings for either x8 or x4
+ memcpy(base_var_array,rdimm_kg3_1600_r1_mba1,210*sizeof(uint32_t));
+ FAPI_INF("LRDIMM: Base - KG3 RDIMM r10 %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());
+ }
+ 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
memcpy(base_var_array,rdimm_kg3_1600_r1_mba1,210*sizeof(uint32_t));
FAPI_INF("KG3 r10 %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());
}
else if((l_num_ranks_per_dimm_u8array[0][0] == 2) && (l_num_ranks_per_dimm_u8array[0][1] == 0) && (l_dram_width_u8 == 4)){
-
+
memcpy(base_var_array,rdimm_kg3_1600_r2e_mba1,210*sizeof(uint32_t));
FAPI_INF("KG3 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_kg3_1600_r2b_mba1,210*sizeof(uint32_t));
FAPI_INF("KG3 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)){
- memcpy(base_var_array,rdimm_kg3_1600_r4_mba1,210*sizeof(uint32_t));
+ else if((l_num_ranks_per_dimm_u8array[0][0] == 4) && (l_num_ranks_per_dimm_u8array[0][1] == 0)){
+ memcpy(base_var_array,rdimm_kg3_1600_r4_mba1,210*sizeof(uint32_t));
FAPI_INF("KG3 r40 %d MBA%s Using 1333 Settings\n",l_mss_freq,i_target_mba.toEcmdString());
}
@@ -890,7 +937,6 @@ fapi::ReturnCode mss_eff_config_termination(const fapi::Target i_target_mba) {
}
}//1600
}//MBA1
-
}
#endif
@@ -1312,11 +1358,75 @@ fapi::ReturnCode mss_eff_config_termination(const fapi::Target i_target_mba) {
}//MBA1
}//End RDIMM
else if( l_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM ){
- FAPI_ERR("Invalid Dimm Type LRDIMM FREQ %d MBA0\n",l_mss_freq);
- FAPI_ERR("Invalid Dimm Type LRDIMM FREQ %d MBA1\n",l_mss_freq);
- FAPI_SET_HWP_ERROR(rc, RC_MSS_PLACE_HOLDER_ERROR); return rc;
+ l_dimm_rc_u8 = 7;
+ // Set LRDIMM base var array as 1Rank RDIMM
+ if( l_target_mba_pos == 0){
+ if ( l_mss_freq <= 1466 ) { // 1333Mbps
+ //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("LRDIMM: Base - RDIMM r10 %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());
- }
+ } else if ( l_mss_freq <= 1733 ) { // 1600Mbps
+ //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("LRDIMM: Base - LRDIMM r10 %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());
+ }
+ }//MBA0
+ else{
+ if ( l_mss_freq <= 1466 ) { // 1333Mbps
+ if( (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_SINGLE)){
+ memcpy(base_var_array,rdimm_glacier_1333_r10_mba1,200*sizeof(uint32_t));
+ FAPI_INF("LRDIMM: Base - RDIMM r10 %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());
+ }
+ else if( (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_DUAL)){
+ memcpy(base_var_array,rdimm_glacier_1333_r11_mba1,200*sizeof(uint32_t));
+ FAPI_INF("LRDIMM: Base - RDIMM r11 %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());
+ }
+ else{
+ FAPI_ERR("Invalid Dimm Type LRDIMM FREQ %d HERE MBA1\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_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_SINGLE)){
+ memcpy(base_var_array,rdimm_glacier_1600_r10_mba1,200*sizeof(uint32_t));
+ FAPI_INF("LRDIMM: Base - RDIMM r10 %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());
+ }
+ else if( (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_DUAL)){
+ memcpy(base_var_array,rdimm_glacier_1600_r11_mba1,200*sizeof(uint32_t));
+ FAPI_INF("LRDIMM: Base - RDIMM r11 %d MBA%s\n",l_mss_freq,i_target_mba.toEcmdString());
+ }
+ else{
+ FAPI_ERR("Invalid Dimm Type LRDIMM FREQ %d MBA1\n",l_mss_freq);
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_PLACE_HOLDER_ERROR); return rc;
+ }
+ }
+ }//MBA1
+
+//----------------------------------------------------------------------------------------------------------------
+
+ // For dual drop, Set ODT_RD as 2rank (8R LRDIMM) or 4rank (4R LRDIMM)
+ if ( l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_DUAL ) {
+ uint32_t *p_1066_mba1_array = &rdimm_glacier_1066_r44_mba1[0];
+ uint32_t *p_1333_x4_mba1_array = &rdimm_glacier_1333_r22e_mba1[0];
+ uint32_t *p_1333_x8_mba1_array = &rdimm_glacier_1333_r22b_mba1[0];
+ uint32_t *p_1600_x4_mba1_array = &rdimm_glacier_1600_r22e_mba1[0];
+ uint32_t *p_1600_x8_mba1_array = &rdimm_glacier_1600_r22b_mba1[0];
+
+ uint32_t *p_b_var_array = &base_var_array[0];
+
+ uint32_t *var_array_p_array[] = {p_1066_mba1_array, p_1333_x4_mba1_array, p_1333_x8_mba1_array,
+ p_1600_x4_mba1_array, p_1600_x8_mba1_array};
+
+ rc = mss_lrdimm_rewrite_odt(i_target_mba, p_b_var_array, var_array_p_array);
+
+ if(rc)
+ {
+ FAPI_ERR("FAILED LRDIMM rewrite ODT_RD");
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_PLACE_HOLDER_ERROR); return rc;
+ }
+ }
+ } // LRDIMM
else{
FAPI_ERR("Invalid Dimm Type");
FAPI_SET_HWP_ERROR(rc, RC_MSS_PLACE_HOLDER_ERROR); return rc;
@@ -1608,7 +1718,6 @@ fapi::ReturnCode mss_eff_config_termination(const fapi::Target i_target_mba) {
attr_eff_cen_phase_rot_m1_cntl_odt0[1] = base_var_array[i++];
attr_eff_cen_phase_rot_m1_cntl_odt1[1] = base_var_array[i++];
attr_eff_dram_2n_mode_enabled = base_var_array[i++];
-
//Now Setup the RCD - Done Here to Steal Code From Anuwats Version Of Eff Config Termination
@@ -1688,14 +1797,17 @@ fapi::ReturnCode mss_eff_config_termination(const fapi::Target i_target_mba) {
}
}
-
-
- // For DUAL DROP CDIMM
+ // Address mirroring
uint8_t attr_eff_dram_address_mirroring[PORT_SIZE][DIMM_SIZE];
for( int l_port = 0; l_port < PORT_SIZE; l_port += 1 ) {
for( int l_dimm = 0; l_dimm < DIMM_SIZE; l_dimm += 1 ) {
if ((l_dimm_custom_u8 == fapi::ENUM_ATTR_EFF_CUSTOM_DIMM_YES) && (l_num_drops_per_port == fapi::ENUM_ATTR_EFF_NUM_DROPS_PER_PORT_DUAL) && (l_dimm == 1) && (l_dimm_rc_u8 !=3) && (l_stack_type_u8array[l_port][l_dimm] == fapi::ENUM_ATTR_EFF_STACK_TYPE_NONE)) {
+ // For DUAL DROP CDIMM
attr_eff_dram_address_mirroring[l_port][l_dimm] = 0x0F;
+ } else if ( (l_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM) && (l_attr_eff_dimm_rcd_cntl_word_0_15[l_port][l_dimm] & 0x0000000000000010LL) ) {
+ // For LRDIMM SPD file , == 1 Odd ranks are mirrored
+ attr_eff_dram_address_mirroring[l_port][l_dimm] = 0x05;
+
} else {
attr_eff_dram_address_mirroring[l_port][l_dimm] = 0x00;
}
@@ -1793,6 +1905,17 @@ fapi::ReturnCode mss_eff_config_termination(const fapi::Target i_target_mba) {
attr_eff_gpo[1] = (uint8_t)5;
}
+ else if(l_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM){
+ //LRDIMM
+ attr_eff_rlo[0] = (uint8_t)6;
+ attr_eff_rlo[1] = (uint8_t)6;
+ //Set WLO and GPO
+ attr_eff_wlo[0] = (uint8_t)255; // WLO = -1, 2's complement
+ attr_eff_wlo[1] = (uint8_t)255;
+ attr_eff_gpo[0] = (uint8_t)7;
+ attr_eff_gpo[1] = (uint8_t)7;
+
+ }
else{
FAPI_ERR("Invalid Card Type RLO Settings \n");
FAPI_SET_HWP_ERROR(rc, RC_MSS_PLACE_HOLDER_ERROR); return rc;
@@ -1928,6 +2051,15 @@ fapi::ReturnCode mss_eff_config_termination(const fapi::Target i_target_mba) {
rc = FAPI_ATTR_SET(ATTR_EFF_DRAM_ADDRESS_MIRRORING, &i_target_mba, attr_eff_dram_address_mirroring); if(rc) return rc;
+ if(l_dimm_type_u8 == fapi::ENUM_ATTR_EFF_DIMM_TYPE_LRDIMM)
+ {
+ rc = mss_lrdimm_term_atts(i_target_mba);
+ if (rc)
+ {
+ FAPI_ERR("Setting LR term atts failed \n");
+ FAPI_SET_HWP_ERROR(rc, RC_MSS_PLACE_HOLDER_ERROR); return rc;
+ }
+ }
FAPI_INF("%s on %s COMPLETE", PROCEDURE_NAME, i_target_mba.toEcmdString());
return rc;
OpenPOWER on IntegriCloud