diff options
author | Raul E Rangel <rrangel@chromium.org> | 2020-06-11 16:27:49 -0600 |
---|---|---|
committer | Patrick Georgi <pgeorgi@google.com> | 2020-06-14 16:52:58 +0000 |
commit | 4f5936b45652cea97f964678c93083b0a4f2e478 (patch) | |
tree | fadca287414f948d07ff2f05983949e8850d4aa4 /src/soc/amd/picasso/uart.c | |
parent | 5d0893adced0423241dc016392ca9d4ce1340b2e (diff) |
soc/amd/picasso: Explicitly disable legacy UART
The legacy UARTs are supposed to default to off according to the
documentation (PPR for AMD Family 17h Model 18h). But legacy UART Range_0
is enabled after reset. The PSP might be enabling it or the documentation
might be wrong.
Having it enabled causes problems though. We have ACPI nodes defining
MMIO UARTs, and the kernel also probes for legacy UARTs. This results in
two drivers accessing the same device, one via MMIO and one via IO. I
suspect this was the cause of the garbage serial output.
Before the change you would see the following in the console:
[ 0.741108] serial8250: ttyS3 at I/O 0x2e8 (irq = 3, base_baud = 115200) is a 16550A
After this change, we no longer see it.
BUG=b:152079780, b:157858890
TEST=Boot trembyle and make sure serial is still working.
Signed-off-by: Raul E Rangel <rrangel@chromium.org>
Change-Id: I9d837e449b961dbb55d1301d2107838e26b3f892
Reviewed-on: https://review.coreboot.org/c/coreboot/+/42323
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-by: Furquan Shaikh <furquan@google.com>
Reviewed-by: Marshall Dawson <marshalldawson3rd@gmail.com>
Diffstat (limited to 'src/soc/amd/picasso/uart.c')
-rw-r--r-- | src/soc/amd/picasso/uart.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/soc/amd/picasso/uart.c b/src/soc/amd/picasso/uart.c index 84d6982968..6439efb251 100644 --- a/src/soc/amd/picasso/uart.c +++ b/src/soc/amd/picasso/uart.c @@ -38,6 +38,11 @@ uintptr_t uart_platform_base(int idx) return uart_info[idx].base; } +void clear_uart_legacy_config(void) +{ + write16((void *)FCH_UART_LEGACY_DECODE, 0); +} + void set_uart_config(int idx) { uint32_t uart_ctrl; |