From adc300d88b35ceafafb4d4b6426c6458dc46b685 Mon Sep 17 00:00:00 2001 From: Dave Frodin Date: Tue, 14 May 2013 08:43:25 -0600 Subject: [PATCH] libpayload: Fix the logic for hardware-less serial consoles This fixes the configuration where serial console output is being sent to non-existant hardware to be captured with I/O trapping. In this configuration where there isn't serial hardware present we still want to init the consoles. We just never want to read non-existant hardware. Change-Id: Ic51dc574b9c0df3f6ed071086b0fb2119afedc44 Signed-off-by: Dave Frodin Reviewed-on: http://review.coreboot.org/3249 Tested-by: build bot (Jenkins) Reviewed-by: Ronald G. Minnich --- payloads/libpayload/drivers/serial.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/payloads/libpayload/drivers/serial.c b/payloads/libpayload/drivers/serial.c index df0f2e3438..a4cd6d013a 100644 --- a/payloads/libpayload/drivers/serial.c +++ b/payloads/libpayload/drivers/serial.c @@ -34,7 +34,7 @@ #define IOBASE lib_sysinfo.serial->baseaddr #define MEMBASE (phys_to_virt(IOBASE)) -static int serial_hardware_is_present = 0; +static int serial_hardware_is_present = 1; static int serial_is_mem_mapped = 0; static uint8_t serial_read_reg(int offset) @@ -105,7 +105,7 @@ void serial_init(void) #ifdef CONFIG_IO_ADDRESS_SPACE if ((inb(IOBASE + 0x05) == 0xFF) && (inb(IOBASE + 0x06) == 0xFF)) { - return; + serial_hardware_is_present = 0; } #else printf("IO space mapped serial not supported."); @@ -113,9 +113,6 @@ void serial_init(void) #endif } - - serial_hardware_is_present = 1; - #ifdef CONFIG_SERIAL_SET_SPEED serial_hardware_init(CONFIG_SERIAL_BAUD_RATE, 8, 0, 1); #endif @@ -125,9 +122,8 @@ void serial_init(void) void serial_putchar(unsigned int c) { - if (!serial_hardware_is_present) - return; - while ((serial_read_reg(0x05) & 0x20) == 0) ; + if (serial_hardware_is_present) + while ((serial_read_reg(0x05) & 0x20) == 0) ; serial_write_reg(c, 0x00); }