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> |
||
|---|---|---|
| .. | ||
| amd_xdma.h | ||
| dw.h | ||
| edma.h | ||
| hsu.h | ||
| idma64.h | ||
| imx-dma.h | ||
| k3-event-router.h | ||
| k3-psil.h | ||
| k3-udma-glue.h | ||
| mxs-dma.h | ||
| pxa-dma.h | ||
| qcom-gpi-dma.h | ||
| qcom_adm.h | ||
| qcom_bam_dma.h | ||
| sprd-dma.h | ||
| ti-cppi5.h | ||
| xilinx_dma.h | ||
| xilinx_dpdma.h | ||