From 1e1aa0ca4d4d5ae9d0b4917220cc72f9c441b8a2 Mon Sep 17 00:00:00 2001 From: Raul E Rangel Date: Thu, 13 Jan 2022 09:46:21 -0700 Subject: lib/cbmem_console: Add cbmemc_copy_in function When running in verstage before bootblock, the PSP (ARM co-processor) is running with limited SRAM. It needs to stash the verstage console data internally until DRAM is brought up. Once DRAM is brought up the data is stashed in a "transfer buffer" region. In the current design, we are using the same region for the transfer buffer and the preram_cbmem_console region. This has the following downsides: 1) The pre-x86 buffer needs to be large enough to hold all the verstage, bootblock and romstage console logs. 2) On AMD platforms, the PSP verstage is signed. Changing the size of preram_cbmem_console after the fact will result in a mismatch of the transfer buffer between verstage and bootblock. This CL adds a new method that allows SoC specific code to copy the CBMEM console in the transfer buffer to the active CBMEM console. BUG=b:213828947 TEST=Boot guybrush and no longer see *** Pre-CBMEM romstage console overflowed, log truncated! Signed-off-by: Raul E Rangel Change-Id: Idc0ab8090db740e0d1b3d21d8968f26471f2e930 Reviewed-on: https://review.coreboot.org/c/coreboot/+/61099 Tested-by: build bot (Jenkins) Reviewed-by: Kangheui Won Reviewed-by: Julius Werner --- src/lib/cbmem_console.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src/lib') diff --git a/src/lib/cbmem_console.c b/src/lib/cbmem_console.c index 02de8045c2..8e190d7264 100644 --- a/src/lib/cbmem_console.c +++ b/src/lib/cbmem_console.c @@ -139,6 +139,16 @@ static void copy_console_buffer(struct cbmem_console *src_cons_p) src_cons_p->size = 0; } +void cbmemc_copy_in(void *buffer, size_t size) +{ + struct cbmem_console *previous = (void *)buffer; + + if (!buffer_valid(previous, size)) + return; + + copy_console_buffer(previous); +} + static void cbmemc_reinit(int is_recovery) { const size_t size = CONFIG_CONSOLE_CBMEM_BUFFER_SIZE; -- cgit v1.2.3