Changeset 29107


Ignore:
Timestamp:
2011-11-14T12:49:51+01:00 (5 years ago)
Author:
juhosg
Message:

ar71xx: use a dummy irq chip for WMAC and PCIe irq hadling

Location:
trunk/target/linux/ar71xx/files/arch/mips
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/ar71xx/files/arch/mips/ar71xx/dev-ar9xxx-wmac.c

    r27083 r29107  
    115115        ar9xxx_wmac_resources[0].start = AR934X_WMAC_BASE; 
    116116        ar9xxx_wmac_resources[0].end = AR934X_WMAC_BASE + AR934X_WMAC_SIZE - 1; 
     117        ar9xxx_wmac_resources[1].start = AR934X_IP2_IRQ_WMAC; 
     118        ar9xxx_wmac_resources[1].start = AR934X_IP2_IRQ_WMAC; 
    117119        if (ar71xx_ref_freq == MHZ_25) 
    118120                ar9xxx_wmac_data.is_clk_25mhz = true; 
  • trunk/target/linux/ar71xx/files/arch/mips/ar71xx/irq.c

    r28182 r29107  
    232232} 
    233233 
     234static void ar934x_ip2_irq_dispatch(unsigned int irq, struct irq_desc *desc) 
     235{ 
     236        u32 status; 
     237 
     238        disable_irq_nosync(irq); 
     239 
     240        status = ar71xx_reset_rr(AR934X_RESET_REG_PCIE_WMAC_INT_STATUS); 
     241 
     242        if (status & AR934X_PCIE_WMAC_INT_PCIE_ALL) 
     243                generic_handle_irq(AR934X_IP2_IRQ_PCIE); 
     244 
     245        else if (status & AR934X_PCIE_WMAC_INT_WMAC_ALL) 
     246                generic_handle_irq(AR934X_IP2_IRQ_WMAC); 
     247 
     248        else 
     249                spurious_interrupt(); 
     250 
     251        enable_irq(irq); 
     252} 
     253 
     254static void ar934x_ip2_irq_init(void) 
     255{ 
     256        int i; 
     257 
     258        for (i = AR934X_IP2_IRQ_BASE; 
     259             i < AR934X_IP2_IRQ_BASE + AR934X_IP2_IRQ_COUNT; i++) 
     260                irq_set_chip_and_handler(i, &dummy_irq_chip, 
     261                                         handle_level_irq); 
     262 
     263        irq_set_chained_handler(AR71XX_CPU_IRQ_IP2, ar934x_ip2_irq_dispatch); 
     264} 
     265 
     266 
    234267/* 
    235268 * The IP2/IP3 lines are tied to a PCI/WMAC/USB device. Drivers for 
     
    373406        ar71xx_misc_irq_init(); 
    374407 
     408        if (ar71xx_soc == AR71XX_SOC_AR9341 || 
     409            ar71xx_soc == AR71XX_SOC_AR9342 || 
     410            ar71xx_soc == AR71XX_SOC_AR9344) 
     411                ar934x_ip2_irq_init(); 
     412 
    375413        cp0_perfcount_irq = AR71XX_MISC_IRQ_PERFC; 
    376414 
  • trunk/target/linux/ar71xx/files/arch/mips/ar71xx/pci.c

    r29105 r29107  
    8282        case AR71XX_SOC_AR7241: 
    8383        case AR71XX_SOC_AR7242: 
     84                ret = ar724x_pcibios_init(AR71XX_CPU_IRQ_IP2); 
     85                break; 
     86 
    8487        case AR71XX_SOC_AR9342: 
    8588        case AR71XX_SOC_AR9344: 
    86                 ret = ar724x_pcibios_init(AR71XX_CPU_IRQ_IP2); 
     89                ret = ar724x_pcibios_init(AR934X_IP2_IRQ_PCIE); 
    8790                break; 
    8891 
  • trunk/target/linux/ar71xx/files/arch/mips/include/asm/mach-ar71xx/ar71xx.h

    r29106 r29107  
    9090#define AR71XX_GPIO_IRQ_COUNT   32 
    9191#define AR71XX_PCI_IRQ_BASE     72 
    92 #define AR71XX_PCI_IRQ_COUNT    8 
     92#define AR71XX_PCI_IRQ_COUNT    6 
     93#define AR934X_IP2_IRQ_BASE     78 
     94#define AR934X_IP2_IRQ_COUNT    2 
    9395 
    9496#define AR71XX_CPU_IRQ_IP2      (AR71XX_CPU_IRQ_BASE + 2) 
     
    119121#define AR71XX_PCI_IRQ_DEV2     (AR71XX_PCI_IRQ_BASE + 2) 
    120122#define AR71XX_PCI_IRQ_CORE     (AR71XX_PCI_IRQ_BASE + 4) 
     123 
     124#define AR934X_IP2_IRQ_WMAC     (AR934X_IP2_IRQ_BASE + 0) 
     125#define AR934X_IP2_IRQ_PCIE     (AR934X_IP2_IRQ_BASE + 1) 
    121126 
    122127extern u32 ar71xx_ahb_freq; 
Note: See TracChangeset for help on using the changeset viewer.