diff options
Diffstat (limited to 'src/soc/amd/common')
9 files changed, 72 insertions, 7 deletions
diff --git a/src/soc/amd/common/Makefile.inc b/src/soc/amd/common/Makefile.inc index 9f45513546..c5d952ff2d 100644 --- a/src/soc/amd/common/Makefile.inc +++ b/src/soc/amd/common/Makefile.inc @@ -5,6 +5,8 @@ subdirs-y += fsp subdirs-y += pi subdirs-y += vboot +CPPFLAGS_common += -I$(src)/soc/amd/common/vboot/include + ifneq ($(V),) OPT_DEBUG_AMDFWTOOL = --debug endif diff --git a/src/soc/amd/common/block/cpu/noncar/bootblock.c b/src/soc/amd/common/block/cpu/noncar/bootblock.c index 9ef899e5ac..e32499de04 100644 --- a/src/soc/amd/common/block/cpu/noncar/bootblock.c +++ b/src/soc/amd/common/block/cpu/noncar/bootblock.c @@ -6,8 +6,8 @@ #include <console/console.h> #include <cpu/cpu.h> #include <cpu/x86/tsc.h> +#include <psp_verstage/psp_transfer.h> #include <soc/southbridge.h> -#include <soc/psp_transfer.h> #include <stdint.h> asmlinkage void bootblock_c_entry(uint64_t base_timestamp) diff --git a/src/soc/amd/common/block/cpu/noncar/memlayout_psp_verstage.ld b/src/soc/amd/common/block/cpu/noncar/memlayout_psp_verstage.ld index e0278abfc8..cc1a1b5026 100644 --- a/src/soc/amd/common/block/cpu/noncar/memlayout_psp_verstage.ld +++ b/src/soc/amd/common/block/cpu/noncar/memlayout_psp_verstage.ld @@ -1,8 +1,8 @@ /* SPDX-License-Identifier: GPL-2.0-only */ #include <memlayout.h> -#include <soc/psp_transfer.h> #include <fmap_config.h> +#include <psp_verstage/psp_transfer.h> #include <soc/psp_verstage_addr.h> ENTRY(_psp_vs_start) diff --git a/src/soc/amd/common/block/cpu/noncar/memlayout_x86.ld b/src/soc/amd/common/block/cpu/noncar/memlayout_x86.ld index 42323f51bf..090d8b727f 100644 --- a/src/soc/amd/common/block/cpu/noncar/memlayout_x86.ld +++ b/src/soc/amd/common/block/cpu/noncar/memlayout_x86.ld @@ -2,7 +2,7 @@ #include <memlayout.h> #include <arch/header.ld> -#include <soc/psp_transfer.h> +#include <psp_verstage/psp_transfer.h> #define EARLY_RESERVED_DRAM_START(addr) REGION_START(early_reserved_dram, addr) #define EARLY_RESERVED_DRAM_END(addr) REGION_END(early_reserved_dram, addr) diff --git a/src/soc/amd/common/psp_verstage/include/psp_verstage.h b/src/soc/amd/common/psp_verstage/include/psp_verstage.h index 39059b8c5c..c397b1e778 100644 --- a/src/soc/amd/common/psp_verstage/include/psp_verstage.h +++ b/src/soc/amd/common/psp_verstage/include/psp_verstage.h @@ -7,7 +7,7 @@ #include <amdblocks/psp_efs.h> #include <bl_uapp/bl_syscall_public.h> #include <stdint.h> -#include <soc/psp_transfer.h> +#include <psp_verstage/psp_transfer.h> #include <psp_post_code.h> #define EMBEDDED_FW_SIGNATURE 0x55aa55aa diff --git a/src/soc/amd/common/psp_verstage/psp_verstage.c b/src/soc/amd/common/psp_verstage/psp_verstage.c index e84ea06289..cc710fae61 100644 --- a/src/soc/amd/common/psp_verstage/psp_verstage.c +++ b/src/soc/amd/common/psp_verstage/psp_verstage.c @@ -12,8 +12,8 @@ #include <fmap.h> #include <fmap_config.h> #include <pc80/mc146818rtc.h> +#include <psp_verstage/psp_transfer.h> #include <soc/iomap.h> -#include <soc/psp_transfer.h> #include <security/tpm/tspi.h> #include <security/tpm/tss.h> #include <security/vboot/vbnv.h> diff --git a/src/soc/amd/common/vboot/include/psp_verstage/psp_transfer.h b/src/soc/amd/common/vboot/include/psp_verstage/psp_transfer.h new file mode 100644 index 0000000000..e2365168ed --- /dev/null +++ b/src/soc/amd/common/vboot/include/psp_verstage/psp_transfer.h @@ -0,0 +1,63 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#ifndef AMD_COMMON_PSP_TRANSFER_H +#define AMD_COMMON_PSP_TRANSFER_H + +# if (CONFIG_CMOS_RECOVERY_BYTE != 0) +# define CMOS_RECOVERY_BYTE CONFIG_CMOS_RECOVERY_BYTE +# elif CONFIG(VBOOT_STARTS_BEFORE_BOOTBLOCK) +# error "Must set CONFIG_CMOS_RECOVERY_BYTE" +# endif + +#define CMOS_RECOVERY_MAGIC_VAL 0x96 + +#define TRANSFER_INFO_SIZE 64 +#define TIMESTAMP_BUFFER_SIZE 0x200 + +#define TRANSFER_MAGIC_VAL 0x50544953 + +/* Bit definitions for the psp_info field in the PSP transfer_info_struct */ +#define PSP_INFO_PRODUCTION_MODE 0x00000001UL +#define PSP_INFO_PRODUCTION_SILICON 0x00000002UL +#define PSP_INFO_VALID 0x80000000UL + +/* Area for things that would cause errors in a linker script */ +#if !defined(__ASSEMBLER__) +#include <stdint.h> + +struct transfer_info_struct { + uint32_t magic_val; /* Identifier */ + uint32_t struct_bytes; /* Size of this structure */ + uint32_t buffer_size; /* Size of the transfer buffer area */ + + /* Offsets from start of transfer buffer */ + uint32_t workbuf_offset; + uint32_t console_offset; + uint32_t timestamp_offset; + uint32_t fmap_offset; + + uint32_t unused1[5]; + + /* Fields reserved for the PSP */ + uint64_t timestamp; /* Offset 0x30 */ + uint32_t psp_unused; /* Offset 0x38 */ + uint32_t psp_info; /* Offset 0x3C */ +}; + +_Static_assert(sizeof(struct transfer_info_struct) == TRANSFER_INFO_SIZE, + "TRANSFER_INFO_SIZE is incorrect"); + +/* Make sure the PSP transferred information over to x86 side. */ +int transfer_buffer_valid(const struct transfer_info_struct *ptr); +/* Verify vboot work buffer is valid in transfer buffer */ +void verify_psp_transfer_buf(void); +/* Display the transfer block's PSP_info data */ +void show_psp_transfer_info(void); +/* Replays the pre-x86 cbmem console into the x86 cbmem console */ +void replay_transfer_buffer_cbmemc(void); +/* Called by bootblock_c_entry in the VBOOT_STARTS_BEFORE_BOOTBLOCK case */ +void boot_with_psp_timestamp(uint64_t base_timestamp); + +#endif + +#endif /* AMD_COMMON_PSP_TRANSFER_H */ diff --git a/src/soc/amd/common/vboot/transfer_buffer.c b/src/soc/amd/common/vboot/transfer_buffer.c index e08847e8ca..a9644d3a08 100644 --- a/src/soc/amd/common/vboot/transfer_buffer.c +++ b/src/soc/amd/common/vboot/transfer_buffer.c @@ -4,9 +4,9 @@ #include <console/cbmem_console.h> #include <console/console.h> #include <pc80/mc146818rtc.h> +#include <psp_verstage/psp_transfer.h> #include <security/vboot/vbnv.h> #include <security/vboot/symbols.h> -#include <soc/psp_transfer.h> #include <timestamp.h> #include <2struct.h> diff --git a/src/soc/amd/common/vboot/vboot_bootblock.c b/src/soc/amd/common/vboot/vboot_bootblock.c index 07039fd3b5..9b24232263 100644 --- a/src/soc/amd/common/vboot/vboot_bootblock.c +++ b/src/soc/amd/common/vboot/vboot_bootblock.c @@ -3,7 +3,7 @@ #include <bootblock_common.h> #include <console/console.h> #include <cpu/x86/tsc.h> -#include <soc/psp_transfer.h> +#include <psp_verstage/psp_transfer.h> #include <symbols.h> #include <timestamp.h> #include <types.h> |