Hi Rebecca, Please find my response inline marked [SAMI]. Regards, Sami Mujawar On 21/07/2022 05:23 pm, Sami Mujawar via groups.io wrote: Hi Rebecca, Ard, On Tue, May 3, 2022 at 12:43 AM, Ard Biesheuvel wrote: // Data Cache enabled on Primary core when MMU is enabled. ArmDisableDataCache (); // Invalidate instruction cache @@ -90,6 +95,18 @@ CEntryPoint ( // If not primary Jump to Secondary Main if (ArmPlatformIsPrimaryCore (MpId)) { + // Initialize the Serial Port + SerialPortInitialize (); + CharCount = AsciiSPrint ( + Buffer, + sizeof (Buffer), + "UEFI firmware (version %s built at %a on %a)\n\r", + (CHAR16 *)PcdGetPtr (PcdFirmwareVersionString), Given that this runs before any library constructors are called, I'd be inclined to use FixedPcdGetPtr() here (and [FixedPcd] in the .INFs below), to ensure that we don't dereference garbage. I also wonder whether we need a call to ProcessLibraryConstructorList() somewhere. [SAMI] There is a patch at https://edk2.groups.io/g/devel/message/91113 which aims to call ProcessLibraryConstructorList(). The idea being that the DebugLib constructor would be called which initializes the serial port. So, maybe these patches need adjustment so that we avoid calling SerialPortInitialize () twice. [/SAMI] [/SAMI] I had a look at the SerialPortInitialize() implementation for PL011 and 16550 UARTs and it appears that both check the current settings before programming the UART. Therefore, please ignore my comment above. [/SAMI] regards, Sami Mujawar + __TIME__, + __DATE__ + ); + SerialPortWrite ((UINT8 *)Buffer, CharCount); IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.