[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] [IA64] Fix serial console on Tiger2 & Tiger4
# HG changeset patch # User awilliam@xxxxxxxxxxxx # Date 1171473277 25200 # Node ID 6c63ff5488888b836ebc9f04c26757716006db40 # Parent 8bdbe88e422f85f14e1451e6cfc7e8aa2da6a1c8 [IA64] Fix serial console on Tiger2 & Tiger4 I inadvertently broke the serial console on Intel Tiger systems by assuming they were registering a com1 at 0x3f8. Instead, unconditionally register both com ports (the ns16550 driver will throw away any that don't have baud == 0) and create a function to detect the Tiger systems. This should setup reasonable default com port values, but they can still be superceded using com1= and com2= boot time parameters. Signed-off-by: Alex Williamson <alex.williamson@xxxxxx> --- xen/arch/ia64/linux-xen/setup.c | 72 ++++++++++++++++++++++++++++++++++++++++ xen/arch/ia64/xen/pcdp.c | 2 - xen/arch/ia64/xen/xensetup.c | 9 ----- 3 files changed, 74 insertions(+), 9 deletions(-) diff -r 8bdbe88e422f -r 6c63ff548888 xen/arch/ia64/linux-xen/setup.c --- a/xen/arch/ia64/linux-xen/setup.c Mon Feb 12 10:10:37 2007 -0700 +++ b/xen/arch/ia64/linux-xen/setup.c Wed Feb 14 10:14:37 2007 -0700 @@ -314,6 +314,74 @@ io_port_init (void) num_io_spaces = 1; } +#ifdef XEN +static int __init +intel_tiger_console_setup(void) +{ + extern struct ns16550_defaults ns16550_com1, ns16550_com2; + efi_system_table_t *systab; + efi_config_table_t *tables; + struct acpi20_table_rsdp *rsdp = NULL; + struct acpi_table_xsdt *xsdt; + struct acpi_table_header *hdr; + int i; + + /* Don't duplicate setup if an HCDP table is present */ + if (efi.hcdp) + return -ENODEV; + + /* Manually walk firmware provided tables to get to the XSDT. */ + systab = __va(ia64_boot_param->efi_systab); + + if (!systab || systab->hdr.signature != EFI_SYSTEM_TABLE_SIGNATURE) + return -ENODEV; + + tables = __va(systab->tables); + + for (i = 0 ; i < (int)systab->nr_tables && !rsdp ; i++) { + if (efi_guidcmp(tables[i].guid, ACPI_20_TABLE_GUID) == 0) + rsdp = + (struct acpi20_table_rsdp *)__va(tables[i].table); + } + + if (!rsdp || strncmp(rsdp->signature, RSDP_SIG, sizeof(RSDP_SIG) - 1)) + return -ENODEV; + + xsdt = (struct acpi_table_xsdt *)__va(rsdp->xsdt_address); + hdr = &xsdt->header; + + if (strncmp(hdr->signature, XSDT_SIG, sizeof(XSDT_SIG) - 1)) + return -ENODEV; + + /* Only looking for Intel systems */ + if (strncmp(hdr->oem_id, "INTEL", 5)) + return -ENODEV; + + if (!strncmp(hdr->oem_table_id, "SR870BH2", 8)) { + /* Tiger 2 */ + ns16550_com1.baud = BAUD_AUTO; + ns16550_com1.io_base = 0x3f8; + ns16550_com1.irq = 4; + + ns16550_com2.baud = BAUD_AUTO; + ns16550_com2.io_base = 0x2f8; + ns16550_com2.irq = 3; + + return 0; + + } else if (!strncmp(hdr->oem_table_id, "SR870BN4", 8)) { + /* Tiger 4 */ + ns16550_com1.baud = BAUD_AUTO; + ns16550_com1.io_base = 0x2f8; + ns16550_com1.irq = 3; + + return 0; + } + + return -ENODEV; +} +#endif + /** * early_console_setup - setup debugging console * @@ -344,6 +412,10 @@ early_console_setup (char *cmdline) earlycons++; #endif +#ifdef XEN + if (!intel_tiger_console_setup()) + earlycons++; +#endif return (earlycons) ? 0 : -1; } diff -r 8bdbe88e422f -r 6c63ff548888 xen/arch/ia64/xen/pcdp.c --- a/xen/arch/ia64/xen/pcdp.c Mon Feb 12 10:10:37 2007 -0700 +++ b/xen/arch/ia64/xen/pcdp.c Wed Feb 14 10:14:37 2007 -0700 @@ -140,7 +140,7 @@ setup_serial_console(struct pcdp *pcdp, setup_serial_console(struct pcdp *pcdp, struct pcdp_uart *uart) { - ns16550_com1.baud = uart->baud; + ns16550_com1.baud = uart->baud ? uart->baud : BAUD_AUTO; ns16550_com1.io_base = uart->addr.address; if (uart->bits) ns16550_com1.data_bits = uart->bits; diff -r 8bdbe88e422f -r 6c63ff548888 xen/arch/ia64/xen/xensetup.c --- a/xen/arch/ia64/xen/xensetup.c Mon Feb 12 10:10:37 2007 -0700 +++ b/xen/arch/ia64/xen/xensetup.c Wed Feb 14 10:14:37 2007 -0700 @@ -147,7 +147,6 @@ void early_cmdline_parse(char **cmdline_ } struct ns16550_defaults ns16550_com1 = { - .baud = BAUD_AUTO, .data_bits = 8, .parity = 'n', .stop_bits = 1 @@ -158,7 +157,6 @@ unsigned int ns16550_com1_trigger; unsigned int ns16550_com1_trigger; struct ns16550_defaults ns16550_com2 = { - .baud = BAUD_AUTO, .data_bits = 8, .parity = 'n', .stop_bits = 1 @@ -271,12 +269,7 @@ void start_kernel(void) hpsim_serial_init(); else { ns16550_init(0, &ns16550_com1); - if (ns16550_com1.io_base == 0x3f8) { - /* Also init com2 for Tiger4. */ - ns16550_com2.io_base = 0x2f8; - ns16550_com2.irq = 3; - ns16550_init(1, &ns16550_com2); - } + ns16550_init(1, &ns16550_com2); } serial_init_preirq(); _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |