Ignore:
Timestamp:
2011-06-29T10:57:28+02:00 (5 years ago)
Author:
juhosg
Message:

ar71xx: use separate handlers for IP2 interrupts

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/ar71xx/files/arch/mips/ar71xx/irq.c

    r27306 r27307  
    2424#include <asm/mach-ar71xx/ar71xx.h> 
    2525 
    26 static int ip2_flush_reg; 
    27  
    2826static void ar71xx_gpio_irq_dispatch(void) 
    2927{ 
     
    250248} 
    251249 
     250/* 
     251 * The IP2 line is tied to a PCI/WMAC device. Drivers for these 
     252 * devices typically allocate coherent DMA memory for the descriptor 
     253 * ring, however the DMA controller may still have some unsynchronized 
     254 * data in the FIFO. 
     255 * Issue a flush in the handlers to ensure that the driver sees 
     256 * the update. 
     257 */ 
     258static void ar71xx_ip2_handler(void) 
     259{ 
     260        ar71xx_ddr_flush(AR71XX_DDR_REG_FLUSH_PCI); 
     261        do_IRQ(AR71XX_CPU_IRQ_IP2); 
     262} 
     263 
     264static void ar724x_ip2_handler(void) 
     265{ 
     266        ar71xx_ddr_flush(AR724X_DDR_REG_FLUSH_PCIE); 
     267        do_IRQ(AR71XX_CPU_IRQ_IP2); 
     268} 
     269 
     270static void ar913x_ip2_handler(void) 
     271{ 
     272        ar71xx_ddr_flush(AR91XX_DDR_REG_FLUSH_WMAC); 
     273        do_IRQ(AR71XX_CPU_IRQ_IP2); 
     274} 
     275 
     276static void ar933x_ip2_handler(void) 
     277{ 
     278        ar71xx_ddr_flush(AR933X_DDR_REG_FLUSH_WMAC); 
     279        do_IRQ(AR71XX_CPU_IRQ_IP2); 
     280} 
     281 
     282static void ar934x_ip2_handler(void) 
     283{ 
     284        ar71xx_ddr_flush(AR934X_DDR_REG_FLUSH_PCIE); 
     285        do_IRQ(AR71XX_CPU_IRQ_IP2); 
     286} 
     287 
     288static void (*ip2_handler)(void); 
     289 
    252290asmlinkage void plat_irq_dispatch(void) 
    253291{ 
     
    259297                do_IRQ(AR71XX_CPU_IRQ_TIMER); 
    260298 
    261         else if (pending & STATUSF_IP2) { 
    262                 /* 
    263                  * This IRQ is meant for a PCI device. Drivers for PCI devices 
    264                  * typically allocate coherent DMA memory for the descriptor 
    265                  * ring, however the DMA controller may still have some 
    266                  * unsynchronized data in the FIFO. 
    267                  * Issue a flush here to ensure that the driver sees the update. 
    268                  */ 
    269                 ar71xx_ddr_flush(ip2_flush_reg); 
    270                 do_IRQ(AR71XX_CPU_IRQ_IP2); 
    271         } 
     299        else if (pending & STATUSF_IP2) 
     300                ip2_handler(); 
    272301 
    273302        else if (pending & STATUSF_IP4) 
     
    283312                ar71xx_misc_irq_dispatch(); 
    284313 
    285         else 
    286                 spurious_interrupt(); 
     314        spurious_interrupt(); 
    287315} 
    288316 
     
    293321        case AR71XX_SOC_AR7141: 
    294322        case AR71XX_SOC_AR7161: 
    295                 ip2_flush_reg = AR71XX_DDR_REG_FLUSH_PCI; 
     323                ip2_handler = ar71xx_ip2_handler; 
    296324                break; 
    297325 
     
    299327        case AR71XX_SOC_AR7241: 
    300328        case AR71XX_SOC_AR7242: 
    301                 ip2_flush_reg = AR724X_DDR_REG_FLUSH_PCIE; 
     329                ip2_handler = ar724x_ip2_handler; 
    302330                break; 
    303331 
    304332        case AR71XX_SOC_AR9130: 
    305333        case AR71XX_SOC_AR9132: 
    306                 ip2_flush_reg = AR91XX_DDR_REG_FLUSH_WMAC; 
     334                ip2_handler = ar913x_ip2_handler; 
    307335                break; 
    308336 
    309337        case AR71XX_SOC_AR9330: 
    310338        case AR71XX_SOC_AR9331: 
    311                 ip2_flush_reg = AR933X_DDR_REG_FLUSH_WMAC; 
     339                ip2_handler = ar933x_ip2_handler; 
    312340                break; 
    313341 
     
    315343        case AR71XX_SOC_AR9342: 
    316344        case AR71XX_SOC_AR9344: 
    317                 ip2_flush_reg = AR934X_DDR_REG_FLUSH_PCIE; 
     345                ip2_handler = ar934x_ip2_handler; 
    318346                break; 
    319347 
Note: See TracChangeset for help on using the changeset viewer.