Update the way serial info is read from the coreboot tables.

This information is now stored in a structure instead of in a few seperate
fields. libpayload hadn't been updated to reflect the new layout or to consume
the new information intelligently.

Change-Id: Ice3486ffcdcdbe1f16f9c84515120c591d8dc882
Signed-off-by: Gabe Black <gabeblack@google.com>
Reviewed-on: http://review.coreboot.org/1724
Reviewed-by: Patrick Georgi <patrick@georgi-clan.de>
Tested-by: build bot (Jenkins)
This commit is contained in:
Gabe Black 2012-08-28 16:38:34 -07:00 committed by Stefan Reinauer
parent 54c800a50c
commit 5ab20054d3
3 changed files with 19 additions and 14 deletions

View File

@ -75,10 +75,7 @@ static void cb_parse_memory(void *ptr, struct sysinfo_t *info)
static void cb_parse_serial(void *ptr, struct sysinfo_t *info) static void cb_parse_serial(void *ptr, struct sysinfo_t *info)
{ {
struct cb_serial *ser = ptr; info->serial = ((struct cb_serial *)ptr);
if (ser->type != CB_SERIAL_TYPE_IO_MAPPED)
return;
info->ser_ioport = ser->baseaddr;
} }
static void cb_parse_version(void *ptr, struct sysinfo_t *info) static void cb_parse_version(void *ptr, struct sysinfo_t *info)

View File

@ -31,8 +31,8 @@
#include <libpayload-config.h> #include <libpayload-config.h>
#include <libpayload.h> #include <libpayload.h>
#define IOBASE lib_sysinfo.ser_ioport #define IOBASE lib_sysinfo.serial->baseaddr
#define MEMBASE (phys_to_virt(lib_sysinfo.ser_base)) #define MEMBASE (phys_to_virt(lib_sysinfo.serial->baseaddr))
#define DIVISOR(x) (115200 / x) #define DIVISOR(x) (115200 / x)
#ifdef CONFIG_SERIAL_SET_SPEED #ifdef CONFIG_SERIAL_SET_SPEED
@ -96,15 +96,11 @@ static struct console_output_driver consout = {
void serial_init(void) void serial_init(void)
{ {
pcidev_t oxpcie_dev; if (!lib_sysinfo.serial)
if (pci_find_device(0x1415, 0xc158, &oxpcie_dev)) { return;
lib_sysinfo.ser_base = pci_read_resource(oxpcie_dev, 0) + 0x1000;
} else {
lib_sysinfo.ser_base = 0;
}
#ifdef CONFIG_SERIAL_SET_SPEED #ifdef CONFIG_SERIAL_SET_SPEED
if (lib_sysinfo.ser_base) if (lib_sysinfo.serial->type == CB_SERIAL_TYPE_MEMORY_MAPPED)
serial_mem_hardware_init(IOBASE, CONFIG_SERIAL_BAUD_RATE, 8, 0, 1); serial_mem_hardware_init(IOBASE, CONFIG_SERIAL_BAUD_RATE, 8, 0, 1);
else else
serial_io_hardware_init(IOBASE, CONFIG_SERIAL_BAUD_RATE, 8, 0, 1); serial_io_hardware_init(IOBASE, CONFIG_SERIAL_BAUD_RATE, 8, 0, 1);
@ -152,7 +148,10 @@ static int serial_mem_getchar(void)
void serial_putchar(unsigned int c) void serial_putchar(unsigned int c)
{ {
if (lib_sysinfo.ser_base) if (!lib_sysinfo.serial)
return;
if (lib_sysinfo.serial->type == CB_SERIAL_TYPE_MEMORY_MAPPED)
serial_mem_putchar(c); serial_mem_putchar(c);
else else
serial_io_putchar(c); serial_io_putchar(c);
@ -160,6 +159,9 @@ void serial_putchar(unsigned int c)
int serial_havechar(void) int serial_havechar(void)
{ {
if (!lib_sysinfo.serial)
return 0;
if (lib_sysinfo.ser_base) if (lib_sysinfo.ser_base)
return serial_mem_havechar(); return serial_mem_havechar();
else else
@ -168,6 +170,9 @@ int serial_havechar(void)
int serial_getchar(void) int serial_getchar(void)
{ {
if (!lib_sysinfo.serial)
return -1;
if (lib_sysinfo.ser_base) if (lib_sysinfo.ser_base)
return serial_mem_getchar(); return serial_mem_getchar();
else else

View File

@ -33,8 +33,11 @@
/* Allow a maximum of 16 memory range definitions. */ /* Allow a maximum of 16 memory range definitions. */
#define SYSINFO_MAX_MEM_RANGES 16 #define SYSINFO_MAX_MEM_RANGES 16
struct cb_serial;
struct sysinfo_t { struct sysinfo_t {
unsigned int cpu_khz; unsigned int cpu_khz;
struct cb_serial *serial;
unsigned short ser_ioport; unsigned short ser_ioport;
unsigned long ser_base; // for mmapped serial unsigned long ser_base; // for mmapped serial