spi/bcm63xx-hspi: Enable the clock before calling clk_get_rate().
Enable the clock prior to calling clk_get_rate(), because clk_get_rate()
should only be called if the clock is enabled.
Additionally, prepare/enable the pll_clk before calling clk_get_rate()
for the same reason.
Found by Linux Driver Verification project (linuxtesting.org).
Fixes: 142168eba9 ("spi: bcm63xx-hsspi: add bcm63xx HSSPI driver")
Signed-off-by: Stefan Potyra <Stefan.Potyra@elektrobit.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
			
			
This commit is contained in:
		
							parent
							
								
									b6a4b39152
								
							
						
					
					
						commit
						0d7412ed1f
					
				| @ -352,21 +352,30 @@ 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); | ||||
| 
 | ||||
| 		rate = clk_get_rate(pll_clk); | ||||
| 		if (!rate) | ||||
| 			return -EINVAL; | ||||
| 		if (IS_ERR(pll_clk)) { | ||||
| 			ret = PTR_ERR(pll_clk); | ||||
| 			goto out_disable_clk; | ||||
| 		} | ||||
| 
 | ||||
| 	ret = clk_prepare_enable(clk); | ||||
| 		ret = clk_prepare_enable(pll_clk); | ||||
| 		if (ret) | ||||
| 		return ret; | ||||
| 			goto out_disable_clk; | ||||
| 
 | ||||
| 		rate = clk_get_rate(pll_clk); | ||||
| 		clk_disable_unprepare(pll_clk); | ||||
| 		if (!rate) { | ||||
| 			ret = -EINVAL; | ||||
| 			goto out_disable_clk; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	master = spi_alloc_master(&pdev->dev, sizeof(*bs)); | ||||
| 	if (!master) { | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user