Extend coreboot table entry for serial ports
Add information about memory mapped/io mapped base addresses. and fix up libpayload to use the same structures Signed-off-by: Stefan Reinauer <reinauer@google.com> Change-Id: I5f7b5eda6063261b9acb7a46310172d4a5471dfb Reviewed-on: http://review.coreboot.org/261 Tested-by: build bot (Jenkins) Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
This commit is contained in:
committed by
Stefan Reinauer
parent
b6010b8e70
commit
d1bc331855
@ -77,7 +77,9 @@ static void cb_parse_memory(unsigned char *ptr, struct sysinfo_t *info)
|
|||||||
static void cb_parse_serial(unsigned char *ptr, struct sysinfo_t *info)
|
static void cb_parse_serial(unsigned char *ptr, struct sysinfo_t *info)
|
||||||
{
|
{
|
||||||
struct cb_serial *ser = (struct cb_serial *)ptr;
|
struct cb_serial *ser = (struct cb_serial *)ptr;
|
||||||
info->ser_ioport = ser->ioport;
|
if (ser->type != CB_SERIAL_TYPE_IO_MAPPED)
|
||||||
|
return;
|
||||||
|
info->ser_ioport = ser->baseaddr;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_NVRAM
|
#ifdef CONFIG_NVRAM
|
||||||
|
@ -77,7 +77,9 @@ static void cb_parse_memory(unsigned char *ptr, struct sysinfo_t *info)
|
|||||||
static void cb_parse_serial(unsigned char *ptr, struct sysinfo_t *info)
|
static void cb_parse_serial(unsigned char *ptr, struct sysinfo_t *info)
|
||||||
{
|
{
|
||||||
struct cb_serial *ser = (struct cb_serial *)ptr;
|
struct cb_serial *ser = (struct cb_serial *)ptr;
|
||||||
info->ser_ioport = ser->ioport;
|
if (ser->type != CB_SERIAL_TYPE_IO_MAPPED)
|
||||||
|
return;
|
||||||
|
info->ser_ioport = ser->baseaddr;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_NVRAM
|
#ifdef CONFIG_NVRAM
|
||||||
|
@ -60,9 +60,13 @@ struct cb_memory_range {
|
|||||||
u32 type;
|
u32 type;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define CB_MEM_RAM 1
|
#define CB_MEM_RAM 1
|
||||||
#define CB_MEM_RESERVED 2
|
#define CB_MEM_RESERVED 2
|
||||||
#define CB_MEM_TABLE 16
|
#define CB_MEM_ACPI 3
|
||||||
|
#define CB_MEM_NVS 4
|
||||||
|
#define CB_MEM_UNUSABLE 5
|
||||||
|
#define CB_MEM_VENDOR_RSVD 6
|
||||||
|
#define CB_MEM_TABLE 16
|
||||||
|
|
||||||
struct cb_memory {
|
struct cb_memory {
|
||||||
u32 tag;
|
u32 tag;
|
||||||
@ -110,7 +114,11 @@ struct cb_string {
|
|||||||
struct cb_serial {
|
struct cb_serial {
|
||||||
u32 tag;
|
u32 tag;
|
||||||
u32 size;
|
u32 size;
|
||||||
u16 ioport;
|
#define CB_SERIAL_TYPE_IO_MAPPED 1
|
||||||
|
#define CB_SERIAL_TYPE_MEMORY_MAPPED 2
|
||||||
|
u32 type;
|
||||||
|
u32 baseaddr;
|
||||||
|
u32 baud;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define CB_TAG_CONSOLE 0x00010
|
#define CB_TAG_CONSOLE 0x00010
|
||||||
|
@ -112,7 +112,19 @@ static struct lb_serial *lb_serial(struct lb_header *header)
|
|||||||
serial = (struct lb_serial *)rec;
|
serial = (struct lb_serial *)rec;
|
||||||
serial->tag = LB_TAG_SERIAL;
|
serial->tag = LB_TAG_SERIAL;
|
||||||
serial->size = sizeof(*serial);
|
serial->size = sizeof(*serial);
|
||||||
serial->ioport = CONFIG_TTYS0_BASE;
|
serial->type = LB_SERIAL_TYPE_IO_MAPPED;
|
||||||
|
serial->baseaddr = CONFIG_TTYS0_BASE;
|
||||||
|
serial->baud = CONFIG_TTYS0_BAUD;
|
||||||
|
return serial;
|
||||||
|
#elif CONFIG_CONSOLE_SERIAL8250MEM
|
||||||
|
struct lb_record *rec;
|
||||||
|
struct lb_serial *serial;
|
||||||
|
rec = lb_new_record(header);
|
||||||
|
serial = (struct lb_serial *)rec;
|
||||||
|
serial->tag = LB_TAG_SERIAL;
|
||||||
|
serial->size = sizeof(*serial);
|
||||||
|
serial->type = LB_SERIAL_TYPE_MEMORY_MAPPED;
|
||||||
|
serial->baseaddr = uartmem_getbaseaddr();
|
||||||
serial->baud = CONFIG_TTYS0_BAUD;
|
serial->baud = CONFIG_TTYS0_BAUD;
|
||||||
return serial;
|
return serial;
|
||||||
#else
|
#else
|
||||||
@ -131,7 +143,6 @@ static void add_console(struct lb_header *header, u16 consoletype)
|
|||||||
console->size = sizeof(*console);
|
console->size = sizeof(*console);
|
||||||
console->type = consoletype;
|
console->type = consoletype;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void lb_console(struct lb_header *header)
|
static void lb_console(struct lb_header *header)
|
||||||
|
@ -28,6 +28,11 @@ static void uartmem_init(void)
|
|||||||
uart_bar = uart_mem_init();
|
uart_bar = uart_mem_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
u32 uartmem_getbaseaddr(void)
|
||||||
|
{
|
||||||
|
return uart_bar;
|
||||||
|
}
|
||||||
|
|
||||||
static void uartmem_tx_byte(unsigned char data)
|
static void uartmem_tx_byte(unsigned char data)
|
||||||
{
|
{
|
||||||
if (!uart_bar)
|
if (!uart_bar)
|
||||||
|
@ -146,7 +146,10 @@ struct lb_string {
|
|||||||
struct lb_serial {
|
struct lb_serial {
|
||||||
uint32_t tag;
|
uint32_t tag;
|
||||||
uint32_t size;
|
uint32_t size;
|
||||||
uint16_t ioport;
|
#define LB_SERIAL_TYPE_IO_MAPPED 1
|
||||||
|
#define LB_SERIAL_TYPE_MEMORY_MAPPED 2
|
||||||
|
uint32_t type;
|
||||||
|
uint32_t baseaddr;
|
||||||
uint32_t baud;
|
uint32_t baud;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -146,6 +146,7 @@ void uart8250_mem_tx_byte(unsigned base_port, unsigned char data);
|
|||||||
void uart8250_mem_tx_flush(unsigned base_port);
|
void uart8250_mem_tx_flush(unsigned base_port);
|
||||||
void uart8250_mem_init(unsigned base_port, unsigned divisor);
|
void uart8250_mem_init(unsigned base_port, unsigned divisor);
|
||||||
u32 uart_mem_init(void);
|
u32 uart_mem_init(void);
|
||||||
|
u32 uartmem_getbaseaddr(void);
|
||||||
|
|
||||||
/* and special init for OXPCIe based cards */
|
/* and special init for OXPCIe based cards */
|
||||||
void oxford_init(void);
|
void oxford_init(void);
|
||||||
|
Reference in New Issue
Block a user