1 /** @file 2 Copies the memory related timing and configuration information into the 3 Compatible BIOS data (BDAT) table. 4 5 Copyright (c) 2019 Intel Corporation. All rights reserved. <BR> 6 7 SPDX-License-Identifier: BSD-2-Clause-Patent 8 **/ 9 10 #ifndef _MrcRmtData_h_ 11 #define _MrcRmtData_h_ 12 13 #include "MrcTypes.h" 14 15 #define VDD_1_350 1350 ///< VDD in millivolts 16 #define VDD_1_500 1500 ///< VDD in millivolts 17 #define PI_STEP_BASE 2048 ///< Magic number from spec 18 #define PI_STEP_INTERVAL 128 ///< tCK is split into this amount of intervals 19 #define PI_STEP ((PI_STEP_BASE) / (PI_STEP_INTERVAL)) 20 #define VREF_STEP_BASE 100 ///< Magic number from spec 21 #define TX_VREF_STEP 7800 ///< TX Vref step in microvolts 22 #define TX_VREF(VDD) (((TX_VREF_STEP) * (VREF_STEP_BASE)) / (VDD)) ///< VDD passed in is in millivolts 23 #define RX_VREF_STEP 8000 ///< TX Vref step in microvolts 24 #define RX_VREF(VDD) (((RX_VREF_STEP) * (VREF_STEP_BASE)) / (VDD)) ///< VDD passed in is in millivolts 25 #define CA_VREF_STEP 8000 ///< TX Vref step in microvolts 26 #define CA_VREF(VDD) (((CA_VREF_STEP) * (VREF_STEP_BASE)) / (VDD)) ///< VDD passed in is in millivolts 27 28 #define MAX_SPD_RMT 512 ///< The maximum amount of data, in bytes, in an SPD structure. 29 #define RMT_PRIMARY_VERSION 4 ///< The BDAT structure that is currently supported. 30 #define RMT_SECONDARY_VERSION 0 ///< The BDAT structure that is currently supported. 31 #define MAX_MODE_REGISTER 7 ///< Number of mode registers 32 #define MAX_DRAM_DEVICE 9 ///< Maximum number of memory devices 33 #define MAX_2D_EYE_TYPE 2 ///< Maximum number of supported Margin 2D Eye Types 34 #define MAX_2D_EYE_OFFSETS 7 ///< Number of 2D Eye Offsets 35 36 // 37 // Warning: Bdat4.h has its own copy of this #define 38 // make sure to change it in both places 39 // 40 #define MAX_SCHEMA_LIST_LENGTH (10) 41 42 43 #ifdef BDAT_SUPPORT 44 /* 45 BSSA result Memory Schema GUID 46 {8F4E928-0F5F-46D4-8410-479FDA279DB6} 47 */ 48 extern EFI_GUID gSsaBiosResultsGuid; 49 /* 50 RMT Results Metadata GUID 51 {02CB1552-D659-4232-B51F-CAB1E11FCA87} 52 */ 53 extern EFI_GUID gRmtResultMetadataGuid; 54 /* 55 RMT Results Columns GUID 56 {0E60A1EB-331F-42A1-9DE7-453E84761154} 57 */ 58 extern EFI_GUID gRmtResultColumnsGuid; 59 60 /* 61 Margin2D Results Metadata GUID 62 {48265582-8E49-4AC7-AA06-E1B9A74C9716} 63 */ 64 extern EFI_GUID gMargin2DResultMetadataGuid; 65 /* 66 Margin2D Results Columns GUID 67 {91A449EC-8A4A-4736-AD71-A3F6F6D752D9} 68 */ 69 extern EFI_GUID gMargin2DResultColumnsGuid; 70 71 #endif 72 /* 73 GUID for Schema List HOB 74 This is private GUID used by MemoryInit internally. 75 {3047C2AC-5E8E-4C55-A1CB-EAAD0A88861B} 76 */ 77 extern EFI_GUID gMrcSchemaListHobGuid; 78 79 #pragma pack(push, 1) 80 81 82 /// 83 /// SSA results buffer header. 84 /// 85 typedef struct { 86 UINT32 Revision; 87 BOOLEAN TransferMode; 88 struct { 89 UINT32 Reserved; 90 UINT32 MetadataSize; 91 EFI_GUID MetadataType; 92 } MdBlock; 93 struct { 94 UINT32 Reserved; 95 EFI_GUID ResultType; 96 UINT32 ResultElementSize; 97 INT32 ResultCapacity; 98 INT32 ResultElementCount; 99 } RsBlock; 100 } RESULTS_DATA_HDR; 101 102 // start auto-generated by the BSSA CCK sourced from the result xml files. 103 typedef enum { 104 DisableScrambler = 0, 105 EnableScrambler = 1, 106 DontTouchScrambler = 2, 107 SCRAMBLER_OVERRIDE_MODE_DELIM = MRC_INT32_MAX 108 } SCRAMBLER_OVERRIDE_MODE; 109 110 typedef struct _RMT_RESULT_METADATA { 111 BOOLEAN EnableCtlAllMargin; 112 UINT16 SinglesBurstLength; 113 UINT32 SinglesLoopCount; 114 UINT16 TurnaroundsBurstLength; 115 UINT32 TurnaroundsLoopCount; 116 SCRAMBLER_OVERRIDE_MODE ScramblerOverrideMode; 117 UINT8 PiStepUnit[2]; 118 UINT16 RxVrefStepUnit[2]; 119 UINT16 TxVrefStepUnit[2][2]; 120 UINT16 CmdVrefStepUnit[2][2]; 121 UINT8 MajorVer; 122 UINT8 MinorVer; 123 UINT8 RevVer; 124 UINT32 BuildVer; 125 UINT16 ResultEleCount; 126 } RMT_RESULT_METADATA; 127 128 129 typedef struct _RMT_RESULT_ROW_HEADER { 130 UINT32 ResultType : 5; 131 UINT32 Socket : 3; 132 UINT32 Controller : 2; 133 UINT32 Channel : 3; 134 UINT32 DimmA : 1; 135 UINT32 RankA : 3; 136 UINT32 DimmB : 1; 137 UINT32 RankB : 3; 138 UINT32 Lane : 8; 139 UINT32 IoLevel : 1; 140 UINT32 Reserved : 2; 141 } RMT_RESULT_ROW_HEADER; 142 143 typedef struct _RMT_RESULT_COLUMNS { 144 RMT_RESULT_ROW_HEADER Header; 145 UINT8 Margin[4][2]; 146 } RMT_RESULT_COLUMNS; 147 148 // end of auto-generated by the BSSA CCK sourced from the result xml files. 149 150 typedef struct _BASE_RMT_RESULT { 151 RESULTS_DATA_HDR ResultsHeader; 152 RMT_RESULT_METADATA Metadata; 153 RMT_RESULT_COLUMNS Rows[1]; 154 } BASE_RMT_RESULT; 155 156 157 typedef struct { 158 UINT32 Data1; 159 UINT16 Data2; 160 UINT16 Data3; 161 UINT8 Data4[8]; 162 } BDAT_EFI_GUID; 163 164 typedef struct { 165 UINT16 HobType; 166 UINT16 HobLength; 167 UINT32 Reserved; 168 } BDAT_HOB_GENERIC_HEADER; 169 170 typedef struct { 171 BDAT_HOB_GENERIC_HEADER Header; 172 BDAT_EFI_GUID Name; 173 /// 174 /// Guid specific data goes here 175 /// 176 } BDAT_HOB_GUID_TYPE; 177 178 typedef struct { 179 BDAT_EFI_GUID SchemaId; ///< The GUID uniquely identifies the format of the data contained within the structure. 180 UINT32 DataSize; ///< The total size of the memory block, including both the header as well as the schema specific data. 181 UINT16 Crc16; ///< Crc16 is computed in the same manner as the field in the BDAT_HEADER_STRUCTURE. 182 } MRC_BDAT_SCHEMA_HEADER_STRUCTURE; 183 184 typedef struct { 185 MRC_BDAT_SCHEMA_HEADER_STRUCTURE SchemaHeader; ///< The schema header. 186 BASE_RMT_RESULT RMT_RESULTS_WITH_META_COLUMNS; 187 } BDAT_MEMORY_DATA_STRUCTURE; 188 189 typedef struct { 190 BDAT_HOB_GUID_TYPE HobGuidType; 191 BDAT_MEMORY_DATA_STRUCTURE MemorySchema; 192 } BDAT_MEMORY_DATA_HOB; 193 194 #pragma pack (pop) 195 196 typedef struct { 197 BDAT_HOB_GUID_TYPE HobGuidType; 198 UINT16 SchemaHobCount; 199 UINT16 Reserved; 200 BDAT_EFI_GUID SchemaHobGuids[MAX_SCHEMA_LIST_LENGTH]; 201 } MRC_BDAT_SCHEMA_LIST_HOB; 202 203 #endif //_MrcRmtData_h_ 204