Skip to content

Commit 85a3b63

Browse files
popcornmixpelwell
authored andcommitted
irqchip/irq-brcmstb-l2: Add config for 2711 controller
We currently see these regularly: [ 25.157560] irq 31, desc: 00000000c15e6d2c, depth: 0, count: 0, unhandled: 0 [ 25.164658] ->handle_irq(): 00000000b1775675, brcmstb_l2_intc_irq_handle+0x0/0x1a8 [ 25.172352] ->irq_data.chip(): 00000000fea59f1c, gic_chip_mode1+0x0/0x108 [ 25.179166] ->action(): 000000003eda6d6f [ 25.183096] ->action->handler(): 000000002c09e646, bad_chained_irq+0x0/0x58 [ 25.190084] IRQ_LEVEL set [ 25.193142] IRQ_NOPROBE set [ 25.196198] IRQ_NOREQUEST set [ 25.199255] IRQ_NOTHREAD set with: $ cat /proc/interrupts | grep 31: 31: 1 0 0 0 GICv2 129 Level (null) The interrupt is described in DT with IRQ_TYPE_LEVEL_HIGH But the current compatible string uses the controller in edge triggered mode (as that config matches our register layout). Add a new compatible structure for level driven interrupt with our register layout. We had already been using this compatible string in device tree, so no change needed there. Signed-off-by: Dom Cobley <[email protected]>
1 parent d0e898e commit 85a3b63

File tree

1 file changed

+16
-0
lines changed

1 file changed

+16
-0
lines changed

drivers/irqchip/irq-brcmstb-l2.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,16 @@ static const struct brcmstb_intc_init_params l2_lvl_intc_init = {
5151
.cpu_mask_clear = 0x0C
5252
};
5353

54+
/* Register offsets in the 2711 L2 level interrupt controller */
55+
static const struct brcmstb_intc_init_params l2_2711_lvl_intc_init = {
56+
.handler = handle_level_irq,
57+
.cpu_status = 0x00,
58+
.cpu_clear = 0x08,
59+
.cpu_mask_status = 0x0c,
60+
.cpu_mask_set = 0x10,
61+
.cpu_mask_clear = 0x14
62+
};
63+
5464
/* L2 intc private data structure */
5565
struct brcmstb_l2_intc_data {
5666
struct irq_domain *domain;
@@ -266,11 +276,17 @@ static int brcmstb_l2_lvl_intc_probe(struct platform_device *pdev, struct device
266276
return brcmstb_l2_intc_probe(pdev, parent, &l2_lvl_intc_init);
267277
}
268278

279+
static int brcmstb_l2_2711_lvl_intc_probe(struct platform_device *np, struct device_node *parent)
280+
{
281+
return brcmstb_l2_intc_probe(np, parent, &l2_2711_lvl_intc_init);
282+
}
283+
269284
IRQCHIP_PLATFORM_DRIVER_BEGIN(brcmstb_l2)
270285
IRQCHIP_MATCH("brcm,l2-intc", brcmstb_l2_edge_intc_probe)
271286
IRQCHIP_MATCH("brcm,hif-spi-l2-intc", brcmstb_l2_edge_intc_probe)
272287
IRQCHIP_MATCH("brcm,upg-aux-aon-l2-intc", brcmstb_l2_edge_intc_probe)
273288
IRQCHIP_MATCH("brcm,bcm7271-l2-intc", brcmstb_l2_lvl_intc_probe)
289+
IRQCHIP_MATCH("brcm,bcm2711-l2-intc", brcmstb_l2_2711_lvl_intc_probe)
274290
IRQCHIP_PLATFORM_DRIVER_END(brcmstb_l2)
275291
MODULE_DESCRIPTION("Broadcom STB generic L2 interrupt controller");
276292
MODULE_LICENSE("GPL v2");

0 commit comments

Comments
 (0)