Changeset 3250


Ignore:
Timestamp:
2006-02-18T00:27:51+01:00 (12 years ago)
Author:
mbm
Message:

add interrupt debugging; fix bug with the AP60 interrupt handler

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/openwrt/target/linux/aruba-2.6/patches/002-irq.patch

    r3207 r3250  
    9393--- linux-2.6.15/arch/mips/aruba/irq.c  1970-01-01 01:00:00.000000000 +0100 
    9494+++ linux-2.6.15-openwrt/arch/mips/aruba/irq.c  2006-01-10 00:32:32.000000000 +0100 
    95 @@ -0,0 +1,424 @@ 
     95@@ -0,0 +1,447 @@ 
    9696+/************************************************************************** 
    9797+ * 
    9898+ *  BRIEF MODULE DESCRIPTION 
    99 + *     Interrupt routines for IDT EB434 boards 
     99+ *     Interrupt routines for IDT EB434 boards / Atheros boards 
     100+ *     Modified by Aruba Networks 
    100101+ * 
    101102+ *  Copyright 2004 IDT Inc. (rischelp@idt.com) 
     
    276277+                       case MACH_ARUBA_AP70: 
    277278+                               addr = intr_group_muscat[group].base_addr; 
    278 +                               // unmask intr within group 
    279279+                               WRITE_MASK_MUSCAT(addr, READ_MASK_MUSCAT(addr) & ~intr_bit); 
    280280+                               break; 
     
    343343+                               mask &= ~intr_bit; 
    344344+                               WRITE_MASK_MERLOT(addr, mask); 
    345 +                               if (!mask) 
     345+                               if (READ_MASK_MERLOT(addr)) 
    346346+                                       disable_local_irq(group_to_ip(group)); 
    347347+                               break; 
     
    382382+       local_irq_save(flags); 
    383383+       if (irq_desc[irq_nr].status & (IRQ_DISABLED | IRQ_INPROGRESS)) { 
    384 +               printk("warning: end_irq %d did not enable (%x) (ignoring)\n", 
     384+               printk("warning: end_irq %d did not enable (%x)\n", 
    385385+                      irq_nr, irq_desc[irq_nr].status); 
    386 +       } 
    387 + 
    388 +       if (ip<0) { 
     386+       } else if (ip<0) { 
    389387+               enable_local_irq(irq_nr); 
    390388+       } else { 
     
    475473+       unsigned int pend, group, ip; 
    476474+       volatile unsigned int *addr; 
     475+ 
     476+       if(cp0_cause == 0) { 
     477+               printk("INTERRUPT(S) FIRED WHILE MASKED\n"); 
     478+ 
     479+               // debuging use -- figure out which interrupt(s) fired 
     480+               cp0_cause = read_c0_cause() & CAUSEF_IP; 
     481+               while (cp0_cause) { 
     482+                       unsigned long intr_bit; 
     483+                       unsigned int irq_nr; 
     484+                       intr_bit = (31 - rc32434_clz(cp0_cause)); 
     485+                       irq_nr = intr_bit - GROUP0_IRQ_BASE; 
     486+                       printk(" ---> MASKED IRQ %d\n",irq_nr); 
     487+                       cp0_cause &= ~(1 << intr_bit); 
     488+               } 
     489+ 
     490+               return; 
     491+       } 
     492+ 
     493+        
    477494+       switch (mips_machtype) { 
    478495+               case MACH_ARUBA_AP70: 
     
    491508+               case MACH_ARUBA_AP60: 
    492509+               default: 
    493 +                       if (cp0_cause & 0x4000) { 
     510+                       if (cp0_cause & 0x4000) { // 1 << (8 +6) == irq 6 
    494511+                               // Misc Interrupt 
    495512+                               group = 0; 
     
    499516+                               /* handle one misc interrupt at a time */ 
    500517+                               while (pend) { 
    501 +                                       unsigned int intr_bit, irq_nr; 
    502 +                                       intr_bit = pend ^ (pend - 1); 
    503 +                                       irq_nr = ((31 - rc32434_clz(pend)) + GROUP0_IRQ_BASE); 
     518+                                       unsigned long intr_bit; 
     519+                                       unsigned int irq_nr; 
     520+ 
     521+                                       intr_bit = (31 - rc32434_clz(pend)); 
     522+                                       irq_nr = intr_bit + GROUP0_IRQ_BASE; 
     523+ 
    504524+                                       do_IRQ(irq_nr, regs); 
    505 +                                       pend &= ~intr_bit; 
     525+                                       pend &= ~(1 << intr_bit); 
    506526+                               } 
    507527+                       } 
    508 +                       if (cp0_cause & 0x3c00) { 
     528+                       if (cp0_cause & 0x3c00) { // irq 2-5 
    509529+                               while (cp0_cause) { 
    510 +                                       unsigned int intr_bit, irq_nr; 
    511 +                                       intr_bit = cp0_cause ^ (cp0_cause - 1); 
    512 +                                       irq_nr = ((31 - rc32434_clz(cp0_cause)) - GROUP0_IRQ_BASE); 
     530+                                       unsigned long intr_bit; 
     531+                                       unsigned int irq_nr; 
     532+ 
     533+                                       intr_bit = (31 - rc32434_clz(cp0_cause)); 
     534+                                       irq_nr = intr_bit - GROUP0_IRQ_BASE; 
     535+ 
    513536+                                       do_IRQ(irq_nr, regs); 
    514 +                                       cp0_cause &= ~intr_bit; 
     537+                                       cp0_cause &= ~(1 << intr_bit); 
    515538+                               } 
    516539+                       } 
Note: See TracChangeset for help on using the changeset viewer.