summaryrefslogtreecommitdiff
path: root/src/vendorcode/amd/pi
diff options
context:
space:
mode:
Diffstat (limited to 'src/vendorcode/amd/pi')
-rw-r--r--src/vendorcode/amd/pi/00660F01/AGESA.h82
-rw-r--r--src/vendorcode/amd/pi/00660F01/Proc/CPU/Family/cpuFamRegisters.h23
-rw-r--r--src/vendorcode/amd/pi/00660F01/Proc/CPU/cpuRegisters.h4
-rw-r--r--src/vendorcode/amd/pi/00660F01/Proc/Fch/Common/FchCommonCfg.h1
-rw-r--r--src/vendorcode/amd/pi/00660F01/Proc/Psp/PspBaseLib/PspBaseLib.h11
5 files changed, 86 insertions, 35 deletions
diff --git a/src/vendorcode/amd/pi/00660F01/AGESA.h b/src/vendorcode/amd/pi/00660F01/AGESA.h
index 17205b1aaa..5f0e3f9e82 100644
--- a/src/vendorcode/amd/pi/00660F01/AGESA.h
+++ b/src/vendorcode/amd/pi/00660F01/AGESA.h
@@ -1189,16 +1189,21 @@ typedef enum {
DDR2_TECHNOLOGY, ///< DDR2 technology
DDR3_TECHNOLOGY, ///< DDR3 technology
GDDR5_TECHNOLOGY, ///< GDDR5 technology
+ DDR4_TECHNOLOGY, ///< DDR4 technology
UNSUPPORTED_TECHNOLOGY, ///< Unsupported technology
} TECHNOLOGY_TYPE;
/// Low voltage support
typedef enum {
- VOLT_INITIAL, ///< Initial value for VDDIO
- VOLT1_5, ///< 1.5 Volt
- VOLT1_35, ///< 1.35 Volt
- VOLT1_25, ///< 1.25 Volt
- VOLT_UNSUPPORTED = 0xFF ///< No common voltage found
+ VOLT_INITIAL, ///< Initial value for VDDIO
+ VOLT1_5, ///< 1.5 Volt
+ VOLT1_35, ///< 1.35 Volt
+ VOLT1_25, ///< 1.25 Volt
+ VOLT_DDR4_RANGE_START, ///< Start of DDR4 Voltage Range
+ VOLT1_2 = VOLT_DDR4_RANGE_START, ///< 1.2 Volt
+ VOLT_TBD1, ///< TBD1 Voltage
+ VOLT_TBD2, ///< TBD2 Voltage
+ VOLT_UNSUPPORTED = 0xFF ///< No common voltage found
} DIMM_VOLTAGE;
/// AMP voltage support
@@ -1369,19 +1374,11 @@ typedef enum {
///
/// SPD Data for each DIMM.
///
-typedef struct _SPD_DEF_STRUCT_DX {
- IN BOOLEAN SpdValid; ///< Indicates that the SPD is valid
- IN BOOLEAN DimmPresent; ///< Indicates that the DIMM is present and Data is valid
- IN UINT32 Adderess; ///< SMBus Address
- IN UINT8 Data[512]; ///< Buffer for 256 Bytes of SPD data from DIMM
-} SPD_DEF_STRUCT_DX;
-
-//-----------------------------------------------------------------------------
-///
-/// SPD Data for each DIMM.
-///
typedef struct _SPD_DEF_STRUCT {
IN BOOLEAN DimmPresent; ///< Indicates that the DIMM is present and Data is valid
+ IN UINT8 PageAddress; ///< Indicates the 256 Byte EE Page the data belongs to
+ ///< 0 = Lower Page
+ ///< 1 = Upper Page (DDR4 Only)
IN UINT8 Data[256]; ///< Buffer for 256 Bytes of SPD data from DIMM
} SPD_DEF_STRUCT;
@@ -1566,11 +1563,8 @@ typedef struct _CH_DEF_STRUCT {
OUT UINT8 DimmSRTPresent; ///< For each bit n 0..3, 1 = DIMM n supports Extended Temperature Range where 4..7 are reserved
OUT UINT8 DimmASRPresent; ///< For each bit n 0..3, 1 = DIMM n supports Auto Self Refresh where 4..7 are reserved
-
- OUT BOOLEAN ExtendTmp; ///< If extended temperature is supported on all dimms on a channel.
-
+ OUT UINT8 DimmThermSensorPresent; ///< For each bit n 0..3, 1 = DIMM n has an On Dimm Thermal Sensor where 4..7 are reserved
OUT UINT8 MaxVref; ///< Maximum Vref Value for channel
-
OUT UINT8 Reserved[100]; ///< Reserved
} CH_DEF_STRUCT;
@@ -1604,6 +1598,9 @@ typedef struct _CH_TIMING_STRUCT {
OUT UINT16 DIMMTrrd; ///< Minimax Trrd*40 (ns) of DIMMs
OUT UINT16 DIMMTwtr; ///< Minimax Twtr*40 (ns) of DIMMs
OUT UINT16 DIMMTfaw; ///< Minimax Tfaw*40 (ns) of DIMMs
+ OUT UINT16 DIMMTrrdL; ///< Minimax TrrdL*40 (ns) of DIMMs
+ OUT UINT16 DIMMTwtrL; ///< Minimax TtwrL*40 (ns) of DIMMs
+ OUT UINT16 DIMMTccdL; ///< Minimax TccdL*40 (ns) of DIMMs
OUT UINT16 TargetSpeed; ///< Target DRAM bus speed in MHz
OUT UINT16 Speed; ///< DRAM bus speed in MHz
///< 400 (MHz)
@@ -1622,10 +1619,14 @@ typedef struct _CH_TIMING_STRUCT {
OUT UINT8 Trrd; ///< DCT Trrd (busclocks)
OUT UINT8 Twtr; ///< DCT Twtr (busclocks)
OUT UINT8 Tfaw; ///< DCT Tfaw (busclocks)
+ OUT UINT8 TrrdL; ///< DCT TrrdL (busclocks)
+ OUT UINT8 TwtrL; ///< DCT TwtrL (busclocks)
+ OUT UINT8 TccdL; ///< DCT TccdL (busclocks)
OUT UINT16 Trfc0; ///< DCT Logical DIMM0 Trfc (in ns)
OUT UINT16 Trfc1; ///< DCT Logical DIMM1 Trfc (in ns)
OUT UINT16 Trfc2; ///< DCT Logical DIMM2 Trfc (in ns)
OUT UINT16 Trfc3; ///< DCT Logical DIMM3 Trfc (in ns)
+ OUT UINT16 Trfc4; ///< DCT Trfc4min All DIMMS (in ns) - DDR4 Only
OUT UINT32 DctMemSize; ///< Base[47:16], total DRAM size controlled by this DCT.
///<
OUT BOOLEAN SlowMode; ///< 1T or 2T CMD mode (slow access mode)
@@ -1788,7 +1789,7 @@ typedef struct _MEM_PARAMETER_STRUCT {
///<
OUT UINT32 SysLimit; ///< Limit[47:16] (system address).
///<
- OUT DIMM_VOLTAGE DDR3Voltage; ///< Find support voltage and send back to platform BIOS.
+ OUT DIMM_VOLTAGE DDRVoltage; ///< Find support voltage and send back to platform BIOS for DDR3 or DDR4.
///<
OUT VDDP_VDDR_VOLTAGE VddpVddrVoltage; ///< For a given configuration, request is made to change the VDDP/VDDR
///< voltage in platform BIOS via AgesaHookBeforeDramInit callout and
@@ -1892,7 +1893,15 @@ typedef struct _MEM_PARAMETER_STRUCT {
///< - TRUE =enable
///<
///< @BldCfgItem{BLDCFG_MEMORY_EXTENDED_TEMPERATURE_RANGE}
- // Extended temperature range
+
+ // Temperature Controlled Refresh
+
+ IN BOOLEAN DramTempControlledRefreshEn; ///< Enable Temperature Controlled Refresh
+ ///< - FALSE = Disable
+ ///< - TRUE = Enable (Default)
+ ///< @BldCfgItem{BLDCFG_DRAM_TEMP_CONTROLLED_REFRESH_EN}
+ ///< If EnableExtendedTemperatureRange is enabled with this feature
+ ///< then CfgDramDoubleRefreshrate must also be enabled.
// Online Spare
@@ -2072,13 +2081,12 @@ typedef struct _MEM_PARAMETER_STRUCT {
///< TRUE = Enable, platfrom BIOS requests support for DDR4
///< FALSE = Disable, platform BIOS requests no DDR4 support
///< @BldCfgItem{BLDCFG_DIMM_TYPE_DDR4_CAPABLE}
- IN BOOLEAN DimmTypeDddr3Capable; ///< Indicates that the system is DDR3 Capable
+ IN BOOLEAN DimmTypeDddr3Capable; ///< Indicates that the system is DDR3 Capable
///< TRUE = Enable, platfrom BIOS requests support for DDR3
///< FALSE = Disable, platform BIOS requests no DDR3 support
///< @BldCfgItem{BLDCFG_DIMM_TYPE_DDR3_CAPABLE}
IN UINT16 CustomVddioSupport; ///< CustomVddioSupport
///< @BldCfgItem{BLDCFG_CUSTOM_VDDIO_VOLTAGE}
-
} MEM_PARAMETER_STRUCT;
@@ -2198,6 +2206,8 @@ typedef union {
///< cannot be applied to current configurations.
#define MEM_ALERT_ORG_MISMATCH_DIMM 0x04010100ul ///< DIMM organization miss-match
#define MEM_ALERT_BK_INT_DIS 0x04010200ul ///< Bank interleaving disable for internal issue
+#define MEM_ALERT_DRAM_DOUBLE_REFRESH_RATE_ENABLED 0x04010300ul ///< CfgDramDoubleRefreshRate has been enabled due
+ /// to Extended Temperature Range feature
// AGESA_ERROR Memory Errors
#define MEM_ERROR_NO_DQS_POS_RD_WINDOW 0x04010300ul ///< No DQS Position window for RD DQS
@@ -2249,6 +2259,8 @@ typedef union {
#define MEM_ERROR_ODT_TRI_MAP_NOT_FOUND 0x040B3500ul ///< No ODT tristate map is found
#define MEM_ERROR_CS_TRI_MAP_NOT_FOUND 0x040C3500ul ///< No CS tristate map is found
#define MEM_ERROR_TRAINING_SEED_NOT_FOUND 0x040D3500ul ///< No training seed is found
+#define MEM_ERROR_CAD_BUS_TMG_NOT_FOUND 0x040E3500ul ///< No CAD Bus Timing Entries found
+#define MEM_ERROR_DATA_BUS_CFG_NOT_FOUND 0x040F3500ul ///< No Data Bus Config Entries found
#define MEM_ERROR_NO_2D_WRDAT_WINDOW 0x040D0400ul ///< No 2D WrDat Window
#define MEM_ERROR_NO_2D_WRDAT_HEIGHT 0x040E0400ul ///< No 2D WrDat Height
#define MEM_ERROR_2D_WRDAT_ERROR 0x040F0400ul ///< 2d WrDat Error
@@ -2306,7 +2318,7 @@ typedef union {
// AGESA_CRITICAL Memory Errors
#define MEM_ERROR_HEAP_ALLOCATE_FOR_DMI_TABLE_DDR3 0x04091F00ul ///< Heap allocation error for DMI table for DDR3
-#define MEM_ERROR_HEAP_ALLOCATE_FOR_DMI_TABLE_DDR2 0x040A1F00ul ///< Heap allocation error for DMI table for DDR2
+#define MEM_ERROR_HEAP_ALLOCATE_FOR_DMI_TABLE_DDR4 0x040A1F00ul ///< Heap allocation error for DMI table for DDR4
#define MEM_ERROR_UNSUPPORTED_DIMM_CONFIG 0x04011400ul ///< Dimm population is not supported
#define MEM_ERROR_HEAP_ALLOCATE_FOR_CRAT_MEM_AFFINITY 0x040D1F00ul ///< Heap allocation error for CRAT memory affinity info
@@ -2886,6 +2898,7 @@ typedef struct {
IN BOOLEAN CfgMemoryPowerDown; ///< Memory Power Down.
IN UINT8 CfgMemoryMacDefault; ///< Memory DRAM MAC Default
IN BOOLEAN CfgMemoryExtendedTemperatureRange; ///< Memory Extended Temperature Range
+ IN BOOLEAN CfgDramTempControlledRefreshEn; ///< Temperature Controlled Refresh Rate - @BldCfgItem{BLDCFG_DRAM_TEMP_CONTROLLED_REFRESH_EN}
IN UINT32 CfgPowerDownMode; ///< Power Down Mode.
IN BOOLEAN CfgOnlineSpare; ///< Online Spare.
IN BOOLEAN CfgMemoryParityEnable; ///< Memory Parity Enable.
@@ -2938,7 +2951,7 @@ typedef struct {
IN UINT8 CfgAbmSupport; ///< Abm Support
IN UINT8 CfgDynamicRefreshRate; ///< DRR Dynamic Refresh Rate
IN UINT16 CfgLcdBackLightControl; ///< LCD Backlight Control
- IN UINT8 CfgGnb3dStereoPinIndex; ///< 3D Stereo Pin ID.
+ IN UINT8 CfgGnb3dStereoPinIndex; ///< 3D Stereo Pin ID.
IN UINT32 CfgTempPcieMmioBaseAddress; ///< Temp pcie MMIO base Address
///< Build-time customizable only - @BldCfgItem{BLDCFG_TEMP_PCIE_MMIO_BASE_ADDRESS}
IN UINT32 CfgGnbIGPUSSID; ///< Gnb internal GPU SSID
@@ -2985,6 +2998,10 @@ typedef struct {
///< @BldCfgItem{BLDCFG_DP_FIXED_VOLT_SWING}
IN TECHNOLOGY_TYPE CfgDimmTypeUsedInMixedConfig; ///< Select the preferred technology type that AGESA will enable
///< when it is mixed with other technology types.
+ IN BOOLEAN CfgDimmTypeDdr4Capable; ///< Select DDR4 as technology type that AGESA will enable
+ ///< @BldCfgItem{BLDCFG_DIMM_TYPE_DDR4_CAPABLE}
+ IN BOOLEAN CfgDimmTypeDdr3Capable; ///< Select DDR3 as technology type that AGESA will enable
+ ///< @BldCfgItem{BLDCFG_DIMM_TYPE_DDR3_CAPABLE}
IN BOOLEAN CfgHybridBoostEnable; ///< HyBrid Boost support
///< @BldCfgItem{BLDCFG_HYBRID_BOOST_ENABLE}
IN UINT64 CfgGnbIoapicAddress; ///< GNB IOAPIC Base Address(NULL if platform configured)
@@ -3141,6 +3158,10 @@ typedef struct {
OUT UINT16 T4ProcFamily2; ///< Family 2
OUT CHAR8 T4ProcVersion[PROC_VERSION_LENGTH]; ///< Cpu version
OUT CHAR8 T4ProcManufacturer[PROC_MANU_LENGTH]; ///< Manufacturer
+ OUT UINT16 T4CoreCount2; ///< Core count 2
+ OUT UINT16 T4CoreEnabled2; ///< Core Enable 2
+ OUT UINT16 T4ThreadCount2; ///< Thread count 2
+
} TYPE4_DMI_INFO;
/// DMI Type 7 - Cache information
@@ -3250,7 +3271,12 @@ typedef enum {
Ddr2MemType, ///< Assign 19 to DDR2
Ddr2FbdimmMemType, ///< Assign 20 to DDR2 FB-DIMM
Ddr3MemType = 0x18, ///< Assign 24 to DDR3
- Fbd2MemType ///< Assign 25 to FBD2
+ Fbd2MemType, ///< Assign 25 to FBD2
+ Ddr4MemType, ///< Assign 26 to DDR4
+ LpDdrMemType, ///< Assign 27 to LPDDR
+ LpDdr2MemType, ///< Assign 28 to LPDDR2
+ LpDdr3MemType, ///< Assign 29 to LPDDR3
+ LpDdr4MemType, ///< Assign 30 to LPDDR4
} DMI_T17_MEMORY_TYPE;
/// DMI Type 17 offset 13h - Type Detail
@@ -3270,7 +3296,7 @@ typedef struct {
OUT UINT16 NonVolatile:1; ///< Non-volatile
OUT UINT16 Registered:1; ///< Registered (Buffered)
OUT UINT16 Unbuffered:1; ///< Unbuffered (Unregistered)
- OUT UINT16 Reserved2:1; ///< Reserved
+ OUT UINT16 LRDIMM:1; ///< LRDIMM
} DMI_T17_TYPE_DETAIL;
/// DMI Type 17 - Memory Device
diff --git a/src/vendorcode/amd/pi/00660F01/Proc/CPU/Family/cpuFamRegisters.h b/src/vendorcode/amd/pi/00660F01/Proc/CPU/Family/cpuFamRegisters.h
index c4be6286b6..62ef892eda 100644
--- a/src/vendorcode/amd/pi/00660F01/Proc/CPU/Family/cpuFamRegisters.h
+++ b/src/vendorcode/amd/pi/00660F01/Proc/CPU/Family/cpuFamRegisters.h
@@ -69,7 +69,11 @@
// Family 15h equates
#define AMD_FAMILY_15_CZ 0x0004u
#define AMD_FAMILY_CZ (AMD_FAMILY_15_CZ)
-#define AMD_FAMILY_15 AMD_FAMILY_15_CZ
+
+#define AMD_FAMILY_15_ST 0x0008u
+#define AMD_FAMILY_ST (AMD_FAMILY_15_ST)
+
+#define AMD_FAMILY_15 (AMD_FAMILY_15_CZ | AMD_FAMILY_ST)
// Family Unknown
#define AMD_FAMILY_UNKNOWN 0x8000u
@@ -81,12 +85,23 @@
// Family 15h CZ steppings
#define AMD_F15_CZ_A0 0x0001u
#define AMD_F15_CZ_A1 0x0002u
+#define AMD_F15_BR_A1 0x0004u
+ // Family 15h ST steppings
+#define AMD_F15_ST_A0 0x0010u
// Family 15h Unknown stepping
#define AMD_F15_UNKNOWN 0x8000u
-#define AMD_F15_CZ_Ax (AMD_F15_CZ_A0 | AMD_F15_CZ_A1)
-#define AMD_F15_CZ_ALL (AMD_F15_CZ_Ax)
+ // CZ and BR
+#define AMD_F15_BR_Ax (AMD_F15_BR_A1)
+#define AMD_F15_BR_ALL (AMD_F15_BR_Ax)
+
+#define AMD_F15_CZ_Ax (AMD_F15_CZ_A0 | AMD_F15_CZ_A1 | AMD_F15_BR_Ax)
+#define AMD_F15_CZ_ALL (AMD_F15_CZ_Ax | AMD_F15_BR_ALL)
+
+ // ST
+#define AMD_F15_ST_Ax (AMD_F15_ST_A0)
+#define AMD_F15_ST_ALL (AMD_F15_ST_Ax)
-#define AMD_F15_ALL AMD_F15_CZ_ALL
+#define AMD_F15_ALL (AMD_F15_CZ_ALL | AMD_F15_ST_ALL)
#endif // _CPU_FAM_REGISTERS_H_
diff --git a/src/vendorcode/amd/pi/00660F01/Proc/CPU/cpuRegisters.h b/src/vendorcode/amd/pi/00660F01/Proc/CPU/cpuRegisters.h
index e51a01feb5..889be764a1 100644
--- a/src/vendorcode/amd/pi/00660F01/Proc/CPU/cpuRegisters.h
+++ b/src/vendorcode/amd/pi/00660F01/Proc/CPU/cpuRegisters.h
@@ -429,14 +429,14 @@ typedef struct {
#define CPUID_EXT_FAMILY_MASK 0x0FF00000ul
#define CZ_SOCKET_FP4 0
+#define ST_SOCKET_FP4 0
+#define ST_SOCKET_FT4 3
#define SOCKET_IGNORE 0xF
#define LAPIC_BASE_ADDR_MASK 0x0000FFFFFFFFF000ull
#define APIC_EXT_BRDCST_MASK 0x000E0000ul
#define APIC_ENABLE_BIT 0x00000800ul
-#ifndef LOCAL_APIC_ADDR
#define LOCAL_APIC_ADDR 0xFEE00000ul
-#endif
#define INT_CMD_REG_LO 0x300
#define INT_CMD_REG_HI 0x310
#define REMOTE_MSG_REG 0x380
diff --git a/src/vendorcode/amd/pi/00660F01/Proc/Fch/Common/FchCommonCfg.h b/src/vendorcode/amd/pi/00660F01/Proc/Fch/Common/FchCommonCfg.h
index fb2bae22a0..35a76d20fd 100644
--- a/src/vendorcode/amd/pi/00660F01/Proc/Fch/Common/FchCommonCfg.h
+++ b/src/vendorcode/amd/pi/00660F01/Proc/Fch/Common/FchCommonCfg.h
@@ -986,6 +986,7 @@ typedef struct {
VOID* OemProgrammingTablePtr; /// Pointer of ACPI OEM table
UINT8 SpreadSpectrumOptions; /// SpreadSpectrumOptions - Spread Spectrum Option
BOOLEAN PwrDownDisp2ClkPcieR; /// Power down DISP2_CLK and PCIE_RCLK_Output for power savings
+ BOOLEAN NoClearThermalTripSts; /// Skip clearing ThermalTrip status
} FCH_ACPI;
diff --git a/src/vendorcode/amd/pi/00660F01/Proc/Psp/PspBaseLib/PspBaseLib.h b/src/vendorcode/amd/pi/00660F01/Proc/Psp/PspBaseLib/PspBaseLib.h
index c18e191780..61082743de 100644
--- a/src/vendorcode/amd/pi/00660F01/Proc/Psp/PspBaseLib/PspBaseLib.h
+++ b/src/vendorcode/amd/pi/00660F01/Proc/Psp/PspBaseLib/PspBaseLib.h
@@ -68,6 +68,11 @@
#define PSP_MAILBOX_BASE 0x70 ///< Mailbox base offset on PCIe BAR
#define PSP_MAILBOX_STATUS_OFFSET 0x4 ///< Staus Offset
+#define PMIO_INDEX_PORT 0xCD6 ///Pmio index port
+#define PMIO_DATA_PORT 0xCD7 ///Pmio data port
+
+#define PMIO_REG62 0x62 ///PMIOx62
+
//======================================================================================
//
// Define Mailbox Status field
@@ -162,7 +167,7 @@ GetPspMboxStatus (
BOOLEAN
-PspBarInitEarly (void);
+PspBarInitEarly (VOID);
VOID
PspLibPciIndirectRead (
@@ -184,4 +189,8 @@ UINT8
PspLibAccessWidth (
IN ACCESS_WIDTH AccessWidth
);
+
+BOOLEAN
+IsS3Resume (VOID);
+
#endif // _AMD_LIB_H_