Lines Matching +full:en751221 +full:- +full:intc

1 // SPDX-License-Identifier: GPL-2.0-only
3 * EN751221 Interrupt Controller Driver.
5 * The EcoNet EN751221 Interrupt Controller is a simple interrupt controller
7 * be routed to either VPE but not both, so to support per-CPU interrupts, a
13 * If an interrupt (say 30) needs per-CPU capability, the SoC integrator
15 * reflects this by adding the pair <30 29> to the "econet,shadow-interrupts"
46 * - NOT_PERCPU: This interrupt is not per-cpu, so it has no shadow
47 * - IS_SHADOW: This interrupt is a shadow of another per-cpu interrupt
48 * - else: This is a per-cpu interrupt whose shadow is the value
78 * It should only be masked/unmasked as a result of the "real" per-cpu in econet_chmask()
80 * If it is per-cpu (has a shadow), and we're on VPE#1, the shadow is what we mask. in econet_chmask()
91 mask = BIT(hwirq - 32); in econet_chmask()
103 econet_chmask(d->hwirq, false); in econet_intc_mask()
109 econet_chmask(d->hwirq, true); in econet_intc_unmask()
114 /* IRQs are generally disabled during init, but guarding here makes it non-obligatory. */ in econet_mask_all()
125 hwirq = fls(pending) - 1; in econet_intc_handle_pending()
161 return -EINVAL; in econet_intc_map()
164 return -EINVAL; in econet_intc_map()
173 pr_warn("%s: Failed irq_set_percpu_devid for %u: %d\n", d->name, irq, ret); in econet_intc_map()
181 .name = "en751221-intc",
194 const char *field = "econet,shadow-interrupts"; in get_shadow_interrupts()
211 return -ENOMEM; in get_shadow_interrupts()
215 return -EINVAL; in get_shadow_interrupts()
265 return -EINVAL; in econet_intc_of_init()
270 ret = -EINVAL; in econet_intc_of_init()
276 ret = -EBUSY; in econet_intc_of_init()
283 ret = -ENOMEM; in econet_intc_of_init()
293 ret = -ENOMEM; in econet_intc_of_init()
310 IRQCHIP_DECLARE(econet_en751221_intc, "econet,en751221-intc", econet_intc_of_init);