vendorcode/amd/pi/00670F00/Proc/PspBaseLib: Remove folder

Now that PspBaseLib is no longer used, fully remove the folder.

BUG=b:116579642
TEST=Build grunt

Change-Id: I441b3f46e2312c12771766f87b25d1dc15ff3af0
Signed-off-by: Richard Spiegel <richard.spiegel@silverbackltd.com>
Reviewed-on: https://review.coreboot.org/28733
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Martin Roth <martinroth@google.com>
Reviewed-by: Marshall Dawson <marshalldawson3rd@gmail.com>
This commit is contained in:
Richard Spiegel 2018-09-25 07:34:15 -07:00 committed by Martin Roth
parent 256dd1198c
commit 4fe3ba1ea8
4 changed files with 0 additions and 670 deletions

View File

@ -43,8 +43,6 @@ BINARY_PI_INC += -I$(AGESA_ROOT)/Proc/CPU
BINARY_PI_INC += -I$(AGESA_ROOT)/Proc/CPU/Family
BINARY_PI_INC += -I$(AGESA_ROOT)/Proc/Fch
BINARY_PI_INC += -I$(AGESA_ROOT)/Proc/Fch/Common
BINARY_PI_INC += -I$(AGESA_ROOT)/Proc/Psp/PspBaseLib
AGESA_INC = -I$(obj)
AGESA_INC += $(BINARY_PI_INC)
@ -90,8 +88,6 @@ agesa_raw_files += $(wildcard $(AGESA_ROOT)/Lib/*.[cS])
agesa_raw_files += $(wildcard $(AGESA_ROOT)/binaryPI/*.[cS])
agesa_raw_files += $(wildcard $(AGESA_ROOT)/Proc/Psp/PspBaseLib/*.[cS])
classes-$(CONFIG_CPU_AMD_AGESA_BINARY_PI) += libagesa
ifeq ($(CONFIG_ARCH_ROMSTAGE_X86_32),y)

View File

@ -1,315 +0,0 @@
/* $NoKeywords:$ */
/**
* @file
*
* PSP Base Library
*
* Contains interface to the PSP library
*
* @xrefitem bom "File Content Label" "Release Content"
* @e project: AGESA
* @e sub-project: PSP
* @e \$Revision$ @e \$Date$
*
*/
/*****************************************************************************
*
* Copyright (c) 2008 - 2016, 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 "Filecode.h"
/*
* Header removed for coreboot.
* #include "Fch.h"
*/
#include "PspBaseLib.h"
#define FILECODE PROC_PSP_PSPBASELIB_PSPBASELIB_FILECODE
#define PSP_BAR_TMP_BASE 0xFEA00000ul
#define GET_PCI_BUS(Reg) (((UINT32) Reg >> 16) & 0xFF)
#define GET_PCI_DEV(Reg) (((UINT32) Reg >> 11) & 0x1F)
#define GET_PCI_FUNC(Reg) (((UINT32) Reg >> 8) & 0x7)
#define GET_PCI_OFFSET(Reg) ((UINT32)Reg & 0xFF)
#define PCI_CONFIG_SMU_INDIRECT_INDEX 0xB8 ///< Gnb Offset index for SMU mbox
#define PCI_CONFIG_SMU_INDIRECT_DATA 0xBC ///< Gnb Offset data for SMU mbox
#define SMU_CC_PSP_FUSES_STATUS 0xC0018000ul ///< offset in GNB to find PSP fusing
#define SMU_CC_PSP_FUSES_SECURE BIT0 ///< BIT0
#define SMU_CC_PSP_FUSES_FRA_ENABLE BIT1 ///< BIT1
#define SMU_CC_PSP_FUSES_PROTO BIT2 ///< BIT2
#define PLATFORM_SECURE_BOOT_EN BIT4 ///< BIT4
#define PSP_BLANK_PART 0 ///< Blank part
#define PSP_PROTO_PART SMU_CC_PSP_FUSES_PROTO ///< Proto Part
#define PSP_NON_SECURE_PART (SMU_CC_PSP_FUSES_PROTO + SMU_CC_PSP_FUSES_PCPU_DIS) ///< Non Secure Part
#define PSP_SECURE_PART (SMU_CC_PSP_FUSES_PROTO + SMU_CC_PSP_FUSES_SECURE) ///< Secure Part
#define PSP_FRA_MODE (SMU_CC_PSP_FUSES_FRA_ENABLE + SMU_CC_PSP_FUSES_PROTO + SMU_CC_PSP_FUSES_SECURE) ///< FRA Part
#define PSP_MUTEX_REG0_OFFSET (24 * 4) ///< PSP Mutex0 register offset
#define PSP_MUTEX_REG1_OFFSET (25 * 4) ///< PSP Mutex1 register offset
#ifndef OFFSET_OF
#define OFFSET_OF(TYPE, Field) ((UINTN) &(((TYPE *)0)->Field))
#endif
/*----------------------------------------------------------------------------------------
* 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
*----------------------------------------------------------------------------------------
*/
UINT32
PspLibPciReadConfig (
IN UINT32 Register
)
{
UINT32 Value;
PCI_ADDR PciAddr;
Value = 0;
PciAddr.AddressValue = MAKE_SBDFO (0, GET_PCI_BUS (Register), GET_PCI_DEV (Register), GET_PCI_FUNC (Register), GET_PCI_OFFSET (Register));
LibAmdPciRead (AccessWidth32, PciAddr, &Value, NULL);
return Value;
}
VOID
PspLibPciWriteConfig (
IN UINT32 Register,
IN UINT32 Value
)
{
PCI_ADDR PciAddr;
PciAddr.AddressValue = MAKE_SBDFO (0, GET_PCI_BUS (Register), GET_PCI_DEV (Register), GET_PCI_FUNC (Register), GET_PCI_OFFSET (Register));
LibAmdPciWrite (AccessWidth32, PciAddr, &Value, NULL);
}
UINT32
PspLibPciReadPspConfig (
IN UINT16 Offset
)
{
return (PspLibPciReadConfig ((UINT32) (PSP_PCI_BDA + Offset)));
}
VOID
PspLibPciWritePspConfig (
IN UINT16 Offset,
IN UINT32 Value
)
{
PspLibPciWriteConfig ((UINT32) (PSP_PCI_BDA + Offset), Value);
}
/// Structure for Program ID
typedef enum {
CZ_PROGRAM = 0x00, ///< Program ID for CZ
BR_PROGRAM = 0x01, ///< Program ID for BR
ST_PROGRAM = 0x02, ///< Program ID for ST
UNSUPPORTED_PROGRAM = 0xFF, ///< Program ID for unsupported
} PROGRAM_ID;
static PROGRAM_ID
PspGetProgarmId (
VOID
)
{
CPUID_DATA Cpuid;
LibAmdCpuidRead (0x00000001, &Cpuid, NULL);
//Stoney CPUID 0x00670F00 or 0x00670F01
if ((Cpuid.EAX_Reg >> 16) == 0x67) {
return ST_PROGRAM;
} else if ((Cpuid.EAX_Reg >> 16) == 0x66) {
if ((Cpuid.EAX_Reg & 0xF0) == 0x50) {
//Bristol CPUID 0x00660F51
return BR_PROGRAM;
} else if ((Cpuid.EAX_Reg & 0xF0) == 0x00) {
//Carrizo CPUID 0x00660F00 or 0x00660F01
return CZ_PROGRAM;
}
}
return UNSUPPORTED_PROGRAM;
}
BOOLEAN
GetPspDirBase (
IN OUT UINT32 *Address
)
{
UINTN i;
FIRMWARE_ENTRY_TABLE *FirmwareTableBase;
PROGRAM_ID ProgramId;
CONST UINT32 RomSigAddrTable[] =
{
0xFFFA0000, // --> 512KB base
0xFFF20000, // --> 1MB base
0xFFE20000, // --> 2MB base
0xFFC20000, // --> 4MB base
0xFF820000, // --> 8MB base
0xFF020000 // --> 16MB base
};
ProgramId = PspGetProgarmId ();
for (i = 0; i < sizeof (RomSigAddrTable) / sizeof (UINT32); i++) {
FirmwareTableBase = (FIRMWARE_ENTRY_TABLE *) (UINTN) RomSigAddrTable[i];
// Search flash for unique signature 0x55AA55AA
if (FirmwareTableBase->Signature == FIRMWARE_TABLE_SIGNATURE) {
switch (ProgramId) {
case BR_PROGRAM:
case CZ_PROGRAM:
*Address = FirmwareTableBase->PspDirBase;
break;
case ST_PROGRAM:
*Address = FirmwareTableBase->NewPspDirBase;
break;
default:
*Address = FirmwareTableBase->PspDirBase;
break;
}
return TRUE;
}
}
return (FALSE);
}
/**
Check if PSP device is present
@retval BOOLEAN 0: PSP Disabled, 1: PSP Enabled
**/
BOOLEAN
CheckPspDevicePresent (
VOID
)
{
UINT32 SecureFuseReg;
PspLibPciWriteConfig ( (UINT32)PCI_CONFIG_SMU_INDIRECT_INDEX, (UINT32)SMU_CC_PSP_FUSES_STATUS);
SecureFuseReg = PspLibPciReadConfig ( (UINT32)PCI_CONFIG_SMU_INDIRECT_DATA);
if (SecureFuseReg &= SMU_CC_PSP_FUSES_PROTO) {
return (TRUE);
}
return (FALSE);
}
BOOLEAN
PspBarInitEarly ()
{
UINT32 PspMmioSize;
UINT32 Value32;
if (PspLibPciReadPspConfig (PSP_PCI_DEVID_REG) == 0xffffffff) {
return (FALSE);
}
//Check if PSP BAR has been assigned, if not do the PSP BAR initialation
if (PspLibPciReadPspConfig (PSP_PCI_BAR3_REG) == 0) {
/// Get PSP BAR1 Size
PspLibPciWritePspConfig (PSP_PCI_BAR3_REG, 0xFFFFFFFF);
PspMmioSize = PspLibPciReadPspConfig (PSP_PCI_BAR3_REG);
PspMmioSize = ~PspMmioSize + 1;
/// Assign BAR3 Temporary Address
PspLibPciWritePspConfig (PSP_PCI_BAR3_REG, PSP_BAR_TMP_BASE);
PspLibPciWritePspConfig ( PSP_PCI_CMD_REG, 0x06);
/// Enable GNB redirection to this space @todo use equate & also find proper fix
PspLibPciWriteConfig ( ( (0x18 << 11) + (1 << 8) + 0xBC), ((PSP_BAR_TMP_BASE + PspMmioSize -1) >> 8) & ~0xFF);
PspLibPciWriteConfig ( ( (0x18 << 11) + (1 << 8) + 0xB8), (PSP_BAR_TMP_BASE >> 8) | 3);
/// Enable MsixBarEn, Bar1En, Bar3En
PspLibPciWritePspConfig ( PSP_PCI_EXTRAPCIHDR_REG, 0x34);
/// Capability chain update
Value32 = PspLibPciReadPspConfig (PSP_PCI_MIRRORCTRL1_REG);
Value32 &= ~D8F0x44_PmNxtPtrW_MASK;
Value32 |= 0xA4;
PspLibPciWritePspConfig (PSP_PCI_MIRRORCTRL1_REG, Value32);
}
return (TRUE);
}
/**
Return the PspMMIO MMIO location
@param[in] PspMmio Pointer to Psp MMIO address
@retval BOOLEAN 0: Error, 1 Success
**/
BOOLEAN
GetPspBar3Addr (
IN OUT UINT32 *PspMmio
)
{
UINT32 PciReg48;
UINT64 MsrPspAddr;
if (CheckPspDevicePresent () == FALSE) {
return (FALSE);
}
PciReg48 = PspLibPciReadPspConfig (PSP_PCI_EXTRAPCIHDR_REG);
if (PciReg48 & BIT12) {
// D8F0x48[12] Bar3Hide
LibAmdMsrRead (PSP_MSR_PRIVATE_BLOCK_BAR, &MsrPspAddr, NULL);
*PspMmio = (UINT32)MsrPspAddr;
} else {
*PspMmio = PspLibPciReadPspConfig (PSP_PCI_BAR3_REG) & 0xFFF00000;
}
if ((*PspMmio) == 0xffffffff) {
return (FALSE);
}
return (TRUE);
}

View File

@ -1,238 +0,0 @@
/* $NoKeywords:$ */
/**
* @file
*
* PSP Base Library
*
* Contains interface to the PSP library
*
* @xrefitem bom "File Content Label" "Release Content"
* @e project: AGESA
* @e sub-project: PSP
* @e \$Revision$ @e \$Date$
*
*/
/*****************************************************************************
*
* Copyright (c) 2008 - 2016, 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.
*
***************************************************************************/
#include <check_for_wrapper.h>
#ifndef _PSP_BASE_LIB_H_
#define _PSP_BASE_LIB_H_
#include "AMD.h"
#include "amdlib.h"
#include "PspDirectory.h"
#define PSP_PCI_SEG 0x00 ///< PSP Seg address
#define PSP_PCI_BUS 0x00 ///< PSP Bus address
#define PSP_PCI_DEV 0x08 ///< PSP Device address
#define PSP_PCI_FN 0x00 ///< PSP Fn address
#define PSP_PCI_BDA ((PSP_PCI_DEV << 11) + (PSP_PCI_FN << 8))
#define GET_PSP_PCI_ADDR(Offset) MAKE_SBDFO (PSP_PCI_SEG, PSP_PCI_BUS, PSP_PCI_DEV, PSP_PCI_FN, Offset)
#define PSP_PCI_DEVID_REG 0x00 ///< DevId
#define PSP_PCI_CMD_REG 0x04 ///< CmdReg
#define PSP_PCI_BAR1_REG 0x18 ///< Pci Bar1
#define PSP_PCI_BAR3_REG 0x20 ///< Pci Bar3
#define PSP_PCI_MIRRORCTRL1_REG 0x44 ///< PSP Mirror Reg Ctrl 1
#define PSP_PCI_EXTRAPCIHDR_REG 0x48 ///< Extra PCI Header Ctr
#define PSP_PCI_HTMSICAP_REG 0x5C ///< HT MSI Capability
#define PSP_MSR_PRIVATE_BLOCK_BAR 0xC00110A2ul ///< PSP Private Block Base Address (PSP_ADDR)
#define D8F0x44_PmNxtPtrW_MASK 0xff
#define PSP_MAILBOX_BASE 0x70 ///< Mailbox base offset on PCIe BAR
#define PSP_MAILBOX_STATUS_OFFSET 0x4 ///< Staus Offset
#define PMIO_INDEX_PORT 0xCD6 ///Pmio index port
#define PMIO_DATA_PORT 0xCD7 ///Pmio data port
#define PMIO_REG62 0x62 ///PMIOx62
//======================================================================================
//
// Define Mailbox Status field
//
//======================================================================================
//
/// MBox Status MMIO space
///
typedef struct {
UINT32 MboxInitialized:1; ///< Target will set this to 1 to indicate it is initialized (for ex. PSP/TPM ready)
UINT32 Error:1; ///< Target in adddtion to Done bit will also set this bit to indicate success/error on last command
UINT32 Terminated:1; ///< Target will set this bit if it aborted the command due to abort request
UINT32 Halt:1; ///< Target will set this error if there is critical error that require reset etc
UINT32 Recovery:1; ///< Target will set this error if some PSP entry point by PSP directory has been corrupted.
UINT32 Reserved:27; ///< Reserved
} MBOX_STATUS;
//
// Above defined as bitmap
#define MBOX_STATUS_INITIALIZED 0x00000001ul ///< Mailbox Status: Initialized
#define MBOX_STATUS_ERROR 0x00000002ul ///< Mailbox Status: Error
#define MBOX_STATUS_ABORT 0x00000004ul ///< Mailbox Status: Abort
#define MBOX_STATUS_HALT 0x00000008ul ///< Mailbox Status: Halt
#define MBOX_STATUS_RECOVERY 0x00000010ul ///< Mailbox Status: Recovery required
#define PSP_SMM_COMMUNICATION_TYPE_S3SCRIPT 0x1 ///< PspCommunicationType for S3 script
/// PSP communication structure for S3SCRIPT
typedef struct {
UINT64 PspBar3PciAddr; /// PCI address for PSP BAR3
UINT32 PspBar3Val; /// PCI register value for PSP BAR3
UINT64 Pspx48PciAddr; /// PCI address for PSP Register 48
UINT32 Pspx48Val; /// PCI register value for PSP Register 48
} PSP_SMM_COMMUNICATION_S3SCRIPT;
/// Union for PSP_SMM_COMMUNICATE_DATA
typedef union _PSP_SMM_COMMUNICATE_DATA {
PSP_SMM_COMMUNICATION_S3SCRIPT S3Script; ///< S3Script
} PSP_SMM_COMMUNICATE_DATA;
/// PSP communication header
typedef struct {
UINT32 PspCommunicationType; ///< Type of smm communication buffer
PSP_SMM_COMMUNICATE_DATA Data; ///< Communication buffer
} PSP_SMM_COMMUNICATION_BUFFER;
UINT32
PspLibPciReadConfig (
IN UINT32 Register
);
VOID
PspLibPciWriteConfig (
IN UINT32 Register,
IN UINT32 Value
);
UINT32
PspLibPciReadPspConfig (
IN UINT16 Offset
);
VOID
PspLibPciWritePspConfig (
IN UINT16 Offset,
IN UINT32 Value
);
BOOLEAN
GetPspDirBase (
IN OUT UINT32 *Address
);
BOOLEAN
PSPEntryInfo (
IN PSP_DIRECTORY_ENTRY_TYPE EntryType,
IN OUT UINT64 *EntryAddress,
IN OUT UINT32 *EntrySize
);
BOOLEAN
PspSoftWareFuseInfo (
IN OUT UINTN *FuseSpiAddress,
IN OUT UINT64 *FuseValue
);
VOID
UpdataPspDirCheckSum (
IN OUT PSP_DIRECTORY *PspDir
);
BOOLEAN
CheckPspDevicePresent (
VOID
);
BOOLEAN
CheckPspPlatformSecureEnable (
VOID
);
BOOLEAN
CheckPspRecoveryFlag (
VOID
);
BOOLEAN
GetPspBar1Addr (
IN OUT UINT32 *PspMmio
);
BOOLEAN
GetPspBar3Addr (
IN OUT UINT32 *PspMmio
);
VOID
AcquirePspSmiRegMutex (
VOID
);
VOID
ReleasePspSmiRegMutex (
VOID
);
BOOLEAN
GetPspMboxStatus (
IN OUT MBOX_STATUS **MboxStatus
);
BOOLEAN
PspBarInitEarly (VOID);
VOID
PspLibPciIndirectRead (
IN PCI_ADDR Address,
IN UINT32 IndirectAddress,
IN ACCESS_WIDTH Width,
OUT VOID *Value
);
VOID
PspLibPciIndirectWrite (
IN PCI_ADDR Address,
IN UINT32 IndirectAddress,
IN ACCESS_WIDTH Width,
IN VOID *Value
);
BOOLEAN
IsS3Resume (VOID);
#endif // _AMD_LIB_H_

View File

@ -1,113 +0,0 @@
/* $NoKeywords:$ */
/**
* @file
*
* PSP directory related functions Prototype definition
*
*
* @xrefitem bom "File Content Label" "Release Content"
* @e project: AGESA
* @e sub-project: PSP
* @e \$Revision$ @e \$Date$
*/
/*****************************************************************************
*
* Copyright (c) 2008 - 2016, 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.
*
***************************************************************************/
#include <check_for_wrapper.h>
#ifndef _PSP_DIRECTORY_H_
#define _PSP_DIRECTORY_H_
#define FIRMWARE_TABLE_SIGNATURE 0x55AA55AAul
/// Define the structure OEM signature table
typedef struct _FIRMWARE_ENTRY_TABLE {
UINT32 Signature; ///< Signature should be 0x55AA55AAul
UINT32 ImcRomBase; ///< Base Address for Imc Firmware
UINT32 GecRomBase; ///< Base Address for Gmc Firmware
UINT32 XHCRomBase; ///< Base Address for XHCI Firmware
UINT32 PspDirBase; ///< Base Address for PSP directory
UINT32 NewPspDirBase; ///< Base Address of PSP directory from program start from ST
} FIRMWARE_ENTRY_TABLE;
/// Define structure for PSP directory
typedef struct {
UINT32 PspCookie; ///< "$PSP"
UINT32 Checksum; ///< 32 bit CRC of header items below and the entire table
UINT32 TotalEntries; ///< Number of PSP Entries
UINT32 Reserved; ///< Unused
} PSP_DIRECTORY_HEADER;
/// define various enum type for PSP entry type
enum _PSP_DIRECTORY_ENTRY_TYPE {
AMD_PUBLIC_KEY = 0x00, ///< PSP entry pointer to AMD public key
PSP_FW_BOOT_LOADER = 0x01, ///< PSP entry points to PSP boot loader in SPI space
PSP_FW_TRUSTED_OS = 0x02, ///< PSP entry points to PSP Firmware region in SPI space
PSP_FW_RECOVERY_BOOT_LOADER = 0x03, ///< PSP entry point to PSP recovery region.
PSP_NV_DATA = 0x04, ///< PSP entry points to PSP data region in SPI space
BIOS_PUBLIC_KEY = 0x05, ///< PSP entry points to BIOS public key stored in SPI space
BIOS_RTM_FIRMWARE = 0x06, ///< PSP entry points to BIOS RTM code (PEI volume) in SPI space
BIOS_RTM_SIGNATURE = 0x07, ///< PSP entry points to signed BIOS RTM hash stored in SPI space
SMU_OFFCHIP_FW = 0x08, ///< PSP entry points to SMU image
AMD_SEC_DBG_PUBLIC_KEY = 0x09, ///< PSP entry pointer to Secure Unlock Public key
OEM_PSP_FW_PUBLIC_KEY = 0x0A, ///< PSP entry pointer to an optional public part of the OEM PSP Firmware Signing Key Token
AMD_SOFT_FUSE_CHAIN_01 = 0x0B, ///< PSP entry pointer to 64bit PSP Soft Fuse Chain
PSP_BOOT_TIME_TRUSTLETS = 0x0C, ///< PSP entry points to boot-loaded trustlet binaries
PSP_BOOT_TIME_TRUSTLETS_KEY = 0x0D, ///< PSP entry points to key of the boot-loaded trustlet binaries
PSP_AGESA_RESUME_FW = 0x10, ///< PSP Entry points to PSP Agesa-Resume-Firmware
SMU_OFF_CHIP_FW_2 = 0x12, ///< PSP entry points to secondary SMU image
PSP_S3_NV_DATA = 0x1A, ///< PSP entry pointer to S3 Data Blob
AMD_SCS_BINARY = 0x5F, ///< Software Configuration Settings Data Block
};
#define PSP_ENTRY_PROGRAM_ID_0 0 ///< Program identifier 0, used when two programs share the same root key
#define PSP_ENTRY_PROGRAM_ID_1 1 ///< Program identifier 1, used when two programs share the same root key
#define PSP_ENTRY_CZ_PROGRAM_ID PSP_ENTRY_PROGRAM_ID_0 ///< CZ Program identifier
#define PSP_ENTRY_BR_PROGRAM_ID PSP_ENTRY_PROGRAM_ID_1 ///< BR Program identifier
typedef UINT32 PSP_DIRECTORY_ENTRY_TYPE;
/// Structure for PSP Entry
typedef struct {
PSP_DIRECTORY_ENTRY_TYPE Type; ///< Type of PSP entry; 32 bit long
UINT32 Size; ///< Size of PSP Entry in bytes
UINT64 Location; ///< Location of PSP Entry (byte offset from start of SPI-ROM)
} PSP_DIRECTORY_ENTRY;
/// Structure for PSP directory
typedef struct {
PSP_DIRECTORY_HEADER Header; ///< PSP directory header
PSP_DIRECTORY_ENTRY PspEntry[1]; ///< Array of PSP entries each pointing to a binary in SPI flash
///< The actual size of this array comes from the
///< header (PSP_DIRECTORY.Header.TotalEntries)
} PSP_DIRECTORY;
#endif //_PSP_DIRECTORY_H_