From 5f3b6545f4ce1f6f0a0a44958c9a924f3639ea71 Mon Sep 17 00:00:00 2001 From: Pratikkumar Prajapati Date: Tue, 30 May 2023 11:28:21 -0700 Subject: [PATCH] soc/intel/common/crashlog: Check for invalid record Do not copy the crashlog record if the record is 0xdeadbeef Bug=None TEST=Able to build. With Meteor Lake SOC related patch, able to capture and decode crashlog. Change-Id: I0edbf6902685a882876d525e63c5b602c1590ea1 Signed-off-by: Pratikkumar Prajapati Reviewed-on: https://review.coreboot.org/c/coreboot/+/75527 Tested-by: build bot (Jenkins) Reviewed-by: Subrata Banik --- src/soc/intel/common/block/crashlog/crashlog.c | 8 ++++++++ src/soc/intel/common/block/include/intelblocks/crashlog.h | 2 ++ 2 files changed, 10 insertions(+) diff --git a/src/soc/intel/common/block/crashlog/crashlog.c b/src/soc/intel/common/block/crashlog/crashlog.c index daa5b763cf..aa2a240ce8 100644 --- a/src/soc/intel/common/block/crashlog/crashlog.c +++ b/src/soc/intel/common/block/crashlog/crashlog.c @@ -271,6 +271,14 @@ bool cl_copy_data_from_sram(u32 src_bar, u32 src_addr = src_bar + offset; u32 data = read32((u32 *)src_addr); + + /* First 32bits of the record must not be 0xdeadbeef */ + if (data == INVALID_CRASHLOG_RECORD) { + printk(BIOS_DEBUG, "Invalid data 0x%x at offset 0x%x from addr 0x%x\n", + data, offset, src_bar); + return false; + } + /* PMC: copy if 1st DWORD in buffer is not zero and its 31st bit is not set */ if (pmc_sram && !(data && !(data & BIT(31)))) { printk(BIOS_DEBUG, "Invalid data 0x%x at offset 0x%x from addr 0x%x" diff --git a/src/soc/intel/common/block/include/intelblocks/crashlog.h b/src/soc/intel/common/block/include/intelblocks/crashlog.h index 07dd5a2db0..cf9ddad553 100644 --- a/src/soc/intel/common/block/include/intelblocks/crashlog.h +++ b/src/soc/intel/common/block/include/intelblocks/crashlog.h @@ -23,6 +23,8 @@ #define CRASHLOG_SIZE_DEBUG_PURPOSE 0x640 +#define INVALID_CRASHLOG_RECORD 0xdeadbeef + /* PMC crashlog discovery structs */ typedef union { struct {