pl011: early_panic if baud rate not set in hardware
authorIan Campbell <ian.campbell@citrix.com>
Thu, 22 Aug 2013 16:01:59 +0000 (17:01 +0100)
committerIan Campbell <ian.campbell@citrix.com>
Tue, 27 Aug 2013 13:35:44 +0000 (14:35 +0100)
Now that the driver defaults to BAUD_AUTO this can happen if the early uart !=
console or if early printk isn't in use.

The following division by zero causes a trap but that uses regular printk and
not early_printk, so it is never seen.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Acked-by: Julien Grall <julien.grall@linaro.org>
xen/drivers/char/pl011.c

index e4bd702f3fefb0fd2cb8a3913d1ddeaf49a219ca..3ea0d41f8c822f2f9a4e267e3e10c9df57fd7679 100644 (file)
@@ -104,6 +104,8 @@ static void __init pl011_init_preirq(struct serial_port *port)
     {
         /* Baud rate already set: read it out from the divisor latch. */
         divisor = (pl011_read(uart, IBRD) << 6) | (pl011_read(uart, FBRD));
+        if (!divisor)
+            early_panic("pl011: No Baud rate configured\n");
         uart->baud = (uart->clock_hz << 2) / divisor;
     }
     /* This write must follow FBRD and IBRD writes. */