edk2/ArmVirtPkg/Library
Laszlo Ersek 5087a07736 ArmVirtPkg/FdtPL011SerialPortLib: initialize implicitly
FdtPL011SerialPortLib claims that it's usable from the DXE_CORE. That's
not correct: the DXE_CORE calls DEBUG() and ASSERT() before it calls
ProcessLibraryConstructorList(). Via the BaseDebugLibSerialPort instance,
those DEBUG() and ASSERT() calls result in SerialPortWrite() calls, before
ProcessLibraryConstructorList() called either our constructor
FdtPL011SerialPortLibInitialize(), or BaseDebugLibSerialPortConstructor().

(And even if the DXE_CORE called the latter function early enough, it
would just invoke our SerialPortInitialize() function -- which does
nothing.)

This means that the earliest DXE_CORE debug messages are lost.

Rename FdtPL011SerialPortLibInitialize() to SerialPortInitialize(), so
that the same initialization occur through the constructor and the public
SerialPortInitialize() library API.

Turn SerialPortInitialize() calls after the first one into no-ops.

Our SerialPortLib APIs already use (mSerialBaseAddress != 0) to track
initialization. Rework those checks to actually initialize the library if
that hasn't happened yet.

The following new lines appear in the log:

> CoreInitializeMemoryServices:
>   BaseAddress - 0x48000000 Length - 0xF8000000 MinimalMemorySizeNeeded - 0x38C8000
> InstallProtocolInterface: [EfiLoadedImageProtocol] 46EFC3E0
> ProtectUefiImageCommon - 0x46EFC3E0
>   - 0x0000000046EB2000 - 0x0000000000068000

(0x46EB2000 is the load address of the DXE Core.)

Reported-by: Oliver Smith-Denny <osde@linux.microsoft.com>
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Ard Biesheuvel <ardb@kernel.org>
2023-10-07 13:41:27 +00:00
..
ArmPlatformLibQemu ArmVirtPkg/ArmPlatformLibQemu: Make IdMap.S BTI compatible 2023-03-30 11:05:22 +00:00
ArmVirtDxeHobLib ArmVirtPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
ArmVirtGicArchLib ArmVirtPkg: Update code to be more C11 compliant by using __func__ 2023-04-10 14:19:57 +00:00
ArmVirtMemoryInitPeiLib ArmVirtPkg/QemuVirtMemInfoLib: use HOB not PCD to record the memory size 2022-10-26 17:28:39 +00:00
ArmVirtPL031FdtClientLib ArmVirtPkg: Update code to be more C11 compliant by using __func__ 2023-04-10 14:19:57 +00:00
ArmVirtPciHostBridgeUtilityLib ArmVirtPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
ArmVirtPsciResetSystemLib ArmVirtPkg: Update code to be more C11 compliant by using __func__ 2023-04-10 14:19:57 +00:00
ArmVirtPsciResetSystemPeiLib ArmVirtPkg: Update code to be more C11 compliant by using __func__ 2023-04-10 14:19:57 +00:00
ArmVirtTimerFdtClientLib ArmVirtPkg: handle virtual EL2 timer in DT 2023-09-19 20:27:55 +00:00
CloudHvVirtMemInfoLib ArmVirtPkg: Update code to be more C11 compliant by using __func__ 2023-04-10 14:19:57 +00:00
Fdt16550SerialPortHookLib ArmVirtPkg: Fix parsing of serial port node 2023-03-29 13:48:54 +00:00
FdtPL011SerialPortLib ArmVirtPkg/FdtPL011SerialPortLib: initialize implicitly 2023-10-07 13:41:27 +00:00
KvmtoolPlatformPeiLib ArmVirtPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
KvmtoolRtcFdtClientLib ArmVirtPkg: Update code to be more C11 compliant by using __func__ 2023-04-10 14:19:57 +00:00
KvmtoolVirtMemInfoLib ArmVirtPkg: Update code to be more C11 compliant by using __func__ 2023-04-10 14:19:57 +00:00
NorFlashKvmtoolLib ArmVirtPkg: Fallback to variable emulation if no CFI is found 2023-05-29 15:14:00 +00:00
NorFlashQemuLib ArmVirtPkg: Update code to be more C11 compliant by using __func__ 2023-04-10 14:19:57 +00:00
PlatformBootManagerLib ArmVirtPkg: use PcdTerminalTypeGuidBuffer for VirtioSerial console 2023-09-07 15:47:58 +00:00
PlatformPeiLib ArmVirtPkg: Update code to be more C11 compliant by using __func__ 2023-04-10 14:19:57 +00:00
QemuVirtMemInfoLib ArmVirtPkg/ArmVirtQemu: Use read-only memory region type for code flash 2023-05-29 16:51:01 +00:00
XenArmGenericTimerVirtCounterLib ArmVirtPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00
XenVirtMemInfoLib ArmVirtPkg: Apply uncrustify changes 2021-12-07 17:24:28 +00:00