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 <pratikkumar.v.prajapati@intel.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/75527
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Subrata Banik <subratabanik@google.com>
diff --git a/src/soc/intel/common/block/crashlog/crashlog.c b/src/soc/intel/common/block/crashlog/crashlog.c
index daa5b76..aa2a240 100644
--- a/src/soc/intel/common/block/crashlog/crashlog.c
+++ b/src/soc/intel/common/block/crashlog/crashlog.c
@@ -271,6 +271,14 @@
 	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 07dd5a2..cf9ddad 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 {