When using NVME on SG2044, the NVME always complains "I/O tag XXX (XXX) QID XX timeout, completion polled", which is caused by the broken handler of the sg2042-msi driver. As PLIC driver can only setting affinity when enabling, the sg2042-msi does not properly handled affinity setting previously and enable irq in an unexpected executing path. Add irq_startup/irq_shutdown support to the PCI template domain, then set irq_chip_[startup/shutdown]_parent for irq_startup/ irq_shutdown of the sg2042-msi driver. So the irq can be started properly. Inochi Amaoto (4): genirq: Add irq_chip_(startup/shutdown)_parent PCI/MSI: Add startup/shutdown support for per device MSI[X] domains irqchip/sg2042-msi: Fix broken affinity setting irqchip/sg2042-msi: Set MSI_FLAG_MULTI_PCI_MSI flags for SG2044 drivers/irqchip/irq-sg2042-msi.c | 13 ++++++-- drivers/pci/msi/irqdomain.c | 52 ++++++++++++++++++++++++++++++++ include/linux/irq.h | 2 ++ include/linux/msi.h | 2 ++ kernel/irq/chip.c | 37 +++++++++++++++++++++++ 5 files changed, 104 insertions(+), 2 deletions(-) -- 2.50.1