]> git.karo-electronics.de Git - linux-beck.git/blobdiff - arch/x86/kernel/devicetree.c
x86, irq, devicetree: Use common irqdomain map interface to program IOAPIC pins
[linux-beck.git] / arch / x86 / kernel / devicetree.c
index ee26feca93d95e8b8c74430eb1e164ecfc94ef7f..f33bb436b8f41ddd8afb0ab076017e9ca659028e 100644 (file)
@@ -201,10 +201,8 @@ static int ioapic_xlate(struct irq_domain *domain,
                        const u32 *intspec, u32 intsize,
                        irq_hw_number_t *out_hwirq, u32 *out_type)
 {
-       struct io_apic_irq_attr attr;
        struct of_ioapic_type *it;
-       u32 line, idx;
-       int rc;
+       u32 line, idx, gsi;
 
        if (WARN_ON(intsize < 2))
                return -EINVAL;
@@ -217,12 +215,9 @@ static int ioapic_xlate(struct irq_domain *domain,
        it = &of_ioapic_type[intspec[1]];
 
        idx = (u32)(long)domain->host_data;
-       set_io_apic_irq_attr(&attr, idx, line, it->trigger, it->polarity);
-
-       rc = io_apic_setup_irq_pin_once(irq_find_mapping(domain, line),
-                                       cpu_to_node(0), &attr);
-       if (rc)
-               return rc;
+       gsi = mp_pin_to_gsi(idx, line);
+       if (mp_set_gsi_attr(gsi, it->trigger, it->polarity, cpu_to_node(0)))
+               return -EBUSY;
 
        *out_hwirq = line;
        *out_type = it->out_type;
@@ -230,6 +225,7 @@ static int ioapic_xlate(struct irq_domain *domain,
 }
 
 const struct irq_domain_ops ioapic_irq_domain_ops = {
+       .map = mp_irqdomain_map,
        .xlate = ioapic_xlate,
 };