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:
parent
54c800a50c
commit
5ab20054d3
|
@ -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)
|
||||
{
|
||||
struct cb_serial *ser = ptr;
|
||||
if (ser->type != CB_SERIAL_TYPE_IO_MAPPED)
|
||||
return;
|
||||
info->ser_ioport = ser->baseaddr;
|
||||
info->serial = ((struct cb_serial *)ptr);
|
||||
}
|
||||
|
||||
static void cb_parse_version(void *ptr, struct sysinfo_t *info)
|
||||
|
|
|
@ -31,8 +31,8 @@
|
|||
#include <libpayload-config.h>
|
||||
#include <libpayload.h>
|
||||
|
||||
#define IOBASE lib_sysinfo.ser_ioport
|
||||
#define MEMBASE (phys_to_virt(lib_sysinfo.ser_base))
|
||||
#define IOBASE lib_sysinfo.serial->baseaddr
|
||||
#define MEMBASE (phys_to_virt(lib_sysinfo.serial->baseaddr))
|
||||
#define DIVISOR(x) (115200 / x)
|
||||
|
||||
#ifdef CONFIG_SERIAL_SET_SPEED
|
||||
|
@ -96,15 +96,11 @@ static struct console_output_driver consout = {
|
|||
|
||||
void serial_init(void)
|
||||
{
|
||||
pcidev_t oxpcie_dev;
|
||||
if (pci_find_device(0x1415, 0xc158, &oxpcie_dev)) {
|
||||
lib_sysinfo.ser_base = pci_read_resource(oxpcie_dev, 0) + 0x1000;
|
||||
} else {
|
||||
lib_sysinfo.ser_base = 0;
|
||||
}
|
||||
if (!lib_sysinfo.serial)
|
||||
return;
|
||||
|
||||
#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);
|
||||
else
|
||||
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)
|
||||
{
|
||||
if (lib_sysinfo.ser_base)
|
||||
if (!lib_sysinfo.serial)
|
||||
return;
|
||||
|
||||
if (lib_sysinfo.serial->type == CB_SERIAL_TYPE_MEMORY_MAPPED)
|
||||
serial_mem_putchar(c);
|
||||
else
|
||||
serial_io_putchar(c);
|
||||
|
@ -160,6 +159,9 @@ void serial_putchar(unsigned int c)
|
|||
|
||||
int serial_havechar(void)
|
||||
{
|
||||
if (!lib_sysinfo.serial)
|
||||
return 0;
|
||||
|
||||
if (lib_sysinfo.ser_base)
|
||||
return serial_mem_havechar();
|
||||
else
|
||||
|
@ -168,6 +170,9 @@ int serial_havechar(void)
|
|||
|
||||
int serial_getchar(void)
|
||||
{
|
||||
if (!lib_sysinfo.serial)
|
||||
return -1;
|
||||
|
||||
if (lib_sysinfo.ser_base)
|
||||
return serial_mem_getchar();
|
||||
else
|
||||
|
|
|
@ -33,8 +33,11 @@
|
|||
/* Allow a maximum of 16 memory range definitions. */
|
||||
#define SYSINFO_MAX_MEM_RANGES 16
|
||||
|
||||
struct cb_serial;
|
||||
|
||||
struct sysinfo_t {
|
||||
unsigned int cpu_khz;
|
||||
struct cb_serial *serial;
|
||||
unsigned short ser_ioport;
|
||||
unsigned long ser_base; // for mmapped serial
|
||||
|
||||
|
|
Loading…
Reference in New Issue