spi: bcm63xx_hsspi: Continue init when using no reset and fixed-clock.
authorKursad Oney <kursad.oney@broadcom.com>
Wed, 14 Aug 2019 13:18:35 +0000 (15:18 +0200)
committerTom Rini <trini@konsulko.com>
Fri, 11 Oct 2019 14:09:16 +0000 (10:09 -0400)
The Broadcom ARM implementations do not yet have a clock framework so
one can use a fixed clock as the root clock of the hsspi block. The
fixed clock does not have an "enable" routine, since it's always
enabled. So when we hit this issue, getting an ENOSYS return, do not
bail but continue initialization.

Similarly the block might already have been out of reset, say, when
we are booting from a SPI device. So if the reset signal is not configured
in the device tree, do not bail out and instead skip deasserting the reset.

Signed-off-by: Kursad Oney <kursad.oney@broadcom.com>
Reviewed-by: Philippe Reynes <philippe.reynes@softathome.com>
drivers/spi/bcm63xx_hsspi.c

index 730653118c131985adb0021e4961880bf61814a2..e82b80c107c1aec7cb98bb265c5fb693503675d1 100644 (file)
@@ -349,32 +349,31 @@ static int bcm63xx_hsspi_probe(struct udevice *dev)
                return ret;
 
        ret = clk_enable(&clk);
-       if (ret < 0)
+       if (ret < 0 && ret != -ENOSYS)
                return ret;
 
        ret = clk_free(&clk);
-       if (ret < 0)
+       if (ret < 0 && ret != -ENOSYS)
                return ret;
 
        /* get clock rate */
        ret = clk_get_by_name(dev, "pll", &clk);
-       if (ret < 0)
+       if (ret < 0 && ret != -ENOSYS)
                return ret;
 
        priv->clk_rate = clk_get_rate(&clk);
 
        ret = clk_free(&clk);
-       if (ret < 0)
+       if (ret < 0 && ret != -ENOSYS)
                return ret;
 
        /* perform reset */
        ret = reset_get_by_index(dev, 0, &rst_ctl);
-       if (ret < 0)
-               return ret;
-
-       ret = reset_deassert(&rst_ctl);
-       if (ret < 0)
-               return ret;
+       if (ret >= 0) {
+               ret = reset_deassert(&rst_ctl);
+               if (ret < 0)
+                       return ret;
+       }
 
        ret = reset_free(&rst_ctl);
        if (ret < 0)