From: "Ard Biesheuvel" <ardb@kernel.org>
To: Jeremy Linton <jeremy.linton@arm.com>
Cc: devel@edk2.groups.io, quic_llindhol@quicinc.com
Subject: Re: [edk2-devel] [PATCH v2 1/5] Platform/RaspberryPi/DualSerialPortLib: Always configure the pl011
Date: Mon, 11 Mar 2024 07:13:59 -0700 [thread overview]
Message-ID: <CAMj1kXE73mhJiNv6KzDEkGWbE8vz7A0a5QMubgPV6cMB3OU4-Q@mail.gmail.com> (raw)
In-Reply-To: <20240117213614.4188518-2-jeremy.linton@arm.com>
On Wed, 17 Jan 2024 at 22:36, Jeremy Linton <jeremy.linton@arm.com> wrote:
>
> The rpi's config.txt controls which uart (pl011, or miniuart) is
> selected as the console. TFA and edk2 follow its lead, but if the
> miniuart is selected as the primary and the machine is booted in ACPI
> mode the baud/etc is never configured for the pl011. The linux kernel
> won't reconfigure it either as its listed as a "SBSA" uart, so it
> simply won't work.
>
> This re-enables BT on the pl011 in ACPI mode, and it somewhat starts
> to work again.
>
> Signed-off-by: Jeremy Linton <jeremy.linton@arm.com>
> ---
> .../DualSerialPortLib/DualSerialPortLib.c | 44 ++++++++++++-------
> 1 file changed, 29 insertions(+), 15 deletions(-)
>
> diff --git a/Platform/RaspberryPi/Library/DualSerialPortLib/DualSerialPortLib.c b/Platform/RaspberryPi/Library/DualSerialPortLib/DualSerialPortLib.c
> index d2f983bf0a..09d3e33c00 100644
> --- a/Platform/RaspberryPi/Library/DualSerialPortLib/DualSerialPortLib.c
> +++ b/Platform/RaspberryPi/Library/DualSerialPortLib/DualSerialPortLib.c
> @@ -76,6 +76,8 @@ SerialPortInitialize (
> EFI_PARITY_TYPE Parity;
> UINT8 DataBits;
> EFI_STOP_BITS_TYPE StopBits;
> + RETURN_STATUS Ret;
> + UINTN Timeout;
>
> //
> // First thing we need to do is determine which of PL011 or miniUART is selected
> @@ -85,23 +87,34 @@ SerialPortInitialize (
> UsePl011UartSet = TRUE;
> }
>
> - if (UsePl011Uart) {
> - BaudRate = FixedPcdGet64 (PcdUartDefaultBaudRate);
> + // always init the pl011 on the RPi4, linux expects a SBSA uart to be at 115200
> + // this means we need to set the baud/etc even if we aren't using it as a console
> + if ((UsePl011Uart) || (RPI_MODEL == 4)) {
> ReceiveFifoDepth = 0; // Use default FIFO depth
> + if (!UsePl011Uart)
> + {
> + BaudRate = 115200;
> + }
> + else
> + {
> + BaudRate = FixedPcdGet64 (PcdUartDefaultBaudRate);
> + }
> Parity = (EFI_PARITY_TYPE)FixedPcdGet8 (PcdUartDefaultParity);
> DataBits = FixedPcdGet8 (PcdUartDefaultDataBits);
> StopBits = (EFI_STOP_BITS_TYPE) FixedPcdGet8 (PcdUartDefaultStopBits);
>
> - return PL011UartInitializePort (
> - PL011_UART_REGISTER_BASE,
> - PL011UartClockGetFreq(),
> - &BaudRate,
> - &ReceiveFifoDepth,
> - &Parity,
> - &DataBits,
> - &StopBits
> - );
> - } else {
> + Ret = PL011UartInitializePort (
> + PL011_UART_REGISTER_BASE,
> + PL011UartClockGetFreq(),
> + &BaudRate,
> + &ReceiveFifoDepth,
> + &Parity,
> + &DataBits,
> + &StopBits
> + );
> + }
> +
> + if (!UsePl011Uart) {
> SerialRegisterBase = MINI_UART_REGISTER_BASE;
> Divisor = SerialPortGetDivisor (PcdGet32 (PcdSerialBaudRate));
>
> @@ -127,7 +140,8 @@ SerialPortInitialize (
> // Wait for the serial port to be ready.
> // Verify that both the transmit FIFO and the shift register are empty.
> //
> - while ((SerialPortReadRegister (SerialRegisterBase, R_UART_LSR) & (B_UART_LSR_TEMT | B_UART_LSR_TXRDY)) != (B_UART_LSR_TEMT | B_UART_LSR_TXRDY));
> + Timeout = 1000;
> + while (((SerialPortReadRegister (SerialRegisterBase, R_UART_LSR) & (B_UART_LSR_TEMT | B_UART_LSR_TXRDY)) != (B_UART_LSR_TEMT | B_UART_LSR_TXRDY)) && (Timeout--));
>
Why is this necessary, and what does it have to do with the rest of the patch?
> //
> // Configure baud rate
> @@ -158,9 +172,9 @@ SerialPortInitialize (
> // Put Modem Control Register(MCR) into its reset state of 0x00.
> //
> SerialPortWriteRegister (SerialRegisterBase, R_UART_MCR, 0x00);
> -
> - return RETURN_SUCCESS;
> + Ret = RETURN_SUCCESS;
> }
> + return Ret;
> }
>
> /**
> --
> 2.43.0
>
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#116630): https://edk2.groups.io/g/devel/message/116630
Mute This Topic: https://groups.io/mt/103796307/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
next prev parent reply other threads:[~2024-03-11 14:14 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-17 21:36 [edk2-devel] [PATCH v2 0/5] Platform/RaspberryPi: Various minor fixes Jeremy Linton
2024-01-17 21:36 ` [edk2-devel] [PATCH v2 1/5] Platform/RaspberryPi/DualSerialPortLib: Always configure the pl011 Jeremy Linton
2024-03-11 14:13 ` Ard Biesheuvel [this message]
2024-03-13 2:06 ` Jeremy Linton
2024-01-17 21:36 ` [edk2-devel] [PATCH v2 2/5] Silicon/Broadcom/BcmGenetDxe: Suppress some bogus compiler warnings Jeremy Linton
2024-01-17 21:36 ` [edk2-devel] [PATCH v2 3/5] Platform/RaspberryPi: Cleanup menu visibility Jeremy Linton
2024-01-17 21:36 ` [edk2-devel] [PATCH v2 4/5] Platform/RaspberryPi: Give the user control over the XHCI mailbox Jeremy Linton
2024-01-17 21:36 ` [edk2-devel] [PATCH v2 5/5] Platform/RaspberryPi: Update PCIe MMIO window for DT Jeremy Linton
2024-03-11 14:25 ` [edk2-devel] [PATCH v2 0/5] Platform/RaspberryPi: Various minor fixes Ard Biesheuvel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAMj1kXE73mhJiNv6KzDEkGWbE8vz7A0a5QMubgPV6cMB3OU4-Q@mail.gmail.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox