serial: 8250: bcm2835aux - defer if clock is zero
authorPhil Elwell <phil@raspberrypi.com>
Thu, 2 Jul 2020 12:53:20 +0000 (13:53 +0100)
committerPhil Elwell <phil@raspberrypi.com>
Thu, 2 Jul 2020 13:01:19 +0000 (14:01 +0100)
See: https://github.com/raspberrypi/linux/issues/3700

Signed-off-by: Phil Elwell <phil@raspberrypi.com>
drivers/tty/serial/8250/8250_bcm2835aux.c

index 33da683..8102ad9 100644 (file)
@@ -92,6 +92,13 @@ static int bcm2835aux_serial_probe(struct platform_device *pdev)
         */
        data->uart.port.uartclk = clk_get_rate(data->clk) * 2;
 
+       /* The clock is only queried at probe time, which means we get one shot
+        * at this. A zero clock is never going to work and is almost certainly
+        * due to a parent not being ready, so prefer to defer.
+        */
+       if (!data->uart.port.uartclk)
+           return -EPROBE_DEFER;
+
        /* register the port */
        ret = serial8250_register_8250_port(&data->uart);
        if (ret < 0) {