Skip to content

Commit a255ee2

Browse files
committed
irqchip: irq-xtensa-mx: fix initial IRQ affinity
When irq-xtensa-mx chip is used in non-SMP configuration its irq_set_affinity callback is not called leaving IRQ affinity set empty. As a result IRQ delivery does not work in that configuration. Initialize IRQ affinity of the xtensa MX interrupt distributor to CPU 0 for all external IRQ lines. Cc: [email protected] Signed-off-by: Max Filippov <[email protected]>
1 parent af7a16e commit a255ee2

File tree

1 file changed

+14
-4
lines changed

1 file changed

+14
-4
lines changed

drivers/irqchip/irq-xtensa-mx.c

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -151,14 +151,25 @@ static struct irq_chip xtensa_mx_irq_chip = {
151151
.irq_set_affinity = xtensa_mx_irq_set_affinity,
152152
};
153153

154+
static void __init xtensa_mx_init_common(struct irq_domain *root_domain)
155+
{
156+
unsigned int i;
157+
158+
irq_set_default_host(root_domain);
159+
secondary_init_irq();
160+
161+
/* Initialize default IRQ routing to CPU 0 */
162+
for (i = 0; i < XCHAL_NUM_EXTINTERRUPTS; ++i)
163+
set_er(1, MIROUT(i));
164+
}
165+
154166
int __init xtensa_mx_init_legacy(struct device_node *interrupt_parent)
155167
{
156168
struct irq_domain *root_domain =
157169
irq_domain_add_legacy(NULL, NR_IRQS - 1, 1, 0,
158170
&xtensa_mx_irq_domain_ops,
159171
&xtensa_mx_irq_chip);
160-
irq_set_default_host(root_domain);
161-
secondary_init_irq();
172+
xtensa_mx_init_common(root_domain);
162173
return 0;
163174
}
164175

@@ -168,8 +179,7 @@ static int __init xtensa_mx_init(struct device_node *np,
168179
struct irq_domain *root_domain =
169180
irq_domain_add_linear(np, NR_IRQS, &xtensa_mx_irq_domain_ops,
170181
&xtensa_mx_irq_chip);
171-
irq_set_default_host(root_domain);
172-
secondary_init_irq();
182+
xtensa_mx_init_common(root_domain);
173183
return 0;
174184
}
175185
IRQCHIP_DECLARE(xtensa_mx_irq_chip, "cdns,xtensa-mx", xtensa_mx_init);

0 commit comments

Comments
 (0)