/** @file
|
Copies the memory related timing and configuration information into the
|
Compatible BIOS data (BDAT) table.
|
|
Copyright (c) 2019 Intel Corporation. All rights reserved. <BR>
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
**/
|
|
#ifndef _MrcRmtData_h_
|
#define _MrcRmtData_h_
|
|
#include "MrcTypes.h"
|
|
#define VDD_1_350 1350 ///< VDD in millivolts
|
#define VDD_1_500 1500 ///< VDD in millivolts
|
#define PI_STEP_BASE 2048 ///< Magic number from spec
|
#define PI_STEP_INTERVAL 128 ///< tCK is split into this amount of intervals
|
#define PI_STEP ((PI_STEP_BASE) / (PI_STEP_INTERVAL))
|
#define VREF_STEP_BASE 100 ///< Magic number from spec
|
#define TX_VREF_STEP 7800 ///< TX Vref step in microvolts
|
#define TX_VREF(VDD) (((TX_VREF_STEP) * (VREF_STEP_BASE)) / (VDD)) ///< VDD passed in is in millivolts
|
#define RX_VREF_STEP 8000 ///< TX Vref step in microvolts
|
#define RX_VREF(VDD) (((RX_VREF_STEP) * (VREF_STEP_BASE)) / (VDD)) ///< VDD passed in is in millivolts
|
#define CA_VREF_STEP 8000 ///< TX Vref step in microvolts
|
#define CA_VREF(VDD) (((CA_VREF_STEP) * (VREF_STEP_BASE)) / (VDD)) ///< VDD passed in is in millivolts
|
|
#define MAX_SPD_RMT 512 ///< The maximum amount of data, in bytes, in an SPD structure.
|
#define RMT_PRIMARY_VERSION 4 ///< The BDAT structure that is currently supported.
|
#define RMT_SECONDARY_VERSION 0 ///< The BDAT structure that is currently supported.
|
#define MAX_MODE_REGISTER 7 ///< Number of mode registers
|
#define MAX_DRAM_DEVICE 9 ///< Maximum number of memory devices
|
#define MAX_2D_EYE_TYPE 2 ///< Maximum number of supported Margin 2D Eye Types
|
#define MAX_2D_EYE_OFFSETS 7 ///< Number of 2D Eye Offsets
|
|
//
|
// Warning: Bdat4.h has its own copy of this #define
|
// make sure to change it in both places
|
//
|
#define MAX_SCHEMA_LIST_LENGTH (10)
|
|
|
#ifdef BDAT_SUPPORT
|
/*
|
BSSA result Memory Schema GUID
|
{8F4E928-0F5F-46D4-8410-479FDA279DB6}
|
*/
|
extern EFI_GUID gSsaBiosResultsGuid;
|
/*
|
RMT Results Metadata GUID
|
{02CB1552-D659-4232-B51F-CAB1E11FCA87}
|
*/
|
extern EFI_GUID gRmtResultMetadataGuid;
|
/*
|
RMT Results Columns GUID
|
{0E60A1EB-331F-42A1-9DE7-453E84761154}
|
*/
|
extern EFI_GUID gRmtResultColumnsGuid;
|
|
/*
|
Margin2D Results Metadata GUID
|
{48265582-8E49-4AC7-AA06-E1B9A74C9716}
|
*/
|
extern EFI_GUID gMargin2DResultMetadataGuid;
|
/*
|
Margin2D Results Columns GUID
|
{91A449EC-8A4A-4736-AD71-A3F6F6D752D9}
|
*/
|
extern EFI_GUID gMargin2DResultColumnsGuid;
|
|
#endif
|
/*
|
GUID for Schema List HOB
|
This is private GUID used by MemoryInit internally.
|
{3047C2AC-5E8E-4C55-A1CB-EAAD0A88861B}
|
*/
|
extern EFI_GUID gMrcSchemaListHobGuid;
|
|
#pragma pack(push, 1)
|
|
|
///
|
/// SSA results buffer header.
|
///
|
typedef struct {
|
UINT32 Revision;
|
BOOLEAN TransferMode;
|
struct {
|
UINT32 Reserved;
|
UINT32 MetadataSize;
|
EFI_GUID MetadataType;
|
} MdBlock;
|
struct {
|
UINT32 Reserved;
|
EFI_GUID ResultType;
|
UINT32 ResultElementSize;
|
INT32 ResultCapacity;
|
INT32 ResultElementCount;
|
} RsBlock;
|
} RESULTS_DATA_HDR;
|
|
// start auto-generated by the BSSA CCK sourced from the result xml files.
|
typedef enum {
|
DisableScrambler = 0,
|
EnableScrambler = 1,
|
DontTouchScrambler = 2,
|
SCRAMBLER_OVERRIDE_MODE_DELIM = MRC_INT32_MAX
|
} SCRAMBLER_OVERRIDE_MODE;
|
|
typedef struct _RMT_RESULT_METADATA {
|
BOOLEAN EnableCtlAllMargin;
|
UINT16 SinglesBurstLength;
|
UINT32 SinglesLoopCount;
|
UINT16 TurnaroundsBurstLength;
|
UINT32 TurnaroundsLoopCount;
|
SCRAMBLER_OVERRIDE_MODE ScramblerOverrideMode;
|
UINT8 PiStepUnit[2];
|
UINT16 RxVrefStepUnit[2];
|
UINT16 TxVrefStepUnit[2][2];
|
UINT16 CmdVrefStepUnit[2][2];
|
UINT8 MajorVer;
|
UINT8 MinorVer;
|
UINT8 RevVer;
|
UINT32 BuildVer;
|
UINT16 ResultEleCount;
|
} RMT_RESULT_METADATA;
|
|
|
typedef struct _RMT_RESULT_ROW_HEADER {
|
UINT32 ResultType : 5;
|
UINT32 Socket : 3;
|
UINT32 Controller : 2;
|
UINT32 Channel : 3;
|
UINT32 DimmA : 1;
|
UINT32 RankA : 3;
|
UINT32 DimmB : 1;
|
UINT32 RankB : 3;
|
UINT32 Lane : 8;
|
UINT32 IoLevel : 1;
|
UINT32 Reserved : 2;
|
} RMT_RESULT_ROW_HEADER;
|
|
typedef struct _RMT_RESULT_COLUMNS {
|
RMT_RESULT_ROW_HEADER Header;
|
UINT8 Margin[4][2];
|
} RMT_RESULT_COLUMNS;
|
|
// end of auto-generated by the BSSA CCK sourced from the result xml files.
|
|
typedef struct _BASE_RMT_RESULT {
|
RESULTS_DATA_HDR ResultsHeader;
|
RMT_RESULT_METADATA Metadata;
|
RMT_RESULT_COLUMNS Rows[1];
|
} BASE_RMT_RESULT;
|
|
|
typedef struct {
|
UINT32 Data1;
|
UINT16 Data2;
|
UINT16 Data3;
|
UINT8 Data4[8];
|
} BDAT_EFI_GUID;
|
|
typedef struct {
|
UINT16 HobType;
|
UINT16 HobLength;
|
UINT32 Reserved;
|
} BDAT_HOB_GENERIC_HEADER;
|
|
typedef struct {
|
BDAT_HOB_GENERIC_HEADER Header;
|
BDAT_EFI_GUID Name;
|
///
|
/// Guid specific data goes here
|
///
|
} BDAT_HOB_GUID_TYPE;
|
|
typedef struct {
|
BDAT_EFI_GUID SchemaId; ///< The GUID uniquely identifies the format of the data contained within the structure.
|
UINT32 DataSize; ///< The total size of the memory block, including both the header as well as the schema specific data.
|
UINT16 Crc16; ///< Crc16 is computed in the same manner as the field in the BDAT_HEADER_STRUCTURE.
|
} MRC_BDAT_SCHEMA_HEADER_STRUCTURE;
|
|
typedef struct {
|
MRC_BDAT_SCHEMA_HEADER_STRUCTURE SchemaHeader; ///< The schema header.
|
BASE_RMT_RESULT RMT_RESULTS_WITH_META_COLUMNS;
|
} BDAT_MEMORY_DATA_STRUCTURE;
|
|
typedef struct {
|
BDAT_HOB_GUID_TYPE HobGuidType;
|
BDAT_MEMORY_DATA_STRUCTURE MemorySchema;
|
} BDAT_MEMORY_DATA_HOB;
|
|
#pragma pack (pop)
|
|
typedef struct {
|
BDAT_HOB_GUID_TYPE HobGuidType;
|
UINT16 SchemaHobCount;
|
UINT16 Reserved;
|
BDAT_EFI_GUID SchemaHobGuids[MAX_SCHEMA_LIST_LENGTH];
|
} MRC_BDAT_SCHEMA_LIST_HOB;
|
|
#endif //_MrcRmtData_h_
|