From bbb81e39b47dca8f7945c5039daef9877b3916af Mon Sep 17 00:00:00 2001 From: Aaron Pop Date: Fri, 24 Apr 2026 16:14:08 -0700 Subject: [PATCH] AdvLoggerPkg: Update functionality for PeilessSec In PeilessSec platforms using a PcdAdvancedLoggerBase at a fixed location, there are other firmware components which may run prior to Uefi and create log messages. Perform a check at the fixed location for a valid log signature. If the valid log signature is found, treat the log buffer as already initialized and then reinitialize the hwdport. Found in a platform where pre UEFI firmware is initializing the log buffer, but using a different serial port from what the Uefi code uses. --- .../PeilessArm/AdvancedLoggerLib.c | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/AdvLoggerPkg/Library/AdvancedLoggerLib/PeilessArm/AdvancedLoggerLib.c b/AdvLoggerPkg/Library/AdvancedLoggerLib/PeilessArm/AdvancedLoggerLib.c index fc8b827789..4226572c8f 100644 --- a/AdvLoggerPkg/Library/AdvancedLoggerLib/PeilessArm/AdvancedLoggerLib.c +++ b/AdvLoggerPkg/Library/AdvancedLoggerLib/PeilessArm/AdvancedLoggerLib.c @@ -37,15 +37,20 @@ AdvancedLoggerLibConstructor ( LoggerInfo = ALI_FROM_PA (FixedPcdGet64 (PcdAdvancedLoggerBase)); if (LoggerInfo != NULL) { - ZeroMem ((VOID *)LoggerInfo, sizeof (ADVANCED_LOGGER_INFO)); - LoggerInfo->Signature = ADVANCED_LOGGER_SIGNATURE; - LoggerInfo->Version = ADVANCED_LOGGER_INFO_VER; - LoggerInfo->LogBufferSize = (UINT32)(LogBufferSize - sizeof (ADVANCED_LOGGER_INFO)); - LoggerInfo->LogBufferOffset = EXPECTED_LOG_BUFFER_OFFSET (LoggerInfo); - LoggerInfo->LogCurrentOffset = LoggerInfo->LogBufferOffset; + // Check if the LoggerInfo has already been initalized in a previous phase to + // prevent overwritting any logs already collected + if (LoggerInfo->Signature != ADVANCED_LOGGER_SIGNATURE) { + ZeroMem ((VOID *)LoggerInfo, sizeof (ADVANCED_LOGGER_INFO)); + LoggerInfo->Signature = ADVANCED_LOGGER_SIGNATURE; + LoggerInfo->Version = ADVANCED_LOGGER_INFO_VER; + LoggerInfo->LogBufferSize = (UINT32)(LogBufferSize - sizeof (ADVANCED_LOGGER_INFO)); + LoggerInfo->LogBufferOffset = EXPECTED_LOG_BUFFER_OFFSET (LoggerInfo); + LoggerInfo->LogCurrentOffset = LoggerInfo->LogBufferOffset; + LoggerInfo->HwPrintLevel = FixedPcdGet32 (PcdAdvancedLoggerHdwPortDebugPrintErrorLevel); + LoggerInfo->InPermanentRAM = TRUE; + } + LoggerInfo->HdwPortInitialized = TRUE; - LoggerInfo->HwPrintLevel = FixedPcdGet32 (PcdAdvancedLoggerHdwPortDebugPrintErrorLevel); - LoggerInfo->InPermanentRAM = TRUE; AdvancedLoggerHdwPortInitialize (); DEBUG ((DEBUG_INFO, "%a: Advanced Logger initialized at fixed RAM address %p\n", __func__, LoggerInfo));