summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Frodin <dave.frodin@se-eng.com>2013-05-14 08:43:25 -0600
committerRonald G. Minnich <rminnich@gmail.com>2013-05-15 16:56:33 +0200
commitadc300d88b35ceafafb4d4b6426c6458dc46b685 (patch)
treed42461751521fc0dd1fc8a052942df94067c496f
parent4bd7b0cbadabb45f9131da03121a6ca284f24f35 (diff)
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 <dave.frodin@se-eng.com> Reviewed-on: http://review.coreboot.org/3249 Tested-by: build bot (Jenkins) Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
-rw-r--r--payloads/libpayload/drivers/serial.c12
1 files 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);
}