This patch fixes some problems in selecting which console to use on the
ip22s.
- Replace unobvious ttyS with arc for the arc console device name
- If ARC var console=d*, use serial. If 'g', use Newport only. If
neither or not set, default to ARC. Old code was disabling ARC
console and using serial console if CONFIG_ARC_CONSOLE was set. (why?!)
- ArcGetEnvironmentVariable() can conceivably return NULL, so don't
blindly dereference.
Thanks,
Will
Index: arch/mips/arc/arc_con.c
===================================================================
RCS file: /cvs/linux/arch/mips/arc/arc_con.c,v
retrieving revision 1.1.4.3
diff -u -r1.1.4.3 arc_con.c
--- arch/mips/arc/arc_con.c 2002/08/05 23:53:30 1.1.4.3
+++ arch/mips/arc/arc_con.c 2002/09/17 08:57:12
@@ -39,7 +39,7 @@
}
static struct console arc_cons = {
- name: "ttyS",
+ name: "arc",
write: prom_console_write,
device: prom_console_device,
setup: prom_console_setup,
Index: arch/mips/sgi-ip22/ip22-setup.c
===================================================================
RCS file: /cvs/linux/arch/mips/sgi-ip22/ip22-setup.c,v
retrieving revision 1.1.2.13
diff -u -r1.1.2.13 ip22-setup.c
--- arch/mips/sgi-ip22/ip22-setup.c 2002/07/23 16:39:10 1.1.2.13
+++ arch/mips/sgi-ip22/ip22-setup.c 2002/09/17 08:57:12
@@ -162,19 +162,22 @@
* line and "d2" for the second serial line.
*/
ctype = ArcGetEnvironmentVariable("console");
- if (*ctype == 'd') {
+ if (ctype && *ctype == 'd') {
#ifdef CONFIG_SERIAL_CONSOLE
if(*(ctype + 1) == '2')
console_setup("ttyS1");
else
console_setup("ttyS0");
#endif
- } else {
+ }
#ifdef CONFIG_ARC_CONSOLE
- prom_flags &= PROM_FLAG_USE_AS_CONSOLE;
- console_setup("ttyS0");
-#endif
+ else if (!ctype || *ctype != 'g') {
+ /* Use ARC if we don't want serial ('d') or
+ * Newport ('g'). */
+ prom_flags |= PROM_FLAG_USE_AS_CONSOLE;
+ console_setup("arc");
}
+#endif
#ifdef CONFIG_REMOTE_DEBUG
kgdb_ttyd = prom_getcmdline();
@@ -201,7 +204,7 @@
#ifdef CONFIG_VT
#ifdef CONFIG_SGI_NEWPORT_CONSOLE
- {
+ if (ctype && *ctype == 'g'){
unsigned long *gfxinfo;
long (*__vec)(void) = (void *) *(long *)((PROMBLOCK)->pvector +
0x20);
@@ -209,29 +212,29 @@
sgi_gfxaddr = ((gfxinfo[1] >= 0xa0000000
&& gfxinfo[1] <= 0xc0000000)
? gfxinfo[1] - 0xa0000000 : 0);
+
+ /* newport addresses? */
+ if (sgi_gfxaddr == 0x1f0f0000 || sgi_gfxaddr == 0x1f4f0000) {
+ conswitchp = &newport_con;
+
+ screen_info = (struct screen_info) {
+ 0, 0, /* orig-x, orig-y */
+ 0, /* unused */
+ 0, /* orig_video_page */
+ 0, /* orig_video_mode */
+ 160, /* orig_video_cols */
+ 0, 0, 0, /* unused, ega_bx, unused */
+ 64, /* orig_video_lines */
+ 0, /* orig_video_isVGA */
+ 16 /* orig_video_points */
+ };
+ }
}
- /* newport addresses? */
- if (sgi_gfxaddr == 0x1f0f0000 || sgi_gfxaddr == 0x1f4f0000) {
- conswitchp = &newport_con;
-
- screen_info = (struct screen_info) {
- 0, 0, /* orig-x, orig-y */
- 0, /* unused */
- 0, /* orig_video_page */
- 0, /* orig_video_mode */
- 160, /* orig_video_cols */
- 0, 0, 0, /* unused, ega_bx, unused */
- 64, /* orig_video_lines */
- 0, /* orig_video_isVGA */
- 16 /* orig_video_points */
- };
- } else {
- conswitchp = &dummy_con;
- }
-#else
-#ifdef CONFIG_DUMMY_CONSOLE
- conswitchp = &dummy_con;
#endif
+#ifdef CONFIG_DUMMY_CONSOLE
+ /* Either if newport console wasn't used or failed to initialize. */
+ if(conswitchp != &newport_con)
+ conswitchp = &dummy_con;
#endif
#endif
---
|William Y. Jhun - wjhun@oswego.edu
|