Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / arch / mips / sgi-ip22 / ip22-setup.c
index fe7f546..7018e18 100644 (file)
 #include <asm/sgi/hpc3.h>
 #include <asm/sgi/ip22.h>
 
-#ifdef CONFIG_KGDB
-extern void rs_kgdb_hook(int);
-extern void breakpoint(void);
-static int remote_debug = 0;
-#endif
-
 unsigned long sgi_gfxaddr;
 
 /*
@@ -43,7 +37,6 @@ unsigned long sgi_gfxaddr;
  *
  * FIXME: provide a mechanism to change the value of stop_a_enabled.
  */
-int serial_console;
 int stop_a_enabled;
 
 void ip22_do_break(void)
@@ -60,12 +53,10 @@ EXPORT_SYMBOL(ip22_do_break);
 extern void ip22_be_init(void) __init;
 extern void ip22_time_init(void) __init;
 
-static int __init ip22_setup(void)
+void __init plat_setup(void)
 {
        char *ctype;
-#ifdef CONFIG_KGDB
-       char *kgdb_ttyd;
-#endif
+       char *cserial;
 
        board_be_init = ip22_be_init;
        ip22_time_init();
@@ -84,15 +75,21 @@ static int __init ip22_setup(void)
        indy_sc_init();
 #endif
 
-       /* Set EISA IO port base for Indigo2 */
-       set_io_port_base(KSEG1ADDR(0x00080000));
-
+       /* Set EISA IO port base for Indigo2
+        * ioremap cannot fail */
+       set_io_port_base((unsigned long)ioremap(0x00080000,
+                                               0x1fffffff - 0x00080000));
        /* ARCS console environment variable is set to "g?" for
         * graphics console, it is set to "d" for the first serial
         * line and "d2" for the second serial line.
+        *
+        * Need to check if the case is 'g' but no keyboard:
+        * (ConsoleIn/Out = serial)
         */
        ctype = ArcGetEnvironmentVariable("console");
-       if (ctype && *ctype == 'd') {
+       cserial = ArcGetEnvironmentVariable("ConsoleOut");
+
+       if ((ctype && *ctype == 'd') || (cserial && *cserial == 's')) {
                static char options[8];
                char *baud = ArcGetEnvironmentVariable("dbaud");
                if (baud)
@@ -100,13 +97,15 @@ static int __init ip22_setup(void)
                add_preferred_console("ttyS", *(ctype + 1) == '2' ? 1 : 0,
                                      baud ? options : NULL);
        } else if (!ctype || *ctype != 'g') {
-               /* Use ARC if we don't want serial ('d') or Newport ('g'). */
+               /* Use ARC if we don't want serial ('d') or graphics ('g'). */
                prom_flags |= PROM_FLAG_USE_AS_CONSOLE;
                add_preferred_console("arc", 0, NULL);
        }
 
 #ifdef CONFIG_KGDB
-       kgdb_ttyd = prom_getcmdline();
+       {
+       char *kgdb_ttyd = prom_getcmdline();
+
        if ((kgdb_ttyd = strstr(kgdb_ttyd, "kgdb=ttyd")) != NULL) {
                int line;
                kgdb_ttyd += strlen("kgdb=ttyd");
@@ -121,14 +120,14 @@ static int __init ip22_setup(void)
                printk(KERN_INFO "KGDB: Using serial line /dev/ttyd%d for "
                       "session, please connect your debugger\n", line ? 1:2);
 
-               remote_debug = 1;
+               kgdb_enabled = 1;
                /* Breakpoints and stuff are in sgi_irq_setup() */
        }
+       }
 #endif
 
-#ifdef CONFIG_VT
-#ifdef CONFIG_SGI_NEWPORT_CONSOLE
-       if (ctype && *ctype == 'g'){
+#if defined(CONFIG_VT) && defined(CONFIG_SGI_NEWPORT_CONSOLE)
+       {
                ULONG *gfxinfo;
                ULONG * (*__vec)(void) = (void *) (long)
                        *((_PULONG *)(long)((PROMBLOCK)->pvector + 0x20));
@@ -144,9 +143,4 @@ static int __init ip22_setup(void)
                }
        }
 #endif
-#endif
-
-       return 0;
 }
-
-early_initcall(ip22_setup);