Message ID | 20180425134728.GA20897@er01809n.ebgroup.elektrobit.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Wed, Apr 25, 2018 at 03:47:30PM +0200, Stefan Potyra wrote: > + ret = clk_prepare_enable(clk); > + if (ret) > + return ret; > + > rate = clk_get_rate(clk); > if (!rate) { > struct clk *pll_clk = devm_clk_get(dev, "pll"); > > - if (IS_ERR(pll_clk)) > - return PTR_ERR(pll_clk); > + if (IS_ERR(pll_clk)) { > + ret = PTR_ERR(pll_clk); > + goto out_disable_clk; > + } > + > > rate = clk_get_rate(pll_clk); Isn't this just showing the same problem with not enabling the pll_clk before getting the rate that you're trying to fix for the main clk?
diff --git a/drivers/spi/spi-bcm63xx-hsspi.c b/drivers/spi/spi-bcm63xx-hsspi.c index cbcba614b253..8475703543e5 100644 --- a/drivers/spi/spi-bcm63xx-hsspi.c +++ b/drivers/spi/spi-bcm63xx-hsspi.c @@ -352,22 +352,27 @@ static int bcm63xx_hsspi_probe(struct platform_device *pdev) if (IS_ERR(clk)) return PTR_ERR(clk); + ret = clk_prepare_enable(clk); + if (ret) + return ret; + rate = clk_get_rate(clk); if (!rate) { struct clk *pll_clk = devm_clk_get(dev, "pll"); - if (IS_ERR(pll_clk)) - return PTR_ERR(pll_clk); + if (IS_ERR(pll_clk)) { + ret = PTR_ERR(pll_clk); + goto out_disable_clk; + } + rate = clk_get_rate(pll_clk); - if (!rate) - return -EINVAL; + if (!rate) { + ret = -EINVAL; + goto out_disable_clk; + } } - ret = clk_prepare_enable(clk); - if (ret) - return ret; - master = spi_alloc_master(&pdev->dev, sizeof(*bs)); if (!master) { ret = -ENOMEM;
Enable the clock prior to calling clk_get_rate(), because clk_get_rate() should only be called if the clock is enabled. Found by Linux Driver Verification project (linuxtesting.org). Fixes: 142168eba9dc ("spi: bcm63xx-hsspi: add bcm63xx HSSPI driver") Signed-off-by: Stefan Potyra <Stefan.Potyra@elektrobit.com> --- drivers/spi/spi-bcm63xx-hsspi.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-)