can: rcar_can: do not report txerr and rxerr during bus-off
[linux-2.6-microblaze.git] / drivers / irqchip / irq-bcm7038-l1.c
index a035c38..a62b962 100644 (file)
@@ -28,9 +28,6 @@
 #include <linux/irqchip.h>
 #include <linux/irqchip/chained_irq.h>
 #include <linux/syscore_ops.h>
-#ifdef CONFIG_ARM
-#include <asm/smp_plat.h>
-#endif
 
 #define IRQS_PER_WORD          32
 #define REG_BYTES_PER_IRQ_WORD (sizeof(u32) * 4)
@@ -127,7 +124,7 @@ static void bcm7038_l1_irq_handle(struct irq_desc *desc)
        struct irq_chip *chip = irq_desc_get_chip(desc);
        unsigned int idx;
 
-#ifdef CONFIG_SMP
+#if defined(CONFIG_SMP) && defined(CONFIG_MIPS)
        cpu = intc->cpus[cpu_logical_map(smp_processor_id())];
 #else
        cpu = intc->cpus[0];
@@ -194,6 +191,7 @@ static void bcm7038_l1_mask(struct irq_data *d)
        raw_spin_unlock_irqrestore(&intc->lock, flags);
 }
 
+#if defined(CONFIG_MIPS) && defined(CONFIG_SMP)
 static int bcm7038_l1_set_affinity(struct irq_data *d,
                                   const struct cpumask *dest,
                                   bool force)
@@ -220,32 +218,6 @@ static int bcm7038_l1_set_affinity(struct irq_data *d,
 
        return 0;
 }
-
-#ifdef CONFIG_SMP
-static void bcm7038_l1_cpu_offline(struct irq_data *d)
-{
-       struct cpumask *mask = irq_data_get_affinity_mask(d);
-       int cpu = smp_processor_id();
-       cpumask_t new_affinity;
-
-       /* This CPU was not on the affinity mask */
-       if (!cpumask_test_cpu(cpu, mask))
-               return;
-
-       if (cpumask_weight(mask) > 1) {
-               /*
-                * Multiple CPU affinity, remove this CPU from the affinity
-                * mask
-                */
-               cpumask_copy(&new_affinity, mask);
-               cpumask_clear_cpu(cpu, &new_affinity);
-       } else {
-               /* Only CPU, put on the lowest online CPU */
-               cpumask_clear(&new_affinity);
-               cpumask_set_cpu(cpumask_first(cpu_online_mask), &new_affinity);
-       }
-       irq_set_affinity_locked(d, &new_affinity, false);
-}
 #endif
 
 static int __init bcm7038_l1_init_one(struct device_node *dn,
@@ -328,7 +300,7 @@ static int bcm7038_l1_suspend(void)
        u32 val;
 
        /* Wakeup interrupt should only come from the boot cpu */
-#ifdef CONFIG_SMP
+#if defined(CONFIG_SMP) && defined(CONFIG_MIPS)
        boot_cpu = cpu_logical_map(0);
 #else
        boot_cpu = 0;
@@ -352,7 +324,7 @@ static void bcm7038_l1_resume(void)
        struct bcm7038_l1_chip *intc;
        int boot_cpu, word;
 
-#ifdef CONFIG_SMP
+#if defined(CONFIG_SMP) && defined(CONFIG_MIPS)
        boot_cpu = cpu_logical_map(0);
 #else
        boot_cpu = 0;
@@ -395,9 +367,8 @@ static struct irq_chip bcm7038_l1_irq_chip = {
        .name                   = "bcm7038-l1",
        .irq_mask               = bcm7038_l1_mask,
        .irq_unmask             = bcm7038_l1_unmask,
+#if defined(CONFIG_SMP) && defined(CONFIG_MIPS)
        .irq_set_affinity       = bcm7038_l1_set_affinity,
-#ifdef CONFIG_SMP
-       .irq_cpu_offline        = bcm7038_l1_cpu_offline,
 #endif
 #ifdef CONFIG_PM_SLEEP
        .irq_set_wake           = bcm7038_l1_set_wake,
@@ -416,7 +387,7 @@ static int bcm7038_l1_map(struct irq_domain *d, unsigned int virq,
 
        irq_set_chip_and_handler(virq, &bcm7038_l1_irq_chip, handle_level_irq);
        irq_set_chip_data(virq, d->host_data);
-       irqd_set_single_target(irq_desc_get_irq_data(irq_to_desc(virq)));
+       irqd_set_single_target(irq_get_irq_data(virq));
        return 0;
 }
 
@@ -484,4 +455,8 @@ out_free:
        return ret;
 }
 
-IRQCHIP_DECLARE(bcm7038_l1, "brcm,bcm7038-l1-intc", bcm7038_l1_of_init);
+IRQCHIP_PLATFORM_DRIVER_BEGIN(bcm7038_l1)
+IRQCHIP_MATCH("brcm,bcm7038-l1-intc", bcm7038_l1_of_init)
+IRQCHIP_PLATFORM_DRIVER_END(bcm7038_l1)
+MODULE_DESCRIPTION("Broadcom STB 7038-style L1/L2 interrupt controller");
+MODULE_LICENSE("GPL v2");