Skip to content

Commit 4d163ad

Browse files
mhennerichbroonie
authored andcommitted
spi: cadence: cache reference clock rate during probe
The issue is that using SPI from a callback under the CCF lock will deadlock, since this code uses clk_get_rate(). Fixes: c474b38 ("spi: Add driver for Cadence SPI controller") Signed-off-by: Michael Hennerich <michael.hennerich@analog.com> Signed-off-by: Alexandru Ardelean <alexandru.ardelean@analog.com> Link: https://lore.kernel.org/r/20210114154217.51996-1-alexandru.ardelean@analog.com Signed-off-by: Mark Brown <broonie@kernel.org>
1 parent 7a2da5d commit 4d163ad

1 file changed

Lines changed: 4 additions & 2 deletions

File tree

drivers/spi/spi-cadence.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ struct cdns_spi {
115115
void __iomem *regs;
116116
struct clk *ref_clk;
117117
struct clk *pclk;
118+
unsigned int clk_rate;
118119
u32 speed_hz;
119120
const u8 *txbuf;
120121
u8 *rxbuf;
@@ -250,7 +251,7 @@ static void cdns_spi_config_clock_freq(struct spi_device *spi,
250251
u32 ctrl_reg, baud_rate_val;
251252
unsigned long frequency;
252253

253-
frequency = clk_get_rate(xspi->ref_clk);
254+
frequency = xspi->clk_rate;
254255

255256
ctrl_reg = cdns_spi_read(xspi, CDNS_SPI_CR);
256257

@@ -558,8 +559,9 @@ static int cdns_spi_probe(struct platform_device *pdev)
558559
master->auto_runtime_pm = true;
559560
master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH;
560561

562+
xspi->clk_rate = clk_get_rate(xspi->ref_clk);
561563
/* Set to default valid value */
562-
master->max_speed_hz = clk_get_rate(xspi->ref_clk) / 4;
564+
master->max_speed_hz = xspi->clk_rate / 4;
563565
xspi->speed_hz = master->max_speed_hz;
564566

565567
master->bits_per_word_mask = SPI_BPW_MASK(8);

0 commit comments

Comments
 (0)