Messages in this thread | | | Subject | Re: [PATCH v1 3/7] spi: qspi-tegra: Add support for Tegra210 QSPI controller | From | Sowjanya Komatineni <> | Date | Mon, 7 Dec 2020 16:14:53 -0800 |
| |
On 12/6/20 10:16 AM, Lukas Wunner wrote: > On Tue, Dec 01, 2020 at 01:12:44PM -0800, Sowjanya Komatineni wrote: >> + ret = devm_spi_register_master(&pdev->dev, master); > [...] >> +static int tegra_qspi_remove(struct platform_device *pdev) >> +{ >> + struct spi_master *master = platform_get_drvdata(pdev); >> + struct tegra_qspi_data *tqspi = spi_master_get_devdata(master); >> + >> + free_irq(tqspi->irq, tqspi); >> + >> + tegra_qspi_deinit_dma_param(tqspi, false); >> + tegra_qspi_deinit_dma_param(tqspi, true); >> + >> + pm_runtime_disable(&pdev->dev); >> + if (!pm_runtime_status_suspended(&pdev->dev)) >> + tegra_qspi_runtime_suspend(&pdev->dev); >> + >> + return 0; >> +} > With devm_spi_register_master(), the SPI controller is unregistered > *after* tegra_qspi_remove(). SPI transactions may still be ongoing > until the SPI controller is unregistered, yet you perform teardown > steps (such as freeing the IRQ) while it is still registered. > > Bottom line is, you can't use devm_spi_register_master() in this case. > You need to use spi_register_master() and explicitly call > spi_unregister_master() in tegra_qspi_remove() *before* performing > teardown steps. > > However, be sure to use the devm variant to *allocate* the SPI controller, > i.e. use devm_spi_alloc_master() instead of spi_alloc_master(). > > Thanks, > > Lukas
Thanks Lukas. I see devm_spi_alloc_master() in 5.4 but not from 5.5
Thanks
Sowjanya
| |