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

update

File:
1 edited

Legend:

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

    r31826 r31885  
    272272#endif
    273273
    274 static void ltq_hw_irq_handler(struct irq_desc *desc)
    275 {
    276         ltq_hw_irqdispatch(irq_desc_get_irq(desc) - 2);
    277 }
    278 
    279274#ifdef CONFIG_MIPS_MT_SMP
    280275void __init arch_init_ipiirq(int irq, struct irqaction *action)
     
    321316{
    322317        unsigned int pending = read_c0_status() & read_c0_cause() & ST0_IM;
    323         int irq;
    324 
    325         if (!pending) {
    326                 spurious_interrupt();
    327                 return;
    328         }
    329 
    330         pending >>= CAUSEB_IP;
    331         while (pending) {
    332                 irq = fls(pending) - 1;
    333                 do_IRQ(MIPS_CPU_IRQ_BASE + irq);
    334                 pending &= ~BIT(irq);
    335         }
     318        unsigned int i;
     319
     320        if ((MIPS_CPU_TIMER_IRQ == 7) && (pending & CAUSEF_IP7)) {
     321                do_IRQ(MIPS_CPU_TIMER_IRQ);
     322                goto out;
     323        } else {
     324                for (i = 0; i < MAX_IM; i++) {
     325                        if (pending & (CAUSEF_IP2 << i)) {
     326                                ltq_hw_irqdispatch(i);
     327                                goto out;
     328                        }
     329                }
     330        }
     331        pr_alert("Spurious IRQ: CAUSE=0x%08x\n", read_c0_status());
     332
     333out:
     334        return;
    336335}
    337336
     
    356355        .xlate = irq_domain_xlate_onetwocell,
    357356        .map = icu_map,
     357};
     358
     359static struct irqaction cascade = {
     360        .handler = no_action,
     361        .name = "cascade",
    358362};
    359363
     
    389393
    390394        for (i = 0; i < MAX_IM; i++)
    391                 irq_set_chained_handler(i + 2, ltq_hw_irq_handler);
     395                setup_irq(i + 2, &cascade);
    392396
    393397        if (cpu_has_vint) {
Note: See TracChangeset for help on using the changeset viewer.