From: Anton Blanchard Lets make a decent attempt to find out where your console is. The new preferred_console stuff is pretty nice. --- arch/ppc64/kernel/setup.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 50 insertions(+) diff -puN arch/ppc64/kernel/setup.c~ppc64-use-preferred-console arch/ppc64/kernel/setup.c --- 25/arch/ppc64/kernel/setup.c~ppc64-use-preferred-console 2004-01-22 19:09:04.000000000 -0800 +++ 25-akpm/arch/ppc64/kernel/setup.c 2004-01-22 19:09:04.000000000 -0800 @@ -430,6 +430,56 @@ void parse_cmd_line(unsigned long r3, un } } +static int __init set_preferred_console(void) +{ + struct device_node *prom_stdout; + char *name; + + /* The user has requested a console so this is already set up. */ + if (strstr(cmd_line, "console=")) + return -EBUSY; + + prom_stdout = find_path_device(of_stdout_device); + if (!prom_stdout) + return -ENODEV; + + name = (char *)get_property(prom_stdout, "name", NULL); + if (!name) + return -ENODEV; + + if (strcmp(name, "serial") == 0) { + int i; + u32 *reg = (u32 *)get_property(prom_stdout, "reg", &i); + if (i > 8) { + int offset; + switch (reg[1]) { + case 0x3f8: + offset = 0; + break; + case 0x2f8: + offset = 1; + break; + case 0x898: + offset = 2; + break; + case 0x890: + offset = 3; + break; + default: + /* We dont recognise the serial port */ + return -ENODEV; + } + + return add_preferred_console("ttyS", offset, NULL); + } + } else if (strcmp(name, "vty") == 0) { + /* pSeries LPAR virtual console */ + return add_preferred_console("hvc", 0, NULL); + } + + return -ENODEV; +} +console_initcall(set_preferred_console); #ifdef CONFIG_PPC_PSERIES int parse_bootinfo(void) _