Messages in this thread | | | From | Björn Töpel <> | Subject | Re: [PATCH v11 09/14] irqchip/riscv-imsic: Add support for PCI MSI irqdomain | Date | Tue, 24 Oct 2023 15:09:31 +0200 |
| |
Anup Patel <apatel@ventanamicro.com> writes:
> The Linux PCI framework requires it's own dedicated MSI irqdomain so > let us create PCI MSI irqdomain as child of the IMSIC base irqdomain. > > Signed-off-by: Anup Patel <apatel@ventanamicro.com> > --- > drivers/irqchip/Kconfig | 7 +++ > drivers/irqchip/irq-riscv-imsic-platform.c | 51 ++++++++++++++++++++++ > drivers/irqchip/irq-riscv-imsic-state.h | 1 + > 3 files changed, 59 insertions(+) > > diff --git a/drivers/irqchip/Kconfig b/drivers/irqchip/Kconfig > index bdd80716114d..c1d69b418dfb 100644 > --- a/drivers/irqchip/Kconfig > +++ b/drivers/irqchip/Kconfig > @@ -552,6 +552,13 @@ config RISCV_IMSIC > select IRQ_DOMAIN_HIERARCHY > select GENERIC_MSI_IRQ > > +config RISCV_IMSIC_PCI > + bool > + depends on RISCV_IMSIC > + depends on PCI > + depends on PCI_MSI > + default RISCV_IMSIC > + > config EXYNOS_IRQ_COMBINER > bool "Samsung Exynos IRQ combiner support" if COMPILE_TEST > depends on (ARCH_EXYNOS && ARM) || COMPILE_TEST > diff --git a/drivers/irqchip/irq-riscv-imsic-platform.c b/drivers/irqchip/irq-riscv-imsic-platform.c > index 23d286cb017e..cdb659401199 100644 > --- a/drivers/irqchip/irq-riscv-imsic-platform.c > +++ b/drivers/irqchip/irq-riscv-imsic-platform.c > @@ -13,6 +13,7 @@ > #include <linux/irqdomain.h> > #include <linux/module.h> > #include <linux/msi.h> > +#include <linux/pci.h> > #include <linux/platform_device.h> > #include <linux/spinlock.h> > #include <linux/smp.h> > @@ -215,6 +216,42 @@ static const struct irq_domain_ops imsic_base_domain_ops = { > #endif > }; > > +#ifdef CONFIG_RISCV_IMSIC_PCI > + > +static void imsic_pci_mask_irq(struct irq_data *d) > +{ > + pci_msi_mask_irq(d); > + irq_chip_mask_parent(d);
I've asked this before, but I still don't get why you need to propagate to the parent? Why isn't masking on PCI enough?
Björn
| |