summaryrefslogtreecommitdiff
path: root/UefiPayloadPkg/Library/BaseSerialPortLibHob/BaseSerialPortLibHob.c
diff options
context:
space:
mode:
Diffstat (limited to 'UefiPayloadPkg/Library/BaseSerialPortLibHob/BaseSerialPortLibHob.c')
-rw-r--r--UefiPayloadPkg/Library/BaseSerialPortLibHob/BaseSerialPortLibHob.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/UefiPayloadPkg/Library/BaseSerialPortLibHob/BaseSerialPortLibHob.c b/UefiPayloadPkg/Library/BaseSerialPortLibHob/BaseSerialPortLibHob.c
index 8216195..82d0dd5 100644
--- a/UefiPayloadPkg/Library/BaseSerialPortLibHob/BaseSerialPortLibHob.c
+++ b/UefiPayloadPkg/Library/BaseSerialPortLibHob/BaseSerialPortLibHob.c
@@ -52,7 +52,8 @@ typedef struct {
} UART_INFO;
UART_INFO mUartInfo[MAX_SIZE];
-UINT8 mUartCount = 0;
+UINT8 mUartCount = 0;
+BOOLEAN mBaseSerialPortLibHobAtRuntime = FALSE;
/**
Reads an 8-bit register. If UseMmio is TRUE, then the value is read from
@@ -285,6 +286,11 @@ SerialPortWrite (
UseMmio = mUartInfo[Count].UseMmio;
Stride = mUartInfo[Count].RegisterStride;
+ if (UseMmio && mBaseSerialPortLibHobAtRuntime) {
+ Count++;
+ continue;
+ }
+
if (BaseAddress == 0) {
Count++;
continue;
@@ -295,6 +301,13 @@ SerialPortWrite (
while (BytesLeft != 0) {
//
+ // Wait for the serial port to be ready, to make sure both the transmit FIFO
+ // and shift register empty.
+ //
+ while ((SerialPortReadRegister (BaseAddress, R_UART_LSR, UseMmio, Stride) & B_UART_LSR_TXRDY) == 0) {
+ }
+
+ //
// Fill the entire Tx FIFO
//
for (Index = 0; Index < FifoSize && BytesLeft != 0; Index++, BytesLeft--, DataBuffer++) {