summaryrefslogtreecommitdiff
path: root/src/lib/coreboot_table.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/coreboot_table.c')
-rw-r--r--src/lib/coreboot_table.c29
1 files changed, 16 insertions, 13 deletions
diff --git a/src/lib/coreboot_table.c b/src/lib/coreboot_table.c
index 4df703958f..6c09cb13c4 100644
--- a/src/lib/coreboot_table.c
+++ b/src/lib/coreboot_table.c
@@ -96,19 +96,22 @@ static struct lb_memory *lb_memory(struct lb_header *header)
return mem;
}
-void lb_add_serial(struct lb_serial *new_serial, void *data)
+static void lb_add_serial(struct lb_header *header)
{
- struct lb_header *header = (struct lb_header *)data;
- struct lb_serial *serial;
-
- serial = (struct lb_serial *)lb_new_record(header);
- serial->tag = LB_TAG_SERIAL;
- serial->size = sizeof(*serial);
- serial->type = new_serial->type;
- serial->baseaddr = new_serial->baseaddr;
- serial->baud = new_serial->baud;
- serial->regwidth = new_serial->regwidth;
- serial->input_hertz = new_serial->input_hertz;
+ struct lb_serial new_serial = { .tag = LB_TAG_SERIAL,
+ .size = sizeof(struct lb_serial),
+ };
+ if (fill_lb_serial(&new_serial) != CB_SUCCESS)
+ return;
+
+ struct lb_serial *serial = (struct lb_serial *)lb_new_record(header);
+ memcpy(serial, &new_serial, sizeof(*serial));
+ assert(serial->type == LB_SERIAL_TYPE_IO_MAPPED
+ || serial->type == LB_SERIAL_TYPE_MEMORY_MAPPED)
+ if (serial->type == LB_SERIAL_TYPE_IO_MAPPED)
+ lb_add_console(LB_TAG_CONSOLE_SERIAL8250, header);
+ else
+ lb_add_console(LB_TAG_CONSOLE_SERIAL8250MEM, header);
}
void lb_add_console(uint16_t consoletype, void *data)
@@ -492,7 +495,7 @@ static uintptr_t write_coreboot_table(uintptr_t rom_table_end)
/* Record the serial ports and consoles */
if (CONFIG(CONSOLE_SERIAL))
- uart_fill_lb(head);
+ lb_add_serial(head);
if (CONFIG(CONSOLE_USB))
lb_add_console(LB_TAG_CONSOLE_EHCI, head);