On Monday 15 October 2018 03:12 PM, Vignesh R wrote: > Hi Sekhar, > > On Monday 15 October 2018 01:53 PM, Sekhar Nori wrote: > > [...] >>> >>> +static irqreturn_t omap2_mcspi_irq_handler(int irq, void *data) >>> +{ >>> + struct omap2_mcspi *mcspi = data; >>> + u32 irqstat; >>> + >>> + irqstat = mcspi_read_reg(mcspi->master, OMAP2_MCSPI_IRQSTATUS); >>> + if (!irqstat) >>> + return IRQ_NONE; >>> + >>> + /* Disable IRQ and wakeup slave xfer task */ >>> + mcspi_write_reg(mcspi->master, OMAP2_MCSPI_IRQENABLE, 0); >>> + if (irqstat & OMAP2_MCSPI_IRQSTATUS_EOW) >>> + complete(&mcspi->txdone); >>> + >>> + return IRQ_HANDLED; >> >> You need to have the: >> >> pm_runtime_get_sync(); >> >> /* access registers */ >> >> pm_runtime_mark_last_busy(); >> pm_runtime_put_autosuspend(); >> >> sequence here. I think thats also missing from the dma callbacks. >> Probably working by chance today. >> > > This is taken care of by the SPI core as part of __spi_pump_messages(): > pm_runtime_get_sync() > ... > spi_transfer_one_message > ... > omap2_mcspi_transfer_one > ... > omap2_mcspi_txrx_dma > > So, both in dma callbacks and in IRQ handler, SPI controller is in > active state. Ah, okay then. False alarm :) Regards, Sekhar