Skip to content

Commit 4513fb8

Browse files
author
Marc Zyngier
committed
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 <[email protected]>
2 parents 9b24dab + c775626 commit 4513fb8

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

drivers/irqchip/irq-loongson-pch-pic.c

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,18 +92,22 @@ static int pch_pic_set_type(struct irq_data *d, unsigned int type)
9292
case IRQ_TYPE_EDGE_RISING:
9393
pch_pic_bitset(priv, PCH_PIC_EDGE, d->hwirq);
9494
pch_pic_bitclr(priv, PCH_PIC_POL, d->hwirq);
95+
irq_set_handler_locked(d, handle_edge_irq);
9596
break;
9697
case IRQ_TYPE_EDGE_FALLING:
9798
pch_pic_bitset(priv, PCH_PIC_EDGE, d->hwirq);
9899
pch_pic_bitset(priv, PCH_PIC_POL, d->hwirq);
100+
irq_set_handler_locked(d, handle_edge_irq);
99101
break;
100102
case IRQ_TYPE_LEVEL_HIGH:
101103
pch_pic_bitclr(priv, PCH_PIC_EDGE, d->hwirq);
102104
pch_pic_bitclr(priv, PCH_PIC_POL, d->hwirq);
105+
irq_set_handler_locked(d, handle_level_irq);
103106
break;
104107
case IRQ_TYPE_LEVEL_LOW:
105108
pch_pic_bitclr(priv, PCH_PIC_EDGE, d->hwirq);
106109
pch_pic_bitset(priv, PCH_PIC_POL, d->hwirq);
110+
irq_set_handler_locked(d, handle_level_irq);
107111
break;
108112
default:
109113
ret = -EINVAL;
@@ -113,11 +117,24 @@ static int pch_pic_set_type(struct irq_data *d, unsigned int type)
113117
return ret;
114118
}
115119

120+
static void pch_pic_ack_irq(struct irq_data *d)
121+
{
122+
unsigned int reg;
123+
struct pch_pic *priv = irq_data_get_irq_chip_data(d);
124+
125+
reg = readl(priv->base + PCH_PIC_EDGE + PIC_REG_IDX(d->hwirq) * 4);
126+
if (reg & BIT(PIC_REG_BIT(d->hwirq))) {
127+
writel(BIT(PIC_REG_BIT(d->hwirq)),
128+
priv->base + PCH_PIC_CLR + PIC_REG_IDX(d->hwirq) * 4);
129+
}
130+
irq_chip_ack_parent(d);
131+
}
132+
116133
static struct irq_chip pch_pic_irq_chip = {
117134
.name = "PCH PIC",
118135
.irq_mask = pch_pic_mask_irq,
119136
.irq_unmask = pch_pic_unmask_irq,
120-
.irq_ack = irq_chip_ack_parent,
137+
.irq_ack = pch_pic_ack_irq,
121138
.irq_set_affinity = irq_chip_set_affinity_parent,
122139
.irq_set_type = pch_pic_set_type,
123140
};

drivers/irqchip/irq-mtk-sysirq.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ static struct irq_chip mtk_sysirq_chip = {
6565
.irq_set_type = mtk_sysirq_set_type,
6666
.irq_retrigger = irq_chip_retrigger_hierarchy,
6767
.irq_set_affinity = irq_chip_set_affinity_parent,
68+
.flags = IRQCHIP_SKIP_SET_WAKE,
6869
};
6970

7071
static int mtk_sysirq_domain_translate(struct irq_domain *d,

0 commit comments

Comments
 (0)