Skip to content

Commit d103729

Browse files
Rafał Hibnerbroonie
authored andcommitted
spi: spi-axi-spi-engine: Access register after clock initialization
Move register access after clock initialization. Clock "s_axi_aclk" is needed for register access. Without the clock running AXI bus hangs and causes kernel freeze. Signed-off-by: Rafał Hibner <[email protected]> Reviewed-by: Alexandru Ardelean <[email protected]> Cc: Alexandru Ardelean <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Mark Brown <[email protected]>
1 parent 61249ce commit d103729

File tree

1 file changed

+16
-16
lines changed

1 file changed

+16
-16
lines changed

drivers/spi/spi-axi-spi-engine.c

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -489,22 +489,6 @@ static int spi_engine_probe(struct platform_device *pdev)
489489

490490
spin_lock_init(&spi_engine->lock);
491491

492-
spi_engine->base = devm_platform_ioremap_resource(pdev, 0);
493-
if (IS_ERR(spi_engine->base)) {
494-
ret = PTR_ERR(spi_engine->base);
495-
goto err_put_master;
496-
}
497-
498-
version = readl(spi_engine->base + SPI_ENGINE_REG_VERSION);
499-
if (SPI_ENGINE_VERSION_MAJOR(version) != 1) {
500-
dev_err(&pdev->dev, "Unsupported peripheral version %u.%u.%c\n",
501-
SPI_ENGINE_VERSION_MAJOR(version),
502-
SPI_ENGINE_VERSION_MINOR(version),
503-
SPI_ENGINE_VERSION_PATCH(version));
504-
ret = -ENODEV;
505-
goto err_put_master;
506-
}
507-
508492
spi_engine->clk = devm_clk_get(&pdev->dev, "s_axi_aclk");
509493
if (IS_ERR(spi_engine->clk)) {
510494
ret = PTR_ERR(spi_engine->clk);
@@ -525,6 +509,22 @@ static int spi_engine_probe(struct platform_device *pdev)
525509
if (ret)
526510
goto err_clk_disable;
527511

512+
spi_engine->base = devm_platform_ioremap_resource(pdev, 0);
513+
if (IS_ERR(spi_engine->base)) {
514+
ret = PTR_ERR(spi_engine->base);
515+
goto err_ref_clk_disable;
516+
}
517+
518+
version = readl(spi_engine->base + SPI_ENGINE_REG_VERSION);
519+
if (SPI_ENGINE_VERSION_MAJOR(version) != 1) {
520+
dev_err(&pdev->dev, "Unsupported peripheral version %u.%u.%c\n",
521+
SPI_ENGINE_VERSION_MAJOR(version),
522+
SPI_ENGINE_VERSION_MINOR(version),
523+
SPI_ENGINE_VERSION_PATCH(version));
524+
ret = -ENODEV;
525+
goto err_ref_clk_disable;
526+
}
527+
528528
writel_relaxed(0x00, spi_engine->base + SPI_ENGINE_REG_RESET);
529529
writel_relaxed(0xff, spi_engine->base + SPI_ENGINE_REG_INT_PENDING);
530530
writel_relaxed(0x00, spi_engine->base + SPI_ENGINE_REG_INT_ENABLE);

0 commit comments

Comments
 (0)