Changeset 20286


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

ar71xx: optimize register access in irq.c

File:
1 edited

Legend:

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

    r20281 r20286  
    2424static void ar71xx_gpio_irq_dispatch(void) 
    2525{ 
     26        void __iomem *base = ar71xx_gpio_base; 
    2627        u32 pending; 
    2728 
    28         pending = ar71xx_gpio_rr(GPIO_REG_INT_PENDING) 
    29                 & ar71xx_gpio_rr(GPIO_REG_INT_ENABLE); 
     29        pending = __raw_readl(base + GPIO_REG_INT_PENDING) & 
     30                  __raw_readl(base + GPIO_REG_INT_ENABLE); 
    3031 
    3132        if (pending) 
     
    3738static void ar71xx_gpio_irq_unmask(unsigned int irq) 
    3839{ 
     40        void __iomem *base = ar71xx_gpio_base; 
     41        u32 t; 
     42 
    3943        irq -= AR71XX_GPIO_IRQ_BASE; 
    40         ar71xx_gpio_wr(GPIO_REG_INT_ENABLE, 
    41                         ar71xx_gpio_rr(GPIO_REG_INT_ENABLE) | (1 << irq)); 
    42  
    43         /* flush write */ 
    44         ar71xx_gpio_rr(GPIO_REG_INT_ENABLE); 
     44 
     45        t = __raw_readl(base + GPIO_REG_INT_ENABLE); 
     46        __raw_writel(t | (1 << irq), base + GPIO_REG_INT_ENABLE); 
     47 
     48        /* flush write */ 
     49        (void) __raw_readl(base + GPIO_REG_INT_ENABLE); 
    4550} 
    4651 
    4752static void ar71xx_gpio_irq_mask(unsigned int irq) 
    4853{ 
     54        void __iomem *base = ar71xx_gpio_base; 
     55        u32 t; 
     56 
    4957        irq -= AR71XX_GPIO_IRQ_BASE; 
    50         ar71xx_gpio_wr(GPIO_REG_INT_ENABLE, 
    51                         ar71xx_gpio_rr(GPIO_REG_INT_ENABLE) & ~(1 << irq)); 
    52  
    53         /* flush write */ 
    54         ar71xx_gpio_rr(GPIO_REG_INT_ENABLE); 
     58 
     59        t = __raw_readl(base + GPIO_REG_INT_ENABLE); 
     60        __raw_writel(t & ~(1 << irq), base + GPIO_REG_INT_ENABLE); 
     61 
     62        /* flush write */ 
     63        (void) __raw_readl(base + GPIO_REG_INT_ENABLE); 
    5564} 
    5665 
     
    8392static void __init ar71xx_gpio_irq_init(void) 
    8493{ 
     94        void __iomem *base = ar71xx_gpio_base; 
    8595        int i; 
    8696 
    87         ar71xx_gpio_wr(GPIO_REG_INT_ENABLE, 0); 
    88         ar71xx_gpio_wr(GPIO_REG_INT_PENDING, 0); 
     97        __raw_writel(0, base + GPIO_REG_INT_ENABLE); 
     98        __raw_writel(0, base + GPIO_REG_INT_PENDING); 
    8999 
    90100        /* setup type of all GPIO interrupts to level sensitive */ 
    91         ar71xx_gpio_wr(GPIO_REG_INT_TYPE, GPIO_INT_ALL); 
     101        __raw_writel(GPIO_INT_ALL, base + GPIO_REG_INT_TYPE); 
    92102 
    93103        /* setup polarity of all GPIO interrupts to active high */ 
    94         ar71xx_gpio_wr(GPIO_REG_INT_POLARITY, GPIO_INT_ALL); 
     104        __raw_writel(GPIO_INT_ALL, base + GPIO_REG_INT_POLARITY); 
    95105 
    96106        for (i = AR71XX_GPIO_IRQ_BASE; 
     
    141151static void ar71xx_misc_irq_unmask(unsigned int irq) 
    142152{ 
     153        void __iomem *base = ar71xx_reset_base; 
     154        u32 t; 
     155 
    143156        irq -= AR71XX_MISC_IRQ_BASE; 
    144         ar71xx_reset_wr(AR71XX_RESET_REG_MISC_INT_ENABLE, 
    145                 ar71xx_reset_rr(AR71XX_RESET_REG_MISC_INT_ENABLE) | (1 << irq)); 
    146  
    147         /* flush write */ 
    148         ar71xx_reset_rr(AR71XX_RESET_REG_MISC_INT_ENABLE); 
     157 
     158        t = __raw_readl(base + AR71XX_RESET_REG_MISC_INT_ENABLE); 
     159        __raw_writel(t | (1 << irq), base + AR71XX_RESET_REG_MISC_INT_ENABLE); 
     160 
     161        /* flush write */ 
     162        (void) __raw_readl(base + AR71XX_RESET_REG_MISC_INT_ENABLE); 
    149163} 
    150164 
    151165static void ar71xx_misc_irq_mask(unsigned int irq) 
    152166{ 
     167        void __iomem *base = ar71xx_reset_base; 
     168        u32 t; 
     169 
    153170        irq -= AR71XX_MISC_IRQ_BASE; 
    154         ar71xx_reset_wr(AR71XX_RESET_REG_MISC_INT_ENABLE, 
    155                 ar71xx_reset_rr(AR71XX_RESET_REG_MISC_INT_ENABLE) & ~(1 << irq)); 
    156  
    157         /* flush write */ 
    158         ar71xx_reset_rr(AR71XX_RESET_REG_MISC_INT_ENABLE); 
     171 
     172        t = __raw_readl(base + AR71XX_RESET_REG_MISC_INT_ENABLE); 
     173        __raw_writel(t & ~(1 << irq), base + AR71XX_RESET_REG_MISC_INT_ENABLE); 
     174 
     175        /* flush write */ 
     176        (void) __raw_readl(base + AR71XX_RESET_REG_MISC_INT_ENABLE); 
    159177} 
    160178 
    161179static void ar724x_misc_irq_ack(unsigned int irq) 
    162180{ 
     181        void __iomem *base = ar71xx_reset_base; 
     182        u32 t; 
     183 
    163184        irq -= AR71XX_MISC_IRQ_BASE; 
    164         ar71xx_reset_wr(AR71XX_RESET_REG_MISC_INT_STATUS, 
    165                 ar71xx_reset_rr(AR71XX_RESET_REG_MISC_INT_STATUS) & ~(1 << irq)); 
    166  
    167         /* flush write */ 
    168         ar71xx_reset_rr(AR71XX_RESET_REG_MISC_INT_STATUS); 
     185 
     186        t = __raw_readl(base + AR71XX_RESET_REG_MISC_INT_STATUS); 
     187        __raw_writel(t & ~(1 << irq), base + AR71XX_RESET_REG_MISC_INT_STATUS); 
     188 
     189        /* flush write */ 
     190        (void) __raw_readl(base + AR71XX_RESET_REG_MISC_INT_STATUS); 
    169191} 
    170192 
     
    182204static void __init ar71xx_misc_irq_init(void) 
    183205{ 
     206        void __iomem *base = ar71xx_reset_base; 
    184207        int i; 
    185208 
    186         ar71xx_reset_wr(AR71XX_RESET_REG_MISC_INT_ENABLE, 0); 
    187         ar71xx_reset_wr(AR71XX_RESET_REG_MISC_INT_STATUS, 0); 
     209        __raw_writel(0, base + AR71XX_RESET_REG_MISC_INT_ENABLE); 
     210        __raw_writel(0, base + AR71XX_RESET_REG_MISC_INT_STATUS); 
    188211 
    189212        if (ar71xx_soc == AR71XX_SOC_AR7240) 
Note: See TracChangeset for help on using the changeset viewer.