aboutsummaryrefslogtreecommitdiff
path: root/drivers/spi
diff options
context:
space:
mode:
authorKursad Oney <kursad.oney@broadcom.com>2019-08-14 15:18:35 +0200
committerTom Rini <trini@konsulko.com>2019-10-11 10:09:16 -0400
commitb47f4891e5dded550f1eaee7daaac55b8c0bd76e (patch)
treed8987a4bdc38cb8693b9a923b1fac4c2e139a58a /drivers/spi
parent3ae64e8f256c864c546913730f82e2ffbcadc06e (diff)
downloadu-boot-b47f4891e5dded550f1eaee7daaac55b8c0bd76e.zip
u-boot-b47f4891e5dded550f1eaee7daaac55b8c0bd76e.tar.gz
u-boot-b47f4891e5dded550f1eaee7daaac55b8c0bd76e.tar.bz2
spi: bcm63xx_hsspi: Continue init when using no reset and fixed-clock.
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>
Diffstat (limited to 'drivers/spi')
-rw-r--r--drivers/spi/bcm63xx_hsspi.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/drivers/spi/bcm63xx_hsspi.c b/drivers/spi/bcm63xx_hsspi.c
index 7306531..e82b80c 100644
--- a/drivers/spi/bcm63xx_hsspi.c
+++ b/drivers/spi/bcm63xx_hsspi.c
@@ -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)