]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
dmaengine: dw-edma: Add virtual IRQ for interrupt-emulation doorbells
authorKoichiro Den <den@valinux.co.jp>
Sun, 15 Feb 2026 15:22:16 +0000 (00:22 +0900)
committerVinod Koul <vkoul@kernel.org>
Wed, 25 Feb 2026 09:54:19 +0000 (15:24 +0530)
commitd9d5e1bdd18074ea27985c777ddc3a8a0b007468
tree3fb0fbbcb2ec358db874f174ccc7163b0550b87a
parent2e8726879559144b4582fa059780e452b3a1ad41
dmaengine: dw-edma: Add virtual IRQ for interrupt-emulation doorbells

Interrupt emulation can assert the dw-edma IRQ line without updating the
DONE/ABORT bits. With the shared read/write/common IRQ handlers, the
driver cannot reliably distinguish such an emulated interrupt from a
real one and leaving a level IRQ asserted may wedge the line.

Allocate a dedicated, requestable Linux virtual IRQ (db_irq) for
interrupt emulation and attach an irq_chip whose .irq_ack runs the
core-specific deassert sequence (.ack_emulated_irq()). The physical
dw-edma interrupt handlers raise this virtual IRQ via
generic_handle_irq(), ensuring emulated IRQs are always deasserted.

Export the virtual IRQ number (db_irq) and the doorbell register offset
(db_offset) via struct dw_edma_chip so platform users can expose
interrupt emulation as a doorbell.

Without this, a single interrupt-emulation write can leave the level IRQ
line asserted and cause the generic IRQ layer to disable it.

Signed-off-by: Koichiro Den <den@valinux.co.jp>
Reviewed-by: Frank Li <Frank.Li@nxp.com>
Link: https://patch.msgid.link/20260215152216.3393561-3-den@valinux.co.jp
Signed-off-by: Vinod Koul <vkoul@kernel.org>
drivers/dma/dw-edma/dw-edma-core.c
include/linux/dma/edma.h