Merge tag 'irq-urgent-2025-04-18' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull misc irq fixes from Ingo Molnar: - Fix BCM2712 irqchip driver Kconfig dependencies required on the Raspberry PI5 - Fix spurious interrupts on RZ/G3E SMARC EVK systems - Fix crash regression on Sun/NIU hardware - Apply MSI driver quirk for Sun Neptune chips * tag 'irq-urgent-2025-04-18' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: irqchip/irq-bcm2712-mip: Enable driver when ARCH_BCM2835 is enabled irqchip/renesas-rzv2h: Prevent TINT spurious interrupt net/niu: Niu requires MSIX ENTRY_DATA fields touch before entry reads PCI/MSI: Add an option to write MSIX ENTRY_DATA before any reads
This commit is contained in:
@@ -114,8 +114,8 @@ config I8259
|
||||
|
||||
config BCM2712_MIP
|
||||
tristate "Broadcom BCM2712 MSI-X Interrupt Peripheral support"
|
||||
depends on ARCH_BRCMSTB || COMPILE_TEST
|
||||
default m if ARCH_BRCMSTB
|
||||
depends on ARCH_BRCMSTB || ARCH_BCM2835 || COMPILE_TEST
|
||||
default m if ARCH_BRCMSTB || ARCH_BCM2835
|
||||
depends on ARM_GIC
|
||||
select GENERIC_IRQ_CHIP
|
||||
select IRQ_DOMAIN_HIERARCHY
|
||||
|
||||
@@ -170,6 +170,14 @@ static void rzv2h_tint_irq_endisable(struct irq_data *d, bool enable)
|
||||
else
|
||||
tssr &= ~ICU_TSSR_TIEN(tssel_n, priv->info->field_width);
|
||||
writel_relaxed(tssr, priv->base + priv->info->t_offs + ICU_TSSR(k));
|
||||
|
||||
/*
|
||||
* A glitch in the edge detection circuit can cause a spurious
|
||||
* interrupt. Clear the status flag after setting the ICU_TSSRk
|
||||
* registers, which is recommended by the hardware manual as a
|
||||
* countermeasure.
|
||||
*/
|
||||
writel_relaxed(BIT(tint_nr), priv->base + priv->info->t_offs + ICU_TSCLR);
|
||||
}
|
||||
|
||||
static void rzv2h_icu_irq_disable(struct irq_data *d)
|
||||
|
||||
@@ -9064,6 +9064,8 @@ static void niu_try_msix(struct niu *np, u8 *ldg_num_map)
|
||||
msi_vec[i].entry = i;
|
||||
}
|
||||
|
||||
pdev->dev_flags |= PCI_DEV_FLAGS_MSIX_TOUCH_ENTRY_DATA_FIRST;
|
||||
|
||||
num_irqs = pci_enable_msix_range(pdev, msi_vec, 1, num_irqs);
|
||||
if (num_irqs < 0) {
|
||||
np->flags &= ~NIU_FLAGS_MSIX;
|
||||
|
||||
@@ -615,6 +615,9 @@ void msix_prepare_msi_desc(struct pci_dev *dev, struct msi_desc *desc)
|
||||
void __iomem *addr = pci_msix_desc_addr(desc);
|
||||
|
||||
desc->pci.msi_attrib.can_mask = 1;
|
||||
/* Workaround for SUN NIU insanity, which requires write before read */
|
||||
if (dev->dev_flags & PCI_DEV_FLAGS_MSIX_TOUCH_ENTRY_DATA_FIRST)
|
||||
writel(0, addr + PCI_MSIX_ENTRY_DATA);
|
||||
desc->pci.msix_ctrl = readl(addr + PCI_MSIX_ENTRY_VECTOR_CTRL);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -245,6 +245,8 @@ enum pci_dev_flags {
|
||||
PCI_DEV_FLAGS_NO_RELAXED_ORDERING = (__force pci_dev_flags_t) (1 << 11),
|
||||
/* Device does honor MSI masking despite saying otherwise */
|
||||
PCI_DEV_FLAGS_HAS_MSI_MASKING = (__force pci_dev_flags_t) (1 << 12),
|
||||
/* Device requires write to PCI_MSIX_ENTRY_DATA before any MSIX reads */
|
||||
PCI_DEV_FLAGS_MSIX_TOUCH_ENTRY_DATA_FIRST = (__force pci_dev_flags_t) (1 << 13),
|
||||
};
|
||||
|
||||
enum pci_irq_reroute_variant {
|
||||
|
||||
Reference in New Issue
Block a user