Ignore:
Timestamp:
Apr 21, 2017, 4:28:29 AM (5 weeks ago)
Author:
brainslayer
Message:

update

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/linux/universal/linux-4.9/arch/mips/lantiq/irq.c

    r31826 r31885  
    270270#endif
    271271
    272 static void ltq_hw_irq_handler(struct irq_desc *desc)
    273 {
    274         ltq_hw_irqdispatch(irq_desc_get_irq(desc) - 2);
    275 }
    276 
    277272#ifdef CONFIG_MIPS_MT_SMP
    278273void __init arch_init_ipiirq(int irq, struct irqaction *action)
     
    319314{
    320315        unsigned int pending = read_c0_status() & read_c0_cause() & ST0_IM;
    321         int irq;
    322 
    323         if (!pending) {
    324                 spurious_interrupt();
    325                 return;
    326         }
    327 
    328         pending >>= CAUSEB_IP;
    329         while (pending) {
    330                 irq = fls(pending) - 1;
    331                 do_IRQ(MIPS_CPU_IRQ_BASE + irq);
    332                 pending &= ~BIT(irq);
    333         }
     316        unsigned int i;
     317
     318        if ((MIPS_CPU_TIMER_IRQ == 7) && (pending & CAUSEF_IP7)) {
     319                do_IRQ(MIPS_CPU_TIMER_IRQ);
     320                goto out;
     321        } else {
     322                for (i = 0; i < MAX_IM; i++) {
     323                        if (pending & (CAUSEF_IP2 << i)) {
     324                                ltq_hw_irqdispatch(i);
     325                                goto out;
     326                        }
     327                }
     328        }
     329        pr_alert("Spurious IRQ: CAUSE=0x%08x\n", read_c0_status());
     330
     331out:
     332        return;
    334333}
    335334
     
    354353        .xlate = irq_domain_xlate_onetwocell,
    355354        .map = icu_map,
     355};
     356
     357static struct irqaction cascade = {
     358        .handler = no_action,
     359        .name = "cascade",
    356360};
    357361
     
    387391
    388392        for (i = 0; i < MAX_IM; i++)
    389                 irq_set_chained_handler(i + 2, ltq_hw_irq_handler);
     393                setup_irq(i + 2, &cascade);
    390394
    391395        if (cpu_has_vint) {
Note: See TracChangeset for help on using the changeset viewer.