summaryrefslogtreecommitdiff
path: root/src/soc/amd/common/vboot
diff options
context:
space:
mode:
Diffstat (limited to 'src/soc/amd/common/vboot')
-rw-r--r--src/soc/amd/common/vboot/include/psp_verstage/psp_transfer.h63
-rw-r--r--src/soc/amd/common/vboot/transfer_buffer.c2
-rw-r--r--src/soc/amd/common/vboot/vboot_bootblock.c2
3 files changed, 65 insertions, 2 deletions
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>