Lines Matching +full:archs +full:- +full:idu +full:- +full:intc

1 // SPDX-License-Identifier: GPL-2.0-only
13 #include <asm/irqflags-arcv2.h>
71 * STATUS32[H]/actionpoint/breakpoint/self-halt in mcip_update_debug_halt_mask()
165 IS_AVAIL1(mp.idu, "IDU "), in mcip_probe_n_setup()
181 * ARCv2 Interrupt Distribution Unit (IDU)
183 * Connects external "COMMON" IRQs to core intc, providing:
184 * -dynamic routing (IRQ affinity)
185 * -load balancing (Round Robin interrupt distribution)
186 * -1:N distribution
232 idu_irq_mask_raw(data->hwirq); in idu_irq_mask()
240 __mcip_cmd_data(CMD_IDU_SET_MASK, data->hwirq, 0); in idu_irq_unmask()
249 __mcip_cmd(CMD_IDU_ACK_CIRQ, data->hwirq); in idu_irq_ack()
258 __mcip_cmd_data(CMD_IDU_SET_MASK, data->hwirq, 1); in idu_irq_mask_ack()
259 __mcip_cmd(CMD_IDU_ACK_CIRQ, data->hwirq); in idu_irq_mask_ack()
274 return -EINVAL; in idu_irq_set_affinity()
279 idu_set_dest(data->hwirq, destination_bits); in idu_irq_set_affinity()
286 idu_set_mode(data->hwirq, false, 0, true, distribution_mode); in idu_irq_set_affinity()
298 * ARCv2 IDU HW does not support inverse polarity, so these are the in idu_irq_set_type()
302 return -EINVAL; in idu_irq_set_type()
306 idu_set_mode(data->hwirq, true, in idu_irq_set_type()
320 * The affinity of common interrupts in IDU must be set manually since in idu_irq_enable()
325 * and cannot propagate it to IDU. in idu_irq_enable()
332 .name = "MCIP IDU Intc",
350 irq_hw_number_t idu_hwirq = core_hwirq - FIRST_EXT_IRQ; in idu_cascade_isr()
369 * [16, 23]: Statically assigned always private-per-core (Timers, WDT, IPI)
371 * [24+C, N]: Not statically assigned, private-per-core
376 idu_of_init(struct device_node *intc, struct device_node *parent) in idu_of_init() argument
386 if (!mp.idu) in idu_of_init()
387 panic("IDU not detected, but DeviceTree using it"); in idu_of_init()
392 pr_info("MCIP: IDU supports %u common irqs\n", nr_irqs); in idu_of_init()
394 domain = irq_domain_create_linear(of_fwnode_handle(intc), nr_irqs, in idu_of_init()
397 /* Parent interrupts (core-intc) are already mapped */ in idu_of_init()
404 * Return parent uplink IRQs (towards core intc) 24,25,..... in idu_of_init()
406 * however we need it to get the parent virq and set IDU handler in idu_of_init()
418 IRQCHIP_DECLARE(arcv2_idu_intc, "snps,archs-idu-intc", idu_of_init);