[POWERPC] bootwrapper: serial_console_init() fixes
Scott Wood [Mon, 20 Aug 2007 17:39:54 +0000 (03:39 +1000)]
1. Search the entire compatible list for serial devices.

The serial code previously did a simple strcmp on the compatible
node; this fails when the match string is not the first compatible
listed.  Use dt_is_compatible() instead.

2. Don't call serial_edit_cmdline if getc isn't defined.

Signed-off-by: Scott Wood <scottwood@freescale.com>
Acked-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Paul Mackerras <paulus@samba.org>

arch/powerpc/boot/serial.c

index eaa0d3a..3ce7f65 100644 (file)
@@ -114,18 +114,14 @@ int serial_console_init(void)
 {
        void *devp;
        int rc = -1;
-       char compat[MAX_PROP_LEN];
 
        devp = serial_get_stdout_devp();
        if (devp == NULL)
                goto err_out;
 
-       if (getprop(devp, "compatible", compat, sizeof(compat)) < 0)
-               goto err_out;
-
-       if (!strcmp(compat, "ns16550"))
+       if (dt_is_compatible(devp, "ns16550"))
                rc = ns16550_console_init(devp, &serial_cd);
-       else if (!strcmp(compat, "marvell,mpsc"))
+       else if (dt_is_compatible(devp, "marvell,mpsc"))
                rc = mpsc_console_init(devp, &serial_cd);
 
        /* Add other serial console driver calls here */
@@ -133,10 +129,12 @@ int serial_console_init(void)
        if (!rc) {
                console_ops.open = serial_open;
                console_ops.write = serial_write;
-               console_ops.edit_cmdline = serial_edit_cmdline;
                console_ops.close = serial_close;
                console_ops.data = &serial_cd;
 
+               if (serial_cd.getc)
+                       console_ops.edit_cmdline = serial_edit_cmdline;
+
                return 0;
        }
 err_out: