Lines Matching +full:used +full:- +full:by +full:- +full:rtas
1 // SPDX-License-Identifier: GPL-2.0-or-later
26 #include <asm/rtas.h>
60 ireg = of_get_property(np, "ibm,ppc-interrupt-gserver#s", &ilen); in xics_update_irq_servers()
69 * entry of "ibm,ppc-interrupt-gserver#s" property. Get the last in xics_update_irq_servers()
84 /* GIQ stuff, currently only supported on RTAS setups, will have
96 index = (1UL << xics_interrupt_server_size) - 1 - gserver; in xics_set_cpu_giq()
100 WARN(status < 0, "set-indicator(%d, %d, %u) returned %d\n", in xics_set_cpu_giq()
107 icp_ops->set_priority(LOWEST_PRIORITY); in xics_setup_cpu()
118 xics_ics->mask_unknown(xics_ics, vec); in xics_mask_unknown_vec()
134 BUG_ON(request_irq(ipi, icp_ops->ipi_action, in xics_request_ipi()
143 /* Setup cause_ipi callback based on which ICP is used */ in xics_smp_probe()
144 smp_ops->cause_ipi = icp_ops->cause_ipi; in xics_smp_probe()
157 os_cppr->index = 0; in xics_teardown_cpu()
158 icp_ops->set_priority(0); in xics_teardown_cpu()
159 icp_ops->teardown_cpu(); in xics_teardown_cpu()
166 icp_ops->flush_ipi(); in xics_kexec_teardown_cpu()
188 /* If we used to be the default server, move to the new "boot_cpuid" */ in xics_migrate_irqs_away()
193 icp_ops->set_priority(0); in xics_migrate_irqs_away()
208 if (!desc->action) in xics_migrate_irqs_away()
219 if (!chip || !chip->irq_set_affinity) in xics_migrate_irqs_away()
222 raw_spin_lock_irqsave(&desc->lock, flags); in xics_migrate_irqs_away()
225 server = xics_ics->get_server(xics_ics, irq); in xics_migrate_irqs_away()
245 raw_spin_unlock_irqrestore(&desc->lock, flags); in xics_migrate_irqs_away()
249 raw_spin_unlock_irqrestore(&desc->lock, flags); in xics_migrate_irqs_away()
257 * interrupts, the expectation is that we'll only get woken up by an IPI in xics_migrate_irqs_away()
259 * safe. If we're using icp-opal this may actually allow all in xics_migrate_irqs_away()
262 icp_ops->set_priority(DEFAULT_PRIORITY); in xics_migrate_irqs_away()
292 return -1; in xics_get_irq_server()
312 return xics_ics->host_match(xics_ics, node) ? 1 : 0; in xics_host_match()
332 * Mark interrupts as edge sensitive by default so that resend in xics_host_map()
333 * actually works. The device-tree parsing will turn the LSIs in xics_host_map()
346 return -EINVAL; in xics_host_map()
348 if (xics_ics->check(xics_ics, hwirq)) in xics_host_map()
349 return -EINVAL; in xics_host_map()
352 irq_domain_set_info(domain, virq, hwirq, xics_ics->chip, in xics_host_map()
385 * affect the resend function when re-enabling an edge interrupt. in xics_set_irq_type()
394 return -EINVAL; in xics_set_irq_type()
418 return xics_host_xlate(d, to_of_node(fwspec->fwnode), fwspec->param, in xics_host_domain_translate()
419 fwspec->param_count, hwirq, type); in xics_host_domain_translate()
437 irq_domain_set_info(domain, virq + i, hwirq + i, xics_ics->chip, in xics_host_domain_alloc()
467 return -ENOMEM; in xics_allocate_domain()
472 return -ENOMEM; in xics_allocate_domain()
494 np = of_find_compatible_node(NULL, NULL, "ibm,ppc-xics"); in xics_get_server_size()
498 isize = of_get_property(np, "ibm,interrupt-server#-size", NULL); in xics_get_server_size()
507 int rc = -1; in xics_init()
514 if (rc == -ENODEV) in xics_init()
523 ppc_md.get_irq = icp_ops->get_irq; in xics_init()
526 xics_ipi_chip.irq_eoi = icp_ops->eoi; in xics_init()