Changeset 20285


Ignore:
Timestamp:
2010-03-18T20:19:10+01:00 (8 years ago)
Author:
juhosg
Message:

ar71xx: optimize register access in ar724x_pci.c

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/ar71xx/files/arch/mips/pci/pci-ar724x.c

    r20284 r20285  
    3636static DEFINE_SPINLOCK(ar724x_pci_lock); 
    3737 
    38 static inline void ar724x_pci_wr(unsigned reg, u32 val) 
    39 { 
    40         __raw_writel(val, ar724x_pci_ctrl_base + reg); 
    41         (void) __raw_readl(ar724x_pci_ctrl_base + reg); 
    42 } 
    43  
    44 static inline void ar724x_pci_wr_nf(unsigned reg, u32 val) 
    45 { 
    46         __raw_writel(val, ar724x_pci_ctrl_base + reg); 
    47 } 
    48  
    49 static inline u32 ar724x_pci_rr(unsigned reg) 
    50 { 
    51         return __raw_readl(ar724x_pci_ctrl_base + reg); 
    52 } 
    53  
    5438static void ar724x_pci_read(void __iomem *base, int where, int size, u32 *value) 
    5539{ 
     
    234218static int __init ar724x_pci_setup(void) 
    235219{ 
     220        void __iomem *base = ar724x_pci_ctrl_base; 
    236221        u32 t; 
    237222 
     
    244229        ar724x_pci_write(ar724x_pci_localcfg_base, 0x24, 4, 0x1ff01000); 
    245230 
    246         t = ar724x_pci_rr(AR724X_PCI_REG_RESET); 
     231        t = __raw_readl(base + AR724X_PCI_REG_RESET); 
    247232        if (t != 0x7) { 
    248233                udelay(100000); 
    249                 ar724x_pci_wr_nf(AR724X_PCI_REG_RESET, 0); 
     234                __raw_writel(0, base + AR724X_PCI_REG_RESET); 
    250235                udelay(100); 
    251                 ar724x_pci_wr_nf(AR724X_PCI_REG_RESET, 4); 
     236                __raw_writel(4, base + AR724X_PCI_REG_RESET); 
    252237                udelay(100000); 
    253238        } 
    254239 
    255         ar724x_pci_wr(AR724X_PCI_REG_APP, AR724X_PCI_APP_LTSSM_ENABLE); 
     240        __raw_writel(AR724X_PCI_APP_LTSSM_ENABLE, base + AR724X_PCI_REG_APP); 
     241        /* flush write */ 
     242        (void) __raw_readl(base + AR724X_PCI_REG_APP); 
    256243        udelay(1000); 
    257244 
    258         t = ar724x_pci_rr(AR724X_PCI_REG_APP); 
     245        t = __raw_readl(base + AR724X_PCI_REG_APP); 
    259246        if ((t & AR724X_PCI_APP_LTSSM_ENABLE) == 0x0) { 
    260247                printk(KERN_WARNING "PCI: no PCIe module found\n"); 
     
    267254static void ar724x_pci_irq_handler(unsigned int irq, struct irq_desc *desc) 
    268255{ 
     256        void __iomem *base = ar724x_pci_ctrl_base; 
    269257        u32 pending; 
    270258 
    271         pending = ar724x_pci_rr(AR724X_PCI_REG_INT_STATUS) & 
    272                   ar724x_pci_rr(AR724X_PCI_REG_INT_MASK); 
     259        pending = __raw_readl(base + AR724X_PCI_REG_INT_STATUS) & 
     260                  __raw_readl(base + AR724X_PCI_REG_INT_MASK); 
    273261 
    274262        if (pending & AR724X_PCI_INT_DEV0) 
     
    281269static void ar724x_pci_irq_unmask(unsigned int irq) 
    282270{ 
     271        void __iomem *base = ar724x_pci_ctrl_base; 
     272        u32 t; 
     273 
    283274        switch (irq) { 
    284275        case AR71XX_PCI_IRQ_DEV0: 
    285276                irq -= AR71XX_PCI_IRQ_BASE; 
    286                 ar724x_pci_wr(AR724X_PCI_REG_INT_MASK, 
    287                               ar724x_pci_rr(AR724X_PCI_REG_INT_MASK) | 
    288                                             AR724X_PCI_INT_DEV0); 
     277 
     278                t = __raw_readl(base + AR724X_PCI_REG_INT_MASK); 
     279                __raw_writel(t | AR724X_PCI_INT_DEV0, 
     280                             base + AR724X_PCI_REG_INT_MASK); 
    289281                /* flush write */ 
    290                 ar724x_pci_rr(AR724X_PCI_REG_INT_MASK); 
     282                (void) __raw_readl(base + AR724X_PCI_REG_INT_MASK); 
    291283        } 
    292284} 
     
    294286static void ar724x_pci_irq_mask(unsigned int irq) 
    295287{ 
     288        void __iomem *base = ar724x_pci_ctrl_base; 
     289        u32 t; 
     290 
    296291        switch (irq) { 
    297292        case AR71XX_PCI_IRQ_DEV0: 
    298293                irq -= AR71XX_PCI_IRQ_BASE; 
    299                 ar724x_pci_wr(AR724X_PCI_REG_INT_MASK, 
    300                               ar724x_pci_rr(AR724X_PCI_REG_INT_MASK) & 
    301                                             ~AR724X_PCI_INT_DEV0); 
     294 
     295                t = __raw_readl(base + AR724X_PCI_REG_INT_MASK); 
     296                __raw_writel(t & ~AR724X_PCI_INT_DEV0, 
     297                             base + AR724X_PCI_REG_INT_MASK); 
     298 
    302299                /* flush write */ 
    303                 ar724x_pci_rr(AR724X_PCI_REG_INT_MASK); 
    304  
    305                 ar724x_pci_wr(AR724X_PCI_REG_INT_STATUS, 
    306                               ar724x_pci_rr(AR724X_PCI_REG_INT_STATUS) | 
    307                                             AR724X_PCI_INT_DEV0); 
     300                (void) __raw_readl(base + AR724X_PCI_REG_INT_MASK); 
     301 
     302                t = __raw_readl(base + AR724X_PCI_REG_INT_STATUS); 
     303                __raw_writel(t | AR724X_PCI_INT_DEV0, 
     304                             base + AR724X_PCI_REG_INT_STATUS); 
     305 
    308306                /* flush write */ 
    309                 ar724x_pci_rr(AR724X_PCI_REG_INT_STATUS); 
     307                (void) __raw_readl(base + AR724X_PCI_REG_INT_STATUS); 
    310308        } 
    311309} 
     
    320318static void __init ar724x_pci_irq_init(void) 
    321319{ 
     320        void __iomem *base = ar724x_pci_ctrl_base; 
    322321        u32 t; 
    323322        int i; 
     
    329328        } 
    330329 
    331         ar724x_pci_wr(AR724X_PCI_REG_INT_MASK, 0); 
    332         ar724x_pci_wr(AR724X_PCI_REG_INT_STATUS, 0); 
     330        __raw_writel(0, base + AR724X_PCI_REG_INT_MASK); 
     331        __raw_writel(0, base + AR724X_PCI_REG_INT_STATUS); 
    333332 
    334333        for (i = AR71XX_PCI_IRQ_BASE; 
Note: See TracChangeset for help on using the changeset viewer.