On Fri, Dec 10, 2021 at 05:02:47PM +0800, Li-hao Kuo wrote: > +static irqreturn_t sp7021_spi_sla_irq(int irq, void *dev) > +{ > + struct sp7021_spi_ctlr *pspim = dev; > + unsigned int data_status; > + > + data_status = readl(pspim->sla_base + SP7021_DATA_RDY_REG); > + writel(data_status | SP7021_SLA_CLR_INT, pspim->sla_base + SP7021_DATA_RDY_REG); > + complete(&pspim->sla_isr); > + return IRQ_NONE; > +} This will always return IRQ_NONE even if the interrupt actually fired - that should eventually cause genirq to complain that there's a problem with the interrupt never being handled I think (though perhaps if the interrupt stops asserting it'll pick up on that). It should return IRQ_HANDLED if there was something asserted in SP7021_DATA_RDY_REG. Apart from that one thing this all looks good as far as I can see.