Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch irq/misc-5.15 into irq/irqchip-next

- Fix edge interrupt support on loongson systems
- Advertise lack of wake-up logic on mtk-sysirq

* irq/misc-5.15:
irqchip/mtk-sysirq: Skip setting irq-wake
irqchip/loongson-pch-pic: Improve edge triggered interrupt support

Signed-off-by: Marc Zyngier <maz@kernel.org>

+19 -1
+18 -1
drivers/irqchip/irq-loongson-pch-pic.c
··· 92 92 case IRQ_TYPE_EDGE_RISING: 93 93 pch_pic_bitset(priv, PCH_PIC_EDGE, d->hwirq); 94 94 pch_pic_bitclr(priv, PCH_PIC_POL, d->hwirq); 95 + irq_set_handler_locked(d, handle_edge_irq); 95 96 break; 96 97 case IRQ_TYPE_EDGE_FALLING: 97 98 pch_pic_bitset(priv, PCH_PIC_EDGE, d->hwirq); 98 99 pch_pic_bitset(priv, PCH_PIC_POL, d->hwirq); 100 + irq_set_handler_locked(d, handle_edge_irq); 99 101 break; 100 102 case IRQ_TYPE_LEVEL_HIGH: 101 103 pch_pic_bitclr(priv, PCH_PIC_EDGE, d->hwirq); 102 104 pch_pic_bitclr(priv, PCH_PIC_POL, d->hwirq); 105 + irq_set_handler_locked(d, handle_level_irq); 103 106 break; 104 107 case IRQ_TYPE_LEVEL_LOW: 105 108 pch_pic_bitclr(priv, PCH_PIC_EDGE, d->hwirq); 106 109 pch_pic_bitset(priv, PCH_PIC_POL, d->hwirq); 110 + irq_set_handler_locked(d, handle_level_irq); 107 111 break; 108 112 default: 109 113 ret = -EINVAL; ··· 117 113 return ret; 118 114 } 119 115 116 + static void pch_pic_ack_irq(struct irq_data *d) 117 + { 118 + unsigned int reg; 119 + struct pch_pic *priv = irq_data_get_irq_chip_data(d); 120 + 121 + reg = readl(priv->base + PCH_PIC_EDGE + PIC_REG_IDX(d->hwirq) * 4); 122 + if (reg & BIT(PIC_REG_BIT(d->hwirq))) { 123 + writel(BIT(PIC_REG_BIT(d->hwirq)), 124 + priv->base + PCH_PIC_CLR + PIC_REG_IDX(d->hwirq) * 4); 125 + } 126 + irq_chip_ack_parent(d); 127 + } 128 + 120 129 static struct irq_chip pch_pic_irq_chip = { 121 130 .name = "PCH PIC", 122 131 .irq_mask = pch_pic_mask_irq, 123 132 .irq_unmask = pch_pic_unmask_irq, 124 - .irq_ack = irq_chip_ack_parent, 133 + .irq_ack = pch_pic_ack_irq, 125 134 .irq_set_affinity = irq_chip_set_affinity_parent, 126 135 .irq_set_type = pch_pic_set_type, 127 136 };
+1
drivers/irqchip/irq-mtk-sysirq.c
··· 65 65 .irq_set_type = mtk_sysirq_set_type, 66 66 .irq_retrigger = irq_chip_retrigger_hierarchy, 67 67 .irq_set_affinity = irq_chip_set_affinity_parent, 68 + .flags = IRQCHIP_SKIP_SET_WAKE, 68 69 }; 69 70 70 71 static int mtk_sysirq_domain_translate(struct irq_domain *d,