vendorcode/amd/pi/00670F00/Lib: Remove folder
Now that the last dependency was resolved, remove AmdLib folder. BUG=b:112525011 TEST=Build and boot grunt. Change-Id: Ibd9a20bc358742520138b9b01f76d7fd2fac92ab Signed-off-by: Richard Spiegel <richard.spiegel@silverbackltd.com> Reviewed-on: https://review.coreboot.org/28742 Reviewed-by: Marshall Dawson <marshalldawson3rd@gmail.com> Reviewed-by: Charles Marslett <charles.marslett@amd.corp-partner.google.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
parent
7717725bfa
commit
55ad8c3af0
|
@ -1,573 +0,0 @@
|
||||||
/* $NoKeywords:$ */
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
*
|
|
||||||
* AMD Library
|
|
||||||
*
|
|
||||||
* Contains interface to the AMD AGESA library
|
|
||||||
*
|
|
||||||
* @xrefitem bom "File Content Label" "Release Content"
|
|
||||||
* @e project: AGESA
|
|
||||||
* @e sub-project: Lib
|
|
||||||
* @e \$Revision: 48409 $ @e \$Date: 2011-03-08 11:19:40 -0600 (Tue, 08 Mar 2011) $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
******************************************************************************
|
|
||||||
*
|
|
||||||
* Copyright (c) 2008 - 2011, Advanced Micro Devices, Inc.
|
|
||||||
* 2013 - 2014, Sage Electronic Engineering, LLC
|
|
||||||
* 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.
|
|
||||||
******************************************************************************
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <AGESA.h>
|
|
||||||
#include <cpuRegisters.h>
|
|
||||||
#include "amdlib.h"
|
|
||||||
CODE_GROUP (G1_PEICC)
|
|
||||||
RDATA_GROUP (G1_PEICC)
|
|
||||||
|
|
||||||
#if !defined(AMDLIB_OPTIMIZE)
|
|
||||||
#define AMDLIB_OPTIMIZE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
BOOLEAN
|
|
||||||
STATIC
|
|
||||||
GetPciMmioAddress (
|
|
||||||
OUT UINT64 *MmioAddress,
|
|
||||||
OUT UINT32 *MmioSize,
|
|
||||||
IN AMD_CONFIG_PARAMS *StdHeader
|
|
||||||
);
|
|
||||||
|
|
||||||
VOID
|
|
||||||
CpuidRead (
|
|
||||||
IN UINT32 CpuidFcnAddress,
|
|
||||||
OUT CPUID_DATA *Value
|
|
||||||
);
|
|
||||||
|
|
||||||
UINT8
|
|
||||||
ReadNumberOfCpuCores(
|
|
||||||
void
|
|
||||||
);
|
|
||||||
|
|
||||||
AMDLIB_OPTIMIZE
|
|
||||||
UINT8
|
|
||||||
ReadIo8 (
|
|
||||||
IN UINT16 Address
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return __inbyte (Address);
|
|
||||||
}
|
|
||||||
|
|
||||||
AMDLIB_OPTIMIZE
|
|
||||||
UINT16
|
|
||||||
ReadIo16 (
|
|
||||||
IN UINT16 Address
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return __inword (Address);
|
|
||||||
}
|
|
||||||
|
|
||||||
AMDLIB_OPTIMIZE
|
|
||||||
UINT32
|
|
||||||
ReadIo32 (
|
|
||||||
IN UINT16 Address
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return __indword (Address);
|
|
||||||
}
|
|
||||||
|
|
||||||
AMDLIB_OPTIMIZE
|
|
||||||
VOID
|
|
||||||
WriteIo8 (
|
|
||||||
IN UINT16 Address,
|
|
||||||
IN UINT8 Data
|
|
||||||
)
|
|
||||||
{
|
|
||||||
__outbyte (Address, Data);
|
|
||||||
}
|
|
||||||
|
|
||||||
AMDLIB_OPTIMIZE
|
|
||||||
VOID
|
|
||||||
WriteIo16 (
|
|
||||||
IN UINT16 Address,
|
|
||||||
IN UINT16 Data
|
|
||||||
)
|
|
||||||
{
|
|
||||||
__outword (Address, Data);
|
|
||||||
}
|
|
||||||
|
|
||||||
AMDLIB_OPTIMIZE
|
|
||||||
VOID
|
|
||||||
WriteIo32 (
|
|
||||||
IN UINT16 Address,
|
|
||||||
IN UINT32 Data
|
|
||||||
)
|
|
||||||
{
|
|
||||||
__outdword (Address, Data);
|
|
||||||
}
|
|
||||||
|
|
||||||
AMDLIB_OPTIMIZE
|
|
||||||
STATIC
|
|
||||||
UINT64 SetFsBase (
|
|
||||||
UINT64 address
|
|
||||||
)
|
|
||||||
{
|
|
||||||
UINT64 hwcr;
|
|
||||||
hwcr = __readmsr (0xC0010015);
|
|
||||||
__writemsr (0xC0010015, hwcr | 1 << 17);
|
|
||||||
__writemsr (0xC0000100, address);
|
|
||||||
return hwcr;
|
|
||||||
}
|
|
||||||
|
|
||||||
AMDLIB_OPTIMIZE
|
|
||||||
STATIC
|
|
||||||
VOID
|
|
||||||
RestoreHwcr (
|
|
||||||
UINT64
|
|
||||||
value
|
|
||||||
)
|
|
||||||
{
|
|
||||||
__writemsr (0xC0010015, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
AMDLIB_OPTIMIZE
|
|
||||||
UINT8
|
|
||||||
Read64Mem8 (
|
|
||||||
IN UINT64 Address
|
|
||||||
)
|
|
||||||
{
|
|
||||||
UINT8 dataRead;
|
|
||||||
UINT64 hwcrSave;
|
|
||||||
if ((Address >> 32) == 0) {
|
|
||||||
return *(volatile UINT8 *) (UINTN) Address;
|
|
||||||
}
|
|
||||||
hwcrSave = SetFsBase (Address);
|
|
||||||
dataRead = __readfsbyte (0);
|
|
||||||
RestoreHwcr (hwcrSave);
|
|
||||||
return dataRead;
|
|
||||||
}
|
|
||||||
|
|
||||||
AMDLIB_OPTIMIZE
|
|
||||||
UINT16
|
|
||||||
Read64Mem16 (
|
|
||||||
IN UINT64 Address
|
|
||||||
)
|
|
||||||
{
|
|
||||||
UINT16 dataRead;
|
|
||||||
UINT64 hwcrSave;
|
|
||||||
if ((Address >> 32) == 0) {
|
|
||||||
return *(volatile UINT16 *) (UINTN) Address;
|
|
||||||
}
|
|
||||||
hwcrSave = SetFsBase (Address);
|
|
||||||
dataRead = __readfsword (0);
|
|
||||||
RestoreHwcr (hwcrSave);
|
|
||||||
return dataRead;
|
|
||||||
}
|
|
||||||
|
|
||||||
AMDLIB_OPTIMIZE
|
|
||||||
UINT32
|
|
||||||
Read64Mem32 (
|
|
||||||
IN UINT64 Address
|
|
||||||
)
|
|
||||||
{
|
|
||||||
UINT32 dataRead;
|
|
||||||
UINT64 hwcrSave;
|
|
||||||
if ((Address >> 32) == 0) {
|
|
||||||
return *(volatile UINT32 *) (UINTN) Address;
|
|
||||||
}
|
|
||||||
hwcrSave = SetFsBase (Address);
|
|
||||||
dataRead = __readfsdword (0);
|
|
||||||
RestoreHwcr (hwcrSave);
|
|
||||||
return dataRead;
|
|
||||||
}
|
|
||||||
|
|
||||||
AMDLIB_OPTIMIZE
|
|
||||||
VOID
|
|
||||||
Write64Mem8 (
|
|
||||||
IN UINT64 Address,
|
|
||||||
IN UINT8 Data
|
|
||||||
)
|
|
||||||
{
|
|
||||||
if ((Address >> 32) == 0){
|
|
||||||
*(volatile UINT8 *) (UINTN) Address = Data;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
UINT64 hwcrSave;
|
|
||||||
hwcrSave = SetFsBase (Address);
|
|
||||||
__writefsbyte (0, Data);
|
|
||||||
RestoreHwcr (hwcrSave);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
AMDLIB_OPTIMIZE
|
|
||||||
VOID
|
|
||||||
Write64Mem16 (
|
|
||||||
IN UINT64 Address,
|
|
||||||
IN UINT16 Data
|
|
||||||
)
|
|
||||||
{
|
|
||||||
if ((Address >> 32) == 0){
|
|
||||||
*(volatile UINT16 *) (UINTN) Address = Data;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
UINT64 hwcrSave;
|
|
||||||
hwcrSave = SetFsBase (Address);
|
|
||||||
__writefsword (0, Data);
|
|
||||||
RestoreHwcr (hwcrSave);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
AMDLIB_OPTIMIZE
|
|
||||||
VOID
|
|
||||||
Write64Mem32 (
|
|
||||||
IN UINT64 Address,
|
|
||||||
IN UINT32 Data
|
|
||||||
)
|
|
||||||
{
|
|
||||||
if ((Address >> 32) == 0){
|
|
||||||
*(volatile UINT32 *) (UINTN) Address = Data;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
UINT64 hwcrSave;
|
|
||||||
hwcrSave = SetFsBase (Address);
|
|
||||||
__writefsdword (0, Data);
|
|
||||||
RestoreHwcr (hwcrSave);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
AMDLIB_OPTIMIZE
|
|
||||||
VOID
|
|
||||||
LibAmdMsrRead (
|
|
||||||
IN UINT32 MsrAddress,
|
|
||||||
OUT UINT64 *Value,
|
|
||||||
IN OUT AMD_CONFIG_PARAMS *ConfigPtr
|
|
||||||
)
|
|
||||||
{
|
|
||||||
*Value = __readmsr (MsrAddress);
|
|
||||||
}
|
|
||||||
|
|
||||||
AMDLIB_OPTIMIZE
|
|
||||||
VOID
|
|
||||||
LibAmdMsrWrite (
|
|
||||||
IN UINT32 MsrAddress,
|
|
||||||
IN UINT64 *Value,
|
|
||||||
IN OUT AMD_CONFIG_PARAMS *ConfigPtr
|
|
||||||
)
|
|
||||||
{
|
|
||||||
__writemsr (MsrAddress, *Value);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------------------*/
|
|
||||||
/**
|
|
||||||
* Read IO port
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* @param[in] AccessWidth Access width
|
|
||||||
* @param[in] IoAddress IO port address
|
|
||||||
* @param[in] Value Pointer to save data
|
|
||||||
* @param[in] StdHeader Standard configuration header
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
VOID
|
|
||||||
LibAmdIoRead (
|
|
||||||
IN ACCESS_WIDTH AccessWidth,
|
|
||||||
IN UINT16 IoAddress,
|
|
||||||
OUT VOID *Value,
|
|
||||||
IN OUT AMD_CONFIG_PARAMS *StdHeader
|
|
||||||
)
|
|
||||||
{
|
|
||||||
switch (AccessWidth) {
|
|
||||||
case AccessWidth8:
|
|
||||||
case AccessS3SaveWidth8:
|
|
||||||
*(UINT8 *) Value = ReadIo8 (IoAddress);
|
|
||||||
break;
|
|
||||||
case AccessWidth16:
|
|
||||||
case AccessS3SaveWidth16:
|
|
||||||
*(UINT16 *) Value = ReadIo16 (IoAddress);
|
|
||||||
break;
|
|
||||||
case AccessWidth32:
|
|
||||||
case AccessS3SaveWidth32:
|
|
||||||
*(UINT32 *) Value = ReadIo32 (IoAddress);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
ASSERT (FALSE);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------------------*/
|
|
||||||
/**
|
|
||||||
* Write IO port
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* @param[in] AccessWidth Access width
|
|
||||||
* @param[in] IoAddress IO port address
|
|
||||||
* @param[in] Value Pointer to data
|
|
||||||
* @param[in] StdHeader Standard configuration header
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
VOID
|
|
||||||
LibAmdIoWrite (
|
|
||||||
IN ACCESS_WIDTH AccessWidth,
|
|
||||||
IN UINT16 IoAddress,
|
|
||||||
IN CONST VOID *Value,
|
|
||||||
IN OUT AMD_CONFIG_PARAMS *StdHeader
|
|
||||||
)
|
|
||||||
{
|
|
||||||
switch (AccessWidth) {
|
|
||||||
case AccessWidth8:
|
|
||||||
case AccessS3SaveWidth8:
|
|
||||||
WriteIo8 (IoAddress, *(UINT8 *) Value);
|
|
||||||
break;
|
|
||||||
case AccessWidth16:
|
|
||||||
case AccessS3SaveWidth16:
|
|
||||||
WriteIo16 (IoAddress, *(UINT16 *) Value);
|
|
||||||
break;
|
|
||||||
case AccessWidth32:
|
|
||||||
case AccessS3SaveWidth32:
|
|
||||||
WriteIo32 (IoAddress, *(UINT32 *) Value);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
ASSERT (FALSE);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------------------*/
|
|
||||||
/**
|
|
||||||
* Read memory/MMIO
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* @param[in] AccessWidth Access width
|
|
||||||
* @param[in] MemAddress Memory address
|
|
||||||
* @param[in] Value Pointer to data
|
|
||||||
* @param[in] StdHeader Standard configuration header
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
VOID
|
|
||||||
LibAmdMemRead (
|
|
||||||
IN ACCESS_WIDTH AccessWidth,
|
|
||||||
IN UINT64 MemAddress,
|
|
||||||
OUT VOID *Value,
|
|
||||||
IN OUT AMD_CONFIG_PARAMS *StdHeader
|
|
||||||
)
|
|
||||||
{
|
|
||||||
switch (AccessWidth) {
|
|
||||||
case AccessWidth8:
|
|
||||||
case AccessS3SaveWidth8:
|
|
||||||
*(UINT8 *) Value = Read64Mem8 (MemAddress);
|
|
||||||
break;
|
|
||||||
case AccessWidth16:
|
|
||||||
case AccessS3SaveWidth16:
|
|
||||||
*(UINT16 *) Value = Read64Mem16 (MemAddress);
|
|
||||||
break;
|
|
||||||
case AccessWidth32:
|
|
||||||
case AccessS3SaveWidth32:
|
|
||||||
*(UINT32 *) Value = Read64Mem32 (MemAddress);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
ASSERT (FALSE);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------------------*/
|
|
||||||
/**
|
|
||||||
* Write memory/MMIO
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* @param[in] AccessWidth Access width
|
|
||||||
* @param[in] MemAddress Memory address
|
|
||||||
* @param[in] Value Pointer to data
|
|
||||||
* @param[in] StdHeader Standard configuration header
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
VOID
|
|
||||||
LibAmdMemWrite (
|
|
||||||
IN ACCESS_WIDTH AccessWidth,
|
|
||||||
IN UINT64 MemAddress,
|
|
||||||
IN CONST VOID *Value,
|
|
||||||
IN OUT AMD_CONFIG_PARAMS *StdHeader
|
|
||||||
)
|
|
||||||
{
|
|
||||||
|
|
||||||
switch (AccessWidth) {
|
|
||||||
case AccessWidth8:
|
|
||||||
case AccessS3SaveWidth8:
|
|
||||||
Write64Mem8 (MemAddress, *((UINT8 *) Value));
|
|
||||||
break;
|
|
||||||
case AccessWidth16:
|
|
||||||
case AccessS3SaveWidth16:
|
|
||||||
Write64Mem16 (MemAddress, *((UINT16 *) Value));
|
|
||||||
break;
|
|
||||||
case AccessWidth32:
|
|
||||||
case AccessS3SaveWidth32:
|
|
||||||
Write64Mem32 (MemAddress, *((UINT32 *) Value));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
ASSERT (FALSE);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------------------*/
|
|
||||||
/**
|
|
||||||
* Read PCI config space
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* @param[in] AccessWidth Access width
|
|
||||||
* @param[in] PciAddress Pci address
|
|
||||||
* @param[in] Value Pointer to data
|
|
||||||
* @param[in] StdHeader Standard configuration header
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
VOID
|
|
||||||
LibAmdPciRead (
|
|
||||||
IN ACCESS_WIDTH AccessWidth,
|
|
||||||
IN PCI_ADDR PciAddress,
|
|
||||||
OUT VOID *Value,
|
|
||||||
IN OUT AMD_CONFIG_PARAMS *StdHeader
|
|
||||||
)
|
|
||||||
{
|
|
||||||
UINT32 LegacyPciAccess;
|
|
||||||
UINT32 MMIOSize;
|
|
||||||
UINT64 RMWrite;
|
|
||||||
UINT64 RMWritePrevious;
|
|
||||||
UINT64 MMIOAddress;
|
|
||||||
|
|
||||||
|
|
||||||
ASSERT (PciAddress.AddressValue != ILLEGAL_SBDFO);
|
|
||||||
if (!GetPciMmioAddress (&MMIOAddress, &MMIOSize, NULL)) {
|
|
||||||
// We need to convert our "portable" PCI address into a "real" PCI access
|
|
||||||
LegacyPciAccess = ((1 << 31) + (PciAddress.Address.Register & 0xFC) + (PciAddress.Address.Function << 8) + (PciAddress.Address.Device << 11) + (PciAddress.Address.Bus << 16) + ((PciAddress.Address.Register & 0xF00) << (24 - 8)));
|
|
||||||
if (PciAddress.Address.Register <= 0xFF) {
|
|
||||||
LibAmdIoWrite (AccessWidth32, IOCF8, &LegacyPciAccess, NULL);
|
|
||||||
LibAmdIoRead (AccessWidth, IOCFC + (UINT16) (PciAddress.Address.Register & 0x3), Value, NULL);
|
|
||||||
} else {
|
|
||||||
LibAmdMsrRead (NB_CFG, &RMWritePrevious, NULL);
|
|
||||||
RMWrite = RMWritePrevious | 0x0000400000000000;
|
|
||||||
LibAmdMsrWrite (NB_CFG, &RMWrite, NULL);
|
|
||||||
LibAmdIoWrite (AccessWidth32, IOCF8, &LegacyPciAccess, NULL);
|
|
||||||
LibAmdIoRead (AccessWidth, IOCFC + (UINT16) (PciAddress.Address.Register & 0x3), Value, NULL);
|
|
||||||
LibAmdMsrWrite (NB_CFG, &RMWritePrevious, NULL);
|
|
||||||
}
|
|
||||||
//IDS_HDT_CONSOLE (LIB_PCI_RD, "~PCI RD %08x = %08x\n", LegacyPciAccess, *(UINT32 *)Value);
|
|
||||||
} else {
|
|
||||||
// Setup the MMIO address
|
|
||||||
ASSERT ((MMIOAddress + MMIOSize) > (MMIOAddress + (PciAddress.AddressValue & 0x0FFFFFFF)));
|
|
||||||
MMIOAddress += (PciAddress.AddressValue & 0x0FFFFFFF);
|
|
||||||
LibAmdMemRead (AccessWidth, MMIOAddress, Value, NULL);
|
|
||||||
//IDS_HDT_CONSOLE (LIB_PCI_RD, "~MMIO RD %08x = %08x\n", (UINT32) MMIOAddress, *(UINT32 *)Value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------------------*/
|
|
||||||
/**
|
|
||||||
* Write PCI config space
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* @param[in] AccessWidth Access width
|
|
||||||
* @param[in] PciAddress Pci address
|
|
||||||
* @param[in] Value Pointer to data
|
|
||||||
* @param[in] StdHeader Standard configuration header
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
VOID
|
|
||||||
LibAmdPciWrite (
|
|
||||||
IN ACCESS_WIDTH AccessWidth,
|
|
||||||
IN PCI_ADDR PciAddress,
|
|
||||||
IN CONST VOID *Value,
|
|
||||||
IN OUT AMD_CONFIG_PARAMS *StdHeader
|
|
||||||
)
|
|
||||||
{
|
|
||||||
UINT32 LegacyPciAccess;
|
|
||||||
UINT32 MMIOSize;
|
|
||||||
UINT64 RMWrite;
|
|
||||||
UINT64 RMWritePrevious;
|
|
||||||
UINT64 MMIOAddress;
|
|
||||||
|
|
||||||
|
|
||||||
ASSERT (PciAddress.AddressValue != ILLEGAL_SBDFO);
|
|
||||||
if (!GetPciMmioAddress (&MMIOAddress, &MMIOSize, NULL)) {
|
|
||||||
// We need to convert our "portable" PCI address into a "real" PCI access
|
|
||||||
LegacyPciAccess = ((1 << 31) + (PciAddress.Address.Register & 0xFC) + (PciAddress.Address.Function << 8) + (PciAddress.Address.Device << 11) + (PciAddress.Address.Bus << 16) + ((PciAddress.Address.Register & 0xF00) << (24 - 8)));
|
|
||||||
if (PciAddress.Address.Register <= 0xFF) {
|
|
||||||
LibAmdIoWrite (AccessWidth32, IOCF8, &LegacyPciAccess, NULL);
|
|
||||||
LibAmdIoWrite (AccessWidth, IOCFC + (UINT16) (PciAddress.Address.Register & 0x3), Value, NULL);
|
|
||||||
} else {
|
|
||||||
LibAmdMsrRead (NB_CFG, &RMWritePrevious, NULL);
|
|
||||||
RMWrite = RMWritePrevious | 0x0000400000000000;
|
|
||||||
LibAmdMsrWrite (NB_CFG, &RMWrite, NULL);
|
|
||||||
LibAmdIoWrite (AccessWidth32, IOCF8, &LegacyPciAccess, NULL);
|
|
||||||
LibAmdIoWrite (AccessWidth, IOCFC + (UINT16) (PciAddress.Address.Register & 0x3), Value, NULL);
|
|
||||||
LibAmdMsrWrite (NB_CFG, &RMWritePrevious, NULL);
|
|
||||||
}
|
|
||||||
//IDS_HDT_CONSOLE (LIB_PCI_WR, "~PCI WR %08x = %08x\n", LegacyPciAccess, *(UINT32 *)Value);
|
|
||||||
//printk(BIOS_DEBUG, "~PCI WR %08x = %08x\n", LegacyPciAccess, *(UINT32 *)Value);
|
|
||||||
//printk(BIOS_DEBUG, "LibAmdPciWrite\n");
|
|
||||||
} else {
|
|
||||||
// Setup the MMIO address
|
|
||||||
ASSERT ((MMIOAddress + MMIOSize) > (MMIOAddress + (PciAddress.AddressValue & 0x0FFFFFFF)));
|
|
||||||
MMIOAddress += (PciAddress.AddressValue & 0x0FFFFFFF);
|
|
||||||
LibAmdMemWrite (AccessWidth, MMIOAddress, Value, NULL);
|
|
||||||
//IDS_HDT_CONSOLE (LIB_PCI_WR, "~MMIO WR %08x = %08x\n", (UINT32) MMIOAddress, *(UINT32 *)Value);
|
|
||||||
//printk(BIOS_DEBUG, "~MMIO WR %08x = %08x\n", (UINT32) MMIOAddress, *(UINT32 *)Value);
|
|
||||||
//printk(BIOS_DEBUG, "LibAmdPciWrite mmio\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------------------*/
|
|
||||||
/**
|
|
||||||
* Get MMIO base address for PCI accesses
|
|
||||||
*
|
|
||||||
* @param[out] MmioAddress PCI MMIO base address
|
|
||||||
* @param[out] MmioSize Size of region in bytes
|
|
||||||
* @param[in] StdHeader Standard configuration header
|
|
||||||
*
|
|
||||||
* @retval TRUE MmioAddress/MmioSize are valid
|
|
||||||
*/
|
|
||||||
BOOLEAN
|
|
||||||
STATIC
|
|
||||||
GetPciMmioAddress (
|
|
||||||
OUT UINT64 *MmioAddress,
|
|
||||||
OUT UINT32 *MmioSize,
|
|
||||||
IN AMD_CONFIG_PARAMS *StdHeader
|
|
||||||
)
|
|
||||||
{
|
|
||||||
BOOLEAN MmioIsEnabled;
|
|
||||||
UINT32 EncodedSize;
|
|
||||||
UINT64 LocalMsrRegister;
|
|
||||||
|
|
||||||
MmioIsEnabled = FALSE;
|
|
||||||
LibAmdMsrRead (MSR_MMIO_Cfg_Base, &LocalMsrRegister, NULL);
|
|
||||||
if ((LocalMsrRegister & BIT0) != 0) {
|
|
||||||
*MmioAddress = LocalMsrRegister & 0xFFFFFFFFFFF00000;
|
|
||||||
EncodedSize = (UINT32) ((LocalMsrRegister & 0x3C) >> 2);
|
|
||||||
*MmioSize = ((1 << EncodedSize) * 0x100000);
|
|
||||||
MmioIsEnabled = TRUE;
|
|
||||||
}
|
|
||||||
return MmioIsEnabled;
|
|
||||||
}
|
|
|
@ -1,202 +0,0 @@
|
||||||
/* $NoKeywords:$ */
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
*
|
|
||||||
* AMD Library
|
|
||||||
*
|
|
||||||
* Contains interface to the AMD AGESA library
|
|
||||||
*
|
|
||||||
* @xrefitem bom "File Content Label" "Release Content"
|
|
||||||
* @e project: AGESA
|
|
||||||
* @e sub-project: Lib
|
|
||||||
* @e \$Revision: 85030 $ @e \$Date: 2012-12-26 00:20:10 -0600 (Wed, 26 Dec 2012) $
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
******************************************************************************
|
|
||||||
*
|
|
||||||
* Copyright (c) 2008 - 2013, Advanced Micro Devices, Inc.
|
|
||||||
* 2013 - 2014, Sage Electronic Engineering, LLC
|
|
||||||
* 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 _AMD_LIB_H_
|
|
||||||
#define _AMD_LIB_H_
|
|
||||||
|
|
||||||
#include <agesa_headers.h>
|
|
||||||
|
|
||||||
#define IOCF8 0xCF8
|
|
||||||
#define IOCFC 0xCFC
|
|
||||||
|
|
||||||
// Reg Values for ReadCpuReg and WriteCpuReg
|
|
||||||
#define CR4_REG 0x04
|
|
||||||
#define DR0_REG 0x10
|
|
||||||
#define DR1_REG 0x11
|
|
||||||
#define DR2_REG 0x12
|
|
||||||
#define DR3_REG 0x13
|
|
||||||
#define DR7_REG 0x17
|
|
||||||
|
|
||||||
// PROTOTYPES FOR amdlib32.asm
|
|
||||||
UINT8
|
|
||||||
ReadIo8 (
|
|
||||||
IN UINT16 Address
|
|
||||||
);
|
|
||||||
|
|
||||||
UINT16
|
|
||||||
ReadIo16 (
|
|
||||||
IN UINT16 Address
|
|
||||||
);
|
|
||||||
|
|
||||||
UINT32
|
|
||||||
ReadIo32 (
|
|
||||||
IN UINT16 Address
|
|
||||||
);
|
|
||||||
|
|
||||||
VOID
|
|
||||||
WriteIo8 (
|
|
||||||
IN UINT16 Address,
|
|
||||||
IN UINT8 Data
|
|
||||||
);
|
|
||||||
|
|
||||||
VOID
|
|
||||||
WriteIo16 (
|
|
||||||
IN UINT16 Address,
|
|
||||||
IN UINT16 Data
|
|
||||||
);
|
|
||||||
|
|
||||||
VOID
|
|
||||||
WriteIo32 (
|
|
||||||
IN UINT16 Address,
|
|
||||||
IN UINT32 Data
|
|
||||||
);
|
|
||||||
|
|
||||||
UINT8
|
|
||||||
Read64Mem8 (
|
|
||||||
IN UINT64 Address
|
|
||||||
);
|
|
||||||
|
|
||||||
UINT16
|
|
||||||
Read64Mem16 (
|
|
||||||
IN UINT64 Address
|
|
||||||
);
|
|
||||||
|
|
||||||
UINT32
|
|
||||||
Read64Mem32 (
|
|
||||||
IN UINT64 Address
|
|
||||||
);
|
|
||||||
|
|
||||||
VOID
|
|
||||||
Write64Mem8 (
|
|
||||||
IN UINT64 Address,
|
|
||||||
IN UINT8 Data
|
|
||||||
);
|
|
||||||
|
|
||||||
VOID
|
|
||||||
Write64Mem16 (
|
|
||||||
IN UINT64 Address,
|
|
||||||
IN UINT16 Data
|
|
||||||
);
|
|
||||||
|
|
||||||
VOID
|
|
||||||
Write64Mem32 (
|
|
||||||
IN UINT64 Address,
|
|
||||||
IN UINT32 Data
|
|
||||||
);
|
|
||||||
|
|
||||||
// MSR
|
|
||||||
VOID
|
|
||||||
LibAmdMsrRead (
|
|
||||||
IN UINT32 MsrAddress,
|
|
||||||
OUT UINT64 *Value,
|
|
||||||
IN OUT AMD_CONFIG_PARAMS *StdHeader
|
|
||||||
);
|
|
||||||
|
|
||||||
VOID
|
|
||||||
LibAmdMsrWrite (
|
|
||||||
IN UINT32 MsrAddress,
|
|
||||||
IN UINT64 *Value,
|
|
||||||
IN OUT AMD_CONFIG_PARAMS *StdHeader
|
|
||||||
);
|
|
||||||
|
|
||||||
// IO
|
|
||||||
VOID
|
|
||||||
LibAmdIoRead (
|
|
||||||
IN ACCESS_WIDTH AccessWidth,
|
|
||||||
IN UINT16 IoAddress,
|
|
||||||
OUT VOID *Value,
|
|
||||||
IN OUT AMD_CONFIG_PARAMS *StdHeader
|
|
||||||
);
|
|
||||||
|
|
||||||
VOID
|
|
||||||
LibAmdIoWrite (
|
|
||||||
IN ACCESS_WIDTH AccessWidth,
|
|
||||||
IN UINT16 IoAddress,
|
|
||||||
IN CONST VOID *Value,
|
|
||||||
IN OUT AMD_CONFIG_PARAMS *StdHeader
|
|
||||||
);
|
|
||||||
|
|
||||||
// Memory or MMIO
|
|
||||||
VOID
|
|
||||||
LibAmdMemRead (
|
|
||||||
IN ACCESS_WIDTH AccessWidth,
|
|
||||||
IN UINT64 MemAddress,
|
|
||||||
OUT VOID *Value,
|
|
||||||
IN OUT AMD_CONFIG_PARAMS *StdHeader
|
|
||||||
);
|
|
||||||
|
|
||||||
VOID
|
|
||||||
LibAmdMemWrite (
|
|
||||||
IN ACCESS_WIDTH AccessWidth,
|
|
||||||
IN UINT64 MemAddress,
|
|
||||||
IN CONST VOID *Value,
|
|
||||||
IN OUT AMD_CONFIG_PARAMS *StdHeader
|
|
||||||
);
|
|
||||||
|
|
||||||
// PCI
|
|
||||||
VOID
|
|
||||||
LibAmdPciRead (
|
|
||||||
IN ACCESS_WIDTH AccessWidth,
|
|
||||||
IN PCI_ADDR PciAddress,
|
|
||||||
OUT VOID *Value,
|
|
||||||
IN OUT AMD_CONFIG_PARAMS *StdHeader
|
|
||||||
);
|
|
||||||
|
|
||||||
VOID
|
|
||||||
LibAmdPciWrite (
|
|
||||||
IN ACCESS_WIDTH AccessWidth,
|
|
||||||
IN PCI_ADDR PciAddress,
|
|
||||||
IN CONST VOID *Value,
|
|
||||||
IN OUT AMD_CONFIG_PARAMS *StdHeader
|
|
||||||
);
|
|
||||||
|
|
||||||
// CPUID
|
|
||||||
VOID
|
|
||||||
LibAmdCpuidRead (
|
|
||||||
IN UINT32 CpuidFcnAddress,
|
|
||||||
OUT CPUID_DATA *Value,
|
|
||||||
IN OUT AMD_CONFIG_PARAMS *StdHeader
|
|
||||||
);
|
|
||||||
#endif // _AMD_LIB_H_
|
|
|
@ -108,7 +108,6 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "Fch.h"
|
#include "Fch.h"
|
||||||
#include "amdlib.h"
|
|
||||||
#include "FchCommonCfg.h"
|
#include "FchCommonCfg.h"
|
||||||
#include "AmdFch.h"
|
#include "AmdFch.h"
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue