| /* $NoKeywords:$ */ |
| /** |
| * @file |
| * |
| * Install of build option: Memory |
| * |
| * Contains AMD AGESA install macros and test conditions. Output is the |
| * defaults tables reflecting the User's build options selection. |
| * |
| * @xrefitem bom "File Content Label" "Release Content" |
| * @e project: AGESA |
| * @e sub-project: Options |
| * @e \$Revision: 37402 $ @e \$Date: 2010-09-03 05:36:02 +0800 (Fri, 03 Sep 2010) $ |
| */ |
| /* |
| ***************************************************************************** |
| * |
| * Copyright (c) 2011, Advanced Micro Devices, Inc. |
| * All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions are met: |
| * * Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * * Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in the |
| * documentation and/or other materials provided with the distribution. |
| * * Neither the name of Advanced Micro Devices, Inc. nor the names of |
| * its contributors may be used to endorse or promote products derived |
| * from this software without specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
| * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
| * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
| * DISCLAIMED. IN NO EVENT SHALL ADVANCED MICRO DEVICES, INC. BE LIABLE FOR ANY |
| * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
| * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
| * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
| * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
| * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| * |
| * *************************************************************************** |
| * |
| */ |
| |
| #ifndef _OPTION_MEMORY_INSTALL_H_ |
| #define _OPTION_MEMORY_INSTALL_H_ |
| |
| /*------------------------------------------------------------------------------- |
| * This option file is designed to be included into the platform solution install |
| * file. The platform solution install file will define the options status. |
| * Check to validate the definition |
| */ |
| |
| /*---------------------------------------------------------------------------------- |
| * FEATURE BLOCK FUNCTIONS |
| * |
| * This section defines function names that depend upon options that are selected |
| * in the platform solution install file. |
| */ |
| BOOLEAN MemFDefRet ( |
| IN OUT MEM_NB_BLOCK *NBPtr |
| ) |
| { |
| return FALSE; |
| } |
| |
| BOOLEAN MemMDefRet ( |
| IN MEM_MAIN_DATA_BLOCK *MMPtr |
| ) |
| { |
| return TRUE; |
| } |
| |
| BOOLEAN MemMDefRetFalse ( |
| IN MEM_MAIN_DATA_BLOCK *MMPtr |
| ) |
| { |
| return FALSE; |
| } |
| |
| /* -----------------------------------------------------------------------------*/ |
| /** |
| * |
| * |
| * This function initializes the northbridge block for dimm identification translator |
| * |
| * @param[in,out] *NBPtr - Pointer to the MEM_NB_BLOCK |
| * @param[in,out] *MemPtr - Pointer to the MEM_DATA_STRUCT |
| * @param[in,out] NodeID - ID of current node to construct |
| * @return TRUE - This is the correct constructor for the targeted node. |
| * @return FALSE - This isn't the correct constructor for the targeted node. |
| */ |
| BOOLEAN MemNIdentifyDimmConstructorRetDef ( |
| IN OUT MEM_NB_BLOCK *NBPtr, |
| IN OUT MEM_DATA_STRUCT *MemPtr, |
| IN UINT8 NodeID |
| ) |
| { |
| return FALSE; |
| } |
| /*---------------------------------------------------------------------------------- |
| * TABLE FEATURE BLOCK FUNCTIONS |
| * |
| * This section defines function names that depend upon options that are selected |
| * in the platform solution install file. |
| */ |
| UINT8 MemFTableDefRet ( |
| IN OUT MEM_TABLE_ALIAS **MTPtr |
| ) |
| { |
| return 0; |
| } |
| /*---------------------------------------------------------------------------------- |
| * FEATURE S3 BLOCK FUNCTIONS |
| * |
| * This section defines function names that depend upon options that are selected |
| * in the platform solution install file. |
| */ |
| BOOLEAN MemFS3DefConstructorRet ( |
| IN OUT VOID *S3NBPtr, |
| IN OUT MEM_DATA_STRUCT *MemPtr, |
| IN UINT8 NodeID |
| ) |
| { |
| return TRUE; |
| } |
| |
| #if (OPTION_MEMCTLR_ON == TRUE) |
| #if ((AGESA_ENTRY_INIT_RESUME == TRUE) || (AGESA_ENTRY_INIT_S3SAVE == TRUE) || (AGESA_ENTRY_INIT_LATE_RESTORE == TRUE)) |
| #if (OPTION_S3_MEM_SUPPORT == TRUE) |
| extern MEM_RESUME_CONSTRUCTOR MemS3ResumeConstructNBBlockON; |
| #define MEM_FEATURE_S3_RESUME_CONSTRUCTOR_ON MemS3ResumeConstructNBBlockON |
| #else |
| #define MEM_FEATURE_S3_RESUME_CONSTRUCTOR_ON MemFS3DefConstructorRet |
| #endif |
| #else |
| #define MEM_FEATURE_S3_RESUME_CONSTRUCTOR_ON MemFS3DefConstructorRet |
| #endif |
| #if (AGESA_ENTRY_INIT_GENERAL_SERVICES == TRUE) |
| extern MEM_IDENDIMM_CONSTRUCTOR MemNIdentifyDimmConstructorON; |
| #define MEM_IDENDIMM_ON MemNIdentifyDimmConstructorON |
| #else |
| #define MEM_IDENDIMM_ON MemNIdentifyDimmConstructorRetDef |
| #endif |
| #endif |
| |
| /*---------------------------------------------------------------------------------- |
| * NORTHBRIDGE BLOCK CONSTRUCTOR AND INITIALIZER FUNCTION DEFAULT ASSIGNMENTS |
| * |
| *---------------------------------------------------------------------------------- |
| */ |
| #define MEM_NB_SUPPORT_ON |
| #define MEM_NB_SUPPORT_END { MEM_NB_SUPPORT_STRUCT_VERSION, 0, 0, 0, 0, 0 } |
| |
| #if (AGESA_ENTRY_INIT_POST == TRUE) |
| /*---------------------------------------------------------------------------------- |
| * FLOW CONTROL FUNCTION |
| * |
| * This section selects the function that controls the memory initialization sequence |
| * based upon the number of processor families that the BIOS will support. |
| */ |
| |
| extern MEM_FLOW_CFG MemMFlowDef; |
| |
| #if (OPTION_MEMCTLR_ON == TRUE) |
| extern MEM_FLOW_CFG MemMFlowON; |
| #define MEM_MAIN_FLOW_CONTROL_PTR_ON MemMFlowON, |
| #else |
| #define MEM_MAIN_FLOW_CONTROL_PTR_ON MemMFlowDef, |
| #endif |
| |
| MEM_FLOW_CFG* memFlowControlInstalled[] = { |
| MEM_MAIN_FLOW_CONTROL_PTR_ON |
| NULL |
| }; |
| |
| #if (OPTION_ONLINE_SPARE == TRUE) |
| extern OPTION_MEM_FEATURE_MAIN MemMOnlineSpare; |
| #define MEM_MAIN_FEATURE_ONLINE_SPARE MemMOnlineSpare |
| extern OPTION_MEM_FEATURE_NB MemFOnlineSpare; |
| #define MEM_FEATURE_ONLINE_SPARE MemFOnlineSpare |
| #else |
| #define MEM_MAIN_FEATURE_ONLINE_SPARE MemMDefRet |
| #define MEM_FEATURE_ONLINE_SPARE MemFDefRet |
| #endif |
| |
| #if (OPTION_MEM_RESTORE == TRUE) |
| extern OPTION_MEM_FEATURE_MAIN MemMContextSave; |
| extern OPTION_MEM_FEATURE_MAIN MemMContextRestore; |
| #define MEM_MAIN_FEATURE_MEM_SAVE MemMContextSave |
| #define MEM_MAIN_FEATURE_MEM_RESTORE MemMContextRestore |
| #else |
| #define MEM_MAIN_FEATURE_MEM_SAVE MemMDefRet |
| #define MEM_MAIN_FEATURE_MEM_RESTORE MemMDefRetFalse |
| #endif |
| |
| #if (OPTION_BANK_INTERLEAVE == TRUE) |
| extern OPTION_MEM_FEATURE_NB MemFInterleaveBanks; |
| #define MEM_FEATURE_BANK_INTERLEAVE MemFInterleaveBanks |
| extern OPTION_MEM_FEATURE_NB MemFUndoInterleaveBanks; |
| #define MEM_FEATURE_UNDO_BANK_INTERLEAVE MemFUndoInterleaveBanks |
| #else |
| #define MEM_FEATURE_BANK_INTERLEAVE MemFDefRet |
| #define MEM_FEATURE_UNDO_BANK_INTERLEAVE MemFDefRet |
| #endif |
| |
| #if (OPTION_NODE_INTERLEAVE == TRUE) |
| extern OPTION_MEM_FEATURE_MAIN MemMInterleaveNodes; |
| #define MEM_MAIN_FEATURE_NODE_INTERLEAVE MemMInterleaveNodes |
| extern OPTION_MEM_FEATURE_NB MemFCheckInterleaveNodes; |
| extern OPTION_MEM_FEATURE_NB MemFInterleaveNodes; |
| #define MEM_FEATURE_NODE_INTERLEAVE_CHECK MemFCheckInterleaveNodes |
| #define MEM_FEATURE_NODE_INTERLEAVE MemFInterleaveNodes |
| #else |
| #define MEM_FEATURE_NODE_INTERLEAVE_CHECK MemFDefRet |
| #define MEM_FEATURE_NODE_INTERLEAVE MemFDefRet |
| #define MEM_MAIN_FEATURE_NODE_INTERLEAVE MemMDefRet |
| #endif |
| |
| #if (OPTION_DCT_INTERLEAVE == TRUE) |
| extern OPTION_MEM_FEATURE_NB MemFInterleaveChannels; |
| #define MEM_FEATURE_CHANNEL_INTERLEAVE MemFInterleaveChannels |
| #else |
| #define MEM_FEATURE_CHANNEL_INTERLEAVE MemFDefRet |
| #endif |
| |
| #if (OPTION_ECC == TRUE) |
| extern OPTION_MEM_FEATURE_MAIN MemMEcc; |
| #define MEM_MAIN_FEATURE_ECC MemMEcc |
| extern OPTION_MEM_FEATURE_NB MemFCheckECC; |
| extern OPTION_MEM_FEATURE_NB MemFInitECC; |
| #define MEM_FEATURE_CK_ECC MemFCheckECC |
| #define MEM_FEATURE_ECC MemFInitECC |
| #define MEM_FEATURE_ECCX8 MemMDefRet |
| #else |
| #define MEM_MAIN_FEATURE_ECC MemMDefRet |
| #define MEM_FEATURE_CK_ECC MemFDefRet |
| #define MEM_FEATURE_ECC MemFDefRet |
| #define MEM_FEATURE_ECCX8 MemMDefRet |
| #endif |
| |
| extern OPTION_MEM_FEATURE_MAIN MemMMctMemClr; |
| #define MEM_MAIN_FEATURE_MEM_CLEAR MemMMctMemClr |
| |
| #if (OPTION_DMI == TRUE) |
| #if (OPTION_DDR3 == TRUE) |
| extern OPTION_MEM_FEATURE_MAIN MemFDMISupport3; |
| #define MEM_MAIN_FEATURE_MEM_DMI MemFDMISupport3 |
| #else |
| extern OPTION_MEM_FEATURE_MAIN MemFDMISupport2; |
| #define MEM_MAIN_FEATURE_MEM_DMI MemFDMISupport2 |
| #endif |
| #else |
| #define MEM_MAIN_FEATURE_MEM_DMI MemMDefRet |
| #endif |
| |
| #if (OPTION_DDR3 == TRUE) |
| extern OPTION_MEM_FEATURE_NB MemFOnDimmThermal; |
| extern OPTION_MEM_FEATURE_MAIN MemMLvDdr3; |
| extern OPTION_MEM_FEATURE_NB MemFLvDdr3; |
| #define MEM_FEATURE_ONDIMMTHERMAL MemFOnDimmThermal |
| #define MEM_MAIN_FEATURE_LVDDR3 MemMLvDdr3 |
| #define MEM_FEATURE_LVDDR3 MemFLvDdr3 |
| #else |
| #define MEM_FEATURE_ONDIMMTHERMAL MemFDefRet |
| #define MEM_MAIN_FEATURE_LVDDR3 MemMDefRet |
| #define MEM_FEATURE_LVDDR3 MemFDefRet |
| #endif |
| |
| extern OPTION_MEM_FEATURE_NB MemFInterleaveRegion; |
| #define MEM_FEATURE_REGION_INTERLEAVE MemFInterleaveRegion |
| |
| extern OPTION_MEM_FEATURE_MAIN MemMUmaAlloc; |
| #define MEM_MAIN_FEATURE_UMAALLOC MemMUmaAlloc |
| |
| extern OPTION_MEM_FEATURE_MAIN MemMStandardTraining; |
| #if (OPTION_PARALLEL_TRAINING == TRUE) |
| extern OPTION_MEM_FEATURE_MAIN MemMParallelTraining; |
| #define MEM_MAIN_FEATURE_TRAINING MemMParallelTraining |
| #else |
| #define MEM_MAIN_FEATURE_TRAINING MemMStandardTraining |
| #endif |
| |
| #if (OPTION_DIMM_EXCLUDE == TRUE) |
| extern OPTION_MEM_FEATURE_MAIN MemMRASExcludeDIMM; |
| #define MEM_MAIN_FEATURE_DIMM_EXCLUDE MemMRASExcludeDIMM |
| extern OPTION_MEM_FEATURE_NB MemFRASExcludeDIMM; |
| #define MEM_FEATURE_DIMM_EXCLUDE MemFRASExcludeDIMM |
| #else |
| #define MEM_FEATURE_DIMM_EXCLUDE MemFDefRet |
| #define MEM_MAIN_FEATURE_DIMM_EXCLUDE MemMDefRet |
| #endif |
| |
| /*---------------------------------------------------------------------------------- |
| * TECHNOLOGY BLOCK CONSTRUCTOR FUNCTION ASSIGNMENTS |
| * |
| *---------------------------------------------------------------------------------- |
| */ |
| #if OPTION_DDR3 == TRUE |
| extern MEM_TECH_CONSTRUCTOR MemConstructTechBlock3; |
| #define MEM_TECH_CONSTRUCTOR_DDR3 MemConstructTechBlock3, |
| #if (OPTION_HW_DRAM_INIT == TRUE) |
| extern MEM_TECH_FEAT MemTDramInitHw; |
| #define MEM_TECH_FEATURE_HW_DRAMINIT MemTDramInitHw |
| #else |
| #define MEM_TECH_FEATURE_HW_DRAMINIT MemTFeatDef |
| #endif |
| #if (OPTION_SW_DRAM_INIT == TRUE) |
| // extern MEM_TECH_FEAT MemTDramInitSw3; |
| #define MEM_TECH_FEATURE_SW_DRAMINIT MemTDramInitSw3 |
| #else |
| #define MEM_TECH_FEATURE_SW_DRAMINIT MemTFeatDef |
| #endif |
| #else |
| #define MEM_TECH_CONSTRUCTOR_DDR3 |
| #endif |
| |
| /*--------------------------------------------------------------------------------------------------- |
| * FEATURE BLOCKS |
| * |
| * This section instantiates a feature block structure for each memory controller installed |
| * by the platform solution install file. |
| *--------------------------------------------------------------------------------------------------- |
| */ |
| |
| /*--------------------------------------------------------------------------------------------------- |
| * ONTARIO FEATURE BLOCK |
| *--------------------------------------------------------------------------------------------------- |
| */ |
| #if (OPTION_MEMCTLR_ON == TRUE) |
| #if OPTION_DDR3 |
| #undef MEM_TECH_FEATURE_DRAMINIT |
| #define MEM_TECH_FEATURE_DRAMINIT MEM_TECH_FEATURE_SW_DRAMINIT |
| #endif |
| |
| #if (OPTION_CONTINOUS_PATTERN_GENERATION == TRUE) |
| extern OPTION_MEM_FEATURE_NB MemNInitCPGClientNb; |
| #undef MEM_TECH_FEATURE_CPG |
| #define MEM_TECH_FEATURE_CPG MemNInitCPGClientNb |
| #else |
| #undef MEM_TECH_FEATURE_CPG |
| #define MEM_TECH_FEATURE_CPG MemFDefRet |
| #endif |
| |
| #if (OPTION_HW_DQS_REC_EN_TRAINING == TRUE) |
| extern OPTION_MEM_FEATURE_NB MemNInitDqsTrainRcvrEnHwNb; |
| #undef MEM_TECH_FEATURE_HWRXEN |
| #define MEM_TECH_FEATURE_HWRXEN MemNInitDqsTrainRcvrEnHwNb |
| #else |
| extern OPTION_MEM_FEATURE_NB MemNDisableDqsTrainRcvrEnHwNb; |
| #undef MEM_TECH_FEATURE_HWRXEN |
| #define MEM_TECH_FEATURE_HWRXEN MemNDisableDqsTrainRcvrEnHwNb |
| #endif |
| |
| #undef MEM_MAIN_FEATURE_TRAINING |
| #undef MEM_FEATURE_TRAINING |
| #define MEM_MAIN_FEATURE_TRAINING MemMStandardTraining |
| extern OPTION_MEM_FEATURE_NB MemFStandardTraining; |
| #define MEM_FEATURE_TRAINING MemFStandardTraining |
| |
| #if (OPTION_EARLY_SAMPLES == TRUE) |
| extern OPTION_MEM_FEATURE_NB MemNInitEarlySampleSupportON; |
| #define MEM_EARLY_SAMPLE_SUPPORT MemNInitEarlySampleSupportON |
| #else |
| #define MEM_EARLY_SAMPLE_SUPPORT MemFDefRet |
| #endif |
| |
| MEM_FEAT_BLOCK_NB MemFeatBlockOn = { |
| MEM_FEAT_BLOCK_NB_STRUCT_VERSION, |
| MemFDefRet, |
| MEM_FEATURE_BANK_INTERLEAVE, |
| MEM_FEATURE_UNDO_BANK_INTERLEAVE, |
| MemFDefRet, |
| MemFDefRet, |
| MemFDefRet, |
| MemFDefRet, |
| MemFDefRet, |
| MemFDefRet, |
| MEM_FEATURE_TRAINING, |
| MEM_FEATURE_LVDDR3, |
| MEM_FEATURE_ONDIMMTHERMAL, |
| MEM_TECH_FEATURE_DRAMINIT, |
| MEM_FEATURE_DIMM_EXCLUDE, |
| MEM_EARLY_SAMPLE_SUPPORT, |
| MEM_TECH_FEATURE_CPG, |
| MEM_TECH_FEATURE_HWRXEN |
| }; |
| |
| #undef MEM_NB_SUPPORT_ON |
| extern MEM_NB_CONSTRUCTOR MemConstructNBBlockON; |
| extern MEM_INITIALIZER MemNInitDefaultsON; |
| #define MEM_NB_SUPPORT_ON { MEM_NB_SUPPORT_STRUCT_VERSION, MemConstructNBBlockON, MemNInitDefaultsON, &MemFeatBlockOn, MEM_FEATURE_S3_RESUME_CONSTRUCTOR_ON, MEM_IDENDIMM_ON }, |
| |
| #endif // OPTION_MEMCTRL_ON |
| |
| /*--------------------------------------------------------------------------------------------------- |
| * MAIN FEATURE BLOCK |
| *--------------------------------------------------------------------------------------------------- |
| */ |
| MEM_FEAT_BLOCK_MAIN MemFeatMain = { |
| MEM_FEAT_BLOCK_MAIN_STRUCT_VERSION, |
| MEM_MAIN_FEATURE_TRAINING, |
| MEM_MAIN_FEATURE_DIMM_EXCLUDE, |
| MEM_MAIN_FEATURE_ONLINE_SPARE, |
| MEM_MAIN_FEATURE_NODE_INTERLEAVE, |
| MEM_MAIN_FEATURE_ECC, |
| MEM_MAIN_FEATURE_MEM_CLEAR, |
| MEM_MAIN_FEATURE_MEM_DMI, |
| MEM_MAIN_FEATURE_LVDDR3, |
| MEM_MAIN_FEATURE_UMAALLOC, |
| MEM_MAIN_FEATURE_MEM_SAVE, |
| MEM_MAIN_FEATURE_MEM_RESTORE |
| }; |
| |
| |
| /*--------------------------------------------------------------------------------------------------- |
| * Technology Training SPECIFIC CONFIGURATION |
| * |
| * |
| *--------------------------------------------------------------------------------------------------- |
| */ |
| |
| #if OPTION_MEMCTLR_ON |
| extern OPTION_MEM_FEATURE_NB memNEnableTrainSequenceON; |
| #if OPTION_DDR3 |
| #undef TECH_TRAIN_ENTER_HW_TRN_DDR3 |
| #define TECH_TRAIN_ENTER_HW_TRN_DDR3 MemTFeatDef |
| #undef TECH_TRAIN_EXIT_HW_TRN_DDR3 |
| #define TECH_TRAIN_EXIT_HW_TRN_DDR3 MemTExitPhyAssistedTrainingClient3 |
| #if (OPTION_HW_WRITE_LEV_TRAINING == TRUE) |
| #define TECH_TRAIN_HW_WL_P1_DDR3 MemTWriteLevelizationHw3Pass1 |
| #define TECH_TRAIN_HW_WL_P2_DDR3 MemTWriteLevelizationHw3Pass2 |
| #else |
| #define TECH_TRAIN_HW_WL_P1_DDR3 MemTFeatDef |
| #define TECH_TRAIN_HW_WL_P2_DDR3 MemTFeatDef |
| #endif |
| #define TECH_TRAIN_SW_WL_DDR3 MemTFeatDef |
| #if (OPTION_HW_DQS_REC_EN_TRAINING == TRUE) |
| #define TECH_TRAIN_HW_DQS_REC_EN_P1_DDR3 MemTDqsTrainRcvrEnHwPass1 |
| #define TECH_TRAIN_HW_DQS_REC_EN_P2_DDR3 MemTDqsTrainRcvrEnHwPass2 |
| #else |
| #define TECH_TRAIN_HW_DQS_REC_EN_P1_DDR3 MemTFeatDef |
| #define TECH_TRAIN_HW_DQS_REC_EN_P2_DDR3 MemTFeatDef |
| #endif |
| #if (OPTION_NON_OPT_SW_DQS_REC_EN_TRAINING == TRUE) |
| #define TECH_TRAIN_NON_OPT_SW_DQS_REC_EN_P1_DDR3 MemTTrainRcvrEnSwPass1 |
| #else |
| #define TECH_TRAIN_NON_OPT_SW_DQS_REC_EN_P1_DDR3 MemTFeatDef |
| #endif |
| #undef TECH_TRAIN_OPT_SW_DQS_REC_EN_P1_DDR3 |
| #if (OPTION_OPT_SW_DQS_REC_EN_TRAINING == TRUE) |
| #define TECH_TRAIN_OPT_SW_DQS_REC_EN_P1_DDR3 MemTTrainOptRcvrEnSwPass1 |
| #else |
| #define TECH_TRAIN_OPT_SW_DQS_REC_EN_P1_DDR3 MemTFeatDef |
| #endif |
| #if (OPTION_NON_OPT_SW_RD_WR_POS_TRAINING == TRUE) |
| #define TECH_TRAIN_NON_OPT_SW_RD_WR_POS_DDR3 MemTTrainDQSEdgeDetectSw |
| #else |
| #define TECH_TRAIN_NON_OPT_SW_RD_WR_POS_DDR3 MemTFeatDef |
| #endif |
| #if (OPTION_OPT_SW_RD_WR_POS_TRAINING == TRUE) |
| #define TECH_TRAIN_OPT_SW_RD_WR_POS_DDR3 MemTTrainDQSEdgeDetectSw |
| #else |
| #define TECH_TRAIN_OPT_SW_RD_WR_POS_DDR3 MemTFeatDef |
| #endif |
| #if (OPTION_MAX_RD_LAT_TRAINING == TRUE) |
| #define TECH_TRAIN_MAX_RD_LAT_DDR3 MemTTrainMaxLatency |
| #else |
| #define TECH_TRAIN_MAX_RD_LAT_DDR3 MemTFeatDef |
| #endif |
| MEM_TECH_FEAT_BLOCK memTechTrainingFeatSequenceDDR3ON = { |
| MEM_TECH_FEAT_BLOCK_STRUCT_VERSION, |
| TECH_TRAIN_ENTER_HW_TRN_DDR3, |
| TECH_TRAIN_SW_WL_DDR3, |
| TECH_TRAIN_HW_WL_P1_DDR3, |
| TECH_TRAIN_HW_DQS_REC_EN_P1_DDR3, |
| TECH_TRAIN_HW_WL_P2_DDR3, |
| TECH_TRAIN_HW_DQS_REC_EN_P2_DDR3, |
| TECH_TRAIN_EXIT_HW_TRN_DDR3, |
| TECH_TRAIN_NON_OPT_SW_DQS_REC_EN_P1_DDR3, |
| TECH_TRAIN_OPT_SW_DQS_REC_EN_P1_DDR3, |
| TECH_TRAIN_NON_OPT_SW_RD_WR_POS_DDR3, |
| TECH_TRAIN_OPT_SW_RD_WR_POS_DDR3, |
| TECH_TRAIN_MAX_RD_LAT_DDR3 |
| }; |
| // extern OPTION_MEM_FEATURE_NB MemNDQSTiming3Nb; |
| #define NB_TRAIN_FLOW_DDR3 MemNDQSTiming3Nb |
| // extern OPTION_MEM_FEATURE_NB memNSequenceDDR3Nb; |
| #define MEM_TECH_ENABLE_TRAINING_SEQUENCE_DDR3_ON {MEM_TECH_TRAIN_SEQUENCE_STRUCT_VERSION,memNSequenceDDR3Nb, memNEnableTrainSequenceON, &memTechTrainingFeatSequenceDDR3ON }, |
| #else |
| #undef TECH_TRAIN_ENTER_HW_TRN_DDR3 |
| #define TECH_TRAIN_ENTER_HW_TRN_DDR3 MemTFeatDef |
| #undef TECH_TRAIN_EXIT_HW_TRN_DDR3 |
| #define TECH_TRAIN_EXIT_HW_TRN_DDR3 MemTFeatDef |
| #define TECH_TRAIN_HW_WL_P1_DDR3 MemTFeatDef |
| #define TECH_TRAIN_HW_WL_P2_DDR3 MemTFeatDef |
| #define TECH_TRAIN_SW_WL_DDR3 MemTFeatDef |
| #define TECH_TRAIN_HW_DQS_REC_EN_P1_DDR3 MemTFeatDef |
| #define TECH_TRAIN_HW_DQS_REC_EN_P2_DDR3 MemTFeatDef |
| #define TECH_TRAIN_NON_OPT_SW_DQS_REC_EN_P1_DDR3 MemTFeatDef |
| #define TECH_TRAIN_OPT_SW_DQS_REC_EN_P1_DDR3 MemTFeatDef |
| #define TECH_TRAIN_NON_OPT_SW_RD_WR_POS_DDR3 MemTFeatDef |
| #define TECH_TRAIN_OPT_SW_RD_WR_POS_DDR3 MemTFeatDef |
| #define TECH_TRAIN_MAX_RD_LAT_DDR3 MemTFeatDef |
| #define NB_TRAIN_FLOW_DDR3 (BOOLEAN (*) (MEM_NB_BLOCK*)) memDefTrue |
| #define MEM_TECH_ENABLE_TRAINING_SEQUENCE_DDR3_ON { MEM_TECH_TRAIN_SEQUENCE_STRUCT_VERSION, (BOOLEAN (*) (MEM_NB_BLOCK*)) memDefTrue, (BOOLEAN (*) (MEM_NB_BLOCK*)) memDefFalse, 0 }, |
| #endif |
| #else |
| #define MEM_TECH_ENABLE_TRAINING_SEQUENCE_DDR3_ON { MEM_TECH_TRAIN_SEQUENCE_STRUCT_VERSION, (BOOLEAN (*) (MEM_NB_BLOCK*)) memDefTrue, (BOOLEAN (*) (MEM_NB_BLOCK*)) memDefFalse, 0 }, |
| #endif |
| |
| #define MEM_TECH_ENABLE_TRAINING_SEQUENCE_END { MEM_NB_SUPPORT_STRUCT_VERSION, 0, 0, 0 } |
| |
| MEM_FEAT_TRAIN_SEQ memTrainSequenceDDR3[] = { |
| MEM_TECH_ENABLE_TRAINING_SEQUENCE_DDR3_ON |
| MEM_TECH_ENABLE_TRAINING_SEQUENCE_END |
| }; |
| /*--------------------------------------------------------------------------------------------------- |
| * NB TRAINING FLOW CONTROL |
| * |
| * |
| *--------------------------------------------------------------------------------------------------- |
| */ |
| #define NB_TRAIN_FLOW_DDR2 (BOOLEAN (*) (MEM_NB_BLOCK*)) memDefTrue |
| |
| OPTION_MEM_FEATURE_NB* memNTrainFlowControl[] = { // Training flow control |
| NB_TRAIN_FLOW_DDR2, |
| NB_TRAIN_FLOW_DDR3, |
| }; |
| /*--------------------------------------------------------------------------------------------------- |
| * TECHNOLOGY BLOCK |
| * |
| * |
| *--------------------------------------------------------------------------------------------------- |
| */ |
| MEM_TECH_CONSTRUCTOR* memTechInstalled[] = { // Types of technology installed |
| MEM_TECH_CONSTRUCTOR_DDR3 |
| NULL |
| }; |
| /*--------------------------------------------------------------------------------------------------- |
| * PLATFORM SPECIFIC BLOCK FORM FACTOR DEFINITION |
| * |
| * |
| *--------------------------------------------------------------------------------------------------- |
| */ |
| |
| #if OPTION_MEMCTLR_ON |
| #if OPTION_UDIMMS |
| #if OPTION_DDR3 |
| #define PLAT_SP_ON_FF_UDIMM3 MemPConstructPsUON3, |
| #else |
| #define PLAT_SP_ON_FF_UDIMM3 MemPConstructPsUDef, |
| #endif |
| #else |
| #define PLAT_SP_ON_FF_UDIMM3 MemPConstructPsUDef, |
| #endif |
| #if OPTION_SODIMMS |
| #if OPTION_DDR3 |
| #define PLAT_SP_ON_FF_SDIMM3 MemPConstructPsSON3, |
| #else |
| #define PLAT_SP_ON_FF_SDIMM3 MemPConstructPsUDef, |
| #endif |
| #else |
| #define PLAT_SP_ON_FF_SDIMM3 MemPConstructPsUDef, |
| #endif |
| #else |
| #define PLAT_SP_ON_FF_SDIMM3 MemPConstructPsUDef, |
| #define PLAT_SP_ON_FF_UDIMM3 MemPConstructPsUDef, |
| #endif |
| MEM_PLAT_SPEC_CFG* memPlatSpecFFInstalledON[MAX_FF_TYPES] = { |
| PLAT_SP_ON_FF_SDIMM3 |
| PLAT_SP_ON_FF_UDIMM3 |
| NULL |
| }; |
| |
| /*--------------------------------------------------------------------------------------------------- |
| * PLATFORM-SPECIFIC CONFIGURATION |
| * |
| * |
| *--------------------------------------------------------------------------------------------------- |
| */ |
| |
| #if OPTION_MEMCTLR_ON |
| #if OPTION_UDIMMS |
| #if OPTION_DDR3 |
| #define PSC_ON_UDIMM_DDR3 MemAGetPsCfgUON3, |
| #else |
| #define PSC_ON_UDIMM_DDR3 |
| #endif |
| #endif |
| #if OPTION_RDIMMS |
| #if OPTION_DDR3 |
| #define PSC_ON_RDIMM_DDR3 //MemAGetPsCfgRON3, |
| #else |
| #define PSC_ON_RDIMM_DDR3 |
| #endif |
| #endif |
| #if OPTION_SODIMMS |
| #if OPTION_DDR3 |
| #define PSC_ON_SODIMM_DDR3 MemAGetPsCfgSON3, |
| #else |
| #define PSC_ON_SODIMM_DDR3 |
| #endif |
| #endif |
| #endif |
| |
| /*---------------------------------------------------------------------- |
| * DEFAULT PSCFG DEFINITIONS |
| * |
| *---------------------------------------------------------------------- |
| */ |
| |
| #ifndef PSC_ON_UDIMM_DDR3 |
| #define PSC_ON_UDIMM_DDR3 |
| #endif |
| #ifndef PSC_ON_RDIMM_DDR3 |
| #define PSC_ON_RDIMM_DDR3 |
| #endif |
| #ifndef PSC_ON_SODIMM_DDR3 |
| #define PSC_ON_SODIMM_DDR3 |
| #endif |
| |
| MEM_PLATFORM_CFG* memPlatformTypeInstalled[] = { |
| PSC_ON_UDIMM_DDR3 |
| PSC_ON_RDIMM_DDR3 |
| PSC_ON_SODIMM_DDR3 |
| NULL |
| }; |
| CONST UINTN SIZE_OF_PLATFORM = (sizeof (memPlatformTypeInstalled) / sizeof (MEM_PLATFORM_CFG*)); |
| // #if SIZE_OF_PLATFORM > MAX_PLATFORM_TYPES |
| // #error Size of memPlatformTypeInstalled array larger than MAX_PLATFORM_TYPES |
| // #endif |
| |
| /*--------------------------------------------------------------------------------------------------- |
| * EXTRACTABLE PLATFORM SPECIFIC CONFIGURATION |
| * |
| * |
| *--------------------------------------------------------------------------------------------------- |
| */ |
| #define MEM_PSC_FLOW_BLOCK_END NULL |
| #define PSC_TBL_END NULL |
| #define MEM_PSC_FLOW_DEFTRUE (BOOLEAN (*) (MEM_NB_BLOCK*, MEM_PSC_TABLE_BLOCK *)) memDefTrue |
| |
| |
| MEM_PSC_FLOW_BLOCK* memPlatSpecFlowArray[] = { |
| MEM_PSC_FLOW_BLOCK_END |
| }; |
| |
| /*--------------------------------------------------------------------------------------------------- |
| * |
| * LRDIMM CONTROL |
| * |
| *--------------------------------------------------------------------------------------------------- |
| */ |
| #if (OPTION_LRDIMMS == TRUE) |
| #define MEM_TECH_FEATURE_LRDIMM_INIT MemTFeatDef |
| #else //#if (OPTION_LRDIMMS == FALSE) |
| #define MEM_TECH_FEATURE_LRDIMM_INIT MemTFeatDef |
| #endif |
| MEM_TECH_LRDIMM memLrdimmSupported = { |
| MEM_TECH_LRDIMM_STRUCT_VERSION, |
| MEM_TECH_FEATURE_LRDIMM_INIT |
| }; |
| #else |
| /*--------------------------------------------------------------------------------------------------- |
| * MAIN FLOW CONTROL |
| * |
| * |
| *--------------------------------------------------------------------------------------------------- |
| */ |
| MEM_FLOW_CFG* memFlowControlInstalled[] = { |
| NULL |
| }; |
| /*--------------------------------------------------------------------------------------------------- |
| * NB TRAINING FLOW CONTROL |
| * |
| * |
| *--------------------------------------------------------------------------------------------------- |
| */ |
| OPTION_MEM_FEATURE_NB* memNTrainFlowControl[] = { // Training flow control |
| NULL, |
| NULL, |
| }; |
| /*--------------------------------------------------------------------------------------------------- |
| * DEFAULT TECHNOLOGY BLOCK |
| * |
| * |
| *--------------------------------------------------------------------------------------------------- |
| */ |
| MEM_TECH_CONSTRUCTOR* memTechInstalled[] = { // Types of technology installed |
| NULL |
| }; |
| |
| /*--------------------------------------------------------------------------------------------------- |
| * DEFAULT TECHNOLOGY MAP |
| * |
| * |
| *--------------------------------------------------------------------------------------------------- |
| */ |
| UINT8 MemoryTechnologyMap[MAX_SOCKETS_SUPPORTED] = {0, 0, 0, 0, 0, 0, 0, 0}; |
| |
| /*--------------------------------------------------------------------------------------------------- |
| * DEFAULT MAIN FEATURE BLOCK |
| *--------------------------------------------------------------------------------------------------- |
| */ |
| MEM_FEAT_BLOCK_MAIN MemFeatMain = { |
| 0 |
| }; |
| |
| /*--------------------------------------------------------------------------------------------------- |
| * DEFAULT NORTHBRIDGE SUPPORT LIST |
| * |
| * |
| *--------------------------------------------------------------------------------------------------- |
| */ |
| #if (OPTION_MEMCTLR_ON == TRUE) |
| #undef MEM_NB_SUPPORT_ON |
| #define MEM_NB_SUPPORT_ON { MEM_NB_SUPPORT_STRUCT_VERSION, NULL, NULL, NULL, MEM_FEATURE_S3_RESUME_CONSTRUCTOR_ON, MEM_IDENDIMM_ON }, |
| #endif |
| |
| /*--------------------------------------------------------------------------------------------------- |
| * DEFAULT Technology Training |
| * |
| * |
| *--------------------------------------------------------------------------------------------------- |
| */ |
| #if OPTION_DDR3 |
| MEM_TECH_FEAT_BLOCK memTechTrainingFeatDDR3 = { |
| 0 |
| }; |
| MEM_FEAT_TRAIN_SEQ memTrainSequenceDDR3[] = { |
| { 0 } |
| }; |
| #endif |
| |
| /*--------------------------------------------------------------------------------------------------- |
| * DEFAULT Platform Specific list |
| * |
| * |
| *--------------------------------------------------------------------------------------------------- |
| */ |
| #if (OPTION_MEMCTLR_ON == TRUE) |
| MEM_PLAT_SPEC_CFG* memPlatSpecFFInstalledON[MAX_FF_TYPES] = { |
| NULL |
| }; |
| #endif |
| /*---------------------------------------------------------------------- |
| * DEFAULT PSCFG DEFINITIONS |
| * |
| *---------------------------------------------------------------------- |
| */ |
| MEM_PLATFORM_CFG* memPlatformTypeInstalled[] = { |
| NULL |
| }; |
| |
| /*---------------------------------------------------------------------- |
| * EXTRACTABLE PLATFORM SPECIFIC CONFIGURATION |
| * |
| *---------------------------------------------------------------------- |
| */ |
| MEM_PSC_FLOW_BLOCK* memPlatSpecFlowArray[] = { |
| NULL |
| }; |
| |
| MEM_TECH_LRDIMM memLrdimmSupported = { |
| MEM_TECH_LRDIMM_STRUCT_VERSION, |
| NULL |
| }; |
| #endif |
| |
| /*--------------------------------------------------------------------------------------------------- |
| * NORTHBRIDGE SUPPORT LIST |
| * |
| * |
| *--------------------------------------------------------------------------------------------------- |
| */ |
| MEM_NB_SUPPORT memNBInstalled[] = { |
| MEM_NB_SUPPORT_ON |
| MEM_NB_SUPPORT_END |
| }; |
| |
| #endif // _OPTION_MEMORY_INSTALL_H_ |