/* $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 #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_