Hi,
On 06/27/2016 11:23 AM, evan.lloyd@arm.com wrote:
From: Evan Lloyd evan.lloyd@arm.com
The original SPCR used explicit constants for hardware details. That made it difficult to readilly adjust the use of serial ports. This change modifies the explicit constants to use PCDs, so the serial port usage can be adjusted at build. This can help avoid problems where sharing ports (e.g. between UEFI trace and host debug) causes fails.
Because the SPCR baud rate selection does not map directly to the PCD used, a compile time error has been added for baud rates not matching the SPCR specification. This is beneficial as it is quite difficult to diagnose an invalid baud rate otherwise.
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Evan Lloyd evan.lloyd@arm.com
Notes: SPCR_v3: - Split into 2 commits (aslc then PCDs) [Leif Lindholm]
Platforms/ARM/Juno/ArmJuno.dsc | 1 + Platforms/ARM/Juno/AcpiTables/AcpiTables.inf | 8 ++++++++ Platforms/ARM/Juno/AcpiTables/Spcr.aslc | 14 ++++++++++++-- 3 files changed, 21 insertions(+), 2 deletions(-)
diff --git a/Platforms/ARM/Juno/ArmJuno.dsc b/Platforms/ARM/Juno/ArmJuno.dsc index 2caa7413dec3f9f8969b5de28d0a49402fe71e86..3626dfb6e5834f36d136214550ecfde7ed41e4e5 100644 --- a/Platforms/ARM/Juno/ArmJuno.dsc +++ b/Platforms/ARM/Juno/ArmJuno.dsc @@ -124,6 +124,7 @@ gEfiMdePkgTokenSpaceGuid.PcdUartDefaultReceiveFifoDepth|0 gArmPlatformTokenSpaceGuid.PL011UartInteger|4 gArmPlatformTokenSpaceGuid.PL011UartFractional|0
gArmPlatformTokenSpaceGuid.PL011UartInterrupt|115
## PL031 RealTimeClock gArmPlatformTokenSpaceGuid.PcdPL031RtcBase|0x1C170000
diff --git a/Platforms/ARM/Juno/AcpiTables/AcpiTables.inf b/Platforms/ARM/Juno/AcpiTables/AcpiTables.inf index 3caf4afdc82f9cd6b275d155857b09f3c9a6b8d0..d62068d65846d9032bc0771cfa7c80e7fd559ee3 100644 --- a/Platforms/ARM/Juno/AcpiTables/AcpiTables.inf +++ b/Platforms/ARM/Juno/AcpiTables/AcpiTables.inf @@ -51,3 +51,11 @@
gArmTokenSpaceGuid.PcdGenericWatchdogControlBase gArmTokenSpaceGuid.PcdGenericWatchdogRefreshBase
- #
- # PL011 UART Settings for Serial Port Console Redirection
- #
- gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterBase
- gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate
- gArmPlatformTokenSpaceGuid.PL011UartClkInHz
- gArmPlatformTokenSpaceGuid.PL011UartInterrupt
diff --git a/Platforms/ARM/Juno/AcpiTables/Spcr.aslc b/Platforms/ARM/Juno/AcpiTables/Spcr.aslc index 6fea989b13ea2cce389c898e290080327e4202e2..8371669b7beb3a213b78379803f631ff17b21ce8 100644 --- a/Platforms/ARM/Juno/AcpiTables/Spcr.aslc +++ b/Platforms/ARM/Juno/AcpiTables/Spcr.aslc @@ -45,15 +45,25 @@ STATIC EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE Spcr = { EFI_ACPI_RESERVED_BYTE }, // EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE BaseAddress;
- ARM_GAS32 (0x7FF80000),
- ARM_GAS32 (FixedPcdGet64 (PcdSerialRegisterBase)), // UINT8 InterruptType; EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_INTERRUPT_TYPE_GIC, // UINT8 Irq; 0, // Not used on ARM // UINT32 GlobalSystemInterrupt;
- 0x73,
- FixedPcdGet32 (PL011UartInterrupt), // UINT8 BaudRate;
+#if (FixedPcdGet64 (PcdUartDefaultBaudRate) == 9600)
- EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_BAUD_RATE_9600,
+#elif (FixedPcdGet64 (PcdUartDefaultBaudRate) == 19200)
- EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_BAUD_RATE_19200,
+#elif (FixedPcdGet64 (PcdUartDefaultBaudRate) == 57600)
- EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_BAUD_RATE_57600,
+#elif (FixedPcdGet64 (PcdUartDefaultBaudRate) == 115200) EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_BAUD_RATE_115200, +#else +#error Unsupported SPCR Baud Rate +#endif
I converted my SPCR/etc to aslC a few months ago, and did something similar, but I think it's a mistake. These baud rates need to be user select-able via a HII menu, which once that has been provided should probably allow the selection of the flow control as well (does anyone use anything other 8n1 these days for the bit/parity/stop? those probably could remain hard coded).
Although that comment should not be construed as lack of support for this patch (not that it matters at this point as Leif took it).
// UINT8 Parity; EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_PARITY_NO_PARITY, // UINT8 StopBits;