serial: 8250: bcm2835aux - defer if clock is zero
authorPhil Elwell <phil@raspberrypi.com>
Thu, 2 Jul 2020 12:53:20 +0000 (13:53 +0100)
committerDom Cobley <popcornmix@gmail.com>
Mon, 21 Mar 2022 16:04:04 +0000 (16:04 +0000)
See: https://github.com/raspberrypi/linux/issues/3700

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

index fd95860..fc36e59 100644 (file)
@@ -148,6 +148,13 @@ static int bcm2835aux_serial_probe(struct platform_device *pdev)
         */
        up.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 (!up.port.uartclk)
+           return -EPROBE_DEFER;
+
        /* register the port */
        ret = serial8250_register_8250_port(&up);
        if (ret < 0) {