summaryrefslogtreecommitdiff
path: root/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14
diff options
context:
space:
mode:
Diffstat (limited to 'src/vendorcode/amd/agesa/Proc/CPU/Family/0x14')
-rw-r--r--src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/F14C6State.c238
-rw-r--r--src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/F14IoCstate.c285
-rw-r--r--src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/F14MicrocodePatch0500000B.c1645
-rw-r--r--src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/F14MicrocodePatch0500000B_Unenc.c1461
-rw-r--r--src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/F14MicrocodePatch0500001A.c1645
-rw-r--r--src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/F14MicrocodePatch0500001A_Unenc.c1461
-rw-r--r--src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/F14MicrocodePatch05000025.c1645
-rw-r--r--src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/F14MicrocodePatch05000025_Unenc.c1461
-rw-r--r--src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/F14PackageType.h77
-rw-r--r--src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/ON/F14OnEquivalenceTable.c125
-rw-r--r--src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/ON/F14OnInitEarlyTable.c309
-rw-r--r--src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/ON/F14OnInitEarlyTable.h69
-rw-r--r--src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/ON/F14OnLogicalIdTables.c102
-rw-r--r--src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/ON/F14OnMicrocodePatchTables.c102
-rw-r--r--src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuCommonF14Utilities.c518
-rw-r--r--src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuCommonF14Utilities.h104
-rw-r--r--src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14BrandId.c139
-rw-r--r--src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14BrandIdFt1.c145
-rw-r--r--src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14CacheDefaults.c123
-rw-r--r--src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14Dmi.c272
-rw-r--r--src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14MsrTables.c198
-rw-r--r--src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14PciTables.c716
-rw-r--r--src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14PerCorePciTables.c102
-rw-r--r--src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14PowerCheck.c358
-rw-r--r--src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14PowerCheck.h83
-rw-r--r--src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14PowerMgmt.h477
-rw-r--r--src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14PowerMgmtSystemTables.c133
-rw-r--r--src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14PowerPlane.c272
-rw-r--r--src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14PowerPlane.h78
-rw-r--r--src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14Pstate.c364
-rw-r--r--src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14SoftwareThermal.c112
-rw-r--r--src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14SoftwareThermal.h80
-rw-r--r--src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14Utilities.c539
-rw-r--r--src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14Utilities.h132
-rw-r--r--src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14WheaInitDataTables.c117
35 files changed, 15687 insertions, 0 deletions
diff --git a/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/F14C6State.c b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/F14C6State.c
new file mode 100644
index 0000000000..48823ec080
--- /dev/null
+++ b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/F14C6State.c
@@ -0,0 +1,238 @@
+/* $NoKeywords:$ */
+/**
+ * @file
+ *
+ * AMD Family_14 C6 C-state feature support functions.
+ *
+ * Provides the functions necessary to initialize the C6 feature.
+ *
+ * @xrefitem bom "File Content Label" "Release Content"
+ * @e project: AGESA
+ * @e sub-project: CPU/F14
+ * @e \$Revision: 37004 $ @e \$Date: 2010-08-28 02:23:00 +0800 (Sat, 28 Aug 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.
+ *
+ * ***************************************************************************
+ *
+ */
+
+/*----------------------------------------------------------------------------------------
+ * M O D U L E S U S E D
+ *----------------------------------------------------------------------------------------
+ */
+#include "AGESA.h"
+#include "amdlib.h"
+#include "Ids.h"
+#include "cpuRegisters.h"
+#include "cpuEarlyInit.h"
+#include "cpuFeatures.h"
+#include "cpuC6State.h"
+#include "cpuF14PowerMgmt.h"
+#include "OptionFamily14hEarlySample.h"
+#include "Filecode.h"
+#define FILECODE PROC_CPU_FAMILY_0X14_F14C6STATE_FILECODE
+
+/*----------------------------------------------------------------------------------------
+ * D E F I N I T I O N S A N D M A C R O S
+ *----------------------------------------------------------------------------------------
+ */
+extern F14_ES_C6_SUPPORT F14EarlySampleC6Support;
+
+/*----------------------------------------------------------------------------------------
+ * T Y P E D E F S A N D S T R U C T U R E S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * P R O T O T Y P E S O F L O C A L F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * E X P O R T E D F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Is C6 supported on this CPU
+ *
+ * @param[in] C6Services Pointer to this CPU's C6 family services.
+ * @param[in] Socket This core's zero-based socket number.
+ * @param[in] StdHeader Config Handle for library, services.
+ *
+ * @retval TRUE C6 state is supported.
+ * @retval FALSE C6 state is not supported.
+ *
+ */
+BOOLEAN
+STATIC
+F14IsC6Supported (
+ IN C6_FAMILY_SERVICES *C6Services,
+ IN UINT32 Socket,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ UINT32 PciRegister;
+ BOOLEAN IsEnabled;
+ PCI_ADDR PciAddress;
+
+ IsEnabled = TRUE;
+
+ PciAddress.AddressValue = CPU_STATE_PM_CTRL1_PCI_ADDR;
+ LibAmdPciRead (AccessWidth32, PciAddress, &PciRegister, StdHeader);
+ if ((((CPU_STATE_PM_CTRL1_REGISTER *) &PciRegister)->CoreC6Cap == 0) &&
+ (((CPU_STATE_PM_CTRL1_REGISTER *) &PciRegister)->PkgC6Cap == 0)) {
+ IsEnabled = FALSE;
+ }
+
+ F14EarlySampleC6Support.F14IsC6SupportedHook (&IsEnabled, StdHeader);
+
+ return IsEnabled;
+}
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Enable C6 on a family 14h CPU.
+ *
+ * @param[in] C6Services Pointer to this CPU's C6 family services.
+ * @param[in] EntryPoint Timepoint designator.
+ * @param[in] PlatformConfig Contains the runtime modifiable feature input data.
+ * @param[in] StdHeader Config Handle for library, services.
+ *
+ * @return AGESA_SUCCESS Always succeeds.
+ *
+ */
+AGESA_STATUS
+STATIC
+F14InitializeC6 (
+ IN C6_FAMILY_SERVICES *C6Services,
+ IN UINT64 EntryPoint,
+ IN PLATFORM_CONFIGURATION *PlatformConfig,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ UINT32 i;
+ UINT32 MaxEnabledPstate;
+ UINT32 PciRegister;
+ UINT64 MsrRegister;
+ PCI_ADDR PciAddress;
+
+ for (i = MSR_PSTATE_7; i > MSR_PSTATE_0; i--) {
+ LibAmdMsrRead (i, &MsrRegister, StdHeader);
+ if (((PSTATE_MSR *) &MsrRegister)->PsEnable == 1) {
+ break;
+ }
+ }
+ MaxEnabledPstate = i - MSR_PSTATE_0;
+
+ if ((EntryPoint & CPU_FEAT_AFTER_PM_INIT) != 0) {
+ // Program D18F4x1AC[CoreC6Dis] to 0.
+ // Program D18F4x1AC[PkgC6Dis] to 0.
+ PciAddress.AddressValue = CPU_STATE_PM_CTRL1_PCI_ADDR;
+ LibAmdPciRead (AccessWidth32, PciAddress, &PciRegister, StdHeader);
+ ((CPU_STATE_PM_CTRL1_REGISTER *) &PciRegister)->CoreC6Dis = 0;
+ ((CPU_STATE_PM_CTRL1_REGISTER *) &PciRegister)->PkgC6Dis = 0;
+ LibAmdPciWrite (AccessWidth32, PciAddress, &PciRegister, StdHeader);
+
+ F14EarlySampleC6Support.F14InitializeC6 (StdHeader);
+
+ } else {
+ // Ensure D18F2x118[C6DramLock] and D18F4x12C[C6Base] are programmed.
+ PciAddress.AddressValue = MEM_CFG_LOW_PCI_ADDR;
+ LibAmdPciRead (AccessWidth32, PciAddress, &PciRegister, StdHeader);
+ ASSERT (((MEM_CFG_LOW_REGISTER *) &PciRegister)->C6DramLock == 1);
+
+ PciAddress.AddressValue = C6_BASE_PCI_ADDR;
+ LibAmdPciRead (AccessWidth32, PciAddress, &PciRegister, StdHeader);
+ ASSERT (((C6_BASE_REGISTER *) &PciRegister)->C6Base != 0);
+
+ // If PC6 is supported, program D18F4x1AC[PstateIdCoreOffExit] to
+ // the index of lowest-performance Pstate with MSRC001_00[6B:64]
+ // [PstateEn] == 1 on core 0.
+ PciAddress.AddressValue = CPU_STATE_PM_CTRL1_PCI_ADDR;
+ LibAmdPciRead (AccessWidth32, PciAddress, &PciRegister, StdHeader);
+ if (((CPU_STATE_PM_CTRL1_REGISTER *) &PciRegister)->PkgC6Cap == 1) {
+ ((CPU_STATE_PM_CTRL1_REGISTER *) &PciRegister)->PstateIdCoreOffExit = MaxEnabledPstate;
+ LibAmdPciWrite (AccessWidth32, PciAddress, &PciRegister, StdHeader);
+ }
+
+ // Program D18F4x118 to 0000_0101h.
+ PciAddress.AddressValue = CSTATE_CTRL1_PCI_ADDR;
+ PciRegister = 0x00000101;
+ LibAmdPciWrite (AccessWidth32, PciAddress, &PciRegister, StdHeader);
+ }
+
+ return AGESA_SUCCESS;
+}
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Reload microcode patch for a family 14h CPU after memory is initialized.
+ *
+ * @param[in] StdHeader Config Handle for library, services.
+ *
+ */
+VOID
+STATIC
+F14ReloadMicrocodePatchAfterMemInit (
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ UINT64 MsrValue;
+
+ // To load a microcode patch while using the cache as general storage,
+ // the following steps are followed:
+ // 1. Program MSRC001_102B[L2AllocDcFlushVictim]=1.
+ // 2. Load the microcode patch.
+ // 3. Program MSRC001_102B[L2AllocDcFlushVictim]=0.
+ LibAmdMsrRead (MSR_BU_CFG3, &MsrValue, StdHeader);
+ MsrValue = MsrValue | BIT7;
+ LibAmdMsrWrite (MSR_BU_CFG3, &MsrValue, StdHeader);
+
+ // Reload microcode patches.
+ LoadMicrocodePatch (StdHeader);
+
+ LibAmdMsrRead (MSR_BU_CFG3, &MsrValue, StdHeader);
+ MsrValue = MsrValue & ~((UINT64)BIT7);
+ LibAmdMsrWrite (MSR_BU_CFG3, &MsrValue, StdHeader);
+}
+
+
+
+CONST C6_FAMILY_SERVICES ROMDATA F14C6Support =
+{
+ 0,
+ F14IsC6Supported,
+ F14InitializeC6,
+ F14ReloadMicrocodePatchAfterMemInit
+};
diff --git a/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/F14IoCstate.c b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/F14IoCstate.c
new file mode 100644
index 0000000000..43f0c68bbb
--- /dev/null
+++ b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/F14IoCstate.c
@@ -0,0 +1,285 @@
+/* $NoKeywords:$ */
+/**
+ * @file
+ *
+ * AMD Family_14 IO C-state feature support functions.
+ *
+ * Provides the functions necessary to initialize the IO C-state feature.
+ *
+ * @xrefitem bom "File Content Label" "Release Content"
+ * @e project: AGESA
+ * @e sub-project: CPU/F14
+ * @e \$Revision: 34897 $ @e \$Date: 2010-07-14 10:07:10 +0800 (Wed, 14 Jul 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.
+ *
+ * ***************************************************************************
+ *
+ */
+/*----------------------------------------------------------------------------------------
+ * M O D U L E S U S E D
+ *----------------------------------------------------------------------------------------
+ */
+
+#include "AGESA.h"
+#include "amdlib.h"
+#include "Ids.h"
+#include "cpuRegisters.h"
+#include "cpuServices.h"
+#include "cpuFeatures.h"
+#include "cpuIoCstate.h"
+#include "cpuF14PowerMgmt.h"
+#include "cpuLateInit.h"
+#include "cpuApicUtilities.h"
+#include "CommonReturns.h"
+#include "Filecode.h"
+#define FILECODE PROC_CPU_FAMILY_0X14_F14IOCSTATE_FILECODE
+
+/*----------------------------------------------------------------------------------------
+ * D E F I N I T I O N S A N D M A C R O S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * T Y P E D E F S A N D S T R U C T U R E S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * P R O T O T Y P E S O F L O C A L F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+VOID
+STATIC
+F14InitializeIoCstateOnCore (
+ IN VOID *CstateBaseMsr,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ );
+
+
+/*----------------------------------------------------------------------------------------
+ * E X P O R T E D F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Enable IO Cstate on a family 14h CPU.
+ * Implement steps 1 to 3 of BKDG section 2.5.4.2.9 BIOS Requirements for Initialization
+ *
+ * @param[in] IoCstateServices Pointer to this CPU's IO Cstate family services.
+ * @param[in] EntryPoint Timepoint designator.
+ * @param[in] PlatformConfig Contains the runtime modifiable feature input data.
+ * @param[in] StdHeader Config Handle for library, services.
+ *
+ * @return AGESA_SUCCESS Always succeeds.
+ *
+ */
+AGESA_STATUS
+STATIC
+F14InitializeIoCstate (
+ IN IO_CSTATE_FAMILY_SERVICES *IoCstateServices,
+ IN UINT64 EntryPoint,
+ IN PLATFORM_CONFIGURATION *PlatformConfig,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+
+ UINT32 i;
+ UINT32 MaxEnabledPstate;
+ UINT32 PciRegister;
+ UINT64 MsrRegister;
+ AP_TASK TaskPtr;
+ PCI_ADDR PciAddress;
+
+ if ((EntryPoint & CPU_FEAT_AFTER_PM_INIT) != 0) {
+ for (i = MSR_PSTATE_7; i > MSR_PSTATE_0; i--) {
+ LibAmdMsrRead (i, &MsrRegister, StdHeader);
+ if (((PSTATE_MSR *) &MsrRegister)->PsEnable == 1) {
+ break;
+ }
+ }
+ MaxEnabledPstate = i - MSR_PSTATE_0;
+ // Initialize MSRC001_0073[CstateAddr] on each core to a region of
+ // the IO address map with 8 consecutive available addresses.
+ MsrRegister = 0;
+ ((CSTATE_ADDRESS_MSR *) &MsrRegister)->CstateAddr = PlatformConfig->CStateIoBaseAddress;
+ ASSERT ((((CSTATE_ADDRESS_MSR *) &MsrRegister)->CstateAddr != 0) &&
+ (((CSTATE_ADDRESS_MSR *) &MsrRegister)->CstateAddr <= 0xFFF8));
+
+ TaskPtr.FuncAddress.PfApTaskI = F14InitializeIoCstateOnCore;
+ TaskPtr.DataTransfer.DataSizeInDwords = 2;
+ TaskPtr.DataTransfer.DataPtr = &MsrRegister;
+ TaskPtr.DataTransfer.DataTransferFlags = 0;
+ TaskPtr.ExeFlags = WAIT_FOR_CORE;
+ ApUtilRunCodeOnAllLocalCoresAtEarly (&TaskPtr, StdHeader, NULL);
+
+ // Program D18F4x1A8[PService] to the index of lowest-performance
+ // P-state with MSRC001_00[6B:64][PstateEn]==1 on core 0.
+ PciAddress.AddressValue = CPU_STATE_PM_CTRL0_PCI_ADDR;
+ LibAmdPciRead (AccessWidth32, PciAddress, &PciRegister, StdHeader);
+ ((CPU_STATE_PM_CTRL0_REGISTER *) &PciRegister)->PService = MaxEnabledPstate;
+ LibAmdPciWrite (AccessWidth32, PciAddress, &PciRegister, StdHeader);
+
+ // Program D18F4x1AC[CstPminEn] to 1.
+ PciAddress.AddressValue = CPU_STATE_PM_CTRL1_PCI_ADDR;
+ LibAmdPciRead (AccessWidth32, PciAddress, &PciRegister, StdHeader);
+ ((CPU_STATE_PM_CTRL1_REGISTER *) &PciRegister)->CstPminEn = 1;
+ LibAmdPciWrite (AccessWidth32, PciAddress, &PciRegister, StdHeader);
+ }
+ return AGESA_SUCCESS;
+}
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Enable C-State on a family 14h core.
+ *
+ * @param[in] CstateBaseMsr MSR value to write to C001_0073 as determined by core 0.
+ * @param[in] StdHeader Config Handle for library, services.
+ *
+ */
+VOID
+STATIC
+F14InitializeIoCstateOnCore (
+ IN VOID *CstateBaseMsr,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ // Initialize MSRC001_0073[CstateAddr] on each core
+ LibAmdMsrWrite (MSR_CSTATE_ADDRESS, (UINT64 *) CstateBaseMsr, StdHeader);
+}
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Returns the size of CST object
+ *
+ * @param[in] IoCstateServices IO Cstate services.
+ * @param[in] PlatformConfig Contains the runtime modifiable feature input data
+ * @param[in] StdHeader Config Handle for library, services.
+ *
+ * @retval CstObjSize Size of CST Object
+ *
+ */
+UINT32
+STATIC
+F14GetAcpiCstObj (
+ IN IO_CSTATE_FAMILY_SERVICES *IoCstateServices,
+ IN PLATFORM_CONFIGURATION *PlatformConfig,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ return (CST_HEADER_SIZE + CST_BODY_SIZE);
+}
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Routine to generate the C-State ACPI objects
+ *
+ * @param[in] IoCstateServices IO Cstate services.
+ * @param[in] LocalApicId Local Apic Id for each core.
+ * @param[in] **PstateAcpiBufferPtr Pointer to the Acpi Buffer Pointer.
+ * @param[in] StdHeader Config Handle for library, services.
+ *
+ */
+VOID
+STATIC
+F14CreateAcpiCstObj (
+ IN IO_CSTATE_FAMILY_SERVICES *IoCstateServices,
+ IN UINT8 LocalApicId,
+ IN OUT VOID **PstateAcpiBufferPtr,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ UINT64 MsrData;
+ CST_HEADER_STRUCT *CstHeaderPtr;
+ CST_BODY_STRUCT *CstBodyPtr;
+
+ // Read from MSR C0010073 to obtain CstateAddr
+ LibAmdMsrRead (MSR_CSTATE_ADDRESS, &MsrData, StdHeader);
+ ASSERT ((((CSTATE_ADDRESS_MSR *) &MsrData)->CstateAddr != 0) &&
+ (((CSTATE_ADDRESS_MSR *) &MsrData)->CstateAddr <= 0xFFF8));
+
+ // Typecast the pointer
+ CstHeaderPtr = (CST_HEADER_STRUCT *) *PstateAcpiBufferPtr;
+
+ // Set CST Header
+ CstHeaderPtr->NameOpcode = NAME_OPCODE;
+ CstHeaderPtr->CstName_a__ = CST_NAME__;
+ CstHeaderPtr->CstName_a_C = CST_NAME_C;
+ CstHeaderPtr->CstName_a_S = CST_NAME_S;
+ CstHeaderPtr->CstName_a_T = CST_NAME_T;
+
+ // Typecast the pointer
+ CstHeaderPtr++;
+ CstBodyPtr = (CST_BODY_STRUCT *) CstHeaderPtr;
+
+ // Set CST Body
+ CstBodyPtr->PkgOpcode = PACKAGE_OPCODE;
+ CstBodyPtr->PkgLength = CST_LENGTH;
+ CstBodyPtr->PkgElements = CST_NUM_OF_ELEMENTS;
+ CstBodyPtr->BytePrefix = BYTE_PREFIX_OPCODE;
+ CstBodyPtr->Count = CST_COUNT;
+ CstBodyPtr->PkgOpcode2 = PACKAGE_OPCODE;
+ CstBodyPtr->PkgLength2 = CST_PKG_LENGTH;
+ CstBodyPtr->PkgElements2 = CST_PKG_ELEMENTS;
+ CstBodyPtr->BufferOpcode = BUFFER_OPCODE;
+ CstBodyPtr->BufferLength = CST_SUBPKG_LENGTH;
+ CstBodyPtr->BufferElements = CST_SUBPKG_ELEMENTS;
+ CstBodyPtr->BufferOpcode2 = BUFFER_OPCODE;
+ CstBodyPtr->GdrOpcode = GENERIC_REG_DESCRIPTION;
+ CstBodyPtr->GdrLength = CST_GDR_LENGTH;
+ CstBodyPtr->AddrSpaceId = GDR_ASI_SYSTEM_IO;
+ CstBodyPtr->RegBitWidth = 0x08;
+ CstBodyPtr->RegBitOffset = 0x00;
+ CstBodyPtr->AddressSize = GDR_ASZ_BYTE_ACCESS;
+ CstBodyPtr->RegisterAddr = ((CSTATE_ADDRESS_MSR *) &MsrData)->CstateAddr + 1;
+ CstBodyPtr->EndTag = 0x0079;
+ CstBodyPtr->BytePrefix2 = BYTE_PREFIX_OPCODE;
+ CstBodyPtr->Type = CST_C2_TYPE;
+ CstBodyPtr->WordPrefix = WORD_PREFIX_OPCODE;
+ CstBodyPtr->Latency = 0x64;
+ CstBodyPtr->DWordPrefix = DWORD_PREFIX_OPCODE;
+ CstBodyPtr->Power = 0;
+
+ CstBodyPtr++;
+
+ //Update the pointer
+ *PstateAcpiBufferPtr = CstBodyPtr;
+}
+
+CONST IO_CSTATE_FAMILY_SERVICES ROMDATA F14IoCstateSupport =
+{
+ 0,
+ (PF_IO_CSTATE_IS_SUPPORTED) CommonReturnTrue,
+ F14InitializeIoCstate,
+ F14GetAcpiCstObj,
+ F14CreateAcpiCstObj,
+ (PF_IO_CSTATE_IS_CSD_GENERATED) CommonReturnFalse
+}; \ No newline at end of file
diff --git a/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/F14MicrocodePatch0500000B.c b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/F14MicrocodePatch0500000B.c
new file mode 100644
index 0000000000..1b1c6fb03b
--- /dev/null
+++ b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/F14MicrocodePatch0500000B.c
@@ -0,0 +1,1645 @@
+/* $NoKeywords:$ */
+/**
+ * @file
+ *
+ * AMD Family_14 Microcode patch.
+ *
+ * Fam14 Microcode Patch rev 0500000B for 5000 or equivalent.
+ *
+ * @xrefitem bom "File Content Label" "Release Content"
+ * @e project: AGESA
+ * @e sub-project: CPU/FAMILY/0x14
+ * @e \$Revision: 34897 $ @e \$Date: 2010-07-14 10:07:10 +0800 (Wed, 14 Jul 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.
+ *
+ * ***************************************************************************
+ *
+ */
+/*----------------------------------------------------------------------------------------
+ * M O D U L E S U S E D
+ *----------------------------------------------------------------------------------------
+ */
+#include "AGESA.h"
+#include "cpuRegisters.h"
+#include "cpuEarlyInit.h"
+
+/*----------------------------------------------------------------------------------------
+ * D E F I N I T I O N S A N D M A C R O S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * T Y P E D E F S A N D S T R U C T U R E S
+ *----------------------------------------------------------------------------------------
+ */
+
+// Patch code 0500000B for 5000 and equivalent
+CONST MICROCODE_PATCHES ROMDATA CpuF14MicrocodePatch0500000B =
+{
+0x10,
+0x20,
+0x01,
+0x06,
+0x0b,
+0x00,
+0x00,
+0x05,
+0x01,
+0x80,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x50,
+0x00,
+0x00,
+0x00,
+0xaa,
+0xaa,
+0xaa,
+0x67,
+0xe5,
+0x52,
+0x3e,
+0x6b,
+0x1c,
+0x70,
+0x69,
+0xd9,
+0x1c,
+0x8d,
+0xab,
+0xab,
+0xc4,
+0xce,
+0xc5,
+0x4f,
+0xc9,
+0x2d,
+0x81,
+0xeb,
+0x2b,
+0x49,
+0x14,
+0x39,
+0xc9,
+0xea,
+0xd1,
+0x6e,
+0x83,
+0x4c,
+0x14,
+0x6c,
+0x57,
+0x06,
+0xf8,
+0xcf,
+0xa5,
+0xb4,
+0x4a,
+0xab,
+0x40,
+0x63,
+0x38,
+0x0c,
+0x32,
+0x56,
+0x28,
+0x46,
+0xe5,
+0x2c,
+0x62,
+0x26,
+0x54,
+0xf7,
+0xa2,
+0x45,
+0xfe,
+0xcb,
+0x20,
+0x01,
+0xb1,
+0x6d,
+0x5d,
+0xbc,
+0xe8,
+0xf9,
+0xe0,
+0x4e,
+0x11,
+0x94,
+0x1f,
+0x20,
+0x90,
+0x31,
+0x33,
+0x23,
+0x09,
+0xb4,
+0xa4,
+0xc8,
+0x88,
+0xa4,
+0x93,
+0xee,
+0x36,
+0xe4,
+0x18,
+0xb8,
+0xbd,
+0x66,
+0x5a,
+0x69,
+0x03,
+0x9c,
+0xc0,
+0xc9,
+0x44,
+0x38,
+0x29,
+0xbe,
+0xba,
+0x4d,
+0xa7,
+0x42,
+0xac,
+0xe3,
+0x6a,
+0xf9,
+0xfa,
+0xa9,
+0x04,
+0xec,
+0x93,
+0x47,
+0xf0,
+0x1f,
+0x49,
+0xf1,
+0xe7,
+0x69,
+0x24,
+0x4c,
+0x88,
+0x1e,
+0xad,
+0xc3,
+0x57,
+0xec,
+0x45,
+0xd4,
+0xeb,
+0xd1,
+0xdf,
+0xdc,
+0x04,
+0x3b,
+0xc1,
+0xb0,
+0x8d,
+0xa1,
+0x3a,
+0x4d,
+0x79,
+0x4b,
+0xad,
+0x70,
+0x9b,
+0x3d,
+0xcf,
+0x7a,
+0x8d,
+0xe1,
+0xc2,
+0xdb,
+0x53,
+0x0b,
+0xbd,
+0xf8,
+0x94,
+0x7c,
+0x2c,
+0x4d,
+0x50,
+0xdf,
+0x90,
+0x31,
+0x52,
+0x8f,
+0xb4,
+0xd6,
+0x1e,
+0x37,
+0x3c,
+0x98,
+0x2b,
+0x26,
+0x8f,
+0x0a,
+0x9c,
+0x15,
+0x8f,
+0x62,
+0x83,
+0x11,
+0xbf,
+0xc1,
+0x74,
+0xd7,
+0x35,
+0xa4,
+0x82,
+0xba,
+0xd3,
+0xcb,
+0xb6,
+0xa0,
+0xca,
+0x7e,
+0x23,
+0xaa,
+0x12,
+0x77,
+0x24,
+0xdb,
+0xfb,
+0x82,
+0x4f,
+0x94,
+0xee,
+0xbe,
+0xcd,
+0x7a,
+0x69,
+0x63,
+0xf6,
+0x7d,
+0x31,
+0xb7,
+0x9a,
+0xfa,
+0xe5,
+0xb3,
+0x1d,
+0x39,
+0xdb,
+0x40,
+0xba,
+0x1b,
+0xaf,
+0xa9,
+0xc9,
+0x24,
+0xea,
+0x78,
+0x47,
+0xf2,
+0x19,
+0x2b,
+0x63,
+0x07,
+0xe1,
+0x4c,
+0xa8,
+0xdb,
+0xff,
+0x34,
+0x07,
+0xe8,
+0x1d,
+0x75,
+0xcc,
+0x99,
+0x41,
+0xd1,
+0x03,
+0xa4,
+0xb9,
+0x58,
+0x53,
+0xba,
+0x80,
+0x5c,
+0xac,
+0x44,
+0x26,
+0xe2,
+0xa7,
+0xbf,
+0x4f,
+0xd9,
+0x52,
+0xed,
+0x36,
+0xbc,
+0xc3,
+0xed,
+0x39,
+0x60,
+0xc6,
+0x5d,
+0x19,
+0x4a,
+0x4f,
+0xea,
+0x5b,
+0x94,
+0xee,
+0x8c,
+0x63,
+0x96,
+0x61,
+0x0e,
+0xfd,
+0x09,
+0x7a,
+0xdb,
+0xc1,
+0x9c,
+0x31,
+0xc2,
+0x64,
+0xac,
+0xbe,
+0xc6,
+0x5a,
+0x6b,
+0x14,
+0x60,
+0x99,
+0xd1,
+0x39,
+0xda,
+0xfc,
+0x70,
+0x2c,
+0x96,
+0x49,
+0x5d,
+0xb9,
+0xf1,
+0xa4,
+0x72,
+0xcf,
+0x4c,
+0xa7,
+0x7b,
+0x4a,
+0xaa,
+0x09,
+0xf0,
+0x36,
+0xef,
+0x6b,
+0x7a,
+0x76,
+0xe5,
+0x8a,
+0x69,
+0x33,
+0xb0,
+0x34,
+0x67,
+0x61,
+0x85,
+0xc9,
+0xf9,
+0x6e,
+0x71,
+0x84,
+0xc5,
+0x9b,
+0x1a,
+0xdf,
+0x56,
+0x6d,
+0x8a,
+0xde,
+0x25,
+0x2c,
+0x6e,
+0xcb,
+0x94,
+0x47,
+0x86,
+0x7c,
+0x9d,
+0x1e,
+0x40,
+0xf3,
+0xa1,
+0x6b,
+0xbc,
+0x61,
+0x68,
+0x39,
+0x2e,
+0x70,
+0x4f,
+0x65,
+0x62,
+0xe4,
+0xba,
+0xb6,
+0xf8,
+0x69,
+0x9b,
+0x12,
+0xd9,
+0x88,
+0xea,
+0x02,
+0x42,
+0x32,
+0xa5,
+0x51,
+0x1e,
+0x7c,
+0x75,
+0xe9,
+0xf2,
+0xa6,
+0x10,
+0x87,
+0x4e,
+0xa3,
+0x9a,
+0xba,
+0x8f,
+0xc7,
+0x9f,
+0x30,
+0xd8,
+0x8c,
+0x22,
+0x14,
+0xac,
+0x15,
+0x02,
+0xd1,
+0xf5,
+0x28,
+0xf1,
+0xf7,
+0x34,
+0x76,
+0x89,
+0x02,
+0xd5,
+0x71,
+0x41,
+0xbf,
+0x22,
+0x13,
+0xb6,
+0x2d,
+0xa9,
+0x55,
+0xf8,
+0x5d,
+0x86,
+0xf1,
+0x80,
+0xae,
+0xa1,
+0xa0,
+0x82,
+0xaf,
+0x89,
+0x67,
+0xcc,
+0xf7,
+0xc3,
+0x5b,
+0x67,
+0x7c,
+0x7a,
+0x53,
+0xa7,
+0x8a,
+0xcd,
+0x21,
+0x75,
+0x07,
+0x1f,
+0xa5,
+0xbd,
+0x0a,
+0x0a,
+0xcc,
+0xc0,
+0x6b,
+0x22,
+0xc7,
+0x53,
+0xbc,
+0xbf,
+0x7e,
+0xaf,
+0x89,
+0x52,
+0x72,
+0x11,
+0xd1,
+0x59,
+0x8b,
+0x6d,
+0xbd,
+0xd5,
+0x01,
+0xeb,
+0x75,
+0x5b,
+0x37,
+0x03,
+0x43,
+0x3f,
+0x84,
+0x8d,
+0x54,
+0x18,
+0x53,
+0x22,
+0x4c,
+0x85,
+0xfc,
+0x2b,
+0x70,
+0x4e,
+0xd9,
+0x78,
+0xcd,
+0xb0,
+0xa1,
+0x16,
+0x0f,
+0x08,
+0xbd,
+0x65,
+0xd0,
+0x92,
+0x61,
+0x62,
+0x69,
+0x1e,
+0xbb,
+0xf0,
+0xa5,
+0x7a,
+0x9c,
+0x1b,
+0x7a,
+0x68,
+0xa9,
+0xe8,
+0x0a,
+0x17,
+0x9d,
+0x89,
+0x3f,
+0x48,
+0x25,
+0xd6,
+0xe7,
+0xb8,
+0xb9,
+0x79,
+0x2f,
+0x53,
+0x42,
+0x12,
+0xf4,
+0xc6,
+0x83,
+0x8d,
+0x25,
+0xf1,
+0x43,
+0x9d,
+0x33,
+0x94,
+0x99,
+0xde,
+0x49,
+0x21,
+0x93,
+0xfc,
+0x21,
+0xf0,
+0x49,
+0x5d,
+0x0e,
+0x2f,
+0x76,
+0xaf,
+0x18,
+0xa3,
+0xd1,
+0x70,
+0xdb,
+0x9c,
+0x35,
+0x5c,
+0x87,
+0x42,
+0x76,
+0x80,
+0x4e,
+0xd2,
+0x8d,
+0x71,
+0x98,
+0x78,
+0xeb,
+0x7d,
+0xfa,
+0x39,
+0x83,
+0xd2,
+0x4e,
+0xfe,
+0xde,
+0xc4,
+0x8b,
+0xef,
+0x5f,
+0xce,
+0xf0,
+0x80,
+0xdf,
+0x18,
+0x3c,
+0xe2,
+0xb7,
+0xdc,
+0xb0,
+0xf1,
+0xc5,
+0x42,
+0xa7,
+0x2c,
+0x84,
+0x9e,
+0x4c,
+0xdd,
+0x8c,
+0x9c,
+0x4a,
+0xda,
+0xf1,
+0xcf,
+0x18,
+0xc1,
+0xb6,
+0x6d,
+0x40,
+0x57,
+0x3e,
+0x26,
+0x44,
+0xc7,
+0xe7,
+0xda,
+0x9c,
+0x0e,
+0x3d,
+0x80,
+0x05,
+0xf8,
+0x07,
+0x5f,
+0xfc,
+0x72,
+0x9b,
+0x50,
+0xe5,
+0x79,
+0xaa,
+0xf3,
+0xd0,
+0x7a,
+0x0e,
+0xb2,
+0xd8,
+0xb5,
+0x82,
+0x5a,
+0x04,
+0x00,
+0x8c,
+0xd4,
+0xb2,
+0x51,
+0xc0,
+0xb8,
+0xec,
+0xa5,
+0x90,
+0x21,
+0xc3,
+0x1e,
+0x17,
+0x9b,
+0x19,
+0x26,
+0xe9,
+0x2a,
+0x21,
+0x75,
+0xe3,
+0xa6,
+0xd7,
+0xd0,
+0x5c,
+0xb6,
+0x36,
+0x8f,
+0x51,
+0x45,
+0xe4,
+0x85,
+0x5f,
+0xbf,
+0xee,
+0xc4,
+0x13,
+0x38,
+0xf0,
+0x89,
+0x1d,
+0x61,
+0xfa,
+0x01,
+0x9e,
+0xa6,
+0xda,
+0xd4,
+0x7b,
+0xa5,
+0xa3,
+0x1a,
+0x44,
+0x1e,
+0xa7,
+0xca,
+0x14,
+0xb1,
+0xc2,
+0xd0,
+0x35,
+0x03,
+0xca,
+0xf8,
+0x18,
+0x04,
+0x24,
+0xae,
+0xb1,
+0xc2,
+0xc2,
+0x98,
+0x3a,
+0xd6,
+0xdf,
+0xfb,
+0x3c,
+0x0d,
+0x72,
+0xdb,
+0x85,
+0x81,
+0x4c,
+0x6f,
+0xe5,
+0x91,
+0x20,
+0xa1,
+0x99,
+0xb7,
+0x07,
+0xde,
+0x7c,
+0x37,
+0x0a,
+0x18,
+0x1d,
+0x90,
+0xa7,
+0x88,
+0x7b,
+0x15,
+0xdc,
+0x77,
+0x86,
+0xb2,
+0xd9,
+0x90,
+0xe9,
+0x5c,
+0x58,
+0x51,
+0x33,
+0x06,
+0x95,
+0xad,
+0xbf,
+0xdf,
+0xc7,
+0x4d,
+0xcb,
+0xec,
+0x9f,
+0x6d,
+0x00,
+0xfa,
+0x8f,
+0x38,
+0x4c,
+0x56,
+0x7e,
+0x1a,
+0x09,
+0x16,
+0xd6,
+0x2d,
+0x4d,
+0x50,
+0xf5,
+0x54,
+0x12,
+0x8c,
+0x64,
+0x25,
+0x07,
+0xa7,
+0xe2,
+0xeb,
+0x48,
+0xbd,
+0x50,
+0x84,
+0x8e,
+0x90,
+0xb6,
+0x43,
+0x00,
+0x87,
+0x63,
+0x78,
+0x73,
+0xd1,
+0xd5,
+0xf1,
+0x80,
+0xd8,
+0x44,
+0xbe,
+0x8e,
+0x45,
+0xd6,
+0xec,
+0xbc,
+0xc5,
+0xab,
+0x97,
+0x69,
+0x38,
+0xaa,
+0x23,
+0x63,
+0x76,
+0xaa,
+0x13,
+0x7d,
+0xa3,
+0x82,
+0x83,
+0x81,
+0xdf,
+0x53,
+0x2e,
+0x04,
+0x69,
+0x0f,
+0x6f,
+0x41,
+0x1d,
+0x46,
+0x96,
+0x4d,
+0x5b,
+0x27,
+0xc9,
+0x7b,
+0x56,
+0x8d,
+0x86,
+0x46,
+0xd5,
+0x74,
+0xaa,
+0x16,
+0x2d,
+0x6d,
+0x1a,
+0xf6,
+0xcf,
+0x57,
+0x7c,
+0xca,
+0x3a,
+0x98,
+0x70,
+0x61,
+0xa5,
+0x74,
+0x6b,
+0x06,
+0x44,
+0x96,
+0xcf,
+0x46,
+0x20,
+0x9a,
+0x39,
+0xcb,
+0xf0,
+0x84,
+0x50,
+0x93,
+0xf0,
+0xce,
+0x64,
+0xe3,
+0xaf,
+0xdc,
+0x1b,
+0x21,
+0x5f,
+0xce,
+0xed,
+0xb6,
+0x85,
+0xd4,
+0x5c,
+0x52,
+0x71,
+0x8c,
+0x05,
+0xe0,
+0x14,
+0x76,
+0xa1,
+0x6e,
+0xdc,
+0x63,
+0x1c,
+0xf7,
+0xc1,
+0x38,
+0x29,
+0xf3,
+0x3e,
+0xd2,
+0xb1,
+0xb4,
+0xc7,
+0xd5,
+0x8f,
+0x63,
+0xbc,
+0x25,
+0xe2,
+0x59,
+0xb8,
+0xf1,
+0x51,
+0x10,
+0x3b,
+0xec,
+0x49,
+0x3a,
+0xfc,
+0x4a,
+0x29,
+0x7e,
+0x1d,
+0xa4,
+0xc4,
+0xa3,
+0xc1,
+0x51,
+0x90,
+0x0e,
+0x10,
+0x94,
+0x1b,
+0x60,
+0xdd,
+0xd0,
+0x89,
+0xf9,
+0x76,
+0xa6,
+0x1a,
+0x7b,
+0xba,
+0x90,
+0x85,
+0x35,
+0xea,
+0xf9,
+0xca,
+0x53,
+0xd5,
+0xa1,
+0x87,
+0x95,
+0x52,
+0xc2,
+0xc2,
+0xa8,
+0xc8,
+0xb8,
+0xe7,
+0x05,
+0xbf,
+0x19,
+0xb0,
+0x46,
+0xe8,
+0x44,
+0x77,
+0x80,
+0x8f,
+0xe0,
+0xee,
+0xfd,
+0x5b,
+0xe2,
+0x74,
+0xed,
+0x32,
+0xab,
+0x0b,
+0x54,
+0xa7,
+0x48,
+0x8e,
+0xc6,
+0xa0,
+0x09,
+0xf1,
+0x62,
+0x1b,
+0xd1,
+0x30,
+0xa1,
+0x9b,
+0x3e,
+0x3d,
+0x4b,
+0xd0,
+0x34,
+0xb7,
+0x7f,
+0x51,
+0x83,
+0x14,
+0xa7,
+0x36,
+0xdd,
+0xbc,
+0x24,
+0x74,
+0x8d,
+0x92,
+0xd6,
+0x3b,
+0x99,
+0xec,
+0x71,
+0x59,
+0xa5,
+0xa7,
+0x72,
+0x05,
+0x83,
+0x83,
+0xb8,
+0x88,
+0x33,
+0xba,
+0x7c,
+0x51,
+0x2c,
+0x4f,
+0x20,
+0x33,
+0xff,
+0x6a,
+0x5e,
+0x24,
+0x9d,
+0x93,
+0x66,
+0xc2,
+0x0e,
+0x72,
+0x5f,
+0xdb,
+0x50,
+0x32,
+0x00,
+0x84,
+0x9f,
+0x96,
+0x86,
+0xa7,
+0x71,
+0x62,
+0x55,
+0x78,
+0x36,
+0x56,
+0x2d,
+0x94,
+0x48,
+0x46,
+0xc2,
+0x76,
+0xaf,
+0x4b,
+0x2a,
+0x0a,
+0xb6,
+0x18,
+0x0e,
+0xf6,
+0xa6,
+0xa8,
+0xb2,
+0x94,
+0x9a,
+0x39,
+0xfd,
+0xfa,
+0x9a,
+0x6a,
+0x19,
+0x83,
+0x1e,
+0x78,
+0x85,
+0x59,
+0x6b,
+0xdf,
+0xf4,
+0x93,
+0x44,
+0x2e,
+0x01,
+0x61,
+0xe9,
+0x98,
+0xa6,
+0x28,
+0xc9,
+0x66,
+0x9e,
+0x1d,
+0xb2,
+0xe2,
+0x44,
+0x16,
+0xdc,
+0x86,
+0xca,
+0xf0,
+0x03,
+0x2e,
+0xd1,
+0x5d,
+0x06,
+0x30,
+0xa3,
+0x27,
+0xc2,
+0x84,
+0x42,
+0x70,
+0x25,
+0x0f,
+0xd2,
+0x4e,
+0x02,
+0x90,
+0x88,
+0xe6,
+0x90,
+0x83,
+0xac,
+0x42,
+0x00,
+0x61,
+0x05,
+0x1e,
+0x46,
+0xfa,
+0xae,
+0x91,
+0xd9,
+0xe8,
+0xa3,
+0x28,
+0xfb,
+0x7c,
+0xd6,
+0x38,
+0x77,
+0x9c,
+0xfc,
+0xbd,
+0xb4,
+0x74,
+0x07,
+0x7c,
+0x60,
+0xa5,
+0xf2,
+0xe8,
+0xc7,
+0x83,
+0xfa,
+0x0f,
+0x47,
+0xf8,
+0x63,
+0xe7,
+0x3e,
+0x95,
+0x34,
+0x16,
+0xce,
+0x24,
+0x93,
+0x0e,
+0xd4,
+0x14,
+0xe7,
+0x01,
+0x48,
+0xeb,
+0x7d,
+0xfe,
+0x6f,
+0x20,
+0xcd,
+0x42,
+0x79,
+0xb4,
+0x0b,
+0xa0,
+0x6e,
+0xe7,
+0x5b,
+0x68,
+0xba,
+0x21,
+0x56,
+0x65,
+0x3a,
+0x51,
+0xa2,
+0xec,
+0x3b,
+0xb1,
+0xec,
+0x61,
+0xf8,
+0x70,
+0x65,
+0x5c,
+0x9b,
+0xf6,
+0xd4,
+0xb1,
+0xe0,
+0xd4,
+0x73,
+0x92,
+0x54,
+0x6f,
+0x6f,
+0xf8,
+0x17,
+0x24,
+0x10,
+0x82,
+0xba,
+0x2e,
+0x95,
+0xbd,
+0x69,
+0x9f,
+0xb3,
+0xb0,
+0xf0,
+0x57,
+0x15,
+0x8c,
+0x2f,
+0x44,
+0x4e,
+0x83,
+0xc9,
+0xf3,
+0xa1,
+0xc9,
+0x39,
+0xe8,
+0x3c,
+0xb0,
+0xa7,
+0x51,
+0x69,
+0xce,
+0x4b,
+0xb2,
+0x70,
+0x3e,
+0x8e,
+0xcf,
+0x3e,
+0x3a,
+0x95,
+0x5e,
+0x18,
+0x43,
+0xc9,
+0xde,
+0x4e,
+0x47,
+0xbb,
+0x6e,
+0x0c,
+0x83,
+0x3b,
+0xaf,
+0x58,
+0x67,
+0x06,
+0xd6,
+0x52,
+0xd5,
+0x89,
+0xb7,
+0x1c,
+0xb9,
+0xd9,
+0xa3,
+0x95,
+0x81,
+0x92,
+0x8b,
+0x32,
+0x43,
+0xb9,
+0xf8,
+0x99,
+0x2e,
+0x70,
+0xc9,
+0x1e,
+0x9a,
+0x3a,
+0xaa,
+0x97,
+0xd8,
+0xcc,
+0x2f,
+0xd2,
+0x69,
+0xdc,
+0x69,
+0xab,
+0x63,
+0xc0,
+0x5f,
+0xd5,
+0xb6,
+0xb8,
+0x8b,
+0x8d,
+0x6c,
+0x15,
+0x56,
+0x0a,
+0xe6,
+0x92,
+0xb5,
+0x25,
+0x4b,
+0x24,
+0x1c,
+0x63,
+0x5f,
+0x0c,
+0x1d,
+0x36,
+0x6e,
+0x7a,
+0xc0,
+0x5b,
+0xdb,
+0xa1,
+0xf8,
+0x16,
+0x29,
+0x04,
+0x2f,
+0x2b,
+0xb8,
+0x11,
+0xf9,
+0xef,
+0x1a,
+0x50,
+0x0c,
+0x97,
+0x19,
+0x20,
+0xbc,
+0xe9,
+0x40,
+0xd1,
+0x0b,
+0x74,
+0xec,
+0xa0,
+0xd5,
+0x18,
+0x6b,
+0xc8,
+0x6e,
+0xb1,
+0x65,
+0xd7,
+0x5f,
+0xf3,
+0x7c,
+0x33,
+0x89,
+0xca,
+0x15,
+0xd1,
+0xa8,
+0x7f,
+0x73,
+0xe0,
+0xa2,
+0x72,
+0x27,
+0x6d,
+0x79,
+0xa5,
+0xec,
+0x36,
+0x4e,
+0x47,
+0xd1,
+0x52,
+0xe4,
+0x0f,
+0x3b,
+0x9a,
+0xb5,
+0xef,
+0x97,
+0x0f,
+0xc5,
+0x9c,
+0x7a,
+0x51,
+0xbe,
+0x23,
+0x0f,
+0x15,
+0x87,
+0xd0,
+0xa5,
+0xf6,
+0x12,
+0x81,
+0xdd,
+0x44,
+0xd9,
+0xf4,
+0xcc,
+0xda,
+0x61,
+0x5e,
+0x66,
+0xa4,
+0xf1,
+0x7c,
+0xd7,
+0xd3,
+0xac,
+0xf0,
+0x57,
+0xd0,
+0x53,
+0xeb,
+0x19,
+0xbd,
+0x9d,
+0xb4,
+0xcb,
+0x9e,
+0x61,
+0x1e,
+0xe2,
+0x0e,
+0xdb,
+0x6d,
+0x40,
+0xaa,
+0xe8,
+0xc8,
+0x91,
+0xec,
+0xca,
+0xb0,
+0x0f,
+0xf1,
+0x41,
+0x71,
+0x43,
+0x25,
+0x71,
+0xf5,
+0xab,
+0x93,
+0x03,
+0xa7,
+0x64,
+0xdb,
+0xb4,
+0xde,
+0x11,
+0x4f,
+0x08,
+0xe9,
+0xb2,
+0x6d
+};
+
+/*----------------------------------------------------------------------------------------
+ * P R O T O T Y P E S O F L O C A L F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * E X P O R T E D F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
diff --git a/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/F14MicrocodePatch0500000B_Unenc.c b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/F14MicrocodePatch0500000B_Unenc.c
new file mode 100644
index 0000000000..463477f03c
--- /dev/null
+++ b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/F14MicrocodePatch0500000B_Unenc.c
@@ -0,0 +1,1461 @@
+/* $NoKeywords:$ */
+/**
+ * @file
+ *
+ * AMD Family_14 Microcode patch.
+ *
+ * Fam14 Microcode Patch rev 0500000B for 5800 or equivalent.
+ *
+ * @xrefitem bom "File Content Label" "Release Content"
+ * @e project: AGESA
+ * @e sub-project: CPU/FAMILY/0x14
+ * @e \$Revision: 34897 $ @e \$Date: 2010-07-14 10:07:10 +0800 (Wed, 14 Jul 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.
+ *
+ * ***************************************************************************
+ *
+ */
+/*----------------------------------------------------------------------------------------
+ * M O D U L E S U S E D
+ *----------------------------------------------------------------------------------------
+ */
+#include "AGESA.h"
+#include "cpuRegisters.h"
+#include "cpuEarlyInit.h"
+
+/*----------------------------------------------------------------------------------------
+ * D E F I N I T I O N S A N D M A C R O S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * T Y P E D E F S A N D S T R U C T U R E S
+ *----------------------------------------------------------------------------------------
+ */
+
+// Patch code 0500000B for 5800 and equivalent
+CONST MICROCODE_PATCHES ROMDATA CpuF14MicrocodePatch0500000B_Unenc =
+{
+0x10,
+0x20,
+0x01,
+0x06,
+0x0b,
+0x00,
+0x00,
+0x05,
+0x01,
+0x80,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x58,
+0x00,
+0x00,
+0x00,
+0xaa,
+0xaa,
+0xaa,
+0x92,
+0x5d,
+0x61,
+0xc8,
+0x0d,
+0xcf,
+0xa5,
+0xe3,
+0x00,
+0x00,
+0x00,
+0x00,
+0x0b,
+0x00,
+0x00,
+0x05,
+0x56,
+0x19,
+0x47,
+0x10,
+0xde,
+0x06,
+0xcf,
+0x01,
+0xaf,
+0x0f,
+0xee,
+0x06,
+0xac,
+0x17,
+0xd9,
+0x06,
+0x80,
+0x17,
+0xc0,
+0x0b,
+0xf0,
+0x0c,
+0xf0,
+0x0c,
+0xae,
+0x38,
+0x00,
+0x80,
+0x00,
+0x00,
+0x00,
+0x00,
+0xff,
+0x38,
+0x00,
+0x80,
+0x00,
+0x18,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0xff,
+0x01,
+0x7f,
+0xc0,
+0xc1,
+0xdf,
+0x0a,
+0xe0,
+0xfd,
+0xff,
+0xff,
+0x2c,
+0xe0,
+0x9f,
+0x6b,
+0xf1,
+0xe5,
+0xbf,
+0x02,
+0x00,
+0xf0,
+0x58,
+0x39,
+0x00,
+0xa0,
+0x1f,
+0xc0,
+0xe7,
+0xf0,
+0x5c,
+0x39,
+0x00,
+0xa0,
+0x1f,
+0xc0,
+0xe7,
+0xfd,
+0xbf,
+0x07,
+0x00,
+0xb7,
+0xfe,
+0xff,
+0x9f,
+0xe1,
+0x1f,
+0xe0,
+0xe7,
+0xff,
+0xdf,
+0xff,
+0x25,
+0xe1,
+0x5f,
+0xa9,
+0xff,
+0x21,
+0xa0,
+0x06,
+0x00,
+0x7b,
+0x92,
+0x7f,
+0x2a,
+0xe1,
+0x1f,
+0xe0,
+0xe7,
+0xfe,
+0x92,
+0x7f,
+0x2b,
+0xe0,
+0x1f,
+0xe0,
+0xe7,
+0xb6,
+0x4f,
+0x01,
+0x00,
+0xb7,
+0xfe,
+0xff,
+0x9f,
+0xe1,
+0x1f,
+0xe0,
+0xe7,
+0xff,
+0xdf,
+0xff,
+0x25,
+0xe1,
+0x5f,
+0xa9,
+0xff,
+0x1e,
+0xa0,
+0x06,
+0x00,
+0x7b,
+0x92,
+0x7f,
+0x2a,
+0xe1,
+0x1f,
+0xe0,
+0xe7,
+0x80,
+0x92,
+0x7f,
+0x2b,
+0xe0,
+0x1f,
+0xe0,
+0xe7,
+0xb6,
+0x4f,
+0x01,
+0x00,
+0xfe,
+0xff,
+0xff,
+0x2c,
+0xe1,
+0x1b,
+0xab,
+0xfe,
+0xf4,
+0x1d,
+0xfe,
+0x00,
+0xe1,
+0xd7,
+0xc3,
+0xd6,
+0x2e,
+0xbe,
+0x06,
+0x00,
+0xfe,
+0x92,
+0x7f,
+0x2e,
+0xe0,
+0x9f,
+0xab,
+0xfe,
+0xff,
+0x55,
+0x74,
+0x40,
+0xdb,
+0x9f,
+0x1b,
+0xe0,
+0x39,
+0xa0,
+0x06,
+0x00,
+0x6f,
+0x5e,
+0x39,
+0x00,
+0xc0,
+0x1f,
+0xd0,
+0xeb,
+0xff,
+0xff,
+0xff,
+0x00,
+0xe1,
+0xdd,
+0x0b,
+0xf9,
+0x37,
+0xa0,
+0x06,
+0x00,
+0xe5,
+0xff,
+0xff,
+0x00,
+0xe1,
+0xcf,
+0x43,
+0xd7,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0x9f,
+0x59,
+0x39,
+0x00,
+0xa0,
+0x1f,
+0xc0,
+0xe7,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xb7,
+0xbf,
+0x06,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0x16,
+0xe0,
+0xff,
+0x9f,
+0xe1,
+0x1f,
+0xe0,
+0xe7,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0x19,
+0xa0,
+0x06,
+0x00,
+0xf7,
+0x55,
+0x39,
+0x00,
+0xa0,
+0x1f,
+0xc0,
+0xe7,
+0xff,
+0x81,
+0x7f,
+0x26,
+0xe0,
+0xdf,
+0xe2,
+0xeb,
+0xff,
+0xbf,
+0x07,
+0x00,
+0x43,
+0xde,
+0x38,
+0x00,
+0xc0,
+0x1f,
+0xd0,
+0xeb,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x7f,
+0x07,
+0x00,
+0xff,
+0x81,
+0x6f,
+0x00,
+0xe0,
+0xdf,
+0x8b,
+0xed,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0xd9,
+0x7f,
+0xc0,
+0xe0,
+0x1b,
+0x8e,
+0xfe,
+0xe5,
+0xff,
+0xff,
+0x00,
+0xe1,
+0xd7,
+0xc3,
+0xd6,
+0x7d,
+0xa8,
+0x06,
+0x00,
+0xff,
+0xd9,
+0x7f,
+0xf8,
+0xe0,
+0x1f,
+0xee,
+0xe7,
+0xff,
+0xd3,
+0x7f,
+0xf9,
+0xe0,
+0x5f,
+0xee,
+0xe7,
+0x7c,
+0xa8,
+0x06,
+0x00,
+0xfe,
+0xff,
+0xff,
+0x00,
+0xe1,
+0x9d,
+0x0b,
+0xf9,
+0xe4,
+0xff,
+0xff,
+0x00,
+0xe1,
+0xcf,
+0x03,
+0xd7,
+0x12,
+0xa0,
+0x06,
+0x00,
+0x9f,
+0x5f,
+0x39,
+0x00,
+0xc0,
+0x1f,
+0xd0,
+0xeb,
+0xff,
+0xff,
+0xff,
+0x00,
+0xe1,
+0xdd,
+0x0b,
+0xf9,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xdf,
+0xff,
+0xff,
+0x2f,
+0xe1,
+0x1f,
+0xe0,
+0xe7,
+0xf7,
+0x5f,
+0x39,
+0x00,
+0xa0,
+0x1f,
+0xc0,
+0xe7,
+0x19,
+0xad,
+0x06,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0x9b,
+0xff,
+0x01,
+0x53,
+0xd5,
+0xb1,
+0x9f,
+0xc5,
+0xe7,
+0xfd,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0x4e,
+0xb3,
+0x06,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0x9b,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0x20,
+0x20,
+0x01,
+0x00,
+0xff,
+0x5f,
+0x74,
+0x6d,
+0xd1,
+0x9f,
+0x1b,
+0xe0,
+0xfe,
+0xde,
+0x6f,
+0x40,
+0xbf,
+0x9f,
+0xfb,
+0xab,
+0x20,
+0x20,
+0x01,
+0x00,
+0xff,
+0xdd,
+0x7f,
+0xed,
+0xe0,
+0x5f,
+0xeb,
+0xff,
+0xff,
+0xdb,
+0x7f,
+0xf9,
+0xe0,
+0x5f,
+0xee,
+0xe7,
+0x55,
+0x5e,
+0x06,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0x9b,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0x1d,
+0x20,
+0x01,
+0x00,
+0xff,
+0x5f,
+0x74,
+0x6d,
+0xd1,
+0x9f,
+0x1b,
+0xe0,
+0x80,
+0xde,
+0x6f,
+0x40,
+0xbf,
+0x9f,
+0xfb,
+0xab,
+0x1d,
+0x20,
+0x01,
+0x00,
+0xff,
+0xdb,
+0x7f,
+0xed,
+0xe0,
+0x9f,
+0xeb,
+0xff,
+0xff,
+0xdb,
+0x7f,
+0xf9,
+0xe0,
+0x5f,
+0xee,
+0xe7,
+0x86,
+0x5e,
+0x06,
+0x00,
+0x6b,
+0xdd,
+0x38,
+0x00,
+0xc0,
+0x1f,
+0xd0,
+0xeb,
+0xfe,
+0xff,
+0xff,
+0x2c,
+0xe0,
+0x9f,
+0x6b,
+0xf1,
+0x4e,
+0xb0,
+0x06,
+0x00,
+0xcc,
+0xff,
+0xff,
+0x2d,
+0xe1,
+0x1f,
+0xe0,
+0xac,
+0xff,
+0xdb,
+0x7f,
+0x2c,
+0xe0,
+0x1f,
+0x6b,
+0xf1,
+0x4d,
+0xb0,
+0x06,
+0x00,
+0xff,
+0xff,
+0xff,
+0x00,
+0xe1,
+0xd7,
+0x83,
+0xd6,
+0xff,
+0xdd,
+0x7f,
+0x26,
+0xe1,
+0x9f,
+0xe9,
+0xff,
+0xfd,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x73,
+0xc0,
+0xa1,
+0x9f,
+0xc9,
+0xe7,
+0xbf,
+0x81,
+0x33,
+0xc0,
+0xa1,
+0x9f,
+0xc9,
+0xe7,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x01,
+0x73,
+0xc0,
+0xa1,
+0x9f,
+0xc9,
+0xe7,
+0xbf,
+0x01,
+0x33,
+0xc0,
+0xa1,
+0x9f,
+0xc9,
+0xe7,
+0xfd,
+0xbf,
+0x07,
+0x00,
+0xc5,
+0xfe,
+0xff,
+0x9f,
+0xe1,
+0x1f,
+0xe0,
+0xe7,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0x91,
+0xa7,
+0x06,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0x8f,
+0xae,
+0x06,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0xdb,
+0x89,
+0xfe,
+0x49,
+0x1a,
+0xfe,
+0x00,
+0xe1,
+0xd7,
+0x83,
+0xd6,
+0xaa,
+0xaf,
+0x06,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xa9,
+0xaf,
+0x06,
+0x00,
+0xa5,
+0x1f,
+0xfe,
+0x00,
+0xe1,
+0xcf,
+0x43,
+0xd7,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0xff,
+0xbf,
+0x2a,
+0xe0,
+0x1f,
+0x6b,
+0xf1,
+0xff,
+0xff,
+0xff,
+0xff,
+0xbf,
+0xff,
+0xcf,
+0xbf,
+0xf9,
+0xa7,
+0x06,
+0x00,
+0xfd,
+0xff,
+0xff,
+0x2b,
+0xe1,
+0x9f,
+0xeb,
+0xfa,
+0xff,
+0x55,
+0x79,
+0x2e,
+0xa0,
+0x5f,
+0xcb,
+0xe7,
+0xf8,
+0xa7,
+0x06,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00
+};
+
+/*----------------------------------------------------------------------------------------
+ * P R O T O T Y P E S O F L O C A L F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * E X P O R T E D F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
diff --git a/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/F14MicrocodePatch0500001A.c b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/F14MicrocodePatch0500001A.c
new file mode 100644
index 0000000000..5bde1d9ff5
--- /dev/null
+++ b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/F14MicrocodePatch0500001A.c
@@ -0,0 +1,1645 @@
+/* $NoKeywords:$ */
+/**
+ * @file
+ *
+ * AMD Family_14 Microcode patch.
+ *
+ * Fam14 Microcode Patch rev 0500001A for 5001 or equivalent.
+ *
+ * @xrefitem bom "File Content Label" "Release Content"
+ * @e project: AGESA
+ * @e sub-project: CPU/FAMILY/0x14
+ * @e \$Revision: 37850 $ @e \$Date: 2010-09-13 18:09:57 -0400 (Mon, 13 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.
+ *
+ * ***************************************************************************
+ *
+ */
+/*----------------------------------------------------------------------------------------
+ * M O D U L E S U S E D
+ *----------------------------------------------------------------------------------------
+ */
+#include "AGESA.h"
+#include "cpuRegisters.h"
+#include "cpuEarlyInit.h"
+
+/*----------------------------------------------------------------------------------------
+ * D E F I N I T I O N S A N D M A C R O S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * T Y P E D E F S A N D S T R U C T U R E S
+ *----------------------------------------------------------------------------------------
+ */
+
+// Patch code 0500001A for 5001 and equivalent
+CONST MICROCODE_PATCHES ROMDATA CpuF14MicrocodePatch0500001A =
+{
+0x10,
+0x20,
+0x08,
+0x09,
+0x1a,
+0x00,
+0x00,
+0x05,
+0x01,
+0x80,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x01,
+0x50,
+0x00,
+0x00,
+0x00,
+0xaa,
+0xaa,
+0xaa,
+0x66,
+0xb4,
+0x7f,
+0x31,
+0x85,
+0x36,
+0x47,
+0xfa,
+0xa2,
+0x3e,
+0x1c,
+0xb4,
+0x9d,
+0xaa,
+0x69,
+0x39,
+0xc4,
+0xc0,
+0xc6,
+0xa7,
+0xaf,
+0x4a,
+0x48,
+0xe1,
+0xe4,
+0xbe,
+0x8a,
+0x91,
+0x15,
+0xfd,
+0x1f,
+0x89,
+0xd9,
+0x17,
+0x1e,
+0xe0,
+0xe5,
+0x8d,
+0xd1,
+0x77,
+0xe1,
+0xd6,
+0xbc,
+0x7b,
+0x85,
+0x18,
+0x61,
+0xc0,
+0x94,
+0xb7,
+0x36,
+0x07,
+0x19,
+0x64,
+0x8f,
+0x10,
+0xda,
+0x1e,
+0xf1,
+0xf3,
+0xe4,
+0xe9,
+0xc6,
+0xbd,
+0x05,
+0xe5,
+0xb2,
+0x5c,
+0x8a,
+0xdb,
+0x35,
+0x84,
+0x68,
+0x07,
+0x15,
+0xa1,
+0xca,
+0xcc,
+0x41,
+0x3a,
+0xef,
+0x18,
+0x02,
+0x72,
+0x71,
+0xff,
+0x65,
+0x6e,
+0x3c,
+0x2d,
+0x2a,
+0xe8,
+0x26,
+0x00,
+0xe1,
+0xf8,
+0x8b,
+0x4c,
+0xe2,
+0xbd,
+0x1b,
+0xc0,
+0x83,
+0x11,
+0xc5,
+0x38,
+0x65,
+0x4d,
+0x65,
+0xb7,
+0x9d,
+0x1f,
+0x5b,
+0x46,
+0x96,
+0x6c,
+0x7b,
+0xc1,
+0x03,
+0x59,
+0x1d,
+0x0f,
+0x6b,
+0x0b,
+0x2c,
+0xfc,
+0x96,
+0x3f,
+0xf8,
+0xc5,
+0x76,
+0xaf,
+0x08,
+0xb0,
+0x60,
+0xc8,
+0xaa,
+0x66,
+0x99,
+0x1f,
+0xb1,
+0x67,
+0x85,
+0x2b,
+0x03,
+0x06,
+0x50,
+0x7c,
+0x22,
+0x7c,
+0xa7,
+0xb4,
+0x04,
+0x58,
+0xcc,
+0xdf,
+0xf1,
+0xdc,
+0x94,
+0x84,
+0x84,
+0x06,
+0xf7,
+0x17,
+0xc9,
+0x02,
+0x75,
+0xd6,
+0x03,
+0xd3,
+0x20,
+0x8c,
+0x23,
+0x5e,
+0xfb,
+0x76,
+0xf3,
+0x74,
+0x6b,
+0x4d,
+0x16,
+0x1a,
+0x66,
+0xb6,
+0xfa,
+0x30,
+0x5f,
+0xea,
+0x82,
+0xf1,
+0x5b,
+0x9d,
+0xb0,
+0xd2,
+0xd6,
+0x2c,
+0xa7,
+0x5f,
+0xb0,
+0x4b,
+0xfa,
+0x27,
+0xff,
+0xd5,
+0x7b,
+0xfa,
+0x8d,
+0x18,
+0xab,
+0x96,
+0xfc,
+0x42,
+0xc4,
+0x5b,
+0x85,
+0xbc,
+0x9b,
+0xf5,
+0x4b,
+0x59,
+0x0d,
+0xc7,
+0x88,
+0xfc,
+0xc0,
+0x6e,
+0xac,
+0xe5,
+0xe2,
+0xa3,
+0x14,
+0x44,
+0xf8,
+0xb2,
+0x8a,
+0xe9,
+0x9d,
+0x75,
+0xe2,
+0xdc,
+0xf1,
+0x3b,
+0x18,
+0xe9,
+0x17,
+0x9a,
+0x59,
+0x55,
+0x28,
+0xf3,
+0x84,
+0xcc,
+0xf2,
+0x08,
+0x6e,
+0xe0,
+0x94,
+0xd9,
+0x88,
+0x3d,
+0x3a,
+0xf0,
+0xa2,
+0xdb,
+0xa2,
+0x58,
+0xbe,
+0x7c,
+0x6e,
+0x26,
+0xd6,
+0x2d,
+0xba,
+0x09,
+0xba,
+0xf8,
+0xba,
+0x28,
+0xf9,
+0xff,
+0x71,
+0xd3,
+0xb4,
+0xd7,
+0x31,
+0x31,
+0xd4,
+0x8d,
+0xcc,
+0x44,
+0xcc,
+0xb8,
+0xed,
+0xc7,
+0x83,
+0x97,
+0x04,
+0x88,
+0x05,
+0xb8,
+0x5b,
+0x27,
+0x6b,
+0xef,
+0xe4,
+0x5d,
+0x03,
+0xac,
+0x95,
+0x05,
+0x17,
+0x79,
+0x0b,
+0xe9,
+0xbe,
+0xaf,
+0x25,
+0x4a,
+0x3b,
+0xf2,
+0x09,
+0xd9,
+0x83,
+0x17,
+0x4f,
+0x95,
+0x11,
+0x17,
+0xf5,
+0xa4,
+0xa6,
+0x3e,
+0xb8,
+0x71,
+0x9e,
+0x38,
+0x86,
+0xc8,
+0x97,
+0x7b,
+0x19,
+0xab,
+0xd5,
+0xec,
+0xc3,
+0x99,
+0xe2,
+0x95,
+0x97,
+0xbd,
+0x93,
+0xd0,
+0x1b,
+0x76,
+0xc4,
+0x86,
+0x14,
+0x58,
+0xbf,
+0x0b,
+0x14,
+0x9d,
+0x04,
+0x64,
+0xa8,
+0xa6,
+0xaf,
+0x69,
+0x3b,
+0xe7,
+0x37,
+0xed,
+0x19,
+0xaf,
+0x28,
+0x2b,
+0xff,
+0x36,
+0xbd,
+0x72,
+0xf1,
+0x2b,
+0x06,
+0x7f,
+0xe9,
+0xae,
+0x5e,
+0xa0,
+0xe3,
+0x0d,
+0x1e,
+0x64,
+0x06,
+0xa8,
+0x24,
+0x99,
+0x2e,
+0x7a,
+0x41,
+0x94,
+0x77,
+0x4a,
+0x17,
+0x93,
+0x04,
+0xd6,
+0x2e,
+0x86,
+0x7a,
+0x24,
+0x05,
+0x87,
+0x18,
+0x17,
+0xb6,
+0xe8,
+0x41,
+0xc2,
+0x33,
+0xec,
+0xb6,
+0x42,
+0xb2,
+0x08,
+0xe5,
+0xf2,
+0x12,
+0x15,
+0x6b,
+0xc9,
+0x55,
+0xd4,
+0xce,
+0xa4,
+0x4e,
+0xa5,
+0x2f,
+0xd2,
+0x3b,
+0xd1,
+0x08,
+0x61,
+0x9f,
+0xe4,
+0x92,
+0x1a,
+0x84,
+0x62,
+0x73,
+0x7d,
+0x87,
+0xb2,
+0x4b,
+0x3d,
+0x07,
+0x1c,
+0xad,
+0x13,
+0x9f,
+0xd6,
+0xa5,
+0x80,
+0x90,
+0x95,
+0x09,
+0xf0,
+0x45,
+0x04,
+0x13,
+0xd0,
+0x06,
+0xc2,
+0x24,
+0xd4,
+0x0b,
+0x39,
+0xe7,
+0x7b,
+0xd7,
+0xda,
+0x7b,
+0x88,
+0xe7,
+0xcf,
+0x53,
+0xac,
+0x38,
+0x11,
+0x2e,
+0x01,
+0x94,
+0x69,
+0x5a,
+0x04,
+0xb4,
+0xf5,
+0x1f,
+0x7c,
+0x44,
+0x7a,
+0x3e,
+0x73,
+0x8c,
+0x38,
+0xcf,
+0xf2,
+0xd3,
+0xf6,
+0x3f,
+0x5a,
+0x76,
+0xd3,
+0x5b,
+0x2e,
+0x9f,
+0xb3,
+0xe7,
+0x93,
+0x11,
+0x05,
+0x55,
+0x14,
+0x8d,
+0xc1,
+0x6e,
+0x36,
+0x6e,
+0xa3,
+0xa0,
+0x0b,
+0xe1,
+0x48,
+0x7f,
+0x48,
+0x80,
+0x21,
+0x59,
+0x00,
+0x86,
+0xd9,
+0x1a,
+0x99,
+0x9e,
+0xf6,
+0x4d,
+0xa0,
+0xd7,
+0xbe,
+0xb0,
+0x2b,
+0x13,
+0x5d,
+0x5b,
+0xf3,
+0x01,
+0x7d,
+0xbc,
+0x46,
+0x99,
+0xd9,
+0xb4,
+0xdb,
+0xc8,
+0xd1,
+0x21,
+0x94,
+0x91,
+0xdc,
+0x7a,
+0x85,
+0xaf,
+0x74,
+0x9e,
+0x0b,
+0x18,
+0x05,
+0xfd,
+0xba,
+0xac,
+0x7a,
+0xea,
+0xa9,
+0x6e,
+0x07,
+0x32,
+0xf8,
+0x1d,
+0x0d,
+0x7b,
+0x18,
+0x6f,
+0x13,
+0x89,
+0x4c,
+0xb3,
+0x50,
+0x5d,
+0x8c,
+0x81,
+0xd5,
+0x2a,
+0x6f,
+0xf3,
+0xa4,
+0x93,
+0x7c,
+0x16,
+0xfd,
+0x25,
+0xf8,
+0x83,
+0xc7,
+0xd0,
+0x21,
+0xf9,
+0x51,
+0xc5,
+0xbb,
+0x6a,
+0x42,
+0xe6,
+0xfd,
+0x05,
+0x7e,
+0xa0,
+0x37,
+0x93,
+0x55,
+0x98,
+0x8b,
+0x30,
+0xbd,
+0x62,
+0x33,
+0x91,
+0xe3,
+0x44,
+0xd6,
+0xc5,
+0xa4,
+0x17,
+0x2d,
+0x70,
+0x97,
+0xaa,
+0x02,
+0xc3,
+0xa4,
+0x09,
+0x6f,
+0x7f,
+0x00,
+0xcf,
+0xae,
+0x5f,
+0x25,
+0xf5,
+0x5e,
+0xca,
+0x7b,
+0x7c,
+0x61,
+0x07,
+0x1c,
+0xd9,
+0x49,
+0xa5,
+0x9d,
+0x42,
+0xe4,
+0x74,
+0x93,
+0xe1,
+0x3f,
+0x8f,
+0xc0,
+0xa1,
+0x32,
+0x1a,
+0x83,
+0x06,
+0x3a,
+0x1b,
+0xb2,
+0x25,
+0x69,
+0xec,
+0x20,
+0xd5,
+0x9b,
+0x7a,
+0x9f,
+0x34,
+0xb0,
+0x27,
+0x23,
+0x20,
+0xa0,
+0x31,
+0xc1,
+0x24,
+0xd2,
+0x8e,
+0x34,
+0x1f,
+0x7c,
+0xd8,
+0xc7,
+0x75,
+0xb1,
+0x4c,
+0xe8,
+0x87,
+0x98,
+0xe1,
+0xbb,
+0x94,
+0x55,
+0xc3,
+0x63,
+0x25,
+0x1a,
+0xc8,
+0xae,
+0x0b,
+0xf4,
+0xd9,
+0xb9,
+0xe3,
+0xdc,
+0x5e,
+0x9a,
+0xb1,
+0x98,
+0x89,
+0x4c,
+0x2a,
+0x09,
+0x0e,
+0xfa,
+0x98,
+0x21,
+0x87,
+0xf3,
+0x58,
+0xe0,
+0xa9,
+0x8a,
+0xda,
+0xf5,
+0xc7,
+0x0b,
+0x70,
+0xa5,
+0x69,
+0x0c,
+0xe5,
+0x38,
+0x98,
+0x22,
+0xac,
+0x05,
+0xe4,
+0x45,
+0x56,
+0x77,
+0xa5,
+0xfe,
+0x34,
+0x5b,
+0xb9,
+0x45,
+0x58,
+0x1d,
+0x95,
+0xd2,
+0x62,
+0x60,
+0x86,
+0x88,
+0x19,
+0x03,
+0x2c,
+0xee,
+0xd6,
+0xc4,
+0x32,
+0x41,
+0x5d,
+0xa5,
+0x0b,
+0x71,
+0xfb,
+0x8c,
+0x6c,
+0xb0,
+0xdc,
+0x61,
+0x67,
+0x3d,
+0xfb,
+0xb1,
+0xec,
+0xf1,
+0x95,
+0xfc,
+0x5d,
+0x18,
+0x93,
+0x76,
+0xca,
+0x55,
+0x2c,
+0xdc,
+0x8c,
+0x87,
+0xf1,
+0x00,
+0x84,
+0xa6,
+0x55,
+0x91,
+0xab,
+0xf9,
+0x24,
+0xa5,
+0x27,
+0x55,
+0xfb,
+0xd4,
+0xb4,
+0xfd,
+0xac,
+0xc9,
+0xfe,
+0xdb,
+0xeb,
+0xcc,
+0x6f,
+0xd4,
+0x92,
+0x8a,
+0xa9,
+0x26,
+0x07,
+0xfb,
+0x4f,
+0x53,
+0x3d,
+0x89,
+0xa8,
+0x4c,
+0x94,
+0x7a,
+0xce,
+0xec,
+0xd5,
+0x4b,
+0xef,
+0x65,
+0xab,
+0x65,
+0xc0,
+0x3b,
+0x28,
+0xfe,
+0xfb,
+0xc9,
+0x83,
+0x6b,
+0xbc,
+0x72,
+0x42,
+0xf7,
+0x78,
+0x92,
+0x87,
+0x76,
+0xbe,
+0x0c,
+0x42,
+0x42,
+0x96,
+0x18,
+0x03,
+0x69,
+0x16,
+0x67,
+0xc6,
+0xe7,
+0x75,
+0xee,
+0xb6,
+0x1b,
+0x85,
+0x46,
+0xb4,
+0x65,
+0x0a,
+0x61,
+0xbb,
+0xb9,
+0xb3,
+0x37,
+0xf8,
+0x35,
+0x98,
+0x38,
+0x5d,
+0x93,
+0x3d,
+0x99,
+0x84,
+0x40,
+0x9d,
+0x66,
+0x3e,
+0x3b,
+0xd0,
+0x01,
+0x8a,
+0x67,
+0x83,
+0xce,
+0x26,
+0x48,
+0x76,
+0x93,
+0x70,
+0xa7,
+0xfe,
+0x13,
+0xee,
+0x5a,
+0x30,
+0x2c,
+0xcc,
+0xba,
+0xa9,
+0xe8,
+0x76,
+0x88,
+0xa7,
+0x8e,
+0x78,
+0x22,
+0xdf,
+0xec,
+0xc2,
+0x68,
+0xcf,
+0xf4,
+0x29,
+0x6d,
+0x19,
+0x6e,
+0x4d,
+0xad,
+0x35,
+0xee,
+0x07,
+0xb5,
+0xcf,
+0x20,
+0x80,
+0x77,
+0xf9,
+0xb7,
+0x45,
+0x78,
+0x63,
+0x3a,
+0x39,
+0x7b,
+0x44,
+0xec,
+0x82,
+0x0e,
+0x8f,
+0xf2,
+0x03,
+0xa8,
+0xaf,
+0x83,
+0x3d,
+0x3a,
+0xc5,
+0x54,
+0xfe,
+0xc0,
+0xf5,
+0xf4,
+0x98,
+0xf4,
+0x8d,
+0x96,
+0x2a,
+0x62,
+0xd2,
+0xbc,
+0x56,
+0x3c,
+0xfe,
+0x7d,
+0x46,
+0x7f,
+0x21,
+0x92,
+0x8d,
+0x57,
+0x15,
+0x3f,
+0xff,
+0xc7,
+0xe4,
+0x24,
+0x71,
+0x36,
+0xe3,
+0x25,
+0x7d,
+0xb3,
+0xf7,
+0xd1,
+0x18,
+0xf5,
+0x3e,
+0x0e,
+0xb3,
+0xa3,
+0xd8,
+0x60,
+0xda,
+0xa6,
+0x72,
+0xc6,
+0x84,
+0x09,
+0x2b,
+0xfe,
+0x74,
+0x0d,
+0x7b,
+0x71,
+0x40,
+0x74,
+0x99,
+0x2a,
+0xe9,
+0xc4,
+0x3e,
+0x1f,
+0xab,
+0x22,
+0x21,
+0x97,
+0xab,
+0x93,
+0x4a,
+0x72,
+0x3b,
+0x15,
+0xd8,
+0xc3,
+0x68,
+0x3f,
+0xd0,
+0x7f,
+0x21,
+0x48,
+0x6e,
+0xf2,
+0x68,
+0x41,
+0x16,
+0x49,
+0x6a,
+0x4c,
+0xdd,
+0xe0,
+0x44,
+0xd6,
+0x04,
+0xc1,
+0xc5,
+0x4a,
+0x3e,
+0x06,
+0x2c,
+0x6d,
+0x30,
+0x76,
+0x71,
+0x33,
+0xde,
+0x73,
+0x44,
+0x96,
+0x05,
+0xaa,
+0x3d,
+0x31,
+0x55,
+0xf7,
+0xdb,
+0x17,
+0x5f,
+0xa1,
+0xd0,
+0x36,
+0x9f,
+0xaa,
+0x95,
+0x82,
+0x46,
+0x79,
+0x78,
+0x77,
+0xaf,
+0x04,
+0x78,
+0x7d,
+0xe8,
+0x8a,
+0x5c,
+0x69,
+0xe2,
+0x88,
+0xce,
+0xca,
+0x21,
+0x18,
+0x0d,
+0x1b,
+0xe7,
+0x3c,
+0x14,
+0xec,
+0x8b,
+0xc6,
+0x55,
+0x30,
+0xf1,
+0x40,
+0x7f,
+0x4e,
+0x1d,
+0xda,
+0x86,
+0x81,
+0x05,
+0x72,
+0x3a,
+0x99,
+0xad,
+0x78,
+0xfc,
+0x96,
+0xcc,
+0x0e,
+0x81,
+0x0c,
+0xed,
+0xce,
+0x69,
+0x14,
+0x15,
+0xc9,
+0xdd,
+0xb5,
+0xf7,
+0xde,
+0xf5,
+0x9c,
+0xc7,
+0xc1,
+0xb9,
+0x09,
+0x8e,
+0xf7,
+0xd9,
+0xf2,
+0x05,
+0x02,
+0x36,
+0xe9,
+0x8d,
+0xb4,
+0x51,
+0x23,
+0x78,
+0xc2,
+0x2a,
+0x2f,
+0x27,
+0x2e,
+0x2e,
+0xa1,
+0x9f,
+0xda,
+0xb1,
+0x0d,
+0xc0,
+0x97,
+0x18,
+0x65,
+0x4e,
+0x87,
+0xa6,
+0x95,
+0xa7,
+0xdc,
+0x91,
+0xfd,
+0x10,
+0xee,
+0x32,
+0x36,
+0x23,
+0xad,
+0x79,
+0x66,
+0x68,
+0x16,
+0x6a,
+0x7a,
+0x91,
+0xe9,
+0xb6,
+0xd0,
+0xf7,
+0x38,
+0xc0,
+0xa2,
+0xca,
+0xd4,
+0xc0,
+0xcd,
+0x4a,
+0x68,
+0x01,
+0x07,
+0x8e,
+0x8d,
+0x82,
+0x85,
+0xd1,
+0x88,
+0x8c,
+0x7b,
+0xdf,
+0x90,
+0x9b,
+0x28,
+0x00,
+0xaa,
+0x4d,
+0x14,
+0x2f,
+0x65,
+0xd6,
+0x90,
+0x7a,
+0xe0,
+0x10,
+0xed,
+0xf0,
+0x04,
+0x80,
+0xff,
+0x52,
+0xb5,
+0xb3,
+0x66,
+0xae,
+0xb2,
+0x4c,
+0xe0,
+0x4f,
+0x69,
+0x18,
+0xa6,
+0x4e,
+0x1a,
+0x95,
+0xd2,
+0xf4,
+0x26,
+0xba,
+0x16,
+0xea,
+0xb6,
+0x51,
+0xdc,
+0x3f,
+0xf2,
+0x29,
+0xf8,
+0x5b,
+0x1a,
+0x6e,
+0x0a,
+0x21,
+0xa2,
+0x34,
+0x40,
+0x8a,
+0x58,
+0x10,
+0xb7,
+0xaa,
+0xe5,
+0x4b,
+0xa9,
+0x7a,
+0x7c,
+0x32,
+0x10,
+0xdd,
+0x74,
+0x32,
+0xca,
+0x21,
+0xfb,
+0x92,
+0x88,
+0x22,
+0x29,
+0xdd,
+0x51,
+0xe9,
+0xcc,
+0xcb,
+0x66,
+0x5f,
+0xca,
+0x4a,
+0x9d,
+0xd6,
+0x55,
+0x0a,
+0x5d,
+0xe9,
+0x6c,
+0x37,
+0xba,
+0x75,
+0x18,
+0x7c,
+0x00,
+0x4a,
+0x78,
+0x58,
+0x1f,
+0xec,
+0x47,
+0x75,
+0x74,
+0x21,
+0x13,
+0x69,
+0x66,
+0x44,
+0xe8,
+0x00,
+0x6f,
+0x7d,
+0xb9,
+0x31,
+0xc8,
+0xb1,
+0xdc,
+0xc2,
+0x62,
+0x52,
+0xf1,
+0x20,
+0x1d,
+0xeb,
+0x88,
+0x18,
+0x65,
+0x13,
+0x8f,
+0x78,
+0xba,
+0x5a,
+0xb9,
+0x2b,
+0x6c,
+0x80,
+0xe0,
+0xa7,
+0x5f,
+0xb9,
+0xec,
+0x1b,
+0x86,
+0x06,
+0x8a,
+0xbf,
+0x71,
+0x44,
+0x4f,
+0x41,
+0x73,
+0x32,
+0x59,
+0x01,
+0x33,
+0x54,
+0xac,
+0x5e,
+0xac,
+0xc2,
+0x0a,
+0xa4,
+0xd5,
+0xc3,
+0x54,
+0x05,
+0xbf,
+0x44,
+0xdc,
+0x72,
+0x3d,
+0xc8,
+0x44,
+0x6c,
+0x80,
+0x1f,
+0x69,
+0x16,
+0x85,
+0x65,
+0xbc,
+0xa1,
+0x99,
+0x50,
+0xd9,
+0x39,
+0xa7,
+0x7c,
+0xac,
+0xf1,
+0x0c,
+0xd7,
+0xdc,
+0xe7,
+0x2a,
+0xe4,
+0xf2,
+0xa4,
+0x6f,
+0xf4,
+0xe2,
+0xd5,
+0x12,
+0x36,
+0x93,
+0xa6,
+0xfd,
+0xdd,
+0xde,
+0x4c,
+0x07,
+0x11,
+0x43,
+0x25,
+0x31,
+0xa7,
+0x54,
+0x81,
+0x28,
+0x27,
+0x41,
+0x70,
+0xd9,
+0xb9,
+0x4e,
+0xce,
+0x45,
+0x40,
+0xe2,
+0xb8,
+0xa5,
+0x79,
+0xf6,
+0x39,
+0x8e,
+0xf8,
+0xae,
+0xfe,
+0x25,
+0x47,
+0x8c,
+0xc2,
+0x1a,
+0xc0,
+0x58,
+0x45,
+0x38,
+0x13,
+0x3b,
+0xbb,
+0x1e,
+0x2c,
+0xdf,
+0xf6,
+0x62,
+0xb0,
+0xe0,
+0x88,
+0x26,
+0xf1,
+0xab,
+0xd9,
+0xa0,
+0x5d,
+0x69,
+0x93,
+0x72,
+0x6c,
+0x4a,
+0xe0,
+0xef,
+0x9f,
+0x21,
+0xaf,
+0x2b,
+0x35,
+0x2a,
+0x27,
+0x73,
+0x52,
+0x3b
+};
+
+/*----------------------------------------------------------------------------------------
+ * P R O T O T Y P E S O F L O C A L F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * E X P O R T E D F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
diff --git a/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/F14MicrocodePatch0500001A_Unenc.c b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/F14MicrocodePatch0500001A_Unenc.c
new file mode 100644
index 0000000000..8aafa801a9
--- /dev/null
+++ b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/F14MicrocodePatch0500001A_Unenc.c
@@ -0,0 +1,1461 @@
+/* $NoKeywords:$ */
+/**
+ * @file
+ *
+ * AMD Family_14 Microcode patch.
+ *
+ * Fam14 Microcode Patch rev 0500001A for 5801 or equivalent.
+ *
+ * @xrefitem bom "File Content Label" "Release Content"
+ * @e project: AGESA
+ * @e sub-project: CPU/FAMILY/0x14
+ * @e \$Revision: 37850 $ @e \$Date: 2010-09-13 18:09:57 -0400 (Mon, 13 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.
+ *
+ * ***************************************************************************
+ *
+ */
+/*----------------------------------------------------------------------------------------
+ * M O D U L E S U S E D
+ *----------------------------------------------------------------------------------------
+ */
+#include "AGESA.h"
+#include "cpuRegisters.h"
+#include "cpuEarlyInit.h"
+
+/*----------------------------------------------------------------------------------------
+ * D E F I N I T I O N S A N D M A C R O S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * T Y P E D E F S A N D S T R U C T U R E S
+ *----------------------------------------------------------------------------------------
+ */
+
+// Patch code 0500001A for 5801 and equivalent
+CONST MICROCODE_PATCHES ROMDATA CpuF14MicrocodePatch0500001A_Unenc =
+{
+0x10,
+0x20,
+0x08,
+0x09,
+0x1a,
+0x00,
+0x00,
+0x05,
+0x01,
+0x80,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x01,
+0x58,
+0x00,
+0x00,
+0x00,
+0xaa,
+0xaa,
+0xaa,
+0x73,
+0xea,
+0xd6,
+0xce,
+0x81,
+0x73,
+0xeb,
+0x17,
+0x00,
+0x00,
+0x00,
+0x00,
+0x1a,
+0x00,
+0x00,
+0x05,
+0xa3,
+0x0c,
+0x16,
+0x11,
+0xf0,
+0x0c,
+0xf0,
+0x0c,
+0xf0,
+0x0c,
+0xf0,
+0x0c,
+0xf0,
+0x0c,
+0xf0,
+0x0c,
+0xf0,
+0x0c,
+0xf0,
+0x0c,
+0xf0,
+0x0c,
+0xf0,
+0x0c,
+0xae,
+0x38,
+0x00,
+0x80,
+0x00,
+0x00,
+0x00,
+0x00,
+0xff,
+0x38,
+0x00,
+0x80,
+0x00,
+0x18,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0xff,
+0x81,
+0x73,
+0xc0,
+0xa1,
+0x9f,
+0xc9,
+0xe7,
+0xbf,
+0x81,
+0x33,
+0xc0,
+0xa1,
+0x9f,
+0xc9,
+0xe7,
+0x1f,
+0xa0,
+0x06,
+0x00,
+0xff,
+0x01,
+0x7d,
+0xc0,
+0xc1,
+0x9f,
+0xc9,
+0xeb,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x03,
+0x00,
+0xff,
+0xfe,
+0xff,
+0x00,
+0xe1,
+0xdb,
+0xcb,
+0xfe,
+0x60,
+0x11,
+0xfe,
+0x00,
+0xe1,
+0xd7,
+0x83,
+0xd6,
+0xdf,
+0xaf,
+0x06,
+0x00,
+0xdf,
+0xff,
+0xff,
+0x00,
+0xe1,
+0xdb,
+0xcb,
+0xfe,
+0xdf,
+0xff,
+0xff,
+0x00,
+0xe1,
+0xd7,
+0x83,
+0xd6,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xdf,
+0xff,
+0xff,
+0x2f,
+0xe1,
+0x1f,
+0xe0,
+0xe7,
+0xf7,
+0x5f,
+0x39,
+0x00,
+0xa0,
+0x1f,
+0xc0,
+0xe7,
+0x21,
+0xa0,
+0x06,
+0x00,
+0xff,
+0x01,
+0x5d,
+0xd5,
+0xd1,
+0x9f,
+0xc5,
+0xeb,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x03,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0x45,
+0xb3,
+0x06,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0x9b,
+0xff,
+0x01,
+0x53,
+0xd5,
+0xb1,
+0x9f,
+0xc5,
+0xe7,
+0xfd,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x6f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0x9b,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xfe,
+0x7f,
+0x03,
+0x00,
+0xff,
+0x01,
+0x73,
+0xc0,
+0xa1,
+0x9f,
+0xc9,
+0xe7,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xfd,
+0xbf,
+0x07,
+0x00,
+0xbf,
+0x01,
+0x3d,
+0xc0,
+0xc1,
+0x9f,
+0xc9,
+0xeb,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x03,
+0x00,
+0xbf,
+0x01,
+0x33,
+0xc0,
+0xa1,
+0x9f,
+0xc9,
+0xe7,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xfd,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0x5b,
+0x53,
+0x06,
+0x00,
+0x6c,
+0xf6,
+0xff,
+0x00,
+0xe1,
+0x5b,
+0x8a,
+0xfe,
+0xfe,
+0xff,
+0xff,
+0x2e,
+0xe1,
+0x17,
+0xe0,
+0xca,
+0x85,
+0xbf,
+0x06,
+0x00,
+0xb0,
+0xdd,
+0x38,
+0x80,
+0xa1,
+0x1f,
+0xc0,
+0xe7,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00
+};
+
+/*----------------------------------------------------------------------------------------
+ * P R O T O T Y P E S O F L O C A L F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * E X P O R T E D F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
diff --git a/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/F14MicrocodePatch05000025.c b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/F14MicrocodePatch05000025.c
new file mode 100644
index 0000000000..8b969cd3fe
--- /dev/null
+++ b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/F14MicrocodePatch05000025.c
@@ -0,0 +1,1645 @@
+/* $NoKeywords:$ */
+/**
+ * @file
+ *
+ * AMD Family_14 Microcode patch.
+ *
+ * Fam14 Microcode Patch rev 05000025 for 5010 or equivalent.
+ *
+ * @xrefitem bom "File Content Label" "Release Content"
+ * @e project: AGESA
+ * @e sub-project: CPU/FAMILY/0x14
+ * @e \$Revision: 37850 $ @e \$Date: 2010-09-13 18:09:57 -0400 (Mon, 13 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.
+ *
+ * ***************************************************************************
+ *
+ */
+/*----------------------------------------------------------------------------------------
+ * M O D U L E S U S E D
+ *----------------------------------------------------------------------------------------
+ */
+#include "AGESA.h"
+#include "cpuRegisters.h"
+#include "cpuEarlyInit.h"
+
+/*----------------------------------------------------------------------------------------
+ * D E F I N I T I O N S A N D M A C R O S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * T Y P E D E F S A N D S T R U C T U R E S
+ *----------------------------------------------------------------------------------------
+ */
+
+// Patch code 05000025 for 5010 and equivalent
+CONST MICROCODE_PATCHES ROMDATA CpuF14MicrocodePatch05000025 =
+{
+0x10,
+0x20,
+0x10,
+0x09,
+0x25,
+0x00,
+0x00,
+0x05,
+0x01,
+0x80,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x10,
+0x50,
+0x00,
+0x00,
+0x00,
+0xaa,
+0xaa,
+0xaa,
+0x17,
+0xbc,
+0xec,
+0xce,
+0xc4,
+0x2e,
+0xfb,
+0x70,
+0xa4,
+0x29,
+0x87,
+0x9b,
+0x3f,
+0xa9,
+0x10,
+0xbd,
+0xa1,
+0x80,
+0xc0,
+0x68,
+0x27,
+0x48,
+0x71,
+0xb4,
+0xea,
+0xce,
+0x31,
+0xd5,
+0xe4,
+0xa1,
+0xde,
+0xd2,
+0x94,
+0x1d,
+0x8f,
+0x0a,
+0x68,
+0xb7,
+0x2a,
+0x3c,
+0xa3,
+0x89,
+0x34,
+0x1c,
+0xc3,
+0x3c,
+0x6f,
+0x16,
+0x3e,
+0xba,
+0xfc,
+0x86,
+0xde,
+0x06,
+0xa7,
+0x6b,
+0xff,
+0x30,
+0xfd,
+0x1f,
+0x58,
+0x73,
+0x4f,
+0xf1,
+0x1a,
+0xf9,
+0x1e,
+0xca,
+0x26,
+0xb0,
+0x0f,
+0x44,
+0xb8,
+0xdc,
+0x94,
+0xb8,
+0xeb,
+0x74,
+0xbf,
+0x05,
+0x67,
+0x2e,
+0x97,
+0x5c,
+0x2d,
+0xfe,
+0x30,
+0xde,
+0xf9,
+0x2e,
+0xc0,
+0x82,
+0x72,
+0x8d,
+0xbf,
+0x1d,
+0x7c,
+0x24,
+0x74,
+0x81,
+0x41,
+0x63,
+0x3b,
+0x6c,
+0xe0,
+0x32,
+0x3e,
+0x64,
+0xb9,
+0xce,
+0x1a,
+0x66,
+0x6d,
+0x6a,
+0x99,
+0xcf,
+0x0d,
+0x98,
+0x7d,
+0x32,
+0x80,
+0xc6,
+0xf9,
+0x79,
+0x5f,
+0xe4,
+0x79,
+0x6e,
+0x2a,
+0xd4,
+0x19,
+0x8c,
+0xa1,
+0x39,
+0x94,
+0x0c,
+0x26,
+0x7f,
+0x33,
+0x17,
+0xc2,
+0x86,
+0xa2,
+0x3a,
+0x6f,
+0x46,
+0x3b,
+0x26,
+0x0e,
+0x7a,
+0x28,
+0xb5,
+0x95,
+0x44,
+0x05,
+0x60,
+0x57,
+0x2a,
+0x52,
+0x19,
+0x80,
+0x2e,
+0xc7,
+0x53,
+0x3c,
+0x37,
+0x54,
+0xe4,
+0x3a,
+0x30,
+0x37,
+0x0e,
+0x5e,
+0xbb,
+0x7e,
+0x94,
+0x82,
+0xef,
+0xc2,
+0x48,
+0x65,
+0x2c,
+0xd2,
+0xbd,
+0xe2,
+0x91,
+0x34,
+0xf4,
+0x5c,
+0xec,
+0x39,
+0xb1,
+0xd0,
+0x89,
+0x81,
+0xdc,
+0xd5,
+0x40,
+0xf4,
+0x3f,
+0x77,
+0x05,
+0xa1,
+0x3b,
+0x05,
+0x95,
+0xb0,
+0xef,
+0xca,
+0xfa,
+0xcd,
+0xb2,
+0xd1,
+0x7c,
+0xcc,
+0x85,
+0x62,
+0x5e,
+0x93,
+0x74,
+0x2b,
+0x56,
+0x91,
+0x0f,
+0x5a,
+0x4f,
+0xb0,
+0x14,
+0xe4,
+0x90,
+0xeb,
+0x51,
+0x80,
+0xd0,
+0xaf,
+0xa0,
+0x10,
+0xb3,
+0x29,
+0x8f,
+0x35,
+0x5b,
+0xdc,
+0x61,
+0x2a,
+0x5c,
+0x97,
+0x50,
+0x8b,
+0xe2,
+0xc8,
+0xa1,
+0xce,
+0xab,
+0x45,
+0x3e,
+0x87,
+0xf1,
+0x11,
+0x6f,
+0x11,
+0xd2,
+0x4c,
+0x04,
+0xcf,
+0x32,
+0x59,
+0xf9,
+0x5b,
+0x88,
+0x4a,
+0x5b,
+0xbc,
+0x75,
+0x20,
+0xf0,
+0x41,
+0x61,
+0x30,
+0x63,
+0xa1,
+0x01,
+0xc2,
+0xbf,
+0xac,
+0x33,
+0x2f,
+0xd1,
+0xc6,
+0xcf,
+0xda,
+0xe0,
+0xa7,
+0x77,
+0x41,
+0xf3,
+0x75,
+0x4d,
+0x42,
+0x2c,
+0xf1,
+0x8d,
+0x44,
+0x76,
+0x7b,
+0xf4,
+0xfe,
+0xbf,
+0x62,
+0x0f,
+0x48,
+0xeb,
+0x36,
+0xf4,
+0x00,
+0x08,
+0x66,
+0x48,
+0xde,
+0x96,
+0xc8,
+0xf6,
+0x7a,
+0xda,
+0xb3,
+0xba,
+0x15,
+0x01,
+0xcb,
+0x7d,
+0xd1,
+0x70,
+0xe8,
+0x2a,
+0x6f,
+0xe3,
+0x8d,
+0xbf,
+0x23,
+0x85,
+0xb2,
+0x23,
+0x71,
+0x23,
+0xae,
+0x15,
+0xac,
+0xbd,
+0x31,
+0x05,
+0xea,
+0x8e,
+0xfa,
+0x03,
+0xf3,
+0xe2,
+0xee,
+0xf0,
+0x47,
+0xac,
+0x2c,
+0x77,
+0xbb,
+0x04,
+0x2e,
+0xde,
+0x08,
+0x4b,
+0x33,
+0x26,
+0xb9,
+0x70,
+0xdc,
+0x54,
+0x51,
+0xed,
+0xdf,
+0x67,
+0x64,
+0x16,
+0xdd,
+0x03,
+0xb2,
+0x43,
+0xe8,
+0x44,
+0xb0,
+0x6f,
+0x63,
+0x9e,
+0x3e,
+0xef,
+0xee,
+0x7b,
+0xba,
+0xf3,
+0x84,
+0xcc,
+0x62,
+0x53,
+0xd9,
+0xd4,
+0x39,
+0x3e,
+0xd7,
+0x6b,
+0x7d,
+0x8b,
+0x50,
+0x18,
+0x05,
+0x91,
+0x57,
+0x46,
+0x64,
+0xf2,
+0xcd,
+0x21,
+0x3b,
+0x2b,
+0x35,
+0x48,
+0xa7,
+0xb4,
+0x8a,
+0xe1,
+0xef,
+0x77,
+0x9e,
+0xb5,
+0xd9,
+0x01,
+0xf0,
+0xa1,
+0x6f,
+0x59,
+0x01,
+0x71,
+0x82,
+0xa8,
+0xfa,
+0xe1,
+0xcf,
+0xa6,
+0x04,
+0xc7,
+0x7a,
+0x54,
+0x64,
+0x0b,
+0x51,
+0x4d,
+0x64,
+0x48,
+0x6a,
+0xe4,
+0xfa,
+0x16,
+0x0e,
+0xe0,
+0xc4,
+0x30,
+0x0f,
+0xea,
+0x08,
+0x75,
+0xa2,
+0xcd,
+0x45,
+0xd8,
+0xcf,
+0x31,
+0x19,
+0x7a,
+0xaf,
+0x8c,
+0xa1,
+0x94,
+0x67,
+0x3d,
+0x67,
+0x1e,
+0x4a,
+0x9a,
+0x13,
+0xe8,
+0xb5,
+0x6e,
+0x20,
+0x4b,
+0x21,
+0x2f,
+0x03,
+0x96,
+0x77,
+0x52,
+0xaa,
+0x0c,
+0x72,
+0x70,
+0xa5,
+0xcf,
+0xd6,
+0x43,
+0x9a,
+0x65,
+0xe0,
+0x4d,
+0xd7,
+0xdc,
+0x97,
+0x25,
+0x59,
+0x15,
+0xeb,
+0x69,
+0xd5,
+0x73,
+0x4d,
+0xe0,
+0x13,
+0xb2,
+0xe5,
+0xa2,
+0x9f,
+0xa2,
+0x75,
+0x92,
+0x19,
+0x51,
+0xce,
+0x5d,
+0xc2,
+0xc8,
+0x96,
+0x2f,
+0x79,
+0xf9,
+0x3f,
+0x2a,
+0xfd,
+0x1c,
+0xbf,
+0xe2,
+0x10,
+0x3d,
+0xed,
+0xfd,
+0xdf,
+0x1a,
+0xe2,
+0x4d,
+0x16,
+0xfb,
+0x3e,
+0x85,
+0x9e,
+0x97,
+0xdb,
+0xd0,
+0x5f,
+0x76,
+0xc7,
+0xd0,
+0x97,
+0xec,
+0x0d,
+0x75,
+0x2a,
+0x33,
+0x79,
+0xa2,
+0x66,
+0xc4,
+0xf6,
+0x02,
+0x16,
+0x1c,
+0x89,
+0xc5,
+0x4d,
+0xf7,
+0x18,
+0x2b,
+0xc6,
+0xb3,
+0x21,
+0x70,
+0xd5,
+0xf1,
+0xed,
+0x51,
+0x7a,
+0xa3,
+0xc6,
+0xfa,
+0x85,
+0x27,
+0xd5,
+0x17,
+0xef,
+0x38,
+0x6a,
+0x48,
+0xb1,
+0x0a,
+0x9b,
+0x7f,
+0x14,
+0xce,
+0x87,
+0xe1,
+0x04,
+0x76,
+0xc2,
+0xb6,
+0x58,
+0xde,
+0xa3,
+0x03,
+0xf2,
+0x01,
+0x70,
+0x95,
+0xd2,
+0x74,
+0xcf,
+0xdb,
+0x3d,
+0x31,
+0xec,
+0x5e,
+0x77,
+0xa4,
+0xf2,
+0x25,
+0x47,
+0x66,
+0x95,
+0x7a,
+0xfb,
+0xc1,
+0x75,
+0x12,
+0x93,
+0x54,
+0x22,
+0xa5,
+0x5a,
+0xe1,
+0x94,
+0x57,
+0x40,
+0x6b,
+0xf2,
+0xc0,
+0xeb,
+0x63,
+0x59,
+0x5b,
+0xa5,
+0x1f,
+0xbc,
+0x1c,
+0xe8,
+0xdb,
+0x5b,
+0xca,
+0xba,
+0x88,
+0xf2,
+0xdb,
+0xf2,
+0x88,
+0x11,
+0x7a,
+0x58,
+0xd2,
+0xec,
+0x5d,
+0xb9,
+0x7e,
+0x83,
+0xef,
+0xc7,
+0xd9,
+0xfa,
+0x08,
+0x62,
+0xf5,
+0x15,
+0x7b,
+0x8a,
+0x37,
+0xe7,
+0x9a,
+0x50,
+0x3f,
+0x0c,
+0x84,
+0xfc,
+0x86,
+0xb6,
+0xac,
+0xa2,
+0xd9,
+0xa1,
+0x4c,
+0x4b,
+0x5b,
+0x57,
+0x1c,
+0x87,
+0x13,
+0x5a,
+0x0e,
+0xf6,
+0x85,
+0xe5,
+0x30,
+0x3d,
+0x78,
+0xd7,
+0xc3,
+0x17,
+0x0b,
+0x90,
+0xe7,
+0xcd,
+0xf2,
+0xd0,
+0x85,
+0x61,
+0x11,
+0xda,
+0x89,
+0xe9,
+0x17,
+0x88,
+0xe1,
+0xec,
+0x61,
+0x94,
+0xba,
+0x31,
+0x61,
+0x94,
+0x5d,
+0x64,
+0xc3,
+0xf9,
+0x0f,
+0x15,
+0x60,
+0xe7,
+0x4d,
+0x71,
+0x59,
+0x6c,
+0x72,
+0xbe,
+0x20,
+0xce,
+0x72,
+0x84,
+0xb4,
+0x2a,
+0x66,
+0x53,
+0xde,
+0x1f,
+0x79,
+0x34,
+0x03,
+0x10,
+0x75,
+0xbd,
+0x3b,
+0xd9,
+0xa3,
+0x2b,
+0xf9,
+0x3f,
+0x4c,
+0xe8,
+0x01,
+0x53,
+0xa6,
+0x47,
+0x11,
+0x7e,
+0x5e,
+0xdf,
+0x63,
+0x28,
+0x2e,
+0x1d,
+0xed,
+0x62,
+0xe9,
+0x6a,
+0x10,
+0x6b,
+0xb7,
+0x1b,
+0x51,
+0xc6,
+0x9b,
+0x39,
+0x2a,
+0x4d,
+0xec,
+0xb9,
+0x57,
+0x94,
+0xbe,
+0xc8,
+0x43,
+0x70,
+0x21,
+0xd9,
+0xa3,
+0xfe,
+0x24,
+0xef,
+0xbd,
+0xc6,
+0x33,
+0x3c,
+0x1e,
+0x79,
+0xfc,
+0xeb,
+0xfc,
+0x43,
+0xab,
+0x1a,
+0x3b,
+0x90,
+0xe9,
+0xf5,
+0x7f,
+0x34,
+0x5d,
+0x0d,
+0xfc,
+0xeb,
+0x24,
+0x1d,
+0xed,
+0x3c,
+0xd2,
+0x17,
+0x34,
+0x3b,
+0x2c,
+0xfe,
+0x16,
+0x3b,
+0x80,
+0x58,
+0x78,
+0xc2,
+0x5e,
+0x0e,
+0x74,
+0x09,
+0x7a,
+0x19,
+0xb1,
+0x11,
+0x98,
+0xe1,
+0xf6,
+0x5c,
+0x03,
+0xac,
+0xc6,
+0x7c,
+0xda,
+0xdf,
+0xac,
+0xd5,
+0x4a,
+0x73,
+0x88,
+0xfc,
+0x19,
+0xac,
+0x80,
+0x49,
+0xa1,
+0x22,
+0x1c,
+0xa4,
+0x0e,
+0x93,
+0xbe,
+0xb7,
+0x5d,
+0xaa,
+0x00,
+0x09,
+0x06,
+0x31,
+0xf4,
+0x67,
+0xdf,
+0x94,
+0x44,
+0x53,
+0x75,
+0xf6,
+0x02,
+0x81,
+0xd3,
+0x68,
+0xcc,
+0x0d,
+0xf5,
+0x7b,
+0x6b,
+0x74,
+0x61,
+0xb8,
+0x5e,
+0xd1,
+0x24,
+0x6e,
+0xa5,
+0x3d,
+0x25,
+0x6a,
+0xd8,
+0xa5,
+0x09,
+0x5e,
+0x67,
+0x11,
+0x04,
+0xd1,
+0xd8,
+0x1d,
+0x86,
+0x57,
+0x41,
+0xd2,
+0xfe,
+0xf9,
+0x99,
+0x9d,
+0x7f,
+0xb0,
+0x85,
+0x47,
+0x2e,
+0x40,
+0xd9,
+0xf6,
+0xf5,
+0x93,
+0x9f,
+0x63,
+0x9e,
+0xb1,
+0x84,
+0x68,
+0x73,
+0xfb,
+0x33,
+0x95,
+0x34,
+0x63,
+0xae,
+0xcc,
+0x2c,
+0xd6,
+0xed,
+0xbc,
+0x1c,
+0xfe,
+0xc2,
+0x6c,
+0x12,
+0x04,
+0x17,
+0xa0,
+0x61,
+0x1b,
+0x73,
+0x66,
+0xb7,
+0x42,
+0x51,
+0xd0,
+0x0e,
+0xd3,
+0x7a,
+0xdd,
+0xb6,
+0xe3,
+0x33,
+0xf2,
+0x41,
+0x90,
+0xa7,
+0xf9,
+0x83,
+0x64,
+0x19,
+0xcb,
+0x42,
+0xe6,
+0xe4,
+0xc5,
+0xc0,
+0x9b,
+0xc6,
+0xed,
+0x8e,
+0x63,
+0x03,
+0xc0,
+0x82,
+0x17,
+0x85,
+0x81,
+0x6e,
+0x6e,
+0xf0,
+0xf3,
+0xd9,
+0xac,
+0x00,
+0xb5,
+0x7f,
+0x96,
+0x93,
+0xf8,
+0x94,
+0x65,
+0x05,
+0x84,
+0x67,
+0xe8,
+0x0c,
+0x70,
+0x56,
+0x2e,
+0x3c,
+0x27,
+0x96,
+0x51,
+0x06,
+0x61,
+0x78,
+0x17,
+0xee,
+0x8b,
+0x32,
+0xdf,
+0x55,
+0xf2,
+0x07,
+0xa6,
+0x5a,
+0x1d,
+0xcc,
+0x0f,
+0xe4,
+0xfa,
+0x49,
+0xe8,
+0x9d,
+0x03,
+0xf6,
+0xd1,
+0xf0,
+0x01,
+0xe6,
+0x06,
+0xc5,
+0x8b,
+0x05,
+0xb9,
+0x1a,
+0xbe,
+0x29,
+0x86,
+0xc9,
+0xaa,
+0x19,
+0x3a,
+0xe1,
+0xcc,
+0x1d,
+0x69,
+0x74,
+0x54,
+0x46,
+0x68,
+0x59,
+0xaf,
+0x53,
+0x08,
+0x3a,
+0x60,
+0x9c,
+0x1d,
+0x4a,
+0xab,
+0xa5,
+0x5b,
+0xeb,
+0x18,
+0xf6,
+0x86,
+0x52,
+0xc9,
+0xde,
+0xff,
+0x7a,
+0x2d,
+0x6f,
+0x41,
+0x75,
+0xec,
+0x55,
+0x57,
+0x93,
+0x40,
+0x53,
+0x10,
+0x7f,
+0xb4,
+0x86,
+0xf6,
+0x5d,
+0xa5,
+0xe3,
+0x4d,
+0x51,
+0xfb,
+0xf3,
+0x31,
+0x6b,
+0xa4,
+0x9f,
+0xfa,
+0xe2,
+0x0b,
+0x61,
+0x42,
+0x24,
+0x7d,
+0x44,
+0x7f,
+0xa9,
+0x8b,
+0x29,
+0x82,
+0x72,
+0x6b,
+0xee,
+0xf6,
+0x3e,
+0xf9,
+0xbb,
+0xab,
+0x32,
+0x43,
+0xfe,
+0x1f,
+0x02,
+0x2f,
+0x61,
+0xa3,
+0x1e,
+0x27,
+0x1c,
+0xad,
+0x9a,
+0x08,
+0xb7,
+0xb9,
+0x57,
+0xd1,
+0xe7,
+0x66,
+0x99,
+0x57,
+0xca,
+0x3b,
+0x0c,
+0x2e,
+0x75,
+0xd5,
+0xab,
+0xf0,
+0x0a,
+0x14,
+0x64,
+0xad,
+0xc5,
+0x07,
+0xa5,
+0x91,
+0xd1,
+0x7c,
+0x18,
+0x3a,
+0xa0,
+0x85,
+0x30,
+0x99,
+0x24,
+0xbf,
+0xdb,
+0x4a,
+0x09,
+0x4b,
+0x67,
+0xc8,
+0xe6,
+0x1d,
+0x5f,
+0x01,
+0xa7,
+0x32,
+0x9f,
+0xba,
+0x51,
+0xe1,
+0x5d,
+0xb8,
+0xbe,
+0xb0,
+0x39,
+0x00,
+0x41,
+0x38,
+0xe6,
+0xd1,
+0xbd,
+0xae,
+0x00,
+0xad,
+0x9b,
+0xca,
+0xb3,
+0xf8,
+0x0f,
+0xd3,
+0x24,
+0x57,
+0x34,
+0xf2,
+0x46,
+0xb0,
+0x8b,
+0xce,
+0xdd,
+0x1b,
+0x40,
+0x6d,
+0xc7,
+0xc7,
+0x3d,
+0x61,
+0xe0,
+0x76,
+0x08,
+0x08,
+0xd4,
+0xfb,
+0xb0,
+0xdc,
+0x2f,
+0xde,
+0xd9,
+0x33,
+0xb8,
+0x35,
+0x71,
+0x8f,
+0x1d,
+0x65,
+0xc5,
+0xec,
+0x78,
+0x74,
+0xa8,
+0x1a,
+0xa7,
+0x06,
+0xb3,
+0x99,
+0xf9,
+0x1a,
+0x61,
+0xf9,
+0xe6,
+0x1b,
+0xcd,
+0xa6,
+0xb7,
+0xcd,
+0x2d,
+0xa2,
+0xc1,
+0xd6,
+0xe2,
+0x75,
+0x1e,
+0x38,
+0x06,
+0xc2,
+0x9c,
+0x22,
+0xf9,
+0x5b,
+0x55,
+0xa8,
+0x09,
+0x8d,
+0x27,
+0x7c,
+0xb0,
+0x3a,
+0x69,
+0xd8,
+0xc9,
+0xd6,
+0x2c,
+0xb0,
+0x04,
+0xd3,
+0xb9,
+0xe2,
+0x16,
+0xdd,
+0x42,
+0x54,
+0x04,
+0x0a,
+0x97,
+0x6f,
+0x25,
+0xf7,
+0xfe,
+0x55,
+0xe0,
+0x56,
+0x52,
+0xc7,
+0x9b,
+0x0d,
+0x6d,
+0x43,
+0xd0,
+0x26,
+0xbf,
+0x5d,
+0x33,
+0x63,
+0xae,
+0x90,
+0x0f,
+0x57,
+0x66,
+0xe4,
+0x9d,
+0xb6,
+0x55,
+0xef,
+0x4c,
+0x12,
+0x35,
+0xb3,
+0x93,
+0x70,
+0x0b,
+0x8c,
+0x2b,
+0xe5,
+0x72,
+0x19,
+0x73,
+0x85,
+0x28,
+0x41,
+0x9d,
+0xbd,
+0xf3,
+0xc0,
+0xc9,
+0xd0,
+0x2b,
+0x1d,
+0xf2,
+0x0e,
+0xb8,
+0xea,
+0x32,
+0x8c,
+0x49,
+0x40,
+0x8c,
+0xcd,
+0xc4,
+0x4c,
+0x5d,
+0x43,
+0x9d,
+0x69,
+0x24,
+0x0f,
+0x77,
+0x0e,
+0xe2,
+0xb7,
+0x86,
+0x1d,
+0x55,
+0xd3,
+0x5f,
+0x72,
+0xa5,
+0x20,
+0x89,
+0x76,
+0xe7,
+0x07,
+0x45,
+0xc0,
+0x4d,
+0x1e,
+0x27,
+0xc0,
+0xed,
+0x3b,
+0x64,
+0xbb,
+0xc8,
+0x4f,
+0x99,
+0xad,
+0xb2,
+0xd3,
+0xc6,
+0xad,
+0x3e,
+0xc7,
+0x2f,
+0x73,
+0xee,
+0x63,
+0x69,
+0x90,
+0x8c,
+0x0a,
+0x3f,
+0x40,
+0xff,
+0xa9,
+0x16,
+0x72,
+0x95,
+0x87,
+0x02,
+0xca,
+0xa6,
+0x7c,
+0xd5,
+0x88,
+0x6f,
+0x20,
+0x0a,
+0xba,
+0xe3,
+0xdb,
+0x8a,
+0x5a,
+0x4c,
+0x60,
+0x53,
+0xc9,
+0x35,
+0x59,
+0x98,
+0xf1,
+0x08,
+0xc6,
+0xb8,
+0x9d,
+0x72,
+0xe1,
+0xee,
+0xc6,
+0x70,
+0x0e,
+0x11,
+0xbe,
+0xf6,
+0xbd,
+0x01,
+0x37,
+0xbf,
+0x54,
+0x5f,
+0xf1,
+0xf0,
+0x0a,
+0x31,
+0x36,
+0x9f,
+0xb9,
+0x9b,
+0xf8,
+0xbc,
+0x3a,
+0x97,
+0x68,
+0xb4,
+0xd1,
+0xfd,
+0x8b,
+0x45,
+0x56,
+0x5b,
+0x7f,
+0x46,
+0x76,
+0x00,
+0x67,
+0xbc
+};
+
+/*----------------------------------------------------------------------------------------
+ * P R O T O T Y P E S O F L O C A L F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * E X P O R T E D F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
diff --git a/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/F14MicrocodePatch05000025_Unenc.c b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/F14MicrocodePatch05000025_Unenc.c
new file mode 100644
index 0000000000..059676a77e
--- /dev/null
+++ b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/F14MicrocodePatch05000025_Unenc.c
@@ -0,0 +1,1461 @@
+/* $NoKeywords:$ */
+/**
+ * @file
+ *
+ * AMD Family_14 Microcode patch.
+ *
+ * Fam14 Microcode Patch rev 05000025 for 5810 or equivalent.
+ *
+ * @xrefitem bom "File Content Label" "Release Content"
+ * @e project: AGESA
+ * @e sub-project: CPU/FAMILY/0x14
+ * @e \$Revision: 37850 $ @e \$Date: 2010-09-13 18:09:57 -0400 (Mon, 13 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.
+ *
+ * ***************************************************************************
+ *
+ */
+/*----------------------------------------------------------------------------------------
+ * M O D U L E S U S E D
+ *----------------------------------------------------------------------------------------
+ */
+#include "AGESA.h"
+#include "cpuRegisters.h"
+#include "cpuEarlyInit.h"
+
+/*----------------------------------------------------------------------------------------
+ * D E F I N I T I O N S A N D M A C R O S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * T Y P E D E F S A N D S T R U C T U R E S
+ *----------------------------------------------------------------------------------------
+ */
+
+// Patch code 05000025 for 5810 and equivalent
+CONST MICROCODE_PATCHES ROMDATA CpuF14MicrocodePatch05000025_Unenc =
+{
+0x10,
+0x20,
+0x10,
+0x09,
+0x25,
+0x00,
+0x00,
+0x05,
+0x01,
+0x80,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x10,
+0x58,
+0x00,
+0x00,
+0x00,
+0xaa,
+0xaa,
+0xaa,
+0x43,
+0x72,
+0xae,
+0x08,
+0x06,
+0x9e,
+0x82,
+0x91,
+0x00,
+0x00,
+0x00,
+0x00,
+0x25,
+0x00,
+0x00,
+0x05,
+0x87,
+0x01,
+0x17,
+0x11,
+0xf0,
+0x0c,
+0xf0,
+0x0c,
+0xf0,
+0x0c,
+0xf0,
+0x0c,
+0xf0,
+0x0c,
+0xf0,
+0x0c,
+0xf0,
+0x0c,
+0xf0,
+0x0c,
+0xf0,
+0x0c,
+0xf0,
+0x0c,
+0xae,
+0x38,
+0x00,
+0x80,
+0x00,
+0x00,
+0x00,
+0x00,
+0xff,
+0x38,
+0x00,
+0x80,
+0x00,
+0x18,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0x00,
+0xff,
+0x01,
+0x7d,
+0xc0,
+0xc1,
+0x9f,
+0xc9,
+0xeb,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0x1f,
+0xa0,
+0x02,
+0x00,
+0xff,
+0x01,
+0x73,
+0xc0,
+0xa1,
+0x9f,
+0xc9,
+0xe7,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xfd,
+0xbf,
+0x07,
+0x00,
+0xff,
+0xfe,
+0xff,
+0x00,
+0xe1,
+0xdb,
+0xcb,
+0xfe,
+0x60,
+0x11,
+0xfe,
+0x00,
+0xe1,
+0xd7,
+0x83,
+0xd6,
+0xdf,
+0xaf,
+0x06,
+0x00,
+0xdf,
+0xff,
+0xff,
+0x00,
+0xe1,
+0xdb,
+0xcb,
+0xfe,
+0xe0,
+0xff,
+0xff,
+0x00,
+0xe1,
+0xd7,
+0x83,
+0xd6,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xdf,
+0xff,
+0xff,
+0x2f,
+0xe1,
+0x1f,
+0xe0,
+0xe7,
+0xf7,
+0x5f,
+0x39,
+0x00,
+0xa0,
+0x1f,
+0xc0,
+0xe7,
+0x21,
+0xa0,
+0x06,
+0x00,
+0xff,
+0x01,
+0x5d,
+0xd5,
+0xd1,
+0x9f,
+0xc5,
+0xeb,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x03,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0x45,
+0xb3,
+0x06,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0x9b,
+0xff,
+0x01,
+0x53,
+0xd5,
+0xb1,
+0x9f,
+0xc5,
+0xe7,
+0xfd,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x6f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0x9b,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xfe,
+0x7f,
+0x03,
+0x00,
+0xbf,
+0x01,
+0x3d,
+0xc0,
+0xc1,
+0x9f,
+0xc9,
+0xeb,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x03,
+0x00,
+0xbf,
+0x01,
+0x33,
+0xc0,
+0xa1,
+0x9f,
+0xc9,
+0xe7,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xfd,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0x77,
+0x5e,
+0x06,
+0x00,
+0x9f,
+0xfc,
+0xff,
+0x00,
+0xe1,
+0x5b,
+0x8a,
+0xfe,
+0xfe,
+0xff,
+0xff,
+0x2e,
+0xe1,
+0x17,
+0xe0,
+0xca,
+0x85,
+0xbf,
+0x06,
+0x00,
+0xb0,
+0xdd,
+0x38,
+0x80,
+0xa1,
+0x1f,
+0xc0,
+0xe7,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0x81,
+0x7f,
+0x00,
+0xe1,
+0x1f,
+0xc0,
+0xbf,
+0xff,
+0xbf,
+0x07,
+0x00
+};
+
+/*----------------------------------------------------------------------------------------
+ * P R O T O T Y P E S O F L O C A L F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * E X P O R T E D F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
diff --git a/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/F14PackageType.h b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/F14PackageType.h
new file mode 100644
index 0000000000..ca9188c405
--- /dev/null
+++ b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/F14PackageType.h
@@ -0,0 +1,77 @@
+/* $NoKeywords:$ */
+/**
+ * @file
+ *
+ * AMD Family_14 Package Type Definitions
+ *
+ * @xrefitem bom "File Content Label" "Release Content"
+ * @e project: AGESA
+ * @e sub-project: CPU/F14
+ * @e \$Revision: 34897 $ @e \$Date: 2010-07-14 10:07:10 +0800 (Wed, 14 Jul 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 _F14_PACKAGE_TYPE_H_
+#define _F14_PACKAGE_TYPE_H_
+
+
+/*---------------------------------------------------------------------------------------
+ * M I X E D (Definitions And Macros / Typedefs, Structures, Enums)
+ *---------------------------------------------------------------------------------------
+ */
+
+
+/*---------------------------------------------------------------------------------------
+ * D E F I N I T I O N S A N D M A C R O S
+ *---------------------------------------------------------------------------------------
+ */
+// Below equates are defined to cooperate with LibAmdGetPackageType.
+#define PACKAGE_TYPE_FT1_BIT (1 << 0)
+
+// Raw data definitions
+#define PACKAGE_TYPE_FT1 0
+
+
+/*---------------------------------------------------------------------------------------
+ * T Y P E D E F S, S T R U C T U R E S, E N U M S
+ *---------------------------------------------------------------------------------------
+ */
+
+
+/*---------------------------------------------------------------------------------------
+ * F U N C T I O N P R O T O T Y P E
+ *---------------------------------------------------------------------------------------
+ */
+
+#endif // _F14_PACKAGE_TYPE_H_
diff --git a/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/ON/F14OnEquivalenceTable.c b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/ON/F14OnEquivalenceTable.c
new file mode 100644
index 0000000000..3cadf73fc8
--- /dev/null
+++ b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/ON/F14OnEquivalenceTable.c
@@ -0,0 +1,125 @@
+/* $NoKeywords:$ */
+/**
+ * @file
+ *
+ * AMD Family_14 Ontario Equivalence Table related data
+ *
+ * @xrefitem bom "File Content Label" "Release Content"
+ * @e project: AGESA
+ * @e sub-project: CPU/Family/0x14
+ * @e \$Revision: 36418 $ @e \$Date: 2010-08-18 17:00:58 +0800 (Wed, 18 Aug 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.
+ *
+ * ***************************************************************************
+ *
+ */
+
+/*----------------------------------------------------------------------------------------
+ * M O D U L E S U S E D
+ *----------------------------------------------------------------------------------------
+ */
+#include "AGESA.h"
+#include "cpuFamilyTranslation.h"
+#include "Filecode.h"
+#include "amdlib.h"
+#include "cpuRegisters.h"
+#define FILECODE PROC_CPU_FAMILY_0X14_ON_F14ONEQUIVALENCETABLE_FILECODE
+
+/*----------------------------------------------------------------------------------------
+ * D E F I N I T I O N S A N D M A C R O S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * T Y P E D E F S A N D S T R U C T U R E S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * P R O T O T Y P E S O F L O C A L F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * E X P O R T E D F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+
+STATIC CONST UINT16 ROMDATA CpuF14MicrocodeEquivalenceTable[] =
+{
+ 0x5000, 0x5000,
+ 0x5001, 0x5001,
+ 0x5010, 0x5010
+};
+
+// Unencrypted equivalent
+STATIC CONST UINT16 ROMDATA CpuF14UnEncryptedMicrocodeEquivalenceTable[] =
+{
+ 0x5000, 0x5800,
+ 0x5001, 0x5801,
+ 0x5010, 0x5810
+};
+
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Returns the appropriate microcode patch equivalent ID table.
+ *
+ * @CpuServiceMethod{::F_CPU_GET_FAMILY_SPECIFIC_ARRAY}.
+ *
+ * @param[in] FamilySpecificServices The current Family Specific Services.
+ * @param[out] OnEquivalenceTablePtr Points to the first entry in the table.
+ * @param[out] NumberOfElements Number of valid entries in the table.
+ * @param[in] StdHeader Header for library and services.
+ *
+ */
+VOID
+GetF14OnMicrocodeEquivalenceTable (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ OUT CONST VOID **OnEquivalenceTablePtr,
+ OUT UINT8 *NumberOfElements,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ UINT64 MsrMeCfg;
+
+ LibAmdMsrRead (MSR_ME_CFG, &MsrMeCfg, StdHeader);
+ if ((MsrMeCfg & 0x1000) == 0) {
+ *NumberOfElements = ((sizeof (CpuF14UnEncryptedMicrocodeEquivalenceTable) / sizeof (UINT16)) / 2);
+ *OnEquivalenceTablePtr = CpuF14UnEncryptedMicrocodeEquivalenceTable;
+ } else {
+ *NumberOfElements = ((sizeof (CpuF14MicrocodeEquivalenceTable) / sizeof (UINT16)) / 2);
+ *OnEquivalenceTablePtr = CpuF14MicrocodeEquivalenceTable;
+ }
+}
+
+
+
diff --git a/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/ON/F14OnInitEarlyTable.c b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/ON/F14OnInitEarlyTable.c
new file mode 100644
index 0000000000..f5f70bdfc7
--- /dev/null
+++ b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/ON/F14OnInitEarlyTable.c
@@ -0,0 +1,309 @@
+/* $NoKeywords:$ */
+/**
+ * @file
+ *
+ * Implements the workaround for encrypted microcode patch loading.
+ *
+ * Returns the table of initialization steps to perform at
+ * AmdInitEarly.
+ *
+ * @xrefitem bom "File Content Label" "Release Content"
+ * @e project: AGESA
+ * @e sub-project: CPU/FAMILY/0x14/ON
+ * @e \$Revision: 39275 $ @e \$Date: 2010-10-09 08:22:05 +0800 (Sat, 09 Oct 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.
+ *
+ * ***************************************************************************
+ *
+ */
+
+/*----------------------------------------------------------------------------------------
+ * M O D U L E S U S E D
+ *----------------------------------------------------------------------------------------
+ */
+#include "AGESA.h"
+#include "amdlib.h"
+#include "cpuRegisters.h"
+#include "cpuFamilyTranslation.h"
+#include "cpuEarlyInit.h"
+#include "GnbRegistersON.h"
+#include "F14OnInitEarlyTable.h"
+#include "OptionFamily14hEarlySample.h"
+#include "GeneralServices.h"
+#include "Filecode.h"
+#define FILECODE PROC_CPU_FAMILY_0X14_ON_F14ONINITEARLYTABLE_FILECODE
+
+
+/*----------------------------------------------------------------------------------------
+ * D E F I N I T I O N S A N D M A C R O S
+ *----------------------------------------------------------------------------------------
+ */
+
+// Field Data
+#define D18F4x164_FixedErrata_0_OFFSET 0
+#define D18F4x164_FixedErrata_0_WIDTH 1
+#define D18F4x164_FixedErrata_0_MASK 0x00000001
+#define D18F4x164_Reserved_31_1_OFFSET 1
+#define D18F4x164_Reserved_31_1_WIDTH 31
+#define D18F4x164_Reserved_31_1_MASK 0xFFFFFFFE
+
+extern F14_ES_CORE_SUPPORT F14EarlySampleCoreSupport;
+
+/*----------------------------------------------------------------------------------------
+ * T Y P E D E F S A N D S T R U C T U R E S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * P R O T O T Y P E S O F L O C A L F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+VOID
+F14OnLoadMicrocodePatchAtEarly (
+ IN CPU_SPECIFIC_SERVICES *FamilyServices,
+ IN AMD_CPU_EARLY_PARAMS *EarlyParams,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ );
+
+VOID
+F14OnProductionErrataAtEarly (
+ IN CPU_SPECIFIC_SERVICES *FamilyServices,
+ IN AMD_CPU_EARLY_PARAMS *EarlyParams,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ );
+
+/*----------------------------------------------------------------------------------------
+ * E X P O R T E D F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+extern F_PERFORM_EARLY_INIT_ON_CORE McaInitializationAtEarly;
+extern F_PERFORM_EARLY_INIT_ON_CORE SetRegistersFromTablesAtEarly;
+extern F_PERFORM_EARLY_INIT_ON_CORE SetBrandIdRegistersAtEarly;
+extern F_PERFORM_EARLY_INIT_ON_CORE LocalApicInitializationAtEarly;
+
+CONST S_PERFORM_EARLY_INIT_ON_CORE ROMDATA F14OnEarlyInitOnCoreTable[] =
+{
+ {McaInitializationAtEarly, PERFORM_EARLY_ANY_CONDITION},
+ {SetRegistersFromTablesAtEarly, PERFORM_EARLY_ANY_CONDITION},
+ {SetBrandIdRegistersAtEarly, PERFORM_EARLY_ANY_CONDITION},
+ {LocalApicInitializationAtEarly, PERFORM_EARLY_ANY_CONDITION},
+ {F14OnLoadMicrocodePatchAtEarly, PERFORM_EARLY_ANY_CONDITION},
+ {F14NbBufferAllocationAtEarly, PERFORM_EARLY_ANY_CONDITION},
+ {F14OnProductionErrataAtEarly, PERFORM_EARLY_ANY_CONDITION},
+ {NULL, 0}
+};
+
+/*------------------------------------------------------------------------------------*/
+/**
+ * Initializer routine that may be invoked at AmdCpuEarly to return the steps that a
+ * processor that uses the standard initialization steps should take.
+ *
+ * @CpuServiceMethod{::F_GET_EARLY_INIT_TABLE}.
+ *
+ * @param[in] FamilyServices The current Family Specific Services.
+ * @param[out] Table Table of appropriate init steps for the executing core.
+ * @param[in] EarlyParams Service Interface structure to initialize.
+ * @param[in] StdHeader Opaque handle to standard config header.
+ *
+ */
+VOID
+GetF14OnEarlyInitOnCoreTable (
+ IN CPU_SPECIFIC_SERVICES *FamilyServices,
+ OUT CONST S_PERFORM_EARLY_INIT_ON_CORE **Table,
+ IN AMD_CPU_EARLY_PARAMS *EarlyParams,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ *Table = F14OnEarlyInitOnCoreTable;
+
+ F14EarlySampleCoreSupport.F14GetEarlyInitTableHook (Table, StdHeader);
+}
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Update microcode patch in current processor for Family14h ON.
+ *
+ * This function acts as a wrapper for calling the LoadMicrocodePatch
+ * routine at AmdInitEarly.
+ *
+ * @param[in] FamilyServices The current Family Specific Services.
+ * @param[in] EarlyParams Service parameters.
+ * @param[in] StdHeader Config handle for library and services.
+ *
+ */
+VOID
+F14OnLoadMicrocodePatchAtEarly (
+ IN CPU_SPECIFIC_SERVICES *FamilyServices,
+ IN AMD_CPU_EARLY_PARAMS *EarlyParams,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ UINT64 MsrValue;
+
+ AGESA_TESTPOINT (TpProcCpuLoadUcode, StdHeader);
+ // To load a microcode patch while using the cache as general storage,
+ // the following steps are followed:
+ // 1. Program MSRC001_102B[L2AllocDcFlushVictim]=1.
+ // 2. Load the microcode patch.
+ // 3. Program MSRC001_102B[L2AllocDcFlushVictim]=0.
+ LibAmdMsrRead (MSR_BU_CFG3, &MsrValue, StdHeader);
+ MsrValue = MsrValue | BIT7;
+ LibAmdMsrWrite (MSR_BU_CFG3, &MsrValue, StdHeader);
+
+ LoadMicrocodePatch (StdHeader);
+
+ LibAmdMsrRead (MSR_BU_CFG3, &MsrValue, StdHeader);
+ MsrValue = MsrValue & ~((UINT64)BIT7);
+ LibAmdMsrWrite (MSR_BU_CFG3, &MsrValue, StdHeader);
+}
+
+/**
+ * North bridge bufer allocation for Family14h ON.
+ *
+ * This function programs North bridge buffer allocation registers and provides
+ * hook routine for override at AmdInitEarly.
+ *
+ * @param[in] FamilyServices The current Family Specific Services.
+ * @param[in] EarlyParams Service parameters.
+ * @param[in] StdHeader Config handle for library and services.
+ *
+ */
+VOID
+F14NbBufferAllocationAtEarly (
+ IN CPU_SPECIFIC_SERVICES *FamilyServices,
+ IN AMD_CPU_EARLY_PARAMS *EarlyParams,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ //Buffer allocations cannot be decreased through software, so move these register setting from register table
+ //to here to make IDS easy override
+ NB_BUFFER_ALLOCATION NbBufAllocation;
+ PCI_ADDR PciAddr;
+ AGESA_STATUS Ignored;
+
+ if (IsBsp (StdHeader, &Ignored)) {
+ PciAddr.AddressValue = MAKE_SBDFO (0, 0, 24, FUNC_3, D18F3x6C_ADDRESS);
+ LibAmdPciRead (AccessWidth32, PciAddr, &NbBufAllocation.D18F3x6C.Value, StdHeader);
+ PciAddr.Address.Register = D18F3x74_ADDRESS;
+ LibAmdPciRead (AccessWidth32, PciAddr, &NbBufAllocation.D18F3x74.Value, StdHeader);
+ PciAddr.Address.Register = D18F3x7C_ADDRESS;
+ LibAmdPciRead (AccessWidth32, PciAddr, &NbBufAllocation.D18F3x7C.Value, StdHeader);
+ PciAddr.Address.Register = D18F3x17C_ADDRESS;
+ LibAmdPciRead (AccessWidth32, PciAddr, &NbBufAllocation.D18F3x17C.Value, StdHeader);
+ //Recommend value for NB buffer allocation
+ // D18F3x6C - Upstream Data Buffer Count
+ // bits[3:0] UpLoPreqDBC = 0x0E
+ // bits[7:4] UpLoNpReqDBC = 1
+ // bits[11:8] UpLoRespDBC = 1
+ // bits[19:16] UpHiPreqDBC = 0
+ // bits[23:20] UpHiNpReqDBC = 0
+ NbBufAllocation.D18F3x6C.Field.UpLoPreqDBC = 0x0E;
+ NbBufAllocation.D18F3x6C.Field.UpLoNpreqDBC = 1;
+ NbBufAllocation.D18F3x6C.Field.UpLoRespDBC = 1;
+ NbBufAllocation.D18F3x6C.Field.UpHiPreqDBC = 0;
+ NbBufAllocation.D18F3x6C.Field.UpHiNpreqDBC = 0;
+
+ // D18F3x74 - Upstream Command Buffer Count
+ // bits[3:0] UpLoPreqCBC = 7
+ // bits[7:4] UpLoNpreqCBC = 9
+ // bits[11:8] UpLoRespCBC = 8
+ // bits[19:16] UpHiPreqCBC = 0
+ // bits[23:20] UpHiNpreqCBC = 0
+ NbBufAllocation.D18F3x74.Field.UpLoPreqCBC = 7;
+ NbBufAllocation.D18F3x74.Field.UpLoNpreqCBC = 9;
+ NbBufAllocation.D18F3x74.Field.UpLoRespCBC = 8;
+ NbBufAllocation.D18F3x74.Field.UpHiPreqCBC = 0;
+ NbBufAllocation.D18F3x74.Field.UpHiNpreqCBC = 0;
+
+ // D18F3x7C - In-Flight Queue Buffer Allocation
+ // bits[5:0] CpuBC = 1
+ // bits[13:8] LoPriPBC = 1
+ // bits[21:16] LoPriNPBC = 1
+ // bits[29:24] FreePoolBC = 0x19
+ NbBufAllocation.D18F3x7C.Field.CpuBC = 1;
+ NbBufAllocation.D18F3x7C.Field.LoPriPBC = 1;
+ NbBufAllocation.D18F3x7C.Field.LoPriNPBC = 1;
+ NbBufAllocation.D18F3x7C.Field.FreePoolBC = 0x19;
+
+ // D18F3x17C - In-Flight Queue Extended Buffer Allocation
+ // bits[5:0] HiPriPBC = 0
+ // bits[13:8] HiPriNPBC = 0
+ NbBufAllocation.D18F3x17C.Field.HiPriPBC = 0;
+ NbBufAllocation.D18F3x17C.Field.HiPriNPBC = 0;
+
+ IDS_OPTION_HOOK (IDS_NBBUFFERALLOCATIONATEARLY, &NbBufAllocation, StdHeader);
+
+ PciAddr.AddressValue = MAKE_SBDFO (0, 0, 24, FUNC_3, D18F3x6C_ADDRESS);
+ LibAmdPciWrite (AccessWidth32, PciAddr, &NbBufAllocation.D18F3x6C.Value, StdHeader);
+ PciAddr.Address.Register = D18F3x74_ADDRESS;
+ LibAmdPciWrite (AccessWidth32, PciAddr, &NbBufAllocation.D18F3x74.Value, StdHeader);
+ PciAddr.Address.Register = D18F3x7C_ADDRESS;
+ LibAmdPciWrite (AccessWidth32, PciAddr, &NbBufAllocation.D18F3x7C.Value, StdHeader);
+ PciAddr.Address.Register = D18F3x17C_ADDRESS;
+ LibAmdPciWrite (AccessWidth32, PciAddr, &NbBufAllocation.D18F3x17C.Value, StdHeader);
+ }
+}
+
+/**
+ * Production Erratum for Family14h ON.
+ *
+ * This function implements production errata for Family14h ON.
+ * routine at AmdInitEarly.
+ *
+ * @param[in] FamilyServices The current Family Specific Services.
+ * @param[in] EarlyParams Service parameters.
+ * @param[in] StdHeader Config handle for library and services.
+ *
+ */
+VOID
+F14OnProductionErrataAtEarly (
+ IN CPU_SPECIFIC_SERVICES *FamilyServices,
+ IN AMD_CPU_EARLY_PARAMS *EarlyParams,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ CPU_LOGICAL_ID LogicalId;
+ PCI_ADDR PciAddr;
+ UINT32 PciData;
+ UINT64 MsrValue;
+
+ GetLogicalIdOfCurrentCore (&LogicalId, StdHeader);
+ PciAddr.AddressValue = MAKE_SBDFO (0, 0, 24, FUNC_4, D18F4x164_ADDRESS);
+ LibAmdPciRead (AccessWidth32, PciAddr, &PciData, StdHeader);
+ if (((PciData & D18F4x164_FixedErrata_0_MASK) == 1) &&
+ ((LogicalId.Revision & ~(AMD_F14_ON_Ax | AMD_F14_UNKNOWN)) != 0)) {
+ // Program MSRC001_1020[18] = 1 only when D18F4x164[0] == 1 on ON B0 and later parts.
+ LibAmdMsrRead (MSR_LS_CFG, &MsrValue, StdHeader);
+ MsrValue = MsrValue | BIT18;
+ LibAmdMsrWrite (MSR_LS_CFG, &MsrValue, StdHeader);
+ }
+}
+
diff --git a/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/ON/F14OnInitEarlyTable.h b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/ON/F14OnInitEarlyTable.h
new file mode 100644
index 0000000000..5d6074c3e7
--- /dev/null
+++ b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/ON/F14OnInitEarlyTable.h
@@ -0,0 +1,69 @@
+/* $NoKeywords:$ */
+/**
+ * @file
+ *
+ * Implements the workaround for encrypted microcode patch loading.
+ *
+ * Returns the table of initialization steps to perform at
+ * AmdInitEarly.
+ *
+ * @xrefitem bom "File Content Label" "Release Content"
+ * @e project: AGESA
+ * @e sub-project: CPU/FAMILY/0x14/ON
+ * @e \$Revision: 37004 $ @e \$Date: 2010-08-28 02:23:00 +0800 (Sat, 28 Aug 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.
+ *
+ * ***************************************************************************
+ *
+ */
+
+VOID
+F14NbBufferAllocationAtEarly (
+ IN CPU_SPECIFIC_SERVICES *FamilyServices,
+ IN AMD_CPU_EARLY_PARAMS *EarlyParams,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ );
+
+
+/// define NB buffer allocation setting
+typedef struct _NB_BUFFER_ALLOCATION {
+ D18F3x6C_STRUCT D18F3x6C; ///< reg for D18F3x6C
+ D18F3x74_STRUCT D18F3x74; ///< reg for D18F3x74
+ D18F3x7C_STRUCT D18F3x7C; ///< reg for D18F3x7C
+ D18F3x17C_STRUCT D18F3x17C; ///< reg for D18F3x17C
+} NB_BUFFER_ALLOCATION;
+
+/// enum for ON Erratum 463 wrokaround
+typedef enum {
+ ON_ERRATUM463_WORKAROUND_DISABLE = 0, ///< work around disable
+ ON_ERRATUM463_WORKAROUND_ENABLE = 1, ///< work around enable
+} ON_ERRATUM463_WORKAROUND;
+
diff --git a/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/ON/F14OnLogicalIdTables.c b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/ON/F14OnLogicalIdTables.c
new file mode 100644
index 0000000000..82498c770b
--- /dev/null
+++ b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/ON/F14OnLogicalIdTables.c
@@ -0,0 +1,102 @@
+/* $NoKeywords:$ */
+/**
+ * @file
+ *
+ * AMD Family_14 Ontario Logical ID Table
+ *
+ * @xrefitem bom "File Content Label" "Release Content"
+ * @e project: AGESA
+ * @e sub-project: CPU/FAMILY/0x14
+ * @e \$Revision: 36248 $ @e \$Date: 2010-08-16 16:15:26 +0800 (Mon, 16 Aug 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.
+ *
+ * ***************************************************************************
+ *
+ */
+
+/*----------------------------------------------------------------------------------------
+ * M O D U L E S U S E D
+ *----------------------------------------------------------------------------------------
+ */
+#include "AGESA.h"
+#include "cpuRegisters.h"
+#include "Filecode.h"
+#define FILECODE PROC_CPU_FAMILY_0X14_ON_F14ONLOGICALIDTABLES_FILECODE
+
+/*----------------------------------------------------------------------------------------
+ * D E F I N I T I O N S A N D M A C R O S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * T Y P E D E F S A N D S T R U C T U R E S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * P R O T O T Y P E S O F L O C A L F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * E X P O R T E D F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+
+STATIC CONST CPU_LOGICAL_ID_XLAT ROMDATA CpuF14OnLogicalIdAndRevArray[] =
+{
+ {
+ 0x5000,
+ AMD_F14_ON_A0
+ },
+ {
+ 0x5001,
+ AMD_F14_ON_A1
+ },
+ {
+ 0x5010,
+ AMD_F14_ON_B0
+ }
+};
+
+VOID
+GetF14OnLogicalIdAndRev (
+ OUT CONST CPU_LOGICAL_ID_XLAT **OnIdPtr,
+ OUT UINT8 *NumberOfElements,
+ OUT UINT64 *LogicalFamily,
+ IN OUT AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ *NumberOfElements = (sizeof (CpuF14OnLogicalIdAndRevArray) / sizeof (CPU_LOGICAL_ID_XLAT));
+ *OnIdPtr = CpuF14OnLogicalIdAndRevArray;
+ *LogicalFamily = AMD_FAMILY_14_ON;
+}
+
diff --git a/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/ON/F14OnMicrocodePatchTables.c b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/ON/F14OnMicrocodePatchTables.c
new file mode 100644
index 0000000000..ba4b013d00
--- /dev/null
+++ b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/ON/F14OnMicrocodePatchTables.c
@@ -0,0 +1,102 @@
+/* $NoKeywords:$ */
+/**
+ * @file
+ *
+ * AMD Family_14 Ontario PCI tables with values as defined in BKDG
+ *
+ * @xrefitem bom "File Content Label" "Release Content"
+ * @e project: AGESA
+ * @e sub-project: CPU/Family/0x10
+ * @e \$Revision: 34897 $ @e \$Date: 2010-07-14 10:07:10 +0800 (Wed, 14 Jul 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.
+ *
+ * ***************************************************************************
+ *
+ */
+
+/*----------------------------------------------------------------------------------------
+ * M O D U L E S U S E D
+ *----------------------------------------------------------------------------------------
+ */
+#include "AGESA.h"
+#include "cpuRegisters.h"
+#include "cpuEarlyInit.h"
+#include "cpuFamilyTranslation.h"
+#include "Filecode.h"
+#define FILECODE PROC_CPU_FAMILY_0X14_ON_F14ONMICROCODEPATCHTABLES_FILECODE
+
+/*----------------------------------------------------------------------------------------
+ * D E F I N I T I O N S A N D M A C R O S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * T Y P E D E F S A N D S T R U C T U R E S
+ *----------------------------------------------------------------------------------------
+ */
+extern CONST MICROCODE_PATCHES ROMDATA *CpuF14OnMicroCodePatchArray[];
+extern CONST UINT8 ROMDATA CpuF14OnNumberOfMicrocodePatches;
+
+/*----------------------------------------------------------------------------------------
+ * P R O T O T Y P E S O F L O C A L F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * E X P O R T E D F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Returns a table containing the appropriate microcode patches.
+ *
+ * @CpuServiceMethod{::F_CPU_GET_FAMILY_SPECIFIC_ARRAY}.
+ *
+ * @param[in] FamilySpecificServices The current Family Specific Services.
+ * @param[out] OnUcodePtr Points to the first entry in the table.
+ * @param[out] NumberOfElements Number of valid entries in the table.
+ * @param[in] StdHeader Header for library and services.
+ *
+ */
+VOID
+GetF14OnMicroCodePatchesStruct (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ OUT CONST VOID **OnUcodePtr,
+ OUT UINT8 *NumberOfElements,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ *NumberOfElements = CpuF14OnNumberOfMicrocodePatches;
+ *OnUcodePtr = &CpuF14OnMicroCodePatchArray[0];
+}
+
diff --git a/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuCommonF14Utilities.c b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuCommonF14Utilities.c
new file mode 100644
index 0000000000..226e951ec3
--- /dev/null
+++ b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuCommonF14Utilities.c
@@ -0,0 +1,518 @@
+/* $NoKeywords:$ */
+/**
+ * @file
+ *
+ * AMD Family_14 specific utility functions.
+ *
+ * Provides numerous utility functions specific to family 10h.
+ *
+ * @xrefitem bom "File Content Label" "Release Content"
+ * @e project: AGESA
+ * @e sub-project: CPU/F14
+ * @e \$Revision: 39275 $ @e \$Date: 2010-10-09 08:22:05 +0800 (Sat, 09 Oct 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.
+ *
+ * ***************************************************************************
+ *
+ */
+
+/*----------------------------------------------------------------------------------------
+ * M O D U L E S U S E D
+ *----------------------------------------------------------------------------------------
+ */
+#include "AGESA.h"
+#include "amdlib.h"
+#include "Ids.h"
+#include "cpuRegisters.h"
+#include "cpuFamilyTranslation.h"
+#include "cpuCommonF14Utilities.h"
+#include "cpuF14PowerMgmt.h"
+#include "OptionFamily14hEarlySample.h"
+#include "NbSmuLib.h"
+#include "GnbRegistersON.h"
+#include "Filecode.h"
+#define FILECODE PROC_CPU_FAMILY_0X14_CPUCOMMONF14UTILITIES_FILECODE
+
+/*----------------------------------------------------------------------------------------
+ * D E F I N I T I O N S A N D M A C R O S
+ *----------------------------------------------------------------------------------------
+ */
+extern F14_ES_CORE_SUPPORT F14EarlySampleCoreSupport;
+
+/*----------------------------------------------------------------------------------------
+ * T Y P E D E F S A N D S T R U C T U R E S
+ *----------------------------------------------------------------------------------------
+ */
+CONST UINT16 ROMDATA F14MaxNbFreqAtMinVidFreqTable[] =
+{
+ 25, // 00000b
+ 50, // 00001b
+ 100, // 00010b
+ 150, // 00011b
+ 167, // 00100b
+ 183, // 00101b
+ 200, // 00110b
+ 217, // 00111b
+ 233, // 01000b
+ 250, // 01001b
+ 267, // 01010b
+ 283, // 01011b
+ 300, // 01100b
+ 317, // 01101b
+ 333, // 01110b
+ 350, // 01111b
+ 366, // 10000b
+ 383, // 10001b
+ 400, // 10010b
+ 417, // 10011b
+ 433, // 10100b
+ 450, // 10101b
+ 467, // 10110b
+ 483, // 10111b
+ 500, // 11000b
+ 517, // 11001b
+ 533, // 11010b
+ 550, // 11011b
+ 563, // 11100b
+ 575, // 11101b
+ 588, // 11110b
+ 600 // 11111b
+};
+
+/*----------------------------------------------------------------------------------------
+ * P R O T O T Y P E S O F L O C A L F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+UINT32
+STATIC
+RoundedDivision (
+ IN UINT32 Dividend,
+ IN UINT32 Divisor
+ );
+/*----------------------------------------------------------------------------------------
+ * E X P O R T E D F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Set warm reset status and count
+ *
+ * @CpuServiceMethod{::F_CPU_SET_WARM_RESET_FLAG}.
+ *
+ * This function will use bit9, and bit 10 of register F0x6C as a warm reset status and count.
+ *
+ * @param[in] FamilySpecificServices The current Family Specific Services.
+ * @param[in] StdHeader Handle of Header for calling lib functions and services.
+ * @param[in] Request Indicate warm reset status
+ *
+ */
+VOID
+F14SetAgesaWarmResetFlag (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ IN AMD_CONFIG_PARAMS *StdHeader,
+ IN WARM_RESET_REQUEST *Request
+ )
+{
+ PCI_ADDR PciAddress;
+ UINT32 PciData;
+
+ PciAddress.AddressValue = MAKE_SBDFO (0, 0 , PCI_DEV_BASE, FUNC_0, HT_INIT_CTRL);
+ LibAmdPciRead (AccessWidth32, PciAddress, &PciData, StdHeader);
+
+ // bit[5] - indicate a warm reset is or is not required
+ PciData &= ~(HT_INIT_BIOS_RST_DET_0);
+ PciData = PciData | (Request->RequestBit << 5);
+
+ // bit[10,9] - indicate warm reset status and count
+ PciData &= ~(HT_INIT_BIOS_RST_DET_1 | HT_INIT_BIOS_RST_DET_2);
+ PciData |= Request->StateBits << 9;
+
+ LibAmdPciWrite (AccessWidth32, PciAddress, &PciData, StdHeader);
+}
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Get warm reset status and count
+ *
+ * @CpuServiceMethod{::F_CPU_GET_WARM_RESET_FLAG}.
+ *
+ * This function will bit9, and bit 10 of register F0x6C as a warm reset status and count.
+ *
+ * @param[in] FamilySpecificServices The current Family Specific Services.
+ * @param[in] StdHeader Config handle for library and services
+ * @param[out] Request Indicate warm reset status
+ *
+ */
+VOID
+F14GetAgesaWarmResetFlag (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ IN AMD_CONFIG_PARAMS *StdHeader,
+ OUT WARM_RESET_REQUEST *Request
+ )
+{
+ PCI_ADDR PciAddress;
+ UINT32 PciData;
+
+ PciAddress.AddressValue = MAKE_SBDFO (0, 0 , PCI_DEV_BASE, FUNC_0, HT_INIT_CTRL);
+ LibAmdPciRead (AccessWidth32, PciAddress, &PciData, StdHeader);
+
+ // bit[5] - indicate a warm reset is or is not required
+ Request->RequestBit = (UINT8) ((PciData & HT_INIT_BIOS_RST_DET_0) >> 5);
+ // bit[10,9] - indicate warm reset status and count
+ Request->StateBits = (UINT8) ((PciData & (HT_INIT_BIOS_RST_DET_1 | HT_INIT_BIOS_RST_DET_2)) >> 9);
+}
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Use the Mailbox Register to get the Ap Mailbox info for the current core.
+ *
+ * @CpuServiceMethod{::F_CPU_AMD_GET_AP_MAILBOX_FROM_HARDWARE}.
+ *
+ * Access the mailbox register used with this NB family. This is valid until the
+ * point that some init code initializes the mailbox register for its normal use.
+ *
+ * @param[in] FamilySpecificServices The current Family Specific Services.
+ * @param[out] ApMailboxInfo The AP Mailbox info
+ * @param[in] StdHeader Handle of Header for calling lib functions and services.
+ *
+ */
+VOID
+F14GetApMailboxFromHardware (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ OUT AP_MAILBOXES *ApMailboxInfo,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ // For Family 14h, we will return socket 0, node 0, module 0, module type 0, and 0 for
+ // the system degree
+ ApMailboxInfo->ApMailInfo.Info = (UINT32) 0x00000000;
+ ApMailboxInfo->ApMailExtInfo.Info = (UINT32) 0x00000000;
+}
+
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Get this AP's system core number from hardware.
+ *
+ * @CpuServiceMethod{::F_CPU_GET_AP_CORE_NUMBER}.
+ *
+ * Returns the system core number. For family 14h, this is simply the
+ * initial APIC ID.
+ *
+ * @param[in] FamilySpecificServices The current Family Specific Services.
+ * @param[in] StdHeader Handle of Header for calling lib functions and services.
+ *
+ * @return The AP's unique core number
+ */
+UINT32
+F14GetApCoreNumber (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ CPUID_DATA Cpuid;
+
+ LibAmdCpuidRead (0x1, &Cpuid, StdHeader);
+ return ((Cpuid.EBX_Reg >> 24) & 0xFF);
+}
+
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Return a number zero or one, based on the Core ID position in the initial APIC Id.
+ *
+ * @CpuServiceMethod{::F_CORE_ID_POSITION_IN_INITIAL_APIC_ID}.
+ *
+ * @param[in] FamilySpecificServices The current Family Specific Services.
+ * @param[in] StdHeader Handle of Header for calling lib functions and services.
+ *
+ * @retval CoreIdPositionZero Core Id is not low
+ * @retval CoreIdPositionOne Core Id is low
+ */
+CORE_ID_POSITION
+F14CpuAmdCoreIdPositionInInitialApicId (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ return (CoreIdPositionOne);
+}
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Sets up a valid set of NB P-states based on the value of MEMCLK, transitions
+ * to the desired NB P-state, and returns the current NB frequency in megahertz.
+ *
+ * @param[in] TargetMemclk The target MEMCLK in megahertz, or zero to
+ * indicate NB P-state change only.
+ * @param[in] TargetMemclkEncoded The target MEMCLK's register encoding.
+ * @param[in] TargetNbPstate The NB P-state to exit in.
+ * @param[in] CurrentNbFreq Current NB operating frequency in megahertz.
+ * @param[in] StdHeader Handle of Header for calling lib functions and services.
+ *
+ * @retval TRUE Transition to TargetNbPstate was successful.
+ * @retval FALSE Transition to TargetNbPstate was unsuccessful.
+ */
+BOOLEAN
+F14NbPstateInit (
+ IN UINT32 TargetMemclk,
+ IN UINT32 TargetMemclkEncoded,
+ IN UINT32 TargetNbPstate,
+ OUT UINT32 *CurrentNbFreq,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ UINT32 EncodedNbPs1Vid;
+ UINT32 EncodedNbPs0NclkDiv;
+ UINT32 EncodedNbPs1NclkDiv;
+ UINT32 NbP0Cof;
+ UINT32 NbP1Cof;
+ UINT32 NbPstateNumerator;
+ UINT32 TargetNumerator;
+ UINT32 TargetDenominator;
+ BOOLEAN ReturnStatus;
+ PCI_ADDR PciAddress;
+ D18F3xD4_STRUCT Cptc0;
+ D18F3xDC_STRUCT Cptc2;
+ D18F6x90_STRUCT NbPsCfgLow;
+ D18F6x98_STRUCT NbPsCtrlSts;
+ FCRxFE00_6000_STRUCT FCRxFE00_6000;
+ FCRxFE00_6002_STRUCT FCRxFE00_6002;
+ FCRxFE00_7006_STRUCT FCRxFE00_7006;
+ FCRxFE00_7009_STRUCT FCRxFE00_7009;
+
+ // F14 only supports NB P0 and NB P1
+ ASSERT (TargetNbPstate < 2);
+
+ ReturnStatus = TRUE;
+
+ // Get D18F3xD4[MainPllOpFreqId] frequency
+ PciAddress.AddressValue = CPTC0_PCI_ADDR;
+ LibAmdPciRead (AccessWidth32, PciAddress, &Cptc0.Value, StdHeader);
+
+ // Calculate the numerator to be used for NB P-state calculations
+ NbPstateNumerator = (UINT32) (4 * ((Cptc0.Field.MainPllOpFreqId + 0x10) * 100));
+
+ if (TargetMemclk != 0) {
+ // Determine the appropriate numerator / denominator of the target memclk
+ switch (TargetMemclk) {
+ case DDR800_FREQUENCY:
+ TargetNumerator = 400;
+ TargetDenominator = 1;
+ break;
+ case DDR1066_FREQUENCY:
+ TargetNumerator = 1600;
+ TargetDenominator = 3;
+ break;
+ case DDR1333_FREQUENCY:
+ TargetNumerator = 2000;
+ TargetDenominator = 3;
+ break;
+ default:
+ // An invalid memclk has been passed in.
+ ASSERT (FALSE);
+ TargetNumerator = TargetMemclk;
+ TargetDenominator = 1;
+ break;
+ }
+
+ FCRxFE00_6000.Value = NbSmuReadEfuse (FCRxFE00_6000_ADDRESS, StdHeader);
+ FCRxFE00_6002.Value = NbSmuReadEfuse (FCRxFE00_6002_ADDRESS, StdHeader);
+ FCRxFE00_7006.Value = NbSmuReadEfuse (FCRxFE00_7006_ADDRESS, StdHeader);
+ FCRxFE00_7009.Value = NbSmuReadEfuse (FCRxFE00_7009_ADDRESS, StdHeader);
+
+ F14EarlySampleCoreSupport.F14NbPstateInitHook (&FCRxFE00_6000,
+ &FCRxFE00_6002,
+ &FCRxFE00_7006,
+ &FCRxFE00_7009,
+ NbPstateNumerator,
+ StdHeader);
+
+ // Determine NB P0 settings
+ if ((TargetNumerator * FCRxFE00_7009.Field.NbPs0NclkDiv) < (NbPstateNumerator * TargetDenominator)) {
+ // Program D18F3xDC[NbPs0NclkDiv] to the minimum divisor where
+ // (target memclk frequency >= (D18F3xD4[MainPllOpFreqId] freq) / divisor)
+ EncodedNbPs0NclkDiv = ((NbPstateNumerator * TargetDenominator) / TargetNumerator);
+ if (((NbPstateNumerator * TargetDenominator) % TargetNumerator) != 0) {
+ EncodedNbPs0NclkDiv++;
+ }
+ // Ensure that the encoded divisor is even to give 50% duty cycle
+ EncodedNbPs0NclkDiv = ((EncodedNbPs0NclkDiv + 1) & 0xFFFFFFFE);
+
+ ASSERT (EncodedNbPs0NclkDiv >= 8);
+ ASSERT (EncodedNbPs0NclkDiv <= 0x3F);
+ } else {
+ EncodedNbPs0NclkDiv = FCRxFE00_7009.Field.NbPs0NclkDiv;
+ }
+
+ // Check to see if the DIMMs are too fast for the CPU (NB P0 COF < (Memclk / 2))
+ if ((TargetNumerator * EncodedNbPs0NclkDiv) > (NbPstateNumerator * TargetDenominator * 2)) {
+ // Indicate the error to the memory code so the DIMMs can be derated.
+ ReturnStatus = FALSE;
+ }
+
+ // Apply the appropriate P0 frequency
+ PciAddress.AddressValue = CPTC2_PCI_ADDR;
+ LibAmdPciRead (AccessWidth32, PciAddress, &Cptc2.Value, StdHeader);
+ Cptc2.Field.NbPs0NclkDiv = EncodedNbPs0NclkDiv;
+ LibAmdPciWrite (AccessWidth32, PciAddress, &Cptc2.Value, StdHeader);
+ NbP0Cof = RoundedDivision (NbPstateNumerator, EncodedNbPs0NclkDiv);
+
+ // Determine NB P1 settings if necessary
+ PciAddress.AddressValue = NB_PSTATE_CFG_LOW_PCI_ADDR;
+ LibAmdPciRead (AccessWidth32, PciAddress, &NbPsCfgLow.Value, StdHeader);
+ if (NbPsCfgLow.Field.NbPsCap == 1) {
+ if ((TargetNumerator * FCRxFE00_7006.Field.NbPs1NclkDiv) > (NbPstateNumerator * TargetDenominator * 2)) {
+ // Program D18F6x90[NbPs1NclkDiv] to the maximum divisor where
+ // (target memclk frequency / 2 <= (D18F3xD4[MainPllOpFreqId] freq) / divisor)
+ EncodedNbPs1NclkDiv = ((NbPstateNumerator * TargetDenominator * 2) / TargetNumerator);
+
+ // Ensure that the encoded divisor is even to give 50% duty cycle
+ EncodedNbPs1NclkDiv &= 0xFFFFFFFE;
+ ASSERT (EncodedNbPs1NclkDiv >= 8);
+ ASSERT (EncodedNbPs1NclkDiv <= 0x3F);
+
+ // Calculate the new effective P1 frequency to determine the voltage
+ NbP1Cof = RoundedDivision (NbPstateNumerator, EncodedNbPs1NclkDiv);
+
+ if (NbP1Cof <= F14MaxNbFreqAtMinVidFreqTable[FCRxFE00_7006.Field.MaxNbFreqAtMinVid]) {
+ // Program D18F6x90[NbPs1Vid] = FCRxFE00_6002[NbPs1VidAddl]
+ EncodedNbPs1Vid = FCRxFE00_6002.Field.NbPs1VidAddl;
+ } else {
+ // Program D18F6x90[NbPs1Vid] = FCRxFE00_6002[NbPs1VidHigh]
+ EncodedNbPs1Vid = FCRxFE00_6002.Field.NbPs1VidHigh;
+ }
+ } else {
+ // Fused frequency and voltage are legal
+ EncodedNbPs1Vid = FCRxFE00_6000.Field.NbPs1Vid;
+ EncodedNbPs1NclkDiv = FCRxFE00_7006.Field.NbPs1NclkDiv;
+ NbP1Cof = RoundedDivision (NbPstateNumerator, EncodedNbPs1NclkDiv);
+ }
+
+ if (NbP0Cof < NbP1Cof) {
+ // NB P1 frequency is faster than NB P0. Fix it up by slowing
+ // P1 to match P0.
+ EncodedNbPs1NclkDiv = EncodedNbPs0NclkDiv;
+ NbP1Cof = NbP0Cof;
+ }
+
+ // Program the new NB P1 settings
+ NbPsCfgLow.Field.NbPs1NclkDiv = EncodedNbPs1NclkDiv;
+ NbPsCfgLow.Field.NbPs1Vid = EncodedNbPs1Vid;
+ LibAmdPciWrite (AccessWidth32, PciAddress, &NbPsCfgLow.Value, StdHeader);
+ } else {
+ // NB P-states are not enabled
+ NbP1Cof = 0;
+ }
+ *CurrentNbFreq = NbP0Cof;
+ } else {
+ // Get NB P0 COF
+ PciAddress.AddressValue = CPTC2_PCI_ADDR;
+ LibAmdPciRead (AccessWidth32, PciAddress, &Cptc2.Value, StdHeader);
+ NbP0Cof = RoundedDivision (NbPstateNumerator, Cptc2.Field.NbPs0NclkDiv);
+
+ // Read NB P-state status
+ PciAddress.AddressValue = NB_PSTATE_CTRL_STS_PCI_ADDR;
+ LibAmdPciRead (AccessWidth32, PciAddress, &NbPsCtrlSts.Value, StdHeader);
+
+ // Read low config register
+ PciAddress.AddressValue = NB_PSTATE_CFG_LOW_PCI_ADDR;
+ LibAmdPciRead (AccessWidth32, PciAddress, &NbPsCfgLow.Value, StdHeader);
+ if (TargetNbPstate == 1) {
+ // If target is P1, the CPU MUST be in P0, otherwise the P1 settings
+ // cannot be realized. This is a programming error.
+ ASSERT (NbPsCtrlSts.Field.NbPs1Act == 0);
+
+ if (NbPsCfgLow.Field.NbPsCap == 1) {
+ // The part is capable of NB P-states. Transition to P1.
+ NbPsCfgLow.Field.NbPsForceSel = 1;
+ LibAmdPciWrite (AccessWidth32, PciAddress, &NbPsCfgLow.Value, StdHeader);
+
+ // Wait for the transition to complete.
+ PciAddress.AddressValue = NB_PSTATE_CTRL_STS_PCI_ADDR;
+ do {
+ LibAmdPciRead (AccessWidth32, PciAddress, &NbPsCtrlSts.Value, StdHeader);
+ } while (NbPsCtrlSts.Field.NbPs1Act != 1);
+
+ *CurrentNbFreq = RoundedDivision (NbPstateNumerator, NbPsCfgLow.Field.NbPs1NclkDiv);
+ } else {
+ // No NB P-states. Return FALSE, and set current frequency to P0.
+ *CurrentNbFreq = NbP0Cof;
+ ReturnStatus = FALSE;
+ }
+ } else {
+ // Target P0
+ *CurrentNbFreq = NbP0Cof;
+ if (NbPsCtrlSts.Field.NbPs1Act != 0) {
+ // Request transition to P0
+ NbPsCfgLow.Field.NbPsForceSel = 0;
+ LibAmdPciWrite (AccessWidth32, PciAddress, &NbPsCfgLow.Value, StdHeader);
+ }
+ }
+ }
+
+ // Ensure that the frequency has settled before returning to memory code.
+ PciAddress.AddressValue = CPTC2_PCI_ADDR;
+ do {
+ LibAmdPciRead (AccessWidth32, PciAddress, &Cptc2.Value, StdHeader);
+ } while (Cptc2.Field.NclkFreqDone != 1);
+
+ return ReturnStatus;
+}
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Performs integer division, and rounds the quotient up if the remainder is greater
+ * than or equal to 50% of the divisor.
+ *
+ * @param[in] Dividend The target MEMCLK in megahertz.
+ * @param[in] Divisor The target MEMCLK's register encoding.
+ *
+ * @return The rounded quotient
+ */
+UINT32
+STATIC
+RoundedDivision (
+ IN UINT32 Dividend,
+ IN UINT32 Divisor
+ )
+{
+ UINT32 Quotient;
+
+ ASSERT (Divisor != 0);
+
+ Quotient = Dividend / Divisor;
+ if (((Dividend % Divisor) * 2) >= Divisor) {
+ Quotient++;
+ }
+ return Quotient;
+}
diff --git a/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuCommonF14Utilities.h b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuCommonF14Utilities.h
new file mode 100644
index 0000000000..e40dccbf97
--- /dev/null
+++ b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuCommonF14Utilities.h
@@ -0,0 +1,104 @@
+/* $NoKeywords:$ */
+/**
+ * @file
+ *
+ * AMD Family 14h specific utility functions
+ *
+ * Provides numerous utility functions specific to Family 14h
+ *
+ * @xrefitem bom "File Content Label" "Release Content"
+ * @e project: AGESA
+ * @e sub-project: CPU/Family/0x14
+ * @e \$Revision: 37640 $ @e \$Date: 2010-09-08 23:01:59 +0800 (Wed, 08 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 _CPU_COMMON_F14_UTILITES_H_
+#define _CPU_COMMON_F14_UTILITES_H_
+
+
+/*---------------------------------------------------------------------------------------
+ * M I X E D (Definitions And Macros / Typedefs, Structures, Enums)
+ *---------------------------------------------------------------------------------------
+ */
+
+
+/*---------------------------------------------------------------------------------------
+ * D E F I N I T I O N S A N D M A C R O S
+ *---------------------------------------------------------------------------------------
+ */
+
+
+/*---------------------------------------------------------------------------------------
+ * T Y P E D E F S, S T R U C T U R E S, E N U M S
+ *---------------------------------------------------------------------------------------
+ */
+
+
+/*---------------------------------------------------------------------------------------
+ * F U N C T I O N P R O T O T Y P E
+ *---------------------------------------------------------------------------------------
+ */
+
+VOID
+F14SetAgesaWarmResetFlag (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ IN AMD_CONFIG_PARAMS *StdHeader,
+ IN WARM_RESET_REQUEST *Request
+ );
+
+VOID
+F14GetAgesaWarmResetFlag (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ IN AMD_CONFIG_PARAMS *StdHeader,
+ OUT WARM_RESET_REQUEST *Request
+ );
+
+VOID
+F14GetApMailboxFromHardware (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ OUT AP_MAILBOXES *ApMailboxInfo,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ );
+
+BOOLEAN
+F14NbPstateInit (
+ IN UINT32 TargetMemclk,
+ IN UINT32 TargetMemclkEncoded,
+ IN UINT32 TargetNbPstate,
+ OUT UINT32 *CurrentNbFreq,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ );
+
+#endif // _CPU_COMMON_F14_UTILITES_H_
diff --git a/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14BrandId.c b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14BrandId.c
new file mode 100644
index 0000000000..db19787391
--- /dev/null
+++ b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14BrandId.c
@@ -0,0 +1,139 @@
+/* $NoKeywords:$ */
+/**
+ * @file
+ *
+ * AMD CPU BrandId related functions and structures.
+ *
+ * Contains code that provides CPU BrandId information
+ *
+ * @xrefitem bom "File Content Label" "Release Content"
+ * @e project: AGESA
+ * @e sub-project: CPU
+ * @e \$Revision: 36556 $ @e \$Date: 2010-08-21 01:25:52 +0800 (Sat, 21 Aug 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.
+ *
+ * ***************************************************************************
+ *
+ */
+
+/*----------------------------------------------------------------------------------------
+ * M O D U L E S U S E D
+ *----------------------------------------------------------------------------------------
+ */
+#include "AGESA.h"
+#include "cpuRegisters.h"
+#include "cpuEarlyInit.h"
+#include "cpuFamilyTranslation.h"
+#include "Filecode.h"
+#define FILECODE PROC_CPU_FAMILY_0X14_CPUF14BRANDID_FILECODE
+
+/*----------------------------------------------------------------------------------------
+ * D E F I N I T I O N S A N D M A C R O S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * T Y P E D E F S A N D S T R U C T U R E S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * P R O T O T Y P E S O F L O C A L F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * E X P O R T E D F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+extern CPU_BRAND_TABLE *F14BrandIdString1Tables[];
+extern CPU_BRAND_TABLE *F14BrandIdString2Tables[];
+extern CONST UINT8 F14BrandIdString1TableCount;
+extern CONST UINT8 F14BrandIdString2TableCount;
+
+/*---------------------------------------------------------------------------------------
+ * T Y P E D E F S, S T R U C T U R E S, E N U M S
+ *---------------------------------------------------------------------------------------
+ */
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Returns a table containing the appropriate beginnings of the CPU brandstring.
+ *
+ * @CpuServiceMethod{::F_CPU_GET_FAMILY_SPECIFIC_ARRAY}.
+ *
+ * @param[in] FamilySpecificServices The current Family Specific Services.
+ * @param[out] BrandString1Ptr Points to the first entry in the table.
+ * @param[out] NumberOfElements Number of valid entries in the table.
+ * @param[in] StdHeader Header for library and services.
+ *
+ */
+VOID
+GetF14BrandIdString1 (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ OUT CONST VOID **BrandString1Ptr,
+ OUT UINT8 *NumberOfElements,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ CPU_BRAND_TABLE **TableEntryPtr;
+
+ TableEntryPtr = &F14BrandIdString1Tables[0];
+ *BrandString1Ptr = TableEntryPtr;
+ *NumberOfElements = F14BrandIdString1TableCount;
+}
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Returns a table containing the appropriate endings of the CPU brandstring.
+ *
+ * @CpuServiceMethod{::F_CPU_GET_FAMILY_SPECIFIC_ARRAY}.
+ *
+ * @param[in] FamilySpecificServices The current Family Specific Services.
+ * @param[out] BrandString2Ptr Points to the first entry in the table.
+ * @param[out] NumberOfElements Number of valid entries in the table.
+ * @param[in] StdHeader Header for library and services.
+ *
+ */
+VOID
+GetF14BrandIdString2 (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ OUT CONST VOID **BrandString2Ptr,
+ OUT UINT8 *NumberOfElements,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ CPU_BRAND_TABLE **TableEntryPtr;
+
+ TableEntryPtr = &F14BrandIdString2Tables[0];
+ *BrandString2Ptr = TableEntryPtr;
+ *NumberOfElements = F14BrandIdString2TableCount;
+}
diff --git a/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14BrandIdFt1.c b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14BrandIdFt1.c
new file mode 100644
index 0000000000..2d4e34d2d4
--- /dev/null
+++ b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14BrandIdFt1.c
@@ -0,0 +1,145 @@
+/* $NoKeywords:$ */
+/**
+ * @file
+ *
+ * AMD CPU BrandId related functions and structures.
+ *
+ * Contains code that provides CPU BrandId information
+ *
+ * @xrefitem bom "File Content Label" "Release Content"
+ * @e project: AGESA
+ * @e sub-project: CPU
+ * @e \$Revision: 40034 $ @e \$Date: 2010-10-19 04:03:22 +0800 (Tue, 19 Oct 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.
+ *
+ * ***************************************************************************
+ *
+ */
+
+/*----------------------------------------------------------------------------------------
+ * M O D U L E S U S E D
+ *----------------------------------------------------------------------------------------
+ */
+#include "AGESA.h"
+#include "cpuRegisters.h"
+#include "cpuEarlyInit.h"
+#include "F14PackageType.h"
+
+/*----------------------------------------------------------------------------------------
+ * D E F I N I T I O N S A N D M A C R O S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * T Y P E D E F S A N D S T R U C T U R E S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * P R O T O T Y P E S O F L O C A L F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * E X P O R T E D F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+
+// String1
+CONST CHAR8 ROMDATA str_AMD_C[] = "AMD C-";
+CONST CHAR8 ROMDATA str_AMD_E[] = "AMD E-";
+CONST CHAR8 ROMDATA str_AMD_G_T[] = "AMD G-T";
+
+// String2
+CONST CHAR8 ROMDATA str___Processor[] = " Processor";
+CONST CHAR8 ROMDATA str___0_Processor[] = "0 Processor";
+CONST CHAR8 ROMDATA str_5_Processor[] = "5 Processor";
+CONST CHAR8 ROMDATA str_0x_Processor[] = "0x Processor";
+CONST CHAR8 ROMDATA str_5x_Processor[] = "5x Processor";
+CONST CHAR8 ROMDATA str_x_Processor[] = "x Processor";
+CONST CHAR8 ROMDATA str_L_Processor[] = "L Processor";
+CONST CHAR8 ROMDATA str_N_Processor[] = "N Processor";
+CONST CHAR8 ROMDATA str_R_Processor[] = "R Processor";
+
+/*---------------------------------------------------------------------------------------
+ * T Y P E D E F S, S T R U C T U R E S, E N U M S
+ *---------------------------------------------------------------------------------------
+ */
+
+CONST AMD_CPU_BRAND ROMDATA CpuF14OnBrandIdString1ArrayFt1[] =
+{
+ // FT1
+ {1, 0, 1, ON_SOCKET_FT1, str_AMD_C, sizeof (str_AMD_C)},
+ {2, 0, 1, ON_SOCKET_FT1, str_AMD_C, sizeof (str_AMD_C)},
+ {1, 0, 2, ON_SOCKET_FT1, str_AMD_E, sizeof (str_AMD_E)},
+ {2, 0, 2, ON_SOCKET_FT1, str_AMD_E, sizeof (str_AMD_E)},
+ {1, 0, 4, ON_SOCKET_FT1, str_AMD_G_T, sizeof (str_AMD_G_T)},
+ {2, 0, 4, ON_SOCKET_FT1, str_AMD_G_T, sizeof (str_AMD_G_T)}
+}; //Cores, page, index, socket, stringstart, stringlength
+
+
+CONST AMD_CPU_BRAND ROMDATA CpuF14OnBrandIdString2ArrayFt1[] =
+{
+ // FT1
+ {1, 0, 0x01, ON_SOCKET_FT1, str___Processor, sizeof (str___Processor)},
+ {2, 0, 0x01, ON_SOCKET_FT1, str___Processor, sizeof (str___Processor)},
+ {1, 0, 0x02, ON_SOCKET_FT1, str___0_Processor, sizeof (str___0_Processor)},
+ {2, 0, 0x02, ON_SOCKET_FT1, str___0_Processor, sizeof (str___0_Processor)},
+ {1, 0, 0x03, ON_SOCKET_FT1, str_5_Processor, sizeof (str_5_Processor)},
+ {2, 0, 0x03, ON_SOCKET_FT1, str_5_Processor, sizeof (str_5_Processor)},
+ {1, 0, 0x04, ON_SOCKET_FT1, str_0x_Processor, sizeof (str_0x_Processor)},
+ {2, 0, 0x04, ON_SOCKET_FT1, str_0x_Processor, sizeof (str_0x_Processor)},
+ {1, 0, 0x05, ON_SOCKET_FT1, str_5x_Processor, sizeof (str_5x_Processor)},
+ {2, 0, 0x05, ON_SOCKET_FT1, str_5x_Processor, sizeof (str_5x_Processor)},
+ {1, 0, 0x06, ON_SOCKET_FT1, str_x_Processor, sizeof (str_x_Processor)},
+ {2, 0, 0x06, ON_SOCKET_FT1, str_x_Processor, sizeof (str_x_Processor)},
+ {1, 0, 0x07, ON_SOCKET_FT1, str_L_Processor, sizeof (str_L_Processor)},
+ {2, 0, 0x07, ON_SOCKET_FT1, str_L_Processor, sizeof (str_L_Processor)},
+ {1, 0, 0x08, ON_SOCKET_FT1, str_N_Processor, sizeof (str_N_Processor)},
+ {2, 0, 0x08, ON_SOCKET_FT1, str_N_Processor, sizeof (str_N_Processor)},
+ {1, 0, 0x09, ON_SOCKET_FT1, str_R_Processor, sizeof (str_R_Processor)},
+ {1, 0, 0x0F, ON_SOCKET_FT1, 0, 0}, //Size 0 for no suffix
+ {2, 0, 0x0F, ON_SOCKET_FT1, 0, 0}, //Size 0 for no suffix
+ }; //Cores, page, index, socket, stringstart, stringlength
+
+
+CONST CPU_BRAND_TABLE ROMDATA F14OnBrandIdString1ArrayFt1 = {
+ (sizeof (CpuF14OnBrandIdString1ArrayFt1) / sizeof (AMD_CPU_BRAND)),
+ CpuF14OnBrandIdString1ArrayFt1
+};
+
+
+CONST CPU_BRAND_TABLE ROMDATA F14OnBrandIdString2ArrayFt1 = {
+ (sizeof (CpuF14OnBrandIdString2ArrayFt1) / sizeof (AMD_CPU_BRAND)),
+ CpuF14OnBrandIdString2ArrayFt1
+};
+
+
diff --git a/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14CacheDefaults.c b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14CacheDefaults.c
new file mode 100644
index 0000000000..dbead6d19f
--- /dev/null
+++ b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14CacheDefaults.c
@@ -0,0 +1,123 @@
+/* $NoKeywords:$ */
+/**
+ * @file
+ *
+ * AMD Family_14 ROM Execution Cache Defaults
+ *
+ * Contains default values for ROM execution cache setup
+ *
+ * @xrefitem bom "File Content Label" "Release Content"
+ * @e project: AGESA
+ * @e sub-project: CPU/Family/0x14
+ * @e \$Revision: 36376 $ @e \$Date: 2010-08-18 00:17:10 +0800 (Wed, 18 Aug 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.
+ *
+ * ***************************************************************************
+ *
+ */
+
+/*----------------------------------------------------------------------------------------
+ * M O D U L E S U S E D
+ *----------------------------------------------------------------------------------------
+ */
+#include "AGESA.h"
+#include "cpuCacheInit.h"
+#include "cpuFamilyTranslation.h"
+#include "Filecode.h"
+#define FILECODE PROC_CPU_FAMILY_0X14_CPUF14CACHEDEFAULTS_FILECODE
+
+/*----------------------------------------------------------------------------------------
+ * D E F I N I T I O N S A N D M A C R O S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * T Y P E D E F S A N D S T R U C T U R E S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * P R O T O T Y P E S O F L O C A L F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * E X P O R T E D F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+#define BSP_STACK_SIZE 16384
+#define CORE0_STACK_SIZE 16384
+#define CORE1_STACK_SIZE 4096
+#define MEM_TRAINING_BUFFER_SIZE 16384
+#define VAR_MTRR_MASK 0x0000000FFFFFFFFF
+
+#define HEAP_BASE_MASK 0x0000000FFFFFFFFF
+
+#define SHARED_MEM_SIZE 0
+
+CONST CACHE_INFO ROMDATA CpuF14CacheInfo =
+{
+ BSP_STACK_SIZE,
+ CORE0_STACK_SIZE,
+ CORE1_STACK_SIZE,
+ MEM_TRAINING_BUFFER_SIZE,
+ SHARED_MEM_SIZE,
+ VAR_MTRR_MASK,
+ VAR_MTRR_MASK,
+ HEAP_BASE_MASK,
+ InfiniteExe
+};
+
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Returns the family specific properties of the cache, and its usage.
+ *
+ * @CpuServiceMethod{::F_CPU_GET_FAMILY_SPECIFIC_ARRAY}.
+ *
+ * @param[in] FamilySpecificServices The current Family Specific Services.
+ * @param[out] CacheInfoPtr Points to the cache info properties on exit.
+ * @param[out] NumberOfElements Will be one to indicate one entry.
+ * @param[in] StdHeader Header for library and services.
+ *
+ */
+VOID
+GetF14CacheInfo (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ OUT CONST VOID **CacheInfoPtr,
+ OUT UINT8 *NumberOfElements,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ *NumberOfElements = 1;
+ *CacheInfoPtr = &CpuF14CacheInfo;
+}
+
diff --git a/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14Dmi.c b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14Dmi.c
new file mode 100644
index 0000000000..50ce4d1cb8
--- /dev/null
+++ b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14Dmi.c
@@ -0,0 +1,272 @@
+/* $NoKeywords:$ */
+/**
+ * @file
+ *
+ * AMD DMI Record Creation API, and related functions.
+ *
+ * Contains code that produce the DMI related information.
+ *
+ * @xrefitem bom "File Content Label" "Release Content"
+ * @e project: AGESA
+ * @e sub-project: CPU
+ * @e \$Revision: 38893 $ @e \$Date: 2010-10-01 23:54:37 +0800 (Fri, 01 Oct 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.
+ *
+ * ***************************************************************************
+ *
+ */
+
+/*----------------------------------------------------------------------------------------
+ * M O D U L E S U S E D
+ *----------------------------------------------------------------------------------------
+ */
+#include "AGESA.h"
+#include "amdlib.h"
+#include "cpuRegisters.h"
+#include "OptionDmi.h"
+#include "cpuLateInit.h"
+#include "cpuF14PowerMgmt.h"
+#include "cpuFamilyTranslation.h"
+#include "cpuPstateTables.h"
+#include "cpuF14Utilities.h"
+#include "Filecode.h"
+#define FILECODE PROC_CPU_FAMILY_0X14_CPUF14DMI_FILECODE
+
+/*----------------------------------------------------------------------------------------
+ * D E F I N I T I O N S A N D M A C R O S
+ *----------------------------------------------------------------------------------------
+ */
+extern CPU_FAMILY_SUPPORT_TABLE PstateFamilyServiceTable;
+
+/*----------------------------------------------------------------------------------------
+ * T Y P E D E F S A N D S T R U C T U R E S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * P R O T O T Y P E S O F L O C A L F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * E X P O R T E D F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+
+/* -----------------------------------------------------------------------------*/
+/**
+ *
+ * DmiF14GetInfo
+ *
+ * Get CPU type information
+ *
+ * @param[in,out] CpuInfoPtr Pointer to CPU_TYPE_INFO struct.
+ * @param[in] StdHeader Standard Head Pointer
+ *
+ */
+VOID
+DmiF14GetInfo (
+ IN OUT CPU_TYPE_INFO *CpuInfoPtr,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ CPUID_DATA CpuId;
+
+ LibAmdCpuidRead (AMD_CPUID_FMF, &CpuId, StdHeader);
+ CpuInfoPtr->ExtendedFamily = (UINT8) (CpuId.EAX_Reg >> 20) & 0xFF; // bit 27:20
+ CpuInfoPtr->ExtendedModel = (UINT8) (CpuId.EAX_Reg >> 16) & 0xF; // bit 19:16
+ CpuInfoPtr->BaseFamily = (UINT8) (CpuId.EAX_Reg >> 8) & 0xF; // bit 11:8
+ CpuInfoPtr->BaseModel = (UINT8) (CpuId.EAX_Reg >> 4) & 0xF; // bit 7:4
+ CpuInfoPtr->Stepping = (UINT8) (CpuId.EAX_Reg & 0xF); // bit 3:0
+
+ CpuInfoPtr->PackageType = (UINT8) (CpuId.EBX_Reg >> 28) & 0xF; // bit 31:28
+ CpuInfoPtr->BrandId.Pg = (UINT8) (CpuId.EBX_Reg >> 15) & 0x1; // bit 15
+ CpuInfoPtr->BrandId.String1 = (UINT8) (CpuId.EBX_Reg >> 11) & 0xF; // bit 14:11
+ CpuInfoPtr->BrandId.Model = (UINT8) (CpuId.EBX_Reg >> 4) & 0x7F; // bit 10:4
+ CpuInfoPtr->BrandId.String2 = (UINT8) (CpuId.EBX_Reg & 0xF); // bit 3:0
+
+ LibAmdCpuidRead (AMD_CPUID_ASIZE_PCCOUNT, &CpuId, StdHeader);
+ CpuInfoPtr->TotalCoreNumber = (UINT8) (CpuId.ECX_Reg & 0xFF); // bit 7:0
+ CpuInfoPtr->EnabledCoreNumber = (UINT8) (CpuId.ECX_Reg & 0xFF); // bit 7:0
+
+ switch (CpuInfoPtr->PackageType) {
+ case ON_SOCKET_FT1:
+ CpuInfoPtr->ProcUpgrade = P_UPGRADE_NONE;
+ break;
+ default:
+ CpuInfoPtr->ProcUpgrade = P_UPGRADE_UNKNOWN;
+ break;
+ }
+
+}
+
+/* -----------------------------------------------------------------------------*/
+/**
+ *
+ * DmiF14GetVoltage
+ *
+ * Get the voltage value according to SMBIOS SPEC's requirement.
+ *
+ * @param[in] StdHeader Standard Head Pointer
+ *
+ * @retval Voltage - CPU Voltage.
+ *
+ */
+UINT8
+DmiF14GetVoltage (
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ UINT8 MaxVid;
+ UINT8 Voltage;
+ UINT64 MsrData;
+
+ // Voltage = 0x80 + (voltage at boot time * 10)
+ LibAmdMsrRead (MSR_COFVID_STS, &MsrData, StdHeader);
+ MaxVid = (UINT8) (((COFVID_STS_MSR *)&MsrData)->MaxVid);
+ if (MaxVid == 0) {
+ LibAmdMsrRead (MSR_PSTATE_0, &MsrData, StdHeader);
+ MaxVid = (UINT8) (((PSTATE_MSR *)&MsrData)->CpuVid);
+ }
+
+ if ((MaxVid >= 0x7C) && (MaxVid <= 0x7F)) {
+ Voltage = 0;
+ } else {
+ Voltage = (UINT8) ((15500 - (125 * MaxVid) + 500) / 1000);
+ }
+
+ Voltage += 0x80;
+ return (Voltage);
+}
+
+/* -----------------------------------------------------------------------------*/
+/**
+ *
+ * DmiF14GetMaxSpeed
+ *
+ * Get the Max Speed
+ *
+ * @param[in] StdHeader Standard Head Pointer
+ *
+ * @retval MaxSpeed - CPU Max Speed.
+ *
+ */
+UINT16
+DmiF14GetMaxSpeed (
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ UINT32 P0Frequency;
+ PSTATE_CPU_FAMILY_SERVICES *FamilyServices;
+
+ FamilyServices = NULL;
+ GetFeatureServicesOfCurrentCore (&PstateFamilyServiceTable, &FamilyServices, StdHeader);
+ ASSERT (FamilyServices != NULL);
+
+ FamilyServices->GetPstateFrequency (FamilyServices, (UINT8) 0x00, &P0Frequency, StdHeader);
+ return ((UINT16) P0Frequency);
+}
+
+/* -----------------------------------------------------------------------------*/
+/**
+ *
+ * DmiF14GetExtClock
+ *
+ * Get the external clock Speed
+ *
+ * @param[in, out] StdHeader Standard Head Pointer
+ *
+ * @retval ExtClock - CPU external clock Speed.
+ *
+ */
+UINT16
+DmiF14GetExtClock (
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ return (EXTERNAL_CLOCK_100MHZ);
+}
+
+/* -----------------------------------------------------------------------------*/
+/**
+ *
+ * DmiF14GetMemInfo
+ *
+ * Get memory information.
+ *
+ * @param[in,out] CpuGetMemInfoPtr Pointer to CPU_GET_MEM_INFO struct.
+ * @param[in] StdHeader Standard Head Pointer
+ *
+ */
+VOID
+DmiF14GetMemInfo (
+ IN OUT CPU_GET_MEM_INFO *CpuGetMemInfoPtr,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ // Ontario only has one DCT and does NOT support ECC DIMM
+ CpuGetMemInfoPtr->EccCapable = FALSE;
+ // Partition Row Position - 2 is for single channel memory
+ CpuGetMemInfoPtr->PartitionRowPosition = 2;
+}
+
+/*---------------------------------------------------------------------------------------
+ * Processor Family Table
+ *
+ * Note: 'x' means we don't care this field
+ * 002h = "Unknown"
+ *-------------------------------------------------------------------------------------*/
+CONST DMI_BRAND_ENTRY ROMDATA Family14BrandList[] =
+{
+ // Brand --> DMI ID translation table
+ // PackageType, PgOfBrandId, NumberOfCores, String1ofBrandId, ValueSetToDmiTable
+ {0, 0, 'x', 1, 0x46},
+ {0, 0, 'x', 2, 0x47},
+ {'x', 'x', 'x', 'x', 0x02}
+};
+
+CONST PROC_FAMILY_TABLE ROMDATA ProcFamily14DmiTable =
+{
+ AMD_FAMILY_14, // ID for Family 14h
+ &DmiF14GetInfo, // Transfer vectors for family
+ &DmiF14GetVoltage, // specific routines (above)
+ &DmiF14GetMaxSpeed,
+ &DmiF14GetExtClock,
+ &DmiF14GetMemInfo, // Get memory information
+ (sizeof (Family14BrandList) / sizeof (Family14BrandList[0])), // Number of entries in following table
+ &Family14BrandList[0]
+};
+
+
+/*---------------------------------------------------------------------------------------
+ * L O C A L F U N C T I O N S
+ *---------------------------------------------------------------------------------------
+ */
diff --git a/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14MsrTables.c b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14MsrTables.c
new file mode 100644
index 0000000000..eeb417317d
--- /dev/null
+++ b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14MsrTables.c
@@ -0,0 +1,198 @@
+/* $NoKeywords:$ */
+/**
+ * @file
+ *
+ * AMD Family_14 MSR tables with values as defined in BKDG
+ *
+ * @xrefitem bom "File Content Label" "Release Content"
+ * @e project: AGESA
+ * @e sub-project: CPU
+ * @e \$Revision: 37263 $ @e \$Date: 2010-09-01 21:58:26 +0800 (Wed, 01 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.
+ *
+ * ***************************************************************************
+ *
+ */
+
+/*----------------------------------------------------------------------------------------
+ * M O D U L E S U S E D
+ *----------------------------------------------------------------------------------------
+ */
+#include "AGESA.h"
+#include "cpuRegisters.h"
+#include "Table.h"
+#include "Filecode.h"
+#define FILECODE PROC_CPU_FAMILY_0X14_CPUF14MSRTABLES_FILECODE
+
+/*----------------------------------------------------------------------------------------
+ * D E F I N I T I O N S A N D M A C R O S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * T Y P E D E F S A N D S T R U C T U R E S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * P R O T O T Y P E S O F L O C A L F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * E X P O R T E D F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+CONST MSR_TYPE_ENTRY_INITIALIZER ROMDATA F14MsrRegisters[] =
+{
+
+// M S R T a b l e s
+// ----------------------
+
+// MSR_TOM2 (0xC001001D)
+// bits[63:0] - TOP_MEM2 = 0
+ {
+ MsrRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MSR_TOM2, // MSR Address
+ 0x0000000000000000, // OR Mask
+ 0xFFFFFFFFFFFFFFFF, // NAND Mask
+ }
+ },
+// MSR_SYS_CFG (0xC0010010)
+// bit[21] - MtrrTom2En = 1
+ {
+ MsrRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MSR_SYS_CFG, // MSR Address
+ (1 << 21), // OR Mask
+ (1 << 21), // NAND Mask
+ }
+ },
+// MSR_CPUID_EXT_FEATS (0xC0011005)
+// bit[41] - OSVW = 0
+ {
+ MsrRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MSR_CPUID_EXT_FEATS, // MSR Address
+ 0x0000000000000000, // OR Mask
+ 0x0000020000000000, // NAND Mask
+ }
+ },
+// MSR_OSVW_ID_Length (0xC0010140)
+// bit[15:0] = 4
+ {
+ MsrRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MSR_OSVW_ID_Length, // MSR Address
+ 0x0000000000000004, // OR Mask
+ 0x000000000000FFFF, // NAND Mask
+ }
+ },
+// MSR_HWCR (0xC0010015)
+// Do not set bit[24] = 1, it will be set in AmdInitPost.
+
+// This MSR should be set after the code that most errata would be applied in
+// MSR_MC0_CTL (0x00000400)
+// bits[63:0] = 0xFFFFFFFFFFFFFFFF
+ {
+ MsrRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MSR_MC0_CTL, // MSR Address
+ 0xFFFFFFFFFFFFFFFF, // OR Mask
+ 0xFFFFFFFFFFFFFFFF, // NAND Mask
+ }
+ },
+// MSR_LS_CFG (0xC0011020)
+// bit[36] Reserved = 1, workaround for erratum #530
+// bit[25] Reserved = 1, workaround for erratum #551
+ {
+ MsrRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MSR_LS_CFG, // MSR Address
+ 0x0000001002000000, // OR Mask
+ 0x0000001002000000, // NAND Mask
+ }
+ },
+// MSR_DC_CFG (0xC0011022)
+// bit[57:56] Reserved = 2
+ {
+ MsrRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MSR_DC_CFG, // MSR Address
+ 0x0200000000000000, // OR Mask
+ 0x0300000000000000, // NAND Mask
+ }
+ }
+};
+
+CONST REGISTER_TABLE ROMDATA F14MsrRegisterTable = {
+ AllCores,
+ (sizeof (F14MsrRegisters) / sizeof (TABLE_ENTRY_FIELDS)),
+ (TABLE_ENTRY_FIELDS *) &F14MsrRegisters,
+};
+
+
diff --git a/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14PciTables.c b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14PciTables.c
new file mode 100644
index 0000000000..aab474a865
--- /dev/null
+++ b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14PciTables.c
@@ -0,0 +1,716 @@
+/* $NoKeywords:$ */
+/**
+ * @file
+ *
+ * AMD Family_14 PCI tables with values as defined in BKDG
+ *
+ * @xrefitem bom "File Content Label" "Release Content"
+ * @e project: AGESA
+ * @e sub-project: CPU/FAMILY/0x14
+ * @e \$Revision: 38376 $ @e \$Date: 2010-09-23 11:39:55 +0800 (Thu, 23 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.
+ *
+ * ***************************************************************************
+ *
+ */
+
+/*----------------------------------------------------------------------------------------
+ * M O D U L E S U S E D
+ *----------------------------------------------------------------------------------------
+ */
+#include "AGESA.h"
+#include "cpuRegisters.h"
+#include "Table.h"
+#include "Filecode.h"
+#define FILECODE PROC_CPU_FAMILY_0X14_CPUF14PCITABLES_FILECODE
+
+/*----------------------------------------------------------------------------------------
+ * D E F I N I T I O N S A N D M A C R O S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * T Y P E D E F S A N D S T R U C T U R E S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * P R O T O T Y P E S O F L O C A L F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * E X P O R T E D F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+
+// P C I T a b l e s
+// ----------------------
+
+STATIC CONST TABLE_ENTRY_FIELDS ROMDATA F14PciRegisters[] =
+{
+// Function 0 - Link Config
+
+// D18F0x68 - Link Transaction Control
+// bit[11] RespPassPW = 1
+// bits[19:17] for 8bit APIC config
+// bits[22:21] DsNpReqLmt = 1
+ {
+ PciRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MAKE_SBDFO (0, 0, 24, FUNC_0, 0x68), // Address
+ 0x002E0800, // regData
+ 0x006E0800, // regMask
+ }
+ },
+
+// Function 2 - DRAM Controller
+
+// D18F2xB8
+ {
+ PciRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MAKE_SBDFO (0, 0, 24, FUNC_2, 0xB8), // Address
+ 0x00000000, // regData
+ 0xF000F000, // regMask
+ }
+ },
+// D18F2xBC
+ {
+ PciRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MAKE_SBDFO (0, 0, 24, FUNC_2, 0xBC), // Address
+ 0x00000000, // regData
+ 0xC0000000, // regMask
+ }
+ },
+// D18F2x118 - Memory Controller Configuration Low
+// bits[7:6], MctPriHiWr = 10b
+ {
+ PciRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MAKE_SBDFO (0, 0, 24, FUNC_2, 0x118), // Address
+ 0x00000080, // regData
+ 0x000000C0, // regMask
+ }
+ },
+// D18F2x11C - Memory Controller Configuration High
+// bits[24:22], PrefConf = 1
+ {
+ PciRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MAKE_SBDFO (0, 0, 24, FUNC_2, 0x11C), // Address
+ 0x00400000, // regData
+ 0x01C00000, // regMask
+ }
+ },
+
+// Function 3 - Misc. Control
+
+// D18F3x40 - MCA NB Control
+// bit[8] MstrAbortEn = 1
+ {
+ PciRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MAKE_SBDFO (0, 0, 24, FUNC_3, 0x40), // Address
+ 0x00000100, // regData
+ 0x00000100, // regMask
+ }
+ },
+// D18F3x44 - MCA NB Configuration
+// bit[27] NbMcaToMstCpuEn = 1
+// bit[25] DisPciCfgCpuErrRsp = 1
+// bit[21] SyncOnAnyErrEn = 1
+// bit[20] SyncOnWDTEn = 1
+// bits[13:12] WDTBaseSel = 0
+// bits[11:9] WDTCntSel[2:0] = 0
+// bit[6] CpuErrDis = 1
+ {
+ PciRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MAKE_SBDFO (0, 0, 24, FUNC_3, 0x44), // Address
+ 0x0A300040, // regData
+ 0x0A303E40, // regMask
+ }
+ },
+// D18F3x84 - ACPI Power State Control High
+// bit[18] Smaf6DramMemClkTri = 1
+// bit[17] Smaf6DramSr = 1
+// bit[2] Smaf4DramMemClkTri = 1
+// bit[1] Smaf4DramSr = 1
+ {
+ PciRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MAKE_SBDFO (0, 0, 24, FUNC_3, 0x84), // Address
+ 0x00060006, // regData
+ 0x00060006, // regMask
+ }
+ },
+// D18F3x8C - NB Configuration High
+// bit[26] EnConvertToNonIsoc = 1
+ {
+ PciRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MAKE_SBDFO (0, 0, 24, FUNC_3, 0x8C), // Address
+ 0x04000000, // regData
+ 0x04000000, // regMask
+ }
+ },
+// D18F3xA0 - Power Control Miscellaneous
+// bit[9] SviHighFreqSel = 1
+ {
+ PciRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MAKE_SBDFO (0, 0, 24, FUNC_3, 0xA0), // Address
+ 0x00000200, // regData
+ 0x00000200, // regMask
+ }
+ },
+// D18F3xA4 - Reported Temperature Control
+// bits[12:8] PerStepTimeDn = 0xF
+// bit[7] TmpSlewDnEn = 1
+// bits[6:5] TmpMaxDiffUp = 0x3
+// bits[4:0] PerStepTimeUp = 0xF
+
+ {
+ PciRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MAKE_SBDFO (0, 0, 24, FUNC_3, 0xA4), // Address
+ 0x00000FEF, // regData
+ 0x00001FFF, // regMask
+ }
+ },
+// D18F3xD4 - Clock Power Timing Control 0
+// bits[11:8] ClkRampHystSel = 0xF
+// bits[15:12] OnionOutHyst = 0x4
+// bit[17] ClockGatingEnDram = 1
+ {
+ PciRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MAKE_SBDFO (0, 0, 24, FUNC_3, 0xD4), // Address
+ 0x00024F00, // regData
+ 0x0002FF00, // regMask
+ }
+ },
+// D18F3xDC - Clock Power Timing Control 2
+// bits[29:27] NbClockGateHyst = 3
+// bit[30] NbClockGateEn = 1
+// bit[31] CnbCifClockGateEn = 1
+ {
+ PciRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MAKE_SBDFO (0, 0, 24, FUNC_3, 0xDC), // Address
+ 0xD8000000, // regData
+ 0xF8000000, // regMask
+ }
+ },
+// D18F3x180 - Extended NB MCA Configuration
+// bit[2] WDTCntSel[3] = 0
+// bit[5] DisPciCfgCpuMstAbtRsp = 1
+// bit[21] SyncFloodOnCpuLeakErr = 1
+ {
+ PciRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MAKE_SBDFO (0, 0, 24, FUNC_3, 0x180), // Address
+ 0x00200020, // regData
+ 0x00200024, // regMask
+ }
+ },
+// D18F3x188 - NB Extended Configuration
+// bit[21] EnCpuSerWrBehindIoRd = 0
+// bit[23] EnCpuSerRdBehindIoRd = 0
+// bits[27:24] FeArbCpuWeightOverLoPrio = 0x0B
+// bits[31:28] FeArbCpuWeightOverHiPrio = 1
+ {
+ PciRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MAKE_SBDFO (0, 0, 24, FUNC_3, 0x188), // Address
+ 0x1B000000, // regData
+ 0xFFA00000, // regMask
+ }
+ },
+
+// Function 4 - Extended Misc. Control
+
+// D18F4x118 - C-state Control 1
+// bits[2:0] CstAct0 = 0
+// bits[10:8] CstAct1 = 0
+ {
+ PciRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MAKE_SBDFO (0, 0, 24, FUNC_4, 0x118), // Address
+ 0x00000000, // regData
+ 0x00000707, // regMask
+ }
+ },
+// D18F4x124 - C-state Monitor Control 1
+// bit[15] TimerTickIntvlScale = 1
+// bit[16] TrackTimerTickInterEn = 1
+// bit[17] IntMonCC6En = 1
+// bits[21:18] IntMonCC6Lmt = 4
+// bit[22] IntMonPkgC6En = 0
+// bits[26:23] IntMonPkgC6Lmt = 0x0A
+ {
+ PciRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MAKE_SBDFO (0, 0, 24, FUNC_4, 0x124), // Address
+ 0x05138000, // regData
+ 0x07FF8000, // regMask
+ }
+ },
+// D18F4x134 - C-state Monitor Control 3
+// bits[3:0] IntRatePkgC6MaxDepth = 0
+// bits[7:4] IntRatePkgC6Threshold = 0
+// bits[10:8] IntRatePkgC6BurstLen = 1
+// bits[15:11] IntRatePkgC6DecrRate = 0x0A
+// bits[19:16] IntRateCC6MaxDepth = 5
+// bits[23:20] IntRateCC6Threshold = 4
+// bits[26:24] IntRateCC6BurstLen = 5
+// bits[31:27] IntRateCC6DecrRate = 0x08
+ {
+ PciRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MAKE_SBDFO (0, 0, 24, FUNC_4, 0x134), // Address
+ 0x45455100, // regData
+ 0xFFFFFFFF, // regMask
+ }
+ },
+// D18F4x13C - SMAF Code DID 1
+// bits[4:0] Smaf4Did = 0x0F
+// bits[20:16] Smaf6Did = 0x0F
+ {
+ PciRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MAKE_SBDFO (0, 0, 24, FUNC_4, 0x13C), // Address
+ 0x000F000F, // regData
+ 0x001F001F, // regMask
+ }
+ },
+// D18F4x1A4 - C-state Monitor Mask
+// bits[7:0] IntRateMonMask = 0xFC
+// bits[15:8] TimerTickMonMask = 0xFF
+// bits[23:16] NonC0MonMask = 0xFF
+// bits[31:24] C0MonMask = 0xFF
+ {
+ PciRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MAKE_SBDFO (0, 0, 24, FUNC_4, 0x1A4), // Address
+ 0xFFFFFFFC, // regData
+ 0xFFFFFFFF, // regMask
+ }
+ },
+// D18F4x1A8 - CPU State Power Management Dynamic Control 0
+// bits[4:0] SingleHaltCpuDid = 0x1E
+// bits[9:5] AllHaltCpuDid = 0x1F
+// bit[15] CpuProbEn = 0
+// bits[22:20] PServiceTmr = 1
+// bit[23] PServiceTmrEn = 1
+ {
+ PciRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MAKE_SBDFO (0, 0, 24, FUNC_4, 0x1A8), // Address
+ 0x009003FE, // regData
+ 0x00F083FF, // regMask
+ }
+ },
+// D18F4x1AC - CPU State Power Management Dynamic Control 1
+// bits[9:5] C6Did = 0x1F
+// bits[28] CoreC6Dis = 1
+// bits[29] PkgC6Dis = 1
+ {
+ PciRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MAKE_SBDFO (0, 0, 24, FUNC_4, 0x1AC), // Address
+ 0x300003E0, // regData
+ 0x300003E0, // regMask
+ }
+ },
+// D18F6x50 - Configuration Register Access Control
+// bit[1] CfgAccAddrMode = 0
+ {
+ PciRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MAKE_SBDFO (0, 0, 24, FUNC_6, 0x50), // Address
+ 0x00000000, // regData
+ 0x00000002, // regMask
+ }
+ },
+// D18F6x54 - DRAM Arbitration Control FEQ Collision
+// bits[7:0] FeqLoPrio = 0x20
+// bits[15:8] FeqMedPrio = 0x10
+// bits[23:16] FeqHiPrio = 8
+// bit[31] PpMode = 0
+ {
+ PciRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MAKE_SBDFO (0, 0, 24, FUNC_6, 0x54), // Address
+ 0x00081020, // regData
+ 0x80FFFFFF, // regMask
+ }
+ },
+// D18F6x58 - DRAM Arbitration Control Display Collision
+// bits[7:0] DispLoPrio = 0x40
+// bits[15:8] DispMedPrio = 0x20
+// bits[23:16] DispHiPrio = 0x10
+// bits[31:24] DispUrgPrio = 0
+ {
+ PciRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MAKE_SBDFO (0, 0, 24, FUNC_6, 0x58), // Address
+ 0x00102040, // regData
+ 0xFFFFFFFF, // regMask
+ }
+ },
+// D18F6x5C - DRAM Arbitration Control FEQ Write Protect
+// bits[7:0] FeqLoPrio = 0x20
+// bits[15:8] FeqMedPrio = 0x10
+// bits[23:16] FeqHiPrio = 0x08
+// bit[31] PpMode = 0
+ {
+ PciRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MAKE_SBDFO (0, 0, 24, FUNC_6, 0x5C), // Address
+ 0x00081020, // regData
+ 0x80FFFFFF, // regMask
+ }
+ },
+// D18F6x60 - DRAM Arbitration Control Display Write Protect
+// bits[7:0] DispLoPri = 0x20
+// bits[15:8] DispMedPrio = 0x10
+// bits[23:16] DispHiPrio = 0x08
+// bits[31:24] DispUrgPrio = 0
+ {
+ PciRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MAKE_SBDFO (0, 0, 24, FUNC_6, 0x60), // Address
+ 0x00081020, // regData
+ 0xFFFFFFFF, // regMask
+ }
+ },
+// D18F6x64 - DRAM Arbitration Control FEQ Read Protect
+// bits[7:0] FeqLoPrio = 0x10
+// bits[15:8] FeqMedPrio = 8
+// bits[23:16] FeqHiPrio = 4
+// bit[31] PpMode = 0
+ {
+ PciRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MAKE_SBDFO (0, 0, 24, FUNC_6, 0x64), // Address
+ 0x00040810, // regData
+ 0x80FFFFFF, // regMask
+ }
+ },
+// D18F6x68 - DRAM Arbitration Control Display Read Protect
+// bits[7:0] DispLoPrio = 0x10
+// bits[15:8] DispMedPrio = 8
+// bits[23:16] DispHiPrio = 4
+// bits[31:24] DispUrgPrio = 0
+ {
+ PciRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MAKE_SBDFO (0, 0, 24, FUNC_6, 0x68), // Address
+ 0x00040810, // regData
+ 0xFFFFFFFF, // regMask
+ }
+ },
+// D18F6x6C - DRAM Arbitration Control FEQ Fairness Timer
+// bits[7:0] FeqLoPrio = 0x80
+// bits[15:8] FeqMedPrio = 0x40
+// bits[23:16] FeqHiPrio = 0x20
+ {
+ PciRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MAKE_SBDFO (0, 0, 24, FUNC_6, 0x6C), // Address
+ 0x00204080, // regData
+ 0x00FFFFFF, // regMask
+ }
+ },
+// D18F6x70 - DRAM Arbitration Control Display Fairness Timer
+// bits[7:0] DispLoPrio = 0x80
+// bits[15:8] DispMedPrio = 0x40
+// bits[23:16] DispHiPrio = 0x20
+// bits[31:24] DispUrPrio = 0
+ {
+ PciRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MAKE_SBDFO (0, 0, 24, FUNC_6, 0x70), // Address
+ 0x00204080, // regData
+ 0xFFFFFFFF, // regMask
+ }
+ },
+// D18F6x74 - Dram Idle Page Close Limit
+// bits[40] IdleLimit = 0x1E
+ {
+ PciRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MAKE_SBDFO (0, 0, 24, FUNC_6, 0x74), // Address
+ 0x0000001E, // regData
+ 0x0000001F, // regMask
+ }
+ },
+// D18F6x78 - Dram Prioritization and Arbitration Control
+// bits[1:0] DispDbePrioEn = 3
+// bit[2] FeqDbePrioEn = 1
+// bit[3] DispArbCtrl = 0
+// bits[5:4] GlcEosDet = 3
+// bit[6] GlcEosDetDis = 0
+ {
+ PciRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MAKE_SBDFO (0, 0, 24, FUNC_6, 0x78), // Address
+ 0x00000037, // regData
+ 0x0000007F, // regMask
+ }
+ },
+// D18F6x90 - NB P-state Config Low
+// As part of BIOS Requirements for NB P-state Initialization
+// bit[30] NbPsCtrlDis = 1
+// bit[29] NbPsForceSel = 0
+// bit[28] NbPsForceReq = 1
+ {
+ PciRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MAKE_SBDFO (0, 0, 24, FUNC_6, 0x90), // Address
+ 0x50000000, // regData
+ 0x70000000, // regMask
+ }
+ },
+// D18F6x94 - NB P-state Config High
+// bits[2:0] CpuPstateThr = 1
+// bit[3] CpuPstateThrEn = 1
+// bits[25:23] NbPsC0Timer = 4
+ {
+ PciRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MAKE_SBDFO (0, 0, 24, FUNC_6, 0x94), // Address
+ 0x02000009, // regData
+ 0x0380000F, // regMask
+ }
+ },
+// D18F6x9C - NCLK Reduction Control
+// bits[6:0] NclkRedDiv = 0x60
+// bit[7] NclkRedSelfRefrAlways = 1
+// bit[8] NclkRampWithDllRelock = 1
+ {
+ PciRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MAKE_SBDFO (0, 0, 24, FUNC_6, 0x9C), // Address
+ 0x000001E0, // regData
+ 0x000001FF, // regMask
+ }
+ }
+};
+
+CONST REGISTER_TABLE ROMDATA F14PciRegisterTable = {
+ PrimaryCores,
+ (sizeof (F14PciRegisters) / sizeof (TABLE_ENTRY_FIELDS)),
+ F14PciRegisters,
+};
diff --git a/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14PerCorePciTables.c b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14PerCorePciTables.c
new file mode 100644
index 0000000000..b75e69fac5
--- /dev/null
+++ b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14PerCorePciTables.c
@@ -0,0 +1,102 @@
+/* $NoKeywords:$ */
+/**
+ * @file
+ *
+ * AMD Family_14 Per Core PCI tables with values as defined in BKDG
+ *
+ * @xrefitem bom "File Content Label" "Release Content"
+ * @e project: AGESA
+ * @e sub-project: CPU/FAMILY/0x14
+ * @e \$Revision: 36592 $ @e \$Date: 2010-08-21 05:31:55 +0800 (Sat, 21 Aug 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.
+ *
+ * ***************************************************************************
+ *
+ */
+
+/*----------------------------------------------------------------------------------------
+ * M O D U L E S U S E D
+ *----------------------------------------------------------------------------------------
+ */
+#include "AGESA.h"
+#include "cpuRegisters.h"
+#include "Table.h"
+#include "Filecode.h"
+#define FILECODE PROC_CPU_FAMILY_0X14_CPUF14PERCOREPCITABLES_FILECODE
+
+/*----------------------------------------------------------------------------------------
+ * D E F I N I T I O N S A N D M A C R O S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * T Y P E D E F S A N D S T R U C T U R E S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * P R O T O T Y P E S O F L O C A L F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * E X P O R T E D F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+
+// Per Core P C I T a b l e s
+// ----------------------
+
+STATIC CONST TABLE_ENTRY_FIELDS ROMDATA F14PerCorePciRegisters[] =
+{
+// D18F3x1CC - IBS Control
+// bits[3:0] LvtOffset = 0
+// bit[8] LvtOffsetVal = 1
+ {
+ PciRegister,
+ {
+ AMD_FAMILY_14, // CpuFamily
+ AMD_F14_ALL // CpuRevision
+ },
+ AMD_PF_ALL, // platformFeatures
+ {
+ MAKE_SBDFO (0, 0, 24, FUNC_3, 0x1CC), // Address
+ 0x00000100, // regData
+ 0x0000010F, // regMask
+ }
+ }
+};
+
+CONST REGISTER_TABLE ROMDATA F14PerCorePciRegisterTable = {
+ AllCores,
+ (sizeof (F14PerCorePciRegisters) / sizeof (TABLE_ENTRY_FIELDS)),
+ F14PerCorePciRegisters,
+};
diff --git a/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14PowerCheck.c b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14PowerCheck.c
new file mode 100644
index 0000000000..53e6df5163
--- /dev/null
+++ b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14PowerCheck.c
@@ -0,0 +1,358 @@
+/* $NoKeywords:$ */
+/**
+ * @file
+ *
+ * AMD Family_14 P-State power check
+ *
+ * Performs the "Processor-Systemboard Power Delivery Compatibility Check" as
+ * described in the BKDG.
+ *
+ * @xrefitem bom "File Content Label" "Release Content"
+ * @e project: AGESA
+ * @e sub-project: CPU/F14
+ * @e \$Revision: 39744 $ @e \$Date: 2010-10-15 02:18:02 +0800 (Fri, 15 Oct 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.
+ *
+ * ***************************************************************************
+ *
+ */
+
+/*----------------------------------------------------------------------------------------
+ * M O D U L E S U S E D
+ *----------------------------------------------------------------------------------------
+ */
+#include "AGESA.h"
+#include "amdlib.h"
+#include "cpuCacheInit.h"
+#include "cpuF14PowerMgmt.h"
+#include "cpuRegisters.h"
+#include "cpuApicUtilities.h"
+#include "cpuServices.h"
+#include "GeneralServices.h"
+#include "cpuEarlyInit.h"
+#include "cpuFamilyTranslation.h"
+#include "cpuF14PowerCheck.h"
+#include "cpuF14Utilities.h"
+#include "Filecode.h"
+#define FILECODE PROC_CPU_FAMILY_0X14_CPUF14POWERCHECK_FILECODE
+
+/*----------------------------------------------------------------------------------------
+ * D E F I N I T I O N S A N D M A C R O S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * T Y P E D E F S A N D S T R U C T U R E S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * P R O T O T Y P E S O F L O C A L F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+VOID
+STATIC
+F14PmPwrCheckCore (
+ IN VOID *ErrorData,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ );
+
+VOID
+STATIC
+F14PmPwrChkCopyPstate (
+ IN UINT8 Dest,
+ IN UINT8 Src,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ );
+
+/*----------------------------------------------------------------------------------------
+ * E X P O R T E D F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Family 14h core 0 entry point for performing the family 14h Processor-
+ * Systemboard Power Delivery Check.
+ *
+ * The steps are as follows:
+ * 1. Starting with P0, loop through all P-states until a passing state is
+ * found. A passing state is one in which the current required by the
+ * CPU is less than the maximum amount of current that the system can
+ * provide to the CPU. If P0 is under the limit, no further action is
+ * necessary.
+ * 2. If at least one P-State is under the limit & at least one P-State is
+ * over the limit, the BIOS must:
+ * a. Clear both D18F4x15C[BoostSrc] and D18F4x15C[NumBoostStates] to 0.
+ * b. If the processor's current P-State is disabled by the power check,
+ * then the BIOS must request a transition to an enabled P-state
+ * using MSRC001_0062[PstateCmd] and wait for MSRC001_0063[CurPstate]
+ * to reflect the new value.
+ * c. Copy the contents of the enabled P-state MSRs to the highest
+ * performance P-state locations.
+ * d. Request a P-state transition to the P-state MSR containing the
+ * COF/VID values currently applied.
+ * e. Adjust the following P-state parameters affected by the P-state
+ * MSR copy by subtracting the number of P-states that are disabled
+ * by the power check.
+ * 1. D18F3x64[HtcPstateLimit]
+ * 2. D18F3xDC[PstateMaxVal]
+ * 3. If all P-States are over the limit, the BIOS must:
+ * a. Clear both D18F4x15C[BoostSrc] and D18F4x15C[NumBoostStates] to 0.
+ * b. If the processor's current P-State is != D18F3xDC[PstateMaxVal], then
+ * write D18F3xDC[PstateMaxVal] to MSRC001_0062[PstateCmd] and wait for
+ * MSRC001_0063[CurPstate] to reflect the new value.
+ * c. If D18F3xDC[PstateMaxVal]!= 000b, copy the contents of the P-state
+ * MSR pointed to by D18F3xDC[PstateMaxVal] to MSRC001_0064 and set
+ * MSRC001_0064[PstateEn]
+ * d. Write 000b to MSRC001_0062[PstateCmd] and wait for MSRC001_0063
+ * [CurPstate] to reflect the new value.
+ * e. Adjust the following P-state parameters to zero:
+ * 1. D18F3x64[HtcPstateLimit]
+ * 2. D18F3xDC[PstateMaxVal]
+ *
+ * @param[in] FamilySpecificServices The current Family Specific Services.
+ * @param[in] CpuEarlyParams Service parameters.
+ * @param[in] StdHeader Config handle for library and services.
+ *
+ */
+VOID
+F14PmPwrCheck (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ IN AMD_CPU_EARLY_PARAMS *CpuEarlyParams,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ UINT8 DisPsNum;
+ UINT8 PsMaxVal;
+ UINT8 Pstate;
+ UINT32 ProcIddMax;
+ UINT32 PciRegister;
+ UINT32 Socket;
+ UINT32 Module;
+ UINT32 Core;
+ UINT32 PstateLimit;
+ PCI_ADDR PciAddress;
+ UINT64 MsrRegister;
+ AP_TASK TaskPtr;
+ AGESA_STATUS IgnoredSts;
+ PWRCHK_ERROR_DATA ErrorData;
+
+ // get the socket number
+ IdentifyCore (StdHeader, &Socket, &Module, &Core, &IgnoredSts);
+ ErrorData.SocketNumber = (UINT8) Socket;
+
+ ASSERT (Core == 0);
+
+ // get the Max P-state value
+ for (PsMaxVal = NM_PS_REG - 1; PsMaxVal != 0; --PsMaxVal) {
+ LibAmdMsrRead (PS_REG_BASE + PsMaxVal, &MsrRegister, StdHeader);
+ if (((PSTATE_MSR *) &MsrRegister)->PsEnable == 1) {
+ break;
+ }
+ }
+
+ ErrorData.HwPstateNumber = (UINT8) (PsMaxVal + 1);
+
+ DisPsNum = 0;
+ for (Pstate = 0; Pstate < ErrorData.HwPstateNumber; Pstate++) {
+ if (FamilySpecificServices->GetProcIddMax (FamilySpecificServices, Pstate, &ProcIddMax, StdHeader)) {
+ if (ProcIddMax > CpuEarlyParams->PlatformConfig.VrmProperties[CoreVrm].CurrentLimit) {
+ // Add to event log the Pstate that exceeded the current limit
+ PutEventLog (AGESA_WARNING,
+ CPU_EVENT_PM_PSTATE_OVERCURRENT,
+ Socket, Pstate, 0, 0, StdHeader);
+ DisPsNum++;
+ } else {
+ break;
+ }
+ }
+ }
+
+ // If all P-state registers are disabled, move P[PsMaxVal] to P0
+ // and transition to P0, then wait for CurPstate = 0
+
+ ErrorData.AllowablePstateNumber = ((PsMaxVal + 1) - DisPsNum);
+
+ // We only need to log this event on the BSC
+ if (ErrorData.AllowablePstateNumber == 0) {
+ PutEventLog (AGESA_FATAL,
+ CPU_EVENT_PM_ALL_PSTATE_OVERCURRENT,
+ Socket, 0, 0, 0, StdHeader);
+ }
+
+ if (DisPsNum != 0) {
+ TaskPtr.FuncAddress.PfApTaskI = F14PmPwrCheckCore;
+ TaskPtr.DataTransfer.DataSizeInDwords = SIZE_IN_DWORDS (PWRCHK_ERROR_DATA);
+ TaskPtr.DataTransfer.DataPtr = &ErrorData;
+ TaskPtr.DataTransfer.DataTransferFlags = 0;
+ TaskPtr.ExeFlags = WAIT_FOR_CORE;
+ ApUtilRunCodeOnAllLocalCoresAtEarly (&TaskPtr, StdHeader, CpuEarlyParams);
+
+ // Final Step
+ // D18F3x64[HtPstatelimit] -= disPsNum
+ // D18F3xDC[PstateMaxVal]-= disPsNum
+
+ PciAddress.AddressValue = HTC_PCI_ADDR;
+ LibAmdPciRead (AccessWidth32, PciAddress, &PciRegister, StdHeader); // D18F3x64
+ PstateLimit = ((HTC_REGISTER *) &PciRegister)->HtcPstateLimit;
+ if (PstateLimit > DisPsNum) {
+ PstateLimit -= DisPsNum;
+ } else {
+ PstateLimit = 0;
+ }
+ ((HTC_REGISTER *) &PciRegister)->HtcPstateLimit = PstateLimit;
+ LibAmdPciWrite (AccessWidth32, PciAddress, &PciRegister, StdHeader); // D18F3x64
+
+ PciAddress.AddressValue = CPTC2_PCI_ADDR;
+ LibAmdPciRead (AccessWidth32, PciAddress, &PciRegister, StdHeader); // D18F3xDC
+ PstateLimit = ((CLK_PWR_TIMING_CTRL2_REGISTER *) &PciRegister)->PstateMaxVal;
+ if (PstateLimit > DisPsNum) {
+ PstateLimit -= DisPsNum;
+ } else {
+ PstateLimit = 0;
+ }
+ ((CLK_PWR_TIMING_CTRL2_REGISTER *) &PciRegister)->PstateMaxVal = PstateLimit;
+ LibAmdPciWrite (AccessWidth32, PciAddress, &PciRegister, StdHeader); // D18F3xDC
+ }
+}
+
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Core-level error handler called if any p-states were determined to be out
+ * of range for the mother board.
+ *
+ * This function implements steps 2b-d and 3b-d on each core.
+ *
+ * @param[in] ErrorData Details about the error condition.
+ * @param[in] StdHeader Config handle for library and services.
+ *
+ */
+VOID
+STATIC
+F14PmPwrCheckCore (
+ IN VOID *ErrorData,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ UINT8 i;
+ UINT8 PsMaxVal;
+ UINT8 DisPsNum;
+ UINT8 CurrentPs;
+ UINT64 MsrRegister;
+ CPU_SPECIFIC_SERVICES *FamilySpecificServices;
+
+ GetCpuServicesOfCurrentCore (&FamilySpecificServices, StdHeader);
+
+ PsMaxVal = (((PWRCHK_ERROR_DATA *) ErrorData)->HwPstateNumber - 1);
+ DisPsNum = (((PWRCHK_ERROR_DATA *) ErrorData)->HwPstateNumber -
+ ((PWRCHK_ERROR_DATA *) ErrorData)->AllowablePstateNumber);
+
+ LibAmdMsrRead (MSR_PSTATE_STS, &MsrRegister, StdHeader);
+ CurrentPs = (UINT8) (((PSTATE_STS_MSR *) &MsrRegister)->CurPstate);
+
+ if (((PWRCHK_ERROR_DATA *) ErrorData)->AllowablePstateNumber == 0) {
+
+ // Step 1
+ // Transition to Pstate Max if not there already
+
+ if (CurrentPs != PsMaxVal) {
+ FamilySpecificServices->TransitionPstate (FamilySpecificServices, PsMaxVal, (BOOLEAN) TRUE, StdHeader);
+ }
+
+
+ // Step 2
+ // If Pstate Max is not P0, copy Pstate max contents to P0 and switch
+ // to P0.
+
+ if (PsMaxVal != 0) {
+ F14PmPwrChkCopyPstate (0, PsMaxVal, StdHeader);
+ FamilySpecificServices->TransitionPstate (FamilySpecificServices, (UINT8) 0, (BOOLEAN) TRUE, StdHeader);
+ }
+ } else {
+
+ // move remaining P-state register(s) up
+ // Step 1
+ // Transition to a valid Pstate if current Pstate has been disabled
+
+ if (CurrentPs < DisPsNum) {
+ FamilySpecificServices->TransitionPstate (FamilySpecificServices, DisPsNum, (BOOLEAN) TRUE, StdHeader);
+ CurrentPs = DisPsNum;
+ }
+
+ // Step 2
+ // Move enabled Pstates up and disable the remainder
+
+ for (i = 0; (i + DisPsNum) <= PsMaxVal; ++i) {
+ F14PmPwrChkCopyPstate (i, (i + DisPsNum), StdHeader);
+ }
+
+ // Step 3
+ // Transition to current COF/VID at shifted location
+
+ CurrentPs = (CurrentPs - DisPsNum);
+ FamilySpecificServices->TransitionPstate (FamilySpecificServices, CurrentPs, (BOOLEAN) TRUE, StdHeader);
+ }
+ i = ((PWRCHK_ERROR_DATA *) ErrorData)->AllowablePstateNumber;
+ if (i == 0) {
+ i++;
+ }
+ while (i <= PsMaxVal) {
+ FamilySpecificServices->DisablePstate (FamilySpecificServices, i, StdHeader);
+ i++;
+ }
+}
+
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Copies the contents of one P-State MSR to another.
+ *
+ * @param[in] Dest Destination p-state number
+ * @param[in] Src Source p-state number
+ * @param[in] StdHeader Config handle for library and services
+ *
+ */
+VOID
+STATIC
+F14PmPwrChkCopyPstate (
+ IN UINT8 Dest,
+ IN UINT8 Src,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ UINT64 MsrRegister;
+
+ LibAmdMsrRead ((UINT32) (PS_REG_BASE + Src), &MsrRegister, StdHeader);
+ LibAmdMsrWrite ((UINT32) (PS_REG_BASE + Dest), &MsrRegister, StdHeader);
+}
+
diff --git a/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14PowerCheck.h b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14PowerCheck.h
new file mode 100644
index 0000000000..daac001a2f
--- /dev/null
+++ b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14PowerCheck.h
@@ -0,0 +1,83 @@
+/* $NoKeywords:$ */
+/**
+ * @file
+ *
+ * AMD Family_14 Power related functions and structures
+ *
+ * @xrefitem bom "File Content Label" "Release Content"
+ * @e project: AGESA
+ * @e sub-project: CPU/F14
+ * @e \$Revision: 34897 $ @e \$Date: 2010-07-14 10:07:10 +0800 (Wed, 14 Jul 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 _CPU_F14_POWER_CHECK_H_
+#define _CPU_F14_POWER_CHECK_H_
+
+
+/*---------------------------------------------------------------------------------------
+ * M I X E D (Definitions And Macros / Typedefs, Structures, Enums)
+ *---------------------------------------------------------------------------------------
+ */
+
+
+/*---------------------------------------------------------------------------------------
+ * D E F I N I T I O N S A N D M A C R O S
+ *---------------------------------------------------------------------------------------
+ */
+
+
+/*---------------------------------------------------------------------------------------
+ * T Y P E D E F S, S T R U C T U R E S, E N U M S
+ *---------------------------------------------------------------------------------------
+ */
+/// Power Check Error Data
+typedef struct {
+ UINT8 SocketNumber; ///< Socket Number
+ UINT8 HwPstateNumber; ///< Hardware P-state Number
+ UINT8 AllowablePstateNumber; ///< Allowable P-state Number
+} PWRCHK_ERROR_DATA;
+
+/*---------------------------------------------------------------------------------------
+ * F U N C T I O N P R O T O T Y P E
+ *---------------------------------------------------------------------------------------
+ */
+VOID
+F14PmPwrCheck (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ IN AMD_CPU_EARLY_PARAMS *CpuEarlyParams,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ );
+
+#endif // _CPU_F14_POWER_CHECK_H_
diff --git a/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14PowerMgmt.h b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14PowerMgmt.h
new file mode 100644
index 0000000000..72cf02f5c4
--- /dev/null
+++ b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14PowerMgmt.h
@@ -0,0 +1,477 @@
+/* $NoKeywords:$ */
+/**
+ * @file
+ *
+ * AMD Family_14 Power Management related stuff
+ *
+ * @xrefitem bom "File Content Label" "Release Content"
+ * @e project: AGESA
+ * @e sub-project: CPU/F14
+ * @e \$Revision: 34897 $ @e \$Date: 2010-07-14 10:07:10 +0800 (Wed, 14 Jul 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 _CPUF14POWERMGMT_H_
+#define _CPUF14POWERMGMT_H_
+
+/*
+ * Family 14h CPU Power Management MSR definitions
+ *
+ */
+
+/* P-state Current Limit Register 0xC0010061 */
+#define MSR_PSTATE_CURRENT_LIMIT 0xC0010061
+
+/// Pstate Current Limit MSR Register
+typedef struct {
+ UINT64 CurPstateLimit:3; ///< Current Pstate Limit
+ UINT64 :1; ///< Reserved
+ UINT64 PstateMaxVal:3; ///< Pstate Max Value
+ UINT64 :57; ///< Reserved
+} PSTATE_CURLIM_MSR;
+
+
+/* P-state Control Register 0xC0010062 */
+#define MSR_PSTATE_CTL 0xC0010062
+
+/// Pstate Control MSR Register
+typedef struct {
+ UINT64 PstateCmd:3; ///< Pstate change command
+ UINT64 :61; ///< Reserved
+} PSTATE_CTRL_MSR;
+
+
+/* P-state Status Register 0xC0010063 */
+#define MSR_PSTATE_STS 0xC0010063
+
+/// Pstate Status MSR Register
+typedef struct {
+ UINT64 CurPstate:3; ///< Current Pstate
+ UINT64 :61; ///< Reserved
+} PSTATE_STS_MSR;
+
+
+/* P-state Registers 0xC001006[B:4] */
+#define MSR_PSTATE_0 0xC0010064
+#define MSR_PSTATE_1 0xC0010065
+#define MSR_PSTATE_2 0xC0010066
+#define MSR_PSTATE_3 0xC0010067
+#define MSR_PSTATE_4 0xC0010068
+#define MSR_PSTATE_5 0xC0010069
+#define MSR_PSTATE_6 0xC001006A
+#define MSR_PSTATE_7 0xC001006B
+
+#define PS_REG_BASE MSR_PSTATE_0 /* P-state Register base */
+#define PS_MAX_REG MSR_PSTATE_7 /* Maximum P-State Register */
+#define PS_MIN_REG MSR_PSTATE_0 /* Minimum P-State Register */
+#define NM_PS_REG 8 /* number of P-state MSR registers */
+
+/// Pstate MSR
+typedef struct {
+ UINT64 CpuDidLSD:4; ///< CPU core divisor identifier least significant digit
+ UINT64 CpuDidMSD:5; ///< CPU core divisor identifier most significant digit
+ UINT64 CpuVid:7; ///< CPU core VID
+ UINT64 :16; ///< Reserved
+ UINT64 IddValue:8; ///< Current value field
+ UINT64 IddDiv:2; ///< Current divisor field
+ UINT64 :21; ///< Reserved
+ UINT64 PsEnable:1; ///< P-state Enable
+} PSTATE_MSR;
+
+
+/* COFVID Status Register 0xC0010071 */
+#define MSR_COFVID_STS 0xC0010071
+
+/// COFVID Status MSR Register
+typedef struct {
+ UINT64 CurCpuDid:4; ///< Current CPU core divisor ID
+ UINT64 CurCpuDidMSD:5; ///< Current CPU core frequency ID
+ UINT64 CurCpuVid:7; ///< Current CPU core VID
+ UINT64 CurPstate:3; ///< Current P-state
+ UINT64 :1; ///< Reserved
+ UINT64 PstateInProgress:1; ///< P-state change in progress
+ UINT64 :4; ///< Reserved
+ UINT64 CurNbVid:7; ///< Current northbridge VID
+ UINT64 StartupPstate:3; ///< Startup P-state number
+ UINT64 MaxVid:7; ///< Maximum voltage
+ UINT64 MinVid:7; ///< Minimum voltage
+ UINT64 MainPllOpFreqIdMax:6; ///< Main PLL operating frequency ID maximum
+ UINT64 :1; ///< Reserved
+ UINT64 CurPstateLimit:3; ///< Current P-state Limit
+ UINT64 :5; ///< Reserved
+} COFVID_STS_MSR;
+
+
+/* C-state Address Register 0xC0010073 */
+#define MSR_CSTATE_ADDRESS 0xC0010073
+
+/// C-state Address MSR Register
+typedef struct {
+ UINT64 CstateAddr:16; ///< C-state address
+ UINT64 :48; ///< Reserved
+} CSTATE_ADDRESS_MSR;
+
+
+/* CPU Watchdog Timer Register 0xC0010074 */
+#define MSR_CPU_WDT 0xC0010074
+
+/// CPU Watchdog Timer Register
+typedef struct {
+ UINT64 CpuWdtEn:1; ///< CPU watchdog timer enable
+ UINT64 CpuWdtTimeBase:2; ///< CPU watchdog timer time base
+ UINT64 CpuWdtCountSel:4; ///< CPU watchdog timer count select
+ UINT64 :57; ///< Reserved
+} CPU_WDT_MSR;
+
+
+/*
+ * Family 14h CPU Power Management PCI definitions
+ *
+ */
+
+/* Memory controller configuration low register D18F2x118 */
+#define MEM_CFG_LOW_REG 0x118
+#define MEM_CFG_LOW_PCI_ADDR (MAKE_SBDFO (0, 0, 0x18, FUNC_2, MEM_CFG_LOW_REG))
+
+/// Memory Controller Configuration Low
+typedef struct {
+ UINT32 MctPriCpuRd:2; ///< CPU read priority
+ UINT32 MctPriCpuWr:2; ///< CPU write priority
+ UINT32 MctPriHiRd:2; ///< High-priority VC set read priority
+ UINT32 MctPriHiWr:2; ///< High-priority VC set write priority
+ UINT32 MctPriDefault:2; ///< Default non-write priority
+ UINT32 MctPriWr:2; ///< Default write priority
+ UINT32 :7; ///< Reserved
+ UINT32 C6DramLock:1; ///< C6 DRAM lock
+ UINT32 :8; ///< Reserved
+ UINT32 MctVarPriCntLmt:4; ///< Variable priority time limit
+} MEM_CFG_LOW_REGISTER;
+
+
+/* Hardware thermal control register D18F3x64 */
+#define HTC_REG 0x64
+#define HTC_PCI_ADDR (MAKE_SBDFO (0, 0, 0x18, FUNC_3, HTC_REG))
+
+/// Hardware Thermal Control PCI Register
+typedef struct {
+ UINT32 HtcEn:1; ///< HTC Enable
+ UINT32 :3; ///< Reserved
+ UINT32 HtcAct:1; ///< HTC Active State
+ UINT32 HtcActSts:1; ///< HTC Active Status
+ UINT32 PslApicHiEn:1; ///< P-state limit higher APIC int enable
+ UINT32 PslApicLoEn:1; ///< P-state limit lower APIC int enable
+ UINT32 :8; ///< Reserved
+ UINT32 HtcTmpLmt:7; ///< HTC temperature limit
+ UINT32 HtcSlewSel:1; ///< HTC slew-controlled temp select
+ UINT32 HtcHystLmt:4; ///< HTC hysteresis
+ UINT32 HtcPstateLimit:3; ///< HTC P-state limit select
+ UINT32 HtcLock:1; ///< HTC lock
+} HTC_REGISTER;
+
+
+/* Power Control Miscellaneous Register D18F3xA0 */
+#define PW_CTL_MISC_REG 0xA0
+#define PW_CTL_MISC_PCI_ADDR (MAKE_SBDFO (0, 0, 0x18, FUNC_3, PW_CTL_MISC_REG))
+
+/// Power Control Miscellaneous PCI Register
+typedef struct {
+ UINT32 PsiVid:7; ///< PSI_L VID threshold
+ UINT32 PsiVidEn:1; ///< PSI_L VID enable
+ UINT32 :1; ///< Reserved
+ UINT32 SviHighFreqSel:1; ///< SVI high frequency select
+ UINT32 :6; ///< Reserved
+ UINT32 ConfigId:12; ///< Configuration Identifier
+ UINT32 :3; ///< Reserved
+ UINT32 CofVidProg:1; ///< COF and VID of P-states programmed
+} POWER_CTRL_MISC_REGISTER;
+
+
+/* Clock Power/Timing Control 0 Register D18F3xD4 */
+#define CPTC0_REG 0xD4
+#define CPTC0_PCI_ADDR (MAKE_SBDFO (0, 0, 0x18, FUNC_3, CPTC0_REG))
+
+/// Clock Power Timing Control PCI Register
+typedef struct {
+ UINT32 MainPllOpFreqId:6; ///< Main PLL Fid
+ UINT32 MainPllOpFreqIdEn:1; ///< Main PLL Fid Enable
+ UINT32 :1; ///< Reserved
+ UINT32 ClkRampHystSel:4; ///< Clock Ramp Hysteresis Select
+ UINT32 OnionOutHyst:4; ///< ONION outbound hysteresis
+ UINT32 DisNclkGatingIdle:1; ///< Disable NCLK gating when idle
+ UINT32 ClkGatingEnDram:1; ///< Clock gating enable DRAM
+ UINT32 :1; ///< Reserved
+ UINT32 PstateSpecFuseSel:8; ///< P-State Specification Fuse Select
+ UINT32 :5; ///< Reserved
+} CLK_PWR_TIMING_CTRL_REGISTER;
+
+
+/* Clock Power/Timing Control 1 Register D18F3xD8 */
+#define CPTC1_REG 0xD8
+#define CPTC1_PCI_ADDR (MAKE_SBDFO (0, 0, 0x18, FUNC_3, CPTC1_REG))
+
+/// Clock Power Timing Control 1 PCI Register
+typedef struct {
+ UINT32 :4; ///< Reserved
+ UINT32 VSRampSlamTime:3; ///< Voltage stabilization slam time
+ UINT32 :22; ///< Reserved
+ UINT32 SlamModeSelect:1; ///< Voltage slam mode select
+ UINT32 :2; ///< Reserved
+} CLK_PWR_TIMING_CTRL1_REGISTER;
+
+
+/* Clock Power/Timing Control 2 Register D18F3xDC */
+#define CPTC2_REG 0xDC
+#define CPTC2_PCI_ADDR (MAKE_SBDFO (0, 0, 0x18, FUNC_3, CPTC2_REG))
+
+/// Clock Power Timing Control 2 PCI Register
+typedef struct {
+ UINT32 :8; ///< Reserved
+ UINT32 PstateMaxVal:3; ///< P-state maximum value
+ UINT32 :1; ///< Reserved
+ UINT32 NbPs0Vid:7; ///< NB VID
+ UINT32 NclkFreqDone:1; ///< NCLK frequency change done
+ UINT32 NbPs0NclkDiv:7; ///< NCLK divisor
+ UINT32 NbClockGateHyst:3; ///< Northbridge clock gating hysteresis
+ UINT32 NbClockGateEn:1; ///< Northbridge clock gating enable
+ UINT32 CnbCifClockGateEn:1; ///< CNB CIF clock gating enable
+} CLK_PWR_TIMING_CTRL2_REGISTER;
+
+
+/* Northbridge Capabilities Register D18F3xE8 */
+#define NB_CAPS_REG 0xE8
+#define NB_CAPS_PCI_ADDR (MAKE_SBDFO (0, 0, 0x18, FUNC_3, NB_CAPS_REG))
+
+/// Northbridge Capabilities PCI Register
+typedef struct {
+ UINT32 DctDualCap:1; ///< Two-channel DRAM capable
+ UINT32 :4; ///< Reserved
+ UINT32 DdrMaxRate:3; ///< Maximum DRAM data rate
+ UINT32 MctCap:1; ///< Memory controller capable
+ UINT32 SvmCapable:1; ///< SVM capable
+ UINT32 HtcCapable:1; ///< HTC capable
+ UINT32 :1; ///< Reserved
+ UINT32 CmpCap:2; ///< CMP capable
+ UINT32 :14; ///< Reserved
+ UINT32 LHtcCapable:1; ///< LHTC capable
+ UINT32 :3; ///< Reserved
+} NB_CAPS_REGISTER;
+
+
+/* Clock Power/Timing Control 3 Register D18F3x128 */
+#define CPTC3_REG 0x128
+#define CPTC3_PCI_ADDR (MAKE_SBDFO (0, 0, 0x18, FUNC_3, CPTC3_REG))
+
+/// Clock Power Timing Control 3 PCI Register
+typedef struct {
+ UINT32 C6Vid:7; ///< C6 VID
+ UINT32 :1; ///< Reserved
+ UINT32 NbPsiVid:7; ///< NB PSI_L VID threshold
+ UINT32 NbPsiVidEn:1; ///< NB PSI_L enable
+ UINT32 :16; ///< Reserved
+} CLK_PWR_TIMING_CTRL3_REGISTER;
+
+
+/* C-state Control 1 Register D18F4x118 */
+#define CSTATE_CTRL1_REG 0x118
+#define CSTATE_CTRL1_PCI_ADDR (MAKE_SBDFO (0, 0, 0x18, FUNC_4, CSTATE_CTRL1_REG))
+
+/// C-state Control 1 Register
+typedef struct {
+ UINT32 CstAct0:3; ///< C-state action field 0
+ UINT32 :5; ///< Reserved
+ UINT32 CstAct1:3; ///< C-state action field 1
+ UINT32 :5; ///< Reserved
+ UINT32 CstAct2:3; ///< C-state action field 2
+ UINT32 :5; ///< Reserved
+ UINT32 CstAct3:3; ///< C-state action field 3
+ UINT32 :5; ///< Reserved
+} CSTATE_CTRL1_REGISTER;
+
+
+/* C-state Control 2 Register D18F4x11C */
+#define CSTATE_CTRL2_REG 0x11C
+#define CSTATE_CTRL2_PCI_ADDR (MAKE_SBDFO (0, 0, 0x18, FUNC_4, CSTATE_CTRL2_REG))
+
+/// C-state Control 2 Register
+typedef struct {
+ UINT32 CstAct4:3; ///< C-state action field 4
+ UINT32 :5; ///< Reserved
+ UINT32 CstAct5:3; ///< C-state action field 5
+ UINT32 :5; ///< Reserved
+ UINT32 CstAct6:3; ///< C-state action field 6
+ UINT32 :5; ///< Reserved
+ UINT32 CstAct7:3; ///< C-state action field 7
+ UINT32 :5; ///< Reserved
+} CSTATE_CTRL2_REGISTER;
+
+
+/* Core Performance Boost Control Register D18F4x15C */
+#define CPB_CTRL_REG 0x15C
+#define CPB_CTRL_PCI_ADDR (MAKE_SBDFO (0, 0, 0x18, FUNC_4, CPB_CTRL_REG))
+
+/// Core Performance Boost Control Register
+typedef struct {
+ UINT32 BoostSrc:2; ///< Boost source
+ UINT32 NumBoostStates:3; ///< Number of boosted states
+ UINT32 :24; ///< Reserved
+ UINT32 BoostEnAllCores:1; ///< Boost enable all cores
+ UINT32 :2; ///< Reserved
+} CPB_CTRL_REGISTER;
+
+
+/* CPU State Power Management Dynamic Control 0 Register D18F4x1A8 */
+#define CPU_STATE_PM_CTRL0_REG 0x1A8
+#define CPU_STATE_PM_CTRL0_PCI_ADDR (MAKE_SBDFO (0, 0, 0x18, FUNC_4, CPU_STATE_PM_CTRL0_REG))
+
+/// CPU State Power Management Dynamic Control 0 Register
+typedef struct {
+ UINT32 SingleHaltCpuDid:5; ///< Single hlt CPU DID
+ UINT32 AllHaltCpuDid:5; ///< All hlt CPU DID
+ UINT32 :5; ///< Reserved
+ UINT32 CpuProbEn:1; ///< CPU probe enable
+ UINT32 :1; ///< Reserved
+ UINT32 PService:3; ///< Service P-state
+ UINT32 PServiceTmr:3; ///< Service P-state timer
+ UINT32 PServiceTmrEn:1; ///< Service P-state timer enable
+ UINT32 DramSrEn:1; ///< DRAM self-refresh enable
+ UINT32 MemTriStateEn:1; ///< Memory clock tri-state enable
+ UINT32 DramSrHyst:3; ///< DRAM self-refresh hysteresis time
+ UINT32 DramSrHystEnable:1; ///< DRAM self-refresh hysteresis enable
+ UINT32 :2; ///< Reserved
+} CPU_STATE_PM_CTRL0_REGISTER;
+
+
+/* CPU State Power Management Dynamic Control 1 Register D18F4x1AC */
+#define CPU_STATE_PM_CTRL1_REG 0x1AC
+#define CPU_STATE_PM_CTRL1_PCI_ADDR (MAKE_SBDFO (0, 0, 0x18, FUNC_4, CPU_STATE_PM_CTRL1_REG))
+
+/// CPU State Power Management Dynamic Control 1 Register
+typedef struct {
+ UINT32 :5; ///< Reserved
+ UINT32 C6Did:5; ///< CC6 divisor
+ UINT32 :6; ///< Reserved
+ UINT32 PstateIdCoreOffExit:3; ///< P-state ID core-off exit
+ UINT32 :7; ///< Reserved
+ UINT32 PkgC6Cap:1; ///< Package C6 capable
+ UINT32 CoreC6Cap:1; ///< Core C6 capable
+ UINT32 PkgC6Dis:1; ///< Package C6 disable
+ UINT32 CoreC6Dis:1; ///< Core C6 disable
+ UINT32 CstPminEn:1; ///< C-state Pmin enable
+ UINT32 :1; ///< Reserved
+} CPU_STATE_PM_CTRL1_REGISTER;
+
+
+/* C6 Base Register D18F4x12C */
+#define C6_BASE_REG 0x12C
+#define C6_BASE_PCI_ADDR (MAKE_SBDFO (0, 0, 0x18, FUNC_4, C6_BASE_REG))
+
+/// C6 Base Register
+typedef struct {
+ UINT32 C6Base:12; ///< C6 base[35:24]
+ UINT32 :20; ///< Reserved
+} C6_BASE_REGISTER;
+
+
+/* NB P-state Config Low Register D18F6x90 */
+#define NB_PSTATE_CFG_LOW_REG 0x90
+#define NB_PSTATE_CFG_LOW_PCI_ADDR (MAKE_SBDFO (0, 0, 0x18, FUNC_6, NB_PSTATE_CFG_LOW_REG))
+
+/// NB P-state Config Low Register
+typedef struct {
+ UINT32 NbPs1NclkDiv:7; ///< NBP1 NCLK divisor
+ UINT32 :1; ///< Reserved
+ UINT32 NbPs1Vid:7; ///< NBP1 NCLK VID
+ UINT32 :1; ///< Reserved
+ UINT32 NbPs1GnbSlowIgn:1; ///< NB P-state ignore GNB slow signal
+ UINT32 :3; ///< Reserved
+ UINT32 NbPsLock:1; ///< NB P-state lock
+ UINT32 :7; ///< Reserved
+ UINT32 NbPsForceReq:1; ///< NB P-state force request
+ UINT32 NbPsForceSel:1; ///< NB P-state force selection
+ UINT32 NbPsCtrlDis:1; ///< NB P-state control disable
+ UINT32 NbPsCap:1; ///< NB P-state capable
+} NB_PSTATE_CFG_LOW_REGISTER;
+
+
+/* NB P-state Config High Register D18F6x94 */
+#define NB_PSTATE_CFG_HIGH_REG 0x94
+#define NB_PSTATE_CFG_HIGH_PCI_ADDR (MAKE_SBDFO (0, 0, 0x18, FUNC_6, NB_PSTATE_CFG_HIGH_REG))
+
+/// NB P-state Config High Register
+typedef struct {
+ UINT32 CpuPstateThr:3; ///< CPU P-state threshold
+ UINT32 CpuPstateThrEn:1; ///< CPU P-state threshold enable
+ UINT32 NbPs1NoTransOnDma:1; ///< NB P-state no transitions on DMA
+ UINT32 :15; ///< Reserved
+ UINT32 NbPsNonC0Timer:3; ///< NB P-state non-C0 timer
+ UINT32 NbPsC0Timer:3; ///< NB P-state C0 timer
+ UINT32 NbPs1ResTmrMin:3; ///< NBP1 minimum residency timer
+ UINT32 NbPs0ResTmrMin:3; ///< NBP0 minimum residency timer
+} NB_PSTATE_CFG_HIGH_REGISTER;
+
+
+/* NB P-state Control and Status Register D18F6x98 */
+#define NB_PSTATE_CTRL_STS_REG 0x98
+#define NB_PSTATE_CTRL_STS_PCI_ADDR (MAKE_SBDFO (0, 0, 0x18, FUNC_6, NB_PSTATE_CTRL_STS_REG))
+
+/// NB P-state Control and Status Register
+typedef struct {
+ UINT32 NbPsTransInFlight:1; ///< NB P-state transition in flight
+ UINT32 NbPs1ActSts:1; ///< NB P-state 1 active status
+ UINT32 NbPs1Act:1; ///< NB P-state 1 active
+ UINT32 :27; ///< Reserved
+ UINT32 NbPsCsrAccSel:1; ///< NB P-state register accessibility select
+ UINT32 NbPsDbgEn:1; ///< NB P-state debug enable
+} NB_PSTATE_CTRL_STS_REGISTER;
+
+/* NCLK Reduction Control D18F6x9C */
+#define NCLK_REDUCTION_CTRL_REG 0x9C
+#define NCLK_REDUCTION_CTRL_PCI_ADDR (MAKE_SBDFO (0, 0, 0x18, FUNC_6, NCLK_REDUCTION_CTRL_REG))
+
+/// NCLK Reduction Control
+typedef struct {
+ UINT32 NclkRedDiv:7; ///< NCLK reduction divisor
+ UINT32 NclkRedSelfRefrAlways:1; ///< NCLK reduction always self refresh
+ UINT32 NclkRampWithDllRelock:1; ///< NCLK ramp mode
+ UINT32 :23; ///< Reserved
+} NCLK_REDUCTION_CTRL_REGISTER;
+
+/// enum for DSM workaround control
+typedef enum {
+ CC6_DSM_WORK_AROUND_DISABLE = 0, ///< work around disable
+ CC6_DSM_WORK_AROUND_NORMAL_TRAFFIC, ///< work around With Normal Traffic
+ CC6_DSM_WORK_AROUND_HIGH_PRIORITY_CHANNEL, ///< work around With High Priority Channel
+} CC6_DSM_WORK_AROUND;
+
+#endif /* _CPUF14POWERMGMT_H */
diff --git a/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14PowerMgmtSystemTables.c b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14PowerMgmtSystemTables.c
new file mode 100644
index 0000000000..44e31d7e8c
--- /dev/null
+++ b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14PowerMgmtSystemTables.c
@@ -0,0 +1,133 @@
+/* $NoKeywords:$ */
+/**
+ * @file
+ *
+ * AMD Family_14 Power Management Initialization Steps
+ *
+ * @xrefitem bom "File Content Label" "Release Content"
+ * @e project: AGESA
+ * @e sub-project: CPU
+ * @e \$Revision: 37018 $ @e \$Date: 2010-08-28 05:46:16 +0800 (Sat, 28 Aug 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.
+ *
+ * ***************************************************************************
+ *
+ */
+
+/*----------------------------------------------------------------------------------------
+ * M O D U L E S U S E D
+ *----------------------------------------------------------------------------------------
+ */
+#include "AGESA.h"
+#include "Ids.h"
+#include "cpuRegisters.h"
+#include "cpuApicUtilities.h"
+#include "cpuFamilyTranslation.h"
+#include "cpuPowerMgmtSystemTables.h"
+#include "cpuF14SoftwareThermal.h"
+#include "cpuF14PowerPlane.h"
+#include "cpuF14PowerCheck.h"
+#include "Filecode.h"
+#define FILECODE PROC_CPU_FAMILY_0X14_CPUF14POWERMGMTSYSTEMTABLES_FILECODE
+
+/*----------------------------------------------------------------------------------------
+ * D E F I N I T I O N S A N D M A C R O S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * T Y P E D E F S A N D S T R U C T U R E S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * P R O T O T Y P E S O F L O C A L F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * E X P O R T E D F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+
+/* Family 14h Table */
+/* ---------------------- */
+CONST SYS_PM_TBL_STEP ROMDATA CpuF14SysPmTableArray[] =
+{
+ IDS_INITIAL_F14_PM_STEP
+
+ // Step 1 - Power Plane Initialization
+ // Execute both cold & warm
+ {
+ 0, // ExeFlags
+ F14PmPwrPlaneInit // Function Pointer
+ },
+
+ // Step 2 - Current Delivery Check
+ // Execute both cold & warm
+ {
+ 0, // ExeFlags
+ F14PmPwrCheck // Function Pointer
+ },
+
+ // Step x - Software Thermal Control Init
+ // Execute both cold & warm
+ {
+ 0, // ExeFlags
+ F14PmThermalInit // Function Pointer
+ },
+};
+
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Returns the appropriate table of steps to perform to initialize the power management
+ * subsystem.
+ *
+ * @CpuServiceMethod{::F_CPU_GET_FAMILY_SPECIFIC_ARRAY}.
+ *
+ * @param[in] FamilySpecificServices The current Family Specific Services.
+ * @param[out] SysPmTblPtr Points to the first entry in the table.
+ * @param[out] NumberOfElements Number of valid entries in the table.
+ * @param[in] StdHeader Header for library and services.
+ *
+ */
+VOID
+GetF14SysPmTable (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ OUT CONST VOID **SysPmTblPtr,
+ OUT UINT8 *NumberOfElements,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ *NumberOfElements = (sizeof (CpuF14SysPmTableArray) / sizeof (SYS_PM_TBL_STEP));
+ *SysPmTblPtr = CpuF14SysPmTableArray;
+}
diff --git a/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14PowerPlane.c b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14PowerPlane.c
new file mode 100644
index 0000000000..6464954051
--- /dev/null
+++ b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14PowerPlane.c
@@ -0,0 +1,272 @@
+/* $NoKeywords:$ */
+/**
+ * @file
+ *
+ * AMD Family_14 Power Plane Initialization
+ *
+ * Performs the "BIOS Requirements for Power Plane Initialization" as described
+ * in the BKDG.
+ *
+ * @xrefitem bom "File Content Label" "Release Content"
+ * @e project: AGESA
+ * @e sub-project: CPU/F14
+ * @e \$Revision: 39275 $ @e \$Date: 2010-10-09 08:22:05 +0800 (Sat, 09 Oct 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.
+ *
+ * ***************************************************************************
+ *
+ */
+
+/*----------------------------------------------------------------------------------------
+ * M O D U L E S U S E D
+ *----------------------------------------------------------------------------------------
+ */
+#include "AGESA.h"
+#include "amdlib.h"
+#include "Ids.h"
+#include "cpuCacheInit.h"
+#include "cpuRegisters.h"
+#include "cpuFamilyTranslation.h"
+#include "cpuServices.h"
+#include "cpuF14PowerMgmt.h"
+#include "OptionFamily14hEarlySample.h"
+#include "NbSmuLib.h"
+#include "GnbRegistersON.h"
+#include "Filecode.h"
+#define FILECODE PROC_CPU_FAMILY_0X14_CPUF14POWERPLANE_FILECODE
+
+/*----------------------------------------------------------------------------------------
+ * D E F I N I T I O N S A N D M A C R O S
+ *----------------------------------------------------------------------------------------
+ */
+extern F14_ES_CORE_SUPPORT F14EarlySampleCoreSupport;
+
+// Register encodings for D18F3xD8[VSRampSlamTime]
+STATIC CONST UINT32 ROMDATA F14VSRampSlamWaitTimes[8] =
+{
+ 625, // 000b: 6.25us
+ 500, // 001b: 5.00us
+ 417, // 010b: 4.17us
+ 313, // 011b: 3.13us
+ 250, // 100b: 2.50us
+ 167, // 101b: 1.67us
+ 125, // 110b: 1.25us
+ 100 // 111b: 1.00us
+};
+
+/*----------------------------------------------------------------------------------------
+ * T Y P E D E F S A N D S T R U C T U R E S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * P R O T O T Y P E S O F L O C A L F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+VOID
+STATIC
+F14PmVrmLowPowerModeEnable (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ IN AMD_CPU_EARLY_PARAMS *CpuEarlyParams,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ );
+
+
+/*----------------------------------------------------------------------------------------
+ * E X P O R T E D F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Family 14h core 0 entry point for performing power plane initialization.
+ *
+ * The steps are as follows:
+ * 1. BIOS must initialize D18F3xD8[VSRampSlamTime].
+ * 2. BIOS must configure D18F3xA0[PsiVidEn & PsiVid] and
+ * D18F3x128[NbPsiVidEn & NbPsiVid].
+ * 3. BIOS must program D18F3xDC[NbPs0Vid] = FCRxFE00_6000[NbPs0Vid] - 1.
+ * BIOS must program D18F3xDC[NbPs0Vid] = FCRxFE00_6000[NbPs0Vid].
+ *
+ * @param[in] FamilySpecificServices The current Family Specific Services.
+ * @param[in] CpuEarlyParams Service parameters
+ * @param[in] StdHeader Config handle for library and services.
+ *
+ */
+VOID
+F14PmPwrPlaneInit (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ IN AMD_CPU_EARLY_PARAMS *CpuEarlyParams,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ UINT32 SystemSlewRate;
+ UINT32 PciRegister;
+ UINT32 WaitTime;
+ UINT32 VSRampSlamTime;
+ PCI_ADDR PciAddress;
+ FCRxFE00_6000_STRUCT FCRxFE00_6000;
+
+ // Step 1 - Configure D18F3xD8[VSRampSlamTime] based on platform requirements.
+ // Voltage Ramp Time = maximum time to change voltage by 12.5mV rounded to the next higher encoding.
+ SystemSlewRate = (CpuEarlyParams->PlatformConfig.VrmProperties[CoreVrm].SlewRate <=
+ CpuEarlyParams->PlatformConfig.VrmProperties[NbVrm].SlewRate) ?
+ CpuEarlyParams->PlatformConfig.VrmProperties[CoreVrm].SlewRate :
+ CpuEarlyParams->PlatformConfig.VrmProperties[NbVrm].SlewRate;
+
+ ASSERT (SystemSlewRate != 0);
+
+ // First, calculate the time it takes to change 12.5mV using the VRM slew rate.
+ WaitTime = (12500 * 100) / SystemSlewRate;
+ if (((12500 * 100) % SystemSlewRate) != 0) {
+ WaitTime++;
+ }
+
+ // Next, round it to the appropriate encoded value. We will start from encoding 111b which corresponds
+ // to the fastest slew rate, and work our way down to 000b, which represents the slowest an acceptable
+ // VRM can be.
+ for (VSRampSlamTime = ((sizeof (F14VSRampSlamWaitTimes) / sizeof (F14VSRampSlamWaitTimes[0])) - 1); VSRampSlamTime > 0; VSRampSlamTime--) {
+ if (WaitTime <= F14VSRampSlamWaitTimes[VSRampSlamTime]) {
+ break;
+ }
+ }
+
+ if (WaitTime > F14VSRampSlamWaitTimes[0]) {
+ // The VRMs on this motherboard are too slow for this CPU.
+ IDS_ERROR_TRAP;
+ }
+
+ // Lastly, program D18F3xD8[VSRampSlamTime] with the appropriate encoded value.
+ PciAddress.AddressValue = CPTC1_PCI_ADDR;
+ LibAmdPciRead (AccessWidth32, PciAddress, &PciRegister, StdHeader);
+ ((CLK_PWR_TIMING_CTRL1_REGISTER *) &PciRegister)->VSRampSlamTime = VSRampSlamTime;
+ LibAmdPciWrite (AccessWidth32, PciAddress, &PciRegister, StdHeader);
+
+ // Step 2 - Configure D18F3xA0[PsiVidEn & PsiVid] and D18F3x128[NbPsiVidEn & NbPsiVid].
+ F14PmVrmLowPowerModeEnable (FamilySpecificServices, CpuEarlyParams, StdHeader);
+
+ // Step 3 - Program D18F3xDC[NbPs0Vid] = FCRxFE00_6000[NbPs0Vid] - 1.
+ // Program D18F3xDC[NbPs0Vid] = FCRxFE00_6000[NbPs0Vid].
+ FCRxFE00_6000.Value = NbSmuReadEfuse (FCRxFE00_6000_ADDRESS, StdHeader);
+
+ F14EarlySampleCoreSupport.F14PowerPlaneInitHook (&FCRxFE00_6000, StdHeader);
+
+ PciAddress.AddressValue = CPTC2_PCI_ADDR;
+ LibAmdPciRead (AccessWidth32, PciAddress, &PciRegister, StdHeader);
+ ((CLK_PWR_TIMING_CTRL2_REGISTER *) &PciRegister)->NbPs0Vid = FCRxFE00_6000.Field.NbPs0Vid - 1;
+ LibAmdPciWrite (AccessWidth32, PciAddress, &PciRegister, StdHeader);
+ ((CLK_PWR_TIMING_CTRL2_REGISTER *) &PciRegister)->NbPs0Vid = FCRxFE00_6000.Field.NbPs0Vid;
+ LibAmdPciWrite (AccessWidth32, PciAddress, &PciRegister, StdHeader);
+}
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Sets up PSI_L operation.
+ *
+ * This function implements the AMD_CPU_EARLY_PARAMS.VrmLowPowerThreshold parameter.
+ *
+ * @param[in] FamilySpecificServices The current Family Specific Services.
+ * @param[in] CpuEarlyParams Contains VrmLowPowerThreshold parameter.
+ * @param[in] StdHeader Config handle for library and services.
+ *
+ */
+VOID
+STATIC
+F14PmVrmLowPowerModeEnable (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ IN AMD_CPU_EARLY_PARAMS *CpuEarlyParams,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ UINT32 Pstate;
+ UINT32 PstateMaxVal;
+ UINT32 PstateCurrent;
+ UINT32 NextPstateCurrent;
+ UINT32 NextPstateCurrentRaw;
+ UINT32 PciRegister;
+ UINT32 PreviousVid;
+ UINT32 CurrentVid;
+ UINT64 PstateMsr;
+ UINT64 PstateLimitMsr;
+ BOOLEAN IsPsiEnabled;
+ PCI_ADDR PciAddress;
+
+ // Set up PSI_L for VDD
+ IsPsiEnabled = FALSE;
+ PreviousVid = 0x7F;
+ CurrentVid = 0x7F;
+ if (CpuEarlyParams->PlatformConfig.VrmProperties[CoreVrm].LowPowerThreshold != 0) {
+ LibAmdMsrRead (MSR_PSTATE_CURRENT_LIMIT, &PstateLimitMsr, StdHeader);
+ PstateMaxVal = (UINT32) ((PSTATE_CURLIM_MSR *) &PstateLimitMsr)->PstateMaxVal;
+ FamilySpecificServices->GetProcIddMax (FamilySpecificServices, (UINT8) 0, &PstateCurrent, StdHeader);
+ for (Pstate = 0; Pstate <= PstateMaxVal; Pstate++) {
+ LibAmdMsrRead ((UINT32) (Pstate + PS_REG_BASE), &PstateMsr, StdHeader);
+ CurrentVid = (UINT32) ((PSTATE_MSR *) &PstateMsr)->CpuVid;
+ if (Pstate == PstateMaxVal) {
+ NextPstateCurrentRaw = 0;
+ NextPstateCurrent = 0;
+ } else {
+ FamilySpecificServices->GetProcIddMax (FamilySpecificServices, (UINT8) (Pstate + 1), &NextPstateCurrentRaw, StdHeader);
+ NextPstateCurrent = NextPstateCurrentRaw + CpuEarlyParams->PlatformConfig.VrmProperties[CoreVrm].InrushCurrentLimit;
+ }
+ if ((PstateCurrent <= CpuEarlyParams->PlatformConfig.VrmProperties[CoreVrm].LowPowerThreshold) &&
+ (NextPstateCurrent <= CpuEarlyParams->PlatformConfig.VrmProperties[CoreVrm].LowPowerThreshold) &&
+ (CurrentVid != PreviousVid)) {
+ IsPsiEnabled = TRUE;
+ break;
+ } else {
+ PstateCurrent = NextPstateCurrentRaw;
+ PreviousVid = CurrentVid;
+ }
+ }
+ }
+ PciAddress.AddressValue = PW_CTL_MISC_PCI_ADDR;
+ LibAmdPciRead (AccessWidth32, PciAddress, &PciRegister, StdHeader);
+ if (IsPsiEnabled) {
+ ((POWER_CTRL_MISC_REGISTER *) &PciRegister)->PsiVid = CurrentVid;
+ ((POWER_CTRL_MISC_REGISTER *) &PciRegister)->PsiVidEn = 1;
+ } else {
+ ((POWER_CTRL_MISC_REGISTER *) &PciRegister)->PsiVidEn = 0;
+ }
+ LibAmdPciWrite (AccessWidth32, PciAddress, &PciRegister, StdHeader);
+
+
+ // Set up NBPSI_L for VDDNB
+ PciAddress.AddressValue = CPTC3_PCI_ADDR;
+ LibAmdPciRead (AccessWidth32, PciAddress, &PciRegister, StdHeader);
+ if (CpuEarlyParams->PlatformConfig.VrmProperties[NbVrm].LowPowerThreshold != 0) {
+ ((CLK_PWR_TIMING_CTRL3_REGISTER *) &PciRegister)->NbPsiVid = 0;
+ ((CLK_PWR_TIMING_CTRL3_REGISTER *) &PciRegister)->NbPsiVidEn = 1;
+ } else {
+ ((CLK_PWR_TIMING_CTRL3_REGISTER *) &PciRegister)->NbPsiVidEn = 0;
+ }
+ LibAmdPciWrite (AccessWidth32, PciAddress, &PciRegister, StdHeader);
+}
diff --git a/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14PowerPlane.h b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14PowerPlane.h
new file mode 100644
index 0000000000..c2dad37be3
--- /dev/null
+++ b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14PowerPlane.h
@@ -0,0 +1,78 @@
+/* $NoKeywords:$ */
+/**
+ * @file
+ *
+ * AMD Family_14 Power Plane related functions and structures
+ *
+ * @xrefitem bom "File Content Label" "Release Content"
+ * @e project: AGESA
+ * @e sub-project: CPU/F14
+ * @e \$Revision: 34897 $ @e \$Date: 2010-07-14 10:07:10 +0800 (Wed, 14 Jul 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 _CPU_F14_POWER_PLANE_H_
+#define _CPU_F14_POWER_PLANE_H_
+
+
+/*---------------------------------------------------------------------------------------
+ * M I X E D (Definitions And Macros / Typedefs, Structures, Enums)
+ *---------------------------------------------------------------------------------------
+ */
+
+
+/*---------------------------------------------------------------------------------------
+ * D E F I N I T I O N S A N D M A C R O S
+ *---------------------------------------------------------------------------------------
+ */
+
+
+/*---------------------------------------------------------------------------------------
+ * T Y P E D E F S, S T R U C T U R E S, E N U M S
+ *---------------------------------------------------------------------------------------
+ */
+
+
+/*---------------------------------------------------------------------------------------
+ * F U N C T I O N P R O T O T Y P E
+ *---------------------------------------------------------------------------------------
+ */
+VOID
+F14PmPwrPlaneInit (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ IN AMD_CPU_EARLY_PARAMS *CpuEarlyParams,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ );
+
+#endif // _CPU_F14_POWER_PLANE_H_
diff --git a/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14Pstate.c b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14Pstate.c
new file mode 100644
index 0000000000..d37f3fd32a
--- /dev/null
+++ b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14Pstate.c
@@ -0,0 +1,364 @@
+/* $NoKeywords:$ */
+/**
+ * @file
+ *
+ * AMD Family_14 Pstate feature support functions.
+ *
+ * Provides the functions necessary to initialize the Pstate feature.
+ *
+ * @xrefitem bom "File Content Label" "Release Content"
+ * @e project: AGESA
+ * @e sub-project: CPU/F14
+ * @e \$Revision: 37010 $ @e \$Date: 2010-08-28 03:10:12 +0800 (Sat, 28 Aug 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.
+ *
+ * ***************************************************************************
+ *
+ */
+
+/*----------------------------------------------------------------------------------------
+ * M O D U L E S U S E D
+ *----------------------------------------------------------------------------------------
+ */
+#include "AGESA.h"
+#include "amdlib.h"
+#include "Ids.h"
+#include "cpuPstateTables.h"
+#include "cpuFamilyTranslation.h"
+#include "cpuRegisters.h"
+#include "cpuF14Utilities.h"
+#include "cpuF14PowerMgmt.h"
+#include "CommonReturns.h"
+#include "Filecode.h"
+#define FILECODE PROC_CPU_FAMILY_0X14_CPUF14PSTATE_FILECODE
+
+/*----------------------------------------------------------------------------------------
+ * D E F I N I T I O N S A N D M A C R O S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * T Y P E D E F S A N D S T R U C T U R E S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * P R O T O T Y P E S O F L O C A L F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * E X P O R T E D F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+
+/**
+ * Family specific call to set core TscFreqSel.
+ *
+ * @param[in] PstateCpuServices Pstate CPU services.
+ * @param[in] StdHeader Config Handle for library, services.
+ *
+ */
+VOID
+STATIC
+F14SetTscFreqSel (
+ IN PSTATE_CPU_FAMILY_SERVICES *PstateCpuServices,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ UINT64 MsrValue;
+
+ LibAmdMsrRead (MSR_HWCR, &MsrValue, StdHeader);
+ MsrValue = MsrValue | BIT24;
+ LibAmdMsrWrite (MSR_HWCR, &MsrValue, StdHeader);
+}
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Family specific call to get Pstate Transition Latency.
+ *
+ * Follow BKDG, return zero currently.
+ *
+ * @param[in] PstateCpuServices Pstate CPU services.
+ * @param[in] PStateLevelingBufferStructPtr Pstate row data buffer pointer
+ * @param[in] PciAddress Pci address
+ * @param[out] TransitionLatency The transition latency.
+ * @param[in] StdHeader Header for library and services
+ *
+ * @retval AGESA_SUCCESS Always succeeds.
+ */
+AGESA_STATUS
+F14GetPstateTransLatency (
+ IN PSTATE_CPU_FAMILY_SERVICES *PstateCpuServices,
+ IN PSTATE_LEVELING *PStateLevelingBufferStructPtr,
+ IN PCI_ADDR *PciAddress,
+ OUT UINT32 *TransitionLatency,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ //
+ // TransitionLatency (us) = BusMasterLatency (us) = 0 us, calculation may
+ // change due to a potential new encoding.
+ //
+ *TransitionLatency = 0;
+ return (AGESA_SUCCESS);
+}
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Family specific call to calculates the frequency in megahertz of the desired P-state.
+ *
+ * @param[in] PstateCpuServices Pstate CPU services.
+ * @param[in] StateNumber The P-State to analyze.
+ * @param[out] FrequencyInMHz The P-State's frequency in MegaHertz
+ * @param[in] StdHeader Header for library and services
+ *
+ * @retval AGESA_SUCCESS Always Succeeds.
+ */
+AGESA_STATUS
+F14GetPstateFrequency (
+ IN PSTATE_CPU_FAMILY_SERVICES *PstateCpuServices,
+ IN UINT8 StateNumber,
+ OUT UINT32 *FrequencyInMHz,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ UINT32 CpuDidLSD;
+ UINT32 CpuDidMSD;
+ UINT32 CoreClkDivisor;
+ UINT32 PciRegister;
+ UINT64 MsrRegister;
+ BOOLEAN FrequencyCalculated;
+ BOOLEAN ClockDivisorCalculated;
+ PCI_ADDR PciAddress;
+ UINT32 MainPllOpFreq;
+ UINT32 MainPllFid;
+
+ ASSERT (StateNumber < NM_PS_REG);
+
+ LibAmdMsrRead (PS_REG_BASE + (UINT32) StateNumber, &MsrRegister, StdHeader);
+ ASSERT (((PSTATE_MSR *) &MsrRegister)->PsEnable == 1);
+
+ CpuDidLSD = (UINT32) (((PSTATE_MSR *) &MsrRegister)->CpuDidLSD);
+ CpuDidMSD = (UINT32) (((PSTATE_MSR *) &MsrRegister)->CpuDidMSD);
+
+ FrequencyCalculated = FALSE;
+ ClockDivisorCalculated = FALSE;
+ CoreClkDivisor = 1;
+
+ if ((CpuDidLSD > 3) || (CpuDidMSD > 0x19)) {
+ // Either CpuDidLSD or CpuDidMSD is set to an undefined value.
+ // This is due to either a misfused CPU, or an invalid P-state MSR write.
+ ASSERT (FALSE);
+ ClockDivisorCalculated = TRUE;
+ FrequencyCalculated = TRUE;
+ CoreClkDivisor = 4;
+ *FrequencyInMHz = 100;
+ }
+
+ if (!ClockDivisorCalculated) {
+ CoreClkDivisor = (CpuDidMSD * 4) + CpuDidLSD + 4;
+ }
+ // Checking for supported divisor value
+ ASSERT (((CoreClkDivisor >= 4) && (CoreClkDivisor <= 63)) ||
+ ((CoreClkDivisor >= 64) && (CoreClkDivisor <= 106) && ((CoreClkDivisor % 2) == 0)));
+
+ if (!FrequencyCalculated) {
+ // Get D18F3xD4[MainPllOpFreqId] frequency
+ PciAddress.AddressValue = CPTC0_PCI_ADDR;
+ LibAmdPciRead (AccessWidth32, PciAddress, &PciRegister, StdHeader);
+
+ if (((CLK_PWR_TIMING_CTRL_REGISTER *) &PciRegister)->MainPllOpFreqIdEn == 1) {
+ MainPllFid = ((CLK_PWR_TIMING_CTRL_REGISTER *) &PciRegister)->MainPllOpFreqId;
+ } else {
+ MainPllFid = 0;
+ }
+ MainPllOpFreq = ((MainPllFid + 0x10) * 100);
+
+ *FrequencyInMHz = MainPllOpFreq * 4 / CoreClkDivisor;
+ }
+
+ return (AGESA_SUCCESS);
+}
+
+/*--------------------------------------------------------------------------------------*/
+/**
+ *
+ * Family specific call to calculates the power in milliWatts of the desired P-state.
+ *
+ * @param[in] PstateCpuServices Pstate CPU services.
+ * @param[in] StateNumber Which P-state to analyze
+ * @param[out] PowerInMw The Power in milliWatts of that P-State
+ * @param[in] StdHeader Header for library and services
+ *
+ * @retval AGESA_SUCCESS Always succeeds.
+ */
+AGESA_STATUS
+F14GetPstatePower (
+ IN PSTATE_CPU_FAMILY_SERVICES *PstateCpuServices,
+ IN UINT8 StateNumber,
+ OUT UINT32 *PowerInMw,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ UINT32 CpuVid;
+ UINT32 IddValue;
+ UINT32 IddDiv;
+ UINT32 V_x10000;
+ UINT32 Power;
+ UINT64 MsrRegister;
+
+ ASSERT (StateNumber < NM_PS_REG);
+ LibAmdMsrRead (PS_REG_BASE + (UINT32) StateNumber, &MsrRegister, StdHeader);
+ ASSERT (((PSTATE_MSR *) &MsrRegister)->PsEnable == 1);
+ CpuVid = (UINT32) (((PSTATE_MSR *) &MsrRegister)->CpuVid);
+ IddValue = (UINT32) (((PSTATE_MSR *) &MsrRegister)->IddValue);
+ IddDiv = (UINT32) (((PSTATE_MSR *) &MsrRegister)->IddDiv);
+
+ if (CpuVid >= 0x7C) {
+ V_x10000 = 0;
+ } else {
+ V_x10000 = 15500L - (125L * CpuVid);
+ }
+
+ Power = V_x10000 * IddValue;
+
+ switch (IddDiv) {
+ case 0:
+ *PowerInMw = Power / 10L;
+ break;
+ case 1:
+ *PowerInMw = Power / 100L;
+ break;
+ case 2:
+ *PowerInMw = Power / 1000L;
+ break;
+ default:
+ // IddDiv is set to an undefined value. This is due to either a misfused CPU, or
+ // an invalid P-state MSR write.
+ ASSERT (FALSE);
+ *PowerInMw = 0;
+ break;
+ }
+ return (AGESA_SUCCESS);
+}
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Family specific call to get CPU pstate max state.
+ *
+ * @param[in] PstateCpuServices Pstate CPU services.
+ * @param[out] MaxPStateNumber Boolean flag return pstate enable.
+ * @param[in] StdHeader Handle of Header for calling lib functions and services.
+ *
+ * @retval AGESA_SUCCESS Always succeeds.
+ */
+AGESA_STATUS
+F14GetPstateMaxState (
+ IN PSTATE_CPU_FAMILY_SERVICES *PstateCpuServices,
+ OUT UINT32 *MaxPStateNumber,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ UINT64 MsrValue;
+
+ //
+ // Read PstateMaxVal [6:4] from MSR C001_0061
+ // So, we will know the max pstate state in this socket.
+ //
+ LibAmdMsrRead (MSR_PSTATE_CURRENT_LIMIT, &MsrValue, StdHeader);
+ *MaxPStateNumber = (UINT32) (((PSTATE_CURLIM_MSR *) &MsrValue)->PstateMaxVal);
+
+ return (AGESA_SUCCESS);
+}
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Family specific call to get CPU pstate register information.
+ *
+ * @param[in] PstateCpuServices Pstate CPU services.
+ * @param[in] PState Input Pstate number for query.
+ * @param[out] PStateEnabled Boolean flag return pstate enable.
+ * @param[in,out] IddVal Pstate current value.
+ * @param[in,out] IddDiv Pstate current divisor.
+ * @param[out] SwPstateNumber Software P-state number.
+ * @param[in] StdHeader Handle of Header for calling lib functions and services.
+ *
+ * @retval AGESA_SUCCESS Always succeeds.
+ */
+AGESA_STATUS
+F14GetPstateRegisterInfo (
+ IN PSTATE_CPU_FAMILY_SERVICES *PstateCpuServices,
+ IN UINT32 PState,
+ OUT BOOLEAN *PStateEnabled,
+ IN OUT UINT32 *IddVal,
+ IN OUT UINT32 *IddDiv,
+ OUT UINT32 *SwPstateNumber,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ UINT64 MsrRegister;
+
+ ASSERT (PState < NM_PS_REG);
+
+ // Read PSTATE MSRs
+ LibAmdMsrRead (PS_REG_BASE + (UINT32) PState, &MsrRegister, StdHeader);
+
+ if (((PSTATE_MSR *) &MsrRegister)->PsEnable == 1) {
+ // PState enable = bit 63
+ *PStateEnabled = TRUE;
+ } else {
+ *PStateEnabled = FALSE;
+ }
+
+ *SwPstateNumber = PState;
+ // Bits 39:32 (high 32 bits [7:0])
+ *IddVal = (UINT32) ((PSTATE_MSR *) &MsrRegister)->IddValue;
+ // Bits 41:40 (high 32 bits [9:8])
+ *IddDiv = (UINT32) ((PSTATE_MSR *) &MsrRegister)->IddDiv;
+
+ return (AGESA_SUCCESS);
+}
+
+
+CONST PSTATE_CPU_FAMILY_SERVICES ROMDATA F14PstateServices =
+{
+ 0,
+ (PF_PSTATE_PSD_IS_NEEDED) CommonReturnTrue,
+ (PF_PSTATE_PSD_IS_DEPENDENT) CommonReturnTrue,
+ F14SetTscFreqSel,
+ F14GetPstateTransLatency,
+ F14GetPstateFrequency,
+ (PF_CPU_SET_PSTATE_LEVELING_REG) CommonReturnAgesaSuccess,
+ F14GetPstatePower,
+ F14GetPstateMaxState,
+ F14GetPstateRegisterInfo
+};
diff --git a/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14SoftwareThermal.c b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14SoftwareThermal.c
new file mode 100644
index 0000000000..249a3bcc80
--- /dev/null
+++ b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14SoftwareThermal.c
@@ -0,0 +1,112 @@
+/* $NoKeywords:$ */
+/**
+ * @file
+ *
+ * AMD Family_14 thermal initialization
+ *
+ * Performs processor thermal initialization.
+ *
+ * @xrefitem bom "File Content Label" "Release Content"
+ * @e project: AGESA
+ * @e sub-project: CPU/F14
+ * @e \$Revision: 34897 $ @e \$Date: 2010-07-14 10:07:10 +0800 (Wed, 14 Jul 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.
+ *
+ * ***************************************************************************
+ *
+ */
+
+/*----------------------------------------------------------------------------------------
+ * M O D U L E S U S E D
+ *----------------------------------------------------------------------------------------
+ */
+#include "AGESA.h"
+#include "amdlib.h"
+#include "cpuCacheInit.h"
+#include "cpuRegisters.h"
+#include "cpuFamilyTranslation.h"
+#include "cpuF14PowerMgmt.h"
+#include "Filecode.h"
+#define FILECODE PROC_CPU_FAMILY_0X14_CPUF14SOFTWARETHERMAL_FILECODE
+
+/*----------------------------------------------------------------------------------------
+ * D E F I N I T I O N S A N D M A C R O S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * T Y P E D E F S A N D S T R U C T U R E S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * P R O T O T Y P E S O F L O C A L F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * E X P O R T E D F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------*/
+/**
+ * Main entry point for initializing the SW Thermal Control
+ * safety net feature.
+ *
+ * This must be run by all Family 14h core 0s in the system.
+ *
+ * @param[in] FamilySpecificServices The current Family Specific Services.
+ * @param[in] CpuEarlyParamsPtr Service parameters.
+ * @param[in] StdHeader Config handle for library and services.
+ */
+VOID
+F14PmThermalInit (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ IN AMD_CPU_EARLY_PARAMS *CpuEarlyParamsPtr,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ UINT32 PciRegister;
+ PCI_ADDR PciAddress;
+
+ PciAddress.AddressValue = NB_CAPS_PCI_ADDR;
+ LibAmdPciRead (AccessWidth32, PciAddress, &PciRegister, StdHeader);
+ if (((NB_CAPS_REGISTER *) &PciRegister)->HtcCapable == 1) {
+ PciAddress.AddressValue = HTC_PCI_ADDR;
+ LibAmdPciRead (AccessWidth32, PciAddress, &PciRegister, StdHeader);
+ if (((HTC_REGISTER *) &PciRegister)->HtcTmpLmt != 0) {
+ // Enable HTC
+ ((HTC_REGISTER *) &PciRegister)->HtcEn = 1;
+ LibAmdPciWrite (AccessWidth32, PciAddress, &PciRegister, StdHeader);
+ }
+ }
+}
diff --git a/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14SoftwareThermal.h b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14SoftwareThermal.h
new file mode 100644
index 0000000000..7a61f23ef4
--- /dev/null
+++ b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14SoftwareThermal.h
@@ -0,0 +1,80 @@
+/* $NoKeywords:$ */
+/**
+ * @file
+ *
+ * AMD Family_14 thermal initialization related functions and structures
+ *
+ * Performs processor thermal initialization.
+ *
+ * @xrefitem bom "File Content Label" "Release Content"
+ * @e project: AGESA
+ * @e sub-project: CPU/F14
+ * @e \$Revision: 34897 $ @e \$Date: 2010-07-14 10:07:10 +0800 (Wed, 14 Jul 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 _CPU_F14_SOFTWARE_THERMAL_H_
+#define _CPU_F14_SOFTWARE_THERMAL_H_
+
+
+/*---------------------------------------------------------------------------------------
+ * M I X E D (Definitions And Macros / Typedefs, Structures, Enums)
+ *---------------------------------------------------------------------------------------
+ */
+
+
+/*---------------------------------------------------------------------------------------
+ * D E F I N I T I O N S A N D M A C R O S
+ *---------------------------------------------------------------------------------------
+ */
+
+
+/*---------------------------------------------------------------------------------------
+ * T Y P E D E F S, S T R U C T U R E S, E N U M S
+ *---------------------------------------------------------------------------------------
+ */
+
+
+/*---------------------------------------------------------------------------------------
+ * F U N C T I O N P R O T O T Y P E
+ *---------------------------------------------------------------------------------------
+ */
+VOID
+F14PmThermalInit (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ IN AMD_CPU_EARLY_PARAMS *CpuEarlyParamsPtr,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ );
+
+#endif // _CPU_F14_SOFTWARE_THERMAL_H_
diff --git a/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14Utilities.c b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14Utilities.c
new file mode 100644
index 0000000000..f6a13e59fe
--- /dev/null
+++ b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14Utilities.c
@@ -0,0 +1,539 @@
+/* $NoKeywords:$ */
+/**
+ * @file
+ *
+ * AMD Family_14 specific utility functions.
+ *
+ * Provides numerous utility functions specific to family 14h.
+ *
+ * @xrefitem bom "File Content Label" "Release Content"
+ * @e project: AGESA
+ * @e sub-project: CPU/F14
+ * @e \$Revision: 37640 $ @e \$Date: 2010-09-08 23:01:59 +0800 (Wed, 08 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.
+ *
+ * ***************************************************************************
+ *
+ */
+
+/*----------------------------------------------------------------------------------------
+ * M O D U L E S U S E D
+ *----------------------------------------------------------------------------------------
+ */
+#include "AGESA.h"
+#include "amdlib.h"
+#include "Ids.h"
+#include "cpuRegisters.h"
+#include "cpuFamilyTranslation.h"
+#include "cpuPstateTables.h"
+#include "cpuF14PowerMgmt.h"
+#include "cpuServices.h"
+#include "GeneralServices.h"
+#include "cpuF14Utilities.h"
+#include "cpuPostInit.h"
+#include "Filecode.h"
+#define FILECODE PROC_CPU_FAMILY_0X14_CPUF14UTILITIES_FILECODE
+
+/*----------------------------------------------------------------------------------------
+ * D E F I N I T I O N S A N D M A C R O S
+ *----------------------------------------------------------------------------------------
+ */
+extern CPU_FAMILY_SUPPORT_TABLE PstateFamilyServiceTable;
+
+/*----------------------------------------------------------------------------------------
+ * T Y P E D E F S A N D S T R U C T U R E S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * P R O T O T Y P E S O F L O C A L F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+VOID
+F14ConvertEnabledBitsIntoCount (
+ OUT UINT8 *EnabledCoreCountPtr,
+ IN UINT8 FusedCoreCount,
+ IN UINT8 EnabledCores
+ );
+
+
+/*----------------------------------------------------------------------------------------
+ * E X P O R T E D F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+
+VOID
+F14ConvertEnabledBitsIntoCount (
+ OUT UINT8 *EnabledCoreCountPtr,
+ IN UINT8 FusedCoreCount,
+ IN UINT8 EnabledCores
+ )
+{
+ UINT8 i;
+ UINT8 j;
+ UINT8 EnabledCoreCount;
+
+ EnabledCoreCount = 0;
+
+ for (i = 0; i < FusedCoreCount+1; i++) {
+ j = 1;
+ if (!((BOOLEAN) (EnabledCores) & (j << i))) {
+ EnabledCoreCount++;
+ }
+ }
+
+ *EnabledCoreCountPtr = EnabledCoreCount;
+}
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Disables the desired P-state.
+ *
+ * @CpuServiceMethod{::F_CPU_DISABLE_PSTATE}.
+ *
+ * @param[in] FamilySpecificServices The current Family Specific Services.
+ * @param[in] StateNumber The P-State to disable.
+ * @param[in] StdHeader Header for library and services
+ *
+ * @retval AGESA_SUCCESS Always succeeds.
+ */
+AGESA_STATUS
+F14DisablePstate (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ IN UINT8 StateNumber,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ UINT64 MsrRegister;
+
+ ASSERT (StateNumber < NM_PS_REG);
+ LibAmdMsrRead (PS_REG_BASE + (UINT32) StateNumber, &MsrRegister, StdHeader);
+ ((PSTATE_MSR *) &MsrRegister)->PsEnable = 0;
+ LibAmdMsrWrite (PS_REG_BASE + (UINT32) StateNumber, &MsrRegister, StdHeader);
+ return (AGESA_SUCCESS);
+}
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Transitions the executing core to the desired P-state.
+ *
+ * @CpuServiceMethod{::F_CPU_TRANSITION_PSTATE}.
+ *
+ * @param[in] FamilySpecificServices The current Family Specific Services.
+ * @param[in] StateNumber The new P-State to make effective.
+ * @param[in] WaitForTransition True if the caller wants the transition completed upon return.
+ * @param[in] StdHeader Header for library and services
+ *
+ * @retval AGESA_SUCCESS Always Succeeds
+ */
+AGESA_STATUS
+F14TransitionPstate (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ IN UINT8 StateNumber,
+ IN BOOLEAN WaitForTransition,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ UINT64 MsrRegister;
+
+ ASSERT (StateNumber < NM_PS_REG);
+ LibAmdMsrRead (PS_REG_BASE + (UINT32) StateNumber, &MsrRegister, StdHeader);
+ ASSERT (((PSTATE_MSR *) &MsrRegister)->PsEnable == 1);
+ LibAmdMsrRead (MSR_PSTATE_CTL, &MsrRegister, StdHeader);
+ ((PSTATE_CTRL_MSR *) &MsrRegister)->PstateCmd = (UINT64) StateNumber;
+ LibAmdMsrWrite (MSR_PSTATE_CTL, &MsrRegister, StdHeader);
+ if (WaitForTransition) {
+ do {
+ LibAmdMsrRead (MSR_PSTATE_STS, &MsrRegister, StdHeader);
+ } while (((PSTATE_STS_MSR *) &MsrRegister)->CurPstate != (UINT64) StateNumber);
+ }
+ return (AGESA_SUCCESS);
+}
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Determines the rate at which the executing core's time stamp counter is
+ * incrementing.
+ *
+ * @CpuServiceMethod{::F_CPU_GET_TSC_RATE}.
+ *
+ * @param[in] FamilySpecificServices The current Family Specific Services.
+ * @param[out] FrequencyInMHz TSC actual frequency.
+ * @param[in] StdHeader Header for library and services.
+ *
+ * @return The most severe status of all called services
+ */
+AGESA_STATUS
+F14GetTscRate (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ OUT UINT32 *FrequencyInMHz,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ UINT64 MsrRegister;
+ PSTATE_CPU_FAMILY_SERVICES *FamilyServices;
+
+ FamilyServices = NULL;
+ GetFeatureServicesOfCurrentCore (&PstateFamilyServiceTable, &FamilyServices, StdHeader);
+ ASSERT (FamilyServices != NULL);
+
+ LibAmdMsrRead (0xC0010015, &MsrRegister, StdHeader);
+ if ((MsrRegister & 0x01000000) != 0) {
+ return (FamilyServices->GetPstateFrequency (FamilyServices, 0, FrequencyInMHz, StdHeader));
+ } else {
+ return (FamilySpecificServices->GetCurrentNbFrequency (FamilySpecificServices, FrequencyInMHz, StdHeader));
+ }
+}
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Determines the NB clock on the desired node.
+ *
+ * @CpuServiceMethod{::F_CPU_GET_NB_FREQ}.
+ *
+ * @param[in] FamilySpecificServices The current Family Specific Services.
+ * @param[out] FrequencyInMHz Northbridge clock frequency in MHz.
+ * @param[in] StdHeader Header for library and services
+ *
+ * @retval AGESA_SUCCESS Always succeeds.
+ */
+AGESA_STATUS
+F14GetCurrentNbFrequency (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ OUT UINT32 *FrequencyInMHz,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ UINT32 PciRegister;
+ UINT32 MainPllFid;
+ PCI_ADDR PciAddress;
+
+ PciAddress.AddressValue = CPTC0_PCI_ADDR;
+ LibAmdPciRead (AccessWidth32, PciAddress, &PciRegister, StdHeader);
+
+ if (((CLK_PWR_TIMING_CTRL_REGISTER *) &PciRegister)->MainPllOpFreqIdEn == 1) {
+ MainPllFid = ((CLK_PWR_TIMING_CTRL_REGISTER *) &PciRegister)->MainPllOpFreqId;
+ } else {
+ MainPllFid = 0;
+ }
+
+ *FrequencyInMHz = ((MainPllFid + 0x10) * 100);
+
+ ASSERT (*FrequencyInMHz <= 4000);
+
+ return (AGESA_SUCCESS);
+}
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Determines the NB clock on the desired node.
+ *
+ * @CpuServiceMethod{::F_CPU_GET_NB_PSTATE_INFO}.
+ *
+ * @param[in] FamilySpecificServices The current Family Specific Services.
+ * @param[in] PlatformConfig Platform profile/build option config structure.
+ * @param[in] PciAddress The segment, bus, and device numbers of the CPU in question.
+ * @param[in] NbPstate The NB P-state number to check.
+ * @param[out] FreqNumeratorInMHz The desired node's frequency numerator in megahertz.
+ * @param[out] FreqDivisor The desired node's frequency divisor.
+ * @param[out] VoltageInuV The desired node's voltage in microvolts.
+ * @param[in] StdHeader Handle of Header for calling lib functions and services.
+ *
+ * @retval TRUE NbPstate is valid
+ * @retval FALSE NbPstate is disabled or invalid
+ */
+BOOLEAN
+F14GetNbPstateInfo (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ IN PLATFORM_CONFIGURATION *PlatformConfig,
+ IN PCI_ADDR *PciAddress,
+ IN UINT32 NbPstate,
+ OUT UINT32 *FreqNumeratorInMHz,
+ OUT UINT32 *FreqDivisor,
+ OUT UINT32 *VoltageInuV,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ UINT32 NbVid;
+ UINT32 PciRegister;
+ UINT32 MainPllFreq;
+ BOOLEAN PstateIsValid;
+
+ PstateIsValid = FALSE;
+ if ((NbPstate == 0) || ((NbPstate == 1) && FamilySpecificServices->IsNbPstateEnabled (FamilySpecificServices, PlatformConfig, StdHeader))) {
+ FamilySpecificServices->GetCurrentNbFrequency (FamilySpecificServices, &MainPllFreq, StdHeader);
+ *FreqNumeratorInMHz = (MainPllFreq * 4);
+ if (NbPstate == 0) {
+ PciAddress->Address.Function = FUNC_3;
+ PciAddress->Address.Register = CPTC2_REG;
+ LibAmdPciRead (AccessWidth32, *PciAddress, &PciRegister, StdHeader);
+ *FreqDivisor = ((CLK_PWR_TIMING_CTRL2_REGISTER *) &PciRegister)->NbPs0NclkDiv;
+ NbVid = ((CLK_PWR_TIMING_CTRL2_REGISTER *) &PciRegister)->NbPs0Vid;
+ } else {
+ PciAddress->Address.Function = FUNC_6;
+ PciAddress->Address.Register = NB_PSTATE_CFG_LOW_REG;
+ LibAmdPciRead (AccessWidth32, *PciAddress, &PciRegister, StdHeader);
+ *FreqDivisor = ((NB_PSTATE_CFG_LOW_REGISTER *) &PciRegister)->NbPs1NclkDiv;
+ NbVid = ((NB_PSTATE_CFG_LOW_REGISTER *) &PciRegister)->NbPs1Vid;
+ }
+ *VoltageInuV = (1550000 - (12500 * NbVid));
+ PstateIsValid = TRUE;
+ }
+ return PstateIsValid;
+}
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Is the Northbridge PState feature enabled?
+ *
+ * @CpuServiceMethod{::F_IS_NB_PSTATE_ENABLED}.
+ *
+ * @param[in] FamilySpecificServices The current Family Specific Services.
+ * @param[in] PlatformConfig Platform profile/build option config structure.
+ * @param[in] StdHeader Handle of Header for calling lib functions and services.
+ *
+ * @retval TRUE The NB PState feature is enabled.
+ * @retval FALSE The NB PState feature is not enabled.
+ */
+BOOLEAN
+F14IsNbPstateEnabled (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ IN PLATFORM_CONFIGURATION *PlatformConfig,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ UINT32 PciRegister;
+ PCI_ADDR PciAddress;
+
+ PciAddress.AddressValue = NB_PSTATE_CFG_LOW_PCI_ADDR;
+ LibAmdPciRead (AccessWidth32, PciAddress, &PciRegister, StdHeader);
+ return ((BOOLEAN) (((NB_PSTATE_CFG_LOW_REGISTER *) &PciRegister)->NbPsCap == 1));
+}
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Returns whether or not BIOS is responsible for configuring the NB COFVID.
+ *
+ * @CpuServiceMethod{::F_CPU_IS_NBCOF_INIT_NEEDED}.
+ *
+ * @param[in] FamilySpecificServices The current Family Specific Services.
+ * @param[in] PciAddress The northbridge to query by pci base address.
+ * @param[out] NbCofVidUpdateRequired TRUE, perform northbridge frequency and voltage config,
+ * FALSE, do not configure them.
+ * @param[in] StdHeader Header for library and services
+ *
+ * @retval AGESA_SUCCESS Always succeeds.
+ */
+AGESA_STATUS
+F14GetNbCofVidUpdate (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ IN PCI_ADDR *PciAddress,
+ OUT BOOLEAN *NbCofVidUpdateRequired,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ *NbCofVidUpdateRequired = FALSE;
+ return (AGESA_SUCCESS);
+}
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Initially launches the desired core to run from the reset vector.
+ *
+ * @CpuServiceMethod{::F_CPU_AP_INITIAL_LAUNCH}.
+ *
+ * @param[in] FamilySpecificServices The current Family Specific Services.
+ * @param[in] SocketNum The Processor on which the core is to be launched
+ * @param[in] ModuleNum The Module in that processor containing that core
+ * @param[in] CoreNum The Core to launch
+ * @param[in] PrimaryCoreNum The id of the module's primary core.
+ * @param[in] StdHeader Header for library and services
+ *
+ * @retval TRUE The core was launched
+ * @retval FALSE The core was previously launched
+ */
+BOOLEAN
+F14LaunchApCore (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ IN UINT32 SocketNum,
+ IN UINT32 ModuleNum,
+ IN UINT32 CoreNum,
+ IN UINT32 PrimaryCoreNum,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ UINT32 NodeRelativeCoreNum;
+ UINT32 PciRegister;
+ PCI_ADDR PciAddress;
+ BOOLEAN LaunchFlag;
+
+ // Code Start
+ LaunchFlag = FALSE;
+ NodeRelativeCoreNum = CoreNum - PrimaryCoreNum;
+ PciAddress.AddressValue = MAKE_SBDFO (0, 0, PCI_DEV_BASE, FUNC_0, 0);
+
+ switch (NodeRelativeCoreNum) {
+ case 1:
+ PciAddress.Address.Register = HT_TRANS_CTRL;
+ LibAmdPciRead (AccessWidth32, PciAddress, &PciRegister, StdHeader);
+ if ((PciRegister & HT_TRANS_CTRL_CPU1_EN) == 0) {
+ PciRegister |= HT_TRANS_CTRL_CPU1_EN;
+ LibAmdPciWrite (AccessWidth32, PciAddress, &PciRegister, StdHeader);
+ LaunchFlag = TRUE;
+ } else {
+ LaunchFlag = FALSE;
+ }
+ break;
+ default:
+ break;
+ }
+
+ return (LaunchFlag);
+}
+
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Get CPU Specific Platform Type Info.
+ *
+ * @CpuServiceMethod{::F_CPU_GET_PLATFORM_TYPE_SPECIFIC_INFO}.
+ *
+ * This function returns Returns the platform features.
+ *
+ * @param[in] FamilySpecificServices The current Family Specific Services.
+ * @param[in,out] Features The Features supported by this platform.
+ * @param[in] StdHeader Handle of Header for calling lib functions and services.
+ *
+ * @retval AGESA_SUCCESS Always succeeds.
+ */
+AGESA_STATUS
+F14GetPlatformTypeSpecificInfo (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ IN OUT PLATFORM_FEATS *Features,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ return (AGESA_SUCCESS);
+}
+
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Get CPU pstate current.
+ *
+ * @CpuServiceMethod{::F_CPU_GET_IDD_MAX}.
+ *
+ * This function returns the ProcIddMax.
+ *
+ * @param[in] FamilySpecificServices The current Family Specific Services.
+ * @param[in] Pstate The P-state to check.
+ * @param[out] ProcIddMax P-state current in mA.
+ * @param[in] StdHeader Handle of Header for calling lib functions and services.
+ *
+ * @retval TRUE P-state is enabled
+ * @retval FALSE P-state is disabled
+ */
+BOOLEAN
+F14GetProcIddMax (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ IN UINT8 Pstate,
+ OUT UINT32 *ProcIddMax,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ UINT32 IddDiv;
+ UINT32 CmpCap;
+ UINT32 PciRegister;
+ UINT32 MsrAddress;
+ UINT64 PstateMsr;
+ BOOLEAN IsPstateEnabled;
+ PCI_ADDR PciAddress;
+
+ IsPstateEnabled = FALSE;
+
+ MsrAddress = (UINT32) (Pstate + PS_REG_BASE);
+
+ ASSERT (MsrAddress <= PS_MAX_REG);
+
+ LibAmdMsrRead (MsrAddress, &PstateMsr, StdHeader);
+ if (((PSTATE_MSR *) &PstateMsr)->PsEnable == 1) {
+ PciAddress.AddressValue = NB_CAPS_PCI_ADDR;
+ LibAmdPciRead (AccessWidth32, PciAddress, &PciRegister, StdHeader); // F3xE8
+ CmpCap = (UINT32) (((NB_CAPS_REGISTER *) &PciRegister)->CmpCap);
+ CmpCap++;
+
+ switch (((PSTATE_MSR *) &PstateMsr)->IddDiv) {
+ case 0:
+ IddDiv = 1000;
+ break;
+ case 1:
+ IddDiv = 100;
+ break;
+ case 2:
+ IddDiv = 10;
+ break;
+ default: // IddDiv = 3 is reserved. Use 10
+ ASSERT (FALSE);
+ IddDiv = 10;
+ break;
+ }
+
+ *ProcIddMax = (UINT32) ((PSTATE_MSR *) &PstateMsr)->IddValue * IddDiv * CmpCap;
+ IsPstateEnabled = TRUE;
+ }
+ return IsPstateEnabled;
+}
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Get number of processor cores to be used in determining the brand string.
+ *
+ * @CpuServiceMethod{::F_CPU_NUMBER_OF_BRANDSTRING_CORES}.
+ *
+ * @param[in] FamilySpecificServices The current Family Specific Services.
+ * @param[in] StdHeader Handle of Header for calling lib functions and services.
+ *
+ * @return The number of cores to be used in brand string calculation.
+ */
+UINT8
+F14GetNumberOfCoresForBrandstring (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ CPUID_DATA CpuId;
+
+ //
+ //CPUID.80000008h.ECX.NC + 1, 000b = 1, 001b = 2, etc.
+ //
+ LibAmdCpuidRead (CPUID_LONG_MODE_ADDR, &CpuId, StdHeader);
+ return ((UINT8) ((CpuId.ECX_Reg & 0xff) + 1));
+}
diff --git a/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14Utilities.h b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14Utilities.h
new file mode 100644
index 0000000000..d1b220f43d
--- /dev/null
+++ b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14Utilities.h
@@ -0,0 +1,132 @@
+/* $NoKeywords:$ */
+/**
+ * @file
+ *
+ * AMD Family_14 specific utility functions.
+ *
+ * Provides numerous utility functions specific to family 14h.
+ *
+ * @xrefitem bom "File Content Label" "Release Content"
+ * @e project: AGESA
+ * @e sub-project: CPU
+ * @e \$Revision: 34897 $ @e \$Date: 2010-07-14 10:07:10 +0800 (Wed, 14 Jul 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 _CPU_F14_UTILITES_H_
+#define _CPU_F14_UTILITES_H_
+
+
+/*---------------------------------------------------------------------------------------
+ * M I X E D (Definitions And Macros / Typedefs, Structures, Enums)
+ *---------------------------------------------------------------------------------------
+ */
+
+
+/*---------------------------------------------------------------------------------------
+ * D E F I N I T I O N S A N D M A C R O S
+ *---------------------------------------------------------------------------------------
+ */
+
+
+/*---------------------------------------------------------------------------------------
+ * T Y P E D E F S, S T R U C T U R E S, E N U M S
+ *---------------------------------------------------------------------------------------
+ */
+
+/*---------------------------------------------------------------------------------------
+ * F U N C T I O N P R O T O T Y P E
+ *---------------------------------------------------------------------------------------
+ */
+
+AGESA_STATUS
+F14DisablePstate (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ IN UINT8 StateNumber,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ );
+
+AGESA_STATUS
+F14TransitionPstate (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ IN UINT8 StateNumber,
+ IN BOOLEAN WaitForTransition,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ );
+
+AGESA_STATUS
+F14GetTscRate (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ OUT UINT32 *FrequencyInMHz,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ );
+
+AGESA_STATUS
+F14GetCurrentNbFrequency (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ OUT UINT32 *FrequencyInMHz,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ );
+
+AGESA_STATUS
+F14GetNbCofVidUpdate (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ IN PCI_ADDR *PciAddress,
+ OUT BOOLEAN *NbCofVidUpdateRequired,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ );
+
+BOOLEAN
+F14LaunchApCore (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ IN UINT32 SocketNum,
+ IN UINT32 ModuleNum,
+ IN UINT32 CoreNum,
+ IN UINT32 PrimaryCoreNum,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ );
+
+CORE_ID_POSITION
+F14CpuAmdCoreIdPositionInInitialApicId (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ );
+
+AGESA_STATUS
+F14GetPlatformTypeSpecificInfo (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ IN OUT PLATFORM_FEATS *Features,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ );
+#endif // _CPU_F14_UTILITES_H_
diff --git a/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14WheaInitDataTables.c b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14WheaInitDataTables.c
new file mode 100644
index 0000000000..50c773516a
--- /dev/null
+++ b/src/vendorcode/amd/agesa/Proc/CPU/Family/0x14/cpuF14WheaInitDataTables.c
@@ -0,0 +1,117 @@
+/* $NoKeywords:$ */
+/**
+ * @file
+ *
+ * AMD Family_14 WHEA initial Data
+ *
+ * @xrefitem bom "File Content Label" "Release Content"
+ * @e project: AGESA
+ * @e sub-project: CPU
+ * @e \$Revision: 34897 $ @e \$Date: 2010-07-14 10:07:10 +0800 (Wed, 14 Jul 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.
+ *
+ * ***************************************************************************
+ *
+ */
+
+/*----------------------------------------------------------------------------------------
+ * M O D U L E S U S E D
+ *----------------------------------------------------------------------------------------
+ */
+#include "AGESA.h"
+#include "cpuLateInit.h"
+#include "cpuFamilyTranslation.h"
+#include "Filecode.h"
+#define FILECODE PROC_CPU_FAMILY_0X14_CPUF14WHEAINITDATATABLES_FILECODE
+
+/*----------------------------------------------------------------------------------------
+ * D E F I N I T I O N S A N D M A C R O S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * T Y P E D E F S A N D S T R U C T U R E S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * P R O T O T Y P E S O F L O C A L F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+
+/*----------------------------------------------------------------------------------------
+ * E X P O R T E D F U N C T I O N S
+ *----------------------------------------------------------------------------------------
+ */
+AMD_HEST_BANK_INIT_DATA F14HestBankInitData[] = {
+ {0xFFFFFFFF,0xFFFFFFFF,0x400,0x401,0x402,0x403},
+ {0xFFFFFFFF,0xFFFFFFFF,0x404,0x405,0x406,0x407},
+ {0xFFFFFFFF,0xFFFFFFFF,0x408,0x409,0x40A,0x40B},
+ {0xFFFFFFFF,0xFFFFFFFF,0x410,0x411,0x412,0x413},
+ {0xFFFFFFFF,0xFFFFFFFF,0x414,0x415,0x416,0x417},
+};
+
+AMD_WHEA_INIT_DATA F14WheaInitData = {
+ 0x000000000, // AmdGlobCapInitDataLsd
+ 0x000000000, // AmdGlobCapInitDataMsd
+ 0x00000003F, // AmdGlobCtrlInitDataLsd
+ 0x000000000, // AmdGlobCtrlInitDataMsd
+ 0x00, // AmdMcbClrStatusOnInit
+ 0x02, // AmdMcbStatusDataFormat
+ 0x00, // AmdMcbConfWriteEn
+ (sizeof (F14HestBankInitData) / sizeof (F14HestBankInitData[0])), // HestBankNum
+ &F14HestBankInitData[0] // Pointer to Initial data of HEST Bank
+};
+
+
+/*---------------------------------------------------------------------------------------*/
+/**
+ * Returns the family specific WHEA table properties.
+ *
+ * @CpuServiceMethod{::F_CPU_GET_FAMILY_SPECIFIC_ARRAY}.
+ *
+ * @param[in] FamilySpecificServices The current Family Specific Services.
+ * @param[out] F14WheaInitDataPtr Points to the family 12h WHEA properties.
+ * @param[out] NumberOfElements Will be one to indicate one structure.
+ * @param[in] StdHeader Header for library and services.
+ *
+ */
+VOID
+GetF14WheaInitData (
+ IN CPU_SPECIFIC_SERVICES *FamilySpecificServices,
+ OUT CONST VOID **F14WheaInitDataPtr,
+ OUT UINT8 *NumberOfElements,
+ IN AMD_CONFIG_PARAMS *StdHeader
+ )
+{
+ *NumberOfElements = 1;
+ *F14WheaInitDataPtr = &F14WheaInitData;
+}